From adc8eb4f1ad7faa96b6fb7c7af912d4066affa61 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:41:24 +0300 Subject: [PATCH 001/153] equalises `screech.ogg` (#86818) ## About The Pull Request pruned higher frequencies of the sound to make it less jarring on the ears: ### Before: https://github.com/user-attachments/assets/21387908-bf2f-4f34-8c39-f724b3f2be17 ### After: https://github.com/user-attachments/assets/9ced7b0e-e03c-4ff7-801a-34254e0273bd ## Why It's Good For The Game higher frequency sounds hurt the ears, this should make it better. ## Changelog :cl: grungussuss sound: pruned higher frequencies from the resonant shriek ability sound, making it lighter on the ears /:cl: --- sound/effects/screech.ogg | Bin 18256 -> 28919 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sound/effects/screech.ogg b/sound/effects/screech.ogg index b90f612621e7bb253c55be8d614373ba1549237d..f4adab5e01fd9d8cba6391bc9da26f78f2c52ea4 100644 GIT binary patch literal 28919 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 Date: Sun, 22 Sep 2024 15:41:44 +0000 Subject: [PATCH 002/153] Automatic changelog for PR #86818 [ci skip] --- html/changelogs/AutoChangeLog-pr-86818.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86818.yml diff --git a/html/changelogs/AutoChangeLog-pr-86818.yml b/html/changelogs/AutoChangeLog-pr-86818.yml new file mode 100644 index 0000000000000..5cb5575cb8c84 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86818.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "pruned higher frequencies from the resonant shriek ability sound, making it lighter on the ears" \ No newline at end of file From 3853bb5a77f91dd2addbfc03d53cc93f97e497a1 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:47:33 +0300 Subject: [PATCH 003/153] replace magma.ogg with a new sound (#86821) ## About The Pull Request closes https://github.com/tgstation/tgstation/issues/68437 ### comparison: https://github.com/user-attachments/assets/196b6b8c-988d-4736-8e00-e7e8d8c89ca3 https://github.com/user-attachments/assets/e78a1c6a-43ba-4cf1-abb5-9dda2a9d05c4 ## Why It's Good For The Game This is better. ## Changelog :cl: grungussuss sound: lavaland magma ambience has been changed /:cl: --- sound/ambience/attribution.txt | 1 + sound/ambience/magma.ogg | Bin 278123 -> 273569 bytes 2 files changed, 1 insertion(+) create mode 100644 sound/ambience/attribution.txt 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/magma.ogg b/sound/ambience/magma.ogg index 415c62966fcc46ce24da0c3fc5e8883471ab92f5..e461801f9aead678007edad14563c8c9e2791e9e 100644 GIT binary patch literal 273569 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 U%DMaScRA5LHPpR^tTT}R1H~h(`Tzg` From d1c80c591f8566244e48d600e0f5e1738bd78076 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:47:52 +0000 Subject: [PATCH 004/153] Automatic changelog for PR #86821 [ci skip] --- html/changelogs/AutoChangeLog-pr-86821.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86821.yml diff --git a/html/changelogs/AutoChangeLog-pr-86821.yml b/html/changelogs/AutoChangeLog-pr-86821.yml new file mode 100644 index 0000000000000..e01bbc22a7967 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86821.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "lavaland magma ambience has been changed" \ No newline at end of file From ccbad770d64e2984f0ecb3e71aafdfd9d560d97d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:57:36 +0200 Subject: [PATCH 005/153] Build(deps): Bump JamesIves/github-pages-deploy-action from 3.7.1 to 4.6.4 (#86803) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 3.7.1 to 4.6.4.
Commits
  • 920cbb3 Deploy Production Code for Commit 2323e0195f287f854c36d6aa47e2cebe03989e7c 🚀
  • 2323e01 Merge branch 'dev' into releases/v4
  • 739329c Update lib.ts
  • ab1e83d Update lib.ts
  • 78379c7 Merge branch 'dev' into releases/v4
  • 52f022e chore: format
  • fa0c379 fix: :bug: Properly set default config for usage as node module
  • 361d3f0 build(deps): bump micromatch from 4.0.4 to 4.0.8 (#1679)
  • 90f61c8 build(deps-dev): bump ts-jest from 29.2.2 to 29.2.3 in the misc group (#1649)
  • 6f031e0 build(deps): bump the misc group across 1 directory with 8 updates (#1648)
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=JamesIves/github-pages-deploy-action&package-manager=github_actions&previous-version=3.7.1&new-version=4.6.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jordan Dominion --- .github/workflows/generate_documentation.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 2ffef72218384..40710a9044b74 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -27,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 From d3393ee5e933878356d013bcbcbaf3d1c0abc940 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:58:03 +0200 Subject: [PATCH 006/153] Build(deps): Bump actions/stale from 4 to 9 (#86804) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/stale](https://github.com/actions/stale) from 4 to 9.
Release notes

Sourced from actions/stale's releases.

v9.0.0

Breaking Changes

  1. Action is now stateful: If the action ends because of operations-per-run then the next run will start from the first unprocessed issue skipping the issues processed during the previous run(s). The state is reset when all the issues are processed. This should be considered for scheduling workflow runs.
  2. Version 9 of this action updated the runtime to Node.js 20. All scripts are now run with Node.js 20 instead of Node.js 16 and are affected by any breaking changes between Node.js 16 and 20.

What Else Changed

  1. Performance optimization that removes unnecessary API calls by @​dsame #1033 fixes #792
  2. Logs displaying current github API rate limit by @​dsame #1032 addresses #1029

For more information, please read the action documentation and its section about statefulness

New Contributors

Full Changelog: https://github.com/actions/stale/compare/v8...v9.0.0

v8.0.0

:warning: This version contains breaking changes :warning:

What's Changed

Breaking Changes

  • In this release we prevent scenarios when the build is not interrupted on some exceptions, which led to successful builds when they are supposed to fail

Example

name: 'Remove labels when the issue or PR becomes
stale'
on:
  schedule:
    - cron: '30 1 * * *'

permissions: pull-requests: write

jobs: stale: runs-on: ubuntu-latest steps: - uses: actions/stale@v8 with: labels-to-remove-when-stale: 'label1,label2'

v7.0.0

... (truncated)

Changelog

Sourced from actions/stale's changelog.

Changelog

[7.0.0]

:warning: Breaking change :warning:

[6.0.1]

Update @​actions/core to v1.10.0 (#839)

[6.0.0]

:warning: Breaking change :warning:

Issues/PRs default close-issue-reason is now not_planned(#789)

[5.1.0]

Don't process stale issues right after they're marked stale [Add close-issue-reason option]#764#772 Various dependabot/dependency updates

Commits
  • 28ca103 Upgrade Node to v20 (#1110)
  • b69b346 build(deps-dev): bump @​types/node from 18.16.18 to 20.5.1 (#1079)
  • 88a6f4f build(deps-dev): bump typescript from 5.1.3 to 5.2.2 (#1083)
  • 796531a Merge pull request #1080 from akv-platform/fix-delete-cache
  • 8986f62 Don not try to delete cache if it does not exists
  • cab99b3 fix typo proceeded/processed
  • 184e7af Merge pull request #1064 from actions/dependabot/npm_and_yarn/typescript-esli...
  • 523885c chore: update eslint-plugin, parser and eslint-plugin-jest
  • 2487a1d build(deps-dev): bump @​typescript-eslint/eslint-plugin
  • 60c722e Merge pull request #1063 from actions/dependabot/npm_and_yarn/jest-29.6.2
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/stale&package-manager=github_actions&previous-version=4&new-version=9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 241db03f6e82d..1b268802227af 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -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" From e1d37f521555ad0541793b1abf45ca41b6b3d531 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:58:13 +0200 Subject: [PATCH 007/153] Build(deps): Bump actions/setup-python from 1 to 5 (#86805) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/setup-python](https://github.com/actions/setup-python) from 1 to 5.
Release notes

Sourced from actions/setup-python's releases.

v5.0.0

What's Changed

In scope of this release, we update node version runtime from node16 to node20 (actions/setup-python#772). Besides, we update dependencies to the latest versions.

Full Changelog: https://github.com/actions/setup-python/compare/v4.8.0...v5.0.0

v4.8.0

What's Changed

In scope of this release we added support for GraalPy (actions/setup-python#694). You can use this snippet to set up GraalPy:

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
  with:
    python-version: 'graalpy-22.3'
- run: python my_script.py

Besides, the release contains such changes as:

New Contributors

Full Changelog: https://github.com/actions/setup-python/compare/v4...v4.8.0

v4.7.1

What's Changed

Full Changelog: https://github.com/actions/setup-python/compare/v4...v4.7.1

v4.7.0

In scope of this release, the support for reading python version from pyproject.toml was added (actions/setup-python#669).

      - name: Setup Python
        uses: actions/setup-python@v4
</tr></table>

... (truncated)

Commits
  • f677139 Bump pyinstaller from 3.6 to 5.13.1 in /tests/data (#923)
  • 2bd53f9 Documentation update for caching poetry dependencies (#908)
  • 80b49d3 fix: add arch to cache key (#896)
  • 036a523 Fix: Add .zip extension to Windows package downloads for Expand-Archive C...
  • 04c1311 Fix display of emojis in contributors doc (#899)
  • cb68456 Updated @​iarna/toml version to 3.0.0 (#912)
  • 39cd149 Documentation update for cache (#873)
  • a0d74c0 fix(ci): update all failing workflows (#863)
  • 4eb7dbc Bump braces from 3.0.2 to 3.0.3 (#893)
  • 82c7e63 Documentation changes for avoiding rate limit issues on GHES (#835)
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-python&package-manager=github_actions&previous-version=1&new-version=5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/compile_changelogs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index b3eeeb3fb1e56..aaf01306a806e 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -23,7 +23,7 @@ jobs: - 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' From e93e920ef52f8d08a58e0591414999c4b7cd0c29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:58:23 +0200 Subject: [PATCH 008/153] Build(deps): Bump robinraju/release-downloader from 1.9 to 1.11 (#86806) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [robinraju/release-downloader](https://github.com/robinraju/release-downloader) from 1.9 to 1.11.
Release notes

Sourced from robinraju/release-downloader's releases.

Release Downloader v1.11

What's Changed

Full Changelog: https://github.com/robinraju/release-downloader/compare/v1.10...v1.11

Release Downloader v1.10

What's Changed

New Contributors

Full Changelog: https://github.com/robinraju/release-downloader/compare/v1.9...v1.10

Commits
  • a96f54c Bump typed-rest-client from 1.8.11 to 2.0.1 (#744)
  • 821aec8 Bump tar from 7.1.0 to 7.4.0 (#741)
  • 8e9e67a Bump braces from 3.0.2 to 3.0.3 in the npm_and_yarn group (#737)
  • a3cbfc1 Bump the npm-development group across 1 directory with 7 updates (#742)
  • 2c0dbf1 Bump tar from 7.0.1 to 7.1.0 (#727)
  • 8ecfadf Bump the npm-development group across 1 directory with 4 updates (#730)
  • 8d13112 Bump the npm-development group with 3 updates (#725)
  • 8e6a4e0 Bump @​types/tar from 6.1.12 to 6.1.13 in the npm-development group (#724)
  • 6c76fdd Update project config and dependencies (#723)
  • cb096d8 Fix No assets found in release error (#722)
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=robinraju/release-downloader&package-manager=github_actions&previous-version=1.9&new-version=1.11)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci_suite.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index be752877e6cc9..e65439be57a17 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -76,7 +76,7 @@ jobs: path: tools/icon_cutter/cache key: ${{ runner.os }}-cutter-${{ hashFiles('dependencies.sh') }} - name: Install OpenDream - uses: robinraju/release-downloader@v1.9 + uses: robinraju/release-downloader@v1.11 with: repository: "OpenDreamProject/OpenDream" tag: "latest" From f9d06dce09932201d4934cd63dd1a44afacebe6f Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Sun, 22 Sep 2024 11:59:13 -0400 Subject: [PATCH 009/153] Fix TGS Test (#86840) TGS now does some validation of the access token you give it, which doesn't work well in an actions environment. Just don't give it a token unless absolutely necessary. Private repos can eat shit cause this is AGPL code. --- tools/tgs_test/Program.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/tgs_test/Program.cs b/tools/tgs_test/Program.cs index 9b018be951676..8bc77e9e8e111 100644 --- a/tools/tgs_test/Program.cs +++ b/tools/tgs_test/Program.cs @@ -1,6 +1,6 @@ // Simple app meant to test tgstation's TGS integration given a fresh TGS install with the default account // -// Args: Repository Owner/Name, TGS instance path, TGS API port, Pushed commit hash (For .tgs.yml access), GitHub Token, (OPTIONAL) PR Number +// Args: Repository Owner/Name, TGS instance path, TGS API port, Pushed commit hash (For .tgs.yml access), GitHub Token, (OPTIONAL) PR Number using System.Reflection; using System.Text; @@ -197,8 +197,6 @@ { Origin = new Uri($"http://github.com/{repoSlug}"), UpdateSubmodules = true, - AccessUser = "Testing", - AccessToken = gitHubToken }, default); From 061ba1a59aa1a3fe4a787f72ff46b942d613fea0 Mon Sep 17 00:00:00 2001 From: Likteer <68878861+Likteer@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:13:41 +0200 Subject: [PATCH 010/153] Intentional *scream is audible again, now w/ 5s cooldown (#86782) Removed the only instance of `only_forced_audio = TRUE` in /tg/, replaced with `cooldown = (5 SECONDS)`. The variable is still there in case someone needs it. ## About The Pull Request The variable was introduced in https://github.com/tgstation/tgstation/pull/42216 to prevent it from getting annoying. I discussed this change on the forums, previously assuming it was server config https://tgstation13.org/phpBB/viewtopic.php?f=9&t=37131 and people seemed receptive to the idea, spam being the only concern. ## Why It's Good For The Game There are better ways to prevent spam. Extending the cooldown is more favorable than being blocked completely (this is the treatment cyborg *deathgasp received, which is a longer, more jarring sound). Audible emotes help you grab the attention of others (for better or worse). I genuinely find them amusing at times & they remind me of the person on the other side. There is some limit to play-pretend. These emotes enabled some interactions with players I would not have had otherwise. As long as we stop the spam, it breathes some life into a game full of clicking, pointing at people and typing indicators. ## Changelog :cl: del: Intentional screaming has been unmuted. Now has a 5s cooldown instead. /:cl: --- code/modules/mob/living/carbon/human/emote.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 501f3c782f29b..324c23a531456 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) From ddfb7c3261e93b47e3b5a67af4d211f7b3d2479b Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:14:25 +0200 Subject: [PATCH 011/153] Emergency shuttle console no longer reopens its UI on its own (#86822) ## About The Pull Request Closes #52590 ## Changelog :cl: fix: Emergency shuttle console no longer reopens its UI on its own /:cl: --- code/modules/shuttle/emergency.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 5d2242a614407..c6336d6f38bf2 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 From 42cb1584877e9b826abed05660b437f68aecb4cd Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:14:59 +0200 Subject: [PATCH 012/153] Replaces QDEL_NULL with QDEL_LIST in infective component (#86812) ## About The Pull Request Diseases copy their instances, so they should be cleaned up afterwards Closes #86800 ## Changelog :cl: fix: Fixed infective components not cleaning up disease datums after themselves /:cl: --- code/datums/components/infective.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index 5163ca69dacd9..ecd2f1ff836fd 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -37,7 +37,7 @@ src.weak_infection_chance = weak_infection_chance /datum/component/infective/Destroy() - QDEL_NULL(diseases) + QDEL_LIST(diseases) return ..() /datum/component/infective/RegisterWithParent() From 5c0112c1d518a317d472b586a5e6ec99fc6a4575 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:15:21 +0000 Subject: [PATCH 013/153] Automatic changelog for PR #86782 [ci skip] --- html/changelogs/AutoChangeLog-pr-86782.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86782.yml diff --git a/html/changelogs/AutoChangeLog-pr-86782.yml b/html/changelogs/AutoChangeLog-pr-86782.yml new file mode 100644 index 0000000000000..a092d90f6a487 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86782.yml @@ -0,0 +1,4 @@ +author: "Likteer" +delete-after: True +changes: + - rscdel: "Intentional screaming has been unmuted. Now has a 5s cooldown instead." \ No newline at end of file From 8b3d4953c24783048abd72b6e7aed4c2ea975f2f Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:15:41 +0000 Subject: [PATCH 014/153] Automatic changelog for PR #86822 [ci skip] --- html/changelogs/AutoChangeLog-pr-86822.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86822.yml diff --git a/html/changelogs/AutoChangeLog-pr-86822.yml b/html/changelogs/AutoChangeLog-pr-86822.yml new file mode 100644 index 0000000000000..e55ff82da4013 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86822.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Emergency shuttle console no longer reopens its UI on its own" \ No newline at end of file From a10a06a3be20bb6e5db91d16ebc2b3a596d1035a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:16:07 +0000 Subject: [PATCH 015/153] Automatic changelog for PR #86812 [ci skip] --- html/changelogs/AutoChangeLog-pr-86812.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86812.yml diff --git a/html/changelogs/AutoChangeLog-pr-86812.yml b/html/changelogs/AutoChangeLog-pr-86812.yml new file mode 100644 index 0000000000000..dea7c8ae6b413 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86812.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Fixed infective components not cleaning up disease datums after themselves" \ No newline at end of file From 58f75eadec3684021ef54dfb0657d759f4fabc5b Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:16:13 +0200 Subject: [PATCH 016/153] Express console code refactor, cleanup and fixes (#86634) ## About The Pull Request Rewrites a good chunk of express console code, removing one letter variables, duplicate code and straightening all the staircases with early returns. RIP cooldowns in ui_data() Mapped-in consoles now actually work, as currently they initialize before SSshuttles which results in them having a completely empty packs menu. This is fixed by making them report themselves to SSshuttles which will call package init on them once it itself initializes. Emagging the console will update the prices in the UI, and emagged consoles will try to send at least 1 package instead of requiring the budget to have enough funds to send all 5 pods. Because when you press a button with a price tag on it, you'd expect at least something to happen. Beacons now reset their offsets when anchored because thats been triggering my OCD. Upgrade disks aren't deleted and instead drop when the console is deconstructed. ## Why It's Good For The Game Code is crunchy, stuff is broken, prices aren't displayed correctly when the console is emagged and you'd expect at least something to arrive when you press a button with a price that you can afford. ## Changelog :cl: fix: Mapped in express supply consoles now work instead of displaying an empty UI. fix: 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. /:cl: --- code/controllers/subsystem/shuttle.dm | 6 + code/modules/cargo/expressconsole.dm | 229 ++++++++++-------- code/modules/cargo/supplypod_beacon.dm | 6 +- .../packages/tgui/interfaces/CargoExpress.tsx | 8 +- 4 files changed, 143 insertions(+), 106 deletions(-) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 11a055d292ce2..36171e8fb119f 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) @@ -172,6 +175,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() diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 0a2dcfec4b0f0..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,10 +144,11 @@ 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(.) @@ -131,23 +157,24 @@ 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, 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]" + 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)) @@ -169,60 +196,62 @@ 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/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 2d9a618bb414e..895d12da99a2a 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -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/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) { > - Date: Sun, 22 Sep 2024 20:06:54 +0000 Subject: [PATCH 026/153] Automatic changelog for PR #86605 [ci skip] --- html/changelogs/AutoChangeLog-pr-86605.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86605.yml diff --git a/html/changelogs/AutoChangeLog-pr-86605.yml b/html/changelogs/AutoChangeLog-pr-86605.yml new file mode 100644 index 0000000000000..17ee60263e3cd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86605.yml @@ -0,0 +1,6 @@ +author: "Bisar" +delete-after: True +changes: + - 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!" \ No newline at end of file From b9fad924127052c701f44e6fb99efc5f49032fbb Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sun, 22 Sep 2024 22:59:57 +0200 Subject: [PATCH 027/153] Adds achievement-unlockables hats for orbies (feat. big rollies from hacked cigarette vending machines) (#86098) ## About The Pull Request So, do you remember orbies, those cutesy virtual PDA pets from that PR that Ben made roughly six months ago before moving on his next project, leaving them to be probably forgotten in a near future/present/past? Yeah, personally I never played around, however I recalled that they do have customizable virtual hats, which can be selected from a dropdown in the UI, and I thought that it would be a perfect target for some achievement-related content, as they're totally cosmetic that provides no gameplay advantage nor affects balance in no way whatsoever. I cannot sit well with cheevos being purely an end to itself, that's the reason this PR exists. The new additions to orbies hats, and their respective required achievements are: - The fishing hat (Legendary Fisher) - A huge-ass rollie (Unhealthy Snacks) (yeah, it isn't exactly a hat but the code in no way assume that the item has to be a hat, beside vars named like that for the sake of convenience) - A tape wizard hat (Archmage) - An energy cakehat (Very Important Piscis) - A bounty hunter cowboy hat (Hot Damn!) - A fancy crown (Outdebted) The huge-ass rollie (called fat dart) in the game, is a new cigarette, rarely found in hacked cigarette vending machines. It's obviously a reference to that Ralsei meme from 3 years ago or so but I personally don't care, I just wanted to give an excessively big cigarette to orbies to symbolize the proposterous accomplishment of eating 500 cigarettes in a single round without dying from nicotine OD less than halfway through, but since orbie hats use actual items are references for their appearance, I found myself obliged to add one to the code. Overall, the fat dart comes from an old PR on Citadel, though I had to resprite it myself. Here's a lazy collage of the hats. For some reason unbeknownst to me, the hats are horizontally squished. I need to ask Ben why he did them this way when Orbies' heads are as wide as a rugby ball. ![immagine](https://github.com/user-attachments/assets/f1b0e28f-1fb5-4678-bc32-fe38ca04a1b6) ## Why It's Good For The Game Simple, extra cosmetic stuff for a simple feature that's as relevant as playing around with plushes. ## Changelog :cl: add: Added more customizable options to PDA virtual pets, which can be unlocked by completing achievements. add: Added a fat dart that can be rarely found in hacked cigarette vending machines. /:cl: --- code/game/objects/items/cigarettes.dm | 22 +++++ code/modules/clothing/head/cakehat.dm | 9 +- .../mob/living/basic/pets/orbie/orbie.dm | 1 + .../file_system/programs/virtual_pet.dm | 81 ++++++++++++++---- code/modules/vending/cigarette.dm | 1 + icons/mob/clothing/mask.dmi | Bin 48752 -> 51413 bytes icons/obj/cigarettes.dmi | Bin 20788 -> 21891 bytes 7 files changed, 95 insertions(+), 19 deletions(-) diff --git a/code/game/objects/items/cigarettes.dm b/code/game/objects/items/cigarettes.dm index 168817bf1ff9f..6722bf07ed3bc 100644 --- a/code/game/objects/items/cigarettes.dm +++ b/code/game/objects/items/cigarettes.dm @@ -132,6 +132,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 @@ -677,6 +678,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 // //////////// diff --git a/code/modules/clothing/head/cakehat.dm b/code/modules/clothing/head/cakehat.dm index 1fc0fa0b05b50..d8dc0c0e7a044 100644 --- a/code/modules/clothing/head/cakehat.dm +++ b/code/modules/clothing/head/cakehat.dm @@ -57,7 +57,7 @@ /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' @@ -68,6 +68,13 @@ 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) to_chat(user, span_warning("You turn on \the [src].")) 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/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index 8f1eef074d46a..ce7bb949b7b59 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) @@ -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() @@ -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)) diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 902e34e04f06c..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, diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index ac40c153dd78429419d7e21b98340f61eb0009d1..4ac9143e7a834a7c25f715cba4b0fed8949e7cb5 100644 GIT binary patch literal 51413 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 diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 1be85df6c156d5c91852fd9a6259b3c07c902dff..c9e9186b7a85349e1cdbb6c4c72b8793afd81b0a 100644 GIT binary patch literal 21891 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 literal 20788 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 ARR910 From 6b4de752e3912603679f6baece564e877c7c8666 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 21:00:17 +0000 Subject: [PATCH 028/153] Automatic changelog for PR #86098 [ci skip] --- html/changelogs/AutoChangeLog-pr-86098.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86098.yml diff --git a/html/changelogs/AutoChangeLog-pr-86098.yml b/html/changelogs/AutoChangeLog-pr-86098.yml new file mode 100644 index 0000000000000..c5848dfaaa5a9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86098.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - 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." \ No newline at end of file From a2f3e5f1b9f2d17ab1cebd4f28f4d98fafb03ac8 Mon Sep 17 00:00:00 2001 From: EnterTheJake <102721711+EnterTheJake@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:35:24 +0200 Subject: [PATCH 029/153] [NO GBP] Nerfs Void Conduit. (#86808) ## About The Pull Request Void conduit has been given slightly less range and the pulse affects only structures within LoS. ## Why It's Good For The Game I tested this skill in game a couple of times, it's admittedly a bit overtuned, the pulse ignoring LoS leads to a lot of cheesy scenarios, like RCDing walls all around the portal while being able to space multiple areas. It's still a very good spell, just less insane. ## Changelog :cl: balance: Void Conduit has less range and no longer ignores Line of Sight. /:cl: --- .../antagonists/heretic/magic/void_conduit.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/heretic/magic/void_conduit.dm b/code/modules/antagonists/heretic/magic/void_conduit.dm index 07ca0cbe2ab0f..bd7ba950dce89 100644 --- a/code/modules/antagonists/heretic/magic/void_conduit.dm +++ b/code/modules/antagonists/heretic/magic/void_conduit.dm @@ -33,7 +33,7 @@ ///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 = 12 + var/effect_range = 8 ///id of the deletion timer var/timerid ///Audio loop for the rift being alive @@ -44,7 +44,12 @@ soundloop = new(src, start_immediately = TRUE) timerid = QDEL_IN_STOPPABLE(src, 1 MINUTES) START_PROCESSING(SSobj, src) - for(var/turf/affected_turf as anything in RANGE_TURFS(effect_range, 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) @@ -61,12 +66,13 @@ 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 RANGE_TURFS(effect_range, loc)) + 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() From 53dbf2e14c1b103c461cde9d9f305275a23f26c0 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 23:38:55 +0000 Subject: [PATCH 030/153] Automatic changelog for PR #86808 [ci skip] --- html/changelogs/AutoChangeLog-pr-86808.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86808.yml diff --git a/html/changelogs/AutoChangeLog-pr-86808.yml b/html/changelogs/AutoChangeLog-pr-86808.yml new file mode 100644 index 0000000000000..1191192c9e598 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86808.yml @@ -0,0 +1,4 @@ +author: "EnterTheJake" +delete-after: True +changes: + - balance: "Void Conduit has less range and no longer ignores Line of Sight." \ No newline at end of file From 6cb8ce72f2821ff3651694bea7f10a5d505a6970 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 00:25:59 +0000 Subject: [PATCH 031/153] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-86098.yml | 5 --- html/changelogs/AutoChangeLog-pr-86605.yml | 6 --- html/changelogs/AutoChangeLog-pr-86634.yml | 7 ---- html/changelogs/AutoChangeLog-pr-86690.yml | 6 --- html/changelogs/AutoChangeLog-pr-86774.yml | 4 -- html/changelogs/AutoChangeLog-pr-86776.yml | 6 --- html/changelogs/AutoChangeLog-pr-86782.yml | 4 -- html/changelogs/AutoChangeLog-pr-86808.yml | 4 -- html/changelogs/AutoChangeLog-pr-86812.yml | 4 -- html/changelogs/AutoChangeLog-pr-86814.yml | 4 -- html/changelogs/AutoChangeLog-pr-86818.yml | 4 -- html/changelogs/AutoChangeLog-pr-86821.yml | 4 -- html/changelogs/AutoChangeLog-pr-86822.yml | 4 -- html/changelogs/archive/2024-09.yml | 45 ++++++++++++++++++++++ 14 files changed, 45 insertions(+), 62 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-86098.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86605.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86634.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86690.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86774.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86776.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86782.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86808.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86812.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86814.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86818.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86821.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86822.yml diff --git a/html/changelogs/AutoChangeLog-pr-86098.yml b/html/changelogs/AutoChangeLog-pr-86098.yml deleted file mode 100644 index c5848dfaaa5a9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86098.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86605.yml b/html/changelogs/AutoChangeLog-pr-86605.yml deleted file mode 100644 index 17ee60263e3cd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86605.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Bisar" -delete-after: True -changes: - - 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!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86634.yml b/html/changelogs/AutoChangeLog-pr-86634.yml deleted file mode 100644 index 4a1bd47fc1948..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86634.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86690.yml b/html/changelogs/AutoChangeLog-pr-86690.yml deleted file mode 100644 index e5ec5cbd2ac29..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86690.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86774.yml b/html/changelogs/AutoChangeLog-pr-86774.yml deleted file mode 100644 index 05c67ca5a0306..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86774.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - image: "added icon states for linkable fishing spots in the fish portal gen radial menu." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86776.yml b/html/changelogs/AutoChangeLog-pr-86776.yml deleted file mode 100644 index 62be88e988be6..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86776.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86782.yml b/html/changelogs/AutoChangeLog-pr-86782.yml deleted file mode 100644 index a092d90f6a487..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86782.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Likteer" -delete-after: True -changes: - - rscdel: "Intentional screaming has been unmuted. Now has a 5s cooldown instead." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86808.yml b/html/changelogs/AutoChangeLog-pr-86808.yml deleted file mode 100644 index 1191192c9e598..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86808.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EnterTheJake" -delete-after: True -changes: - - balance: "Void Conduit has less range and no longer ignores Line of Sight." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86812.yml b/html/changelogs/AutoChangeLog-pr-86812.yml deleted file mode 100644 index dea7c8ae6b413..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86812.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed infective components not cleaning up disease datums after themselves" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86814.yml b/html/changelogs/AutoChangeLog-pr-86814.yml deleted file mode 100644 index a57e7d4e0fc72..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86814.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Sealed101" -delete-after: True -changes: - - spellcheck: "fixed examine and balloon alert text for boulder refining machinery" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86818.yml b/html/changelogs/AutoChangeLog-pr-86818.yml deleted file mode 100644 index 5cb5575cb8c84..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86818.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "pruned higher frequencies from the resonant shriek ability sound, making it lighter on the ears" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86821.yml b/html/changelogs/AutoChangeLog-pr-86821.yml deleted file mode 100644 index e01bbc22a7967..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86821.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "lavaland magma ambience has been changed" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86822.yml b/html/changelogs/AutoChangeLog-pr-86822.yml deleted file mode 100644 index e55ff82da4013..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86822.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Emergency shuttle console no longer reopens its UI on its own" \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index 2dd9ac000774d..f638895f9441d 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -683,3 +683,48 @@ 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 From 7daf456b535cc98ed39e3ffe7408c227acffe03b Mon Sep 17 00:00:00 2001 From: Cursor <102828457+theselfish@users.noreply.github.com> Date: Mon, 23 Sep 2024 02:13:39 +0100 Subject: [PATCH 032/153] Makes the Beer Six pack use cans. (#86830) ## About The Pull Request Title. ## Why It's Good For The Game So the beer bottle ring uses this sprite. ![image](https://github.com/user-attachments/assets/3bbd9822-36e4-4520-9a46-6925e71197a7) But, when you open it, beer bottles. I hate magic and love consistency so now it's properly beer cans. ## Changelog :cl: fix: The Beer Sixpack no longer magically turns into bottles. /:cl: --- code/game/objects/items/storage/sixpack.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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) From dd96e3b882343ba456580fe1e64480f0cb44d74a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:13:58 +0000 Subject: [PATCH 033/153] Automatic changelog for PR #86830 [ci skip] --- html/changelogs/AutoChangeLog-pr-86830.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86830.yml diff --git a/html/changelogs/AutoChangeLog-pr-86830.yml b/html/changelogs/AutoChangeLog-pr-86830.yml new file mode 100644 index 0000000000000..6f8dbad223e8a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86830.yml @@ -0,0 +1,4 @@ +author: "theselfish" +delete-after: True +changes: + - bugfix: "The Beer Sixpack no longer magically turns into bottles." \ No newline at end of file From 09998dd995a0af92562d3f3cb7980a90fcb37d62 Mon Sep 17 00:00:00 2001 From: Lucy Date: Mon, 23 Sep 2024 00:50:59 -0400 Subject: [PATCH 034/153] Fixes some stuff with the Living Heart ritual (#86831) ## About The Pull Request This fixes and improves some stuff with the living heart ritual: - If you don't have any heart at all - i.e, you're a species without a heart, or have no heart due to vein muscle membrane surgery, you can still use the ritual to *put* a living heart into your chest. - Fixed a "qdeleted thing being thrown around" runtime from the ritual unintentionally deleting your old heart while dramatically throwing it out of your chest. - The ritual, when its replacing/adding a new heart to your chest, will now heal the heart to just below the "severe organ damage" threshold, if needed. It's very easy for a heart to accidentally decay without you realizing if you're butchering a monkey in maints to hastily replace your heart, especially if you accidentally forget the poppy or something and have to go sprint to get one. Fixes https://github.com/tgstation/tgstation/issues/71451 ## Why It's Good For The Game Consistency for edge cases is good, as well as avoiding runtimes. ## Changelog :cl: fix: 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. /:cl: --- .../heretic/knowledge/starting_lore.dm | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index ad48bb8fee331..6cbaf844841e4 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -109,27 +109,24 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) /datum/heretic_knowledge/living_heart/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) 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) @@ -151,17 +148,21 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) // 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?") @@ -182,7 +183,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) /// 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 From ccddd2378f0837544da0e0ca3818dcb50d6ddb82 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 04:51:20 +0000 Subject: [PATCH 035/153] Automatic changelog for PR #86831 [ci skip] --- html/changelogs/AutoChangeLog-pr-86831.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86831.yml diff --git a/html/changelogs/AutoChangeLog-pr-86831.yml b/html/changelogs/AutoChangeLog-pr-86831.yml new file mode 100644 index 0000000000000..a4123604417a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86831.yml @@ -0,0 +1,6 @@ +author: "Absolucy" +delete-after: True +changes: + - 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." \ No newline at end of file From 8c494a4736fb06d96b0e1502a331bc82f9d178fa Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 00:27:45 +0000 Subject: [PATCH 036/153] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-86830.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86831.yml | 6 ------ html/changelogs/archive/2024-09.yml | 11 +++++++++++ 3 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-86830.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86831.yml diff --git a/html/changelogs/AutoChangeLog-pr-86830.yml b/html/changelogs/AutoChangeLog-pr-86830.yml deleted file mode 100644 index 6f8dbad223e8a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86830.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "theselfish" -delete-after: True -changes: - - bugfix: "The Beer Sixpack no longer magically turns into bottles." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86831.yml b/html/changelogs/AutoChangeLog-pr-86831.yml deleted file mode 100644 index a4123604417a5..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86831.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Absolucy" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index f638895f9441d..d02e79542f4ff 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -728,3 +728,14 @@ - 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. From 58501dce77aba5811fa92a6d7de7d0cc0a1e56ac Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Tue, 24 Sep 2024 08:24:50 +0300 Subject: [PATCH 037/153] Reorganizes the sound folder (#86726) ## About The Pull Request
- renamed ai folder to announcer -- announcer -- - moved vox_fem to announcer - moved approachingTG to announcer - separated the ambience folder into ambience and instrumental -- ambience -- - created holy folder moved all related sounds there - created engineering folder and moved all related sounds there - created security folder and moved ambidet there - created general folder and moved ambigen there - created icemoon folder and moved all icebox-related ambience there - created medical folder and moved all medbay-related ambi there - created ruin folder and moves all ruins ambi there - created beach folder and moved seag and shore there - created lavaland folder and moved related ambi there - created aurora_caelus folder and placed its ambi there - created misc folder and moved the rest of the files that don't have a specific category into it -- instrumental -- - moved traitor folder here - created lobby_music folder and placed our songs there (title0 not used anywhere? - server-side modification?) -- items -- - moved secdeath to hailer - moved surgery to handling -- effects -- - moved chemistry into effects - moved hallucinations into effects - moved health into effects - moved magic into effects -- vehicles -- - moved mecha into vehicles created mobs folder -- mobs -- - moved creatures folder into mobs - moved voice into mobs renamed creatures to non-humanoids renamed voice to humanoids -- non-humanoids-- created cyborg folder created hiss folder moved harmalarm.ogg to cyborg -- humanoids -- -- misc -- moved ghostwhisper to misc moved insane_low_laugh to misc I give up trying to document this.
- [X] ambience - [x] announcer - [x] effects - [X] instrumental - [x] items - [x] machines - [x] misc - [X] mobs - [X] runtime - [X] vehicles - [ ] attributions ## Why It's Good For The Game This folder is so disorganized that it's vomit inducing, will make it easier to find and add new sounds, providng a minor structure to the sound folder. ## Changelog :cl: 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 /:cl: --- .../LavaRuins/lavaland_surface_cultaltar.dmm | 2 +- _maps/shuttles/whiteship_kilo.dmm | 4 +- code/__DEFINES/footsteps.dm | 32 +- code/__HELPERS/honkerblast.dm | 2 +- code/__HELPERS/priority_announce.dm | 4 +- code/_globalvars/lists/achievements.dm | 6 +- code/_globalvars/lists/ambience.dm | 286 +- code/_globalvars/lists/flavor_misc.dm | 32 +- code/_onclick/hud/alert.dm | 2 +- code/_onclick/item_attack.dm | 2 +- code/controllers/subsystem/ambience.dm | 12 +- .../dynamic/dynamic_rulesets_midround.dm | 8 +- code/controllers/subsystem/explosions.dm | 2 +- code/controllers/subsystem/nightshift.dm | 2 +- code/controllers/subsystem/polling.dm | 2 +- code/controllers/subsystem/shuttle.dm | 8 +- code/controllers/subsystem/ticker.dm | 4 +- code/datums/actions/mobs/blood_warp.dm | 4 +- code/datums/actions/mobs/chase_target.dm | 2 +- .../actions/mobs/create_legion_turrets.dm | 8 +- code/datums/actions/mobs/dash.dm | 4 +- code/datums/actions/mobs/fire_breath.dm | 2 +- code/datums/actions/mobs/projectileattack.dm | 10 +- .../basic_subtrees/speech_subtree.dm | 22 +- code/datums/ai/dog/dog_behaviors.dm | 4 +- code/datums/announcers/default_announcer.dm | 38 +- code/datums/announcers/intern_announcer.dm | 78 +- code/datums/announcers/medbot_announcer.dm | 40 +- code/datums/brain_damage/magic.dm | 4 +- code/datums/brain_damage/special.dm | 12 +- code/datums/brain_damage/split_personality.dm | 2 +- code/datums/candidate_poll.dm | 2 +- code/datums/cinematics/malf_doomsday.dm | 2 +- code/datums/cinematics/narsie_summon.dm | 10 +- code/datums/cinematics/nuke_cinematics.dm | 18 +- code/datums/communications.dm | 4 +- code/datums/components/chuunibyou.dm | 4 +- code/datums/components/crank_recharge.dm | 2 +- code/datums/components/cuff_n_stun.dm | 4 +- code/datums/components/cult_ritual_item.dm | 6 +- code/datums/components/deployable.dm | 2 +- .../components/direct_explosive_trap.dm | 2 +- code/datums/components/embedded.dm | 2 +- .../components/interaction_booby_trap.dm | 2 +- code/datums/components/jukebox.dm | 2 +- code/datums/components/mob_harvest.dm | 2 +- code/datums/components/plumbing/_plumbing.dm | 2 +- code/datums/components/ranged_attacks.dm | 2 +- code/datums/components/regenerative_shield.dm | 6 +- code/datums/components/riding/riding_mob.dm | 2 +- code/datums/components/rotation.dm | 2 +- code/datums/components/scope.dm | 4 +- code/datums/components/shielded.dm | 2 +- code/datums/components/sisyphus_awarder.dm | 2 +- code/datums/components/sitcomlaughter.dm | 2 +- code/datums/components/spin2win.dm | 6 +- code/datums/components/spirit_holding.dm | 2 +- code/datums/components/squeak.dm | 2 +- code/datums/components/stationloving.dm | 2 +- code/datums/components/summoning.dm | 2 +- code/datums/components/tackle.dm | 16 +- code/datums/components/thermite.dm | 2 +- code/datums/components/transforming.dm | 4 +- code/datums/components/trapdoor.dm | 4 +- code/datums/dash_weapon.dm | 4 +- code/datums/diseases/chronic_illness.dm | 4 +- code/datums/diseases/heart_failure.dm | 2 +- code/datums/elements/bugkiller_reagent.dm | 2 +- code/datums/elements/corrupted_organ.dm | 2 +- code/datums/elements/damage_threshold.dm | 2 +- code/datums/elements/deliver_first.dm | 2 +- code/datums/elements/door_pryer.dm | 2 +- code/datums/elements/falling_hazard.dm | 4 +- code/datums/elements/high_fiver.dm | 2 +- code/datums/elements/kneejerk.dm | 6 +- code/datums/elements/wall_tearer.dm | 2 +- code/datums/looping_sounds/acid.dm | 2 +- code/datums/looping_sounds/breathing.dm | 16 +- code/datums/looping_sounds/choking.dm | 2 +- code/datums/looping_sounds/cyborg.dm | 6 +- code/datums/looping_sounds/item_sounds.dm | 14 +- .../datums/looping_sounds/machinery_sounds.dm | 36 +- code/datums/looping_sounds/music.dm | 2 +- code/datums/looping_sounds/vents.dm | 6 +- code/datums/looping_sounds/weather.dm | 42 +- code/datums/martial/cqc.dm | 16 +- code/datums/martial/krav_maga.dm | 2 +- code/datums/martial/plasma_fist.dm | 8 +- code/datums/martial/psychotic_brawl.dm | 2 +- code/datums/martial/sleeping_carp.dm | 10 +- code/datums/mutations/body.dm | 2 +- code/datums/mutations/fire_breath.dm | 2 +- code/datums/mutations/hulk.dm | 2 +- code/datums/mutations/sight.dm | 2 +- code/datums/mutations/touch.dm | 4 +- .../proximity_monitor/fields/timestop.dm | 4 +- .../quirks/neutral_quirks/monochromatic.dm | 2 +- code/datums/station_traits/negative_traits.dm | 2 +- code/datums/status_effects/buffs.dm | 4 +- code/datums/status_effects/debuffs/choke.dm | 2 +- code/datums/status_effects/debuffs/debuffs.dm | 4 +- .../status_effects/debuffs/terrified.dm | 2 +- .../status_effects/debuffs/tower_of_babel.dm | 2 +- code/datums/status_effects/neutral.dm | 4 +- code/datums/status_effects/song_effects.dm | 4 +- .../weather/weather_types/radiation_storm.dm | 2 +- code/datums/wires/syndicatebomb.dm | 2 +- code/datums/wounds/cranial_fissure.dm | 4 +- code/datums/wounds/pierce.dm | 2 +- code/datums/wounds/slash.dm | 2 +- code/game/area/areas.dm | 2 +- code/game/area/areas/ai_monitored.dm | 4 +- code/game/area/areas/away_content.dm | 2 +- code/game/area/areas/mining.dm | 6 +- code/game/area/areas/ruins/lavaland.dm | 12 +- code/game/area/areas/ruins/space.dm | 14 +- code/game/area/areas/shuttles.dm | 2 +- code/game/area/areas/station/command.dm | 2 +- code/game/area/areas/station/maintenance.dm | 2 +- code/game/area/areas/station/medical.dm | 4 +- code/game/area/areas/station/security.dm | 4 +- code/game/area/areas/station/telecomm.dm | 16 +- code/game/atom/atom_defense.dm | 6 +- code/game/machinery/announcement_system.dm | 2 +- code/game/machinery/bank_machine.dm | 2 +- code/game/machinery/barsigns.dm | 4 +- code/game/machinery/camera/camera.dm | 2 +- code/game/machinery/civilian_bounties.dm | 18 +- code/game/machinery/computer/_computer.dm | 6 +- code/game/machinery/computer/aifixer.dm | 2 +- code/game/machinery/computer/apc_control.dm | 8 +- .../machinery/computer/arcade/amputation.dm | 6 +- code/game/machinery/computer/arcade/battle.dm | 24 +- code/game/machinery/computer/arcade/orion.dm | 4 +- .../machinery/computer/arcade/orion_event.dm | 8 +- code/game/machinery/computer/camera.dm | 4 +- .../machinery/computer/camera_advanced.dm | 8 +- .../game/machinery/computer/communications.dm | 24 +- code/game/machinery/computer/mechlaunchpad.dm | 4 +- .../machinery/computer/prisoner/_prisoner.dm | 4 +- .../computer/prisoner/gulag_teleporter.dm | 4 +- .../machinery/computer/prisoner/management.dm | 8 +- .../machinery/computer/records/records.dm | 18 +- .../machinery/computer/records/security.dm | 8 +- code/game/machinery/computer/warrant.dm | 12 +- code/game/machinery/dance_machine.dm | 8 +- code/game/machinery/dish_drive.dm | 12 +- .../game/machinery/dna_infuser/dna_infuser.dm | 2 +- .../dna_infuser/organ_sets/rat_organs.dm | 2 +- code/game/machinery/doors/airlock.dm | 30 +- code/game/machinery/doors/door.dm | 10 +- code/game/machinery/doors/firedoor.dm | 4 +- code/game/machinery/doors/passworddoor.dm | 2 +- code/game/machinery/doors/poddoor.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 4 +- code/game/machinery/droneDispenser.dm | 2 +- code/game/machinery/fat_sucker.dm | 2 +- code/game/machinery/flasher.dm | 2 +- code/game/machinery/flatpacker.dm | 4 +- code/game/machinery/harvester.dm | 8 +- code/game/machinery/hologram.dm | 2 +- code/game/machinery/hypnochair.dm | 4 +- code/game/machinery/iv_drip.dm | 2 +- code/game/machinery/launch_pad.dm | 8 +- code/game/machinery/limbgrower.dm | 4 +- .../newscaster/newscaster_machine.dm | 20 +- code/game/machinery/photobooth.dm | 6 +- .../machinery/porta_turret/portable_turret.dm | 28 +- code/game/machinery/portagrav.dm | 2 +- code/game/machinery/prisongate.dm | 4 +- code/game/machinery/quantum_pad.dm | 6 +- code/game/machinery/recycler.dm | 8 +- code/game/machinery/requests_console.dm | 10 +- code/game/machinery/roulette_machine.dm | 22 +- code/game/machinery/scanner_gate.dm | 2 +- code/game/machinery/slotmachine.dm | 4 +- code/game/machinery/stasis.dm | 4 +- code/game/machinery/suit_storage_unit.dm | 4 +- code/game/machinery/syndicatebomb.dm | 2 +- .../telecomms/machine_interactions.dm | 6 +- code/game/machinery/transformer.dm | 4 +- .../anomalies/anomalies_bioscrambler.dm | 2 +- .../anomalies/anomalies_dimensional_themes.dm | 6 +- .../effects/anomalies/anomalies_ectoplasm.dm | 10 +- .../objects/effects/decals/cleanable/misc.dm | 2 +- code/game/objects/effects/decals/remains.dm | 2 +- .../fluid_spread/effects_foam.dm | 6 +- code/game/objects/effects/glowshroom.dm | 2 +- code/game/objects/effects/mines.dm | 2 +- code/game/objects/effects/posters/poster.dm | 4 +- code/game/objects/effects/powerup.dm | 6 +- code/game/objects/effects/rcd.dm | 2 +- .../objects/effects/spawners/gibspawner.dm | 2 +- code/game/objects/effects/spiderwebs.dm | 2 +- .../temporary_visuals/miscellaneous.dm | 2 +- code/game/objects/items.dm | 6 +- code/game/objects/items/bodybag.dm | 2 +- code/game/objects/items/boxcutter.dm | 2 +- code/game/objects/items/broom.dm | 2 +- code/game/objects/items/cardboard_cutouts.dm | 2 +- code/game/objects/items/cards_ids.dm | 2 +- code/game/objects/items/chainsaw.dm | 14 +- code/game/objects/items/choice_beacon.dm | 6 +- code/game/objects/items/cigarettes.dm | 8 +- code/game/objects/items/climbingrope.dm | 4 +- code/game/objects/items/clown_items.dm | 2 +- code/game/objects/items/cosmetics.dm | 2 +- code/game/objects/items/crab17.dm | 8 +- code/game/objects/items/debug_items.dm | 2 +- code/game/objects/items/defib.dm | 36 +- .../game/objects/items/devices/aicard_evil.dm | 4 +- .../objects/items/devices/battle_royale.dm | 8 +- .../objects/items/devices/broadcast_camera.dm | 4 +- .../objects/items/devices/chameleonproj.dm | 2 +- .../devices/electroadaptive_pseudocircuit.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 10 +- .../items/devices/forcefieldprojector.dm | 6 +- .../objects/items/devices/laserpointer.dm | 8 +- .../objects/items/devices/lightreplacer.dm | 6 +- code/game/objects/items/devices/multitool.dm | 6 +- .../objects/items/devices/radio/intercom.dm | 2 +- .../game/objects/items/devices/radio/radio.dm | 6 +- .../items/devices/reverse_bear_trap.dm | 2 +- .../items/devices/scanners/health_analyzer.dm | 8 +- code/game/objects/items/devices/swapper.dm | 4 +- .../game/objects/items/devices/table_clock.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/dice.dm | 4 +- code/game/objects/items/dna_probe.dm | 14 +- code/game/objects/items/door_seal.dm | 2 +- code/game/objects/items/dualsaber.dm | 8 +- code/game/objects/items/emags.dm | 2 +- code/game/objects/items/extinguisher.dm | 2 +- code/game/objects/items/fireaxe.dm | 4 +- code/game/objects/items/flamethrower.dm | 4 +- code/game/objects/items/food/bread.dm | 4 +- code/game/objects/items/food/burgers.dm | 2 +- code/game/objects/items/food/cake.dm | 8 +- code/game/objects/items/food/misc.dm | 2 +- code/game/objects/items/frog_statue.dm | 2 +- code/game/objects/items/granters/_granters.dm | 6 +- .../items/granters/martial_arts/cqc.dm | 2 +- code/game/objects/items/grenades/_grenade.dm | 6 +- .../objects/items/grenades/chem_grenade.dm | 2 +- .../objects/items/grenades/clusterbuster.dm | 4 +- code/game/objects/items/grenades/festive.dm | 4 +- code/game/objects/items/grenades/flashbang.dm | 4 +- code/game/objects/items/hand_items.dm | 10 +- code/game/objects/items/handcuffs.dm | 14 +- code/game/objects/items/his_grace.dm | 16 +- .../items/implants/implant_deathrattle.dm | 8 +- .../objects/items/implants/implantchair.dm | 2 +- code/game/objects/items/inspector.dm | 2 +- code/game/objects/items/janitor_key.dm | 2 +- code/game/objects/items/kitchen.dm | 8 +- code/game/objects/items/knives.dm | 4 +- code/game/objects/items/lighter.dm | 12 +- code/game/objects/items/machine_wand.dm | 4 +- code/game/objects/items/mail.dm | 10 +- code/game/objects/items/maintenance_loot.dm | 4 +- code/game/objects/items/melee/baton.dm | 12 +- code/game/objects/items/melee/energy.dm | 12 +- code/game/objects/items/melee/misc.dm | 30 +- code/game/objects/items/pet_carrier.dm | 10 +- code/game/objects/items/pillow.dm | 6 +- code/game/objects/items/pinpointer.dm | 2 +- code/game/objects/items/pitchfork.dm | 2 +- code/game/objects/items/plushes.dm | 38 +- code/game/objects/items/pneumaticCannon.dm | 4 +- code/game/objects/items/powerfist.dm | 8 +- code/game/objects/items/puzzle_pieces.dm | 10 +- code/game/objects/items/rcd/RCD.dm | 4 +- code/game/objects/items/rcd/RPD.dm | 4 +- code/game/objects/items/rcd/RPLD.dm | 4 +- code/game/objects/items/rcd/RTD.dm | 4 +- code/game/objects/items/religion.dm | 2 +- code/game/objects/items/robot/items/food.dm | 2 +- .../game/objects/items/robot/items/generic.dm | 16 +- code/game/objects/items/robot/items/tools.dm | 8 +- code/game/objects/items/robot/robot_parts.dm | 2 +- .../objects/items/robot/robot_upgrades.dm | 4 +- code/game/objects/items/shields.dm | 16 +- code/game/objects/items/spear.dm | 2 +- .../stacks/golem_food/golem_hand_actions.dm | 2 +- .../stacks/golem_food/golem_status_effects.dm | 6 +- code/game/objects/items/stacks/medical.dm | 2 +- code/game/objects/items/stacks/rods.dm | 6 +- .../game/objects/items/stacks/sheets/glass.dm | 26 +- .../objects/items/stacks/sheets/leather.dm | 18 +- .../items/stacks/sheets/sheet_types.dm | 12 +- .../objects/items/stacks/sheets/sheets.dm | 4 +- code/game/objects/items/stacks/tape.dm | 8 +- .../objects/items/stacks/tiles/tile_types.dm | 4 +- code/game/objects/items/storage/backpack.dm | 8 +- code/game/objects/items/storage/bags.dm | 4 +- code/game/objects/items/storage/belt.dm | 2 +- .../objects/items/storage/boxes/_boxes.dm | 8 +- code/game/objects/items/storage/holsters.dm | 2 +- code/game/objects/items/storage/medkit.dm | 8 +- code/game/objects/items/storage/toolbox.dm | 10 +- code/game/objects/items/tail_pin.dm | 2 +- code/game/objects/items/tanks/tanks.dm | 12 +- code/game/objects/items/tcg/tcg.dm | 2 +- code/game/objects/items/teleportation.dm | 4 +- code/game/objects/items/theft_tools.dm | 2 +- code/game/objects/items/tools/crowbar.dm | 26 +- code/game/objects/items/tools/screwdriver.dm | 24 +- code/game/objects/items/tools/spess_knife.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 12 +- code/game/objects/items/tools/wirecutters.dm | 10 +- code/game/objects/items/tools/wrench.dm | 12 +- code/game/objects/items/toy_mechs.dm | 24 +- code/game/objects/items/toys.dm | 40 +- code/game/objects/items/weaponry.dm | 44 +- code/game/objects/items/wizard_weapons.dm | 2 +- code/game/objects/obj_defense.dm | 2 +- code/game/objects/structures/aliens.dm | 8 +- .../structures/beds_chairs/alien_nest.dm | 6 +- .../objects/structures/beds_chairs/chair.dm | 6 +- .../game/objects/structures/cannons/cannon.dm | 2 +- .../cannons/mounted_guns/mounted_gun.dm | 4 +- .../construction_actions.dm | 2 +- .../structures/crates_lockers/closets.dm | 4 +- .../crates_lockers/closets/bodybag.dm | 8 +- .../crates_lockers/closets/cardboardbox.dm | 4 +- .../crates_lockers/closets/gimmick.dm | 4 +- .../crates_lockers/closets/secure/bar.dm | 4 +- .../crates_lockers/closets/secure/medical.dm | 4 +- .../crates_lockers/closets/secure/personal.dm | 4 +- .../crates_lockers/closets/secure/security.dm | 4 +- .../structures/crates_lockers/crates.dm | 12 +- .../structures/crates_lockers/crates/bins.dm | 6 +- .../crates_lockers/crates/cardboard.dm | 2 +- .../crates_lockers/crates/critter.dm | 4 +- .../structures/crates_lockers/crates/large.dm | 6 +- .../crates_lockers/crates/syndicrate.dm | 2 +- .../crates_lockers/crates/wooden.dm | 4 +- code/game/objects/structures/curtains.dm | 6 +- .../objects/structures/deployable_turret.dm | 12 +- .../structures/destructible_structures.dm | 2 +- code/game/objects/structures/displaycase.dm | 12 +- code/game/objects/structures/door_assembly.dm | 4 +- code/game/objects/structures/false_walls.dm | 2 +- code/game/objects/structures/fireaxe.dm | 6 +- code/game/objects/structures/grille.dm | 6 +- code/game/objects/structures/guillotine.dm | 2 +- .../objects/structures/gym/punching_bag.dm | 14 +- code/game/objects/structures/holosign.dm | 10 +- .../structures/icemoon/cave_entrance.dm | 2 +- code/game/objects/structures/lattice.dm | 2 +- .../objects/structures/lavaland/gulag_vent.dm | 2 +- .../structures/lavaland/necropolis_tendril.dm | 2 +- .../objects/structures/lavaland/ore_vent.dm | 2 +- code/game/objects/structures/life_candle.dm | 2 +- code/game/objects/structures/maintenance.dm | 6 +- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/mystery_box.dm | 4 +- code/game/objects/structures/pinatas.dm | 6 +- code/game/objects/structures/spawner.dm | 6 +- code/game/objects/structures/tables_racks.dm | 6 +- .../objects/structures/training_machine.dm | 10 +- .../structures/transit_tubes/station.dm | 2 +- code/game/objects/structures/window.dm | 18 +- code/game/sound.dm | 142 +- code/game/turfs/closed/walls.dm | 4 +- code/game/turfs/open/_open.dm | 10 +- code/game/turfs/open/chasm.dm | 2 +- code/game/turfs/open/floor/plating.dm | 4 +- code/game/turfs/open/lava.dm | 4 +- code/game/turfs/turf.dm | 2 +- code/modules/admin/smites/dock_pay.dm | 2 +- code/modules/admin/smites/immerse.dm | 2 +- code/modules/admin/smites/lightning.dm | 2 +- code/modules/admin/smites/nugget.dm | 2 +- code/modules/admin/verbs/adminevents.dm | 4 +- code/modules/admin/verbs/adminfun.dm | 4 +- code/modules/admin/verbs/adminpm.dm | 2 +- code/modules/admin/verbs/anonymousnames.dm | 2 +- code/modules/admin/verbs/secrets.dm | 6 +- code/modules/admin/verbs/server.dm | 4 +- .../antagonists/_common/antag_spawner.dm | 2 +- .../antagonists/abductor/abductee/abductee.dm | 2 +- code/modules/antagonists/abductor/abductor.dm | 2 +- .../abductor/equipment/gear/abductor_items.dm | 12 +- .../abductor/equipment/glands/electric.dm | 2 +- .../abductor/equipment/glands/heal.dm | 4 +- .../abductor/machinery/experiment.dm | 2 +- .../battlecruiser/battlecruiser.dm | 2 +- code/modules/antagonists/blob/blob_antag.dm | 6 +- .../antagonists/blob/structures/_blob.dm | 6 +- .../antagonists/brainwashing/brainwashing.dm | 2 +- code/modules/antagonists/brother/brother.dm | 2 +- .../antagonists/changeling/changeling.dm | 2 +- .../changeling/powers/defib_grasp.dm | 6 +- .../changeling/powers/fakedeath.dm | 2 +- .../changeling/powers/mutations.dm | 16 +- .../changeling/powers/regenerate.dm | 2 +- .../antagonists/changeling/powers/shriek.dm | 2 +- .../changeling/powers/tiny_prick.dm | 4 +- code/modules/antagonists/cult/blood_magic.dm | 22 +- code/modules/antagonists/cult/cult_comms.dm | 18 +- code/modules/antagonists/cult/cult_items.dm | 46 +- .../antagonists/cult/cult_structure_pylon.dm | 2 +- .../antagonists/cult/cult_structures.dm | 2 +- .../antagonists/cult/datums/cult_team.dm | 6 +- .../antagonists/cult/datums/cultist.dm | 4 +- .../antagonists/cult/rune_spawn_action.dm | 2 +- code/modules/antagonists/cult/runes.dm | 12 +- code/modules/antagonists/cult/sword_fling.dm | 2 +- .../fugitive/hunters/hunter_gear.dm | 6 +- .../antagonists/heretic/heretic_antag.dm | 4 +- .../antagonists/heretic/heretic_monsters.dm | 2 +- .../heretic/items/heretic_blades.dm | 2 +- .../antagonists/heretic/items/hunter_rifle.dm | 4 +- .../heretic/items/labyrinth_handbook.dm | 2 +- .../antagonists/heretic/knowledge/ash_lore.dm | 2 +- .../heretic/knowledge/blade_lore.dm | 6 +- .../heretic/knowledge/cosmic_lore.dm | 6 +- .../heretic/knowledge/flesh_lore.dm | 2 +- .../heretic/knowledge/lock_lore.dm | 4 +- .../heretic/knowledge/moon_lore.dm | 2 +- .../heretic/knowledge/rust_lore.dm | 2 +- .../sacrifice_knowledge/sacrifice_buff.dm | 2 +- .../sacrifice_knowledge.dm | 12 +- .../sacrifice_knowledge/sacrifice_map.dm | 2 +- .../heretic/knowledge/starting_lore.dm | 6 +- .../heretic/knowledge/void_lore.dm | 4 +- .../heretic/magic/aggressive_spread.dm | 2 +- .../heretic/magic/ascended_shapeshift.dm | 2 +- .../heretic/magic/ash_ascension.dm | 2 +- .../antagonists/heretic/magic/blood_siphon.dm | 2 +- .../antagonists/heretic/magic/caretaker.dm | 2 +- .../heretic/magic/cosmic_expansion.dm | 2 +- .../antagonists/heretic/magic/cosmic_runes.dm | 6 +- .../antagonists/heretic/magic/expand_sight.dm | 2 +- .../antagonists/heretic/magic/fire_blast.dm | 2 +- .../heretic/magic/flesh_surgery.dm | 6 +- .../heretic/magic/furious_steel.dm | 4 +- .../antagonists/heretic/magic/mansus_grasp.dm | 4 +- .../antagonists/heretic/magic/mind_gate.dm | 2 +- .../antagonists/heretic/magic/mirror_walk.dm | 4 +- .../antagonists/heretic/magic/moon_parade.dm | 2 +- .../antagonists/heretic/magic/moon_smile.dm | 4 +- .../antagonists/heretic/magic/realignment.dm | 2 +- .../antagonists/heretic/magic/rust_wave.dm | 6 +- .../antagonists/heretic/magic/shadow_cloak.dm | 18 +- .../antagonists/heretic/magic/space_crawl.dm | 4 +- .../antagonists/heretic/magic/star_blast.dm | 4 +- .../antagonists/heretic/magic/star_touch.dm | 6 +- .../antagonists/heretic/magic/void_conduit.dm | 2 +- .../antagonists/heretic/magic/void_phase.dm | 2 +- .../antagonists/heretic/magic/void_prison.dm | 2 +- .../antagonists/heretic/magic/void_pull.dm | 2 +- .../heretic/magic/wave_of_desperation.dm | 2 +- .../heretic/status_effects/buffs.dm | 4 +- .../heretic/status_effects/mark_effects.dm | 2 +- .../heretic/structures/carving_knife.dm | 10 +- .../heretic/structures/lock_final.dm | 2 +- .../heretic/structures/mawed_crucible.dm | 8 +- .../antagonists/heretic/transmutation_rune.dm | 2 +- .../antagonists/hypnotized/hypnotized.dm | 2 +- code/modules/antagonists/malf_ai/malf_ai.dm | 4 +- .../antagonists/malf_ai/malf_ai_modules.dm | 40 +- .../nightmare/nightmare_equipment.dm | 2 +- .../antagonists/nightmare/nightmare_organs.dm | 4 +- .../antagonists/ninja/energy_katana.dm | 4 +- .../antagonists/ninja/energy_net_nets.dm | 2 +- .../antagonists/nukeop/datums/operative.dm | 2 +- .../nukeop/datums/operative_support.dm | 2 +- .../equipment/nuclear_bomb/_nuclear_bomb.dm | 6 +- .../nukeop/equipment/pinpointer.dm | 2 +- code/modules/antagonists/obsessed/obsessed.dm | 2 +- .../pirate/pirate_shuttle_equipment.dm | 2 +- .../antagonists/revolution/revolution.dm | 2 +- .../antagonists/space_dragon/carp_rift.dm | 2 +- .../antagonists/space_dragon/space_dragon.dm | 6 +- .../antagonists/space_ninja/space_ninja.dm | 2 +- code/modules/antagonists/spy/spy.dm | 2 +- code/modules/antagonists/spy/spy_uplink.dm | 2 +- .../antagonists/traitor/datum_traitor.dm | 4 +- .../traitor/objectives/eyesnatching.dm | 2 +- .../final_objective/final_objective.dm | 2 +- .../traitor/objectives/locate_weakpoint.dm | 8 +- .../antagonists/traitor/traitor_objective.dm | 4 +- .../antagonists/traitor/uplink_handler.dm | 2 +- .../antagonists/voidwalker/voidwalker_loot.dm | 2 +- .../voidwalker/voidwalker_void_eater.dm | 2 +- .../antagonists/wizard/equipment/artefact.dm | 8 +- .../antagonists/wizard/equipment/soulstone.dm | 2 +- .../equipment/spellbook_entries/summons.dm | 8 +- .../wizard/equipment/teleport_rod.dm | 2 +- .../wizard/grand_ritual/finales/all_access.dm | 2 +- .../wizard/grand_ritual/finales/armageddon.dm | 2 +- .../wizard/grand_ritual/finales/captaincy.dm | 2 +- .../wizard/grand_ritual/finales/cheese.dm | 2 +- .../grand_ritual/finales/immortality.dm | 2 +- .../wizard/grand_ritual/grand_ritual.dm | 2 +- .../wizard/grand_ritual/grand_rune.dm | 4 +- .../wizard/grand_ritual/grand_side_effect.dm | 10 +- code/modules/art/statues.dm | 8 +- code/modules/assembly/flash.dm | 4 +- code/modules/assembly/health.dm | 2 +- code/modules/assembly/infrared.dm | 2 +- code/modules/assembly/mousetrap.dm | 4 +- code/modules/assembly/proximity.dm | 2 +- code/modules/assembly/signaler.dm | 4 +- code/modules/assembly/timer.dm | 2 +- .../components/fusion/hfr_main_processes.dm | 2 +- .../machinery/components/fusion/hfr_procs.dm | 10 +- .../components/unary_devices/vent_pump.dm | 4 +- .../components/unary_devices/vent_scrubber.dm | 2 +- .../machinery/portable/canister.dm | 2 +- .../portable/portable_atmospherics.dm | 4 +- code/modules/awaymissions/gateway.dm | 10 +- .../awaymissions/mission_code/Beach.dm | 2 +- .../awaymissions/mission_code/Cabin.dm | 2 +- .../awaymissions/mission_code/centcomAway.dm | 12 +- .../mission_code/moonoutpost19.dm | 4 +- .../awaymissions/mission_code/snowdin.dm | 18 +- code/modules/basketball/controller.dm | 2 +- code/modules/basketball/hoop.dm | 4 +- code/modules/basketball/referee.dm | 2 +- .../bitrunning/antagonists/netguardian.dm | 8 +- .../components/avatar_connection.dm | 10 +- .../components/bitrunning_points.dm | 2 +- code/modules/bitrunning/netpod/container.dm | 8 +- code/modules/bitrunning/netpod/utils.dm | 2 +- code/modules/bitrunning/objects/byteforge.dm | 2 +- code/modules/bitrunning/objects/loot_box.dm | 2 +- code/modules/bitrunning/objects/loot_crate.dm | 2 +- code/modules/bitrunning/server/_parent.dm | 2 +- code/modules/bitrunning/server/loot.dm | 2 +- .../modules/bitrunning/server/map_handling.dm | 8 +- code/modules/bitrunning/server/threats.dm | 4 +- code/modules/bitrunning/server/util.dm | 2 +- .../modules/capture_the_flag/ctf_equipment.dm | 2 +- code/modules/capture_the_flag/ctf_game.dm | 2 +- code/modules/cards/cardhand.dm | 2 +- code/modules/cards/cards.dm | 4 +- code/modules/cards/deck/deck.dm | 8 +- code/modules/cards/deck/tarot.dm | 2 +- code/modules/cards/singlecard.dm | 2 +- code/modules/cargo/markets/_market.dm | 2 +- code/modules/cargo/markets/market_telepad.dm | 12 +- code/modules/cargo/materials_market.dm | 8 +- code/modules/cargo/orderconsole.dm | 4 +- code/modules/cargo/supplypod.dm | 4 +- code/modules/cargo/supplypod_beacon.dm | 6 +- code/modules/cargo/universal_scanner.dm | 2 +- code/modules/clothing/belts/polymorph_belt.dm | 4 +- code/modules/clothing/glasses/_glasses.dm | 6 +- code/modules/clothing/glasses/hud.dm | 2 +- code/modules/clothing/gloves/special.dm | 2 +- code/modules/clothing/head/cakehat.dm | 16 +- code/modules/clothing/head/hardhat.dm | 2 +- .../clothing/head/mind_monkey_helmet.dm | 8 +- code/modules/clothing/head/tophat.dm | 2 +- code/modules/clothing/masks/animal_masks.dm | 6 +- code/modules/clothing/masks/gasmask.dm | 2 +- code/modules/clothing/masks/hailer.dm | 4 +- code/modules/clothing/masks/muzzle.dm | 2 +- code/modules/clothing/shoes/_shoes.dm | 2 +- code/modules/clothing/shoes/costume.dm | 2 +- code/modules/clothing/shoes/wheelys.dm | 2 +- code/modules/clothing/spacesuits/plasmamen.dm | 2 +- code/modules/clothing/spacesuits/softsuit.dm | 2 +- code/modules/clothing/suits/armor.dm | 2 +- .../modules/clothing/suits/reactive_armour.dm | 18 +- code/modules/clothing/suits/wintercoats.dm | 2 +- code/modules/clothing/suits/wiz_robe.dm | 2 +- code/modules/clothing/under/_under.dm | 4 +- .../clothing/under/accessories/badges.dm | 4 +- code/modules/economy/account.dm | 6 +- code/modules/economy/holopay.dm | 4 +- code/modules/events/aurora_caelus.dm | 6 +- code/modules/events/earthquake.dm | 12 +- .../events/ghost_role/fugitive_event.dm | 2 +- code/modules/events/ghost_role/morph_event.dm | 2 +- code/modules/events/ghost_role/nightmare.dm | 2 +- .../modules/events/ghost_role/space_dragon.dm | 2 +- code/modules/events/heart_attack.dm | 2 +- .../events/meteors/dark_matteor_event.dm | 2 +- code/modules/events/mice_migration.dm | 2 +- code/modules/events/portal_storm.dm | 6 +- .../events/space_vines/vine_mutations.dm | 6 +- .../events/space_vines/vine_structure.dm | 6 +- code/modules/events/supermatter_surge.dm | 4 +- code/modules/experisci/destructive_scanner.dm | 2 +- .../experiment/handlers/experiment_handler.dm | 8 +- code/modules/fishing/aquarium/aquarium.dm | 2 +- code/modules/fishing/fish/_fish.dm | 6 +- code/modules/fishing/fish/fish_traits.dm | 2 +- code/modules/fishing/fish/types/mining.dm | 6 +- code/modules/fishing/fish/types/saltwater.dm | 4 +- code/modules/fishing/fish/types/syndicate.dm | 6 +- code/modules/fishing/fishing_equipment.dm | 2 +- .../modules/fishing/fishing_portal_machine.dm | 4 +- code/modules/fishing/fishing_rod.dm | 2 +- .../food_and_drinks/machinery/food_cart.dm | 2 +- .../food_and_drinks/machinery/microwave.dm | 18 +- .../food_and_drinks/machinery/smartfridge.dm | 4 +- .../machinery/stove_component.dm | 2 +- code/modules/food_and_drinks/plate.dm | 2 +- .../recipes/drinks/drinks_alcoholic.dm | 12 +- .../food_and_drinks/recipes/food_mixtures.dm | 2 +- .../restaurant/customers/_customer.dm | 14 +- code/modules/hallucination/battle.dm | 28 +- code/modules/hallucination/bolted_airlocks.dm | 4 +- code/modules/hallucination/delusions.dm | 4 +- code/modules/hallucination/fake_sound.dm | 108 +- .../modules/hallucination/inhand_fake_item.dm | 4 +- .../modules/hallucination/nearby_fake_item.dm | 8 +- code/modules/hallucination/station_message.dm | 16 +- code/modules/hallucination/stray_bullet.dm | 24 +- code/modules/holiday/holidays.dm | 2 +- .../hydroponics/beekeeping/bee_smoker.dm | 2 +- code/modules/hydroponics/fermenting_barrel.dm | 2 +- code/modules/hydroponics/grown/beans.dm | 4 +- code/modules/hydroponics/grown/cereals.dm | 2 +- code/modules/hydroponics/grown/pineapple.dm | 2 +- .../modules/hydroponics/grown/weeds/nettle.dm | 2 +- code/modules/hydroponics/hydroitemdefines.dm | 14 +- code/modules/hydroponics/plant_genes.dm | 2 +- .../modules/hydroponics/unique_plant_genes.dm | 2 +- .../instruments/instrument_data/fun.dm | 4 +- code/modules/instruments/items.dm | 8 +- code/modules/instruments/stationary.dm | 2 +- .../job_types/chaplain/chaplain_nullrod.dm | 52 +- .../chaplain/chaplain_vorpal_scythe.dm | 4 +- .../jobs/job_types/station_trait/human_ai.dm | 2 +- code/modules/library/bibles.dm | 6 +- code/modules/library/lib_machines.dm | 2 +- code/modules/mafia/roles/roles.dm | 2 +- .../ruins/lavalandruin_code/biodome_winter.dm | 2 +- .../ruins/lavalandruin_code/watcher_grave.dm | 2 +- .../ruins/objects_and_mobs/ash_walker_den.dm | 6 +- .../objects_and_mobs/cursed_slot_machine.dm | 6 +- .../mapfluff/ruins/objects_and_mobs/museum.dm | 2 +- .../ruins/objects_and_mobs/necropolis_gate.dm | 4 +- .../ruins/objects_and_mobs/sin_ruins.dm | 2 +- .../ruins/spaceruin_code/forgottenship.dm | 6 +- .../spaceruin_code/hauntedtradingpost.dm | 8 +- .../ruins/spaceruin_code/hilbertshotel.dm | 2 +- .../ruins/spaceruin_code/meatderelict.dm | 2 +- .../mapfluff/ruins/spaceruin_code/meateor.dm | 2 +- .../oldstation/oldstation_mod.dm | 2 +- code/modules/meteors/meteor_dark_matteor.dm | 2 +- code/modules/meteors/meteor_spawning.dm | 2 +- code/modules/meteors/meteor_types.dm | 12 +- .../boulder_processing/_boulder_processing.dm | 2 +- .../mining/boulder_processing/boulder.dm | 6 +- code/modules/mining/boulder_processing/brm.dm | 2 +- .../modules/mining/equipment/explorer_gear.dm | 2 +- code/modules/mining/equipment/grapple_gun.dm | 4 +- .../modules/mining/equipment/kheiral_cuffs.dm | 4 +- .../mining/equipment/kinetic_crusher.dm | 14 +- .../mining/equipment/marker_beacons.dm | 2 +- code/modules/mining/equipment/mining_tools.dm | 30 +- code/modules/mining/equipment/resonator.dm | 4 +- .../mining/equipment/wormhole_jaunter.dm | 2 +- code/modules/mining/fulton.dm | 6 +- .../modules/mining/lavaland/megafauna_loot.dm | 42 +- code/modules/mining/lavaland/tendril_loot.dm | 36 +- code/modules/mining/mine_items.dm | 2 +- .../modules/mob/dead/new_player/new_player.dm | 4 +- code/modules/mob/emote.dm | 2 +- code/modules/mob/living/basic/alien/_alien.dm | 4 +- code/modules/mob/living/basic/alien/queen.dm | 2 +- .../mob/living/basic/alien/sentinel.dm | 2 +- .../modules/mob/living/basic/basic_defense.dm | 8 +- .../living/basic/blob_minions/blob_spore.dm | 2 +- .../living/basic/blob_minions/blob_zombie.dm | 2 +- .../living/basic/blob_minions/blobbernaut.dm | 6 +- code/modules/mob/living/basic/bots/dedbot.dm | 4 +- .../mob/living/basic/bots/firebot/firebot.dm | 20 +- .../mob/living/basic/bots/honkbots/honkbot.dm | 2 +- .../basic/bots/hygienebot/hygienebot.dm | 22 +- .../mob/living/basic/bots/medbot/medbot.dm | 70 +- code/modules/mob/living/basic/clown/clown.dm | 8 +- .../living/basic/cult/constructs/artificer.dm | 2 +- .../living/basic/cult/constructs/harvester.dm | 2 +- .../basic/cult/constructs/juggernaut.dm | 2 +- .../living/basic/cult/constructs/proteon.dm | 2 +- .../living/basic/cult/constructs/wraith.dm | 2 +- .../mob/living/basic/farm_animals/cow/_cow.dm | 2 +- .../basic/farm_animals/cow/cow_moonicorn.dm | 2 +- .../living/basic/farm_animals/deer/deer.dm | 2 +- .../living/basic/farm_animals/goat/_goat.dm | 2 +- .../basic/farm_animals/gorilla/gorilla.dm | 2 +- .../farm_animals/gorilla/gorilla_emotes.dm | 2 +- .../mob/living/basic/farm_animals/pig.dm | 2 +- .../mob/living/basic/farm_animals/pony.dm | 10 +- .../mob/living/basic/farm_animals/rabbit.dm | 2 +- .../mob/living/basic/farm_animals/sheep.dm | 4 +- .../modules/mob/living/basic/festivus_pole.dm | 2 +- .../mob/living/basic/guardian/guardian.dm | 2 +- .../living/basic/guardian/guardian_fluff.dm | 2 +- .../basic/guardian/guardian_types/assassin.dm | 2 +- .../guardian/guardian_types/lightning.dm | 2 +- .../basic/guardian/guardian_types/support.dm | 2 +- .../living/basic/heretic/_heretic_summon.dm | 2 +- .../mob/living/basic/heretic/fire_shark.dm | 2 +- .../mob/living/basic/heretic/flesh_worm.dm | 2 +- .../mob/living/basic/heretic/star_gazer.dm | 4 +- .../basic/icemoon/ice_demon/ice_demon.dm | 8 +- .../basic/icemoon/ice_whelp/ice_whelp.dm | 4 +- .../mob/living/basic/icemoon/wolf/wolf.dm | 2 +- .../mob/living/basic/jungle/leaper/leaper.dm | 2 +- .../basic/jungle/leaper/leaper_abilities.dm | 2 +- .../jungle/mega_arachnid/mega_arachnid.dm | 2 +- .../living/basic/jungle/seedling/seedling.dm | 4 +- .../jungle/seedling/seedling_projectiles.dm | 4 +- .../living/basic/jungle/venus_human_trap.dm | 6 +- .../basic/lavaland/basilisk/basilisk.dm | 4 +- .../lavaland/bileworm/bileworm_actions.dm | 4 +- .../basic/lavaland/bileworm/bileworm_loot.dm | 2 +- .../basic/lavaland/brimdemon/brimbeam.dm | 2 +- .../basic/lavaland/brimdemon/brimdemon.dm | 4 +- .../lavaland/brimdemon/brimdemon_loot.dm | 2 +- .../basic/lavaland/goldgrub/goldgrub.dm | 2 +- .../living/basic/lavaland/goliath/goliath.dm | 4 +- .../basic/lavaland/hivelord/hivelord.dm | 4 +- .../living/basic/lavaland/legion/legion.dm | 2 +- .../basic/lavaland/legion/legion_brood.dm | 2 +- .../basic/lavaland/legion/legion_monkey.dm | 2 +- .../basic/lavaland/legion/legion_tumour.dm | 10 +- .../basic/lavaland/lobstrosity/lobstrosity.dm | 2 +- .../mob/living/basic/lavaland/mook/mook.dm | 8 +- .../basic/lavaland/mook/mook_abilities.dm | 6 +- .../basic/lavaland/node_drone/node_drone.dm | 2 +- .../living/basic/lavaland/raptor/_raptor.dm | 12 +- .../basic/lavaland/raptor/raptor_dex.dm | 2 +- .../living/basic/lavaland/watcher/watcher.dm | 2 +- .../lavaland/watcher/watcher_overwatch.dm | 2 +- .../mob/living/basic/minebots/minebot.dm | 2 +- .../basic/minebots/minebot_abilities.dm | 8 +- .../basic/minebots/minebot_remote_control.dm | 2 +- code/modules/mob/living/basic/pets/cat/cat.dm | 2 +- .../modules/mob/living/basic/pets/dog/_dog.dm | 2 +- .../mob/living/basic/pets/dog/corgi.dm | 6 +- code/modules/mob/living/basic/pets/fox.dm | 2 +- .../basic/pets/pet_cult/pet_cult_abilities.dm | 2 +- code/modules/mob/living/basic/pets/sloth.dm | 2 +- .../modules/mob/living/basic/revolutionary.dm | 30 +- .../basic/ruin_defender/cybersun_aicore.dm | 8 +- .../mob/living/basic/ruin_defender/flesh.dm | 2 +- .../basic/ruin_defender/living_floor.dm | 4 +- .../living/basic/ruin_defender/skeleton.dm | 8 +- .../living/basic/ruin_defender/stickman.dm | 6 +- .../basic/ruin_defender/wizard/wizard.dm | 2 +- .../modules/mob/living/basic/slime/defense.dm | 8 +- code/modules/mob/living/basic/slime/slime.dm | 4 +- .../mob/living/basic/space_fauna/ant.dm | 2 +- .../living/basic/space_fauna/bear/_bear.dm | 4 +- .../mob/living/basic/space_fauna/carp/carp.dm | 2 +- .../basic/space_fauna/carp/carp_abilities.dm | 6 +- .../living/basic/space_fauna/cat_surgeon.dm | 2 +- .../space_fauna/changeling/flesh_spider.dm | 2 +- .../basic/space_fauna/changeling/headslug.dm | 2 +- .../living/basic/space_fauna/demon/demon.dm | 6 +- .../basic/space_fauna/demon/demon_items.dm | 2 +- .../basic/space_fauna/eyeball/_eyeball.dm | 2 +- .../mob/living/basic/space_fauna/faithless.dm | 2 +- .../living/basic/space_fauna/garden_gnome.dm | 2 +- .../mob/living/basic/space_fauna/ghost.dm | 2 +- .../basic/space_fauna/hivebot/_hivebot.dm | 2 +- .../living/basic/space_fauna/killer_tomato.dm | 2 +- .../meteor_heart/chasing_spikes.dm | 4 +- .../space_fauna/meteor_heart/meteor_heart.dm | 4 +- .../space_fauna/meteor_heart/spine_traps.dm | 4 +- .../mob/living/basic/space_fauna/morph.dm | 2 +- .../mob/living/basic/space_fauna/mushroom.dm | 2 +- .../space_fauna/netherworld/blankbody.dm | 2 +- .../basic/space_fauna/netherworld/creature.dm | 2 +- .../basic/space_fauna/netherworld/migo.dm | 8 +- .../space_fauna/paper_wizard/paper_wizard.dm | 8 +- .../basic/space_fauna/regal_rat/regal_rat.dm | 2 +- .../revenant/revenant_abilities.dm | 2 +- .../living/basic/space_fauna/snake/snake.dm | 2 +- .../basic/space_fauna/snake/snake_ai.dm | 2 +- .../space_fauna/space_dragon/space_dragon.dm | 6 +- .../mob/living/basic/space_fauna/spaceman.dm | 2 +- .../living/basic/space_fauna/spider/spider.dm | 2 +- .../living/basic/space_fauna/statue/statue.dm | 2 +- .../wumborian_fugu/wumborian_fugu.dm | 2 +- .../modules/mob/living/basic/trader/trader.dm | 6 +- .../mob/living/basic/trader/trader_data.dm | 2 +- code/modules/mob/living/basic/tree.dm | 2 +- .../mob/living/basic/trooper/abductor.dm | 4 +- .../mob/living/basic/trooper/nanotrasen.dm | 8 +- .../mob/living/basic/trooper/pirate.dm | 4 +- .../mob/living/basic/trooper/russian.dm | 4 +- .../mob/living/basic/trooper/syndicate.dm | 12 +- .../mob/living/basic/trooper/trooper.dm | 2 +- .../mob/living/basic/vermin/cockroach.dm | 2 +- code/modules/mob/living/basic/vermin/crab.dm | 2 +- code/modules/mob/living/basic/vermin/frog.dm | 4 +- .../basic/vermin/mothroach/mothroach.dm | 4 +- code/modules/mob/living/basic/vermin/mouse.dm | 4 +- .../mob/living/basic/vermin/space_bat.dm | 2 +- code/modules/mob/living/brain/MMI.dm | 4 +- .../mob/living/carbon/alien/adult/adult.dm | 8 +- .../carbon/alien/adult/adult_defense.dm | 2 +- .../living/carbon/alien/adult/alien_powers.dm | 2 +- .../mob/living/carbon/alien/alien_defense.dm | 2 +- code/modules/mob/living/carbon/alien/emote.dm | 2 +- .../carbon/alien/larva/larva_defense.dm | 2 +- .../modules/mob/living/carbon/alien/organs.dm | 4 +- .../carbon/alien/special/alien_embryo.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 8 +- .../mob/living/carbon/carbon_defense.dm | 6 +- code/modules/mob/living/carbon/emote.dm | 12 +- code/modules/mob/living/carbon/human/emote.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 14 +- .../carbon/human/species_types/ethereal.dm | 12 +- .../carbon/human/species_types/felinid.dm | 52 +- .../carbon/human/species_types/humans.dm | 76 +- .../human/species_types/lizardpeople.dm | 56 +- .../carbon/human/species_types/mothmen.dm | 52 +- .../carbon/human/species_types/plasmamen.dm | 6 +- .../carbon/human/species_types/zombies.dm | 10 +- code/modules/mob/living/emote.dm | 6 +- code/modules/mob/living/living.dm | 4 +- code/modules/mob/living/living_defense.dm | 12 +- code/modules/mob/living/silicon/ai/ai.dm | 4 +- .../mob/living/silicon/ai/vox_sounds.dm | 2582 ++++++++--------- .../modules/mob/living/silicon/robot/emote.dm | 6 +- .../mob/living/silicon/robot/robot_defense.dm | 2 +- .../mob/living/silicon/robot/robot_model.dm | 4 +- code/modules/mob/living/silicon/silicon.dm | 2 +- .../mob/living/silicon/silicon_defense.dm | 4 +- .../living/simple_animal/animal_defense.dm | 8 +- .../living/simple_animal/bot/SuperBeepsky.dm | 14 +- .../mob/living/simple_animal/bot/ed209bot.dm | 8 +- .../mob/living/simple_animal/bot/floorbot.dm | 2 +- .../mob/living/simple_animal/bot/mulebot.dm | 4 +- .../mob/living/simple_animal/bot/secbot.dm | 22 +- .../simple_animal/hostile/dark_wizard.dm | 4 +- .../hostile/megafauna/blood_drunk_miner.dm | 2 +- .../hostile/megafauna/bubblegum.dm | 10 +- .../hostile/megafauna/clockwork_knight.dm | 2 +- .../hostile/megafauna/colossus.dm | 10 +- .../hostile/megafauna/demonic_frost_miner.dm | 6 +- .../simple_animal/hostile/megafauna/drake.dm | 10 +- .../hostile/megafauna/hierophant.dm | 28 +- .../simple_animal/hostile/megafauna/legion.dm | 2 +- .../hostile/megafauna/wendigo.dm | 4 +- .../mob/living/simple_animal/hostile/mimic.dm | 8 +- .../hostile/mining_mobs/curse_blob.dm | 4 +- .../mining_mobs/elites/goliath_broodmother.dm | 6 +- .../hostile/mining_mobs/elites/herald.dm | 22 +- .../hostile/mining_mobs/elites/legionnaire.dm | 14 +- .../hostile/mining_mobs/elites/pandora.dm | 6 +- .../hostile/mining_mobs/polarbear.dm | 2 +- .../mob/living/simple_animal/hostile/ooze.dm | 2 +- .../living/simple_animal/hostile/vatbeast.dm | 4 +- .../living/simple_animal/hostile/zombie.dm | 2 +- code/modules/mob/mob.dm | 6 +- .../mob_spawn/ghost_roles/mining_roles.dm | 6 +- code/modules/mod/mod_activation.dm | 40 +- code/modules/mod/mod_ai.dm | 2 +- code/modules/mod/mod_control.dm | 30 +- code/modules/mod/mod_core.dm | 4 +- code/modules/mod/mod_link.dm | 6 +- code/modules/mod/mod_ui.dm | 2 +- code/modules/mod/modules/module_kinesis.dm | 4 +- code/modules/mod/modules/modules_antag.dm | 4 +- .../mod/modules/modules_engineering.dm | 8 +- code/modules/mod/modules/modules_general.dm | 4 +- code/modules/mod/modules/modules_maint.dm | 6 +- code/modules/mod/modules/modules_medical.dm | 14 +- code/modules/mod/modules/modules_ninja.dm | 6 +- code/modules/mod/modules/modules_security.dm | 12 +- code/modules/mod/modules/modules_supply.dm | 14 +- .../computers/item/computer.dm | 14 +- .../computers/item/computer_ui.dm | 2 +- .../modular_computers/computers/item/pda.dm | 6 +- .../programs/antagonist/contractor_program.dm | 8 +- .../file_system/programs/arcade.dm | 16 +- .../file_system/programs/borg_monitor.dm | 4 +- .../file_system/programs/bounty_board.dm | 10 +- .../file_system/programs/budgetordering.dm | 4 +- .../file_system/programs/card.dm | 10 +- .../file_system/programs/cargoship.dm | 2 +- .../file_system/programs/dept_order.dm | 8 +- .../file_system/programs/file_browser.dm | 4 +- .../file_system/programs/frontier.dm | 4 +- .../file_system/programs/jobmanagement.dm | 6 +- .../programs/messenger/messenger_program.dm | 4 +- .../file_system/programs/portrait_printer.dm | 2 +- .../file_system/programs/robocontrol.dm | 4 +- .../file_system/programs/robotact.dm | 2 +- .../file_system/programs/secureye.dm | 2 +- .../file_system/programs/virtual_pet.dm | 8 +- code/modules/pai/camera.dm | 2 +- code/modules/pai/door_jack.dm | 2 +- code/modules/pai/pai.dm | 2 +- code/modules/paperwork/desk_bell.dm | 2 +- code/modules/paperwork/fax.dm | 4 +- code/modules/paperwork/handlabeler.dm | 2 +- code/modules/paperwork/paper_biscuit.dm | 2 +- code/modules/paperwork/paper_cutter.dm | 2 +- code/modules/paperwork/pen.dm | 14 +- code/modules/paperwork/ticketmachine.dm | 4 +- code/modules/photography/camera/camera.dm | 2 +- code/modules/photography/camera/other.dm | 2 +- .../photography/camera/silicon_camera.dm | 8 +- code/modules/photography/photos/photo.dm | 4 +- code/modules/plumbing/plumbers/pumps.dm | 2 +- code/modules/power/apc/apc_main.dm | 8 +- code/modules/power/apc/apc_malf.dm | 4 +- code/modules/power/apc/apc_power_proc.dm | 4 +- code/modules/power/cable.dm | 2 +- code/modules/power/floodlight.dm | 4 +- code/modules/power/lighting/light.dm | 8 +- code/modules/power/lighting/light_items.dm | 2 +- code/modules/power/power_store.dm | 4 +- code/modules/power/rtg.dm | 2 +- code/modules/power/singularity/emitter.dm | 12 +- code/modules/power/singularity/narsie.dm | 12 +- code/modules/power/solar.dm | 12 +- code/modules/power/supermatter/supermatter.dm | 2 +- .../supermatter_delamination/_sm_delam.dm | 10 +- .../supermatter_delamination/cascade_delam.dm | 2 +- .../cascade_delam_objects.dm | 2 +- .../delamination_effects.dm | 6 +- .../supermatter/supermatter_extra_effects.dm | 4 +- .../power/supermatter/supermatter_gas.dm | 2 +- code/modules/power/tesla/coil.dm | 2 +- code/modules/power/tesla/energy_ball.dm | 4 +- code/modules/power/tracker.dm | 2 +- code/modules/power/turbine/turbine.dm | 2 +- .../projectiles/ammunition/_ammunition.dm | 2 +- .../projectiles/ammunition/energy/_energy.dm | 2 +- .../projectiles/ammunition/energy/ebow.dm | 2 +- .../projectiles/ammunition/energy/gravity.dm | 2 +- .../projectiles/ammunition/energy/laser.dm | 16 +- .../projectiles/ammunition/energy/lmg.dm | 2 +- .../projectiles/ammunition/energy/plasma.dm | 2 +- .../projectiles/ammunition/energy/portal.dm | 2 +- .../projectiles/ammunition/energy/special.dm | 14 +- .../projectiles/ammunition/energy/stun.dm | 8 +- .../boxes_magazines/_box_magazine.dm | 4 +- code/modules/projectiles/gun.dm | 8 +- code/modules/projectiles/guns/ballistic.dm | 26 +- .../projectiles/guns/ballistic/automatic.dm | 26 +- .../projectiles/guns/ballistic/bows/_bow.dm | 10 +- .../projectiles/guns/ballistic/launchers.dm | 6 +- .../projectiles/guns/ballistic/pistol.dm | 36 +- .../projectiles/guns/ballistic/revolver.dm | 20 +- .../projectiles/guns/ballistic/rifle.dm | 22 +- .../projectiles/guns/ballistic/shotgun.dm | 10 +- code/modules/projectiles/guns/energy.dm | 4 +- .../projectiles/guns/energy/beam_rifle.dm | 6 +- .../projectiles/guns/energy/crank_guns.dm | 6 +- .../guns/energy/kinetic_accelerator.dm | 4 +- code/modules/projectiles/guns/energy/laser.dm | 2 +- .../projectiles/guns/energy/recharge.dm | 2 +- .../projectiles/guns/energy/special.dm | 8 +- code/modules/projectiles/guns/magic.dm | 2 +- .../projectiles/guns/magic/arcane_barrage.dm | 2 +- code/modules/projectiles/guns/magic/staff.dm | 30 +- code/modules/projectiles/guns/magic/wand.dm | 16 +- .../projectiles/guns/special/blastcannon.dm | 2 +- .../guns/special/grenade_launcher.dm | 2 +- .../projectiles/guns/special/hand_of_midas.dm | 4 +- .../projectiles/guns/special/meat_hook.dm | 4 +- .../projectiles/guns/special/syringe_gun.dm | 2 +- code/modules/projectiles/projectile.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 6 +- .../projectile/bullets/cannonball.dm | 2 +- .../projectiles/projectile/bullets/shotgun.dm | 2 +- .../projectile/energy/net_snare.dm | 6 +- .../projectile/energy/nuclear_particle.dm | 2 +- .../projectiles/projectile/energy/photon.dm | 2 +- .../projectiles/projectile/energy/stun.dm | 2 +- .../projectiles/projectile/energy/thermal.dm | 4 +- code/modules/projectiles/projectile/magic.dm | 10 +- .../projectiles/projectile/special/curse.dm | 4 +- .../projectiles/projectile/special/gravity.dm | 6 +- code/modules/reagents/chemistry/items.dm | 10 +- .../chemistry/machinery/chem_dispenser.dm | 2 +- .../reagents/drinks/alcohol_reagents.dm | 8 +- .../chemistry/reagents/drug_reagents.dm | 2 +- .../impure_medicine_reagents.dm | 4 +- .../chemistry/reagents/medicine_reagents.dm | 2 +- .../reagents/reaction_agents_reagents.dm | 6 +- code/modules/reagents/chemistry/recipes.dm | 4 +- .../chemistry/recipes/cat2_medicines.dm | 8 +- .../reagents/chemistry/recipes/catalysts.dm | 2 +- .../reagents/chemistry/recipes/others.dm | 26 +- .../chemistry/recipes/pyrotechnics.dm | 12 +- .../chemistry/recipes/reaction_agents.dm | 2 +- .../reagents/reagent_containers/cups/_cup.dm | 2 +- .../reagent_containers/cups/drinks.dm | 2 +- .../reagent_containers/cups/glassbottle.dm | 6 +- .../reagents/reagent_containers/cups/soda.dm | 6 +- .../reagents/reagent_containers/spray.dm | 4 +- code/modules/recycling/conveyor.dm | 6 +- code/modules/recycling/disposal/bin.dm | 2 +- code/modules/recycling/disposal/holder.dm | 2 +- code/modules/recycling/disposal/outlet.dm | 2 +- .../recycling/disposal/pipe_sorting.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 6 +- code/modules/religion/burdened/psyker.dm | 8 +- code/modules/religion/pyre/pyre_rites.dm | 4 +- code/modules/religion/religion_sects.dm | 2 +- .../religion/sparring/ceremonial_gear.dm | 4 +- .../research/anomaly/anomaly_refinery.dm | 2 +- code/modules/research/destructive_analyzer.dm | 2 +- code/modules/research/experimentor.dm | 2 +- .../modules/research/machinery/_production.dm | 2 +- .../research/ordnance/doppler_array.dm | 2 +- .../research/ordnance/tank_compressor.dm | 2 +- code/modules/research/stock_parts.dm | 6 +- .../xenobiology/crossbreeding/_misc.dm | 4 +- .../xenobiology/crossbreeding/_weapons.dm | 10 +- .../xenobiology/crossbreeding/burning.dm | 8 +- .../xenobiology/crossbreeding/charged.dm | 2 +- .../xenobiology/crossbreeding/chilling.dm | 4 +- .../xenobiology/crossbreeding/industrial.dm | 4 +- .../xenobiology/crossbreeding/regenerative.dm | 2 +- .../xenobiology/vatgrowing/vatgrower.dm | 2 +- .../research/xenobiology/xenobiology.dm | 6 +- .../security_levels/security_level_datums.dm | 8 +- code/modules/shuttle/assault_pod.dm | 2 +- code/modules/shuttle/emergency.dm | 2 +- code/modules/shuttle/navigation_computer.dm | 8 +- .../spell_types/aoe_spell/area_conversion.dm | 2 +- .../spells/spell_types/aoe_spell/knock.dm | 2 +- .../spell_types/aoe_spell/magic_missile.dm | 2 +- .../spells/spell_types/aoe_spell/repulse.dm | 6 +- .../spell_types/aoe_spell/sacred_flame.dm | 2 +- .../spells/spell_types/charged/tesla_blast.dm | 6 +- .../spells/spell_types/conjure/_conjure.dm | 2 +- .../spells/spell_types/conjure/bees.dm | 2 +- .../spells/spell_types/conjure/carp.dm | 2 +- .../spells/spell_types/conjure/cheese.dm | 2 +- .../spells/spell_types/conjure/constructs.dm | 2 +- .../spells/spell_types/conjure/creatures.dm | 2 +- .../spells/spell_types/conjure/ed_swarm.dm | 2 +- .../spells/spell_types/conjure/link_worlds.dm | 2 +- .../spells/spell_types/conjure/simian.dm | 2 +- .../spells/spell_types/jaunt/bloodcrawl.dm | 6 +- .../spell_types/jaunt/ethereal_jaunt.dm | 4 +- .../spells/spell_types/madness_curse.dm | 2 +- .../spell_types/pointed/abyssal_gaze.dm | 2 +- .../spells/spell_types/pointed/blind.dm | 2 +- .../spells/spell_types/pointed/fireball.dm | 2 +- .../spell_types/pointed/lightning_bolt.dm | 2 +- .../spell_types/pointed/mind_transfer.dm | 4 +- .../spells/spell_types/pointed/swap.dm | 10 +- .../spells/spell_types/pointed/tie_shoes.dm | 6 +- .../spell_types/projectile/juggernaut.dm | 2 +- .../spells/spell_types/right_and_wrong.dm | 4 +- .../spells/spell_types/self/basic_heal.dm | 2 +- .../modules/spells/spell_types/self/charge.dm | 2 +- .../spells/spell_types/self/disable_tech.dm | 4 +- .../spells/spell_types/self/forcewall.dm | 2 +- .../modules/spells/spell_types/self/mutate.dm | 2 +- .../spell_types/self/sanguine_strike.dm | 4 +- .../spells/spell_types/self/summonitem.dm | 2 +- .../spells/spell_types/self/voice_of_god.dm | 2 +- .../spell_types/shapeshift/_shapeshift.dm | 2 +- .../spells/spell_types/teleport/_teleport.dm | 4 +- .../spells/spell_types/teleport/blink.dm | 4 +- .../spells/spell_types/teleport/teleport.dm | 4 +- .../spells/spell_types/touch/_touch.dm | 2 +- .../spell_types/touch/duffelbag_curse.dm | 2 +- .../spell_types/touch/flesh_to_stone.dm | 2 +- .../modules/spells/spell_types/touch/smite.dm | 4 +- code/modules/surgery/advanced/brainwashing.dm | 6 +- code/modules/surgery/advanced/lobotomy.dm | 6 +- code/modules/surgery/advanced/pacification.dm | 6 +- code/modules/surgery/amputation.dm | 12 +- code/modules/surgery/bodyparts/_bodyparts.dm | 6 +- code/modules/surgery/bodyparts/head.dm | 4 +- .../species_parts/ethereal_bodyparts.dm | 20 +- .../species_parts/lizard_bodyparts.dm | 8 +- .../bodyparts/species_parts/misc_bodyparts.dm | 8 +- .../bodyparts/species_parts/moth_bodyparts.dm | 8 +- code/modules/surgery/bone_mending.dm | 2 +- code/modules/surgery/brain_surgery.dm | 6 +- code/modules/surgery/burn_dressing.dm | 6 +- code/modules/surgery/cavity_implant.dm | 4 +- code/modules/surgery/coronary_bypass.dm | 20 +- code/modules/surgery/gastrectomy.dm | 10 +- code/modules/surgery/healing.dm | 4 +- code/modules/surgery/hepatectomy.dm | 10 +- code/modules/surgery/implant_removal.dm | 2 +- code/modules/surgery/lipoplasty.dm | 16 +- code/modules/surgery/lobectomy.dm | 10 +- code/modules/surgery/mechanic_steps.dm | 16 +- code/modules/surgery/organ_manipulation.dm | 8 +- code/modules/surgery/organic_steps.dm | 28 +- code/modules/surgery/organs/autosurgeon.dm | 2 +- .../organs/external/wings/functional_wings.dm | 2 +- .../organs/external/wings/moth_wings.dm | 2 +- .../organs/internal/cyberimp/augments_arms.dm | 10 +- .../internal/cyberimp/augments_chest.dm | 2 +- .../surgery/organs/internal/ears/_ears.dm | 2 +- .../surgery/organs/internal/heart/_heart.dm | 4 +- .../organs/internal/heart/heart_anomalock.dm | 2 +- .../organs/internal/heart/heart_ethereal.dm | 6 +- .../internal/stomach/stomach_ethereal.dm | 2 +- .../internal/vocal_cords/_vocal_cords.dm | 2 +- code/modules/surgery/plastic_surgery.dm | 6 +- code/modules/surgery/repair_puncture.dm | 6 +- code/modules/surgery/revival.dm | 6 +- code/modules/surgery/sleeper_protocol.dm | 4 +- code/modules/surgery/stomachpump.dm | 2 +- code/modules/surgery/tools.dm | 30 +- .../modules/transport/_transport_machinery.dm | 2 +- .../transport/elevator/elev_controller.dm | 4 +- code/modules/transport/linear_controller.dm | 2 +- .../modules/transport/tram/tram_controller.dm | 20 +- code/modules/transport/tram/tram_doors.dm | 10 +- code/modules/transport/tram/tram_signals.dm | 4 +- .../modules/transport/tram/tram_structures.dm | 4 +- code/modules/vehicles/cars/clowncar.dm | 4 +- code/modules/vehicles/cars/vim.dm | 2 +- code/modules/vehicles/lavaboat.dm | 2 +- code/modules/vehicles/mecha/_mecha.dm | 12 +- code/modules/vehicles/mecha/combat/durand.dm | 6 +- code/modules/vehicles/mecha/combat/justice.dm | 22 +- .../modules/vehicles/mecha/combat/marauder.dm | 2 +- code/modules/vehicles/mecha/combat/phazon.dm | 2 +- .../vehicles/mecha/combat/savannah_ivanov.dm | 12 +- .../mecha/equipment/mecha_equipment.dm | 4 +- .../mecha/equipment/tools/mining_tools.dm | 6 +- .../mecha/equipment/tools/work_tools.dm | 4 +- .../mecha/equipment/weapons/mecha_ammo.dm | 6 +- .../mecha/equipment/weapons/weapons.dm | 36 +- .../modules/vehicles/mecha/mech_fabricator.dm | 4 +- .../vehicles/mecha/mech_melee_attack.dm | 8 +- code/modules/vehicles/mecha/mecha_actions.dm | 2 +- code/modules/vehicles/mecha/mecha_defense.dm | 12 +- .../vehicles/mecha/mecha_mob_interaction.dm | 4 +- code/modules/vehicles/mecha/working/clarke.dm | 2 +- code/modules/vehicles/mecha/working/ripley.dm | 10 +- code/modules/vehicles/scooter.dm | 2 +- code/modules/vehicles/vehicle_actions.dm | 4 +- code/modules/vehicles/vehicle_key.dm | 4 +- code/modules/vending/_vending.dm | 2 +- code/modules/vending/runic_vendor.dm | 2 +- .../wiremod/components/action/soundemitter.dm | 24 +- code/modules/wiremod/core/marker.dm | 2 +- code/modules/wiremod/core/usb_cable.dm | 4 +- .../wiremod/shell/brain_computer_interface.dm | 2 +- code/modules/wiremod/shell/gun.dm | 2 +- code/modules/zombie/items.dm | 2 +- code/modules/zombie/organs.dm | 2 +- sound/ambience/antag/attribution.txt | 11 - sound/ambience/antag/heretic/attribution.txt | 1 - sound/ambience/aurora_caelus/attribution.txt | 2 + .../{ => aurora_caelus}/aurora_caelus.ogg | Bin .../aurora_caelus_short.ogg | Bin sound/ambience/{ => beach}/seag1.ogg | Bin sound/ambience/{ => beach}/seag2.ogg | Bin sound/ambience/{ => beach}/seag3.ogg | Bin sound/ambience/{ => beach}/shore.ogg | Bin .../earth_rumble}/earth_rumble.ogg | Bin .../earth_rumble}/earth_rumble_distant1.ogg | Bin .../earth_rumble}/earth_rumble_distant2.ogg | Bin .../earth_rumble}/earth_rumble_distant3.ogg | Bin .../earth_rumble}/earth_rumble_distant4.ogg | Bin .../ambience/{ => engineering}/ambiatmos.ogg | Bin .../ambience/{ => engineering}/ambiatmos2.ogg | Bin sound/ambience/{ => engineering}/ambisin1.ogg | Bin sound/ambience/{ => engineering}/ambisin2.ogg | Bin sound/ambience/{ => engineering}/ambisin3.ogg | Bin sound/ambience/{ => engineering}/ambisin4.ogg | Bin sound/ambience/{ => engineering}/ambitech.ogg | Bin .../ambience/{ => engineering}/ambitech2.ogg | Bin .../ambience/{ => engineering}/ambitech3.ogg | Bin sound/ambience/{ => general}/ambigen1.ogg | Bin sound/ambience/{ => general}/ambigen10.ogg | Bin sound/ambience/{ => general}/ambigen11.ogg | Bin sound/ambience/{ => general}/ambigen12.ogg | Bin sound/ambience/{ => general}/ambigen13.ogg | Bin sound/ambience/{ => general}/ambigen14.ogg | Bin sound/ambience/{ => general}/ambigen2.ogg | Bin sound/ambience/{ => general}/ambigen3.ogg | Bin sound/ambience/{ => general}/ambigen4.ogg | Bin sound/ambience/{ => general}/ambigen5.ogg | Bin sound/ambience/{ => general}/ambigen6.ogg | Bin sound/ambience/{ => general}/ambigen7.ogg | Bin sound/ambience/{ => general}/ambigen8.ogg | Bin sound/ambience/{ => general}/ambigen9.ogg | Bin sound/ambience/{ => general}/shipambience.ogg | Bin sound/ambience/{ => holy}/ambicha1.ogg | Bin sound/ambience/{ => holy}/ambicha2.ogg | Bin sound/ambience/{ => holy}/ambicha3.ogg | Bin sound/ambience/{ => holy}/ambicha4.ogg | Bin sound/ambience/{ => holy}/ambiholy.ogg | Bin sound/ambience/{ => holy}/ambiholy2.ogg | Bin sound/ambience/{ => holy}/ambiholy3.ogg | Bin .../ambience/{ => icemoon}/ambiicemelody1.ogg | Bin .../ambience/{ => icemoon}/ambiicemelody2.ogg | Bin .../ambience/{ => icemoon}/ambiicemelody3.ogg | Bin .../ambience/{ => icemoon}/ambiicemelody4.ogg | Bin .../ambience/{ => icemoon}/ambiicesting1.ogg | Bin .../ambience/{ => icemoon}/ambiicesting2.ogg | Bin .../ambience/{ => icemoon}/ambiicesting3.ogg | Bin .../ambience/{ => icemoon}/ambiicesting4.ogg | Bin .../ambience/{ => icemoon}/ambiicesting5.ogg | Bin sound/ambience/{ => icemoon}/ambiicetheme.ogg | Bin sound/ambience/{ => lavaland}/ambicave.ogg | Bin sound/ambience/{ => lavaland}/ambilava1.ogg | Bin sound/ambience/{ => lavaland}/ambilava2.ogg | Bin sound/ambience/{ => lavaland}/ambilava3.ogg | Bin sound/ambience/{ => lavaland}/magma.ogg | Bin sound/ambience/license.txt | 17 - .../ambience/{ => maintenance}/ambimaint.ogg | Bin .../ambience/{ => maintenance}/ambimaint1.ogg | Bin .../{ => maintenance}/ambimaint10.ogg | Bin .../{ => maintenance}/ambimaint11.ogg | Bin .../{ => maintenance}/ambimaint12.ogg | Bin .../ambience/{ => maintenance}/ambimaint2.ogg | Bin .../ambience/{ => maintenance}/ambimaint3.ogg | Bin .../ambience/{ => maintenance}/ambimaint4.ogg | Bin .../ambience/{ => maintenance}/ambimaint5.ogg | Bin .../ambience/{ => maintenance}/ambimaint6.ogg | Bin .../ambience/{ => maintenance}/ambimaint7.ogg | Bin .../ambience/{ => maintenance}/ambimaint8.ogg | Bin .../ambience/{ => maintenance}/ambimaint9.ogg | Bin sound/ambience/maintenance/attribution.txt | 2 + .../{ => maintenance}/maintambience.ogg | Bin .../{ => maintenance}/source_corridor2.ogg | Bin sound/ambience/{ => medical}/ambimo1.ogg | Bin sound/ambience/{ => medical}/ambimo2.ogg | Bin sound/ambience/{ => medical}/ambinice.ogg | Bin sound/ambience/{ => medical}/ambiviro.ogg | Bin sound/ambience/{ => medical}/ambiviro1.ogg | Bin sound/ambience/{ => medical}/ambiviro2.ogg | Bin sound/ambience/{ => misc}/ambiatm1.ogg | Bin sound/ambience/{ => misc}/ambidanger.ogg | Bin sound/ambience/{ => misc}/ambidanger2.ogg | Bin sound/ambience/{ => misc}/ambifailure.ogg | Bin sound/ambience/{ => misc}/ambimalf.ogg | Bin sound/ambience/{ => misc}/ambimystery.ogg | Bin sound/ambience/{ => misc}/ambiodd.ogg | Bin sound/ambience/{ => misc}/ambireebe1.ogg | Bin sound/ambience/{ => misc}/ambireebe2.ogg | Bin sound/ambience/{ => misc}/ambireebe3.ogg | Bin sound/ambience/{ => misc}/ambivapor1.ogg | Bin sound/ambience/{ => misc}/cavesound3.ogg | Bin sound/ambience/{ => misc}/signal.ogg | Bin sound/ambience/{ => misc}/source_holehit3.ogg | Bin sound/ambience/{ => misc}/ticking_clock.ogg | Bin sound/ambience/{ => ruin}/ambimine.ogg | Bin sound/ambience/{ => ruin}/ambiruin.ogg | Bin sound/ambience/{ => ruin}/ambiruin2.ogg | Bin sound/ambience/{ => ruin}/ambiruin3.ogg | Bin sound/ambience/{ => ruin}/ambiruin4.ogg | Bin sound/ambience/{ => ruin}/ambiruin5.ogg | Bin sound/ambience/{ => ruin}/ambiruin6.ogg | Bin sound/ambience/{ => ruin}/ambiruin7.ogg | Bin sound/ambience/{ => ruin}/servicebell.ogg | Bin sound/ambience/{ => security}/ambidet1.ogg | Bin sound/ambience/{ => security}/ambidet2.ogg | Bin sound/ambience/security/attribution.txt | 4 + sound/ambience/{ => space}/ambispace.ogg | Bin sound/ambience/{ => space}/ambispace2.ogg | Bin sound/ambience/{ => space}/ambispace3.ogg | Bin sound/ambience/{ => space}/ambispace4.ogg | Bin sound/ambience/{ => space}/ambispace5.ogg | Bin sound/ambience/{ => space}/ambispace6.ogg | Bin .../weather/ashstorm/inside/active_end.ogg | Bin .../weather/ashstorm/inside/active_mid1.ogg | Bin .../weather/ashstorm/inside/active_mid2.ogg | Bin .../weather/ashstorm/inside/active_mid3.ogg | Bin .../weather/ashstorm/inside/active_start.ogg | Bin .../weather/ashstorm/inside/weak_end.ogg | Bin .../weather/ashstorm/inside/weak_mid1.ogg | Bin .../weather/ashstorm/inside/weak_mid2.ogg | Bin .../weather/ashstorm/inside/weak_mid3.ogg | Bin .../weather/ashstorm/inside/weak_start.ogg | Bin .../weather/ashstorm/outside/active_end.ogg | Bin .../weather/ashstorm/outside/active_mid1.ogg | Bin .../weather/ashstorm/outside/active_mid2.ogg | Bin .../weather/ashstorm/outside/active_mid3.ogg | Bin .../weather/ashstorm/outside/active_start.ogg | Bin .../weather/ashstorm/outside/weak_end.ogg | Bin .../weather/ashstorm/outside/weak_mid1.ogg | Bin .../weather/ashstorm/outside/weak_mid2.ogg | Bin .../weather/ashstorm/outside/weak_mid3.ogg | Bin .../weather/ashstorm/outside/weak_start.ogg | Bin sound/{voice => announcer}/ApproachingTG.ogg | Bin sound/{misc => announcer/alarm}/airraid.ogg | Bin sound/announcer/alarm/attribution.txt | 2 + sound/{misc => announcer/alarm}/bloblarm.ogg | Bin .../announcement}/announce.ogg | Bin .../announcement}/announce_dig.ogg | Bin .../announcement}/announce_syndi.ogg | Bin sound/{ai => announcer}/default/aimalf.ogg | Bin sound/{ai => announcer}/default/aliens.ogg | Bin sound/{ai => announcer}/default/animes.ogg | Bin sound/{ai => announcer}/default/attention.ogg | Bin .../default/commandreport.ogg | Bin .../{ai => announcer}/default/granomalies.ogg | Bin sound/{ai => announcer}/default/intercept.ogg | Bin sound/{ai => announcer}/default/ionstorm.ogg | Bin sound/{ai => announcer}/default/meteors.ogg | Bin sound/{ai => announcer}/default/outbreak5.ogg | Bin sound/{ai => announcer}/default/outbreak7.ogg | Bin sound/{ai => announcer}/default/poweroff.ogg | Bin sound/{ai => announcer}/default/poweron.ogg | Bin sound/{ai => announcer}/default/radiation.ogg | Bin .../default/shuttlecalled.ogg | Bin .../{ai => announcer}/default/shuttledock.ogg | Bin .../default/shuttlerecalled.ogg | Bin .../{ai => announcer}/default/spanomalies.ogg | Bin sound/{ai => announcer}/default/welcome.ogg | Bin sound/{ai => announcer}/intern/alerts/1.ogg | Bin sound/{ai => announcer}/intern/alerts/10.ogg | Bin sound/{ai => announcer}/intern/alerts/11.ogg | Bin sound/{ai => announcer}/intern/alerts/12.ogg | Bin sound/{ai => announcer}/intern/alerts/13.ogg | Bin sound/{ai => announcer}/intern/alerts/14.ogg | Bin sound/{ai => announcer}/intern/alerts/2.ogg | Bin sound/{ai => announcer}/intern/alerts/3.ogg | Bin sound/{ai => announcer}/intern/alerts/4.ogg | Bin sound/{ai => announcer}/intern/alerts/5.ogg | Bin sound/{ai => announcer}/intern/alerts/6.ogg | Bin sound/{ai => announcer}/intern/alerts/7.ogg | Bin sound/{ai => announcer}/intern/alerts/8.ogg | Bin sound/{ai => announcer}/intern/alerts/9.ogg | Bin sound/{ai => announcer}/intern/aliens.ogg | Bin sound/{ai => announcer}/intern/animes.ogg | Bin .../intern/commandreport/1.ogg | Bin .../intern/commandreport/2.ogg | Bin .../intern/commandreport/3.ogg | Bin .../{ai => announcer}/intern/granomalies.ogg | Bin sound/{ai => announcer}/intern/intercept.ogg | Bin sound/{ai => announcer}/intern/ionstorm.ogg | Bin sound/{ai => announcer}/intern/meteors.ogg | Bin sound/{ai => announcer}/intern/outbreak5.ogg | Bin sound/{ai => announcer}/intern/outbreak7.ogg | Bin sound/{ai => announcer}/intern/poweroff.ogg | Bin sound/{ai => announcer}/intern/poweron.ogg | Bin sound/{ai => announcer}/intern/radiation.ogg | Bin .../intern/shuttlecalled.ogg | Bin .../{ai => announcer}/intern/shuttledock.ogg | Bin .../intern/shuttlerecalled.ogg | Bin .../{ai => announcer}/intern/spanomalies.ogg | Bin sound/{ai => announcer}/intern/welcome/1.ogg | Bin sound/{ai => announcer}/intern/welcome/2.ogg | Bin sound/{ai => announcer}/intern/welcome/3.ogg | Bin sound/{ai => announcer}/intern/welcome/4.ogg | Bin sound/{ai => announcer}/intern/welcome/5.ogg | Bin sound/{ai => announcer}/intern/welcome/6.ogg | Bin sound/{ai => announcer}/medbot/aliens.ogg | Bin sound/{ai => announcer}/medbot/animes.ogg | Bin sound/{ai => announcer}/medbot/attention.ogg | Bin .../medbot/commandreport.ogg | Bin .../{ai => announcer}/medbot/granomalies.ogg | Bin sound/{ai => announcer}/medbot/intercept.ogg | Bin sound/{ai => announcer}/medbot/ionstorm.ogg | Bin sound/{ai => announcer}/medbot/meteors.ogg | Bin sound/{ai => announcer}/medbot/newAI.ogg | Bin sound/{ai => announcer}/medbot/outbreak5.ogg | Bin sound/{ai => announcer}/medbot/outbreak7.ogg | Bin sound/{ai => announcer}/medbot/poweroff.ogg | Bin sound/{ai => announcer}/medbot/poweron.ogg | Bin sound/{ai => announcer}/medbot/radiation.ogg | Bin .../medbot/shuttlecalled.ogg | Bin .../{ai => announcer}/medbot/shuttledock.ogg | Bin .../medbot/shuttlerecalled.ogg | Bin .../{ai => announcer}/medbot/spanomalies.ogg | Bin sound/{ai => announcer}/medbot/welcome.ogg | Bin sound/{misc => announcer/notice}/notice1.ogg | Bin sound/{misc => announcer/notice}/notice2.ogg | Bin sound/{misc => announcer/notice}/notice3.ogg | Bin sound/{ => announcer}/vox_fem/,.ogg | Bin sound/{ => announcer}/vox_fem/..ogg | Bin sound/{ => announcer}/vox_fem/a.ogg | Bin sound/{ => announcer}/vox_fem/abduction.ogg | Bin sound/{ => announcer}/vox_fem/abortions.ogg | Bin sound/{ => announcer}/vox_fem/above.ogg | Bin sound/{ => announcer}/vox_fem/absorb.ogg | Bin sound/{ => announcer}/vox_fem/absorbed.ogg | Bin sound/{ => announcer}/vox_fem/absorbing.ogg | Bin sound/{ => announcer}/vox_fem/abstain.ogg | Bin .../{ => announcer}/vox_fem/accelerating.ogg | Bin sound/{ => announcer}/vox_fem/accelerator.ogg | Bin sound/{ => announcer}/vox_fem/accepted.ogg | Bin sound/{ => announcer}/vox_fem/access.ogg | Bin sound/{ => announcer}/vox_fem/acknowledge.ogg | Bin .../{ => announcer}/vox_fem/acknowledged.ogg | Bin sound/{ => announcer}/vox_fem/acquired.ogg | Bin sound/{ => announcer}/vox_fem/acquisition.ogg | Bin sound/{ => announcer}/vox_fem/across.ogg | Bin sound/{ => announcer}/vox_fem/activate.ogg | Bin sound/{ => announcer}/vox_fem/activated.ogg | Bin sound/{ => announcer}/vox_fem/activating.ogg | Bin sound/{ => announcer}/vox_fem/activation.ogg | Bin sound/{ => announcer}/vox_fem/active.ogg | Bin sound/{ => announcer}/vox_fem/activity.ogg | Bin sound/{ => announcer}/vox_fem/adios.ogg | Bin .../vox_fem/administration.ogg | Bin sound/{ => announcer}/vox_fem/advanced.ogg | Bin sound/{ => announcer}/vox_fem/advised.ogg | Bin sound/{ => announcer}/vox_fem/affect.ogg | Bin sound/{ => announcer}/vox_fem/affected.ogg | Bin sound/{ => announcer}/vox_fem/affecting.ogg | Bin sound/{ => announcer}/vox_fem/aft.ogg | Bin sound/{ => announcer}/vox_fem/after.ogg | Bin sound/{ => announcer}/vox_fem/agent.ogg | Bin sound/{ => announcer}/vox_fem/ai.ogg | Bin sound/{ => announcer}/vox_fem/air.ogg | Bin sound/{ => announcer}/vox_fem/airlock.ogg | Bin sound/{ => announcer}/vox_fem/alarm.ogg | Bin sound/{ => announcer}/vox_fem/alarmed.ogg | Bin sound/{ => announcer}/vox_fem/alarming.ogg | Bin sound/{ => announcer}/vox_fem/alcohol.ogg | Bin sound/{ => announcer}/vox_fem/alert.ogg | Bin sound/{ => announcer}/vox_fem/alerted.ogg | Bin sound/{ => announcer}/vox_fem/alerting.ogg | Bin sound/{ => announcer}/vox_fem/alien.ogg | Bin sound/{ => announcer}/vox_fem/align.ogg | Bin sound/{ => announcer}/vox_fem/aligned.ogg | Bin sound/{ => announcer}/vox_fem/all.ogg | Bin sound/{ => announcer}/vox_fem/allow.ogg | Bin sound/{ => announcer}/vox_fem/alongside.ogg | Bin sound/{ => announcer}/vox_fem/alpha.ogg | Bin sound/{ => announcer}/vox_fem/also.ogg | Bin sound/{ => announcer}/vox_fem/am.ogg | Bin sound/{ => announcer}/vox_fem/amigo.ogg | Bin sound/{ => announcer}/vox_fem/ammunition.ogg | Bin sound/{ => announcer}/vox_fem/amount.ogg | Bin sound/{ => announcer}/vox_fem/an.ogg | Bin sound/{ => announcer}/vox_fem/and.ogg | Bin sound/{ => announcer}/vox_fem/animal.ogg | Bin sound/{ => announcer}/vox_fem/annihilate.ogg | Bin sound/{ => announcer}/vox_fem/annihilated.ogg | Bin .../{ => announcer}/vox_fem/annihilating.ogg | Bin .../{ => announcer}/vox_fem/annihilation.ogg | Bin .../{ => announcer}/vox_fem/announcement.ogg | Bin sound/{ => announcer}/vox_fem/anomalous.ogg | Bin sound/{ => announcer}/vox_fem/answer.ogg | Bin sound/{ => announcer}/vox_fem/antenna.ogg | Bin .../{ => announcer}/vox_fem/anti-noblium.ogg | Bin sound/{ => announcer}/vox_fem/any.ogg | Bin sound/{ => announcer}/vox_fem/apc.ogg | Bin sound/{ => announcer}/vox_fem/apprehend.ogg | Bin sound/{ => announcer}/vox_fem/approach.ogg | Bin sound/{ => announcer}/vox_fem/arc.ogg | Bin sound/{ => announcer}/vox_fem/arcs.ogg | Bin sound/{ => announcer}/vox_fem/are.ogg | Bin sound/{ => announcer}/vox_fem/area.ogg | Bin sound/{ => announcer}/vox_fem/arm.ogg | Bin sound/{ => announcer}/vox_fem/armed.ogg | Bin sound/{ => announcer}/vox_fem/armor.ogg | Bin sound/{ => announcer}/vox_fem/armory.ogg | Bin sound/{ => announcer}/vox_fem/around.ogg | Bin sound/{ => announcer}/vox_fem/array.ogg | Bin sound/{ => announcer}/vox_fem/arrest.ogg | Bin sound/{ => announcer}/vox_fem/artillery.ogg | Bin sound/{ => announcer}/vox_fem/asimov.ogg | Bin sound/{ => announcer}/vox_fem/ask.ogg | Bin sound/{ => announcer}/vox_fem/ass.ogg | Bin sound/{ => announcer}/vox_fem/asshole.ogg | Bin sound/{ => announcer}/vox_fem/assholes.ogg | Bin sound/{ => announcer}/vox_fem/assistance.ogg | Bin sound/{ => announcer}/vox_fem/assistant.ogg | Bin sound/{ => announcer}/vox_fem/at.ogg | Bin sound/{ => announcer}/vox_fem/ate.ogg | Bin sound/{ => announcer}/vox_fem/atmosphere.ogg | Bin sound/{ => announcer}/vox_fem/atmospheric.ogg | Bin .../{ => announcer}/vox_fem/atmospherics.ogg | Bin sound/{ => announcer}/vox_fem/atomic.ogg | Bin sound/{ => announcer}/vox_fem/attention.ogg | Bin .../vox_fem/authentication.ogg | Bin sound/{ => announcer}/vox_fem/authorize.ogg | Bin sound/{ => announcer}/vox_fem/authorized.ogg | Bin sound/{ => announcer}/vox_fem/automatic.ogg | Bin sound/{ => announcer}/vox_fem/away.ogg | Bin sound/{ => announcer}/vox_fem/awful.ogg | Bin sound/{ => announcer}/vox_fem/b.ogg | Bin sound/{ => announcer}/vox_fem/back.ogg | Bin sound/{ => announcer}/vox_fem/backman.ogg | Bin sound/{ => announcer}/vox_fem/bad.ogg | Bin sound/{ => announcer}/vox_fem/bag.ogg | Bin sound/{ => announcer}/vox_fem/bailey.ogg | Bin sound/{ => announcer}/vox_fem/bar.ogg | Bin sound/{ => announcer}/vox_fem/barracks.ogg | Bin sound/{ => announcer}/vox_fem/bartender.ogg | Bin sound/{ => announcer}/vox_fem/base.ogg | Bin sound/{ => announcer}/vox_fem/bay.ogg | Bin sound/{ => announcer}/vox_fem/be.ogg | Bin sound/{ => announcer}/vox_fem/beaker.ogg | Bin sound/{ => announcer}/vox_fem/beam.ogg | Bin sound/{ => announcer}/vox_fem/been.ogg | Bin sound/{ => announcer}/vox_fem/beep.ogg | Bin sound/{ => announcer}/vox_fem/before.ogg | Bin sound/{ => announcer}/vox_fem/began.ogg | Bin sound/{ => announcer}/vox_fem/begin.ogg | Bin sound/{ => announcer}/vox_fem/begins.ogg | Bin sound/{ => announcer}/vox_fem/below.ogg | Bin sound/{ => announcer}/vox_fem/beside.ogg | Bin sound/{ => announcer}/vox_fem/beware.ogg | Bin sound/{ => announcer}/vox_fem/beyond.ogg | Bin sound/{ => announcer}/vox_fem/big.ogg | Bin sound/{ => announcer}/vox_fem/billion.ogg | Bin sound/{ => announcer}/vox_fem/biohazard.ogg | Bin sound/{ => announcer}/vox_fem/biological.ogg | Bin sound/{ => announcer}/vox_fem/birdwell.ogg | Bin sound/{ => announcer}/vox_fem/bitch.ogg | Bin sound/{ => announcer}/vox_fem/bitches.ogg | Bin sound/{ => announcer}/vox_fem/bitcoin.ogg | Bin sound/{ => announcer}/vox_fem/bitrun.ogg | Bin sound/{ => announcer}/vox_fem/bitrunner.ogg | Bin sound/{ => announcer}/vox_fem/bitrunning.ogg | Bin sound/{ => announcer}/vox_fem/black.ogg | Bin sound/{ => announcer}/vox_fem/blast.ogg | Bin sound/{ => announcer}/vox_fem/bleed.ogg | Bin sound/{ => announcer}/vox_fem/blob.ogg | Bin sound/{ => announcer}/vox_fem/blocked.ogg | Bin sound/{ => announcer}/vox_fem/blood.ogg | Bin sound/{ => announcer}/vox_fem/bloop.ogg | Bin sound/{ => announcer}/vox_fem/blue.ogg | Bin sound/{ => announcer}/vox_fem/bluespace.ogg | Bin sound/{ => announcer}/vox_fem/bomb.ogg | Bin sound/{ => announcer}/vox_fem/bone.ogg | Bin sound/{ => announcer}/vox_fem/botanist.ogg | Bin sound/{ => announcer}/vox_fem/botany.ogg | Bin sound/{ => announcer}/vox_fem/bottle.ogg | Bin sound/{ => announcer}/vox_fem/bottom.ogg | Bin sound/{ => announcer}/vox_fem/bravo.ogg | Bin sound/{ => announcer}/vox_fem/breach.ogg | Bin sound/{ => announcer}/vox_fem/breached.ogg | Bin sound/{ => announcer}/vox_fem/break.ogg | Bin sound/{ => announcer}/vox_fem/bridge.ogg | Bin sound/{ => announcer}/vox_fem/brig.ogg | Bin sound/{ => announcer}/vox_fem/broke.ogg | Bin sound/{ => announcer}/vox_fem/broken.ogg | Bin sound/{ => announcer}/vox_fem/bump.ogg | Bin sound/{ => announcer}/vox_fem/bumped.ogg | Bin sound/{ => announcer}/vox_fem/bumps.ogg | Bin sound/{ => announcer}/vox_fem/bust.ogg | Bin sound/{ => announcer}/vox_fem/but.ogg | Bin sound/{ => announcer}/vox_fem/button.ogg | Bin sound/{ => announcer}/vox_fem/bypass.ogg | Bin sound/{ => announcer}/vox_fem/c.ogg | Bin sound/{ => announcer}/vox_fem/cable.ogg | Bin sound/{ => announcer}/vox_fem/call.ogg | Bin sound/{ => announcer}/vox_fem/called.ogg | Bin sound/{ => announcer}/vox_fem/can.ogg | Bin sound/{ => announcer}/vox_fem/canal.ogg | Bin sound/{ => announcer}/vox_fem/canister.ogg | Bin sound/{ => announcer}/vox_fem/cap.ogg | Bin sound/{ => announcer}/vox_fem/captain.ogg | Bin sound/{ => announcer}/vox_fem/capture.ogg | Bin sound/{ => announcer}/vox_fem/carbon.ogg | Bin sound/{ => announcer}/vox_fem/cargo.ogg | Bin sound/{ => announcer}/vox_fem/cascade.ogg | Bin sound/{ => announcer}/vox_fem/cat.ogg | Bin sound/{ => announcer}/vox_fem/cause.ogg | Bin sound/{ => announcer}/vox_fem/caused.ogg | Bin sound/{ => announcer}/vox_fem/causes.ogg | Bin sound/{ => announcer}/vox_fem/causing.ogg | Bin sound/{ => announcer}/vox_fem/ce.ogg | Bin sound/{ => announcer}/vox_fem/cease.ogg | Bin sound/{ => announcer}/vox_fem/ceiling.ogg | Bin sound/{ => announcer}/vox_fem/celsius.ogg | Bin sound/{ => announcer}/vox_fem/centcom.ogg | Bin sound/{ => announcer}/vox_fem/center.ogg | Bin sound/{ => announcer}/vox_fem/centi.ogg | Bin sound/{ => announcer}/vox_fem/central.ogg | Bin sound/{ => announcer}/vox_fem/challenge.ogg | Bin sound/{ => announcer}/vox_fem/chamber.ogg | Bin sound/{ => announcer}/vox_fem/change.ogg | Bin sound/{ => announcer}/vox_fem/changed.ogg | Bin sound/{ => announcer}/vox_fem/changeling.ogg | Bin sound/{ => announcer}/vox_fem/chapel.ogg | Bin sound/{ => announcer}/vox_fem/chaplain.ogg | Bin sound/{ => announcer}/vox_fem/charge.ogg | Bin sound/{ => announcer}/vox_fem/charlie.ogg | Bin sound/{ => announcer}/vox_fem/check.ogg | Bin sound/{ => announcer}/vox_fem/checkpoint.ogg | Bin sound/{ => announcer}/vox_fem/chemical.ogg | Bin sound/{ => announcer}/vox_fem/chemist.ogg | Bin sound/{ => announcer}/vox_fem/chief.ogg | Bin sound/{ => announcer}/vox_fem/christ.ogg | Bin sound/{ => announcer}/vox_fem/christmas.ogg | Bin sound/{ => announcer}/vox_fem/chuckle.ogg | Bin sound/{ => announcer}/vox_fem/circuit.ogg | Bin sound/{ => announcer}/vox_fem/cleanup.ogg | Bin sound/{ => announcer}/vox_fem/clear.ogg | Bin sound/{ => announcer}/vox_fem/clearance.ogg | Bin sound/{ => announcer}/vox_fem/clockwork.ogg | Bin sound/{ => announcer}/vox_fem/clog.ogg | Bin sound/{ => announcer}/vox_fem/close.ogg | Bin sound/{ => announcer}/vox_fem/closed.ogg | Bin sound/{ => announcer}/vox_fem/closing.ogg | Bin sound/{ => announcer}/vox_fem/clothing.ogg | Bin sound/{ => announcer}/vox_fem/clown.ogg | Bin sound/{ => announcer}/vox_fem/clowning.ogg | Bin sound/{ => announcer}/vox_fem/cmo.ogg | Bin sound/{ => announcer}/vox_fem/code.ogg | Bin sound/{ => announcer}/vox_fem/coded.ogg | Bin sound/{ => announcer}/vox_fem/coil.ogg | Bin sound/{ => announcer}/vox_fem/coils.ogg | Bin sound/{ => announcer}/vox_fem/cold.ogg | Bin sound/{ => announcer}/vox_fem/collider.ogg | Bin sound/{ => announcer}/vox_fem/combat.ogg | Bin sound/{ => announcer}/vox_fem/combatant.ogg | Bin sound/{ => announcer}/vox_fem/come.ogg | Bin sound/{ => announcer}/vox_fem/command.ogg | Bin .../{ => announcer}/vox_fem/communication.ogg | Bin sound/{ => announcer}/vox_fem/complete.ogg | Bin sound/{ => announcer}/vox_fem/completed.ogg | Bin sound/{ => announcer}/vox_fem/completion.ogg | Bin sound/{ => announcer}/vox_fem/complex.ogg | Bin sound/{ => announcer}/vox_fem/comply.ogg | Bin sound/{ => announcer}/vox_fem/computer.ogg | Bin sound/{ => announcer}/vox_fem/condition.ogg | Bin sound/{ => announcer}/vox_fem/conditions.ogg | Bin sound/{ => announcer}/vox_fem/condom.ogg | Bin sound/{ => announcer}/vox_fem/configure.ogg | Bin sound/{ => announcer}/vox_fem/configured.ogg | Bin sound/{ => announcer}/vox_fem/configuring.ogg | Bin sound/{ => announcer}/vox_fem/confirmed.ogg | Bin sound/{ => announcer}/vox_fem/connor.ogg | Bin sound/{ => announcer}/vox_fem/console.ogg | Bin sound/{ => announcer}/vox_fem/console2.ogg | Bin sound/{ => announcer}/vox_fem/construct.ogg | Bin sound/{ => announcer}/vox_fem/container.ogg | Bin sound/{ => announcer}/vox_fem/containment.ogg | Bin .../{ => announcer}/vox_fem/contamination.ogg | Bin sound/{ => announcer}/vox_fem/contraband.ogg | Bin sound/{ => announcer}/vox_fem/control.ogg | Bin sound/{ => announcer}/vox_fem/cook.ogg | Bin sound/{ => announcer}/vox_fem/cool.ogg | Bin sound/{ => announcer}/vox_fem/coolant.ogg | Bin sound/{ => announcer}/vox_fem/cooling.ogg | Bin sound/{ => announcer}/vox_fem/coomer.ogg | Bin sound/{ => announcer}/vox_fem/core.ogg | Bin sound/{ => announcer}/vox_fem/corgi.ogg | Bin sound/{ => announcer}/vox_fem/corporation.ogg | Bin sound/{ => announcer}/vox_fem/correct.ogg | Bin sound/{ => announcer}/vox_fem/corridor.ogg | Bin sound/{ => announcer}/vox_fem/corridors.ogg | Bin sound/{ => announcer}/vox_fem/could.ogg | Bin sound/{ => announcer}/vox_fem/couldnt.ogg | Bin sound/{ => announcer}/vox_fem/countdown.ogg | Bin sound/{ => announcer}/vox_fem/coward.ogg | Bin sound/{ => announcer}/vox_fem/cowards.ogg | Bin sound/{ => announcer}/vox_fem/crate.ogg | Bin sound/{ => announcer}/vox_fem/create.ogg | Bin sound/{ => announcer}/vox_fem/created.ogg | Bin sound/{ => announcer}/vox_fem/creating.ogg | Bin sound/{ => announcer}/vox_fem/creature.ogg | Bin sound/{ => announcer}/vox_fem/crew.ogg | Bin sound/{ => announcer}/vox_fem/critical.ogg | Bin sound/{ => announcer}/vox_fem/cross.ogg | Bin sound/{ => announcer}/vox_fem/cryogenic.ogg | Bin sound/{ => announcer}/vox_fem/crystal.ogg | Bin sound/{ => announcer}/vox_fem/cult.ogg | Bin sound/{ => announcer}/vox_fem/cultist.ogg | Bin sound/{ => announcer}/vox_fem/cunt.ogg | Bin sound/{ => announcer}/vox_fem/curator.ogg | Bin sound/{ => announcer}/vox_fem/cyborg.ogg | Bin sound/{ => announcer}/vox_fem/cyborgs.ogg | Bin sound/{ => announcer}/vox_fem/d.ogg | Bin sound/{ => announcer}/vox_fem/damage.ogg | Bin sound/{ => announcer}/vox_fem/damaged.ogg | Bin sound/{ => announcer}/vox_fem/danger.ogg | Bin sound/{ => announcer}/vox_fem/dangerous.ogg | Bin sound/{ => announcer}/vox_fem/day.ogg | Bin sound/{ => announcer}/vox_fem/deactivated.ogg | Bin sound/{ => announcer}/vox_fem/dead.ogg | Bin sound/{ => announcer}/vox_fem/death.ogg | Bin .../{ => announcer}/vox_fem/decompression.ogg | Bin .../vox_fem/decontamination.ogg | Bin sound/{ => announcer}/vox_fem/deeoo.ogg | Bin sound/{ => announcer}/vox_fem/defense.ogg | Bin sound/{ => announcer}/vox_fem/degrees.ogg | Bin .../{ => announcer}/vox_fem/delaminating.ogg | Bin .../{ => announcer}/vox_fem/delamination.ogg | Bin sound/{ => announcer}/vox_fem/delta.ogg | Bin sound/{ => announcer}/vox_fem/demon.ogg | Bin sound/{ => announcer}/vox_fem/denied.ogg | Bin sound/{ => announcer}/vox_fem/deny.ogg | Bin sound/{ => announcer}/vox_fem/departures.ogg | Bin sound/{ => announcer}/vox_fem/deploy.ogg | Bin sound/{ => announcer}/vox_fem/deployed.ogg | Bin sound/{ => announcer}/vox_fem/desire.ogg | Bin sound/{ => announcer}/vox_fem/desist.ogg | Bin sound/{ => announcer}/vox_fem/destroy.ogg | Bin sound/{ => announcer}/vox_fem/destroyed.ogg | Bin sound/{ => announcer}/vox_fem/destruction.ogg | Bin sound/{ => announcer}/vox_fem/detain.ogg | Bin sound/{ => announcer}/vox_fem/detect.ogg | Bin sound/{ => announcer}/vox_fem/detected.ogg | Bin sound/{ => announcer}/vox_fem/detecting.ogg | Bin sound/{ => announcer}/vox_fem/detective.ogg | Bin sound/{ => announcer}/vox_fem/detonation.ogg | Bin sound/{ => announcer}/vox_fem/device.ogg | Bin sound/{ => announcer}/vox_fem/devil.ogg | Bin sound/{ => announcer}/vox_fem/did.ogg | Bin sound/{ => announcer}/vox_fem/die.ogg | Bin sound/{ => announcer}/vox_fem/died.ogg | Bin sound/{ => announcer}/vox_fem/different.ogg | Bin sound/{ => announcer}/vox_fem/dimensional.ogg | Bin sound/{ => announcer}/vox_fem/dioxide.ogg | Bin sound/{ => announcer}/vox_fem/direct.ogg | Bin sound/{ => announcer}/vox_fem/director.ogg | Bin sound/{ => announcer}/vox_fem/dirt.ogg | Bin sound/{ => announcer}/vox_fem/disabled.ogg | Bin sound/{ => announcer}/vox_fem/disease.ogg | Bin sound/{ => announcer}/vox_fem/disengaged.ogg | Bin sound/{ => announcer}/vox_fem/dish.ogg | Bin sound/{ => announcer}/vox_fem/disk.ogg | Bin sound/{ => announcer}/vox_fem/disposal.ogg | Bin sound/{ => announcer}/vox_fem/distance.ogg | Bin sound/{ => announcer}/vox_fem/distortion.ogg | Bin sound/{ => announcer}/vox_fem/do.ogg | Bin sound/{ => announcer}/vox_fem/doctor.ogg | Bin sound/{ => announcer}/vox_fem/dog.ogg | Bin sound/{ => announcer}/vox_fem/dont.ogg | Bin sound/{ => announcer}/vox_fem/doomsday.ogg | Bin sound/{ => announcer}/vox_fem/doop.ogg | Bin sound/{ => announcer}/vox_fem/door.ogg | Bin sound/{ => announcer}/vox_fem/dormitory.ogg | Bin sound/{ => announcer}/vox_fem/dot.ogg | Bin sound/{ => announcer}/vox_fem/double.ogg | Bin sound/{ => announcer}/vox_fem/down.ogg | Bin sound/{ => announcer}/vox_fem/dress.ogg | Bin sound/{ => announcer}/vox_fem/dressed.ogg | Bin sound/{ => announcer}/vox_fem/dressing.ogg | Bin sound/{ => announcer}/vox_fem/drone.ogg | Bin sound/{ => announcer}/vox_fem/dual.ogg | Bin sound/{ => announcer}/vox_fem/duct.ogg | Bin sound/{ => announcer}/vox_fem/e.ogg | Bin sound/{ => announcer}/vox_fem/easily.ogg | Bin sound/{ => announcer}/vox_fem/east.ogg | Bin sound/{ => announcer}/vox_fem/eat.ogg | Bin sound/{ => announcer}/vox_fem/eaten.ogg | Bin sound/{ => announcer}/vox_fem/echo.ogg | Bin sound/{ => announcer}/vox_fem/ed.ogg | Bin sound/{ => announcer}/vox_fem/education.ogg | Bin sound/{ => announcer}/vox_fem/effect.ogg | Bin sound/{ => announcer}/vox_fem/effects.ogg | Bin sound/{ => announcer}/vox_fem/egress.ogg | Bin sound/{ => announcer}/vox_fem/eight.ogg | Bin sound/{ => announcer}/vox_fem/eighteen.ogg | Bin sound/{ => announcer}/vox_fem/eighty.ogg | Bin sound/{ => announcer}/vox_fem/electric.ogg | Bin sound/{ => announcer}/vox_fem/electrical.ogg | Bin .../vox_fem/electromagnetic.ogg | Bin sound/{ => announcer}/vox_fem/elevator.ogg | Bin sound/{ => announcer}/vox_fem/eleven.ogg | Bin sound/{ => announcer}/vox_fem/eliminate.ogg | Bin sound/{ => announcer}/vox_fem/emergency.ogg | Bin sound/{ => announcer}/vox_fem/emitted.ogg | Bin sound/{ => announcer}/vox_fem/emitter.ogg | Bin sound/{ => announcer}/vox_fem/emitting.ogg | Bin sound/{ => announcer}/vox_fem/enabled.ogg | Bin sound/{ => announcer}/vox_fem/end.ogg | Bin sound/{ => announcer}/vox_fem/ends.ogg | Bin sound/{ => announcer}/vox_fem/energy.ogg | Bin sound/{ => announcer}/vox_fem/engage.ogg | Bin sound/{ => announcer}/vox_fem/engaged.ogg | Bin sound/{ => announcer}/vox_fem/engine.ogg | Bin sound/{ => announcer}/vox_fem/engineer.ogg | Bin sound/{ => announcer}/vox_fem/engineering.ogg | Bin sound/{ => announcer}/vox_fem/enormous.ogg | Bin sound/{ => announcer}/vox_fem/enough.ogg | Bin sound/{ => announcer}/vox_fem/enter.ogg | Bin sound/{ => announcer}/vox_fem/entity.ogg | Bin sound/{ => announcer}/vox_fem/entry.ogg | Bin sound/{ => announcer}/vox_fem/environment.ogg | Bin sound/{ => announcer}/vox_fem/epic.ogg | Bin sound/{ => announcer}/vox_fem/equipment.ogg | Bin sound/{ => announcer}/vox_fem/error.ogg | Bin sound/{ => announcer}/vox_fem/escape.ogg | Bin sound/{ => announcer}/vox_fem/ethereal.ogg | Bin sound/{ => announcer}/vox_fem/eva.ogg | Bin sound/{ => announcer}/vox_fem/evacuate.ogg | Bin sound/{ => announcer}/vox_fem/even.ogg | Bin sound/{ => announcer}/vox_fem/ever.ogg | Bin sound/{ => announcer}/vox_fem/every.ogg | Bin sound/{ => announcer}/vox_fem/everybody.ogg | Bin sound/{ => announcer}/vox_fem/everyone.ogg | Bin sound/{ => announcer}/vox_fem/exchange.ogg | Bin sound/{ => announcer}/vox_fem/execute.ogg | Bin sound/{ => announcer}/vox_fem/exit.ogg | Bin sound/{ => announcer}/vox_fem/expect.ogg | Bin sound/{ => announcer}/vox_fem/experiment.ogg | Bin .../{ => announcer}/vox_fem/experimental.ogg | Bin sound/{ => announcer}/vox_fem/explode.ogg | Bin sound/{ => announcer}/vox_fem/exploded.ogg | Bin sound/{ => announcer}/vox_fem/exploding.ogg | Bin sound/{ => announcer}/vox_fem/explosion.ogg | Bin sound/{ => announcer}/vox_fem/explosive.ogg | Bin sound/{ => announcer}/vox_fem/exposure.ogg | Bin sound/{ => announcer}/vox_fem/exterminate.ogg | Bin sound/{ => announcer}/vox_fem/external.ogg | Bin sound/{ => announcer}/vox_fem/extinguish.ogg | Bin .../{ => announcer}/vox_fem/extinguisher.ogg | Bin sound/{ => announcer}/vox_fem/extra.ogg | Bin sound/{ => announcer}/vox_fem/extreme.ogg | Bin sound/{ => announcer}/vox_fem/f.ogg | Bin sound/{ => announcer}/vox_fem/facility.ogg | Bin sound/{ => announcer}/vox_fem/factory.ogg | Bin sound/{ => announcer}/vox_fem/fahrenheit.ogg | Bin sound/{ => announcer}/vox_fem/failed.ogg | Bin sound/{ => announcer}/vox_fem/failure.ogg | Bin sound/{ => announcer}/vox_fem/false.ogg | Bin sound/{ => announcer}/vox_fem/farthest.ogg | Bin sound/{ => announcer}/vox_fem/fast.ogg | Bin sound/{ => announcer}/vox_fem/fauna.ogg | Bin sound/{ => announcer}/vox_fem/feature.ogg | Bin sound/{ => announcer}/vox_fem/featured.ogg | Bin sound/{ => announcer}/vox_fem/features.ogg | Bin sound/{ => announcer}/vox_fem/featuring.ogg | Bin sound/{ => announcer}/vox_fem/feet.ogg | Bin sound/{ => announcer}/vox_fem/felinid.ogg | Bin sound/{ => announcer}/vox_fem/few.ogg | Bin sound/{ => announcer}/vox_fem/field.ogg | Bin sound/{ => announcer}/vox_fem/fifteen.ogg | Bin sound/{ => announcer}/vox_fem/fifth.ogg | Bin sound/{ => announcer}/vox_fem/fifty.ogg | Bin sound/{ => announcer}/vox_fem/filter.ogg | Bin sound/{ => announcer}/vox_fem/filters.ogg | Bin sound/{ => announcer}/vox_fem/final.ogg | Bin sound/{ => announcer}/vox_fem/fine.ogg | Bin sound/{ => announcer}/vox_fem/fire.ogg | Bin sound/{ => announcer}/vox_fem/first.ogg | Bin sound/{ => announcer}/vox_fem/five.ogg | Bin sound/{ => announcer}/vox_fem/fix.ogg | Bin sound/{ => announcer}/vox_fem/flooding.ogg | Bin sound/{ => announcer}/vox_fem/floor.ogg | Bin sound/{ => announcer}/vox_fem/flyman.ogg | Bin sound/{ => announcer}/vox_fem/fool.ogg | Bin sound/{ => announcer}/vox_fem/foolish.ogg | Bin sound/{ => announcer}/vox_fem/for.ogg | Bin sound/{ => announcer}/vox_fem/forbidden.ogg | Bin sound/{ => announcer}/vox_fem/force.ogg | Bin sound/{ => announcer}/vox_fem/fore.ogg | Bin sound/{ => announcer}/vox_fem/form.ogg | Bin sound/{ => announcer}/vox_fem/formed.ogg | Bin sound/{ => announcer}/vox_fem/forms.ogg | Bin sound/{ => announcer}/vox_fem/forty.ogg | Bin sound/{ => announcer}/vox_fem/found.ogg | Bin sound/{ => announcer}/vox_fem/four.ogg | Bin sound/{ => announcer}/vox_fem/fourteen.ogg | Bin sound/{ => announcer}/vox_fem/fourth.ogg | Bin sound/{ => announcer}/vox_fem/fourty.ogg | Bin sound/{ => announcer}/vox_fem/foxtrot.ogg | Bin sound/{ => announcer}/vox_fem/free.ogg | Bin sound/{ => announcer}/vox_fem/freeman.ogg | Bin sound/{ => announcer}/vox_fem/freeze.ogg | Bin sound/{ => announcer}/vox_fem/freezer.ogg | Bin sound/{ => announcer}/vox_fem/freezing.ogg | Bin sound/{ => announcer}/vox_fem/freon.ogg | Bin sound/{ => announcer}/vox_fem/from.ogg | Bin sound/{ => announcer}/vox_fem/front.ogg | Bin sound/{ => announcer}/vox_fem/froze.ogg | Bin sound/{ => announcer}/vox_fem/frozen.ogg | Bin sound/{ => announcer}/vox_fem/fuck.ogg | Bin sound/{ => announcer}/vox_fem/fucking.ogg | Bin sound/{ => announcer}/vox_fem/fucks.ogg | Bin sound/{ => announcer}/vox_fem/fuel.ogg | Bin sound/{ => announcer}/vox_fem/g.ogg | Bin sound/{ => announcer}/vox_fem/gas.ogg | Bin sound/{ => announcer}/vox_fem/gases.ogg | Bin sound/{ => announcer}/vox_fem/gave.ogg | Bin sound/{ => announcer}/vox_fem/gear.ogg | Bin sound/{ => announcer}/vox_fem/geared.ogg | Bin sound/{ => announcer}/vox_fem/gearing.ogg | Bin sound/{ => announcer}/vox_fem/generate.ogg | Bin sound/{ => announcer}/vox_fem/generated.ogg | Bin sound/{ => announcer}/vox_fem/generating.ogg | Bin sound/{ => announcer}/vox_fem/generator.ogg | Bin sound/{ => announcer}/vox_fem/geneticist.ogg | Bin sound/{ => announcer}/vox_fem/get.ogg | Bin sound/{ => announcer}/vox_fem/give.ogg | Bin sound/{ => announcer}/vox_fem/given.ogg | Bin sound/{ => announcer}/vox_fem/glory.ogg | Bin sound/{ => announcer}/vox_fem/go.ogg | Bin sound/{ => announcer}/vox_fem/god.ogg | Bin sound/{ => announcer}/vox_fem/going.ogg | Bin sound/{ => announcer}/vox_fem/golem.ogg | Bin sound/{ => announcer}/vox_fem/good.ogg | Bin sound/{ => announcer}/vox_fem/goodbye.ogg | Bin sound/{ => announcer}/vox_fem/gordon.ogg | Bin sound/{ => announcer}/vox_fem/got.ogg | Bin sound/{ => announcer}/vox_fem/government.ogg | Bin sound/{ => announcer}/vox_fem/granted.ogg | Bin sound/{ => announcer}/vox_fem/gravity.ogg | Bin sound/{ => announcer}/vox_fem/gray.ogg | Bin sound/{ => announcer}/vox_fem/great.ogg | Bin sound/{ => announcer}/vox_fem/green.ogg | Bin sound/{ => announcer}/vox_fem/grenade.ogg | Bin sound/{ => announcer}/vox_fem/guard.ogg | Bin sound/{ => announcer}/vox_fem/gulf.ogg | Bin sound/{ => announcer}/vox_fem/gun.ogg | Bin sound/{ => announcer}/vox_fem/guthrie.ogg | Bin sound/{ => announcer}/vox_fem/h.ogg | Bin sound/{ => announcer}/vox_fem/hacker.ogg | Bin sound/{ => announcer}/vox_fem/hackers.ogg | Bin sound/{ => announcer}/vox_fem/had.ogg | Bin sound/{ => announcer}/vox_fem/hall.ogg | Bin sound/{ => announcer}/vox_fem/hallway.ogg | Bin sound/{ => announcer}/vox_fem/halon.ogg | Bin sound/{ => announcer}/vox_fem/handling.ogg | Bin sound/{ => announcer}/vox_fem/hangar.ogg | Bin sound/{ => announcer}/vox_fem/hard.ogg | Bin sound/{ => announcer}/vox_fem/hardly.ogg | Bin sound/{ => announcer}/vox_fem/harm.ogg | Bin sound/{ => announcer}/vox_fem/harmful.ogg | Bin sound/{ => announcer}/vox_fem/harness.ogg | Bin sound/{ => announcer}/vox_fem/harnessed.ogg | Bin sound/{ => announcer}/vox_fem/harnessing.ogg | Bin sound/{ => announcer}/vox_fem/has.ogg | Bin sound/{ => announcer}/vox_fem/have.ogg | Bin sound/{ => announcer}/vox_fem/hazard.ogg | Bin sound/{ => announcer}/vox_fem/he.ogg | Bin sound/{ => announcer}/vox_fem/head.ogg | Bin sound/{ => announcer}/vox_fem/heal.ogg | Bin sound/{ => announcer}/vox_fem/healed.ogg | Bin sound/{ => announcer}/vox_fem/healing.ogg | Bin sound/{ => announcer}/vox_fem/healium.ogg | Bin sound/{ => announcer}/vox_fem/health.ogg | Bin sound/{ => announcer}/vox_fem/heat.ogg | Bin sound/{ => announcer}/vox_fem/heated.ogg | Bin sound/{ => announcer}/vox_fem/heating.ogg | Bin sound/{ => announcer}/vox_fem/helicopter.ogg | Bin sound/{ => announcer}/vox_fem/helium.ogg | Bin sound/{ => announcer}/vox_fem/hello.ogg | Bin sound/{ => announcer}/vox_fem/help.ogg | Bin sound/{ => announcer}/vox_fem/her.ogg | Bin sound/{ => announcer}/vox_fem/here.ogg | Bin sound/{ => announcer}/vox_fem/heretic.ogg | Bin sound/{ => announcer}/vox_fem/hide.ogg | Bin sound/{ => announcer}/vox_fem/high.ogg | Bin sound/{ => announcer}/vox_fem/highest.ogg | Bin sound/{ => announcer}/vox_fem/him.ogg | Bin sound/{ => announcer}/vox_fem/hit.ogg | Bin sound/{ => announcer}/vox_fem/hole.ogg | Bin sound/{ => announcer}/vox_fem/honk.ogg | Bin sound/{ => announcer}/vox_fem/hop.ogg | Bin sound/{ => announcer}/vox_fem/hos.ogg | Bin sound/{ => announcer}/vox_fem/hostile.ogg | Bin sound/{ => announcer}/vox_fem/hot.ogg | Bin sound/{ => announcer}/vox_fem/hotel.ogg | Bin sound/{ => announcer}/vox_fem/hour.ogg | Bin sound/{ => announcer}/vox_fem/hours.ogg | Bin sound/{ => announcer}/vox_fem/how.ogg | Bin sound/{ => announcer}/vox_fem/human.ogg | Bin sound/{ => announcer}/vox_fem/humanoid.ogg | Bin sound/{ => announcer}/vox_fem/humans.ogg | Bin sound/{ => announcer}/vox_fem/hundred.ogg | Bin sound/{ => announcer}/vox_fem/hunger.ogg | Bin sound/{ => announcer}/vox_fem/hurt.ogg | Bin sound/{ => announcer}/vox_fem/hydro.ogg | Bin sound/{ => announcer}/vox_fem/hydrogen.ogg | Bin sound/{ => announcer}/vox_fem/hydroponics.ogg | Bin .../{ => announcer}/vox_fem/hyper-noblium.ogg | Bin sound/{ => announcer}/vox_fem/i.ogg | Bin sound/{ => announcer}/vox_fem/ian.ogg | Bin sound/{ => announcer}/vox_fem/idiot.ogg | Bin sound/{ => announcer}/vox_fem/if.ogg | Bin sound/{ => announcer}/vox_fem/if2.ogg | Bin sound/{ => announcer}/vox_fem/illegal.ogg | Bin sound/{ => announcer}/vox_fem/immediate.ogg | Bin sound/{ => announcer}/vox_fem/immediately.ogg | Bin sound/{ => announcer}/vox_fem/immortal.ogg | Bin sound/{ => announcer}/vox_fem/impossible.ogg | Bin sound/{ => announcer}/vox_fem/in.ogg | Bin sound/{ => announcer}/vox_fem/inches.ogg | Bin sound/{ => announcer}/vox_fem/india.ogg | Bin sound/{ => announcer}/vox_fem/inert.ogg | Bin sound/{ => announcer}/vox_fem/ing.ogg | Bin sound/{ => announcer}/vox_fem/inoperative.ogg | Bin sound/{ => announcer}/vox_fem/inside.ogg | Bin sound/{ => announcer}/vox_fem/inspection.ogg | Bin sound/{ => announcer}/vox_fem/inspector.ogg | Bin sound/{ => announcer}/vox_fem/interchange.ogg | Bin sound/{ => announcer}/vox_fem/internal.ogg | Bin sound/{ => announcer}/vox_fem/internals.ogg | Bin sound/{ => announcer}/vox_fem/intruder.ogg | Bin sound/{ => announcer}/vox_fem/invalid.ogg | Bin sound/{ => announcer}/vox_fem/invalidate.ogg | Bin sound/{ => announcer}/vox_fem/invasion.ogg | Bin sound/{ => announcer}/vox_fem/irradiate.ogg | Bin sound/{ => announcer}/vox_fem/is.ogg | Bin sound/{ => announcer}/vox_fem/it.ogg | Bin sound/{ => announcer}/vox_fem/its.ogg | Bin sound/{ => announcer}/vox_fem/j.ogg | Bin sound/{ => announcer}/vox_fem/janitor.ogg | Bin sound/{ => announcer}/vox_fem/jesus.ogg | Bin sound/{ => announcer}/vox_fem/job.ogg | Bin sound/{ => announcer}/vox_fem/jobs.ogg | Bin sound/{ => announcer}/vox_fem/johnson.ogg | Bin sound/{ => announcer}/vox_fem/jolly.ogg | Bin sound/{ => announcer}/vox_fem/juliet.ogg | Bin sound/{ => announcer}/vox_fem/k.ogg | Bin sound/{ => announcer}/vox_fem/kelvin.ogg | Bin sound/{ => announcer}/vox_fem/key.ogg | Bin sound/{ => announcer}/vox_fem/kidnapped.ogg | Bin sound/{ => announcer}/vox_fem/kidnapping.ogg | Bin sound/{ => announcer}/vox_fem/kill.ogg | Bin sound/{ => announcer}/vox_fem/killed.ogg | Bin sound/{ => announcer}/vox_fem/killer.ogg | Bin sound/{ => announcer}/vox_fem/kilo.ogg | Bin sound/{ => announcer}/vox_fem/kit.ogg | Bin sound/{ => announcer}/vox_fem/kitchen.ogg | Bin sound/{ => announcer}/vox_fem/l.ogg | Bin sound/{ => announcer}/vox_fem/lab.ogg | Bin sound/{ => announcer}/vox_fem/lambda.ogg | Bin sound/{ => announcer}/vox_fem/large.ogg | Bin sound/{ => announcer}/vox_fem/laser.ogg | Bin sound/{ => announcer}/vox_fem/last.ogg | Bin sound/{ => announcer}/vox_fem/launch.ogg | Bin sound/{ => announcer}/vox_fem/lavaland.ogg | Bin sound/{ => announcer}/vox_fem/law.ogg | Bin sound/{ => announcer}/vox_fem/laws.ogg | Bin sound/{ => announcer}/vox_fem/lawyer.ogg | Bin sound/{ => announcer}/vox_fem/leak.ogg | Bin sound/{ => announcer}/vox_fem/leave.ogg | Bin sound/{ => announcer}/vox_fem/left.ogg | Bin sound/{ => announcer}/vox_fem/legal.ogg | Bin sound/{ => announcer}/vox_fem/level.ogg | Bin sound/{ => announcer}/vox_fem/lever.ogg | Bin sound/{ => announcer}/vox_fem/library.ogg | Bin sound/{ => announcer}/vox_fem/lie.ogg | Bin sound/{ => announcer}/vox_fem/lieutenant.ogg | Bin sound/{ => announcer}/vox_fem/life.ogg | Bin sound/{ => announcer}/vox_fem/lifeform.ogg | Bin sound/{ => announcer}/vox_fem/light.ogg | Bin sound/{ => announcer}/vox_fem/lightbulb.ogg | Bin sound/{ => announcer}/vox_fem/lima.ogg | Bin sound/{ => announcer}/vox_fem/limit.ogg | Bin sound/{ => announcer}/vox_fem/limited.ogg | Bin sound/{ => announcer}/vox_fem/liquid.ogg | Bin sound/{ => announcer}/vox_fem/list.ogg | Bin sound/{ => announcer}/vox_fem/live.ogg | Bin sound/{ => announcer}/vox_fem/live2.ogg | Bin sound/{ => announcer}/vox_fem/lizard.ogg | Bin .../{ => announcer}/vox_fem/lizardperson.ogg | Bin sound/{ => announcer}/vox_fem/loading.ogg | Bin sound/{ => announcer}/vox_fem/locate.ogg | Bin sound/{ => announcer}/vox_fem/located.ogg | Bin sound/{ => announcer}/vox_fem/location.ogg | Bin sound/{ => announcer}/vox_fem/lock.ogg | Bin sound/{ => announcer}/vox_fem/locked.ogg | Bin sound/{ => announcer}/vox_fem/locker.ogg | Bin sound/{ => announcer}/vox_fem/lockout.ogg | Bin sound/{ => announcer}/vox_fem/long.ogg | Bin sound/{ => announcer}/vox_fem/look.ogg | Bin sound/{ => announcer}/vox_fem/loop.ogg | Bin sound/{ => announcer}/vox_fem/loose.ogg | Bin sound/{ => announcer}/vox_fem/lot.ogg | Bin sound/{ => announcer}/vox_fem/lower.ogg | Bin sound/{ => announcer}/vox_fem/lowest.ogg | Bin sound/{ => announcer}/vox_fem/lusty.ogg | Bin sound/{ => announcer}/vox_fem/m.ogg | Bin sound/{ => announcer}/vox_fem/machine.ogg | Bin sound/{ => announcer}/vox_fem/made.ogg | Bin sound/{ => announcer}/vox_fem/magic.ogg | Bin sound/{ => announcer}/vox_fem/magnetic.ogg | Bin sound/{ => announcer}/vox_fem/main.ogg | Bin sound/{ => announcer}/vox_fem/maintainer.ogg | Bin sound/{ => announcer}/vox_fem/maintenance.ogg | Bin sound/{ => announcer}/vox_fem/major.ogg | Bin sound/{ => announcer}/vox_fem/making.ogg | Bin sound/{ => announcer}/vox_fem/malfunction.ogg | Bin sound/{ => announcer}/vox_fem/man.ogg | Bin sound/{ => announcer}/vox_fem/many.ogg | Bin sound/{ => announcer}/vox_fem/mass.ogg | Bin sound/{ => announcer}/vox_fem/materials.ogg | Bin sound/{ => announcer}/vox_fem/maximum.ogg | Bin sound/{ => announcer}/vox_fem/may.ogg | Bin sound/{ => announcer}/vox_fem/me.ogg | Bin sound/{ => announcer}/vox_fem/mean.ogg | Bin sound/{ => announcer}/vox_fem/means.ogg | Bin sound/{ => announcer}/vox_fem/meat.ogg | Bin sound/{ => announcer}/vox_fem/medbay.ogg | Bin sound/{ => announcer}/vox_fem/medical.ogg | Bin sound/{ => announcer}/vox_fem/medium.ogg | Bin sound/{ => announcer}/vox_fem/megafauna.ogg | Bin sound/{ => announcer}/vox_fem/men.ogg | Bin sound/{ => announcer}/vox_fem/mercy.ogg | Bin sound/{ => announcer}/vox_fem/mesa.ogg | Bin sound/{ => announcer}/vox_fem/meson.ogg | Bin sound/{ => announcer}/vox_fem/message.ogg | Bin sound/{ => announcer}/vox_fem/meter.ogg | Bin sound/{ => announcer}/vox_fem/method.ogg | Bin sound/{ => announcer}/vox_fem/miasma.ogg | Bin sound/{ => announcer}/vox_fem/micro.ogg | Bin sound/{ => announcer}/vox_fem/middle.ogg | Bin sound/{ => announcer}/vox_fem/mike.ogg | Bin sound/{ => announcer}/vox_fem/miles.ogg | Bin sound/{ => announcer}/vox_fem/military.ogg | Bin sound/{ => announcer}/vox_fem/milli.ogg | Bin sound/{ => announcer}/vox_fem/million.ogg | Bin sound/{ => announcer}/vox_fem/mime.ogg | Bin sound/{ => announcer}/vox_fem/minefield.ogg | Bin sound/{ => announcer}/vox_fem/miner.ogg | Bin sound/{ => announcer}/vox_fem/minimum.ogg | Bin sound/{ => announcer}/vox_fem/minor.ogg | Bin sound/{ => announcer}/vox_fem/minute.ogg | Bin sound/{ => announcer}/vox_fem/minutes.ogg | Bin sound/{ => announcer}/vox_fem/mister.ogg | Bin sound/{ => announcer}/vox_fem/mixture.ogg | Bin sound/{ => announcer}/vox_fem/mode.ogg | Bin .../{ => announcer}/vox_fem/modification.ogg | Bin sound/{ => announcer}/vox_fem/money.ogg | Bin sound/{ => announcer}/vox_fem/monkey.ogg | Bin sound/{ => announcer}/vox_fem/most.ogg | Bin sound/{ => announcer}/vox_fem/moth.ogg | Bin sound/{ => announcer}/vox_fem/mothperson.ogg | Bin sound/{ => announcer}/vox_fem/motor.ogg | Bin sound/{ => announcer}/vox_fem/motorpool.ogg | Bin sound/{ => announcer}/vox_fem/move.ogg | Bin sound/{ => announcer}/vox_fem/moved.ogg | Bin sound/{ => announcer}/vox_fem/moving.ogg | Bin sound/{ => announcer}/vox_fem/multitude.ogg | Bin sound/{ => announcer}/vox_fem/murder.ogg | Bin sound/{ => announcer}/vox_fem/murderer.ogg | Bin sound/{ => announcer}/vox_fem/must.ogg | Bin sound/{ => announcer}/vox_fem/my.ogg | Bin sound/{ => announcer}/vox_fem/mythic.ogg | Bin sound/{ => announcer}/vox_fem/n.ogg | Bin sound/{ => announcer}/vox_fem/nanotrasen.ogg | Bin sound/{ => announcer}/vox_fem/near.ogg | Bin sound/{ => announcer}/vox_fem/nearest.ogg | Bin sound/{ => announcer}/vox_fem/nearly.ogg | Bin sound/{ => announcer}/vox_fem/need.ogg | Bin sound/{ => announcer}/vox_fem/never.ogg | Bin sound/{ => announcer}/vox_fem/nice.ogg | Bin sound/{ => announcer}/vox_fem/night.ogg | Bin sound/{ => announcer}/vox_fem/nine.ogg | Bin sound/{ => announcer}/vox_fem/nineteen.ogg | Bin sound/{ => announcer}/vox_fem/ninety.ogg | Bin sound/{ => announcer}/vox_fem/nitrogen.ogg | Bin sound/{ => announcer}/vox_fem/no.ogg | Bin sound/{ => announcer}/vox_fem/nominal.ogg | Bin sound/{ => announcer}/vox_fem/none.ogg | Bin sound/{ => announcer}/vox_fem/normal.ogg | Bin sound/{ => announcer}/vox_fem/normally.ogg | Bin sound/{ => announcer}/vox_fem/north.ogg | Bin sound/{ => announcer}/vox_fem/northeast.ogg | Bin sound/{ => announcer}/vox_fem/northwest.ogg | Bin sound/{ => announcer}/vox_fem/not.ogg | Bin sound/{ => announcer}/vox_fem/notably.ogg | Bin sound/{ => announcer}/vox_fem/november.ogg | Bin sound/{ => announcer}/vox_fem/now.ogg | Bin sound/{ => announcer}/vox_fem/nuclear.ogg | Bin sound/{ => announcer}/vox_fem/nuke.ogg | Bin sound/{ => announcer}/vox_fem/number.ogg | Bin sound/{ => announcer}/vox_fem/o.ogg | Bin sound/{ => announcer}/vox_fem/object.ogg | Bin sound/{ => announcer}/vox_fem/objective.ogg | Bin sound/{ => announcer}/vox_fem/obliterate.ogg | Bin sound/{ => announcer}/vox_fem/obliterated.ogg | Bin .../{ => announcer}/vox_fem/obliterating.ogg | Bin sound/{ => announcer}/vox_fem/observation.ogg | Bin sound/{ => announcer}/vox_fem/obtain.ogg | Bin sound/{ => announcer}/vox_fem/of.ogg | Bin sound/{ => announcer}/vox_fem/off.ogg | Bin sound/{ => announcer}/vox_fem/office.ogg | Bin sound/{ => announcer}/vox_fem/officer.ogg | Bin sound/{ => announcer}/vox_fem/oh.ogg | Bin sound/{ => announcer}/vox_fem/ok.ogg | Bin sound/{ => announcer}/vox_fem/okay.ogg | Bin sound/{ => announcer}/vox_fem/on.ogg | Bin sound/{ => announcer}/vox_fem/once.ogg | Bin sound/{ => announcer}/vox_fem/one.ogg | Bin sound/{ => announcer}/vox_fem/oof.ogg | Bin sound/{ => announcer}/vox_fem/open.ogg | Bin sound/{ => announcer}/vox_fem/opened.ogg | Bin sound/{ => announcer}/vox_fem/opening.ogg | Bin sound/{ => announcer}/vox_fem/operating.ogg | Bin sound/{ => announcer}/vox_fem/operations.ogg | Bin sound/{ => announcer}/vox_fem/operative.ogg | Bin sound/{ => announcer}/vox_fem/option.ogg | Bin sound/{ => announcer}/vox_fem/or.ogg | Bin sound/{ => announcer}/vox_fem/order.ogg | Bin sound/{ => announcer}/vox_fem/ordered.ogg | Bin sound/{ => announcer}/vox_fem/ordering.ogg | Bin sound/{ => announcer}/vox_fem/organic.ogg | Bin sound/{ => announcer}/vox_fem/oscar.ogg | Bin sound/{ => announcer}/vox_fem/out.ogg | Bin sound/{ => announcer}/vox_fem/output.ogg | Bin sound/{ => announcer}/vox_fem/outside.ogg | Bin sound/{ => announcer}/vox_fem/over.ogg | Bin sound/{ => announcer}/vox_fem/overload.ogg | Bin sound/{ => announcer}/vox_fem/override.ogg | Bin sound/{ => announcer}/vox_fem/own.ogg | Bin sound/{ => announcer}/vox_fem/oxygen.ogg | Bin sound/{ => announcer}/vox_fem/p.ogg | Bin .../{ => announcer}/vox_fem/pacification.ogg | Bin sound/{ => announcer}/vox_fem/pacify.ogg | Bin sound/{ => announcer}/vox_fem/pain.ogg | Bin sound/{ => announcer}/vox_fem/pal.ogg | Bin sound/{ => announcer}/vox_fem/panel.ogg | Bin sound/{ => announcer}/vox_fem/panting.ogg | Bin sound/{ => announcer}/vox_fem/pathetic.ogg | Bin sound/{ => announcer}/vox_fem/pda.ogg | Bin sound/{ => announcer}/vox_fem/percent.ogg | Bin sound/{ => announcer}/vox_fem/perfect.ogg | Bin sound/{ => announcer}/vox_fem/perhaps.ogg | Bin sound/{ => announcer}/vox_fem/perimeter.ogg | Bin sound/{ => announcer}/vox_fem/permitted.ogg | Bin sound/{ => announcer}/vox_fem/personal.ogg | Bin sound/{ => announcer}/vox_fem/personnel.ogg | Bin sound/{ => announcer}/vox_fem/pipe.ogg | Bin sound/{ => announcer}/vox_fem/piping.ogg | Bin sound/{ => announcer}/vox_fem/piss.ogg | Bin sound/{ => announcer}/vox_fem/plant.ogg | Bin sound/{ => announcer}/vox_fem/plasma.ogg | Bin sound/{ => announcer}/vox_fem/plasmaman.ogg | Bin sound/{ => announcer}/vox_fem/platform.ogg | Bin sound/{ => announcer}/vox_fem/plating.ogg | Bin sound/{ => announcer}/vox_fem/plausible.ogg | Bin sound/{ => announcer}/vox_fem/please.ogg | Bin sound/{ => announcer}/vox_fem/pluoxium.ogg | Bin sound/{ => announcer}/vox_fem/point.ogg | Bin sound/{ => announcer}/vox_fem/port.ogg | Bin sound/{ => announcer}/vox_fem/portal.ogg | Bin sound/{ => announcer}/vox_fem/portion.ogg | Bin sound/{ => announcer}/vox_fem/possible.ogg | Bin sound/{ => announcer}/vox_fem/power.ogg | Bin sound/{ => announcer}/vox_fem/powered.ogg | Bin sound/{ => announcer}/vox_fem/powering.ogg | Bin sound/{ => announcer}/vox_fem/premature.ogg | Bin sound/{ => announcer}/vox_fem/prematurely.ogg | Bin sound/{ => announcer}/vox_fem/presence.ogg | Bin sound/{ => announcer}/vox_fem/present.ogg | Bin sound/{ => announcer}/vox_fem/presents.ogg | Bin sound/{ => announcer}/vox_fem/press.ogg | Bin sound/{ => announcer}/vox_fem/pressure.ogg | Bin sound/{ => announcer}/vox_fem/primary.ogg | Bin sound/{ => announcer}/vox_fem/priority.ogg | Bin sound/{ => announcer}/vox_fem/prison.ogg | Bin sound/{ => announcer}/vox_fem/prisoner.ogg | Bin sound/{ => announcer}/vox_fem/proceed.ogg | Bin sound/{ => announcer}/vox_fem/processing.ogg | Bin sound/{ => announcer}/vox_fem/progress.ogg | Bin sound/{ => announcer}/vox_fem/projectile.ogg | Bin sound/{ => announcer}/vox_fem/proper.ogg | Bin sound/{ => announcer}/vox_fem/propulsion.ogg | Bin sound/{ => announcer}/vox_fem/prosecute.ogg | Bin sound/{ => announcer}/vox_fem/protect.ogg | Bin sound/{ => announcer}/vox_fem/protected.ogg | Bin sound/{ => announcer}/vox_fem/protection.ogg | Bin sound/{ => announcer}/vox_fem/protective.ogg | Bin .../{ => announcer}/vox_fem/proto-nitrate.ogg | Bin sound/{ => announcer}/vox_fem/pull.ogg | Bin sound/{ => announcer}/vox_fem/pulled.ogg | Bin sound/{ => announcer}/vox_fem/pulling.ogg | Bin sound/{ => announcer}/vox_fem/pump.ogg | Bin sound/{ => announcer}/vox_fem/pumps.ogg | Bin sound/{ => announcer}/vox_fem/push.ogg | Bin sound/{ => announcer}/vox_fem/put.ogg | Bin sound/{ => announcer}/vox_fem/q.ogg | Bin sound/{ => announcer}/vox_fem/quantum.ogg | Bin sound/{ => announcer}/vox_fem/quarantine.ogg | Bin .../{ => announcer}/vox_fem/quartermaster.ogg | Bin sound/{ => announcer}/vox_fem/quebec.ogg | Bin sound/{ => announcer}/vox_fem/queen.ogg | Bin sound/{ => announcer}/vox_fem/question.ogg | Bin .../{ => announcer}/vox_fem/questionable.ogg | Bin sound/{ => announcer}/vox_fem/questioning.ogg | Bin sound/{ => announcer}/vox_fem/quick.ogg | Bin sound/{ => announcer}/vox_fem/quit.ogg | Bin sound/{ => announcer}/vox_fem/r.ogg | Bin sound/{ => announcer}/vox_fem/radiation.ogg | Bin sound/{ => announcer}/vox_fem/radioactive.ogg | Bin sound/{ => announcer}/vox_fem/rads.ogg | Bin sound/{ => announcer}/vox_fem/raider.ogg | Bin sound/{ => announcer}/vox_fem/raiders.ogg | Bin sound/{ => announcer}/vox_fem/rapid.ogg | Bin sound/{ => announcer}/vox_fem/reach.ogg | Bin sound/{ => announcer}/vox_fem/reached.ogg | Bin sound/{ => announcer}/vox_fem/reactor.ogg | Bin sound/{ => announcer}/vox_fem/red.ogg | Bin sound/{ => announcer}/vox_fem/relay.ogg | Bin sound/{ => announcer}/vox_fem/release.ogg | Bin sound/{ => announcer}/vox_fem/released.ogg | Bin sound/{ => announcer}/vox_fem/releasing.ogg | Bin sound/{ => announcer}/vox_fem/remaining.ogg | Bin sound/{ => announcer}/vox_fem/removal.ogg | Bin sound/{ => announcer}/vox_fem/remove.ogg | Bin sound/{ => announcer}/vox_fem/removed.ogg | Bin sound/{ => announcer}/vox_fem/removing.ogg | Bin sound/{ => announcer}/vox_fem/renegade.ogg | Bin sound/{ => announcer}/vox_fem/repair.ogg | Bin sound/{ => announcer}/vox_fem/report.ogg | Bin sound/{ => announcer}/vox_fem/reports.ogg | Bin sound/{ => announcer}/vox_fem/request.ogg | Bin sound/{ => announcer}/vox_fem/requested.ogg | Bin sound/{ => announcer}/vox_fem/requesting.ogg | Bin sound/{ => announcer}/vox_fem/require.ogg | Bin sound/{ => announcer}/vox_fem/required.ogg | Bin sound/{ => announcer}/vox_fem/research.ogg | Bin sound/{ => announcer}/vox_fem/resevoir.ogg | Bin sound/{ => announcer}/vox_fem/resistance.ogg | Bin sound/{ => announcer}/vox_fem/resistant.ogg | Bin sound/{ => announcer}/vox_fem/resisting.ogg | Bin sound/{ => announcer}/vox_fem/resonance.ogg | Bin sound/{ => announcer}/vox_fem/rest.ogg | Bin sound/{ => announcer}/vox_fem/restoration.ogg | Bin sound/{ => announcer}/vox_fem/revolution.ogg | Bin .../{ => announcer}/vox_fem/revolutionary.ogg | Bin sound/{ => announcer}/vox_fem/right.ogg | Bin sound/{ => announcer}/vox_fem/riot.ogg | Bin sound/{ => announcer}/vox_fem/roboticist.ogg | Bin sound/{ => announcer}/vox_fem/rocket.ogg | Bin sound/{ => announcer}/vox_fem/roger.ogg | Bin sound/{ => announcer}/vox_fem/rogue.ogg | Bin sound/{ => announcer}/vox_fem/romeo.ogg | Bin sound/{ => announcer}/vox_fem/room.ogg | Bin sound/{ => announcer}/vox_fem/round.ogg | Bin sound/{ => announcer}/vox_fem/run.ogg | Bin sound/{ => announcer}/vox_fem/rune.ogg | Bin sound/{ => announcer}/vox_fem/runtime.ogg | Bin sound/{ => announcer}/vox_fem/s.ogg | Bin sound/{ => announcer}/vox_fem/sabotage.ogg | Bin sound/{ => announcer}/vox_fem/sabotaged.ogg | Bin sound/{ => announcer}/vox_fem/sabotaging.ogg | Bin sound/{ => announcer}/vox_fem/safe.ogg | Bin sound/{ => announcer}/vox_fem/safety.ogg | Bin sound/{ => announcer}/vox_fem/sairhorn.ogg | Bin sound/{ => announcer}/vox_fem/same.ogg | Bin sound/{ => announcer}/vox_fem/sarah.ogg | Bin sound/{ => announcer}/vox_fem/sargeant.ogg | Bin sound/{ => announcer}/vox_fem/satellite.ogg | Bin sound/{ => announcer}/vox_fem/save.ogg | Bin sound/{ => announcer}/vox_fem/saw.ogg | Bin sound/{ => announcer}/vox_fem/scan.ogg | Bin sound/{ => announcer}/vox_fem/scanned.ogg | Bin sound/{ => announcer}/vox_fem/scanner.ogg | Bin sound/{ => announcer}/vox_fem/scanners.ogg | Bin sound/{ => announcer}/vox_fem/scanning.ogg | Bin sound/{ => announcer}/vox_fem/scensor.ogg | Bin sound/{ => announcer}/vox_fem/science.ogg | Bin sound/{ => announcer}/vox_fem/scientist.ogg | Bin sound/{ => announcer}/vox_fem/scream.ogg | Bin sound/{ => announcer}/vox_fem/screen.ogg | Bin sound/{ => announcer}/vox_fem/screw.ogg | Bin sound/{ => announcer}/vox_fem/search.ogg | Bin sound/{ => announcer}/vox_fem/second.ogg | Bin sound/{ => announcer}/vox_fem/secondary.ogg | Bin sound/{ => announcer}/vox_fem/seconds.ogg | Bin sound/{ => announcer}/vox_fem/section.ogg | Bin sound/{ => announcer}/vox_fem/sector.ogg | Bin sound/{ => announcer}/vox_fem/secure.ogg | Bin sound/{ => announcer}/vox_fem/secured.ogg | Bin sound/{ => announcer}/vox_fem/security.ogg | Bin sound/{ => announcer}/vox_fem/seen.ogg | Bin sound/{ => announcer}/vox_fem/select.ogg | Bin sound/{ => announcer}/vox_fem/selected.ogg | Bin sound/{ => announcer}/vox_fem/self.ogg | Bin sound/{ => announcer}/vox_fem/sensors.ogg | Bin sound/{ => announcer}/vox_fem/server.ogg | Bin sound/{ => announcer}/vox_fem/service.ogg | Bin sound/{ => announcer}/vox_fem/set.ogg | Bin sound/{ => announcer}/vox_fem/seven.ogg | Bin sound/{ => announcer}/vox_fem/seventeen.ogg | Bin sound/{ => announcer}/vox_fem/seventy.ogg | Bin sound/{ => announcer}/vox_fem/sever.ogg | Bin sound/{ => announcer}/vox_fem/severe.ogg | Bin sound/{ => announcer}/vox_fem/severed.ogg | Bin sound/{ => announcer}/vox_fem/severing.ogg | Bin sound/{ => announcer}/vox_fem/sewage.ogg | Bin sound/{ => announcer}/vox_fem/sewer.ogg | Bin sound/{ => announcer}/vox_fem/shaft.ogg | Bin sound/{ => announcer}/vox_fem/shame.ogg | Bin sound/{ => announcer}/vox_fem/shameful.ogg | Bin sound/{ => announcer}/vox_fem/shameless.ogg | Bin sound/{ => announcer}/vox_fem/shard.ogg | Bin sound/{ => announcer}/vox_fem/she.ogg | Bin sound/{ => announcer}/vox_fem/shield.ogg | Bin sound/{ => announcer}/vox_fem/shift.ogg | Bin sound/{ => announcer}/vox_fem/shifts.ogg | Bin sound/{ => announcer}/vox_fem/shipment.ogg | Bin sound/{ => announcer}/vox_fem/shirt.ogg | Bin sound/{ => announcer}/vox_fem/shit.ogg | Bin sound/{ => announcer}/vox_fem/shitlord.ogg | Bin sound/{ => announcer}/vox_fem/shits.ogg | Bin sound/{ => announcer}/vox_fem/shitting.ogg | Bin sound/{ => announcer}/vox_fem/shock.ogg | Bin sound/{ => announcer}/vox_fem/shonk.ogg | Bin sound/{ => announcer}/vox_fem/shoot.ogg | Bin sound/{ => announcer}/vox_fem/shower.ogg | Bin sound/{ => announcer}/vox_fem/shut.ogg | Bin sound/{ => announcer}/vox_fem/shuttle.ogg | Bin sound/{ => announcer}/vox_fem/sick.ogg | Bin sound/{ => announcer}/vox_fem/side.ogg | Bin sound/{ => announcer}/vox_fem/sides.ogg | Bin sound/{ => announcer}/vox_fem/sierra.ogg | Bin sound/{ => announcer}/vox_fem/sight.ogg | Bin sound/{ => announcer}/vox_fem/silicon.ogg | Bin sound/{ => announcer}/vox_fem/silo.ogg | Bin sound/{ => announcer}/vox_fem/single.ogg | Bin sound/{ => announcer}/vox_fem/singularity.ogg | Bin sound/{ => announcer}/vox_fem/siphon.ogg | Bin sound/{ => announcer}/vox_fem/siphoning.ogg | Bin sound/{ => announcer}/vox_fem/six.ogg | Bin sound/{ => announcer}/vox_fem/sixteen.ogg | Bin sound/{ => announcer}/vox_fem/sixty.ogg | Bin sound/{ => announcer}/vox_fem/skeleton.ogg | Bin sound/{ => announcer}/vox_fem/slaughter.ogg | Bin sound/{ => announcer}/vox_fem/slime.ogg | Bin sound/{ => announcer}/vox_fem/slip.ogg | Bin sound/{ => announcer}/vox_fem/slippery.ogg | Bin sound/{ => announcer}/vox_fem/slow.ogg | Bin sound/{ => announcer}/vox_fem/sm.ogg | Bin sound/{ => announcer}/vox_fem/small.ogg | Bin sound/{ => announcer}/vox_fem/sockmuncher.ogg | Bin sound/{ => announcer}/vox_fem/soft.ogg | Bin sound/{ => announcer}/vox_fem/solar.ogg | Bin sound/{ => announcer}/vox_fem/solars.ogg | Bin sound/{ => announcer}/vox_fem/soldier.ogg | Bin sound/{ => announcer}/vox_fem/some.ogg | Bin sound/{ => announcer}/vox_fem/someone.ogg | Bin sound/{ => announcer}/vox_fem/something.ogg | Bin sound/{ => announcer}/vox_fem/son.ogg | Bin sound/{ => announcer}/vox_fem/sorry.ogg | Bin sound/{ => announcer}/vox_fem/source.ogg | Bin sound/{ => announcer}/vox_fem/south.ogg | Bin sound/{ => announcer}/vox_fem/southeast.ogg | Bin sound/{ => announcer}/vox_fem/southwest.ogg | Bin sound/{ => announcer}/vox_fem/space.ogg | Bin sound/{ => announcer}/vox_fem/special.ogg | Bin sound/{ => announcer}/vox_fem/spew.ogg | Bin sound/{ => announcer}/vox_fem/squad.ogg | Bin sound/{ => announcer}/vox_fem/square.ogg | Bin sound/{ => announcer}/vox_fem/ss13.ogg | Bin sound/{ => announcer}/vox_fem/stairway.ogg | Bin sound/{ => announcer}/vox_fem/starboard.ogg | Bin sound/{ => announcer}/vox_fem/start.ogg | Bin sound/{ => announcer}/vox_fem/starts.ogg | Bin sound/{ => announcer}/vox_fem/station.ogg | Bin sound/{ => announcer}/vox_fem/stations.ogg | Bin sound/{ => announcer}/vox_fem/stationwide.ogg | Bin sound/{ => announcer}/vox_fem/status.ogg | Bin sound/{ => announcer}/vox_fem/stay.ogg | Bin sound/{ => announcer}/vox_fem/sterile.ogg | Bin .../{ => announcer}/vox_fem/sterilization.ogg | Bin sound/{ => announcer}/vox_fem/stop.ogg | Bin sound/{ => announcer}/vox_fem/storage.ogg | Bin sound/{ => announcer}/vox_fem/strong.ogg | Bin sound/{ => announcer}/vox_fem/stuck.ogg | Bin sound/{ => announcer}/vox_fem/sub.ogg | Bin sound/{ => announcer}/vox_fem/subsurface.ogg | Bin sound/{ => announcer}/vox_fem/such.ogg | Bin sound/{ => announcer}/vox_fem/sudden.ogg | Bin sound/{ => announcer}/vox_fem/suffer.ogg | Bin sound/{ => announcer}/vox_fem/suit.ogg | Bin sound/{ => announcer}/vox_fem/suited.ogg | Bin sound/{ => announcer}/vox_fem/super.ogg | Bin .../vox_fem/superconducting.ogg | Bin sound/{ => announcer}/vox_fem/supercooled.ogg | Bin sound/{ => announcer}/vox_fem/supermatter.ogg | Bin sound/{ => announcer}/vox_fem/supply.ogg | Bin sound/{ => announcer}/vox_fem/surface.ogg | Bin sound/{ => announcer}/vox_fem/surrender.ogg | Bin sound/{ => announcer}/vox_fem/surround.ogg | Bin sound/{ => announcer}/vox_fem/surrounded.ogg | Bin sound/{ => announcer}/vox_fem/sweating.ogg | Bin sound/{ => announcer}/vox_fem/swhitenoise.ogg | Bin sound/{ => announcer}/vox_fem/switch.ogg | Bin sound/{ => announcer}/vox_fem/syndicate.ogg | Bin sound/{ => announcer}/vox_fem/system.ogg | Bin sound/{ => announcer}/vox_fem/systems.ogg | Bin sound/{ => announcer}/vox_fem/t.ogg | Bin sound/{ => announcer}/vox_fem/table.ogg | Bin sound/{ => announcer}/vox_fem/tactical.ogg | Bin sound/{ => announcer}/vox_fem/taildragger.ogg | Bin sound/{ => announcer}/vox_fem/take.ogg | Bin sound/{ => announcer}/vox_fem/talk.ogg | Bin sound/{ => announcer}/vox_fem/tampered.ogg | Bin sound/{ => announcer}/vox_fem/tango.ogg | Bin sound/{ => announcer}/vox_fem/tank.ogg | Bin sound/{ => announcer}/vox_fem/target.ogg | Bin sound/{ => announcer}/vox_fem/team.ogg | Bin sound/{ => announcer}/vox_fem/tech.ogg | Bin sound/{ => announcer}/vox_fem/technician.ogg | Bin sound/{ => announcer}/vox_fem/technology.ogg | Bin sound/{ => announcer}/vox_fem/teleporter.ogg | Bin sound/{ => announcer}/vox_fem/temperature.ogg | Bin sound/{ => announcer}/vox_fem/temporal.ogg | Bin sound/{ => announcer}/vox_fem/ten.ogg | Bin sound/{ => announcer}/vox_fem/terminal.ogg | Bin sound/{ => announcer}/vox_fem/terminate.ogg | Bin sound/{ => announcer}/vox_fem/terminated.ogg | Bin sound/{ => announcer}/vox_fem/termination.ogg | Bin sound/{ => announcer}/vox_fem/tesla.ogg | Bin sound/{ => announcer}/vox_fem/test.ogg | Bin sound/{ => announcer}/vox_fem/text.ogg | Bin sound/{ => announcer}/vox_fem/thank.ogg | Bin sound/{ => announcer}/vox_fem/thanks.ogg | Bin sound/{ => announcer}/vox_fem/that.ogg | Bin sound/{ => announcer}/vox_fem/the.ogg | Bin sound/{ => announcer}/vox_fem/theater.ogg | Bin sound/{ => announcer}/vox_fem/them.ogg | Bin sound/{ => announcer}/vox_fem/then.ogg | Bin sound/{ => announcer}/vox_fem/there.ogg | Bin sound/{ => announcer}/vox_fem/they.ogg | Bin sound/{ => announcer}/vox_fem/third.ogg | Bin sound/{ => announcer}/vox_fem/thirteen.ogg | Bin sound/{ => announcer}/vox_fem/thirty.ogg | Bin sound/{ => announcer}/vox_fem/this.ogg | Bin sound/{ => announcer}/vox_fem/those.ogg | Bin sound/{ => announcer}/vox_fem/thousand.ogg | Bin sound/{ => announcer}/vox_fem/threat.ogg | Bin sound/{ => announcer}/vox_fem/three.ogg | Bin sound/{ => announcer}/vox_fem/through.ogg | Bin sound/{ => announcer}/vox_fem/tick.ogg | Bin sound/{ => announcer}/vox_fem/tide.ogg | Bin sound/{ => announcer}/vox_fem/tile.ogg | Bin sound/{ => announcer}/vox_fem/time.ogg | Bin sound/{ => announcer}/vox_fem/tiny.ogg | Bin sound/{ => announcer}/vox_fem/to.ogg | Bin sound/{ => announcer}/vox_fem/top.ogg | Bin sound/{ => announcer}/vox_fem/topside.ogg | Bin sound/{ => announcer}/vox_fem/touch.ogg | Bin sound/{ => announcer}/vox_fem/touched.ogg | Bin sound/{ => announcer}/vox_fem/touching.ogg | Bin sound/{ => announcer}/vox_fem/towards.ogg | Bin sound/{ => announcer}/vox_fem/toxins.ogg | Bin sound/{ => announcer}/vox_fem/track.ogg | Bin sound/{ => announcer}/vox_fem/train.ogg | Bin sound/{ => announcer}/vox_fem/traitor.ogg | Bin .../vox_fem/transportation.ogg | Bin sound/{ => announcer}/vox_fem/trigger.ogg | Bin sound/{ => announcer}/vox_fem/triggered.ogg | Bin sound/{ => announcer}/vox_fem/triggering.ogg | Bin sound/{ => announcer}/vox_fem/triple.ogg | Bin sound/{ => announcer}/vox_fem/tritium.ogg | Bin sound/{ => announcer}/vox_fem/truck.ogg | Bin sound/{ => announcer}/vox_fem/true.ogg | Bin sound/{ => announcer}/vox_fem/tunnel.ogg | Bin sound/{ => announcer}/vox_fem/turn.ogg | Bin sound/{ => announcer}/vox_fem/turned.ogg | Bin sound/{ => announcer}/vox_fem/turret.ogg | Bin sound/{ => announcer}/vox_fem/twelve.ogg | Bin sound/{ => announcer}/vox_fem/twenty.ogg | Bin sound/{ => announcer}/vox_fem/two.ogg | Bin sound/{ => announcer}/vox_fem/u.ogg | Bin sound/{ => announcer}/vox_fem/ugh.ogg | Bin sound/{ => announcer}/vox_fem/ughh.ogg | Bin sound/{ => announcer}/vox_fem/unable.ogg | Bin .../{ => announcer}/vox_fem/unauthorized.ogg | Bin sound/{ => announcer}/vox_fem/under.ogg | Bin sound/{ => announcer}/vox_fem/uniform.ogg | Bin sound/{ => announcer}/vox_fem/unique.ogg | Bin sound/{ => announcer}/vox_fem/unknown.ogg | Bin sound/{ => announcer}/vox_fem/unlocked.ogg | Bin sound/{ => announcer}/vox_fem/unsafe.ogg | Bin sound/{ => announcer}/vox_fem/until.ogg | Bin sound/{ => announcer}/vox_fem/unwrench.ogg | Bin sound/{ => announcer}/vox_fem/unwrenching.ogg | Bin sound/{ => announcer}/vox_fem/up.ogg | Bin sound/{ => announcer}/vox_fem/update.ogg | Bin sound/{ => announcer}/vox_fem/updated.ogg | Bin sound/{ => announcer}/vox_fem/updating.ogg | Bin sound/{ => announcer}/vox_fem/upload.ogg | Bin sound/{ => announcer}/vox_fem/upper.ogg | Bin sound/{ => announcer}/vox_fem/uranium.ogg | Bin sound/{ => announcer}/vox_fem/us.ogg | Bin sound/{ => announcer}/vox_fem/usa.ogg | Bin sound/{ => announcer}/vox_fem/use.ogg | Bin sound/{ => announcer}/vox_fem/used.ogg | Bin sound/{ => announcer}/vox_fem/useful.ogg | Bin sound/{ => announcer}/vox_fem/useless.ogg | Bin sound/{ => announcer}/vox_fem/user.ogg | Bin sound/{ => announcer}/vox_fem/v.ogg | Bin sound/{ => announcer}/vox_fem/vacate.ogg | Bin sound/{ => announcer}/vox_fem/vacuum.ogg | Bin sound/{ => announcer}/vox_fem/valid.ogg | Bin sound/{ => announcer}/vox_fem/validate.ogg | Bin sound/{ => announcer}/vox_fem/vapor.ogg | Bin sound/{ => announcer}/vox_fem/vendor.ogg | Bin sound/{ => announcer}/vox_fem/vent.ogg | Bin sound/{ => announcer}/vox_fem/ventilation.ogg | Bin sound/{ => announcer}/vox_fem/very.ogg | Bin sound/{ => announcer}/vox_fem/victor.ogg | Bin sound/{ => announcer}/vox_fem/violated.ogg | Bin sound/{ => announcer}/vox_fem/violation.ogg | Bin sound/{ => announcer}/vox_fem/virologist.ogg | Bin sound/{ => announcer}/vox_fem/virology.ogg | Bin sound/{ => announcer}/vox_fem/virus.ogg | Bin sound/{ => announcer}/vox_fem/vitals.ogg | Bin sound/{ => announcer}/vox_fem/voltage.ogg | Bin sound/{ => announcer}/vox_fem/vox.ogg | Bin sound/{ => announcer}/vox_fem/vox_login.ogg | Bin sound/{ => announcer}/vox_fem/voxtest.ogg | Bin sound/{ => announcer}/vox_fem/w.ogg | Bin sound/{ => announcer}/vox_fem/walk.ogg | Bin sound/{ => announcer}/vox_fem/wall.ogg | Bin sound/{ => announcer}/vox_fem/wanker.ogg | Bin sound/{ => announcer}/vox_fem/want.ogg | Bin sound/{ => announcer}/vox_fem/wanted.ogg | Bin sound/{ => announcer}/vox_fem/warden.ogg | Bin sound/{ => announcer}/vox_fem/warm.ogg | Bin sound/{ => announcer}/vox_fem/warn.ogg | Bin sound/{ => announcer}/vox_fem/warning.ogg | Bin sound/{ => announcer}/vox_fem/was.ogg | Bin sound/{ => announcer}/vox_fem/waste.ogg | Bin sound/{ => announcer}/vox_fem/water.ogg | Bin sound/{ => announcer}/vox_fem/way.ogg | Bin sound/{ => announcer}/vox_fem/ways.ogg | Bin sound/{ => announcer}/vox_fem/we.ogg | Bin sound/{ => announcer}/vox_fem/weak.ogg | Bin sound/{ => announcer}/vox_fem/weapon.ogg | Bin sound/{ => announcer}/vox_fem/welcome.ogg | Bin sound/{ => announcer}/vox_fem/weld.ogg | Bin sound/{ => announcer}/vox_fem/west.ogg | Bin sound/{ => announcer}/vox_fem/wew.ogg | Bin sound/{ => announcer}/vox_fem/what.ogg | Bin sound/{ => announcer}/vox_fem/when.ogg | Bin sound/{ => announcer}/vox_fem/where.ogg | Bin sound/{ => announcer}/vox_fem/which.ogg | Bin sound/{ => announcer}/vox_fem/while.ogg | Bin sound/{ => announcer}/vox_fem/whiskey.ogg | Bin sound/{ => announcer}/vox_fem/white.ogg | Bin sound/{ => announcer}/vox_fem/why.ogg | Bin sound/{ => announcer}/vox_fem/wilco.ogg | Bin sound/{ => announcer}/vox_fem/will.ogg | Bin sound/{ => announcer}/vox_fem/wing.ogg | Bin sound/{ => announcer}/vox_fem/wire.ogg | Bin sound/{ => announcer}/vox_fem/with.ogg | Bin sound/{ => announcer}/vox_fem/without.ogg | Bin sound/{ => announcer}/vox_fem/wizard.ogg | Bin sound/{ => announcer}/vox_fem/wood.ogg | Bin sound/{ => announcer}/vox_fem/woody.ogg | Bin sound/{ => announcer}/vox_fem/woop.ogg | Bin sound/{ => announcer}/vox_fem/work.ogg | Bin sound/{ => announcer}/vox_fem/worked.ogg | Bin sound/{ => announcer}/vox_fem/working.ogg | Bin sound/{ => announcer}/vox_fem/works.ogg | Bin sound/{ => announcer}/vox_fem/would.ogg | Bin sound/{ => announcer}/vox_fem/wouldnt.ogg | Bin sound/{ => announcer}/vox_fem/wow.ogg | Bin sound/{ => announcer}/vox_fem/wrench.ogg | Bin sound/{ => announcer}/vox_fem/wrenching.ogg | Bin sound/{ => announcer}/vox_fem/x.ogg | Bin sound/{ => announcer}/vox_fem/xeno.ogg | Bin sound/{ => announcer}/vox_fem/xenobiology.ogg | Bin sound/{ => announcer}/vox_fem/xenomorph.ogg | Bin sound/{ => announcer}/vox_fem/xenomorphs.ogg | Bin sound/{ => announcer}/vox_fem/y.ogg | Bin sound/{ => announcer}/vox_fem/yankee.ogg | Bin sound/{ => announcer}/vox_fem/yards.ogg | Bin sound/{ => announcer}/vox_fem/year.ogg | Bin sound/{ => announcer}/vox_fem/yellow.ogg | Bin sound/{ => announcer}/vox_fem/yes.ogg | Bin sound/{ => announcer}/vox_fem/you.ogg | Bin sound/{ => announcer}/vox_fem/your.ogg | Bin sound/{ => announcer}/vox_fem/yourself.ogg | Bin sound/{ => announcer}/vox_fem/z.ogg | Bin sound/{ => announcer}/vox_fem/zap.ogg | Bin sound/{ => announcer}/vox_fem/zauker.ogg | Bin sound/{ => announcer}/vox_fem/zero.ogg | Bin sound/{ => announcer}/vox_fem/zombie.ogg | Bin sound/{ => announcer}/vox_fem/zone.ogg | Bin sound/{ => announcer}/vox_fem/zulu.ogg | Bin sound/attributions.txt | 12 +- .../{ => achievement}/beeps_jingle.ogg | Bin .../{ => achievement}/glockenspiel_ping.ogg | Bin .../{ => achievement}/tada_fanfare.ogg | Bin sound/effects/{ => bin}/bin_close.ogg | Bin sound/effects/{ => bin}/bin_open.ogg | Bin sound/effects/{ => blob}/attackblob.ogg | Bin sound/effects/{ => blob}/blobattack.ogg | Bin sound/effects/{ => bodyfall}/bodyfall1.ogg | Bin sound/effects/{ => bodyfall}/bodyfall2.ogg | Bin sound/effects/{ => bodyfall}/bodyfall3.ogg | Bin sound/effects/{ => bodyfall}/bodyfall4.ogg | Bin sound/effects/{ => bubbles}/bubbles.ogg | Bin sound/effects/{ => bubbles}/bubbles2.ogg | Bin .../effects/{ => bush}/crunchybushwhack1.ogg | Bin .../effects/{ => bush}/crunchybushwhack2.ogg | Bin .../effects/{ => bush}/crunchybushwhack3.ogg | Bin sound/effects/{ => can}/can_open1.ogg | Bin sound/effects/{ => can}/can_open2.ogg | Bin sound/effects/{ => can}/can_open3.ogg | Bin sound/effects/{ => can}/can_pop.ogg | Bin sound/effects/{ => can}/can_shake.ogg | Bin .../effects/{ => cartoon_sfx}/cartoon_pop.ogg | Bin .../{ => cartoon_sfx}/cartoon_splat.ogg | Bin .../{ => effects}/chemistry/SoundSources.txt | 0 sound/{ => effects}/chemistry/ahaha.ogg | Bin sound/{ => effects}/chemistry/bluespace.ogg | Bin sound/{ => effects}/chemistry/bufferadd.ogg | Bin sound/{ => effects}/chemistry/catalyst.ogg | Bin sound/{ => effects}/chemistry/heatdam.ogg | Bin .../{ => effects}/chemistry/saturnx_fade.ogg | Bin .../chemistry/shockwave_explosion.ogg | Bin sound/effects/compressed_air/attribution.txt | 9 + .../{ => compressed_air}/compressed_air1.ogg | Bin .../{ => compressed_air}/compressed_air2.ogg | Bin .../tank_insert_clunky.ogg | Bin .../tank_remove_thunk.ogg | Bin sound/effects/{ => creak}/creak1.ogg | Bin sound/effects/{ => creak}/creak2.ogg | Bin sound/effects/{ => creak}/creak3.ogg | Bin sound/effects/{ => curse}/curse1.ogg | Bin sound/effects/{ => curse}/curse2.ogg | Bin sound/effects/{ => curse}/curse3.ogg | Bin sound/effects/{ => curse}/curse4.ogg | Bin sound/effects/{ => curse}/curse5.ogg | Bin sound/effects/{ => curse}/curse6.ogg | Bin sound/effects/{ => curse}/curseattack.ogg | Bin .../desecration}/desecration-01.ogg | Bin .../desecration}/desecration-02.ogg | Bin .../desecration}/desecration-03.ogg | Bin sound/effects/{ => emotes}/assslap.ogg | Bin sound/effects/{ => emotes}/kiss.ogg | Bin sound/effects/{ => explosion}/explosion1.ogg | Bin sound/effects/{ => explosion}/explosion2.ogg | Bin sound/effects/{ => explosion}/explosion3.ogg | Bin .../{ => explosion}/explosion_distant.ogg | Bin .../{ => explosion}/explosioncreak1.ogg | Bin .../{ => explosion}/explosioncreak2.ogg | Bin .../effects/{ => explosion}/explosionfar.ogg | Bin sound/effects/{ => footstep/water}/water1.ogg | Bin sound/effects/{ => footstep/water}/water2.ogg | Bin sound/effects/{ => footstep/water}/water3.ogg | Bin sound/effects/{ => footstep/water}/water4.ogg | Bin sound/effects/{ => glass}/glass_reverse.ogg | Bin sound/effects/{ => glass}/glassbash.ogg | Bin sound/effects/{ => glass}/glassbr1.ogg | Bin sound/effects/{ => glass}/glassbr2.ogg | Bin sound/effects/{ => glass}/glassbr3.ogg | Bin sound/effects/{ => glass}/glasshit.ogg | Bin sound/effects/{ => glass}/glassknock.ogg | Bin .../hallucinations/behind_you1.ogg | Bin .../hallucinations/behind_you2.ogg | Bin .../hallucinations/far_noise.ogg | Bin sound/{ => effects}/hallucinations/growl1.ogg | Bin sound/{ => effects}/hallucinations/growl2.ogg | Bin sound/{ => effects}/hallucinations/growl3.ogg | Bin .../hallucinations/i_see_you1.ogg | Bin .../hallucinations/i_see_you2.ogg | Bin .../{ => effects}/hallucinations/im_here1.ogg | Bin .../{ => effects}/hallucinations/im_here2.ogg | Bin .../{ => effects}/hallucinations/look_up1.ogg | Bin .../{ => effects}/hallucinations/look_up2.ogg | Bin .../hallucinations/over_here1.ogg | Bin .../hallucinations/over_here2.ogg | Bin .../hallucinations/over_here3.ogg | Bin .../hallucinations/radio_static.ogg | Bin .../hallucinations/turn_around1.ogg | Bin .../hallucinations/turn_around2.ogg | Bin .../hallucinations/veryfar_noise.ogg | Bin sound/{ => effects}/hallucinations/wail.ogg | Bin sound/{ => effects}/health/fastbeat.ogg | Bin sound/{ => effects}/health/slowbeat.ogg | Bin .../{ => his_grace}/his_grace_ascend.ogg | Bin .../{ => his_grace}/his_grace_awaken.ogg | Bin .../{ => liquid_pour}/liquid_pour1.ogg | Bin .../{ => liquid_pour}/liquid_pour2.ogg | Bin .../{ => liquid_pour}/liquid_pour3.ogg | Bin sound/{ => effects}/magic/RATTLEMEBONES.ogg | Bin sound/{ => effects}/magic/RATTLEMEBONES2.ogg | Bin sound/{ => effects}/magic/VoidDeflect01.ogg | Bin sound/{ => effects}/magic/VoidDeflect02.ogg | Bin sound/{ => effects}/magic/VoidDeflect03.ogg | Bin sound/{ => effects}/magic/blind.ogg | Bin sound/{ => effects}/magic/blink.ogg | Bin sound/{ => effects}/magic/castsummon.ogg | Bin sound/{ => effects}/magic/charge.ogg | Bin .../magic/clockwork/anima_fragment_attack.ogg | Bin .../magic/clockwork/anima_fragment_death.ogg | Bin .../magic/clockwork/ark_activation.ogg | Bin .../clockwork/ark_activation_sequence.ogg | Bin .../{ => effects}/magic/clockwork/credit.txt | 0 .../magic/clockwork/fellowship_armory.ogg | Bin .../magic/clockwork/invoke_general.ogg | Bin .../magic/clockwork/narsie_attack.ogg | Bin .../magic/clockwork/ratvar_attack.ogg | Bin sound/{ => effects}/magic/cosmic_energy.ogg | Bin .../{ => effects}/magic/cosmic_expansion.ogg | Bin sound/{ => effects}/magic/cowhead_curse.ogg | Bin sound/{ => effects}/magic/curse.ogg | Bin sound/{ => effects}/magic/demon_attack1.ogg | Bin sound/{ => effects}/magic/demon_consume.ogg | Bin sound/{ => effects}/magic/demon_dies.ogg | Bin sound/{ => effects}/magic/disable_tech.ogg | Bin sound/{ => effects}/magic/disintegrate.ogg | Bin sound/{ => effects}/magic/enter_blood.ogg | Bin sound/{ => effects}/magic/ethereal_enter.ogg | Bin sound/{ => effects}/magic/ethereal_exit.ogg | Bin sound/{ => effects}/magic/exit_blood.ogg | Bin sound/{ => effects}/magic/fireball.ogg | Bin sound/{ => effects}/magic/fleshtostone.ogg | Bin sound/{ => effects}/magic/forcewall.ogg | Bin sound/{ => effects}/magic/hereticknock.ogg | Bin sound/{ => effects}/magic/horsehead_curse.ogg | Bin sound/{ => effects}/magic/knock.ogg | Bin .../magic/lightning_chargeup.ogg | Bin sound/{ => effects}/magic/lightningbolt.ogg | Bin sound/{ => effects}/magic/lightningshock.ogg | Bin sound/{ => effects}/magic/magic_block.ogg | Bin .../{ => effects}/magic/magic_block_holy.ogg | Bin .../{ => effects}/magic/magic_block_mind.ogg | Bin sound/{ => effects}/magic/magic_missile.ogg | Bin sound/{ => effects}/magic/mandswap.ogg | Bin sound/{ => effects}/magic/mm_hit.ogg | Bin sound/{ => effects}/magic/mutate.ogg | Bin sound/{ => effects}/magic/pantsaltar.ogg | Bin sound/{ => effects}/magic/pighead_curse.ogg | Bin sound/{ => effects}/magic/repulse.ogg | Bin sound/{ => effects}/magic/smoke.ogg | Bin sound/{ => effects}/magic/staff_animation.ogg | Bin sound/{ => effects}/magic/staff_change.ogg | Bin sound/{ => effects}/magic/staff_chaos.ogg | Bin sound/{ => effects}/magic/staff_door.ogg | Bin sound/{ => effects}/magic/staff_healing.ogg | Bin sound/{ => effects}/magic/staff_shrink.ogg | Bin sound/{ => effects}/magic/summon_guns.ogg | Bin sound/{ => effects}/magic/summon_karp.ogg | Bin sound/{ => effects}/magic/summon_magic.ogg | Bin .../magic/summonitems_generic.ogg | Bin sound/{ => effects}/magic/swap.ogg | Bin sound/{ => effects}/magic/tail_swing.ogg | Bin sound/{ => effects}/magic/teleport_app.ogg | Bin sound/{ => effects}/magic/teleport_diss.ogg | Bin sound/{ => effects}/magic/timeparadox2.ogg | Bin sound/{ => effects}/magic/voidblink.ogg | Bin sound/{ => effects}/magic/wand_teleport.ogg | Bin sound/{ => effects}/magic/wandodeath.ogg | Bin sound/{ => effects}/magic/warpwhistle.ogg | Bin sound/effects/{ => page_turn}/pageturn1.ogg | Bin sound/effects/{ => page_turn}/pageturn2.ogg | Bin sound/effects/{ => page_turn}/pageturn3.ogg | Bin sound/effects/{ => pickaxe}/picaxe1.ogg | Bin sound/effects/{ => pickaxe}/picaxe2.ogg | Bin sound/effects/{ => pickaxe}/picaxe3.ogg | Bin sound/effects/{ => portal}/portal_close.ogg | Bin sound/effects/{ => portal}/portal_open_1.ogg | Bin sound/effects/{ => portal}/portal_open_2.ogg | Bin sound/effects/{ => portal}/portal_open_3.ogg | Bin sound/effects/{ => portal}/portal_travel.ogg | Bin sound/effects/{ => rock}/rock_break.ogg | Bin sound/effects/{ => rock}/rocktap1.ogg | Bin sound/effects/{ => rock}/rocktap2.ogg | Bin sound/effects/{ => rock}/rocktap3.ogg | Bin sound/effects/{ => rustle}/rustle1.ogg | Bin sound/effects/{ => rustle}/rustle2.ogg | Bin sound/effects/{ => rustle}/rustle3.ogg | Bin sound/effects/{ => rustle}/rustle4.ogg | Bin sound/effects/{ => rustle}/rustle5.ogg | Bin sound/effects/{ => soup_boil}/soup_boil1.ogg | Bin sound/effects/{ => soup_boil}/soup_boil2.ogg | Bin sound/effects/{ => soup_boil}/soup_boil3.ogg | Bin sound/effects/{ => soup_boil}/soup_boil4.ogg | Bin sound/effects/{ => soup_boil}/soup_boil5.ogg | Bin .../effects/{ => soup_boil}/soup_boil_end.ogg | Bin sound/effects/{ => sparks}/sparks1.ogg | Bin sound/effects/{ => sparks}/sparks2.ogg | Bin sound/effects/{ => sparks}/sparks3.ogg | Bin sound/effects/{ => sparks}/sparks4.ogg | Bin sound/effects/{ => treechop}/treechop1.ogg | Bin sound/effects/{ => treechop}/treechop2.ogg | Bin sound/effects/{ => treechop}/treechop3.ogg | Bin sound/items/{ => airhorn}/airhorn.ogg | Bin sound/items/{ => airhorn}/airhorn2.ogg | Bin sound/items/attributions.txt | 10 - sound/items/{ => cards}/cardflip.ogg | Bin sound/items/{ => cards}/cardshuffle.ogg | Bin sound/items/{ => duct_tape}/duct_tape_rip.ogg | Bin .../items/{ => duct_tape}/duct_tape_snap.ogg | Bin sound/items/{ => fulton}/fultext_deploy.ogg | Bin sound/items/{ => fulton}/fultext_launch.ogg | Bin .../cardboard_box}/cardboard_box_open.ogg | Bin .../cardboard_box}/cardboard_box_rustle.ogg | Bin .../{ => cardboard_box}/cardboardbox_drop.ogg | Bin .../cardboardbox_pickup.ogg | Bin .../{ => handling/gas_tank}/gas_tank_drop.ogg | Bin .../gas_tank}/gas_tank_pick_up.ogg | Bin .../{ => handling/grenade}/grenade_drop.ogg | Bin .../grenade}/grenade_pick_up.ogg | Bin sound/items/{ => handling/gun}/gun_drop.ogg | Bin .../items/{ => handling/gun}/gun_pick_up.ogg | Bin .../handcuffs}/handcuffs_drop.ogg | Bin .../handcuffs}/handcuffs_pick_up.ogg | Bin .../holster_open.ogg} | Bin .../lead_pipe}/lead_pipe_drop.ogg | Bin .../lead_pipe}/lead_pipe_pickup.ogg | Bin .../materials}/cardboard_drop.ogg | Bin .../materials}/cardboard_pick_up.ogg | Bin .../{ => handling/materials}/glass_drop.ogg | Bin .../materials}/glass_pick_up.ogg | Bin .../materials}/iron_rod_pick_up.ogg | Bin .../{ => handling/materials}/metal_drop.ogg | Bin .../materials}/metal_pick_up.ogg | Bin .../{ => handling/materials}/plastic_drop.ogg | Bin .../materials}/plastic_pick_up.ogg | Bin .../{ => handling/materials}/skin_drop.ogg | Bin .../{ => handling/materials}/skin_pick_up.ogg | Bin .../{ => handling/materials}/wood_drop.ogg | Bin .../{ => handling/materials}/wood_pick_up.ogg | Bin .../{ => handling/medkit}/medkit_drop.ogg | Bin .../{ => handling/medkit}/medkit_open.ogg | Bin .../{ => handling/medkit}/medkit_pick_up.ogg | Bin .../{ => handling/medkit}/medkit_rustle.ogg | Bin .../pepper_spray}/pepper_spray_drop.ogg | Bin .../pepper_spray}/pepper_spray_pick_up.ogg | Bin sound/items/handling/readme.txt | 7 + .../shield}/plastic_shield_drop.ogg | Bin .../shield}/plastic_shield_pick_up.ogg | Bin .../{ => items/handling}/surgery/cautery1.ogg | Bin .../{ => items/handling}/surgery/cautery2.ogg | Bin .../handling}/surgery/hemostat1.ogg | Bin sound/{ => items/handling}/surgery/organ1.ogg | Bin sound/{ => items/handling}/surgery/organ2.ogg | Bin .../handling}/surgery/retractor1.ogg | Bin .../handling}/surgery/retractor2.ogg | Bin sound/{ => items/handling}/surgery/saw.ogg | Bin .../{ => items/handling}/surgery/scalpel1.ogg | Bin .../{ => items/handling}/surgery/scalpel2.ogg | Bin .../handling/{ => toolbox}/toolbox_drop.ogg | Bin .../{ => handling/toolbox}/toolbox_open.ogg | Bin .../handling/{ => toolbox}/toolbox_pickup.ogg | Bin .../{ => handling/toolbox}/toolbox_rustle.ogg | Bin .../handling/{ => tools}/crowbar_drop.ogg | Bin .../handling/{ => tools}/crowbar_pickup.ogg | Bin .../handling/{ => tools}/multitool_drop.ogg | Bin .../handling/{ => tools}/multitool_pickup.ogg | Bin sound/items/handling/{ => tools}/rcd_drop.ogg | Bin .../items/handling/{ => tools}/rcd_pickup.ogg | Bin sound/items/handling/{ => tools}/rpd_drop.ogg | Bin .../items/handling/{ => tools}/rpd_pickup.ogg | Bin .../handling/{ => tools}/screwdriver_drop.ogg | Bin .../{ => tools}/screwdriver_pickup.ogg | Bin .../handling/{ => tools}/weldingtool_drop.ogg | Bin .../{ => tools}/weldingtool_pickup.ogg | Bin .../handling/{ => tools}/wirecutter_drop.ogg | Bin .../{ => tools}/wirecutter_pickup.ogg | Bin .../handling/{ => tools}/wrench_drop.ogg | Bin .../handling/{ => tools}/wrench_pickup.ogg | Bin sound/items/{ => internals}/internals_off.ogg | Bin sound/items/{ => internals}/internals_on.ogg | Bin sound/items/{ => knell}/knell1.ogg | Bin sound/items/{ => knell}/knell2.ogg | Bin sound/items/{ => knell}/knell3.ogg | Bin sound/items/{ => knell}/knell4.ogg | Bin sound/items/lighter/attribution.txt | 8 + sound/items/{ => lighter}/cig_light.ogg | Bin sound/items/{ => lighter}/cig_snuff.ogg | Bin sound/items/{ => lighter}/lighter_off.ogg | Bin sound/items/{ => lighter}/lighter_on.ogg | Bin sound/items/{ => lighter}/zippo_off.ogg | Bin sound/items/{ => lighter}/zippo_on.ogg | Bin sound/items/{ => pillow}/pillow_hit.ogg | Bin sound/items/{ => pillow}/pillow_hit2.ogg | Bin sound/items/{ => polaroid}/polaroid1.ogg | Bin sound/items/{ => polaroid}/polaroid2.ogg | Bin .../{ => poster}/poster_being_created.ogg | Bin sound/items/{ => poster}/poster_ripped.ogg | Bin sound/items/{ => pshoom}/pshoom.ogg | Bin sound/items/{ => pshoom}/pshoom_2.ogg | Bin sound/items/radio/attribution.txt | 8 + .../{misc => items/radio}/radio_important.ogg | Bin sound/{misc => items/radio}/radio_receive.ogg | Bin sound/{misc => items/radio}/radio_talk.ogg | Bin sound/items/{ => rattle}/rattle1.ogg | Bin sound/items/{ => rattle}/rattle2.ogg | Bin sound/items/{ => rattle}/rattle3.ogg | Bin sound/items/{ => reel}/reel1.ogg | Bin sound/items/{ => reel}/reel2.ogg | Bin sound/items/{ => reel}/reel3.ogg | Bin sound/items/{ => reel}/reel4.ogg | Bin sound/items/{ => reel}/reel5.ogg | Bin .../{voice => items/sec_hailer}/sec_death.ogg | Bin .../items/{ => sitcom_laugh}/SitcomLaugh1.ogg | Bin .../items/{ => sitcom_laugh}/SitcomLaugh2.ogg | Bin .../items/{ => sitcom_laugh}/SitcomLaugh3.ogg | Bin sound/items/{ => tools}/change_drill.ogg | Bin sound/items/{ => tools}/change_jaws.ogg | Bin sound/items/{ => tools}/crowbar.ogg | Bin sound/items/{ => tools}/crowbar_prying.ogg | Bin sound/items/{ => tools}/drill_hit.ogg | Bin sound/items/{ => tools}/drill_use.ogg | Bin sound/items/{ => tools}/jaws_cut.ogg | Bin sound/items/{ => tools}/jaws_pry.ogg | Bin sound/items/{ => tools}/ratchet.ogg | Bin sound/items/{ => tools}/ratchet_fast.ogg | Bin sound/items/{ => tools}/ratchet_slow.ogg | Bin sound/items/{ => tools}/rcdscan.ogg | Bin sound/items/{ => tools}/rped.ogg | Bin sound/items/{ => tools}/screwdriver.ogg | Bin sound/items/{ => tools}/screwdriver2.ogg | Bin .../{ => tools}/screwdriver_operating.ogg | Bin .../items/{handling => tools}/tool_switch.ogg | Bin sound/items/{ => tools}/welder.ogg | Bin sound/items/{ => tools}/welder2.ogg | Bin sound/items/{ => tools}/welderactivate.ogg | Bin sound/items/{ => tools}/welderdeactivate.ogg | Bin sound/items/{ => tools}/wirecutter.ogg | Bin sound/items/{ => tools}/wirecutter_cut.ogg | Bin sound/items/{ => toy_squeak}/toysqueak1.ogg | Bin sound/items/{ => toy_squeak}/toysqueak2.ogg | Bin sound/items/{ => toy_squeak}/toysqueak3.ogg | Bin sound/items/{ => trayhit}/trayhit1.ogg | Bin sound/items/{ => trayhit}/trayhit2.ogg | Bin sound/{ => items}/weapons/armbomb.ogg | Bin sound/{ => items}/weapons/autoguninsert.ogg | Bin sound/{ => items}/weapons/banjoslap.ogg | Bin sound/{ => items}/weapons/barragespellhit.ogg | Bin sound/{ => items}/weapons/batonextend.ogg | Bin sound/{ => items}/weapons/beam_sniper.ogg | Bin sound/{ => items}/weapons/beesmoke.ogg | Bin sound/{ => items}/weapons/bite.ogg | Bin sound/{ => items}/weapons/blade1.ogg | Bin sound/{ => items}/weapons/bladeslice.ogg | Bin sound/{ => items}/weapons/blastcannon.ogg | Bin sound/{ => items}/weapons/blaster.ogg | Bin sound/{ => items}/weapons/block_blade.ogg | Bin sound/{ => items}/weapons/block_shield.ogg | Bin sound/{ => items}/weapons/bolathrow.ogg | Bin sound/{ => items}/weapons/bulletflyby.ogg | Bin sound/{ => items}/weapons/bulletflyby2.ogg | Bin sound/{ => items}/weapons/bulletflyby3.ogg | Bin sound/{ => items}/weapons/cablecuff.ogg | Bin sound/{ => items}/weapons/chainhit.ogg | Bin sound/{ => items}/weapons/chainsaw_loop.ogg | Bin sound/{ => items}/weapons/chainsaw_start.ogg | Bin sound/{ => items}/weapons/chainsaw_stop.ogg | Bin sound/{ => items}/weapons/chainsawhit.ogg | Bin sound/{ => items}/weapons/circsawhit.ogg | Bin .../contractor_baton}/contractorbatonhit.ogg | Bin .../weapons/contractorbatonextend.ogg | Bin sound/{ => items}/weapons/cqchit1.ogg | Bin sound/{ => items}/weapons/cqchit2.ogg | Bin sound/{ => items}/weapons/draw_bow.ogg | Bin sound/{ => items}/weapons/draw_bow2.ogg | Bin sound/{ => items}/weapons/drill.ogg | Bin .../weapons/effects/batreflect.ogg | Bin sound/{ => items}/weapons/effects/ric1.ogg | Bin sound/{ => items}/weapons/effects/ric2.ogg | Bin sound/{ => items}/weapons/effects/ric3.ogg | Bin sound/{ => items}/weapons/effects/ric4.ogg | Bin sound/{ => items}/weapons/effects/ric5.ogg | Bin .../{ => items}/weapons/effects/searwall.ogg | Bin sound/{ => items}/weapons/egloves.ogg | Bin sound/{ => items}/weapons/emitter.ogg | Bin sound/{ => items}/weapons/emitter2.ogg | Bin sound/{ => items}/weapons/empty.ogg | Bin sound/{ => items}/weapons/etherealhit.ogg | Bin sound/{ => items}/weapons/etherealmiss.ogg | Bin sound/{ => items}/weapons/flash.ogg | Bin sound/{ => items}/weapons/flash_ring.ogg | Bin sound/{ => items}/weapons/flashbang.ogg | Bin sound/{ => items}/weapons/fwoosh.ogg | Bin sound/{ => items}/weapons/genhit.ogg | Bin sound/{ => items}/weapons/genhit1.ogg | Bin sound/{ => items}/weapons/genhit2.ogg | Bin sound/{ => items}/weapons/genhit3.ogg | Bin sound/{ => items}/weapons/guillotine.ogg | Bin .../weapons/gun/bow/attribution.txt | 0 .../{ => items}/weapons/gun/bow/bow_draw.ogg | Bin .../{ => items}/weapons/gun/bow/bow_fire.ogg | Bin .../weapons/gun/general/ballistic_click.ogg | Bin .../weapons/gun/general/bolt_drop.ogg | Bin .../weapons/gun/general/bolt_rack.ogg | Bin .../weapons/gun/general/cannon.ogg | Bin .../weapons/gun/general/chunkyrack.ogg | Bin .../weapons/gun/general/dry_fire.ogg | Bin .../weapons/gun/general/empty_alarm.ogg | Bin .../weapons/gun/general/grenade_launch.ogg | Bin .../gun/general/heavy_shot_suppressed.ogg | Bin .../weapons/gun/general/mag_bullet_insert.ogg | Bin .../weapons/gun/general/mag_bullet_remove.ogg | Bin .../gun/general/magazine_insert_empty.ogg | Bin .../gun/general/magazine_insert_full.ogg | Bin .../gun/general/magazine_remove_empty.ogg | Bin .../gun/general/magazine_remove_full.ogg | Bin .../weapons/gun/general/mountedgun.ogg | Bin .../weapons/gun/general/mountedgunend.ogg | Bin .../weapons/gun/general/rocket_launch.ogg | Bin .../weapons/gun/general/slide_lock_1.ogg | Bin sound/{ => items}/weapons/gun/hmg/hmg.ogg | Bin sound/{ => items}/weapons/gun/l6/l6_door.ogg | Bin sound/{ => items}/weapons/gun/l6/l6_rack.ogg | Bin sound/{ => items}/weapons/gun/l6/shot.ogg | Bin .../weapons/gun/pistol/drop_small.ogg | Bin .../weapons/gun/pistol/dry_fire.ogg | Bin .../weapons/gun/pistol/lock_small.ogg | Bin .../weapons/gun/pistol/mag_insert.ogg | Bin .../weapons/gun/pistol/mag_release.ogg | Bin sound/{ => items}/weapons/gun/pistol/rack.ogg | Bin .../weapons/gun/pistol/rack_small.ogg | Bin sound/{ => items}/weapons/gun/pistol/shot.ogg | Bin .../weapons/gun/pistol/shot_alt.ogg | Bin .../weapons/gun/pistol/shot_suppressed.ogg | Bin .../weapons/gun/pistol/slide_drop.ogg | Bin .../weapons/gun/pistol/slide_lock.ogg | Bin .../weapons/gun/revolver/dry_fire.ogg | Bin .../weapons/gun/revolver/empty.ogg | Bin .../weapons/gun/revolver/load_bullet.ogg | Bin .../{ => items}/weapons/gun/revolver/shot.ogg | Bin .../weapons/gun/revolver/shot_alt.ogg | Bin .../weapons/gun/revolver/spin1.ogg | Bin .../weapons/gun/revolver/spin2.ogg | Bin .../weapons/gun/revolver/spin3.ogg | Bin .../{ => items}/weapons/gun/rifle/bolt_in.ogg | Bin .../weapons/gun/rifle/bolt_out.ogg | Bin sound/{ => items}/weapons/gun/rifle/shot.ogg | Bin .../weapons/gun/rifle/shot_heavy.ogg | Bin .../weapons/gun/shotgun/insert_shell.ogg | Bin .../{ => items}/weapons/gun/shotgun/rack.ogg | Bin .../{ => items}/weapons/gun/shotgun/shot.ogg | Bin .../weapons/gun/shotgun/shot_alt.ogg | Bin .../weapons/gun/smartgun/smartgun_shoot_1.ogg | Bin .../weapons/gun/smartgun/smartgun_shoot_2.ogg | Bin .../weapons/gun/smartgun/smartgun_shoot_3.ogg | Bin sound/{ => items}/weapons/gun/smg/shot.ogg | Bin .../{ => items}/weapons/gun/smg/shot_alt.ogg | Bin .../weapons/gun/smg/shot_suppressed.ogg | Bin sound/{ => items}/weapons/gun/smg/smgrack.ogg | Bin .../weapons/gun/sniper/mag_insert.ogg | Bin sound/{ => items}/weapons/gun/sniper/rack.ogg | Bin sound/{ => items}/weapons/gun/sniper/shot.ogg | Bin sound/{ => items}/weapons/handcuffs.ogg | Bin sound/{ => items}/weapons/homerun.ogg | Bin sound/{ => items}/weapons/ionrifle.ogg | Bin sound/{ => items}/weapons/jammed.ogg | Bin sound/{ => items}/weapons/kinetic_accel.ogg | Bin sound/{ => items}/weapons/kinetic_reload.ogg | Bin sound/{ => items}/weapons/laser.ogg | Bin sound/{ => items}/weapons/laser2.ogg | Bin sound/{ => items}/weapons/laser3.ogg | Bin sound/{ => items}/weapons/laser_crank.ogg | Bin sound/{ => items}/weapons/lasercannonfire.ogg | Bin sound/{ => items}/weapons/magin.ogg | Bin sound/{ => items}/weapons/magout.ogg | Bin sound/{ => items}/weapons/marauder.ogg | Bin sound/{ => items}/weapons/minebot_rocket.ogg | Bin .../weapons/mortar_long_whistle.ogg | Bin sound/{ => items}/weapons/mortar_whistle.ogg | Bin sound/{ => items}/weapons/parry.ogg | Bin sound/{ => items}/weapons/pierce.ogg | Bin sound/{ => items}/weapons/pierce_slow.ogg | Bin sound/{ => items}/weapons/plasma_cutter.ogg | Bin sound/{ => items}/weapons/pulse.ogg | Bin sound/{ => items}/weapons/pulse2.ogg | Bin sound/{ => items}/weapons/pulse3.ogg | Bin sound/{ => items}/weapons/punch1.ogg | Bin sound/{ => items}/weapons/punch2.ogg | Bin sound/{ => items}/weapons/punch3.ogg | Bin sound/{ => items}/weapons/punch4.ogg | Bin sound/{ => items}/weapons/punchmiss.ogg | Bin sound/{ => items}/weapons/rapierhit.ogg | Bin sound/{ => items}/weapons/resonator_blast.ogg | Bin sound/{ => items}/weapons/resonator_fire.ogg | Bin sound/{ => items}/weapons/ring.ogg | Bin sound/{ => items}/weapons/saberoff.ogg | Bin sound/{ => items}/weapons/saberon.ogg | Bin sound/{ => items}/weapons/scope.ogg | Bin sound/{ => items}/weapons/sear.ogg | Bin sound/{ => items}/weapons/sear_disabler.ogg | Bin sound/{ => items}/weapons/shove.ogg | Bin sound/{ => items}/weapons/shrink_hit.ogg | Bin sound/{ => items}/weapons/slam.ogg | Bin sound/{ => items}/weapons/slap.ogg | Bin sound/{ => items}/weapons/slash.ogg | Bin sound/{ => items}/weapons/slashmiss.ogg | Bin sound/{ => items}/weapons/slice.ogg | Bin sound/{ => items}/weapons/smash.ogg | Bin sound/{ => items}/weapons/solarflare.ogg | Bin .../{ => items}/weapons/sonic_jackhammer.ogg | Bin sound/{ => items}/weapons/stringsmash.ogg | Bin sound/{ => items}/weapons/tap.ogg | Bin sound/{ => items}/weapons/taser.ogg | Bin sound/{ => items}/weapons/taser2.ogg | Bin sound/{ => items}/weapons/taser3.ogg | Bin sound/{ => items}/weapons/taserhit.ogg | Bin sound/{ => items}/weapons/thermalpistol.ogg | Bin sound/{ => items}/weapons/throw.ogg | Bin sound/{ => items}/weapons/throwhard.ogg | Bin sound/{ => items}/weapons/throwsoft.ogg | Bin sound/{ => items}/weapons/throwtap.ogg | Bin sound/{ => items}/weapons/thudswoosh.ogg | Bin sound/{ => items}/weapons/wave.ogg | Bin sound/{ => items}/weapons/whip.ogg | Bin sound/{ => items}/weapons/whipgrab.ogg | Bin sound/{ => items}/weapons/zapbang.ogg | Bin sound/{ => items}/weapons/zipline_fire.ogg | Bin sound/{ => items}/weapons/zipline_hit.ogg | Bin sound/{ => items}/weapons/zipline_mid.ogg | Bin sound/{misc => items/whistle}/whistle.ogg | Bin sound/items/{ => zip}/un_zip.ogg | Bin sound/items/{ => zip}/zip.ogg | Bin sound/items/{ => zip}/zip_up.ogg | Bin sound/machines/{ => airlock}/airlock.ogg | Bin .../{ => airlock}/airlock_alien_prying.ogg | Bin sound/machines/{ => airlock}/airlockclose.ogg | Bin .../machines/{ => airlock}/airlockforced.ogg | Bin sound/machines/{ => airlock}/airlockopen.ogg | Bin sound/machines/{ => airlock}/boltsdown.ogg | Bin sound/machines/{ => airlock}/boltsup.ogg | Bin sound/machines/{ => airlock}/doorclick.ogg | Bin sound/{ => machines}/arcade/boom.ogg | Bin sound/{ => machines}/arcade/heal.ogg | Bin sound/{ => machines}/arcade/hit.ogg | Bin sound/{ => machines}/arcade/lose.ogg | Bin sound/{ => machines}/arcade/mana.ogg | Bin sound/{ => machines}/arcade/steal.ogg | Bin sound/{ => machines}/arcade/win.ogg | Bin sound/machines/{ => beep}/beep.ogg | Bin sound/machines/{ => beep}/deniedbeep.ogg | Bin sound/machines/{ => beep}/triple_beep.ogg | Bin sound/machines/{ => beep}/twobeep.ogg | Bin sound/machines/{ => beep}/twobeep_high.ogg | Bin sound/machines/{ => beep}/twobeep_voice1.ogg | Bin sound/machines/{ => beep}/twobeep_voice2.ogg | Bin sound/machines/{ => buzz}/buzz-sigh.ogg | Bin sound/machines/{ => buzz}/buzz-two.ogg | Bin sound/machines/{ => closet}/closet_close.ogg | Bin sound/machines/{ => closet}/closet_open.ogg | Bin .../{ => closet}/wooden_closet_close.ogg | Bin .../{ => closet}/wooden_closet_open.ogg | Bin .../compiler}/compiler-failure.ogg | Bin .../compiler}/compiler-stage1.ogg | Bin .../compiler}/compiler-stage2.ogg | Bin sound/machines/crate/attribution.txt | 3 + sound/machines/{ => crate}/crate_close.ogg | Bin sound/machines/{ => crate}/crate_open.ogg | Bin sound/machines/{ => defib}/defib_SaftyOn.ogg | Bin sound/machines/{ => defib}/defib_charge.ogg | Bin sound/machines/{ => defib}/defib_failed.ogg | Bin sound/machines/{ => defib}/defib_ready.ogg | Bin sound/machines/{ => defib}/defib_saftyOff.ogg | Bin sound/machines/{ => defib}/defib_success.ogg | Bin sound/machines/{ => defib}/defib_zap.ogg | Bin sound/machines/{ => door}/door_close.ogg | Bin sound/machines/{ => door}/door_locked.ogg | Bin sound/machines/{ => door}/door_open.ogg | Bin .../{ => engine_alert}/engine_alert1.ogg | Bin .../{ => engine_alert}/engine_alert2.ogg | Bin .../{ => engine_alert}/engine_alert3.ogg | Bin sound/machines/{ => fan}/fan_break.ogg | Bin sound/machines/{ => fan}/fan_loop.ogg | Bin sound/machines/{ => fan}/fan_start.ogg | Bin sound/machines/{ => fan}/fan_stop.ogg | Bin .../machines/{ => fire_alarm}/FireAlarm1.ogg | Bin .../machines/{ => fire_alarm}/FireAlarm2.ogg | Bin .../machines/{ => fire_alarm}/FireAlarm3.ogg | Bin .../machines/{ => fire_alarm}/FireAlarm4.ogg | Bin .../gateway}/gateway_calibrated.ogg | Bin .../gateway}/gateway_calibrating.ogg | Bin .../gateway}/gateway_close.ogg | Bin .../gateway}/gateway_open.ogg | Bin .../gateway}/gateway_travel.ogg | Bin sound/machines/{ => lathe}/attributions.txt | 0 .../lavaland/cursed_slot_machine.ogg | Bin .../lavaland/cursed_slot_machine_jackpot.ogg | Bin sound/machines/lever/attribution.txt | 3 + sound/machines/{ => lever}/lever_start.ogg | Bin sound/machines/{ => lever}/lever_stop.ogg | Bin sound/machines/license.txt | 8 - .../machines/{ => pda_button}/pda_button1.ogg | Bin .../machines/{ => pda_button}/pda_button2.ogg | Bin sound/machines/{ => piston}/piston_lower.ogg | Bin sound/machines/{ => piston}/piston_raise.ogg | Bin .../{ => roulette}/roulettejackpot.ogg | Bin .../machines/{ => roulette}/roulettewheel.ogg | Bin sound/machines/{ => scanner}/scanbuzz.ogg | Bin sound/machines/{ => scanner}/scanner.ogg | Bin sound/machines/{ => synth}/synth_no.ogg | Bin sound/machines/{ => synth}/synth_yes.ogg | Bin .../{ => terminal}/terminal_alert.ogg | Bin .../{ => terminal}/terminal_button01.ogg | Bin .../{ => terminal}/terminal_button02.ogg | Bin .../{ => terminal}/terminal_button03.ogg | Bin .../{ => terminal}/terminal_button04.ogg | Bin .../{ => terminal}/terminal_button05.ogg | Bin .../{ => terminal}/terminal_button06.ogg | Bin .../{ => terminal}/terminal_button07.ogg | Bin .../{ => terminal}/terminal_button08.ogg | Bin .../{ => terminal}/terminal_eject.ogg | Bin .../{ => terminal}/terminal_error.ogg | Bin .../{ => terminal}/terminal_insert_disc.ogg | Bin .../machines/{ => terminal}/terminal_off.ogg | Bin sound/machines/{ => terminal}/terminal_on.ogg | Bin .../{ => terminal}/terminal_processing.ogg | Bin .../{ => terminal}/terminal_prompt.ogg | Bin .../terminal_prompt_confirm.ogg | Bin .../{ => terminal}/terminal_prompt_deny.ogg | Bin .../{ => terminal}/terminal_select.ogg | Bin .../{ => terminal}/terminal_success.ogg | Bin sound/machines/{ => tram}/tramclose.ogg | Bin sound/machines/{ => tram}/tramopen.ogg | Bin sound/machines/{ => uplink}/uplinkerror.ogg | Bin .../machines/{ => uplink}/uplinkpurchase.ogg | Bin sound/{voice => misc}/insane_low_laugh.ogg | Bin sound/misc/license.txt | 17 +- sound/{voice => misc}/roleplay.ogg | Bin .../humanoids}/breathing/attribution.txt | 0 .../breathing/internals_breathing1.ogg | Bin .../breathing/internals_breathing2.ogg | Bin .../breathing/internals_breathing3.ogg | Bin .../breathing/internals_breathing4.ogg | Bin .../breathing/internals_breathing5.ogg | Bin .../breathing/internals_breathing6.ogg | Bin .../breathing/internals_breathing7.ogg | Bin .../breathing/internals_breathing8.ogg | Bin .../ethereal}/ethereal_crystalization.ogg | Bin .../humanoids/ethereal}/ethereal_revive.ogg | Bin .../ethereal}/ethereal_revive_fail.ogg | Bin .../humanoids}/ethereal/ethereal_scream_1.ogg | Bin .../humanoids}/ethereal/ethereal_scream_2.ogg | Bin .../humanoids}/ethereal/ethereal_scream_3.ogg | Bin .../humanoids}/ethereal/lustrous_scream_1.ogg | Bin .../humanoids}/ethereal/lustrous_scream_2.ogg | Bin .../humanoids}/ethereal/lustrous_scream_3.ogg | Bin sound/mobs/humanoids/human/attribution.txt | 8 + .../humanoids/human/clap}/clap1.ogg | Bin .../humanoids/human/clap}/clap2.ogg | Bin .../humanoids/human/clap}/clap3.ogg | Bin .../humanoids/human/clap}/clap4.ogg | Bin .../humanoids/human/cough}/female_cough1.ogg | Bin .../humanoids/human/cough}/female_cough2.ogg | Bin .../humanoids/human/cough}/female_cough3.ogg | Bin .../humanoids/human/cough}/female_cough4.ogg | Bin .../humanoids/human/cough}/female_cough5.ogg | Bin .../humanoids/human/cough}/female_cough6.ogg | Bin .../humanoids/human/cough}/male_cough1.ogg | Bin .../humanoids/human/cough}/male_cough2.ogg | Bin .../humanoids/human/cough}/male_cough3.ogg | Bin .../humanoids/human/cough}/male_cough4.ogg | Bin .../humanoids/human/cough}/male_cough5.ogg | Bin .../humanoids/human/cough}/male_cough6.ogg | Bin .../humanoids/human/cry}/female_cry1.ogg | Bin .../humanoids/human/cry}/female_cry2.ogg | Bin .../humanoids/human/cry}/male_cry1.ogg | Bin .../humanoids/human/cry}/male_cry2.ogg | Bin .../humanoids/human/cry}/male_cry3.ogg | Bin .../human/gag_vomit}/crack_vomit.ogg | Bin .../humanoids/human/gag_vomit}/gag1.ogg | Bin .../humanoids/human/gag_vomit}/gag2.ogg | Bin .../humanoids/human/gag_vomit}/gag3.ogg | Bin .../humanoids/human/gag_vomit}/gag4.ogg | Bin .../humanoids/human/gag_vomit}/gag5.ogg | Bin .../humanoids/human/gasp}/gasp_female1.ogg | Bin .../humanoids/human/gasp}/gasp_female2.ogg | Bin .../humanoids/human/gasp}/gasp_female3.ogg | Bin .../humanoids/human/gasp}/gasp_male1.ogg | Bin .../humanoids/human/gasp}/gasp_male2.ogg | Bin .../human/hiccup}/sf_hiccup_male_01.ogg | Bin .../human/knuckle_crack/attribution.txt | 2 + .../human/knuckle_crack}/knuckles.ogg | Bin .../humanoids/human/laugh}/manlaugh1.ogg | Bin .../humanoids/human/laugh}/manlaugh2.ogg | Bin .../humanoids/human/laugh}/womanlaugh.ogg | Bin .../humanoids/human/salute}/salute.ogg | Bin .../human/scream}/femalescream_1.ogg | Bin .../human/scream}/femalescream_2.ogg | Bin .../human/scream}/femalescream_3.ogg | Bin .../human/scream}/femalescream_4.ogg | Bin .../human/scream}/femalescream_5.ogg | Bin .../humanoids/human/scream}/malescream_1.ogg | Bin .../humanoids/human/scream}/malescream_2.ogg | Bin .../humanoids/human/scream}/malescream_3.ogg | Bin .../humanoids/human/scream}/malescream_4.ogg | Bin .../humanoids/human/scream}/malescream_5.ogg | Bin .../humanoids/human/scream}/malescream_6.ogg | Bin .../human/scream}/wilhelm_scream.ogg | Bin .../humanoids/human/sigh}/female_sigh.ogg | Bin .../humanoids/human/sigh}/male_sigh.ogg | Bin .../humanoids/human/snap}/fingersnap1.ogg | Bin .../humanoids/human/snap}/fingersnap2.ogg | Bin .../human/sneeze}/female_sneeze1.ogg | Bin .../humanoids/human/sneeze}/male_sneeze1.ogg | Bin .../humanoids/human/sniff}/female_sniff.ogg | Bin .../humanoids/human/sniff}/male_sniff.ogg | Bin .../humanoids/human/whistle}/whistle1.ogg | Bin .../humanoids}/lizard/credits.txt | 0 .../humanoids}/lizard/deathsound.ogg | Bin .../humanoids}/lizard/lizard_laugh1.ogg | Bin .../humanoids}/lizard/lizard_scream_1.ogg | Bin .../humanoids}/lizard/lizard_scream_2.ogg | Bin .../humanoids}/lizard/lizard_scream_3.ogg | Bin .../{voice => mobs/humanoids}/moth/credit.txt | 0 .../humanoids}/moth/moth_death.ogg | Bin .../humanoids}/moth/moth_flutter.ogg | Bin .../humanoids}/moth/moth_laugh1.ogg | Bin .../humanoids}/moth/scream_moth.ogg | Bin .../plasmaman/plasmeme_scream_1.ogg | Bin .../plasmaman/plasmeme_scream_2.ogg | Bin .../plasmaman/plasmeme_scream_3.ogg | Bin .../non-humanoids/alien}/alien_eat.ogg | Bin .../non-humanoids/alien}/alien_explode.ogg | Bin .../non-humanoids/alien}/alien_organ_cut.ogg | Bin .../non-humanoids/alien}/alien_york.ogg | Bin .../non-humanoids}/attribution.txt | 0 .../non-humanoids/bee}/bee.ogg | Bin .../non-humanoids/bee}/bee_swarm.ogg | Bin .../beepsky}/beepskyspinsabre.ogg | Bin .../non-humanoids}/beepsky/creep.ogg | Bin .../non-humanoids}/beepsky/criminal.ogg | Bin .../non-humanoids}/beepsky/freeze.ogg | Bin .../non-humanoids}/beepsky/god.ogg | Bin .../non-humanoids}/beepsky/iamthelaw.ogg | Bin .../non-humanoids}/beepsky/insult.ogg | Bin .../non-humanoids}/beepsky/justice.ogg | Bin .../non-humanoids}/beepsky/radio.ogg | Bin .../non-humanoids}/beepsky/secureday.ogg | Bin .../non-humanoids}/bileworm/bileworm_spit.ogg | Bin .../non-humanoids/brimdemon}/brimdemon.ogg | Bin .../brimdemon}/brimdemon_crush.ogg | Bin .../non-humanoids/chicken}/bagawk.ogg | Bin .../non-humanoids/chicken}/chick_peep.ogg | Bin .../non-humanoids/chicken}/clucks.ogg | Bin .../non-humanoids}/clown/clownana_rustle.ogg | Bin .../non-humanoids}/clown/hehe.ogg | Bin .../non-humanoids}/clown/hohoho.ogg | Bin .../non-humanoids/cow}/cow.ogg | Bin .../non-humanoids/crab}/claw_click.ogg | Bin .../mobs/non-humanoids/cyborg/attribution.txt | 1 + .../non-humanoids/cyborg}/borg_deathsound.ogg | Bin .../non-humanoids/cyborg}/harmalarm.ogg | Bin .../non-humanoids/cyborg}/liveagain.ogg | Bin .../non-humanoids}/cyborg/wash1.ogg | Bin .../non-humanoids}/cyborg/wash2.ogg | Bin .../non-humanoids}/cyborg/wash_end.ogg | Bin .../non-humanoids}/cyborg/wash_start.ogg | Bin .../non-humanoids}/dog/growl1.ogg | Bin .../non-humanoids}/dog/growl2.ogg | Bin .../non-humanoids/ed209}/ed209_20sec.ogg | Bin .../non-humanoids/ed209}/edplaceholder.ogg | Bin .../non-humanoids}/firebot/candle_tip.ogg | Bin .../non-humanoids}/firebot/detected.ogg | Bin .../firebot/electric_fire_tip.ogg | Bin .../non-humanoids}/firebot/extinguishing.ogg | Bin .../non-humanoids}/firebot/gasoline_tip.ogg | Bin .../non-humanoids}/firebot/keepitcool.ogg | Bin .../non-humanoids}/firebot/nofires.ogg | Bin .../non-humanoids}/firebot/onlyyou.ogg | Bin .../non-humanoids}/firebot/stopdropnroll.ogg | Bin .../non-humanoids}/firebot/tempnominal.ogg | Bin .../non-humanoids}/fish/attritbution.txt | 0 .../non-humanoids}/fish/fish_drop1.ogg | Bin .../non-humanoids}/fish/fish_pickup1.ogg | Bin .../non-humanoids}/fish/fish_pickup2.ogg | Bin .../non-humanoids}/fish/fish_slap1.ogg | Bin .../non-humanoids}/fish/fish_slap2.ogg | Bin .../non-humanoids/floorbot}/whistlereset.ogg | Bin .../non-humanoids/frog}/huuu.ogg | Bin .../non-humanoids/frog}/reee.ogg | Bin .../non-humanoids/goose}/goose1.ogg | Bin .../non-humanoids/goose}/goose2.ogg | Bin .../non-humanoids/goose}/goose3.ogg | Bin .../non-humanoids/goose}/goose4.ogg | Bin .../non-humanoids/gorilla}/gorilla.ogg | Bin .../non-humanoids/hiss}/hiss1.ogg | Bin .../non-humanoids/hiss}/hiss2.ogg | Bin .../non-humanoids/hiss}/hiss3.ogg | Bin .../non-humanoids/hiss}/hiss4.ogg | Bin .../non-humanoids/hiss}/hiss5.ogg | Bin .../non-humanoids/hiss}/hiss6.ogg | Bin .../non-humanoids/hiss}/lowHiss1.ogg | Bin .../non-humanoids/hiss}/lowHiss2.ogg | Bin .../non-humanoids/hiss}/lowHiss3.ogg | Bin .../non-humanoids/hiss}/lowHiss4.ogg | Bin .../honkbot}/honkbot_evil_laugh.ogg | Bin .../hygienebot/cleanandtidy.ogg | Bin .../non-humanoids}/hygienebot/cutarteries.ogg | Bin .../non-humanoids}/hygienebot/degenerate.ogg | Bin .../non-humanoids}/hygienebot/dragyouout.ogg | Bin .../non-humanoids}/hygienebot/finally.ogg | Bin .../hygienebot/foulsmelling.ogg | Bin .../non-humanoids}/hygienebot/greencloud.ogg | Bin .../non-humanoids}/hygienebot/letmeclean.ogg | Bin .../non-humanoids}/hygienebot/stoprunning.ogg | Bin .../non-humanoids}/hygienebot/thankgod.ogg | Bin .../non-humanoids}/hygienebot/troglodyte.ogg | Bin .../hygienebot/unhygienicclient.ogg | Bin .../non-humanoids/insect}/chitter.ogg | Bin .../non-humanoids/legion}/legion_spawn.ogg | Bin .../non-humanoids}/medbot/apple.ogg | Bin .../non-humanoids}/medbot/catch.ogg | Bin .../non-humanoids}/medbot/close.ogg | Bin .../non-humanoids}/medbot/coming.ogg | Bin .../non-humanoids}/medbot/delicious.ogg | Bin .../non-humanoids}/medbot/dont_like.ogg | Bin .../non-humanoids}/medbot/feelbetter.ogg | Bin .../non-humanoids}/medbot/flies.ogg | Bin .../non-humanoids}/medbot/forgive.ogg | Bin .../non-humanoids}/medbot/fuck_you.ogg | Bin .../non-humanoids}/medbot/help.ogg | Bin .../non-humanoids}/medbot/hey_wait.ogg | Bin .../non-humanoids}/medbot/i_am_chicken.ogg | Bin .../non-humanoids}/medbot/i_require_asst.ogg | Bin .../non-humanoids}/medbot/i_trusted_you.ogg | Bin .../non-humanoids}/medbot/im_different.ogg | Bin .../non-humanoids}/medbot/injured.ogg | Bin .../non-humanoids}/medbot/insult.ogg | Bin .../non-humanoids}/medbot/is_this_the_end.ogg | Bin .../non-humanoids}/medbot/live.ogg | Bin .../non-humanoids}/medbot/lost.ogg | Bin .../non-humanoids}/medbot/no.ogg | Bin .../non-humanoids}/medbot/nooo.ogg | Bin .../non-humanoids}/medbot/oh_fuck.ogg | Bin .../non-humanoids}/medbot/pain_is_real.ogg | Bin .../non-humanoids}/medbot/patchedup.ogg | Bin .../non-humanoids}/medbot/please_dont.ogg | Bin .../medbot/please_im_scared.ogg | Bin .../medbot/please_put_me_back.ogg | Bin .../non-humanoids}/medbot/radar.ogg | Bin .../non-humanoids}/medbot/reported.ogg | Bin .../non-humanoids}/medbot/shindemashou.ogg | Bin .../non-humanoids}/medbot/surgeon.ogg | Bin .../non-humanoids}/medbot/thank_you.ogg | Bin .../non-humanoids}/medbot/turn_off.ogg | Bin .../non-humanoids}/medbot/why.ogg | Bin .../non-humanoids}/medbot/youre_good.ogg | Bin .../monkey/monkey_screech_1.ogg | Bin .../monkey/monkey_screech_2.ogg | Bin .../monkey/monkey_screech_3.ogg | Bin .../monkey/monkey_screech_4.ogg | Bin .../monkey/monkey_screech_5.ogg | Bin .../monkey/monkey_screech_6.ogg | Bin .../monkey/monkey_screech_7.ogg | Bin .../non-humanoids/mook}/mook_death.ogg | Bin .../non-humanoids/mook}/mook_leap_yell.ogg | Bin .../non-humanoids/mouse}/mousesqueek.ogg | Bin .../non-humanoids/orbie}/orbie_level_up.ogg | Bin .../orbie}/orbie_notification_sound.ogg | Bin .../non-humanoids/orbie}/orbie_send_out.ogg | Bin .../orbie}/orbie_trick_learned.ogg | Bin .../non-humanoids/pig}/pig1.ogg | Bin .../non-humanoids/pig}/pig2.ogg | Bin .../non-humanoids}/pony/clown_gallup.ogg | Bin .../non-humanoids}/pony/snort.ogg | Bin .../non-humanoids}/pony/whinny01.ogg | Bin .../non-humanoids}/pony/whinny02.ogg | Bin .../non-humanoids}/pony/whinny03.ogg | Bin .../non-humanoids/raptor}/raptor_1.ogg | Bin .../non-humanoids/raptor}/raptor_2.ogg | Bin .../non-humanoids/raptor}/raptor_3.ogg | Bin .../non-humanoids/raptor}/raptor_4.ogg | Bin .../non-humanoids/raptor}/raptor_5.ogg | Bin .../non-humanoids/sheep}/sheep1.ogg | Bin .../non-humanoids/sheep}/sheep2.ogg | Bin .../non-humanoids/sheep}/sheep3.ogg | Bin .../non-humanoids/snake}/snake_hissing1.ogg | Bin .../non-humanoids/snake}/snake_hissing2.ogg | Bin .../space_dragon}/space_dragon_roar.ogg | Bin .../non-humanoids}/tourist/tourist_talk.ogg | Bin .../tourist/tourist_talk_british.ogg | Bin .../tourist/tourist_talk_french.ogg | Bin .../tourist/tourist_talk_japanese1.ogg | Bin .../tourist/tourist_talk_japanese2.ogg | Bin .../tourist/tourist_talk_mexican.ogg | Bin .../tourist/tourist_talk_moth.ogg | Bin .../venus_trap}/venus_trap_death.ogg | Bin .../venus_trap}/venus_trap_hit.ogg | Bin .../venus_trap}/venus_trap_hurt.ogg | Bin sound/{ambience => music}/antag/abductee.ogg | Bin sound/music/antag/attribution.txt | 11 + sound/{ambience => music}/antag/ayylien.ogg | Bin sound/{ambience => music}/antag/blobalert.ogg | Bin .../antag/bloodcult/bloodcult_eyes.ogg | Bin .../antag/bloodcult/bloodcult_gain.ogg | Bin .../antag/bloodcult/bloodcult_halos.ogg | Bin .../antag/bloodcult/bloodcult_scribe.ogg | Bin .../antag/bloodcult}/ghost_whisper.ogg | Bin .../antag/bloodcult}/ghosty_wind.ogg | Bin .../antag/bloodcult}/narsie_rises.ogg | Bin .../{ambience => music}/antag/brainwashed.ogg | Bin .../antag/clockcultalr.ogg | Bin .../antag}/contractstartup.ogg | Bin .../{ambience => music}/antag/creepalert.ogg | Bin .../antag/heretic}/VoidsEmbrace.ogg | Bin .../antag/heretic/ascend_ash.ogg | Bin .../antag/heretic/ascend_blade.ogg | Bin .../antag/heretic/ascend_cosmic.ogg | Bin .../antag/heretic/ascend_flesh.ogg | Bin .../antag/heretic/ascend_knock.ogg | Bin .../antag/heretic/ascend_moon.ogg | Bin .../antag/heretic/ascend_rust.ogg | Bin .../antag/heretic/ascend_void.ogg | Bin sound/music/antag/heretic/attribution.txt | 3 + .../antag/heretic/heretic_gain.ogg | Bin .../antag/heretic/heretic_gain_intense.ogg | Bin .../antag/heretic/heretic_sacrifice.ogg | Bin .../{ambience => music}/antag/hypnotized.ogg | Bin .../{ambience => music}/antag/ling_alert.ogg | Bin sound/{ambience => music}/antag/malf.ogg | Bin sound/{ambience => music}/antag/monkey.ogg | Bin .../antag}/ninja_greeting.ogg | Bin sound/{ambience => music}/antag/ops.ogg | Bin .../{ambience => music}/antag/ragesmages.ogg | Bin .../antag/revolutionary_tide.ogg | Bin sound/{ambience => music}/antag/spy.ogg | Bin .../antag/thatshowfamiliesworks.ogg | Bin .../antag}/traitor/final_objective.ogg | Bin .../antag}/traitor/objective_failed.ogg | Bin .../antag}/traitor/objective_success.ogg | Bin .../antag}/traitor/objective_taken.ogg | Bin .../antag/traitor}/tatoralert.ogg | Bin sound/{lavaland => music/boss}/bdm_boss.ogg | Bin sound/{lavaland => music/boss}/hiero_boss.ogg | Bin .../music/elevator/robocop-short.ogg | Bin .../{ambience => music/lobby_music}/clown.ogg | Bin sound/music/lobby_music/license.txt | 4 + .../lobby_music}/title0.ogg | Bin .../lobby_music}/title1.mod | Bin .../lobby_music}/title2.ogg | Bin .../lobby_music}/title3.ogg | Bin .../music/sisyphus/sisyphus.ogg | Bin sound/runtime/complionator/attribution.txt | 1 + sound/{ => vehicles}/mecha/critdestr.ogg | Bin sound/{ => vehicles}/mecha/hydraulic.ogg | Bin sound/{ => vehicles}/mecha/imag_enh.ogg | Bin .../mecha/mech_blade_attack.ogg | Bin .../mecha/mech_blade_break_wall.ogg | Bin .../{ => vehicles}/mecha/mech_blade_safty.ogg | Bin .../mecha/mech_charge_attack.ogg | Bin .../mecha/mech_shield_deflect.ogg | Bin .../{ => vehicles}/mecha/mech_shield_drop.ogg | Bin .../mecha/mech_shield_raise.ogg | Bin .../mecha/mech_stealth_attack.ogg | Bin .../mecha/mech_stealth_effect.ogg | Bin .../mecha/mech_stealth_pre_attack.ogg | Bin sound/{ => vehicles}/mecha/mechmove01.ogg | Bin sound/{ => vehicles}/mecha/mechmove03.ogg | Bin sound/{ => vehicles}/mecha/mechmove04.ogg | Bin sound/{ => vehicles}/mecha/mechstep.ogg | Bin sound/{ => vehicles}/mecha/mechturn.ogg | Bin sound/{ => vehicles}/mecha/nominal.ogg | Bin .../{ => vehicles}/mecha/powerloader_step.ogg | Bin .../mecha/powerloader_turn2.ogg | Bin .../{ => vehicles}/mecha/skyfall_power_up.ogg | Bin sound/{ => vehicles}/mecha/weapdestr.ogg | Bin sound/voice/attribution.txt | 12 - strings/round_start_sounds.txt | 8 +- 3639 files changed, 5089 insertions(+), 5093 deletions(-) delete mode 100644 sound/ambience/antag/attribution.txt delete mode 100644 sound/ambience/antag/heretic/attribution.txt create mode 100644 sound/ambience/aurora_caelus/attribution.txt rename sound/ambience/{ => aurora_caelus}/aurora_caelus.ogg (100%) rename sound/ambience/{ => aurora_caelus}/aurora_caelus_short.ogg (100%) rename sound/ambience/{ => beach}/seag1.ogg (100%) rename sound/ambience/{ => beach}/seag2.ogg (100%) rename sound/ambience/{ => beach}/seag3.ogg (100%) rename sound/ambience/{ => beach}/shore.ogg (100%) rename sound/{misc => ambience/earth_rumble}/earth_rumble.ogg (100%) rename sound/{misc => ambience/earth_rumble}/earth_rumble_distant1.ogg (100%) rename sound/{misc => ambience/earth_rumble}/earth_rumble_distant2.ogg (100%) rename sound/{misc => ambience/earth_rumble}/earth_rumble_distant3.ogg (100%) rename sound/{misc => ambience/earth_rumble}/earth_rumble_distant4.ogg (100%) rename sound/ambience/{ => engineering}/ambiatmos.ogg (100%) rename sound/ambience/{ => engineering}/ambiatmos2.ogg (100%) rename sound/ambience/{ => engineering}/ambisin1.ogg (100%) rename sound/ambience/{ => engineering}/ambisin2.ogg (100%) rename sound/ambience/{ => engineering}/ambisin3.ogg (100%) rename sound/ambience/{ => engineering}/ambisin4.ogg (100%) rename sound/ambience/{ => engineering}/ambitech.ogg (100%) rename sound/ambience/{ => engineering}/ambitech2.ogg (100%) rename sound/ambience/{ => engineering}/ambitech3.ogg (100%) rename sound/ambience/{ => general}/ambigen1.ogg (100%) rename sound/ambience/{ => general}/ambigen10.ogg (100%) rename sound/ambience/{ => general}/ambigen11.ogg (100%) rename sound/ambience/{ => general}/ambigen12.ogg (100%) rename sound/ambience/{ => general}/ambigen13.ogg (100%) rename sound/ambience/{ => general}/ambigen14.ogg (100%) rename sound/ambience/{ => general}/ambigen2.ogg (100%) rename sound/ambience/{ => general}/ambigen3.ogg (100%) rename sound/ambience/{ => general}/ambigen4.ogg (100%) rename sound/ambience/{ => general}/ambigen5.ogg (100%) rename sound/ambience/{ => general}/ambigen6.ogg (100%) rename sound/ambience/{ => general}/ambigen7.ogg (100%) rename sound/ambience/{ => general}/ambigen8.ogg (100%) rename sound/ambience/{ => general}/ambigen9.ogg (100%) rename sound/ambience/{ => general}/shipambience.ogg (100%) rename sound/ambience/{ => holy}/ambicha1.ogg (100%) rename sound/ambience/{ => holy}/ambicha2.ogg (100%) rename sound/ambience/{ => holy}/ambicha3.ogg (100%) rename sound/ambience/{ => holy}/ambicha4.ogg (100%) rename sound/ambience/{ => holy}/ambiholy.ogg (100%) rename sound/ambience/{ => holy}/ambiholy2.ogg (100%) rename sound/ambience/{ => holy}/ambiholy3.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicemelody1.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicemelody2.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicemelody3.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicemelody4.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicesting1.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicesting2.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicesting3.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicesting4.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicesting5.ogg (100%) rename sound/ambience/{ => icemoon}/ambiicetheme.ogg (100%) rename sound/ambience/{ => lavaland}/ambicave.ogg (100%) rename sound/ambience/{ => lavaland}/ambilava1.ogg (100%) rename sound/ambience/{ => lavaland}/ambilava2.ogg (100%) rename sound/ambience/{ => lavaland}/ambilava3.ogg (100%) rename sound/ambience/{ => lavaland}/magma.ogg (100%) delete mode 100644 sound/ambience/license.txt rename sound/ambience/{ => maintenance}/ambimaint.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint1.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint10.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint11.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint12.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint2.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint3.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint4.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint5.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint6.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint7.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint8.ogg (100%) rename sound/ambience/{ => maintenance}/ambimaint9.ogg (100%) create mode 100644 sound/ambience/maintenance/attribution.txt rename sound/ambience/{ => maintenance}/maintambience.ogg (100%) rename sound/ambience/{ => maintenance}/source_corridor2.ogg (100%) rename sound/ambience/{ => medical}/ambimo1.ogg (100%) rename sound/ambience/{ => medical}/ambimo2.ogg (100%) rename sound/ambience/{ => medical}/ambinice.ogg (100%) rename sound/ambience/{ => medical}/ambiviro.ogg (100%) rename sound/ambience/{ => medical}/ambiviro1.ogg (100%) rename sound/ambience/{ => medical}/ambiviro2.ogg (100%) rename sound/ambience/{ => misc}/ambiatm1.ogg (100%) rename sound/ambience/{ => misc}/ambidanger.ogg (100%) rename sound/ambience/{ => misc}/ambidanger2.ogg (100%) rename sound/ambience/{ => misc}/ambifailure.ogg (100%) rename sound/ambience/{ => misc}/ambimalf.ogg (100%) rename sound/ambience/{ => misc}/ambimystery.ogg (100%) rename sound/ambience/{ => misc}/ambiodd.ogg (100%) rename sound/ambience/{ => misc}/ambireebe1.ogg (100%) rename sound/ambience/{ => misc}/ambireebe2.ogg (100%) rename sound/ambience/{ => misc}/ambireebe3.ogg (100%) rename sound/ambience/{ => misc}/ambivapor1.ogg (100%) rename sound/ambience/{ => misc}/cavesound3.ogg (100%) rename sound/ambience/{ => misc}/signal.ogg (100%) rename sound/ambience/{ => misc}/source_holehit3.ogg (100%) rename sound/ambience/{ => misc}/ticking_clock.ogg (100%) rename sound/ambience/{ => ruin}/ambimine.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin2.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin3.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin4.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin5.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin6.ogg (100%) rename sound/ambience/{ => ruin}/ambiruin7.ogg (100%) rename sound/ambience/{ => ruin}/servicebell.ogg (100%) rename sound/ambience/{ => security}/ambidet1.ogg (100%) rename sound/ambience/{ => security}/ambidet2.ogg (100%) create mode 100644 sound/ambience/security/attribution.txt rename sound/ambience/{ => space}/ambispace.ogg (100%) rename sound/ambience/{ => space}/ambispace2.ogg (100%) rename sound/ambience/{ => space}/ambispace3.ogg (100%) rename sound/ambience/{ => space}/ambispace4.ogg (100%) rename sound/ambience/{ => space}/ambispace5.ogg (100%) rename sound/ambience/{ => space}/ambispace6.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/active_end.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/active_mid1.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/active_mid2.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/active_mid3.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/active_start.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/weak_end.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/weak_mid1.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/weak_mid2.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/weak_mid3.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/inside/weak_start.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/active_end.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/active_mid1.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/active_mid2.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/active_mid3.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/active_start.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/weak_end.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/weak_mid1.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/weak_mid2.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/weak_mid3.ogg (100%) rename sound/{ => ambience}/weather/ashstorm/outside/weak_start.ogg (100%) rename sound/{voice => announcer}/ApproachingTG.ogg (100%) rename sound/{misc => announcer/alarm}/airraid.ogg (100%) create mode 100644 sound/announcer/alarm/attribution.txt rename sound/{misc => announcer/alarm}/bloblarm.ogg (100%) rename sound/{misc => announcer/announcement}/announce.ogg (100%) rename sound/{misc => announcer/announcement}/announce_dig.ogg (100%) rename sound/{misc => announcer/announcement}/announce_syndi.ogg (100%) rename sound/{ai => announcer}/default/aimalf.ogg (100%) rename sound/{ai => announcer}/default/aliens.ogg (100%) rename sound/{ai => announcer}/default/animes.ogg (100%) rename sound/{ai => announcer}/default/attention.ogg (100%) rename sound/{ai => announcer}/default/commandreport.ogg (100%) rename sound/{ai => announcer}/default/granomalies.ogg (100%) rename sound/{ai => announcer}/default/intercept.ogg (100%) rename sound/{ai => announcer}/default/ionstorm.ogg (100%) rename sound/{ai => announcer}/default/meteors.ogg (100%) rename sound/{ai => announcer}/default/outbreak5.ogg (100%) rename sound/{ai => announcer}/default/outbreak7.ogg (100%) rename sound/{ai => announcer}/default/poweroff.ogg (100%) rename sound/{ai => announcer}/default/poweron.ogg (100%) rename sound/{ai => announcer}/default/radiation.ogg (100%) rename sound/{ai => announcer}/default/shuttlecalled.ogg (100%) rename sound/{ai => announcer}/default/shuttledock.ogg (100%) rename sound/{ai => announcer}/default/shuttlerecalled.ogg (100%) rename sound/{ai => announcer}/default/spanomalies.ogg (100%) rename sound/{ai => announcer}/default/welcome.ogg (100%) rename sound/{ai => announcer}/intern/alerts/1.ogg (100%) rename sound/{ai => announcer}/intern/alerts/10.ogg (100%) rename sound/{ai => announcer}/intern/alerts/11.ogg (100%) rename sound/{ai => announcer}/intern/alerts/12.ogg (100%) rename sound/{ai => announcer}/intern/alerts/13.ogg (100%) rename sound/{ai => announcer}/intern/alerts/14.ogg (100%) rename sound/{ai => announcer}/intern/alerts/2.ogg (100%) rename sound/{ai => announcer}/intern/alerts/3.ogg (100%) rename sound/{ai => announcer}/intern/alerts/4.ogg (100%) rename sound/{ai => announcer}/intern/alerts/5.ogg (100%) rename sound/{ai => announcer}/intern/alerts/6.ogg (100%) rename sound/{ai => announcer}/intern/alerts/7.ogg (100%) rename sound/{ai => announcer}/intern/alerts/8.ogg (100%) rename sound/{ai => announcer}/intern/alerts/9.ogg (100%) rename sound/{ai => announcer}/intern/aliens.ogg (100%) rename sound/{ai => announcer}/intern/animes.ogg (100%) rename sound/{ai => announcer}/intern/commandreport/1.ogg (100%) rename sound/{ai => announcer}/intern/commandreport/2.ogg (100%) rename sound/{ai => announcer}/intern/commandreport/3.ogg (100%) rename sound/{ai => announcer}/intern/granomalies.ogg (100%) rename sound/{ai => announcer}/intern/intercept.ogg (100%) rename sound/{ai => announcer}/intern/ionstorm.ogg (100%) rename sound/{ai => announcer}/intern/meteors.ogg (100%) rename sound/{ai => announcer}/intern/outbreak5.ogg (100%) rename sound/{ai => announcer}/intern/outbreak7.ogg (100%) rename sound/{ai => announcer}/intern/poweroff.ogg (100%) rename sound/{ai => announcer}/intern/poweron.ogg (100%) rename sound/{ai => announcer}/intern/radiation.ogg (100%) rename sound/{ai => announcer}/intern/shuttlecalled.ogg (100%) rename sound/{ai => announcer}/intern/shuttledock.ogg (100%) rename sound/{ai => announcer}/intern/shuttlerecalled.ogg (100%) rename sound/{ai => announcer}/intern/spanomalies.ogg (100%) rename sound/{ai => announcer}/intern/welcome/1.ogg (100%) rename sound/{ai => announcer}/intern/welcome/2.ogg (100%) rename sound/{ai => announcer}/intern/welcome/3.ogg (100%) rename sound/{ai => announcer}/intern/welcome/4.ogg (100%) rename sound/{ai => announcer}/intern/welcome/5.ogg (100%) rename sound/{ai => announcer}/intern/welcome/6.ogg (100%) rename sound/{ai => announcer}/medbot/aliens.ogg (100%) rename sound/{ai => announcer}/medbot/animes.ogg (100%) rename sound/{ai => announcer}/medbot/attention.ogg (100%) rename sound/{ai => announcer}/medbot/commandreport.ogg (100%) rename sound/{ai => announcer}/medbot/granomalies.ogg (100%) rename sound/{ai => announcer}/medbot/intercept.ogg (100%) rename sound/{ai => announcer}/medbot/ionstorm.ogg (100%) rename sound/{ai => announcer}/medbot/meteors.ogg (100%) rename sound/{ai => announcer}/medbot/newAI.ogg (100%) rename sound/{ai => announcer}/medbot/outbreak5.ogg (100%) rename sound/{ai => announcer}/medbot/outbreak7.ogg (100%) rename sound/{ai => announcer}/medbot/poweroff.ogg (100%) rename sound/{ai => announcer}/medbot/poweron.ogg (100%) rename sound/{ai => announcer}/medbot/radiation.ogg (100%) rename sound/{ai => announcer}/medbot/shuttlecalled.ogg (100%) rename sound/{ai => announcer}/medbot/shuttledock.ogg (100%) rename sound/{ai => announcer}/medbot/shuttlerecalled.ogg (100%) rename sound/{ai => announcer}/medbot/spanomalies.ogg (100%) rename sound/{ai => announcer}/medbot/welcome.ogg (100%) rename sound/{misc => announcer/notice}/notice1.ogg (100%) rename sound/{misc => announcer/notice}/notice2.ogg (100%) rename sound/{misc => announcer/notice}/notice3.ogg (100%) rename sound/{ => announcer}/vox_fem/,.ogg (100%) rename sound/{ => announcer}/vox_fem/..ogg (100%) rename sound/{ => announcer}/vox_fem/a.ogg (100%) rename sound/{ => announcer}/vox_fem/abduction.ogg (100%) rename sound/{ => announcer}/vox_fem/abortions.ogg (100%) rename sound/{ => announcer}/vox_fem/above.ogg (100%) rename sound/{ => announcer}/vox_fem/absorb.ogg (100%) rename sound/{ => announcer}/vox_fem/absorbed.ogg (100%) rename sound/{ => announcer}/vox_fem/absorbing.ogg (100%) rename sound/{ => announcer}/vox_fem/abstain.ogg (100%) rename sound/{ => announcer}/vox_fem/accelerating.ogg (100%) rename sound/{ => announcer}/vox_fem/accelerator.ogg (100%) rename sound/{ => announcer}/vox_fem/accepted.ogg (100%) rename sound/{ => announcer}/vox_fem/access.ogg (100%) rename sound/{ => announcer}/vox_fem/acknowledge.ogg (100%) rename sound/{ => announcer}/vox_fem/acknowledged.ogg (100%) rename sound/{ => announcer}/vox_fem/acquired.ogg (100%) rename sound/{ => announcer}/vox_fem/acquisition.ogg (100%) rename sound/{ => announcer}/vox_fem/across.ogg (100%) rename sound/{ => announcer}/vox_fem/activate.ogg (100%) rename sound/{ => announcer}/vox_fem/activated.ogg (100%) rename sound/{ => announcer}/vox_fem/activating.ogg (100%) rename sound/{ => announcer}/vox_fem/activation.ogg (100%) rename sound/{ => announcer}/vox_fem/active.ogg (100%) rename sound/{ => announcer}/vox_fem/activity.ogg (100%) rename sound/{ => announcer}/vox_fem/adios.ogg (100%) rename sound/{ => announcer}/vox_fem/administration.ogg (100%) rename sound/{ => announcer}/vox_fem/advanced.ogg (100%) rename sound/{ => announcer}/vox_fem/advised.ogg (100%) rename sound/{ => announcer}/vox_fem/affect.ogg (100%) rename sound/{ => announcer}/vox_fem/affected.ogg (100%) rename sound/{ => announcer}/vox_fem/affecting.ogg (100%) rename sound/{ => announcer}/vox_fem/aft.ogg (100%) rename sound/{ => announcer}/vox_fem/after.ogg (100%) rename sound/{ => announcer}/vox_fem/agent.ogg (100%) rename sound/{ => announcer}/vox_fem/ai.ogg (100%) rename sound/{ => announcer}/vox_fem/air.ogg (100%) rename sound/{ => announcer}/vox_fem/airlock.ogg (100%) rename sound/{ => announcer}/vox_fem/alarm.ogg (100%) rename sound/{ => announcer}/vox_fem/alarmed.ogg (100%) rename sound/{ => announcer}/vox_fem/alarming.ogg (100%) rename sound/{ => announcer}/vox_fem/alcohol.ogg (100%) rename sound/{ => announcer}/vox_fem/alert.ogg (100%) rename sound/{ => announcer}/vox_fem/alerted.ogg (100%) rename sound/{ => announcer}/vox_fem/alerting.ogg (100%) rename sound/{ => announcer}/vox_fem/alien.ogg (100%) rename sound/{ => announcer}/vox_fem/align.ogg (100%) rename sound/{ => announcer}/vox_fem/aligned.ogg (100%) rename sound/{ => announcer}/vox_fem/all.ogg (100%) rename sound/{ => announcer}/vox_fem/allow.ogg (100%) rename sound/{ => announcer}/vox_fem/alongside.ogg (100%) rename sound/{ => announcer}/vox_fem/alpha.ogg (100%) rename sound/{ => announcer}/vox_fem/also.ogg (100%) rename sound/{ => announcer}/vox_fem/am.ogg (100%) rename sound/{ => announcer}/vox_fem/amigo.ogg (100%) rename sound/{ => announcer}/vox_fem/ammunition.ogg (100%) rename sound/{ => announcer}/vox_fem/amount.ogg (100%) rename sound/{ => announcer}/vox_fem/an.ogg (100%) rename sound/{ => announcer}/vox_fem/and.ogg (100%) rename sound/{ => announcer}/vox_fem/animal.ogg (100%) rename sound/{ => announcer}/vox_fem/annihilate.ogg (100%) rename sound/{ => announcer}/vox_fem/annihilated.ogg (100%) rename sound/{ => announcer}/vox_fem/annihilating.ogg (100%) rename sound/{ => announcer}/vox_fem/annihilation.ogg (100%) rename sound/{ => announcer}/vox_fem/announcement.ogg (100%) rename sound/{ => announcer}/vox_fem/anomalous.ogg (100%) rename sound/{ => announcer}/vox_fem/answer.ogg (100%) rename sound/{ => announcer}/vox_fem/antenna.ogg (100%) rename sound/{ => announcer}/vox_fem/anti-noblium.ogg (100%) rename sound/{ => announcer}/vox_fem/any.ogg (100%) rename sound/{ => announcer}/vox_fem/apc.ogg (100%) rename sound/{ => announcer}/vox_fem/apprehend.ogg (100%) rename sound/{ => announcer}/vox_fem/approach.ogg (100%) rename sound/{ => announcer}/vox_fem/arc.ogg (100%) rename sound/{ => announcer}/vox_fem/arcs.ogg (100%) rename sound/{ => announcer}/vox_fem/are.ogg (100%) rename sound/{ => announcer}/vox_fem/area.ogg (100%) rename sound/{ => announcer}/vox_fem/arm.ogg (100%) rename sound/{ => announcer}/vox_fem/armed.ogg (100%) rename sound/{ => announcer}/vox_fem/armor.ogg (100%) rename sound/{ => announcer}/vox_fem/armory.ogg (100%) rename sound/{ => announcer}/vox_fem/around.ogg (100%) rename sound/{ => announcer}/vox_fem/array.ogg (100%) rename sound/{ => announcer}/vox_fem/arrest.ogg (100%) rename sound/{ => announcer}/vox_fem/artillery.ogg (100%) rename sound/{ => announcer}/vox_fem/asimov.ogg (100%) rename sound/{ => announcer}/vox_fem/ask.ogg (100%) rename sound/{ => announcer}/vox_fem/ass.ogg (100%) rename sound/{ => announcer}/vox_fem/asshole.ogg (100%) rename sound/{ => announcer}/vox_fem/assholes.ogg (100%) rename sound/{ => announcer}/vox_fem/assistance.ogg (100%) rename sound/{ => announcer}/vox_fem/assistant.ogg (100%) rename sound/{ => announcer}/vox_fem/at.ogg (100%) rename sound/{ => announcer}/vox_fem/ate.ogg (100%) rename sound/{ => announcer}/vox_fem/atmosphere.ogg (100%) rename sound/{ => announcer}/vox_fem/atmospheric.ogg (100%) rename sound/{ => announcer}/vox_fem/atmospherics.ogg (100%) rename sound/{ => announcer}/vox_fem/atomic.ogg (100%) rename sound/{ => announcer}/vox_fem/attention.ogg (100%) rename sound/{ => announcer}/vox_fem/authentication.ogg (100%) rename sound/{ => announcer}/vox_fem/authorize.ogg (100%) rename sound/{ => announcer}/vox_fem/authorized.ogg (100%) rename sound/{ => announcer}/vox_fem/automatic.ogg (100%) rename sound/{ => announcer}/vox_fem/away.ogg (100%) rename sound/{ => announcer}/vox_fem/awful.ogg (100%) rename sound/{ => announcer}/vox_fem/b.ogg (100%) rename sound/{ => announcer}/vox_fem/back.ogg (100%) rename sound/{ => announcer}/vox_fem/backman.ogg (100%) rename sound/{ => announcer}/vox_fem/bad.ogg (100%) rename sound/{ => announcer}/vox_fem/bag.ogg (100%) rename sound/{ => announcer}/vox_fem/bailey.ogg (100%) rename sound/{ => announcer}/vox_fem/bar.ogg (100%) rename sound/{ => announcer}/vox_fem/barracks.ogg (100%) rename sound/{ => announcer}/vox_fem/bartender.ogg (100%) rename sound/{ => announcer}/vox_fem/base.ogg (100%) rename sound/{ => announcer}/vox_fem/bay.ogg (100%) rename sound/{ => announcer}/vox_fem/be.ogg (100%) rename sound/{ => announcer}/vox_fem/beaker.ogg (100%) rename sound/{ => announcer}/vox_fem/beam.ogg (100%) rename sound/{ => announcer}/vox_fem/been.ogg (100%) rename sound/{ => announcer}/vox_fem/beep.ogg (100%) rename sound/{ => announcer}/vox_fem/before.ogg (100%) rename sound/{ => announcer}/vox_fem/began.ogg (100%) rename sound/{ => announcer}/vox_fem/begin.ogg (100%) rename sound/{ => announcer}/vox_fem/begins.ogg (100%) rename sound/{ => announcer}/vox_fem/below.ogg (100%) rename sound/{ => announcer}/vox_fem/beside.ogg (100%) rename sound/{ => announcer}/vox_fem/beware.ogg (100%) rename sound/{ => announcer}/vox_fem/beyond.ogg (100%) rename sound/{ => announcer}/vox_fem/big.ogg (100%) rename sound/{ => announcer}/vox_fem/billion.ogg (100%) rename sound/{ => announcer}/vox_fem/biohazard.ogg (100%) rename sound/{ => announcer}/vox_fem/biological.ogg (100%) rename sound/{ => announcer}/vox_fem/birdwell.ogg (100%) rename sound/{ => announcer}/vox_fem/bitch.ogg (100%) rename sound/{ => announcer}/vox_fem/bitches.ogg (100%) rename sound/{ => announcer}/vox_fem/bitcoin.ogg (100%) rename sound/{ => announcer}/vox_fem/bitrun.ogg (100%) rename sound/{ => announcer}/vox_fem/bitrunner.ogg (100%) rename sound/{ => announcer}/vox_fem/bitrunning.ogg (100%) rename sound/{ => announcer}/vox_fem/black.ogg (100%) rename sound/{ => announcer}/vox_fem/blast.ogg (100%) rename sound/{ => announcer}/vox_fem/bleed.ogg (100%) rename sound/{ => announcer}/vox_fem/blob.ogg (100%) rename sound/{ => announcer}/vox_fem/blocked.ogg (100%) rename sound/{ => announcer}/vox_fem/blood.ogg (100%) rename sound/{ => announcer}/vox_fem/bloop.ogg (100%) rename sound/{ => announcer}/vox_fem/blue.ogg (100%) rename sound/{ => announcer}/vox_fem/bluespace.ogg (100%) rename sound/{ => announcer}/vox_fem/bomb.ogg (100%) rename sound/{ => announcer}/vox_fem/bone.ogg (100%) rename sound/{ => announcer}/vox_fem/botanist.ogg (100%) rename sound/{ => announcer}/vox_fem/botany.ogg (100%) rename sound/{ => announcer}/vox_fem/bottle.ogg (100%) rename sound/{ => announcer}/vox_fem/bottom.ogg (100%) rename sound/{ => announcer}/vox_fem/bravo.ogg (100%) rename sound/{ => announcer}/vox_fem/breach.ogg (100%) rename sound/{ => announcer}/vox_fem/breached.ogg (100%) rename sound/{ => announcer}/vox_fem/break.ogg (100%) rename sound/{ => announcer}/vox_fem/bridge.ogg (100%) rename sound/{ => announcer}/vox_fem/brig.ogg (100%) rename sound/{ => announcer}/vox_fem/broke.ogg (100%) rename sound/{ => announcer}/vox_fem/broken.ogg (100%) rename sound/{ => announcer}/vox_fem/bump.ogg (100%) rename sound/{ => announcer}/vox_fem/bumped.ogg (100%) rename sound/{ => announcer}/vox_fem/bumps.ogg (100%) rename sound/{ => announcer}/vox_fem/bust.ogg (100%) rename sound/{ => announcer}/vox_fem/but.ogg (100%) rename sound/{ => announcer}/vox_fem/button.ogg (100%) rename sound/{ => announcer}/vox_fem/bypass.ogg (100%) rename sound/{ => announcer}/vox_fem/c.ogg (100%) rename sound/{ => announcer}/vox_fem/cable.ogg (100%) rename sound/{ => announcer}/vox_fem/call.ogg (100%) rename sound/{ => announcer}/vox_fem/called.ogg (100%) rename sound/{ => announcer}/vox_fem/can.ogg (100%) rename sound/{ => announcer}/vox_fem/canal.ogg (100%) rename sound/{ => announcer}/vox_fem/canister.ogg (100%) rename sound/{ => announcer}/vox_fem/cap.ogg (100%) rename sound/{ => announcer}/vox_fem/captain.ogg (100%) rename sound/{ => announcer}/vox_fem/capture.ogg (100%) rename sound/{ => announcer}/vox_fem/carbon.ogg (100%) rename sound/{ => announcer}/vox_fem/cargo.ogg (100%) rename sound/{ => announcer}/vox_fem/cascade.ogg (100%) rename sound/{ => announcer}/vox_fem/cat.ogg (100%) rename sound/{ => announcer}/vox_fem/cause.ogg (100%) rename sound/{ => announcer}/vox_fem/caused.ogg (100%) rename sound/{ => announcer}/vox_fem/causes.ogg (100%) rename sound/{ => announcer}/vox_fem/causing.ogg (100%) rename sound/{ => announcer}/vox_fem/ce.ogg (100%) rename sound/{ => announcer}/vox_fem/cease.ogg (100%) rename sound/{ => announcer}/vox_fem/ceiling.ogg (100%) rename sound/{ => announcer}/vox_fem/celsius.ogg (100%) rename sound/{ => announcer}/vox_fem/centcom.ogg (100%) rename sound/{ => announcer}/vox_fem/center.ogg (100%) rename sound/{ => announcer}/vox_fem/centi.ogg (100%) rename sound/{ => announcer}/vox_fem/central.ogg (100%) rename sound/{ => announcer}/vox_fem/challenge.ogg (100%) rename sound/{ => announcer}/vox_fem/chamber.ogg (100%) rename sound/{ => announcer}/vox_fem/change.ogg (100%) rename sound/{ => announcer}/vox_fem/changed.ogg (100%) rename sound/{ => announcer}/vox_fem/changeling.ogg (100%) rename sound/{ => announcer}/vox_fem/chapel.ogg (100%) rename sound/{ => announcer}/vox_fem/chaplain.ogg (100%) rename sound/{ => announcer}/vox_fem/charge.ogg (100%) rename sound/{ => announcer}/vox_fem/charlie.ogg (100%) rename sound/{ => announcer}/vox_fem/check.ogg (100%) rename sound/{ => announcer}/vox_fem/checkpoint.ogg (100%) rename sound/{ => announcer}/vox_fem/chemical.ogg (100%) rename sound/{ => announcer}/vox_fem/chemist.ogg (100%) rename sound/{ => announcer}/vox_fem/chief.ogg (100%) rename sound/{ => announcer}/vox_fem/christ.ogg (100%) rename sound/{ => announcer}/vox_fem/christmas.ogg (100%) rename sound/{ => announcer}/vox_fem/chuckle.ogg (100%) rename sound/{ => announcer}/vox_fem/circuit.ogg (100%) rename sound/{ => announcer}/vox_fem/cleanup.ogg (100%) rename sound/{ => announcer}/vox_fem/clear.ogg (100%) rename sound/{ => announcer}/vox_fem/clearance.ogg (100%) rename sound/{ => announcer}/vox_fem/clockwork.ogg (100%) rename sound/{ => announcer}/vox_fem/clog.ogg (100%) rename sound/{ => announcer}/vox_fem/close.ogg (100%) rename sound/{ => announcer}/vox_fem/closed.ogg (100%) rename sound/{ => announcer}/vox_fem/closing.ogg (100%) rename sound/{ => announcer}/vox_fem/clothing.ogg (100%) rename sound/{ => announcer}/vox_fem/clown.ogg (100%) rename sound/{ => announcer}/vox_fem/clowning.ogg (100%) rename sound/{ => announcer}/vox_fem/cmo.ogg (100%) rename sound/{ => announcer}/vox_fem/code.ogg (100%) rename sound/{ => announcer}/vox_fem/coded.ogg (100%) rename sound/{ => announcer}/vox_fem/coil.ogg (100%) rename sound/{ => announcer}/vox_fem/coils.ogg (100%) rename sound/{ => announcer}/vox_fem/cold.ogg (100%) rename sound/{ => announcer}/vox_fem/collider.ogg (100%) rename sound/{ => announcer}/vox_fem/combat.ogg (100%) rename sound/{ => announcer}/vox_fem/combatant.ogg (100%) rename sound/{ => announcer}/vox_fem/come.ogg (100%) rename sound/{ => announcer}/vox_fem/command.ogg (100%) rename sound/{ => announcer}/vox_fem/communication.ogg (100%) rename sound/{ => announcer}/vox_fem/complete.ogg (100%) rename sound/{ => announcer}/vox_fem/completed.ogg (100%) rename sound/{ => announcer}/vox_fem/completion.ogg (100%) rename sound/{ => announcer}/vox_fem/complex.ogg (100%) rename sound/{ => announcer}/vox_fem/comply.ogg (100%) rename sound/{ => announcer}/vox_fem/computer.ogg (100%) rename sound/{ => announcer}/vox_fem/condition.ogg (100%) rename sound/{ => announcer}/vox_fem/conditions.ogg (100%) rename sound/{ => announcer}/vox_fem/condom.ogg (100%) rename sound/{ => announcer}/vox_fem/configure.ogg (100%) rename sound/{ => announcer}/vox_fem/configured.ogg (100%) rename sound/{ => announcer}/vox_fem/configuring.ogg (100%) rename sound/{ => announcer}/vox_fem/confirmed.ogg (100%) rename sound/{ => announcer}/vox_fem/connor.ogg (100%) rename sound/{ => announcer}/vox_fem/console.ogg (100%) rename sound/{ => announcer}/vox_fem/console2.ogg (100%) rename sound/{ => announcer}/vox_fem/construct.ogg (100%) rename sound/{ => announcer}/vox_fem/container.ogg (100%) rename sound/{ => announcer}/vox_fem/containment.ogg (100%) rename sound/{ => announcer}/vox_fem/contamination.ogg (100%) rename sound/{ => announcer}/vox_fem/contraband.ogg (100%) rename sound/{ => announcer}/vox_fem/control.ogg (100%) rename sound/{ => announcer}/vox_fem/cook.ogg (100%) rename sound/{ => announcer}/vox_fem/cool.ogg (100%) rename sound/{ => announcer}/vox_fem/coolant.ogg (100%) rename sound/{ => announcer}/vox_fem/cooling.ogg (100%) rename sound/{ => announcer}/vox_fem/coomer.ogg (100%) rename sound/{ => announcer}/vox_fem/core.ogg (100%) rename sound/{ => announcer}/vox_fem/corgi.ogg (100%) rename sound/{ => announcer}/vox_fem/corporation.ogg (100%) rename sound/{ => announcer}/vox_fem/correct.ogg (100%) rename sound/{ => announcer}/vox_fem/corridor.ogg (100%) rename sound/{ => announcer}/vox_fem/corridors.ogg (100%) rename sound/{ => announcer}/vox_fem/could.ogg (100%) rename sound/{ => announcer}/vox_fem/couldnt.ogg (100%) rename sound/{ => announcer}/vox_fem/countdown.ogg (100%) rename sound/{ => announcer}/vox_fem/coward.ogg (100%) rename sound/{ => announcer}/vox_fem/cowards.ogg (100%) rename sound/{ => announcer}/vox_fem/crate.ogg (100%) rename sound/{ => announcer}/vox_fem/create.ogg (100%) rename sound/{ => announcer}/vox_fem/created.ogg (100%) rename sound/{ => announcer}/vox_fem/creating.ogg (100%) rename sound/{ => announcer}/vox_fem/creature.ogg (100%) rename sound/{ => announcer}/vox_fem/crew.ogg (100%) rename sound/{ => announcer}/vox_fem/critical.ogg (100%) rename sound/{ => announcer}/vox_fem/cross.ogg (100%) rename sound/{ => announcer}/vox_fem/cryogenic.ogg (100%) rename sound/{ => announcer}/vox_fem/crystal.ogg (100%) rename sound/{ => announcer}/vox_fem/cult.ogg (100%) rename sound/{ => announcer}/vox_fem/cultist.ogg (100%) rename sound/{ => announcer}/vox_fem/cunt.ogg (100%) rename sound/{ => announcer}/vox_fem/curator.ogg (100%) rename sound/{ => announcer}/vox_fem/cyborg.ogg (100%) rename sound/{ => announcer}/vox_fem/cyborgs.ogg (100%) rename sound/{ => announcer}/vox_fem/d.ogg (100%) rename sound/{ => announcer}/vox_fem/damage.ogg (100%) rename sound/{ => announcer}/vox_fem/damaged.ogg (100%) rename sound/{ => announcer}/vox_fem/danger.ogg (100%) rename sound/{ => announcer}/vox_fem/dangerous.ogg (100%) rename sound/{ => announcer}/vox_fem/day.ogg (100%) rename sound/{ => announcer}/vox_fem/deactivated.ogg (100%) rename sound/{ => announcer}/vox_fem/dead.ogg (100%) rename sound/{ => announcer}/vox_fem/death.ogg (100%) rename sound/{ => announcer}/vox_fem/decompression.ogg (100%) rename sound/{ => announcer}/vox_fem/decontamination.ogg (100%) rename sound/{ => announcer}/vox_fem/deeoo.ogg (100%) rename sound/{ => announcer}/vox_fem/defense.ogg (100%) rename sound/{ => announcer}/vox_fem/degrees.ogg (100%) rename sound/{ => announcer}/vox_fem/delaminating.ogg (100%) rename sound/{ => announcer}/vox_fem/delamination.ogg (100%) rename sound/{ => announcer}/vox_fem/delta.ogg (100%) rename sound/{ => announcer}/vox_fem/demon.ogg (100%) rename sound/{ => announcer}/vox_fem/denied.ogg (100%) rename sound/{ => announcer}/vox_fem/deny.ogg (100%) rename sound/{ => announcer}/vox_fem/departures.ogg (100%) rename sound/{ => announcer}/vox_fem/deploy.ogg (100%) rename sound/{ => announcer}/vox_fem/deployed.ogg (100%) rename sound/{ => announcer}/vox_fem/desire.ogg (100%) rename sound/{ => announcer}/vox_fem/desist.ogg (100%) rename sound/{ => announcer}/vox_fem/destroy.ogg (100%) rename sound/{ => announcer}/vox_fem/destroyed.ogg (100%) rename sound/{ => announcer}/vox_fem/destruction.ogg (100%) rename sound/{ => announcer}/vox_fem/detain.ogg (100%) rename sound/{ => announcer}/vox_fem/detect.ogg (100%) rename sound/{ => announcer}/vox_fem/detected.ogg (100%) rename sound/{ => announcer}/vox_fem/detecting.ogg (100%) rename sound/{ => announcer}/vox_fem/detective.ogg (100%) rename sound/{ => announcer}/vox_fem/detonation.ogg (100%) rename sound/{ => announcer}/vox_fem/device.ogg (100%) rename sound/{ => announcer}/vox_fem/devil.ogg (100%) rename sound/{ => announcer}/vox_fem/did.ogg (100%) rename sound/{ => announcer}/vox_fem/die.ogg (100%) rename sound/{ => announcer}/vox_fem/died.ogg (100%) rename sound/{ => announcer}/vox_fem/different.ogg (100%) rename sound/{ => announcer}/vox_fem/dimensional.ogg (100%) rename sound/{ => announcer}/vox_fem/dioxide.ogg (100%) rename sound/{ => announcer}/vox_fem/direct.ogg (100%) rename sound/{ => announcer}/vox_fem/director.ogg (100%) rename sound/{ => announcer}/vox_fem/dirt.ogg (100%) rename sound/{ => announcer}/vox_fem/disabled.ogg (100%) rename sound/{ => announcer}/vox_fem/disease.ogg (100%) rename sound/{ => announcer}/vox_fem/disengaged.ogg (100%) rename sound/{ => announcer}/vox_fem/dish.ogg (100%) rename sound/{ => announcer}/vox_fem/disk.ogg (100%) rename sound/{ => announcer}/vox_fem/disposal.ogg (100%) rename sound/{ => announcer}/vox_fem/distance.ogg (100%) rename sound/{ => announcer}/vox_fem/distortion.ogg (100%) rename sound/{ => announcer}/vox_fem/do.ogg (100%) rename sound/{ => announcer}/vox_fem/doctor.ogg (100%) rename sound/{ => announcer}/vox_fem/dog.ogg (100%) rename sound/{ => announcer}/vox_fem/dont.ogg (100%) rename sound/{ => announcer}/vox_fem/doomsday.ogg (100%) rename sound/{ => announcer}/vox_fem/doop.ogg (100%) rename sound/{ => announcer}/vox_fem/door.ogg (100%) rename sound/{ => announcer}/vox_fem/dormitory.ogg (100%) rename sound/{ => announcer}/vox_fem/dot.ogg (100%) rename sound/{ => announcer}/vox_fem/double.ogg (100%) rename sound/{ => announcer}/vox_fem/down.ogg (100%) rename sound/{ => announcer}/vox_fem/dress.ogg (100%) rename sound/{ => announcer}/vox_fem/dressed.ogg (100%) rename sound/{ => announcer}/vox_fem/dressing.ogg (100%) rename sound/{ => announcer}/vox_fem/drone.ogg (100%) rename sound/{ => announcer}/vox_fem/dual.ogg (100%) rename sound/{ => announcer}/vox_fem/duct.ogg (100%) rename sound/{ => announcer}/vox_fem/e.ogg (100%) rename sound/{ => announcer}/vox_fem/easily.ogg (100%) rename sound/{ => announcer}/vox_fem/east.ogg (100%) rename sound/{ => announcer}/vox_fem/eat.ogg (100%) rename sound/{ => announcer}/vox_fem/eaten.ogg (100%) rename sound/{ => announcer}/vox_fem/echo.ogg (100%) rename sound/{ => announcer}/vox_fem/ed.ogg (100%) rename sound/{ => announcer}/vox_fem/education.ogg (100%) rename sound/{ => announcer}/vox_fem/effect.ogg (100%) rename sound/{ => announcer}/vox_fem/effects.ogg (100%) rename sound/{ => announcer}/vox_fem/egress.ogg (100%) rename sound/{ => announcer}/vox_fem/eight.ogg (100%) rename sound/{ => announcer}/vox_fem/eighteen.ogg (100%) rename sound/{ => announcer}/vox_fem/eighty.ogg (100%) rename sound/{ => announcer}/vox_fem/electric.ogg (100%) rename sound/{ => announcer}/vox_fem/electrical.ogg (100%) rename sound/{ => announcer}/vox_fem/electromagnetic.ogg (100%) rename sound/{ => announcer}/vox_fem/elevator.ogg (100%) rename sound/{ => announcer}/vox_fem/eleven.ogg (100%) rename sound/{ => announcer}/vox_fem/eliminate.ogg (100%) rename sound/{ => announcer}/vox_fem/emergency.ogg (100%) rename sound/{ => announcer}/vox_fem/emitted.ogg (100%) rename sound/{ => announcer}/vox_fem/emitter.ogg (100%) rename sound/{ => announcer}/vox_fem/emitting.ogg (100%) rename sound/{ => announcer}/vox_fem/enabled.ogg (100%) rename sound/{ => announcer}/vox_fem/end.ogg (100%) rename sound/{ => announcer}/vox_fem/ends.ogg (100%) rename sound/{ => announcer}/vox_fem/energy.ogg (100%) rename sound/{ => announcer}/vox_fem/engage.ogg (100%) rename sound/{ => announcer}/vox_fem/engaged.ogg (100%) rename sound/{ => announcer}/vox_fem/engine.ogg (100%) rename sound/{ => announcer}/vox_fem/engineer.ogg (100%) rename sound/{ => announcer}/vox_fem/engineering.ogg (100%) rename sound/{ => announcer}/vox_fem/enormous.ogg (100%) rename sound/{ => announcer}/vox_fem/enough.ogg (100%) rename sound/{ => announcer}/vox_fem/enter.ogg (100%) rename sound/{ => announcer}/vox_fem/entity.ogg (100%) rename sound/{ => announcer}/vox_fem/entry.ogg (100%) rename sound/{ => announcer}/vox_fem/environment.ogg (100%) rename sound/{ => announcer}/vox_fem/epic.ogg (100%) rename sound/{ => announcer}/vox_fem/equipment.ogg (100%) rename sound/{ => announcer}/vox_fem/error.ogg (100%) rename sound/{ => announcer}/vox_fem/escape.ogg (100%) rename sound/{ => announcer}/vox_fem/ethereal.ogg (100%) rename sound/{ => announcer}/vox_fem/eva.ogg (100%) rename sound/{ => announcer}/vox_fem/evacuate.ogg (100%) rename sound/{ => announcer}/vox_fem/even.ogg (100%) rename sound/{ => announcer}/vox_fem/ever.ogg (100%) rename sound/{ => announcer}/vox_fem/every.ogg (100%) rename sound/{ => announcer}/vox_fem/everybody.ogg (100%) rename sound/{ => announcer}/vox_fem/everyone.ogg (100%) rename sound/{ => announcer}/vox_fem/exchange.ogg (100%) rename sound/{ => announcer}/vox_fem/execute.ogg (100%) rename sound/{ => announcer}/vox_fem/exit.ogg (100%) rename sound/{ => announcer}/vox_fem/expect.ogg (100%) rename sound/{ => announcer}/vox_fem/experiment.ogg (100%) rename sound/{ => announcer}/vox_fem/experimental.ogg (100%) rename sound/{ => announcer}/vox_fem/explode.ogg (100%) rename sound/{ => announcer}/vox_fem/exploded.ogg (100%) rename sound/{ => announcer}/vox_fem/exploding.ogg (100%) rename sound/{ => announcer}/vox_fem/explosion.ogg (100%) rename sound/{ => announcer}/vox_fem/explosive.ogg (100%) rename sound/{ => announcer}/vox_fem/exposure.ogg (100%) rename sound/{ => announcer}/vox_fem/exterminate.ogg (100%) rename sound/{ => announcer}/vox_fem/external.ogg (100%) rename sound/{ => announcer}/vox_fem/extinguish.ogg (100%) rename sound/{ => announcer}/vox_fem/extinguisher.ogg (100%) rename sound/{ => announcer}/vox_fem/extra.ogg (100%) rename sound/{ => announcer}/vox_fem/extreme.ogg (100%) rename sound/{ => announcer}/vox_fem/f.ogg (100%) rename sound/{ => announcer}/vox_fem/facility.ogg (100%) rename sound/{ => announcer}/vox_fem/factory.ogg (100%) rename sound/{ => announcer}/vox_fem/fahrenheit.ogg (100%) rename sound/{ => announcer}/vox_fem/failed.ogg (100%) rename sound/{ => announcer}/vox_fem/failure.ogg (100%) rename sound/{ => announcer}/vox_fem/false.ogg (100%) rename sound/{ => announcer}/vox_fem/farthest.ogg (100%) rename sound/{ => announcer}/vox_fem/fast.ogg (100%) rename sound/{ => announcer}/vox_fem/fauna.ogg (100%) rename sound/{ => announcer}/vox_fem/feature.ogg (100%) rename sound/{ => announcer}/vox_fem/featured.ogg (100%) rename sound/{ => announcer}/vox_fem/features.ogg (100%) rename sound/{ => announcer}/vox_fem/featuring.ogg (100%) rename sound/{ => announcer}/vox_fem/feet.ogg (100%) rename sound/{ => announcer}/vox_fem/felinid.ogg (100%) rename sound/{ => announcer}/vox_fem/few.ogg (100%) rename sound/{ => announcer}/vox_fem/field.ogg (100%) rename sound/{ => announcer}/vox_fem/fifteen.ogg (100%) rename sound/{ => announcer}/vox_fem/fifth.ogg (100%) rename sound/{ => announcer}/vox_fem/fifty.ogg (100%) rename sound/{ => announcer}/vox_fem/filter.ogg (100%) rename sound/{ => announcer}/vox_fem/filters.ogg (100%) rename sound/{ => announcer}/vox_fem/final.ogg (100%) rename sound/{ => announcer}/vox_fem/fine.ogg (100%) rename sound/{ => announcer}/vox_fem/fire.ogg (100%) rename sound/{ => announcer}/vox_fem/first.ogg (100%) rename sound/{ => announcer}/vox_fem/five.ogg (100%) rename sound/{ => announcer}/vox_fem/fix.ogg (100%) rename sound/{ => announcer}/vox_fem/flooding.ogg (100%) rename sound/{ => announcer}/vox_fem/floor.ogg (100%) rename sound/{ => announcer}/vox_fem/flyman.ogg (100%) rename sound/{ => announcer}/vox_fem/fool.ogg (100%) rename sound/{ => announcer}/vox_fem/foolish.ogg (100%) rename sound/{ => announcer}/vox_fem/for.ogg (100%) rename sound/{ => announcer}/vox_fem/forbidden.ogg (100%) rename sound/{ => announcer}/vox_fem/force.ogg (100%) rename sound/{ => announcer}/vox_fem/fore.ogg (100%) rename sound/{ => announcer}/vox_fem/form.ogg (100%) rename sound/{ => announcer}/vox_fem/formed.ogg (100%) rename sound/{ => announcer}/vox_fem/forms.ogg (100%) rename sound/{ => announcer}/vox_fem/forty.ogg (100%) rename sound/{ => announcer}/vox_fem/found.ogg (100%) rename sound/{ => announcer}/vox_fem/four.ogg (100%) rename sound/{ => announcer}/vox_fem/fourteen.ogg (100%) rename sound/{ => announcer}/vox_fem/fourth.ogg (100%) rename sound/{ => announcer}/vox_fem/fourty.ogg (100%) rename sound/{ => announcer}/vox_fem/foxtrot.ogg (100%) rename sound/{ => announcer}/vox_fem/free.ogg (100%) rename sound/{ => announcer}/vox_fem/freeman.ogg (100%) rename sound/{ => announcer}/vox_fem/freeze.ogg (100%) rename sound/{ => announcer}/vox_fem/freezer.ogg (100%) rename sound/{ => announcer}/vox_fem/freezing.ogg (100%) rename sound/{ => announcer}/vox_fem/freon.ogg (100%) rename sound/{ => announcer}/vox_fem/from.ogg (100%) rename sound/{ => announcer}/vox_fem/front.ogg (100%) rename sound/{ => announcer}/vox_fem/froze.ogg (100%) rename sound/{ => announcer}/vox_fem/frozen.ogg (100%) rename sound/{ => announcer}/vox_fem/fuck.ogg (100%) rename sound/{ => announcer}/vox_fem/fucking.ogg (100%) rename sound/{ => announcer}/vox_fem/fucks.ogg (100%) rename sound/{ => announcer}/vox_fem/fuel.ogg (100%) rename sound/{ => announcer}/vox_fem/g.ogg (100%) rename sound/{ => announcer}/vox_fem/gas.ogg (100%) rename sound/{ => announcer}/vox_fem/gases.ogg (100%) rename sound/{ => announcer}/vox_fem/gave.ogg (100%) rename sound/{ => announcer}/vox_fem/gear.ogg (100%) rename sound/{ => announcer}/vox_fem/geared.ogg (100%) rename sound/{ => announcer}/vox_fem/gearing.ogg (100%) rename sound/{ => announcer}/vox_fem/generate.ogg (100%) rename sound/{ => announcer}/vox_fem/generated.ogg (100%) rename sound/{ => announcer}/vox_fem/generating.ogg (100%) rename sound/{ => announcer}/vox_fem/generator.ogg (100%) rename sound/{ => announcer}/vox_fem/geneticist.ogg (100%) rename sound/{ => announcer}/vox_fem/get.ogg (100%) rename sound/{ => announcer}/vox_fem/give.ogg (100%) rename sound/{ => announcer}/vox_fem/given.ogg (100%) rename sound/{ => announcer}/vox_fem/glory.ogg (100%) rename sound/{ => announcer}/vox_fem/go.ogg (100%) rename sound/{ => announcer}/vox_fem/god.ogg (100%) rename sound/{ => announcer}/vox_fem/going.ogg (100%) rename sound/{ => announcer}/vox_fem/golem.ogg (100%) rename sound/{ => announcer}/vox_fem/good.ogg (100%) rename sound/{ => announcer}/vox_fem/goodbye.ogg (100%) rename sound/{ => announcer}/vox_fem/gordon.ogg (100%) rename sound/{ => announcer}/vox_fem/got.ogg (100%) rename sound/{ => announcer}/vox_fem/government.ogg (100%) rename sound/{ => announcer}/vox_fem/granted.ogg (100%) rename sound/{ => announcer}/vox_fem/gravity.ogg (100%) rename sound/{ => announcer}/vox_fem/gray.ogg (100%) rename sound/{ => announcer}/vox_fem/great.ogg (100%) rename sound/{ => announcer}/vox_fem/green.ogg (100%) rename sound/{ => announcer}/vox_fem/grenade.ogg (100%) rename sound/{ => announcer}/vox_fem/guard.ogg (100%) rename sound/{ => announcer}/vox_fem/gulf.ogg (100%) rename sound/{ => announcer}/vox_fem/gun.ogg (100%) rename sound/{ => announcer}/vox_fem/guthrie.ogg (100%) rename sound/{ => announcer}/vox_fem/h.ogg (100%) rename sound/{ => announcer}/vox_fem/hacker.ogg (100%) rename sound/{ => announcer}/vox_fem/hackers.ogg (100%) rename sound/{ => announcer}/vox_fem/had.ogg (100%) rename sound/{ => announcer}/vox_fem/hall.ogg (100%) rename sound/{ => announcer}/vox_fem/hallway.ogg (100%) rename sound/{ => announcer}/vox_fem/halon.ogg (100%) rename sound/{ => announcer}/vox_fem/handling.ogg (100%) rename sound/{ => announcer}/vox_fem/hangar.ogg (100%) rename sound/{ => announcer}/vox_fem/hard.ogg (100%) rename sound/{ => announcer}/vox_fem/hardly.ogg (100%) rename sound/{ => announcer}/vox_fem/harm.ogg (100%) rename sound/{ => announcer}/vox_fem/harmful.ogg (100%) rename sound/{ => announcer}/vox_fem/harness.ogg (100%) rename sound/{ => announcer}/vox_fem/harnessed.ogg (100%) rename sound/{ => announcer}/vox_fem/harnessing.ogg (100%) rename sound/{ => announcer}/vox_fem/has.ogg (100%) rename sound/{ => announcer}/vox_fem/have.ogg (100%) rename sound/{ => announcer}/vox_fem/hazard.ogg (100%) rename sound/{ => announcer}/vox_fem/he.ogg (100%) rename sound/{ => announcer}/vox_fem/head.ogg (100%) rename sound/{ => announcer}/vox_fem/heal.ogg (100%) rename sound/{ => announcer}/vox_fem/healed.ogg (100%) rename sound/{ => announcer}/vox_fem/healing.ogg (100%) rename sound/{ => announcer}/vox_fem/healium.ogg (100%) rename sound/{ => announcer}/vox_fem/health.ogg (100%) rename sound/{ => announcer}/vox_fem/heat.ogg (100%) rename sound/{ => announcer}/vox_fem/heated.ogg (100%) rename sound/{ => announcer}/vox_fem/heating.ogg (100%) rename sound/{ => announcer}/vox_fem/helicopter.ogg (100%) rename sound/{ => announcer}/vox_fem/helium.ogg (100%) rename sound/{ => announcer}/vox_fem/hello.ogg (100%) rename sound/{ => announcer}/vox_fem/help.ogg (100%) rename sound/{ => announcer}/vox_fem/her.ogg (100%) rename sound/{ => announcer}/vox_fem/here.ogg (100%) rename sound/{ => announcer}/vox_fem/heretic.ogg (100%) rename sound/{ => announcer}/vox_fem/hide.ogg (100%) rename sound/{ => announcer}/vox_fem/high.ogg (100%) rename sound/{ => announcer}/vox_fem/highest.ogg (100%) rename sound/{ => announcer}/vox_fem/him.ogg (100%) rename sound/{ => announcer}/vox_fem/hit.ogg (100%) rename sound/{ => announcer}/vox_fem/hole.ogg (100%) rename sound/{ => announcer}/vox_fem/honk.ogg (100%) rename sound/{ => announcer}/vox_fem/hop.ogg (100%) rename sound/{ => announcer}/vox_fem/hos.ogg (100%) rename sound/{ => announcer}/vox_fem/hostile.ogg (100%) rename sound/{ => announcer}/vox_fem/hot.ogg (100%) rename sound/{ => announcer}/vox_fem/hotel.ogg (100%) rename sound/{ => announcer}/vox_fem/hour.ogg (100%) rename sound/{ => announcer}/vox_fem/hours.ogg (100%) rename sound/{ => announcer}/vox_fem/how.ogg (100%) rename sound/{ => announcer}/vox_fem/human.ogg (100%) rename sound/{ => announcer}/vox_fem/humanoid.ogg (100%) rename sound/{ => announcer}/vox_fem/humans.ogg (100%) rename sound/{ => announcer}/vox_fem/hundred.ogg (100%) rename sound/{ => announcer}/vox_fem/hunger.ogg (100%) rename sound/{ => announcer}/vox_fem/hurt.ogg (100%) rename sound/{ => announcer}/vox_fem/hydro.ogg (100%) rename sound/{ => announcer}/vox_fem/hydrogen.ogg (100%) rename sound/{ => announcer}/vox_fem/hydroponics.ogg (100%) rename sound/{ => announcer}/vox_fem/hyper-noblium.ogg (100%) rename sound/{ => announcer}/vox_fem/i.ogg (100%) rename sound/{ => announcer}/vox_fem/ian.ogg (100%) rename sound/{ => announcer}/vox_fem/idiot.ogg (100%) rename sound/{ => announcer}/vox_fem/if.ogg (100%) rename sound/{ => announcer}/vox_fem/if2.ogg (100%) rename sound/{ => announcer}/vox_fem/illegal.ogg (100%) rename sound/{ => announcer}/vox_fem/immediate.ogg (100%) rename sound/{ => announcer}/vox_fem/immediately.ogg (100%) rename sound/{ => announcer}/vox_fem/immortal.ogg (100%) rename sound/{ => announcer}/vox_fem/impossible.ogg (100%) rename sound/{ => announcer}/vox_fem/in.ogg (100%) rename sound/{ => announcer}/vox_fem/inches.ogg (100%) rename sound/{ => announcer}/vox_fem/india.ogg (100%) rename sound/{ => announcer}/vox_fem/inert.ogg (100%) rename sound/{ => announcer}/vox_fem/ing.ogg (100%) rename sound/{ => announcer}/vox_fem/inoperative.ogg (100%) rename sound/{ => announcer}/vox_fem/inside.ogg (100%) rename sound/{ => announcer}/vox_fem/inspection.ogg (100%) rename sound/{ => announcer}/vox_fem/inspector.ogg (100%) rename sound/{ => announcer}/vox_fem/interchange.ogg (100%) rename sound/{ => announcer}/vox_fem/internal.ogg (100%) rename sound/{ => announcer}/vox_fem/internals.ogg (100%) rename sound/{ => announcer}/vox_fem/intruder.ogg (100%) rename sound/{ => announcer}/vox_fem/invalid.ogg (100%) rename sound/{ => announcer}/vox_fem/invalidate.ogg (100%) rename sound/{ => announcer}/vox_fem/invasion.ogg (100%) rename sound/{ => announcer}/vox_fem/irradiate.ogg (100%) rename sound/{ => announcer}/vox_fem/is.ogg (100%) rename sound/{ => announcer}/vox_fem/it.ogg (100%) rename sound/{ => announcer}/vox_fem/its.ogg (100%) rename sound/{ => announcer}/vox_fem/j.ogg (100%) rename sound/{ => announcer}/vox_fem/janitor.ogg (100%) rename sound/{ => announcer}/vox_fem/jesus.ogg (100%) rename sound/{ => announcer}/vox_fem/job.ogg (100%) rename sound/{ => announcer}/vox_fem/jobs.ogg (100%) rename sound/{ => announcer}/vox_fem/johnson.ogg (100%) rename sound/{ => announcer}/vox_fem/jolly.ogg (100%) rename sound/{ => announcer}/vox_fem/juliet.ogg (100%) rename sound/{ => announcer}/vox_fem/k.ogg (100%) rename sound/{ => announcer}/vox_fem/kelvin.ogg (100%) rename sound/{ => announcer}/vox_fem/key.ogg (100%) rename sound/{ => announcer}/vox_fem/kidnapped.ogg (100%) rename sound/{ => announcer}/vox_fem/kidnapping.ogg (100%) rename sound/{ => announcer}/vox_fem/kill.ogg (100%) rename sound/{ => announcer}/vox_fem/killed.ogg (100%) rename sound/{ => announcer}/vox_fem/killer.ogg (100%) rename sound/{ => announcer}/vox_fem/kilo.ogg (100%) rename sound/{ => announcer}/vox_fem/kit.ogg (100%) rename sound/{ => announcer}/vox_fem/kitchen.ogg (100%) rename sound/{ => announcer}/vox_fem/l.ogg (100%) rename sound/{ => announcer}/vox_fem/lab.ogg (100%) rename sound/{ => announcer}/vox_fem/lambda.ogg (100%) rename sound/{ => announcer}/vox_fem/large.ogg (100%) rename sound/{ => announcer}/vox_fem/laser.ogg (100%) rename sound/{ => announcer}/vox_fem/last.ogg (100%) rename sound/{ => announcer}/vox_fem/launch.ogg (100%) rename sound/{ => announcer}/vox_fem/lavaland.ogg (100%) rename sound/{ => announcer}/vox_fem/law.ogg (100%) rename sound/{ => announcer}/vox_fem/laws.ogg (100%) rename sound/{ => announcer}/vox_fem/lawyer.ogg (100%) rename sound/{ => announcer}/vox_fem/leak.ogg (100%) rename sound/{ => announcer}/vox_fem/leave.ogg (100%) rename sound/{ => announcer}/vox_fem/left.ogg (100%) rename sound/{ => announcer}/vox_fem/legal.ogg (100%) rename sound/{ => announcer}/vox_fem/level.ogg (100%) rename sound/{ => announcer}/vox_fem/lever.ogg (100%) rename sound/{ => announcer}/vox_fem/library.ogg (100%) rename sound/{ => announcer}/vox_fem/lie.ogg (100%) rename sound/{ => announcer}/vox_fem/lieutenant.ogg (100%) rename sound/{ => announcer}/vox_fem/life.ogg (100%) rename sound/{ => announcer}/vox_fem/lifeform.ogg (100%) rename sound/{ => announcer}/vox_fem/light.ogg (100%) rename sound/{ => announcer}/vox_fem/lightbulb.ogg (100%) rename sound/{ => announcer}/vox_fem/lima.ogg (100%) rename sound/{ => announcer}/vox_fem/limit.ogg (100%) rename sound/{ => announcer}/vox_fem/limited.ogg (100%) rename sound/{ => announcer}/vox_fem/liquid.ogg (100%) rename sound/{ => announcer}/vox_fem/list.ogg (100%) rename sound/{ => announcer}/vox_fem/live.ogg (100%) rename sound/{ => announcer}/vox_fem/live2.ogg (100%) rename sound/{ => announcer}/vox_fem/lizard.ogg (100%) rename sound/{ => announcer}/vox_fem/lizardperson.ogg (100%) rename sound/{ => announcer}/vox_fem/loading.ogg (100%) rename sound/{ => announcer}/vox_fem/locate.ogg (100%) rename sound/{ => announcer}/vox_fem/located.ogg (100%) rename sound/{ => announcer}/vox_fem/location.ogg (100%) rename sound/{ => announcer}/vox_fem/lock.ogg (100%) rename sound/{ => announcer}/vox_fem/locked.ogg (100%) rename sound/{ => announcer}/vox_fem/locker.ogg (100%) rename sound/{ => announcer}/vox_fem/lockout.ogg (100%) rename sound/{ => announcer}/vox_fem/long.ogg (100%) rename sound/{ => announcer}/vox_fem/look.ogg (100%) rename sound/{ => announcer}/vox_fem/loop.ogg (100%) rename sound/{ => announcer}/vox_fem/loose.ogg (100%) rename sound/{ => announcer}/vox_fem/lot.ogg (100%) rename sound/{ => announcer}/vox_fem/lower.ogg (100%) rename sound/{ => announcer}/vox_fem/lowest.ogg (100%) rename sound/{ => announcer}/vox_fem/lusty.ogg (100%) rename sound/{ => announcer}/vox_fem/m.ogg (100%) rename sound/{ => announcer}/vox_fem/machine.ogg (100%) rename sound/{ => announcer}/vox_fem/made.ogg (100%) rename sound/{ => announcer}/vox_fem/magic.ogg (100%) rename sound/{ => announcer}/vox_fem/magnetic.ogg (100%) rename sound/{ => announcer}/vox_fem/main.ogg (100%) rename sound/{ => announcer}/vox_fem/maintainer.ogg (100%) rename sound/{ => announcer}/vox_fem/maintenance.ogg (100%) rename sound/{ => announcer}/vox_fem/major.ogg (100%) rename sound/{ => announcer}/vox_fem/making.ogg (100%) rename sound/{ => announcer}/vox_fem/malfunction.ogg (100%) rename sound/{ => announcer}/vox_fem/man.ogg (100%) rename sound/{ => announcer}/vox_fem/many.ogg (100%) rename sound/{ => announcer}/vox_fem/mass.ogg (100%) rename sound/{ => announcer}/vox_fem/materials.ogg (100%) rename sound/{ => announcer}/vox_fem/maximum.ogg (100%) rename sound/{ => announcer}/vox_fem/may.ogg (100%) rename sound/{ => announcer}/vox_fem/me.ogg (100%) rename sound/{ => announcer}/vox_fem/mean.ogg (100%) rename sound/{ => announcer}/vox_fem/means.ogg (100%) rename sound/{ => announcer}/vox_fem/meat.ogg (100%) rename sound/{ => announcer}/vox_fem/medbay.ogg (100%) rename sound/{ => announcer}/vox_fem/medical.ogg (100%) rename sound/{ => announcer}/vox_fem/medium.ogg (100%) rename sound/{ => announcer}/vox_fem/megafauna.ogg (100%) rename sound/{ => announcer}/vox_fem/men.ogg (100%) rename sound/{ => announcer}/vox_fem/mercy.ogg (100%) rename sound/{ => announcer}/vox_fem/mesa.ogg (100%) rename sound/{ => announcer}/vox_fem/meson.ogg (100%) rename sound/{ => announcer}/vox_fem/message.ogg (100%) rename sound/{ => announcer}/vox_fem/meter.ogg (100%) rename sound/{ => announcer}/vox_fem/method.ogg (100%) rename sound/{ => announcer}/vox_fem/miasma.ogg (100%) rename sound/{ => announcer}/vox_fem/micro.ogg (100%) rename sound/{ => announcer}/vox_fem/middle.ogg (100%) rename sound/{ => announcer}/vox_fem/mike.ogg (100%) rename sound/{ => announcer}/vox_fem/miles.ogg (100%) rename sound/{ => announcer}/vox_fem/military.ogg (100%) rename sound/{ => announcer}/vox_fem/milli.ogg (100%) rename sound/{ => announcer}/vox_fem/million.ogg (100%) rename sound/{ => announcer}/vox_fem/mime.ogg (100%) rename sound/{ => announcer}/vox_fem/minefield.ogg (100%) rename sound/{ => announcer}/vox_fem/miner.ogg (100%) rename sound/{ => announcer}/vox_fem/minimum.ogg (100%) rename sound/{ => announcer}/vox_fem/minor.ogg (100%) rename sound/{ => announcer}/vox_fem/minute.ogg (100%) rename sound/{ => announcer}/vox_fem/minutes.ogg (100%) rename sound/{ => announcer}/vox_fem/mister.ogg (100%) rename sound/{ => announcer}/vox_fem/mixture.ogg (100%) rename sound/{ => announcer}/vox_fem/mode.ogg (100%) rename sound/{ => announcer}/vox_fem/modification.ogg (100%) rename sound/{ => announcer}/vox_fem/money.ogg (100%) rename sound/{ => announcer}/vox_fem/monkey.ogg (100%) rename sound/{ => announcer}/vox_fem/most.ogg (100%) rename sound/{ => announcer}/vox_fem/moth.ogg (100%) rename sound/{ => announcer}/vox_fem/mothperson.ogg (100%) rename sound/{ => announcer}/vox_fem/motor.ogg (100%) rename sound/{ => announcer}/vox_fem/motorpool.ogg (100%) rename sound/{ => announcer}/vox_fem/move.ogg (100%) rename sound/{ => announcer}/vox_fem/moved.ogg (100%) rename sound/{ => announcer}/vox_fem/moving.ogg (100%) rename sound/{ => announcer}/vox_fem/multitude.ogg (100%) rename sound/{ => announcer}/vox_fem/murder.ogg (100%) rename sound/{ => announcer}/vox_fem/murderer.ogg (100%) rename sound/{ => announcer}/vox_fem/must.ogg (100%) rename sound/{ => announcer}/vox_fem/my.ogg (100%) rename sound/{ => announcer}/vox_fem/mythic.ogg (100%) rename sound/{ => announcer}/vox_fem/n.ogg (100%) rename sound/{ => announcer}/vox_fem/nanotrasen.ogg (100%) rename sound/{ => announcer}/vox_fem/near.ogg (100%) rename sound/{ => announcer}/vox_fem/nearest.ogg (100%) rename sound/{ => announcer}/vox_fem/nearly.ogg (100%) rename sound/{ => announcer}/vox_fem/need.ogg (100%) rename sound/{ => announcer}/vox_fem/never.ogg (100%) rename sound/{ => announcer}/vox_fem/nice.ogg (100%) rename sound/{ => announcer}/vox_fem/night.ogg (100%) rename sound/{ => announcer}/vox_fem/nine.ogg (100%) rename sound/{ => announcer}/vox_fem/nineteen.ogg (100%) rename sound/{ => announcer}/vox_fem/ninety.ogg (100%) rename sound/{ => announcer}/vox_fem/nitrogen.ogg (100%) rename sound/{ => announcer}/vox_fem/no.ogg (100%) rename sound/{ => announcer}/vox_fem/nominal.ogg (100%) rename sound/{ => announcer}/vox_fem/none.ogg (100%) rename sound/{ => announcer}/vox_fem/normal.ogg (100%) rename sound/{ => announcer}/vox_fem/normally.ogg (100%) rename sound/{ => announcer}/vox_fem/north.ogg (100%) rename sound/{ => announcer}/vox_fem/northeast.ogg (100%) rename sound/{ => announcer}/vox_fem/northwest.ogg (100%) rename sound/{ => announcer}/vox_fem/not.ogg (100%) rename sound/{ => announcer}/vox_fem/notably.ogg (100%) rename sound/{ => announcer}/vox_fem/november.ogg (100%) rename sound/{ => announcer}/vox_fem/now.ogg (100%) rename sound/{ => announcer}/vox_fem/nuclear.ogg (100%) rename sound/{ => announcer}/vox_fem/nuke.ogg (100%) rename sound/{ => announcer}/vox_fem/number.ogg (100%) rename sound/{ => announcer}/vox_fem/o.ogg (100%) rename sound/{ => announcer}/vox_fem/object.ogg (100%) rename sound/{ => announcer}/vox_fem/objective.ogg (100%) rename sound/{ => announcer}/vox_fem/obliterate.ogg (100%) rename sound/{ => announcer}/vox_fem/obliterated.ogg (100%) rename sound/{ => announcer}/vox_fem/obliterating.ogg (100%) rename sound/{ => announcer}/vox_fem/observation.ogg (100%) rename sound/{ => announcer}/vox_fem/obtain.ogg (100%) rename sound/{ => announcer}/vox_fem/of.ogg (100%) rename sound/{ => announcer}/vox_fem/off.ogg (100%) rename sound/{ => announcer}/vox_fem/office.ogg (100%) rename sound/{ => announcer}/vox_fem/officer.ogg (100%) rename sound/{ => announcer}/vox_fem/oh.ogg (100%) rename sound/{ => announcer}/vox_fem/ok.ogg (100%) rename sound/{ => announcer}/vox_fem/okay.ogg (100%) rename sound/{ => announcer}/vox_fem/on.ogg (100%) rename sound/{ => announcer}/vox_fem/once.ogg (100%) rename sound/{ => announcer}/vox_fem/one.ogg (100%) rename sound/{ => announcer}/vox_fem/oof.ogg (100%) rename sound/{ => announcer}/vox_fem/open.ogg (100%) rename sound/{ => announcer}/vox_fem/opened.ogg (100%) rename sound/{ => announcer}/vox_fem/opening.ogg (100%) rename sound/{ => announcer}/vox_fem/operating.ogg (100%) rename sound/{ => announcer}/vox_fem/operations.ogg (100%) rename sound/{ => announcer}/vox_fem/operative.ogg (100%) rename sound/{ => announcer}/vox_fem/option.ogg (100%) rename sound/{ => announcer}/vox_fem/or.ogg (100%) rename sound/{ => announcer}/vox_fem/order.ogg (100%) rename sound/{ => announcer}/vox_fem/ordered.ogg (100%) rename sound/{ => announcer}/vox_fem/ordering.ogg (100%) rename sound/{ => announcer}/vox_fem/organic.ogg (100%) rename sound/{ => announcer}/vox_fem/oscar.ogg (100%) rename sound/{ => announcer}/vox_fem/out.ogg (100%) rename sound/{ => announcer}/vox_fem/output.ogg (100%) rename sound/{ => announcer}/vox_fem/outside.ogg (100%) rename sound/{ => announcer}/vox_fem/over.ogg (100%) rename sound/{ => announcer}/vox_fem/overload.ogg (100%) rename sound/{ => announcer}/vox_fem/override.ogg (100%) rename sound/{ => announcer}/vox_fem/own.ogg (100%) rename sound/{ => announcer}/vox_fem/oxygen.ogg (100%) rename sound/{ => announcer}/vox_fem/p.ogg (100%) rename sound/{ => announcer}/vox_fem/pacification.ogg (100%) rename sound/{ => announcer}/vox_fem/pacify.ogg (100%) rename sound/{ => announcer}/vox_fem/pain.ogg (100%) rename sound/{ => announcer}/vox_fem/pal.ogg (100%) rename sound/{ => announcer}/vox_fem/panel.ogg (100%) rename sound/{ => announcer}/vox_fem/panting.ogg (100%) rename sound/{ => announcer}/vox_fem/pathetic.ogg (100%) rename sound/{ => announcer}/vox_fem/pda.ogg (100%) rename sound/{ => announcer}/vox_fem/percent.ogg (100%) rename sound/{ => announcer}/vox_fem/perfect.ogg (100%) rename sound/{ => announcer}/vox_fem/perhaps.ogg (100%) rename sound/{ => announcer}/vox_fem/perimeter.ogg (100%) rename sound/{ => announcer}/vox_fem/permitted.ogg (100%) rename sound/{ => announcer}/vox_fem/personal.ogg (100%) rename sound/{ => announcer}/vox_fem/personnel.ogg (100%) rename sound/{ => announcer}/vox_fem/pipe.ogg (100%) rename sound/{ => announcer}/vox_fem/piping.ogg (100%) rename sound/{ => announcer}/vox_fem/piss.ogg (100%) rename sound/{ => announcer}/vox_fem/plant.ogg (100%) rename sound/{ => announcer}/vox_fem/plasma.ogg (100%) rename sound/{ => announcer}/vox_fem/plasmaman.ogg (100%) rename sound/{ => announcer}/vox_fem/platform.ogg (100%) rename sound/{ => announcer}/vox_fem/plating.ogg (100%) rename sound/{ => announcer}/vox_fem/plausible.ogg (100%) rename sound/{ => announcer}/vox_fem/please.ogg (100%) rename sound/{ => announcer}/vox_fem/pluoxium.ogg (100%) rename sound/{ => announcer}/vox_fem/point.ogg (100%) rename sound/{ => announcer}/vox_fem/port.ogg (100%) rename sound/{ => announcer}/vox_fem/portal.ogg (100%) rename sound/{ => announcer}/vox_fem/portion.ogg (100%) rename sound/{ => announcer}/vox_fem/possible.ogg (100%) rename sound/{ => announcer}/vox_fem/power.ogg (100%) rename sound/{ => announcer}/vox_fem/powered.ogg (100%) rename sound/{ => announcer}/vox_fem/powering.ogg (100%) rename sound/{ => announcer}/vox_fem/premature.ogg (100%) rename sound/{ => announcer}/vox_fem/prematurely.ogg (100%) rename sound/{ => announcer}/vox_fem/presence.ogg (100%) rename sound/{ => announcer}/vox_fem/present.ogg (100%) rename sound/{ => announcer}/vox_fem/presents.ogg (100%) rename sound/{ => announcer}/vox_fem/press.ogg (100%) rename sound/{ => announcer}/vox_fem/pressure.ogg (100%) rename sound/{ => announcer}/vox_fem/primary.ogg (100%) rename sound/{ => announcer}/vox_fem/priority.ogg (100%) rename sound/{ => announcer}/vox_fem/prison.ogg (100%) rename sound/{ => announcer}/vox_fem/prisoner.ogg (100%) rename sound/{ => announcer}/vox_fem/proceed.ogg (100%) rename sound/{ => announcer}/vox_fem/processing.ogg (100%) rename sound/{ => announcer}/vox_fem/progress.ogg (100%) rename sound/{ => announcer}/vox_fem/projectile.ogg (100%) rename sound/{ => announcer}/vox_fem/proper.ogg (100%) rename sound/{ => announcer}/vox_fem/propulsion.ogg (100%) rename sound/{ => announcer}/vox_fem/prosecute.ogg (100%) rename sound/{ => announcer}/vox_fem/protect.ogg (100%) rename sound/{ => announcer}/vox_fem/protected.ogg (100%) rename sound/{ => announcer}/vox_fem/protection.ogg (100%) rename sound/{ => announcer}/vox_fem/protective.ogg (100%) rename sound/{ => announcer}/vox_fem/proto-nitrate.ogg (100%) rename sound/{ => announcer}/vox_fem/pull.ogg (100%) rename sound/{ => announcer}/vox_fem/pulled.ogg (100%) rename sound/{ => announcer}/vox_fem/pulling.ogg (100%) rename sound/{ => announcer}/vox_fem/pump.ogg (100%) rename sound/{ => announcer}/vox_fem/pumps.ogg (100%) rename sound/{ => announcer}/vox_fem/push.ogg (100%) rename sound/{ => announcer}/vox_fem/put.ogg (100%) rename sound/{ => announcer}/vox_fem/q.ogg (100%) rename sound/{ => announcer}/vox_fem/quantum.ogg (100%) rename sound/{ => announcer}/vox_fem/quarantine.ogg (100%) rename sound/{ => announcer}/vox_fem/quartermaster.ogg (100%) rename sound/{ => announcer}/vox_fem/quebec.ogg (100%) rename sound/{ => announcer}/vox_fem/queen.ogg (100%) rename sound/{ => announcer}/vox_fem/question.ogg (100%) rename sound/{ => announcer}/vox_fem/questionable.ogg (100%) rename sound/{ => announcer}/vox_fem/questioning.ogg (100%) rename sound/{ => announcer}/vox_fem/quick.ogg (100%) rename sound/{ => announcer}/vox_fem/quit.ogg (100%) rename sound/{ => announcer}/vox_fem/r.ogg (100%) rename sound/{ => announcer}/vox_fem/radiation.ogg (100%) rename sound/{ => announcer}/vox_fem/radioactive.ogg (100%) rename sound/{ => announcer}/vox_fem/rads.ogg (100%) rename sound/{ => announcer}/vox_fem/raider.ogg (100%) rename sound/{ => announcer}/vox_fem/raiders.ogg (100%) rename sound/{ => announcer}/vox_fem/rapid.ogg (100%) rename sound/{ => announcer}/vox_fem/reach.ogg (100%) rename sound/{ => announcer}/vox_fem/reached.ogg (100%) rename sound/{ => announcer}/vox_fem/reactor.ogg (100%) rename sound/{ => announcer}/vox_fem/red.ogg (100%) rename sound/{ => announcer}/vox_fem/relay.ogg (100%) rename sound/{ => announcer}/vox_fem/release.ogg (100%) rename sound/{ => announcer}/vox_fem/released.ogg (100%) rename sound/{ => announcer}/vox_fem/releasing.ogg (100%) rename sound/{ => announcer}/vox_fem/remaining.ogg (100%) rename sound/{ => announcer}/vox_fem/removal.ogg (100%) rename sound/{ => announcer}/vox_fem/remove.ogg (100%) rename sound/{ => announcer}/vox_fem/removed.ogg (100%) rename sound/{ => announcer}/vox_fem/removing.ogg (100%) rename sound/{ => announcer}/vox_fem/renegade.ogg (100%) rename sound/{ => announcer}/vox_fem/repair.ogg (100%) rename sound/{ => announcer}/vox_fem/report.ogg (100%) rename sound/{ => announcer}/vox_fem/reports.ogg (100%) rename sound/{ => announcer}/vox_fem/request.ogg (100%) rename sound/{ => announcer}/vox_fem/requested.ogg (100%) rename sound/{ => announcer}/vox_fem/requesting.ogg (100%) rename sound/{ => announcer}/vox_fem/require.ogg (100%) rename sound/{ => announcer}/vox_fem/required.ogg (100%) rename sound/{ => announcer}/vox_fem/research.ogg (100%) rename sound/{ => announcer}/vox_fem/resevoir.ogg (100%) rename sound/{ => announcer}/vox_fem/resistance.ogg (100%) rename sound/{ => announcer}/vox_fem/resistant.ogg (100%) rename sound/{ => announcer}/vox_fem/resisting.ogg (100%) rename sound/{ => announcer}/vox_fem/resonance.ogg (100%) rename sound/{ => announcer}/vox_fem/rest.ogg (100%) rename sound/{ => announcer}/vox_fem/restoration.ogg (100%) rename sound/{ => announcer}/vox_fem/revolution.ogg (100%) rename sound/{ => announcer}/vox_fem/revolutionary.ogg (100%) rename sound/{ => announcer}/vox_fem/right.ogg (100%) rename sound/{ => announcer}/vox_fem/riot.ogg (100%) rename sound/{ => announcer}/vox_fem/roboticist.ogg (100%) rename sound/{ => announcer}/vox_fem/rocket.ogg (100%) rename sound/{ => announcer}/vox_fem/roger.ogg (100%) rename sound/{ => announcer}/vox_fem/rogue.ogg (100%) rename sound/{ => announcer}/vox_fem/romeo.ogg (100%) rename sound/{ => announcer}/vox_fem/room.ogg (100%) rename sound/{ => announcer}/vox_fem/round.ogg (100%) rename sound/{ => announcer}/vox_fem/run.ogg (100%) rename sound/{ => announcer}/vox_fem/rune.ogg (100%) rename sound/{ => announcer}/vox_fem/runtime.ogg (100%) rename sound/{ => announcer}/vox_fem/s.ogg (100%) rename sound/{ => announcer}/vox_fem/sabotage.ogg (100%) rename sound/{ => announcer}/vox_fem/sabotaged.ogg (100%) rename sound/{ => announcer}/vox_fem/sabotaging.ogg (100%) rename sound/{ => announcer}/vox_fem/safe.ogg (100%) rename sound/{ => announcer}/vox_fem/safety.ogg (100%) rename sound/{ => announcer}/vox_fem/sairhorn.ogg (100%) rename sound/{ => announcer}/vox_fem/same.ogg (100%) rename sound/{ => announcer}/vox_fem/sarah.ogg (100%) rename sound/{ => announcer}/vox_fem/sargeant.ogg (100%) rename sound/{ => announcer}/vox_fem/satellite.ogg (100%) rename sound/{ => announcer}/vox_fem/save.ogg (100%) rename sound/{ => announcer}/vox_fem/saw.ogg (100%) rename sound/{ => announcer}/vox_fem/scan.ogg (100%) rename sound/{ => announcer}/vox_fem/scanned.ogg (100%) rename sound/{ => announcer}/vox_fem/scanner.ogg (100%) rename sound/{ => announcer}/vox_fem/scanners.ogg (100%) rename sound/{ => announcer}/vox_fem/scanning.ogg (100%) rename sound/{ => announcer}/vox_fem/scensor.ogg (100%) rename sound/{ => announcer}/vox_fem/science.ogg (100%) rename sound/{ => announcer}/vox_fem/scientist.ogg (100%) rename sound/{ => announcer}/vox_fem/scream.ogg (100%) rename sound/{ => announcer}/vox_fem/screen.ogg (100%) rename sound/{ => announcer}/vox_fem/screw.ogg (100%) rename sound/{ => announcer}/vox_fem/search.ogg (100%) rename sound/{ => announcer}/vox_fem/second.ogg (100%) rename sound/{ => announcer}/vox_fem/secondary.ogg (100%) rename sound/{ => announcer}/vox_fem/seconds.ogg (100%) rename sound/{ => announcer}/vox_fem/section.ogg (100%) rename sound/{ => announcer}/vox_fem/sector.ogg (100%) rename sound/{ => announcer}/vox_fem/secure.ogg (100%) rename sound/{ => announcer}/vox_fem/secured.ogg (100%) rename sound/{ => announcer}/vox_fem/security.ogg (100%) rename sound/{ => announcer}/vox_fem/seen.ogg (100%) rename sound/{ => announcer}/vox_fem/select.ogg (100%) rename sound/{ => announcer}/vox_fem/selected.ogg (100%) rename sound/{ => announcer}/vox_fem/self.ogg (100%) rename sound/{ => announcer}/vox_fem/sensors.ogg (100%) rename sound/{ => announcer}/vox_fem/server.ogg (100%) rename sound/{ => announcer}/vox_fem/service.ogg (100%) rename sound/{ => announcer}/vox_fem/set.ogg (100%) rename sound/{ => announcer}/vox_fem/seven.ogg (100%) rename sound/{ => announcer}/vox_fem/seventeen.ogg (100%) rename sound/{ => announcer}/vox_fem/seventy.ogg (100%) rename sound/{ => announcer}/vox_fem/sever.ogg (100%) rename sound/{ => announcer}/vox_fem/severe.ogg (100%) rename sound/{ => announcer}/vox_fem/severed.ogg (100%) rename sound/{ => announcer}/vox_fem/severing.ogg (100%) rename sound/{ => announcer}/vox_fem/sewage.ogg (100%) rename sound/{ => announcer}/vox_fem/sewer.ogg (100%) rename sound/{ => announcer}/vox_fem/shaft.ogg (100%) rename sound/{ => announcer}/vox_fem/shame.ogg (100%) rename sound/{ => announcer}/vox_fem/shameful.ogg (100%) rename sound/{ => announcer}/vox_fem/shameless.ogg (100%) rename sound/{ => announcer}/vox_fem/shard.ogg (100%) rename sound/{ => announcer}/vox_fem/she.ogg (100%) rename sound/{ => announcer}/vox_fem/shield.ogg (100%) rename sound/{ => announcer}/vox_fem/shift.ogg (100%) rename sound/{ => announcer}/vox_fem/shifts.ogg (100%) rename sound/{ => announcer}/vox_fem/shipment.ogg (100%) rename sound/{ => announcer}/vox_fem/shirt.ogg (100%) rename sound/{ => announcer}/vox_fem/shit.ogg (100%) rename sound/{ => announcer}/vox_fem/shitlord.ogg (100%) rename sound/{ => announcer}/vox_fem/shits.ogg (100%) rename sound/{ => announcer}/vox_fem/shitting.ogg (100%) rename sound/{ => announcer}/vox_fem/shock.ogg (100%) rename sound/{ => announcer}/vox_fem/shonk.ogg (100%) rename sound/{ => announcer}/vox_fem/shoot.ogg (100%) rename sound/{ => announcer}/vox_fem/shower.ogg (100%) rename sound/{ => announcer}/vox_fem/shut.ogg (100%) rename sound/{ => announcer}/vox_fem/shuttle.ogg (100%) rename sound/{ => announcer}/vox_fem/sick.ogg (100%) rename sound/{ => announcer}/vox_fem/side.ogg (100%) rename sound/{ => announcer}/vox_fem/sides.ogg (100%) rename sound/{ => announcer}/vox_fem/sierra.ogg (100%) rename sound/{ => announcer}/vox_fem/sight.ogg (100%) rename sound/{ => announcer}/vox_fem/silicon.ogg (100%) rename sound/{ => announcer}/vox_fem/silo.ogg (100%) rename sound/{ => announcer}/vox_fem/single.ogg (100%) rename sound/{ => announcer}/vox_fem/singularity.ogg (100%) rename sound/{ => announcer}/vox_fem/siphon.ogg (100%) rename sound/{ => announcer}/vox_fem/siphoning.ogg (100%) rename sound/{ => announcer}/vox_fem/six.ogg (100%) rename sound/{ => announcer}/vox_fem/sixteen.ogg (100%) rename sound/{ => announcer}/vox_fem/sixty.ogg (100%) rename sound/{ => announcer}/vox_fem/skeleton.ogg (100%) rename sound/{ => announcer}/vox_fem/slaughter.ogg (100%) rename sound/{ => announcer}/vox_fem/slime.ogg (100%) rename sound/{ => announcer}/vox_fem/slip.ogg (100%) rename sound/{ => announcer}/vox_fem/slippery.ogg (100%) rename sound/{ => announcer}/vox_fem/slow.ogg (100%) rename sound/{ => announcer}/vox_fem/sm.ogg (100%) rename sound/{ => announcer}/vox_fem/small.ogg (100%) rename sound/{ => announcer}/vox_fem/sockmuncher.ogg (100%) rename sound/{ => announcer}/vox_fem/soft.ogg (100%) rename sound/{ => announcer}/vox_fem/solar.ogg (100%) rename sound/{ => announcer}/vox_fem/solars.ogg (100%) rename sound/{ => announcer}/vox_fem/soldier.ogg (100%) rename sound/{ => announcer}/vox_fem/some.ogg (100%) rename sound/{ => announcer}/vox_fem/someone.ogg (100%) rename sound/{ => announcer}/vox_fem/something.ogg (100%) rename sound/{ => announcer}/vox_fem/son.ogg (100%) rename sound/{ => announcer}/vox_fem/sorry.ogg (100%) rename sound/{ => announcer}/vox_fem/source.ogg (100%) rename sound/{ => announcer}/vox_fem/south.ogg (100%) rename sound/{ => announcer}/vox_fem/southeast.ogg (100%) rename sound/{ => announcer}/vox_fem/southwest.ogg (100%) rename sound/{ => announcer}/vox_fem/space.ogg (100%) rename sound/{ => announcer}/vox_fem/special.ogg (100%) rename sound/{ => announcer}/vox_fem/spew.ogg (100%) rename sound/{ => announcer}/vox_fem/squad.ogg (100%) rename sound/{ => announcer}/vox_fem/square.ogg (100%) rename sound/{ => announcer}/vox_fem/ss13.ogg (100%) rename sound/{ => announcer}/vox_fem/stairway.ogg (100%) rename sound/{ => announcer}/vox_fem/starboard.ogg (100%) rename sound/{ => announcer}/vox_fem/start.ogg (100%) rename sound/{ => announcer}/vox_fem/starts.ogg (100%) rename sound/{ => announcer}/vox_fem/station.ogg (100%) rename sound/{ => announcer}/vox_fem/stations.ogg (100%) rename sound/{ => announcer}/vox_fem/stationwide.ogg (100%) rename sound/{ => announcer}/vox_fem/status.ogg (100%) rename sound/{ => announcer}/vox_fem/stay.ogg (100%) rename sound/{ => announcer}/vox_fem/sterile.ogg (100%) rename sound/{ => announcer}/vox_fem/sterilization.ogg (100%) rename sound/{ => announcer}/vox_fem/stop.ogg (100%) rename sound/{ => announcer}/vox_fem/storage.ogg (100%) rename sound/{ => announcer}/vox_fem/strong.ogg (100%) rename sound/{ => announcer}/vox_fem/stuck.ogg (100%) rename sound/{ => announcer}/vox_fem/sub.ogg (100%) rename sound/{ => announcer}/vox_fem/subsurface.ogg (100%) rename sound/{ => announcer}/vox_fem/such.ogg (100%) rename sound/{ => announcer}/vox_fem/sudden.ogg (100%) rename sound/{ => announcer}/vox_fem/suffer.ogg (100%) rename sound/{ => announcer}/vox_fem/suit.ogg (100%) rename sound/{ => announcer}/vox_fem/suited.ogg (100%) rename sound/{ => announcer}/vox_fem/super.ogg (100%) rename sound/{ => announcer}/vox_fem/superconducting.ogg (100%) rename sound/{ => announcer}/vox_fem/supercooled.ogg (100%) rename sound/{ => announcer}/vox_fem/supermatter.ogg (100%) rename sound/{ => announcer}/vox_fem/supply.ogg (100%) rename sound/{ => announcer}/vox_fem/surface.ogg (100%) rename sound/{ => announcer}/vox_fem/surrender.ogg (100%) rename sound/{ => announcer}/vox_fem/surround.ogg (100%) rename sound/{ => announcer}/vox_fem/surrounded.ogg (100%) rename sound/{ => announcer}/vox_fem/sweating.ogg (100%) rename sound/{ => announcer}/vox_fem/swhitenoise.ogg (100%) rename sound/{ => announcer}/vox_fem/switch.ogg (100%) rename sound/{ => announcer}/vox_fem/syndicate.ogg (100%) rename sound/{ => announcer}/vox_fem/system.ogg (100%) rename sound/{ => announcer}/vox_fem/systems.ogg (100%) rename sound/{ => announcer}/vox_fem/t.ogg (100%) rename sound/{ => announcer}/vox_fem/table.ogg (100%) rename sound/{ => announcer}/vox_fem/tactical.ogg (100%) rename sound/{ => announcer}/vox_fem/taildragger.ogg (100%) rename sound/{ => announcer}/vox_fem/take.ogg (100%) rename sound/{ => announcer}/vox_fem/talk.ogg (100%) rename sound/{ => announcer}/vox_fem/tampered.ogg (100%) rename sound/{ => announcer}/vox_fem/tango.ogg (100%) rename sound/{ => announcer}/vox_fem/tank.ogg (100%) rename sound/{ => announcer}/vox_fem/target.ogg (100%) rename sound/{ => announcer}/vox_fem/team.ogg (100%) rename sound/{ => announcer}/vox_fem/tech.ogg (100%) rename sound/{ => announcer}/vox_fem/technician.ogg (100%) rename sound/{ => announcer}/vox_fem/technology.ogg (100%) rename sound/{ => announcer}/vox_fem/teleporter.ogg (100%) rename sound/{ => announcer}/vox_fem/temperature.ogg (100%) rename sound/{ => announcer}/vox_fem/temporal.ogg (100%) rename sound/{ => announcer}/vox_fem/ten.ogg (100%) rename sound/{ => announcer}/vox_fem/terminal.ogg (100%) rename sound/{ => announcer}/vox_fem/terminate.ogg (100%) rename sound/{ => announcer}/vox_fem/terminated.ogg (100%) rename sound/{ => announcer}/vox_fem/termination.ogg (100%) rename sound/{ => announcer}/vox_fem/tesla.ogg (100%) rename sound/{ => announcer}/vox_fem/test.ogg (100%) rename sound/{ => announcer}/vox_fem/text.ogg (100%) rename sound/{ => announcer}/vox_fem/thank.ogg (100%) rename sound/{ => announcer}/vox_fem/thanks.ogg (100%) rename sound/{ => announcer}/vox_fem/that.ogg (100%) rename sound/{ => announcer}/vox_fem/the.ogg (100%) rename sound/{ => announcer}/vox_fem/theater.ogg (100%) rename sound/{ => announcer}/vox_fem/them.ogg (100%) rename sound/{ => announcer}/vox_fem/then.ogg (100%) rename sound/{ => announcer}/vox_fem/there.ogg (100%) rename sound/{ => announcer}/vox_fem/they.ogg (100%) rename sound/{ => announcer}/vox_fem/third.ogg (100%) rename sound/{ => announcer}/vox_fem/thirteen.ogg (100%) rename sound/{ => announcer}/vox_fem/thirty.ogg (100%) rename sound/{ => announcer}/vox_fem/this.ogg (100%) rename sound/{ => announcer}/vox_fem/those.ogg (100%) rename sound/{ => announcer}/vox_fem/thousand.ogg (100%) rename sound/{ => announcer}/vox_fem/threat.ogg (100%) rename sound/{ => announcer}/vox_fem/three.ogg (100%) rename sound/{ => announcer}/vox_fem/through.ogg (100%) rename sound/{ => announcer}/vox_fem/tick.ogg (100%) rename sound/{ => announcer}/vox_fem/tide.ogg (100%) rename sound/{ => announcer}/vox_fem/tile.ogg (100%) rename sound/{ => announcer}/vox_fem/time.ogg (100%) rename sound/{ => announcer}/vox_fem/tiny.ogg (100%) rename sound/{ => announcer}/vox_fem/to.ogg (100%) rename sound/{ => announcer}/vox_fem/top.ogg (100%) rename sound/{ => announcer}/vox_fem/topside.ogg (100%) rename sound/{ => announcer}/vox_fem/touch.ogg (100%) rename sound/{ => announcer}/vox_fem/touched.ogg (100%) rename sound/{ => announcer}/vox_fem/touching.ogg (100%) rename sound/{ => announcer}/vox_fem/towards.ogg (100%) rename sound/{ => announcer}/vox_fem/toxins.ogg (100%) rename sound/{ => announcer}/vox_fem/track.ogg (100%) rename sound/{ => announcer}/vox_fem/train.ogg (100%) rename sound/{ => announcer}/vox_fem/traitor.ogg (100%) rename sound/{ => announcer}/vox_fem/transportation.ogg (100%) rename sound/{ => announcer}/vox_fem/trigger.ogg (100%) rename sound/{ => announcer}/vox_fem/triggered.ogg (100%) rename sound/{ => announcer}/vox_fem/triggering.ogg (100%) rename sound/{ => announcer}/vox_fem/triple.ogg (100%) rename sound/{ => announcer}/vox_fem/tritium.ogg (100%) rename sound/{ => announcer}/vox_fem/truck.ogg (100%) rename sound/{ => announcer}/vox_fem/true.ogg (100%) rename sound/{ => announcer}/vox_fem/tunnel.ogg (100%) rename sound/{ => announcer}/vox_fem/turn.ogg (100%) rename sound/{ => announcer}/vox_fem/turned.ogg (100%) rename sound/{ => announcer}/vox_fem/turret.ogg (100%) rename sound/{ => announcer}/vox_fem/twelve.ogg (100%) rename sound/{ => announcer}/vox_fem/twenty.ogg (100%) rename sound/{ => announcer}/vox_fem/two.ogg (100%) rename sound/{ => announcer}/vox_fem/u.ogg (100%) rename sound/{ => announcer}/vox_fem/ugh.ogg (100%) rename sound/{ => announcer}/vox_fem/ughh.ogg (100%) rename sound/{ => announcer}/vox_fem/unable.ogg (100%) rename sound/{ => announcer}/vox_fem/unauthorized.ogg (100%) rename sound/{ => announcer}/vox_fem/under.ogg (100%) rename sound/{ => announcer}/vox_fem/uniform.ogg (100%) rename sound/{ => announcer}/vox_fem/unique.ogg (100%) rename sound/{ => announcer}/vox_fem/unknown.ogg (100%) rename sound/{ => announcer}/vox_fem/unlocked.ogg (100%) rename sound/{ => announcer}/vox_fem/unsafe.ogg (100%) rename sound/{ => announcer}/vox_fem/until.ogg (100%) rename sound/{ => announcer}/vox_fem/unwrench.ogg (100%) rename sound/{ => announcer}/vox_fem/unwrenching.ogg (100%) rename sound/{ => announcer}/vox_fem/up.ogg (100%) rename sound/{ => announcer}/vox_fem/update.ogg (100%) rename sound/{ => announcer}/vox_fem/updated.ogg (100%) rename sound/{ => announcer}/vox_fem/updating.ogg (100%) rename sound/{ => announcer}/vox_fem/upload.ogg (100%) rename sound/{ => announcer}/vox_fem/upper.ogg (100%) rename sound/{ => announcer}/vox_fem/uranium.ogg (100%) rename sound/{ => announcer}/vox_fem/us.ogg (100%) rename sound/{ => announcer}/vox_fem/usa.ogg (100%) rename sound/{ => announcer}/vox_fem/use.ogg (100%) rename sound/{ => announcer}/vox_fem/used.ogg (100%) rename sound/{ => announcer}/vox_fem/useful.ogg (100%) rename sound/{ => announcer}/vox_fem/useless.ogg (100%) rename sound/{ => announcer}/vox_fem/user.ogg (100%) rename sound/{ => announcer}/vox_fem/v.ogg (100%) rename sound/{ => announcer}/vox_fem/vacate.ogg (100%) rename sound/{ => announcer}/vox_fem/vacuum.ogg (100%) rename sound/{ => announcer}/vox_fem/valid.ogg (100%) rename sound/{ => announcer}/vox_fem/validate.ogg (100%) rename sound/{ => announcer}/vox_fem/vapor.ogg (100%) rename sound/{ => announcer}/vox_fem/vendor.ogg (100%) rename sound/{ => announcer}/vox_fem/vent.ogg (100%) rename sound/{ => announcer}/vox_fem/ventilation.ogg (100%) rename sound/{ => announcer}/vox_fem/very.ogg (100%) rename sound/{ => announcer}/vox_fem/victor.ogg (100%) rename sound/{ => announcer}/vox_fem/violated.ogg (100%) rename sound/{ => announcer}/vox_fem/violation.ogg (100%) rename sound/{ => announcer}/vox_fem/virologist.ogg (100%) rename sound/{ => announcer}/vox_fem/virology.ogg (100%) rename sound/{ => announcer}/vox_fem/virus.ogg (100%) rename sound/{ => announcer}/vox_fem/vitals.ogg (100%) rename sound/{ => announcer}/vox_fem/voltage.ogg (100%) rename sound/{ => announcer}/vox_fem/vox.ogg (100%) rename sound/{ => announcer}/vox_fem/vox_login.ogg (100%) rename sound/{ => announcer}/vox_fem/voxtest.ogg (100%) rename sound/{ => announcer}/vox_fem/w.ogg (100%) rename sound/{ => announcer}/vox_fem/walk.ogg (100%) rename sound/{ => announcer}/vox_fem/wall.ogg (100%) rename sound/{ => announcer}/vox_fem/wanker.ogg (100%) rename sound/{ => announcer}/vox_fem/want.ogg (100%) rename sound/{ => announcer}/vox_fem/wanted.ogg (100%) rename sound/{ => announcer}/vox_fem/warden.ogg (100%) rename sound/{ => announcer}/vox_fem/warm.ogg (100%) rename sound/{ => announcer}/vox_fem/warn.ogg (100%) rename sound/{ => announcer}/vox_fem/warning.ogg (100%) rename sound/{ => announcer}/vox_fem/was.ogg (100%) rename sound/{ => announcer}/vox_fem/waste.ogg (100%) rename sound/{ => announcer}/vox_fem/water.ogg (100%) rename sound/{ => announcer}/vox_fem/way.ogg (100%) rename sound/{ => announcer}/vox_fem/ways.ogg (100%) rename sound/{ => announcer}/vox_fem/we.ogg (100%) rename sound/{ => announcer}/vox_fem/weak.ogg (100%) rename sound/{ => announcer}/vox_fem/weapon.ogg (100%) rename sound/{ => announcer}/vox_fem/welcome.ogg (100%) rename sound/{ => announcer}/vox_fem/weld.ogg (100%) rename sound/{ => announcer}/vox_fem/west.ogg (100%) rename sound/{ => announcer}/vox_fem/wew.ogg (100%) rename sound/{ => announcer}/vox_fem/what.ogg (100%) rename sound/{ => announcer}/vox_fem/when.ogg (100%) rename sound/{ => announcer}/vox_fem/where.ogg (100%) rename sound/{ => announcer}/vox_fem/which.ogg (100%) rename sound/{ => announcer}/vox_fem/while.ogg (100%) rename sound/{ => announcer}/vox_fem/whiskey.ogg (100%) rename sound/{ => announcer}/vox_fem/white.ogg (100%) rename sound/{ => announcer}/vox_fem/why.ogg (100%) rename sound/{ => announcer}/vox_fem/wilco.ogg (100%) rename sound/{ => announcer}/vox_fem/will.ogg (100%) rename sound/{ => announcer}/vox_fem/wing.ogg (100%) rename sound/{ => announcer}/vox_fem/wire.ogg (100%) rename sound/{ => announcer}/vox_fem/with.ogg (100%) rename sound/{ => announcer}/vox_fem/without.ogg (100%) rename sound/{ => announcer}/vox_fem/wizard.ogg (100%) rename sound/{ => announcer}/vox_fem/wood.ogg (100%) rename sound/{ => announcer}/vox_fem/woody.ogg (100%) rename sound/{ => announcer}/vox_fem/woop.ogg (100%) rename sound/{ => announcer}/vox_fem/work.ogg (100%) rename sound/{ => announcer}/vox_fem/worked.ogg (100%) rename sound/{ => announcer}/vox_fem/working.ogg (100%) rename sound/{ => announcer}/vox_fem/works.ogg (100%) rename sound/{ => announcer}/vox_fem/would.ogg (100%) rename sound/{ => announcer}/vox_fem/wouldnt.ogg (100%) rename sound/{ => announcer}/vox_fem/wow.ogg (100%) rename sound/{ => announcer}/vox_fem/wrench.ogg (100%) rename sound/{ => announcer}/vox_fem/wrenching.ogg (100%) rename sound/{ => announcer}/vox_fem/x.ogg (100%) rename sound/{ => announcer}/vox_fem/xeno.ogg (100%) rename sound/{ => announcer}/vox_fem/xenobiology.ogg (100%) rename sound/{ => announcer}/vox_fem/xenomorph.ogg (100%) rename sound/{ => announcer}/vox_fem/xenomorphs.ogg (100%) rename sound/{ => announcer}/vox_fem/y.ogg (100%) rename sound/{ => announcer}/vox_fem/yankee.ogg (100%) rename sound/{ => announcer}/vox_fem/yards.ogg (100%) rename sound/{ => announcer}/vox_fem/year.ogg (100%) rename sound/{ => announcer}/vox_fem/yellow.ogg (100%) rename sound/{ => announcer}/vox_fem/yes.ogg (100%) rename sound/{ => announcer}/vox_fem/you.ogg (100%) rename sound/{ => announcer}/vox_fem/your.ogg (100%) rename sound/{ => announcer}/vox_fem/yourself.ogg (100%) rename sound/{ => announcer}/vox_fem/z.ogg (100%) rename sound/{ => announcer}/vox_fem/zap.ogg (100%) rename sound/{ => announcer}/vox_fem/zauker.ogg (100%) rename sound/{ => announcer}/vox_fem/zero.ogg (100%) rename sound/{ => announcer}/vox_fem/zombie.ogg (100%) rename sound/{ => announcer}/vox_fem/zone.ogg (100%) rename sound/{ => announcer}/vox_fem/zulu.ogg (100%) rename sound/effects/{ => achievement}/beeps_jingle.ogg (100%) rename sound/effects/{ => achievement}/glockenspiel_ping.ogg (100%) rename sound/effects/{ => achievement}/tada_fanfare.ogg (100%) rename sound/effects/{ => bin}/bin_close.ogg (100%) rename sound/effects/{ => bin}/bin_open.ogg (100%) rename sound/effects/{ => blob}/attackblob.ogg (100%) rename sound/effects/{ => blob}/blobattack.ogg (100%) rename sound/effects/{ => bodyfall}/bodyfall1.ogg (100%) rename sound/effects/{ => bodyfall}/bodyfall2.ogg (100%) rename sound/effects/{ => bodyfall}/bodyfall3.ogg (100%) rename sound/effects/{ => bodyfall}/bodyfall4.ogg (100%) rename sound/effects/{ => bubbles}/bubbles.ogg (100%) rename sound/effects/{ => bubbles}/bubbles2.ogg (100%) rename sound/effects/{ => bush}/crunchybushwhack1.ogg (100%) rename sound/effects/{ => bush}/crunchybushwhack2.ogg (100%) rename sound/effects/{ => bush}/crunchybushwhack3.ogg (100%) rename sound/effects/{ => can}/can_open1.ogg (100%) rename sound/effects/{ => can}/can_open2.ogg (100%) rename sound/effects/{ => can}/can_open3.ogg (100%) rename sound/effects/{ => can}/can_pop.ogg (100%) rename sound/effects/{ => can}/can_shake.ogg (100%) rename sound/effects/{ => cartoon_sfx}/cartoon_pop.ogg (100%) rename sound/effects/{ => cartoon_sfx}/cartoon_splat.ogg (100%) rename sound/{ => effects}/chemistry/SoundSources.txt (100%) rename sound/{ => effects}/chemistry/ahaha.ogg (100%) rename sound/{ => effects}/chemistry/bluespace.ogg (100%) rename sound/{ => effects}/chemistry/bufferadd.ogg (100%) rename sound/{ => effects}/chemistry/catalyst.ogg (100%) rename sound/{ => effects}/chemistry/heatdam.ogg (100%) rename sound/{ => effects}/chemistry/saturnx_fade.ogg (100%) rename sound/{ => effects}/chemistry/shockwave_explosion.ogg (100%) create mode 100644 sound/effects/compressed_air/attribution.txt rename sound/effects/{ => compressed_air}/compressed_air1.ogg (100%) rename sound/effects/{ => compressed_air}/compressed_air2.ogg (100%) rename sound/effects/{ => compressed_air}/tank_insert_clunky.ogg (100%) rename sound/effects/{ => compressed_air}/tank_remove_thunk.ogg (100%) rename sound/effects/{ => creak}/creak1.ogg (100%) rename sound/effects/{ => creak}/creak2.ogg (100%) rename sound/effects/{ => creak}/creak3.ogg (100%) rename sound/effects/{ => curse}/curse1.ogg (100%) rename sound/effects/{ => curse}/curse2.ogg (100%) rename sound/effects/{ => curse}/curse3.ogg (100%) rename sound/effects/{ => curse}/curse4.ogg (100%) rename sound/effects/{ => curse}/curse5.ogg (100%) rename sound/effects/{ => curse}/curse6.ogg (100%) rename sound/effects/{ => curse}/curseattack.ogg (100%) rename sound/{misc => effects/desecration}/desecration-01.ogg (100%) rename sound/{misc => effects/desecration}/desecration-02.ogg (100%) rename sound/{misc => effects/desecration}/desecration-03.ogg (100%) rename sound/effects/{ => emotes}/assslap.ogg (100%) rename sound/effects/{ => emotes}/kiss.ogg (100%) rename sound/effects/{ => explosion}/explosion1.ogg (100%) rename sound/effects/{ => explosion}/explosion2.ogg (100%) rename sound/effects/{ => explosion}/explosion3.ogg (100%) rename sound/effects/{ => explosion}/explosion_distant.ogg (100%) rename sound/effects/{ => explosion}/explosioncreak1.ogg (100%) rename sound/effects/{ => explosion}/explosioncreak2.ogg (100%) rename sound/effects/{ => explosion}/explosionfar.ogg (100%) rename sound/effects/{ => footstep/water}/water1.ogg (100%) rename sound/effects/{ => footstep/water}/water2.ogg (100%) rename sound/effects/{ => footstep/water}/water3.ogg (100%) rename sound/effects/{ => footstep/water}/water4.ogg (100%) rename sound/effects/{ => glass}/glass_reverse.ogg (100%) rename sound/effects/{ => glass}/glassbash.ogg (100%) rename sound/effects/{ => glass}/glassbr1.ogg (100%) rename sound/effects/{ => glass}/glassbr2.ogg (100%) rename sound/effects/{ => glass}/glassbr3.ogg (100%) rename sound/effects/{ => glass}/glasshit.ogg (100%) rename sound/effects/{ => glass}/glassknock.ogg (100%) rename sound/{ => effects}/hallucinations/behind_you1.ogg (100%) rename sound/{ => effects}/hallucinations/behind_you2.ogg (100%) rename sound/{ => effects}/hallucinations/far_noise.ogg (100%) rename sound/{ => effects}/hallucinations/growl1.ogg (100%) rename sound/{ => effects}/hallucinations/growl2.ogg (100%) rename sound/{ => effects}/hallucinations/growl3.ogg (100%) rename sound/{ => effects}/hallucinations/i_see_you1.ogg (100%) rename sound/{ => effects}/hallucinations/i_see_you2.ogg (100%) rename sound/{ => effects}/hallucinations/im_here1.ogg (100%) rename sound/{ => effects}/hallucinations/im_here2.ogg (100%) rename sound/{ => effects}/hallucinations/look_up1.ogg (100%) rename sound/{ => effects}/hallucinations/look_up2.ogg (100%) rename sound/{ => effects}/hallucinations/over_here1.ogg (100%) rename sound/{ => effects}/hallucinations/over_here2.ogg (100%) rename sound/{ => effects}/hallucinations/over_here3.ogg (100%) rename sound/{ => effects}/hallucinations/radio_static.ogg (100%) rename sound/{ => effects}/hallucinations/turn_around1.ogg (100%) rename sound/{ => effects}/hallucinations/turn_around2.ogg (100%) rename sound/{ => effects}/hallucinations/veryfar_noise.ogg (100%) rename sound/{ => effects}/hallucinations/wail.ogg (100%) rename sound/{ => effects}/health/fastbeat.ogg (100%) rename sound/{ => effects}/health/slowbeat.ogg (100%) rename sound/effects/{ => his_grace}/his_grace_ascend.ogg (100%) rename sound/effects/{ => his_grace}/his_grace_awaken.ogg (100%) rename sound/effects/{ => liquid_pour}/liquid_pour1.ogg (100%) rename sound/effects/{ => liquid_pour}/liquid_pour2.ogg (100%) rename sound/effects/{ => liquid_pour}/liquid_pour3.ogg (100%) rename sound/{ => effects}/magic/RATTLEMEBONES.ogg (100%) rename sound/{ => effects}/magic/RATTLEMEBONES2.ogg (100%) rename sound/{ => effects}/magic/VoidDeflect01.ogg (100%) rename sound/{ => effects}/magic/VoidDeflect02.ogg (100%) rename sound/{ => effects}/magic/VoidDeflect03.ogg (100%) rename sound/{ => effects}/magic/blind.ogg (100%) rename sound/{ => effects}/magic/blink.ogg (100%) rename sound/{ => effects}/magic/castsummon.ogg (100%) rename sound/{ => effects}/magic/charge.ogg (100%) rename sound/{ => effects}/magic/clockwork/anima_fragment_attack.ogg (100%) rename sound/{ => effects}/magic/clockwork/anima_fragment_death.ogg (100%) rename sound/{ => effects}/magic/clockwork/ark_activation.ogg (100%) rename sound/{ => effects}/magic/clockwork/ark_activation_sequence.ogg (100%) rename sound/{ => effects}/magic/clockwork/credit.txt (100%) rename sound/{ => effects}/magic/clockwork/fellowship_armory.ogg (100%) rename sound/{ => effects}/magic/clockwork/invoke_general.ogg (100%) rename sound/{ => effects}/magic/clockwork/narsie_attack.ogg (100%) rename sound/{ => effects}/magic/clockwork/ratvar_attack.ogg (100%) rename sound/{ => effects}/magic/cosmic_energy.ogg (100%) rename sound/{ => effects}/magic/cosmic_expansion.ogg (100%) rename sound/{ => effects}/magic/cowhead_curse.ogg (100%) rename sound/{ => effects}/magic/curse.ogg (100%) rename sound/{ => effects}/magic/demon_attack1.ogg (100%) rename sound/{ => effects}/magic/demon_consume.ogg (100%) rename sound/{ => effects}/magic/demon_dies.ogg (100%) rename sound/{ => effects}/magic/disable_tech.ogg (100%) rename sound/{ => effects}/magic/disintegrate.ogg (100%) rename sound/{ => effects}/magic/enter_blood.ogg (100%) rename sound/{ => effects}/magic/ethereal_enter.ogg (100%) rename sound/{ => effects}/magic/ethereal_exit.ogg (100%) rename sound/{ => effects}/magic/exit_blood.ogg (100%) rename sound/{ => effects}/magic/fireball.ogg (100%) rename sound/{ => effects}/magic/fleshtostone.ogg (100%) rename sound/{ => effects}/magic/forcewall.ogg (100%) rename sound/{ => effects}/magic/hereticknock.ogg (100%) rename sound/{ => effects}/magic/horsehead_curse.ogg (100%) rename sound/{ => effects}/magic/knock.ogg (100%) rename sound/{ => effects}/magic/lightning_chargeup.ogg (100%) rename sound/{ => effects}/magic/lightningbolt.ogg (100%) rename sound/{ => effects}/magic/lightningshock.ogg (100%) rename sound/{ => effects}/magic/magic_block.ogg (100%) rename sound/{ => effects}/magic/magic_block_holy.ogg (100%) rename sound/{ => effects}/magic/magic_block_mind.ogg (100%) rename sound/{ => effects}/magic/magic_missile.ogg (100%) rename sound/{ => effects}/magic/mandswap.ogg (100%) rename sound/{ => effects}/magic/mm_hit.ogg (100%) rename sound/{ => effects}/magic/mutate.ogg (100%) rename sound/{ => effects}/magic/pantsaltar.ogg (100%) rename sound/{ => effects}/magic/pighead_curse.ogg (100%) rename sound/{ => effects}/magic/repulse.ogg (100%) rename sound/{ => effects}/magic/smoke.ogg (100%) rename sound/{ => effects}/magic/staff_animation.ogg (100%) rename sound/{ => effects}/magic/staff_change.ogg (100%) rename sound/{ => effects}/magic/staff_chaos.ogg (100%) rename sound/{ => effects}/magic/staff_door.ogg (100%) rename sound/{ => effects}/magic/staff_healing.ogg (100%) rename sound/{ => effects}/magic/staff_shrink.ogg (100%) rename sound/{ => effects}/magic/summon_guns.ogg (100%) rename sound/{ => effects}/magic/summon_karp.ogg (100%) rename sound/{ => effects}/magic/summon_magic.ogg (100%) rename sound/{ => effects}/magic/summonitems_generic.ogg (100%) rename sound/{ => effects}/magic/swap.ogg (100%) rename sound/{ => effects}/magic/tail_swing.ogg (100%) rename sound/{ => effects}/magic/teleport_app.ogg (100%) rename sound/{ => effects}/magic/teleport_diss.ogg (100%) rename sound/{ => effects}/magic/timeparadox2.ogg (100%) rename sound/{ => effects}/magic/voidblink.ogg (100%) rename sound/{ => effects}/magic/wand_teleport.ogg (100%) rename sound/{ => effects}/magic/wandodeath.ogg (100%) rename sound/{ => effects}/magic/warpwhistle.ogg (100%) rename sound/effects/{ => page_turn}/pageturn1.ogg (100%) rename sound/effects/{ => page_turn}/pageturn2.ogg (100%) rename sound/effects/{ => page_turn}/pageturn3.ogg (100%) rename sound/effects/{ => pickaxe}/picaxe1.ogg (100%) rename sound/effects/{ => pickaxe}/picaxe2.ogg (100%) rename sound/effects/{ => pickaxe}/picaxe3.ogg (100%) rename sound/effects/{ => portal}/portal_close.ogg (100%) rename sound/effects/{ => portal}/portal_open_1.ogg (100%) rename sound/effects/{ => portal}/portal_open_2.ogg (100%) rename sound/effects/{ => portal}/portal_open_3.ogg (100%) rename sound/effects/{ => portal}/portal_travel.ogg (100%) rename sound/effects/{ => rock}/rock_break.ogg (100%) rename sound/effects/{ => rock}/rocktap1.ogg (100%) rename sound/effects/{ => rock}/rocktap2.ogg (100%) rename sound/effects/{ => rock}/rocktap3.ogg (100%) rename sound/effects/{ => rustle}/rustle1.ogg (100%) rename sound/effects/{ => rustle}/rustle2.ogg (100%) rename sound/effects/{ => rustle}/rustle3.ogg (100%) rename sound/effects/{ => rustle}/rustle4.ogg (100%) rename sound/effects/{ => rustle}/rustle5.ogg (100%) rename sound/effects/{ => soup_boil}/soup_boil1.ogg (100%) rename sound/effects/{ => soup_boil}/soup_boil2.ogg (100%) rename sound/effects/{ => soup_boil}/soup_boil3.ogg (100%) rename sound/effects/{ => soup_boil}/soup_boil4.ogg (100%) rename sound/effects/{ => soup_boil}/soup_boil5.ogg (100%) rename sound/effects/{ => soup_boil}/soup_boil_end.ogg (100%) rename sound/effects/{ => sparks}/sparks1.ogg (100%) rename sound/effects/{ => sparks}/sparks2.ogg (100%) rename sound/effects/{ => sparks}/sparks3.ogg (100%) rename sound/effects/{ => sparks}/sparks4.ogg (100%) rename sound/effects/{ => treechop}/treechop1.ogg (100%) rename sound/effects/{ => treechop}/treechop2.ogg (100%) rename sound/effects/{ => treechop}/treechop3.ogg (100%) rename sound/items/{ => airhorn}/airhorn.ogg (100%) rename sound/items/{ => airhorn}/airhorn2.ogg (100%) rename sound/items/{ => cards}/cardflip.ogg (100%) rename sound/items/{ => cards}/cardshuffle.ogg (100%) rename sound/items/{ => duct_tape}/duct_tape_rip.ogg (100%) rename sound/items/{ => duct_tape}/duct_tape_snap.ogg (100%) rename sound/items/{ => fulton}/fultext_deploy.ogg (100%) rename sound/items/{ => fulton}/fultext_launch.ogg (100%) rename sound/items/{ => handling/cardboard_box}/cardboard_box_open.ogg (100%) rename sound/items/{ => handling/cardboard_box}/cardboard_box_rustle.ogg (100%) rename sound/items/handling/{ => cardboard_box}/cardboardbox_drop.ogg (100%) rename sound/items/handling/{ => cardboard_box}/cardboardbox_pickup.ogg (100%) rename sound/items/{ => handling/gas_tank}/gas_tank_drop.ogg (100%) rename sound/items/{ => handling/gas_tank}/gas_tank_pick_up.ogg (100%) rename sound/items/{ => handling/grenade}/grenade_drop.ogg (100%) rename sound/items/{ => handling/grenade}/grenade_pick_up.ogg (100%) rename sound/items/{ => handling/gun}/gun_drop.ogg (100%) rename sound/items/{ => handling/gun}/gun_pick_up.ogg (100%) rename sound/items/{ => handling/handcuffs}/handcuffs_drop.ogg (100%) rename sound/items/{ => handling/handcuffs}/handcuffs_pick_up.ogg (100%) rename sound/items/{holster.ogg => handling/holster_open.ogg} (100%) rename sound/items/{ => handling/lead_pipe}/lead_pipe_drop.ogg (100%) rename sound/items/{ => handling/lead_pipe}/lead_pipe_pickup.ogg (100%) rename sound/items/{ => handling/materials}/cardboard_drop.ogg (100%) rename sound/items/{ => handling/materials}/cardboard_pick_up.ogg (100%) rename sound/items/{ => handling/materials}/glass_drop.ogg (100%) rename sound/items/{ => handling/materials}/glass_pick_up.ogg (100%) rename sound/items/{ => handling/materials}/iron_rod_pick_up.ogg (100%) rename sound/items/{ => handling/materials}/metal_drop.ogg (100%) rename sound/items/{ => handling/materials}/metal_pick_up.ogg (100%) rename sound/items/{ => handling/materials}/plastic_drop.ogg (100%) rename sound/items/{ => handling/materials}/plastic_pick_up.ogg (100%) rename sound/items/{ => handling/materials}/skin_drop.ogg (100%) rename sound/items/{ => handling/materials}/skin_pick_up.ogg (100%) rename sound/items/{ => handling/materials}/wood_drop.ogg (100%) rename sound/items/{ => handling/materials}/wood_pick_up.ogg (100%) rename sound/items/{ => handling/medkit}/medkit_drop.ogg (100%) rename sound/items/{ => handling/medkit}/medkit_open.ogg (100%) rename sound/items/{ => handling/medkit}/medkit_pick_up.ogg (100%) rename sound/items/{ => handling/medkit}/medkit_rustle.ogg (100%) rename sound/items/{ => handling/pepper_spray}/pepper_spray_drop.ogg (100%) rename sound/items/{ => handling/pepper_spray}/pepper_spray_pick_up.ogg (100%) create mode 100644 sound/items/handling/readme.txt rename sound/items/{ => handling/shield}/plastic_shield_drop.ogg (100%) rename sound/items/{ => handling/shield}/plastic_shield_pick_up.ogg (100%) rename sound/{ => items/handling}/surgery/cautery1.ogg (100%) rename sound/{ => items/handling}/surgery/cautery2.ogg (100%) rename sound/{ => items/handling}/surgery/hemostat1.ogg (100%) rename sound/{ => items/handling}/surgery/organ1.ogg (100%) rename sound/{ => items/handling}/surgery/organ2.ogg (100%) rename sound/{ => items/handling}/surgery/retractor1.ogg (100%) rename sound/{ => items/handling}/surgery/retractor2.ogg (100%) rename sound/{ => items/handling}/surgery/saw.ogg (100%) rename sound/{ => items/handling}/surgery/scalpel1.ogg (100%) rename sound/{ => items/handling}/surgery/scalpel2.ogg (100%) rename sound/items/handling/{ => toolbox}/toolbox_drop.ogg (100%) rename sound/items/{ => handling/toolbox}/toolbox_open.ogg (100%) rename sound/items/handling/{ => toolbox}/toolbox_pickup.ogg (100%) rename sound/items/{ => handling/toolbox}/toolbox_rustle.ogg (100%) rename sound/items/handling/{ => tools}/crowbar_drop.ogg (100%) rename sound/items/handling/{ => tools}/crowbar_pickup.ogg (100%) rename sound/items/handling/{ => tools}/multitool_drop.ogg (100%) rename sound/items/handling/{ => tools}/multitool_pickup.ogg (100%) rename sound/items/handling/{ => tools}/rcd_drop.ogg (100%) rename sound/items/handling/{ => tools}/rcd_pickup.ogg (100%) rename sound/items/handling/{ => tools}/rpd_drop.ogg (100%) rename sound/items/handling/{ => tools}/rpd_pickup.ogg (100%) rename sound/items/handling/{ => tools}/screwdriver_drop.ogg (100%) rename sound/items/handling/{ => tools}/screwdriver_pickup.ogg (100%) rename sound/items/handling/{ => tools}/weldingtool_drop.ogg (100%) rename sound/items/handling/{ => tools}/weldingtool_pickup.ogg (100%) rename sound/items/handling/{ => tools}/wirecutter_drop.ogg (100%) rename sound/items/handling/{ => tools}/wirecutter_pickup.ogg (100%) rename sound/items/handling/{ => tools}/wrench_drop.ogg (100%) rename sound/items/handling/{ => tools}/wrench_pickup.ogg (100%) rename sound/items/{ => internals}/internals_off.ogg (100%) rename sound/items/{ => internals}/internals_on.ogg (100%) rename sound/items/{ => knell}/knell1.ogg (100%) rename sound/items/{ => knell}/knell2.ogg (100%) rename sound/items/{ => knell}/knell3.ogg (100%) rename sound/items/{ => knell}/knell4.ogg (100%) create mode 100644 sound/items/lighter/attribution.txt rename sound/items/{ => lighter}/cig_light.ogg (100%) rename sound/items/{ => lighter}/cig_snuff.ogg (100%) rename sound/items/{ => lighter}/lighter_off.ogg (100%) rename sound/items/{ => lighter}/lighter_on.ogg (100%) rename sound/items/{ => lighter}/zippo_off.ogg (100%) rename sound/items/{ => lighter}/zippo_on.ogg (100%) rename sound/items/{ => pillow}/pillow_hit.ogg (100%) rename sound/items/{ => pillow}/pillow_hit2.ogg (100%) rename sound/items/{ => polaroid}/polaroid1.ogg (100%) rename sound/items/{ => polaroid}/polaroid2.ogg (100%) rename sound/items/{ => poster}/poster_being_created.ogg (100%) rename sound/items/{ => poster}/poster_ripped.ogg (100%) rename sound/items/{ => pshoom}/pshoom.ogg (100%) rename sound/items/{ => pshoom}/pshoom_2.ogg (100%) create mode 100644 sound/items/radio/attribution.txt rename sound/{misc => items/radio}/radio_important.ogg (100%) rename sound/{misc => items/radio}/radio_receive.ogg (100%) rename sound/{misc => items/radio}/radio_talk.ogg (100%) rename sound/items/{ => rattle}/rattle1.ogg (100%) rename sound/items/{ => rattle}/rattle2.ogg (100%) rename sound/items/{ => rattle}/rattle3.ogg (100%) rename sound/items/{ => reel}/reel1.ogg (100%) rename sound/items/{ => reel}/reel2.ogg (100%) rename sound/items/{ => reel}/reel3.ogg (100%) rename sound/items/{ => reel}/reel4.ogg (100%) rename sound/items/{ => reel}/reel5.ogg (100%) rename sound/{voice => items/sec_hailer}/sec_death.ogg (100%) rename sound/items/{ => sitcom_laugh}/SitcomLaugh1.ogg (100%) rename sound/items/{ => sitcom_laugh}/SitcomLaugh2.ogg (100%) rename sound/items/{ => sitcom_laugh}/SitcomLaugh3.ogg (100%) rename sound/items/{ => tools}/change_drill.ogg (100%) rename sound/items/{ => tools}/change_jaws.ogg (100%) rename sound/items/{ => tools}/crowbar.ogg (100%) rename sound/items/{ => tools}/crowbar_prying.ogg (100%) rename sound/items/{ => tools}/drill_hit.ogg (100%) rename sound/items/{ => tools}/drill_use.ogg (100%) rename sound/items/{ => tools}/jaws_cut.ogg (100%) rename sound/items/{ => tools}/jaws_pry.ogg (100%) rename sound/items/{ => tools}/ratchet.ogg (100%) rename sound/items/{ => tools}/ratchet_fast.ogg (100%) rename sound/items/{ => tools}/ratchet_slow.ogg (100%) rename sound/items/{ => tools}/rcdscan.ogg (100%) rename sound/items/{ => tools}/rped.ogg (100%) rename sound/items/{ => tools}/screwdriver.ogg (100%) rename sound/items/{ => tools}/screwdriver2.ogg (100%) rename sound/items/{ => tools}/screwdriver_operating.ogg (100%) rename sound/items/{handling => tools}/tool_switch.ogg (100%) rename sound/items/{ => tools}/welder.ogg (100%) rename sound/items/{ => tools}/welder2.ogg (100%) rename sound/items/{ => tools}/welderactivate.ogg (100%) rename sound/items/{ => tools}/welderdeactivate.ogg (100%) rename sound/items/{ => tools}/wirecutter.ogg (100%) rename sound/items/{ => tools}/wirecutter_cut.ogg (100%) rename sound/items/{ => toy_squeak}/toysqueak1.ogg (100%) rename sound/items/{ => toy_squeak}/toysqueak2.ogg (100%) rename sound/items/{ => toy_squeak}/toysqueak3.ogg (100%) rename sound/items/{ => trayhit}/trayhit1.ogg (100%) rename sound/items/{ => trayhit}/trayhit2.ogg (100%) rename sound/{ => items}/weapons/armbomb.ogg (100%) rename sound/{ => items}/weapons/autoguninsert.ogg (100%) rename sound/{ => items}/weapons/banjoslap.ogg (100%) rename sound/{ => items}/weapons/barragespellhit.ogg (100%) rename sound/{ => items}/weapons/batonextend.ogg (100%) rename sound/{ => items}/weapons/beam_sniper.ogg (100%) rename sound/{ => items}/weapons/beesmoke.ogg (100%) rename sound/{ => items}/weapons/bite.ogg (100%) rename sound/{ => items}/weapons/blade1.ogg (100%) rename sound/{ => items}/weapons/bladeslice.ogg (100%) rename sound/{ => items}/weapons/blastcannon.ogg (100%) rename sound/{ => items}/weapons/blaster.ogg (100%) rename sound/{ => items}/weapons/block_blade.ogg (100%) rename sound/{ => items}/weapons/block_shield.ogg (100%) rename sound/{ => items}/weapons/bolathrow.ogg (100%) rename sound/{ => items}/weapons/bulletflyby.ogg (100%) rename sound/{ => items}/weapons/bulletflyby2.ogg (100%) rename sound/{ => items}/weapons/bulletflyby3.ogg (100%) rename sound/{ => items}/weapons/cablecuff.ogg (100%) rename sound/{ => items}/weapons/chainhit.ogg (100%) rename sound/{ => items}/weapons/chainsaw_loop.ogg (100%) rename sound/{ => items}/weapons/chainsaw_start.ogg (100%) rename sound/{ => items}/weapons/chainsaw_stop.ogg (100%) rename sound/{ => items}/weapons/chainsawhit.ogg (100%) rename sound/{ => items}/weapons/circsawhit.ogg (100%) rename sound/{effects => items/weapons/contractor_baton}/contractorbatonhit.ogg (100%) rename sound/{ => items}/weapons/contractorbatonextend.ogg (100%) rename sound/{ => items}/weapons/cqchit1.ogg (100%) rename sound/{ => items}/weapons/cqchit2.ogg (100%) rename sound/{ => items}/weapons/draw_bow.ogg (100%) rename sound/{ => items}/weapons/draw_bow2.ogg (100%) rename sound/{ => items}/weapons/drill.ogg (100%) rename sound/{ => items}/weapons/effects/batreflect.ogg (100%) rename sound/{ => items}/weapons/effects/ric1.ogg (100%) rename sound/{ => items}/weapons/effects/ric2.ogg (100%) rename sound/{ => items}/weapons/effects/ric3.ogg (100%) rename sound/{ => items}/weapons/effects/ric4.ogg (100%) rename sound/{ => items}/weapons/effects/ric5.ogg (100%) rename sound/{ => items}/weapons/effects/searwall.ogg (100%) rename sound/{ => items}/weapons/egloves.ogg (100%) rename sound/{ => items}/weapons/emitter.ogg (100%) rename sound/{ => items}/weapons/emitter2.ogg (100%) rename sound/{ => items}/weapons/empty.ogg (100%) rename sound/{ => items}/weapons/etherealhit.ogg (100%) rename sound/{ => items}/weapons/etherealmiss.ogg (100%) rename sound/{ => items}/weapons/flash.ogg (100%) rename sound/{ => items}/weapons/flash_ring.ogg (100%) rename sound/{ => items}/weapons/flashbang.ogg (100%) rename sound/{ => items}/weapons/fwoosh.ogg (100%) rename sound/{ => items}/weapons/genhit.ogg (100%) rename sound/{ => items}/weapons/genhit1.ogg (100%) rename sound/{ => items}/weapons/genhit2.ogg (100%) rename sound/{ => items}/weapons/genhit3.ogg (100%) rename sound/{ => items}/weapons/guillotine.ogg (100%) rename sound/{ => items}/weapons/gun/bow/attribution.txt (100%) rename sound/{ => items}/weapons/gun/bow/bow_draw.ogg (100%) rename sound/{ => items}/weapons/gun/bow/bow_fire.ogg (100%) rename sound/{ => items}/weapons/gun/general/ballistic_click.ogg (100%) rename sound/{ => items}/weapons/gun/general/bolt_drop.ogg (100%) rename sound/{ => items}/weapons/gun/general/bolt_rack.ogg (100%) rename sound/{ => items}/weapons/gun/general/cannon.ogg (100%) rename sound/{ => items}/weapons/gun/general/chunkyrack.ogg (100%) rename sound/{ => items}/weapons/gun/general/dry_fire.ogg (100%) rename sound/{ => items}/weapons/gun/general/empty_alarm.ogg (100%) rename sound/{ => items}/weapons/gun/general/grenade_launch.ogg (100%) rename sound/{ => items}/weapons/gun/general/heavy_shot_suppressed.ogg (100%) rename sound/{ => items}/weapons/gun/general/mag_bullet_insert.ogg (100%) rename sound/{ => items}/weapons/gun/general/mag_bullet_remove.ogg (100%) rename sound/{ => items}/weapons/gun/general/magazine_insert_empty.ogg (100%) rename sound/{ => items}/weapons/gun/general/magazine_insert_full.ogg (100%) rename sound/{ => items}/weapons/gun/general/magazine_remove_empty.ogg (100%) rename sound/{ => items}/weapons/gun/general/magazine_remove_full.ogg (100%) rename sound/{ => items}/weapons/gun/general/mountedgun.ogg (100%) rename sound/{ => items}/weapons/gun/general/mountedgunend.ogg (100%) rename sound/{ => items}/weapons/gun/general/rocket_launch.ogg (100%) rename sound/{ => items}/weapons/gun/general/slide_lock_1.ogg (100%) rename sound/{ => items}/weapons/gun/hmg/hmg.ogg (100%) rename sound/{ => items}/weapons/gun/l6/l6_door.ogg (100%) rename sound/{ => items}/weapons/gun/l6/l6_rack.ogg (100%) rename sound/{ => items}/weapons/gun/l6/shot.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/drop_small.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/dry_fire.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/lock_small.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/mag_insert.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/mag_release.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/rack.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/rack_small.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/shot.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/shot_alt.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/shot_suppressed.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/slide_drop.ogg (100%) rename sound/{ => items}/weapons/gun/pistol/slide_lock.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/dry_fire.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/empty.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/load_bullet.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/shot.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/shot_alt.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/spin1.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/spin2.ogg (100%) rename sound/{ => items}/weapons/gun/revolver/spin3.ogg (100%) rename sound/{ => items}/weapons/gun/rifle/bolt_in.ogg (100%) rename sound/{ => items}/weapons/gun/rifle/bolt_out.ogg (100%) rename sound/{ => items}/weapons/gun/rifle/shot.ogg (100%) rename sound/{ => items}/weapons/gun/rifle/shot_heavy.ogg (100%) rename sound/{ => items}/weapons/gun/shotgun/insert_shell.ogg (100%) rename sound/{ => items}/weapons/gun/shotgun/rack.ogg (100%) rename sound/{ => items}/weapons/gun/shotgun/shot.ogg (100%) rename sound/{ => items}/weapons/gun/shotgun/shot_alt.ogg (100%) rename sound/{ => items}/weapons/gun/smartgun/smartgun_shoot_1.ogg (100%) rename sound/{ => items}/weapons/gun/smartgun/smartgun_shoot_2.ogg (100%) rename sound/{ => items}/weapons/gun/smartgun/smartgun_shoot_3.ogg (100%) rename sound/{ => items}/weapons/gun/smg/shot.ogg (100%) rename sound/{ => items}/weapons/gun/smg/shot_alt.ogg (100%) rename sound/{ => items}/weapons/gun/smg/shot_suppressed.ogg (100%) rename sound/{ => items}/weapons/gun/smg/smgrack.ogg (100%) rename sound/{ => items}/weapons/gun/sniper/mag_insert.ogg (100%) rename sound/{ => items}/weapons/gun/sniper/rack.ogg (100%) rename sound/{ => items}/weapons/gun/sniper/shot.ogg (100%) rename sound/{ => items}/weapons/handcuffs.ogg (100%) rename sound/{ => items}/weapons/homerun.ogg (100%) rename sound/{ => items}/weapons/ionrifle.ogg (100%) rename sound/{ => items}/weapons/jammed.ogg (100%) rename sound/{ => items}/weapons/kinetic_accel.ogg (100%) rename sound/{ => items}/weapons/kinetic_reload.ogg (100%) rename sound/{ => items}/weapons/laser.ogg (100%) rename sound/{ => items}/weapons/laser2.ogg (100%) rename sound/{ => items}/weapons/laser3.ogg (100%) rename sound/{ => items}/weapons/laser_crank.ogg (100%) rename sound/{ => items}/weapons/lasercannonfire.ogg (100%) rename sound/{ => items}/weapons/magin.ogg (100%) rename sound/{ => items}/weapons/magout.ogg (100%) rename sound/{ => items}/weapons/marauder.ogg (100%) rename sound/{ => items}/weapons/minebot_rocket.ogg (100%) rename sound/{ => items}/weapons/mortar_long_whistle.ogg (100%) rename sound/{ => items}/weapons/mortar_whistle.ogg (100%) rename sound/{ => items}/weapons/parry.ogg (100%) rename sound/{ => items}/weapons/pierce.ogg (100%) rename sound/{ => items}/weapons/pierce_slow.ogg (100%) rename sound/{ => items}/weapons/plasma_cutter.ogg (100%) rename sound/{ => items}/weapons/pulse.ogg (100%) rename sound/{ => items}/weapons/pulse2.ogg (100%) rename sound/{ => items}/weapons/pulse3.ogg (100%) rename sound/{ => items}/weapons/punch1.ogg (100%) rename sound/{ => items}/weapons/punch2.ogg (100%) rename sound/{ => items}/weapons/punch3.ogg (100%) rename sound/{ => items}/weapons/punch4.ogg (100%) rename sound/{ => items}/weapons/punchmiss.ogg (100%) rename sound/{ => items}/weapons/rapierhit.ogg (100%) rename sound/{ => items}/weapons/resonator_blast.ogg (100%) rename sound/{ => items}/weapons/resonator_fire.ogg (100%) rename sound/{ => items}/weapons/ring.ogg (100%) rename sound/{ => items}/weapons/saberoff.ogg (100%) rename sound/{ => items}/weapons/saberon.ogg (100%) rename sound/{ => items}/weapons/scope.ogg (100%) rename sound/{ => items}/weapons/sear.ogg (100%) rename sound/{ => items}/weapons/sear_disabler.ogg (100%) rename sound/{ => items}/weapons/shove.ogg (100%) rename sound/{ => items}/weapons/shrink_hit.ogg (100%) rename sound/{ => items}/weapons/slam.ogg (100%) rename sound/{ => items}/weapons/slap.ogg (100%) rename sound/{ => items}/weapons/slash.ogg (100%) rename sound/{ => items}/weapons/slashmiss.ogg (100%) rename sound/{ => items}/weapons/slice.ogg (100%) rename sound/{ => items}/weapons/smash.ogg (100%) rename sound/{ => items}/weapons/solarflare.ogg (100%) rename sound/{ => items}/weapons/sonic_jackhammer.ogg (100%) rename sound/{ => items}/weapons/stringsmash.ogg (100%) rename sound/{ => items}/weapons/tap.ogg (100%) rename sound/{ => items}/weapons/taser.ogg (100%) rename sound/{ => items}/weapons/taser2.ogg (100%) rename sound/{ => items}/weapons/taser3.ogg (100%) rename sound/{ => items}/weapons/taserhit.ogg (100%) rename sound/{ => items}/weapons/thermalpistol.ogg (100%) rename sound/{ => items}/weapons/throw.ogg (100%) rename sound/{ => items}/weapons/throwhard.ogg (100%) rename sound/{ => items}/weapons/throwsoft.ogg (100%) rename sound/{ => items}/weapons/throwtap.ogg (100%) rename sound/{ => items}/weapons/thudswoosh.ogg (100%) rename sound/{ => items}/weapons/wave.ogg (100%) rename sound/{ => items}/weapons/whip.ogg (100%) rename sound/{ => items}/weapons/whipgrab.ogg (100%) rename sound/{ => items}/weapons/zapbang.ogg (100%) rename sound/{ => items}/weapons/zipline_fire.ogg (100%) rename sound/{ => items}/weapons/zipline_hit.ogg (100%) rename sound/{ => items}/weapons/zipline_mid.ogg (100%) rename sound/{misc => items/whistle}/whistle.ogg (100%) rename sound/items/{ => zip}/un_zip.ogg (100%) rename sound/items/{ => zip}/zip.ogg (100%) rename sound/items/{ => zip}/zip_up.ogg (100%) rename sound/machines/{ => airlock}/airlock.ogg (100%) rename sound/machines/{ => airlock}/airlock_alien_prying.ogg (100%) rename sound/machines/{ => airlock}/airlockclose.ogg (100%) rename sound/machines/{ => airlock}/airlockforced.ogg (100%) rename sound/machines/{ => airlock}/airlockopen.ogg (100%) rename sound/machines/{ => airlock}/boltsdown.ogg (100%) rename sound/machines/{ => airlock}/boltsup.ogg (100%) rename sound/machines/{ => airlock}/doorclick.ogg (100%) rename sound/{ => machines}/arcade/boom.ogg (100%) rename sound/{ => machines}/arcade/heal.ogg (100%) rename sound/{ => machines}/arcade/hit.ogg (100%) rename sound/{ => machines}/arcade/lose.ogg (100%) rename sound/{ => machines}/arcade/mana.ogg (100%) rename sound/{ => machines}/arcade/steal.ogg (100%) rename sound/{ => machines}/arcade/win.ogg (100%) rename sound/machines/{ => beep}/beep.ogg (100%) rename sound/machines/{ => beep}/deniedbeep.ogg (100%) rename sound/machines/{ => beep}/triple_beep.ogg (100%) rename sound/machines/{ => beep}/twobeep.ogg (100%) rename sound/machines/{ => beep}/twobeep_high.ogg (100%) rename sound/machines/{ => beep}/twobeep_voice1.ogg (100%) rename sound/machines/{ => beep}/twobeep_voice2.ogg (100%) rename sound/machines/{ => buzz}/buzz-sigh.ogg (100%) rename sound/machines/{ => buzz}/buzz-two.ogg (100%) rename sound/machines/{ => closet}/closet_close.ogg (100%) rename sound/machines/{ => closet}/closet_open.ogg (100%) rename sound/machines/{ => closet}/wooden_closet_close.ogg (100%) rename sound/machines/{ => closet}/wooden_closet_open.ogg (100%) rename sound/{misc => machines/compiler}/compiler-failure.ogg (100%) rename sound/{misc => machines/compiler}/compiler-stage1.ogg (100%) rename sound/{misc => machines/compiler}/compiler-stage2.ogg (100%) create mode 100644 sound/machines/crate/attribution.txt rename sound/machines/{ => crate}/crate_close.ogg (100%) rename sound/machines/{ => crate}/crate_open.ogg (100%) rename sound/machines/{ => defib}/defib_SaftyOn.ogg (100%) rename sound/machines/{ => defib}/defib_charge.ogg (100%) rename sound/machines/{ => defib}/defib_failed.ogg (100%) rename sound/machines/{ => defib}/defib_ready.ogg (100%) rename sound/machines/{ => defib}/defib_saftyOff.ogg (100%) rename sound/machines/{ => defib}/defib_success.ogg (100%) rename sound/machines/{ => defib}/defib_zap.ogg (100%) rename sound/machines/{ => door}/door_close.ogg (100%) rename sound/machines/{ => door}/door_locked.ogg (100%) rename sound/machines/{ => door}/door_open.ogg (100%) rename sound/machines/{ => engine_alert}/engine_alert1.ogg (100%) rename sound/machines/{ => engine_alert}/engine_alert2.ogg (100%) rename sound/machines/{ => engine_alert}/engine_alert3.ogg (100%) rename sound/machines/{ => fan}/fan_break.ogg (100%) rename sound/machines/{ => fan}/fan_loop.ogg (100%) rename sound/machines/{ => fan}/fan_start.ogg (100%) rename sound/machines/{ => fan}/fan_stop.ogg (100%) rename sound/machines/{ => fire_alarm}/FireAlarm1.ogg (100%) rename sound/machines/{ => fire_alarm}/FireAlarm2.ogg (100%) rename sound/machines/{ => fire_alarm}/FireAlarm3.ogg (100%) rename sound/machines/{ => fire_alarm}/FireAlarm4.ogg (100%) rename sound/{effects => machines/gateway}/gateway_calibrated.ogg (100%) rename sound/{effects => machines/gateway}/gateway_calibrating.ogg (100%) rename sound/{effects => machines/gateway}/gateway_close.ogg (100%) rename sound/{effects => machines/gateway}/gateway_open.ogg (100%) rename sound/{effects => machines/gateway}/gateway_travel.ogg (100%) rename sound/machines/{ => lathe}/attributions.txt (100%) rename sound/{ => machines}/lavaland/cursed_slot_machine.ogg (100%) rename sound/{ => machines}/lavaland/cursed_slot_machine_jackpot.ogg (100%) create mode 100644 sound/machines/lever/attribution.txt rename sound/machines/{ => lever}/lever_start.ogg (100%) rename sound/machines/{ => lever}/lever_stop.ogg (100%) rename sound/machines/{ => pda_button}/pda_button1.ogg (100%) rename sound/machines/{ => pda_button}/pda_button2.ogg (100%) rename sound/machines/{ => piston}/piston_lower.ogg (100%) rename sound/machines/{ => piston}/piston_raise.ogg (100%) rename sound/machines/{ => roulette}/roulettejackpot.ogg (100%) rename sound/machines/{ => roulette}/roulettewheel.ogg (100%) rename sound/machines/{ => scanner}/scanbuzz.ogg (100%) rename sound/machines/{ => scanner}/scanner.ogg (100%) rename sound/machines/{ => synth}/synth_no.ogg (100%) rename sound/machines/{ => synth}/synth_yes.ogg (100%) rename sound/machines/{ => terminal}/terminal_alert.ogg (100%) rename sound/machines/{ => terminal}/terminal_button01.ogg (100%) rename sound/machines/{ => terminal}/terminal_button02.ogg (100%) rename sound/machines/{ => terminal}/terminal_button03.ogg (100%) rename sound/machines/{ => terminal}/terminal_button04.ogg (100%) rename sound/machines/{ => terminal}/terminal_button05.ogg (100%) rename sound/machines/{ => terminal}/terminal_button06.ogg (100%) rename sound/machines/{ => terminal}/terminal_button07.ogg (100%) rename sound/machines/{ => terminal}/terminal_button08.ogg (100%) rename sound/machines/{ => terminal}/terminal_eject.ogg (100%) rename sound/machines/{ => terminal}/terminal_error.ogg (100%) rename sound/machines/{ => terminal}/terminal_insert_disc.ogg (100%) rename sound/machines/{ => terminal}/terminal_off.ogg (100%) rename sound/machines/{ => terminal}/terminal_on.ogg (100%) rename sound/machines/{ => terminal}/terminal_processing.ogg (100%) rename sound/machines/{ => terminal}/terminal_prompt.ogg (100%) rename sound/machines/{ => terminal}/terminal_prompt_confirm.ogg (100%) rename sound/machines/{ => terminal}/terminal_prompt_deny.ogg (100%) rename sound/machines/{ => terminal}/terminal_select.ogg (100%) rename sound/machines/{ => terminal}/terminal_success.ogg (100%) rename sound/machines/{ => tram}/tramclose.ogg (100%) rename sound/machines/{ => tram}/tramopen.ogg (100%) rename sound/machines/{ => uplink}/uplinkerror.ogg (100%) rename sound/machines/{ => uplink}/uplinkpurchase.ogg (100%) rename sound/{voice => misc}/insane_low_laugh.ogg (100%) rename sound/{voice => misc}/roleplay.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/attribution.txt (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing1.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing2.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing3.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing4.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing5.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing6.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing7.ogg (100%) rename sound/{voice => mobs/humanoids}/breathing/internals_breathing8.ogg (100%) rename sound/{effects => mobs/humanoids/ethereal}/ethereal_crystalization.ogg (100%) rename sound/{effects => mobs/humanoids/ethereal}/ethereal_revive.ogg (100%) rename sound/{effects => mobs/humanoids/ethereal}/ethereal_revive_fail.ogg (100%) rename sound/{voice => mobs/humanoids}/ethereal/ethereal_scream_1.ogg (100%) rename sound/{voice => mobs/humanoids}/ethereal/ethereal_scream_2.ogg (100%) rename sound/{voice => mobs/humanoids}/ethereal/ethereal_scream_3.ogg (100%) rename sound/{voice => mobs/humanoids}/ethereal/lustrous_scream_1.ogg (100%) rename sound/{voice => mobs/humanoids}/ethereal/lustrous_scream_2.ogg (100%) rename sound/{voice => mobs/humanoids}/ethereal/lustrous_scream_3.ogg (100%) create mode 100644 sound/mobs/humanoids/human/attribution.txt rename sound/{misc => mobs/humanoids/human/clap}/clap1.ogg (100%) rename sound/{misc => mobs/humanoids/human/clap}/clap2.ogg (100%) rename sound/{misc => mobs/humanoids/human/clap}/clap3.ogg (100%) rename sound/{misc => mobs/humanoids/human/clap}/clap4.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/female_cough1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/female_cough2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/female_cough3.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/female_cough4.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/female_cough5.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/female_cough6.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/male_cough1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/male_cough2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/male_cough3.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/male_cough4.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/male_cough5.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cough}/male_cough6.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cry}/female_cry1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cry}/female_cry2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cry}/male_cry1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cry}/male_cry2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/cry}/male_cry3.ogg (100%) rename sound/{creatures => mobs/humanoids/human/gag_vomit}/crack_vomit.ogg (100%) rename sound/{creatures => mobs/humanoids/human/gag_vomit}/gag1.ogg (100%) rename sound/{creatures => mobs/humanoids/human/gag_vomit}/gag2.ogg (100%) rename sound/{creatures => mobs/humanoids/human/gag_vomit}/gag3.ogg (100%) rename sound/{creatures => mobs/humanoids/human/gag_vomit}/gag4.ogg (100%) rename sound/{creatures => mobs/humanoids/human/gag_vomit}/gag5.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/gasp}/gasp_female1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/gasp}/gasp_female2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/gasp}/gasp_female3.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/gasp}/gasp_male1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/gasp}/gasp_male2.ogg (100%) rename sound/{effects => mobs/humanoids/human/hiccup}/sf_hiccup_male_01.ogg (100%) create mode 100644 sound/mobs/humanoids/human/knuckle_crack/attribution.txt rename sound/{misc => mobs/humanoids/human/knuckle_crack}/knuckles.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/laugh}/manlaugh1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/laugh}/manlaugh2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/laugh}/womanlaugh.ogg (100%) rename sound/{misc => mobs/humanoids/human/salute}/salute.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/femalescream_1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/femalescream_2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/femalescream_3.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/femalescream_4.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/femalescream_5.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/malescream_1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/malescream_2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/malescream_3.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/malescream_4.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/malescream_5.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/malescream_6.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/scream}/wilhelm_scream.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/sigh}/female_sigh.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/sigh}/male_sigh.ogg (100%) rename sound/{misc => mobs/humanoids/human/snap}/fingersnap1.ogg (100%) rename sound/{misc => mobs/humanoids/human/snap}/fingersnap2.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/sneeze}/female_sneeze1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/sneeze}/male_sneeze1.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/sniff}/female_sniff.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/sniff}/male_sniff.ogg (100%) rename sound/{voice/human => mobs/humanoids/human/whistle}/whistle1.ogg (100%) rename sound/{voice => mobs/humanoids}/lizard/credits.txt (100%) rename sound/{voice => mobs/humanoids}/lizard/deathsound.ogg (100%) rename sound/{voice => mobs/humanoids}/lizard/lizard_laugh1.ogg (100%) rename sound/{voice => mobs/humanoids}/lizard/lizard_scream_1.ogg (100%) rename sound/{voice => mobs/humanoids}/lizard/lizard_scream_2.ogg (100%) rename sound/{voice => mobs/humanoids}/lizard/lizard_scream_3.ogg (100%) rename sound/{voice => mobs/humanoids}/moth/credit.txt (100%) rename sound/{voice => mobs/humanoids}/moth/moth_death.ogg (100%) rename sound/{voice => mobs/humanoids}/moth/moth_flutter.ogg (100%) rename sound/{voice => mobs/humanoids}/moth/moth_laugh1.ogg (100%) rename sound/{voice => mobs/humanoids}/moth/scream_moth.ogg (100%) rename sound/{voice => mobs/humanoids}/plasmaman/plasmeme_scream_1.ogg (100%) rename sound/{voice => mobs/humanoids}/plasmaman/plasmeme_scream_2.ogg (100%) rename sound/{voice => mobs/humanoids}/plasmaman/plasmeme_scream_3.ogg (100%) rename sound/{creatures => mobs/non-humanoids/alien}/alien_eat.ogg (100%) rename sound/{creatures => mobs/non-humanoids/alien}/alien_explode.ogg (100%) rename sound/{creatures => mobs/non-humanoids/alien}/alien_organ_cut.ogg (100%) rename sound/{creatures => mobs/non-humanoids/alien}/alien_york.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/attribution.txt (100%) rename sound/{creatures => mobs/non-humanoids/bee}/bee.ogg (100%) rename sound/{creatures => mobs/non-humanoids/bee}/bee_swarm.ogg (100%) rename sound/{effects => mobs/non-humanoids/beepsky}/beepskyspinsabre.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/creep.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/criminal.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/freeze.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/god.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/iamthelaw.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/insult.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/justice.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/radio.ogg (100%) rename sound/{voice => mobs/non-humanoids}/beepsky/secureday.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/bileworm/bileworm_spit.ogg (100%) rename sound/{creatures => mobs/non-humanoids/brimdemon}/brimdemon.ogg (100%) rename sound/{lavaland => mobs/non-humanoids/brimdemon}/brimdemon_crush.ogg (100%) rename sound/{creatures => mobs/non-humanoids/chicken}/bagawk.ogg (100%) rename sound/{creatures => mobs/non-humanoids/chicken}/chick_peep.ogg (100%) rename sound/{creatures => mobs/non-humanoids/chicken}/clucks.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/clown/clownana_rustle.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/clown/hehe.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/clown/hohoho.ogg (100%) rename sound/{creatures => mobs/non-humanoids/cow}/cow.ogg (100%) rename sound/{creatures => mobs/non-humanoids/crab}/claw_click.ogg (100%) create mode 100644 sound/mobs/non-humanoids/cyborg/attribution.txt rename sound/{voice => mobs/non-humanoids/cyborg}/borg_deathsound.ogg (100%) rename sound/{ai => mobs/non-humanoids/cyborg}/harmalarm.ogg (100%) rename sound/{voice => mobs/non-humanoids/cyborg}/liveagain.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/cyborg/wash1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/cyborg/wash2.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/cyborg/wash_end.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/cyborg/wash_start.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/dog/growl1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/dog/growl2.ogg (100%) rename sound/{voice => mobs/non-humanoids/ed209}/ed209_20sec.ogg (100%) rename sound/{voice => mobs/non-humanoids/ed209}/edplaceholder.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/candle_tip.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/detected.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/electric_fire_tip.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/extinguishing.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/gasoline_tip.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/keepitcool.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/nofires.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/onlyyou.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/stopdropnroll.ogg (100%) rename sound/{voice => mobs/non-humanoids}/firebot/tempnominal.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/fish/attritbution.txt (100%) rename sound/{creatures => mobs/non-humanoids}/fish/fish_drop1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/fish/fish_pickup1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/fish/fish_pickup2.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/fish/fish_slap1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/fish/fish_slap2.ogg (100%) rename sound/{effects => mobs/non-humanoids/floorbot}/whistlereset.ogg (100%) rename sound/{effects => mobs/non-humanoids/frog}/huuu.ogg (100%) rename sound/{effects => mobs/non-humanoids/frog}/reee.ogg (100%) rename sound/{creatures => mobs/non-humanoids/goose}/goose1.ogg (100%) rename sound/{creatures => mobs/non-humanoids/goose}/goose2.ogg (100%) rename sound/{creatures => mobs/non-humanoids/goose}/goose3.ogg (100%) rename sound/{creatures => mobs/non-humanoids/goose}/goose4.ogg (100%) rename sound/{creatures => mobs/non-humanoids/gorilla}/gorilla.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/hiss1.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/hiss2.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/hiss3.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/hiss4.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/hiss5.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/hiss6.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/lowHiss1.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/lowHiss2.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/lowHiss3.ogg (100%) rename sound/{voice => mobs/non-humanoids/hiss}/lowHiss4.ogg (100%) rename sound/{machines => mobs/non-humanoids/honkbot}/honkbot_evil_laugh.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/cleanandtidy.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/cutarteries.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/degenerate.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/dragyouout.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/finally.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/foulsmelling.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/greencloud.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/letmeclean.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/stoprunning.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/thankgod.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/troglodyte.ogg (100%) rename sound/{voice => mobs/non-humanoids}/hygienebot/unhygienicclient.ogg (100%) rename sound/{creatures => mobs/non-humanoids/insect}/chitter.ogg (100%) rename sound/{creatures => mobs/non-humanoids/legion}/legion_spawn.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/apple.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/catch.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/close.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/coming.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/delicious.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/dont_like.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/feelbetter.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/flies.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/forgive.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/fuck_you.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/help.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/hey_wait.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/i_am_chicken.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/i_require_asst.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/i_trusted_you.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/im_different.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/injured.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/insult.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/is_this_the_end.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/live.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/lost.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/no.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/nooo.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/oh_fuck.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/pain_is_real.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/patchedup.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/please_dont.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/please_im_scared.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/please_put_me_back.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/radar.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/reported.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/shindemashou.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/surgeon.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/thank_you.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/turn_off.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/why.ogg (100%) rename sound/{voice => mobs/non-humanoids}/medbot/youre_good.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_2.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_3.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_4.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_5.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_6.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/monkey/monkey_screech_7.ogg (100%) rename sound/{voice => mobs/non-humanoids/mook}/mook_death.ogg (100%) rename sound/{voice => mobs/non-humanoids/mook}/mook_leap_yell.ogg (100%) rename sound/{creatures => mobs/non-humanoids/mouse}/mousesqueek.ogg (100%) rename sound/{items => mobs/non-humanoids/orbie}/orbie_level_up.ogg (100%) rename sound/{items => mobs/non-humanoids/orbie}/orbie_notification_sound.ogg (100%) rename sound/{items => mobs/non-humanoids/orbie}/orbie_send_out.ogg (100%) rename sound/{items => mobs/non-humanoids/orbie}/orbie_trick_learned.ogg (100%) rename sound/{creatures => mobs/non-humanoids/pig}/pig1.ogg (100%) rename sound/{creatures => mobs/non-humanoids/pig}/pig2.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/pony/clown_gallup.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/pony/snort.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/pony/whinny01.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/pony/whinny02.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/pony/whinny03.ogg (100%) rename sound/{creatures => mobs/non-humanoids/raptor}/raptor_1.ogg (100%) rename sound/{creatures => mobs/non-humanoids/raptor}/raptor_2.ogg (100%) rename sound/{creatures => mobs/non-humanoids/raptor}/raptor_3.ogg (100%) rename sound/{creatures => mobs/non-humanoids/raptor}/raptor_4.ogg (100%) rename sound/{creatures => mobs/non-humanoids/raptor}/raptor_5.ogg (100%) rename sound/{creatures => mobs/non-humanoids/sheep}/sheep1.ogg (100%) rename sound/{creatures => mobs/non-humanoids/sheep}/sheep2.ogg (100%) rename sound/{creatures => mobs/non-humanoids/sheep}/sheep3.ogg (100%) rename sound/{creatures => mobs/non-humanoids/snake}/snake_hissing1.ogg (100%) rename sound/{creatures => mobs/non-humanoids/snake}/snake_hissing2.ogg (100%) rename sound/{creatures => mobs/non-humanoids/space_dragon}/space_dragon_roar.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk_british.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk_french.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk_japanese1.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk_japanese2.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk_mexican.ogg (100%) rename sound/{creatures => mobs/non-humanoids}/tourist/tourist_talk_moth.ogg (100%) rename sound/{creatures => mobs/non-humanoids/venus_trap}/venus_trap_death.ogg (100%) rename sound/{creatures => mobs/non-humanoids/venus_trap}/venus_trap_hit.ogg (100%) rename sound/{creatures => mobs/non-humanoids/venus_trap}/venus_trap_hurt.ogg (100%) rename sound/{ambience => music}/antag/abductee.ogg (100%) create mode 100644 sound/music/antag/attribution.txt rename sound/{ambience => music}/antag/ayylien.ogg (100%) rename sound/{ambience => music}/antag/blobalert.ogg (100%) rename sound/{ambience => music}/antag/bloodcult/bloodcult_eyes.ogg (100%) rename sound/{ambience => music}/antag/bloodcult/bloodcult_gain.ogg (100%) rename sound/{ambience => music}/antag/bloodcult/bloodcult_halos.ogg (100%) rename sound/{ambience => music}/antag/bloodcult/bloodcult_scribe.ogg (100%) rename sound/{voice => music/antag/bloodcult}/ghost_whisper.ogg (100%) rename sound/{misc => music/antag/bloodcult}/ghosty_wind.ogg (100%) rename sound/{creatures => music/antag/bloodcult}/narsie_rises.ogg (100%) rename sound/{ambience => music}/antag/brainwashed.ogg (100%) rename sound/{ambience => music}/antag/clockcultalr.ogg (100%) rename sound/{effects => music/antag}/contractstartup.ogg (100%) rename sound/{ambience => music}/antag/creepalert.ogg (100%) rename sound/{ambience => music/antag/heretic}/VoidsEmbrace.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_ash.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_blade.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_cosmic.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_flesh.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_knock.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_moon.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_rust.ogg (100%) rename sound/{ambience => music}/antag/heretic/ascend_void.ogg (100%) create mode 100644 sound/music/antag/heretic/attribution.txt rename sound/{ambience => music}/antag/heretic/heretic_gain.ogg (100%) rename sound/{ambience => music}/antag/heretic/heretic_gain_intense.ogg (100%) rename sound/{ambience => music}/antag/heretic/heretic_sacrifice.ogg (100%) rename sound/{ambience => music}/antag/hypnotized.ogg (100%) rename sound/{ambience => music}/antag/ling_alert.ogg (100%) rename sound/{ambience => music}/antag/malf.ogg (100%) rename sound/{ambience => music}/antag/monkey.ogg (100%) rename sound/{effects => music/antag}/ninja_greeting.ogg (100%) rename sound/{ambience => music}/antag/ops.ogg (100%) rename sound/{ambience => music}/antag/ragesmages.ogg (100%) rename sound/{ambience => music}/antag/revolutionary_tide.ogg (100%) rename sound/{ambience => music}/antag/spy.ogg (100%) rename sound/{ambience => music}/antag/thatshowfamiliesworks.ogg (100%) rename sound/{ => music/antag}/traitor/final_objective.ogg (100%) rename sound/{ => music/antag}/traitor/objective_failed.ogg (100%) rename sound/{ => music/antag}/traitor/objective_success.ogg (100%) rename sound/{ => music/antag}/traitor/objective_taken.ogg (100%) rename sound/{ambience/antag => music/antag/traitor}/tatoralert.ogg (100%) rename sound/{lavaland => music/boss}/bdm_boss.ogg (100%) rename sound/{lavaland => music/boss}/hiero_boss.ogg (100%) rename sound/{ambience => }/music/elevator/robocop-short.ogg (100%) rename sound/{ambience => music/lobby_music}/clown.ogg (100%) create mode 100644 sound/music/lobby_music/license.txt rename sound/{ambience => music/lobby_music}/title0.ogg (100%) rename sound/{ambience => music/lobby_music}/title1.mod (100%) rename sound/{ambience => music/lobby_music}/title2.ogg (100%) rename sound/{ambience => music/lobby_music}/title3.ogg (100%) rename sound/{ambience => }/music/sisyphus/sisyphus.ogg (100%) create mode 100644 sound/runtime/complionator/attribution.txt rename sound/{ => vehicles}/mecha/critdestr.ogg (100%) rename sound/{ => vehicles}/mecha/hydraulic.ogg (100%) rename sound/{ => vehicles}/mecha/imag_enh.ogg (100%) rename sound/{ => vehicles}/mecha/mech_blade_attack.ogg (100%) rename sound/{ => vehicles}/mecha/mech_blade_break_wall.ogg (100%) rename sound/{ => vehicles}/mecha/mech_blade_safty.ogg (100%) rename sound/{ => vehicles}/mecha/mech_charge_attack.ogg (100%) rename sound/{ => vehicles}/mecha/mech_shield_deflect.ogg (100%) rename sound/{ => vehicles}/mecha/mech_shield_drop.ogg (100%) rename sound/{ => vehicles}/mecha/mech_shield_raise.ogg (100%) rename sound/{ => vehicles}/mecha/mech_stealth_attack.ogg (100%) rename sound/{ => vehicles}/mecha/mech_stealth_effect.ogg (100%) rename sound/{ => vehicles}/mecha/mech_stealth_pre_attack.ogg (100%) rename sound/{ => vehicles}/mecha/mechmove01.ogg (100%) rename sound/{ => vehicles}/mecha/mechmove03.ogg (100%) rename sound/{ => vehicles}/mecha/mechmove04.ogg (100%) rename sound/{ => vehicles}/mecha/mechstep.ogg (100%) rename sound/{ => vehicles}/mecha/mechturn.ogg (100%) rename sound/{ => vehicles}/mecha/nominal.ogg (100%) rename sound/{ => vehicles}/mecha/powerloader_step.ogg (100%) rename sound/{ => vehicles}/mecha/powerloader_turn2.ogg (100%) rename sound/{ => vehicles}/mecha/skyfall_power_up.ogg (100%) rename sound/{ => vehicles}/mecha/weapdestr.ogg (100%) delete mode 100644 sound/voice/attribution.txt 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/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index 3dda9d34da2a1..57cbf98e7cac8 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -403,9 +403,9 @@ dir = 4; name = "Old Mining Turret"; lethal_projectile = /obj/projectile/kinetic/miner; - lethal_projectile_sound = 'sound/weapons/kinetic_accel.ogg'; + lethal_projectile_sound = 'sound/items/weapons/kinetic_accel.ogg'; stun_projectile = /obj/projectile/kinetic/miner; - stun_projectile_sound = 'sound/weapons/kinetic_accel.ogg' + stun_projectile_sound = 'sound/items/weapons/kinetic_accel.ogg' }, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/bar) 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/__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/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 895ff2388fd26..db381d2d589a4 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 ? 'sound/misc/notice1.ogg' : 'sound/misc/notice2.ogg') + var/custom_sound = sound_override || (alert ? 'sound/announcer/notice/notice1.ogg' : 'sound/announcer/notice/notice2.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. @@ -186,7 +186,7 @@ /// Proc that just dispatches the announcement to our applicable audience. Only the announcement is a mandatory arg. /proc/dispatch_announcement_to_players(announcement, list/players = GLOB.player_list, sound_override = null, should_play_sound = TRUE) - 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()) diff --git a/code/_globalvars/lists/achievements.dm b/code/_globalvars/lists/achievements.dm index 283931f99847c..c788f070ad3b7 100644 --- 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 12a389cf081f8..24d765b71c183 100644 --- a/code/_globalvars/lists/ambience.dm +++ b/code/_globalvars/lists/ambience.dm @@ -1,167 +1,167 @@ 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', )) 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( - '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( @@ -169,25 +169,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/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 82cc3f1cf10b3..123deaa2518e5 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/_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/item_attack.dm b/code/_onclick/item_attack.dm index 5af9b7e016156..e7c4ef3e06790 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -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/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/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm index efe857b936ddf..4d182febb07e5 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -577,7 +577,7 @@ 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 @@ -618,7 +618,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") @@ -930,7 +930,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.") @@ -995,7 +995,7 @@ 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/explosions.dm b/code/controllers/subsystem/explosions.dm index 7bb597ba30e12..2f678291eb6c7 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -521,7 +521,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/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/polling.dm b/code/controllers/subsystem/polling.dm index 6cdcfbfd45949..4c3bf452c2c66 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -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 diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 36171e8fb119f..0ad0a78589221 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -281,7 +281,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 = 'sound/misc/announce_dig.ogg', + sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "grey", ) @@ -295,7 +295,7 @@ SUBSYSTEM_DEF(shuttle) priority_announce( text= "Emergency shuttle uplink services are now back online.", title = "Uplink Restored", - sound = 'sound/misc/announce_dig.ogg', + sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "green", ) @@ -529,7 +529,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", ) @@ -539,7 +539,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", ) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 976f00a6a6acc..800eeaa41c960 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -489,7 +489,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 @@ -504,7 +504,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 diff --git a/code/datums/actions/mobs/blood_warp.dm b/code/datums/actions/mobs/blood_warp.dm index 1e48c6e5aa419..0a1082ca603ac 100644 --- a/code/datums/actions/mobs/blood_warp.dm +++ b/code/datums/actions/mobs/blood_warp.dm @@ -58,9 +58,9 @@ 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) + 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) + playsound(get_turf(owner), 'sound/effects/magic/exit_blood.ogg', 100, TRUE, -1) owner.visible_message("And springs back out!") SEND_SIGNAL(owner, COMSIG_BLOOD_WARP) return TRUE 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/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/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index 5bd0f8404883d..0e6780adeac76 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.") 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/announcers/default_announcer.dm b/code/datums/announcers/default_announcer.dm index 9db822e02feff..bf24f611af842 100644 --- a/code/datums/announcers/default_announcer.dm +++ b/code/datums/announcers/default_announcer.dm @@ -1,20 +1,20 @@ /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..325ca04de437e 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.
" 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/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/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/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/communications.dm b/code/datums/communications.dm index 92e5fdcfd74ac..6df6b1e07bb34 100644 --- a/code/datums/communications.dm +++ b/code/datums/communications.dm @@ -37,9 +37,9 @@ 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, 'sound/misc/announce.ogg', ANNOUNCEMENT_TYPE_CAPTAIN, has_important_message = TRUE, players = players) + priority_announce(html_decode(message_data["message"]), null, 'sound/announcer/announcement/announce.ogg', ANNOUNCEMENT_TYPE_CAPTAIN, has_important_message = TRUE, players = players) COOLDOWN_START(src, nonsilicon_message_cooldown, COMMUNICATION_COOLDOWN) user.log_talk(input, LOG_SAY, tag="priority announcement") message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.") diff --git a/code/datums/components/chuunibyou.dm b/code/datums/components/chuunibyou.dm index 5724b93488f49..5373b3f798754 100644 --- a/code/datums/components/chuunibyou.dm +++ b/code/datums/components/chuunibyou.dm @@ -71,7 +71,7 @@ /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/crank_recharge.dm b/code/datums/components/crank_recharge.dm index 1f2272a8debc2..4e4cf290a4b9a 100644 --- a/code/datums/components/crank_recharge.dm +++ b/code/datums/components/crank_recharge.dm @@ -16,7 +16,7 @@ var/is_charging = FALSE 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) . = ..() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE 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 71e07e6380e11..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, ) 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/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/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/jukebox.dm b/code/datums/components/jukebox.dm index 545b9daab0b1e..071e284756f95 100644 --- a/code/datums/components/jukebox.dm +++ b/code/datums/components/jukebox.dm @@ -400,7 +400,7 @@ // 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 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/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/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/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index ae4d29e22f5f9..7a18e923afebe 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -389,7 +389,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() 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..903f8d9bd917f 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 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/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 02ed818ea3044..bc69a08b80c9d 100644 --- a/code/datums/components/sitcomlaughter.dm +++ b/code/datums/components/sitcomlaughter.dm @@ -4,7 +4,7 @@ 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/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/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/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/tackle.dm b/code/datums/components/tackle.dm index 3d777e888d9fc..baf1efaee1dd5 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -104,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 = isfelinid(user) ? "pounce" : "leap" //If cat, "pounce" instead of "leap". if(can_see(user, clicked_atom, 7)) @@ -533,7 +533,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") @@ -550,7 +550,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) @@ -562,7 +562,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) @@ -573,7 +573,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) @@ -593,7 +593,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() @@ -603,7 +603,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) @@ -682,7 +682,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/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/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 32b72c48853e5..7c0795a868288 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -246,7 +246,7 @@ 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) 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) /** @@ -321,7 +321,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/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/diseases/chronic_illness.dm b/code/datums/diseases/chronic_illness.dm index b1afd1d1939a9..617cfde763d11 100644 --- a/code/datums/diseases/chronic_illness.dm +++ b/code/datums/diseases/chronic_illness.dm @@ -42,7 +42,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) @@ -75,7 +75,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/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/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/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/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/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/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/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/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/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 bc32b03125660..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 @@ -141,7 +141,7 @@ 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 @@ -151,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/cqc.dm b/code/datums/martial/cqc.dm index 28b820278e21b..35f8a254e177e 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -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 47df74a3d4634..89981554f3ea3 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!"), @@ -125,7 +125,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 02d0452fad265..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 @@ -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/mutations/body.dm b/code/datums/mutations/body.dm index c86f7d7003334..e09a8337b72a4 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -474,7 +474,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 38ecb0fa07356..4eb04cdc03366 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -207,7 +207,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 diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 5a8d7458f3d0f..288d62846980c 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -173,7 +173,7 @@ 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 2483ef2e0fa1a..634a46ab217ba 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/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/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/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index fc7fd4c01ef7f..8b5aadb3a06d6 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -713,7 +713,7 @@ Every shielding unit will provide an additional [shielder_time] of protection, fully protecting the station with [max_shielders] shielding units. "} - 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/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 68462f1ae2ef2..cf3d1c88440b3 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -426,7 +426,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", \ @@ -572,7 +572,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 08f5ae101bf77..865e9869ebeea 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -488,7 +488,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 @@ -511,7 +511,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() 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/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/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 9bf17c7a9dc76..12510341b01c9 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -11,7 +11,7 @@ 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." 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/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm index df973d3bdec90..45c8528717c91 100644 --- a/code/datums/wounds/cranial_fissure.dm +++ b/code/datums/wounds/cranial_fissure.dm @@ -95,7 +95,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 +115,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 618a2e7fe3b2e..a276dbfbad476 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -6,7 +6,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) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index dd41d48620e99..31c44a8cbe79b 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 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 04d26a5e50a5a..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 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 5e2219ef857e0..5ff0143c0a1a9 100644 --- a/code/game/area/areas/away_content.dm +++ b/code/game/area/areas/away_content.dm @@ -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/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/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index f9c57510132f6..4e806bf1c1030 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,11 +94,11 @@ 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 - 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 5eac7addb4ec2..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 @@ -335,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" @@ -546,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 @@ -592,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 @@ -671,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 504efe0742ad1..f128805924fe8 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_defense.dm b/code/game/atom/atom_defense.dm index 4a762e4de8b49..ce31eb81246f1 100644 --- a/code/game/atom/atom_defense.dm +++ b/code/game/atom/atom_defense.dm @@ -108,11 +108,11 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src, 'sound/weapons/smash.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/smash.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) ///Called to get the damage that hulks will deal to the atom. /atom/proc/hulk_damage() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index c9e66c89c9576..07c12c28760ff 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -150,7 +150,7 @@ 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") 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/camera/camera.dm b/code/game/machinery/camera/camera.dm index e2f5d16cc572f..f3760fda0319a 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -366,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/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index 7760a646d9fae..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. @@ -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 @@ -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 6e1009def324f..8fdd5556e3b8b 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 e0a7f36460041..0b28775a5b869 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -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/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 3300370d18e49..a6685e4782ccd 100644 --- a/code/game/machinery/computer/arcade/orion.dm +++ b/code/game/machinery/computer/arcade/orion.dm @@ -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..ac80f83e91638 100644 --- a/code/game/machinery/computer/arcade/orion_event.dm +++ b/code/game/machinery/computer/arcade/orion_event.dm @@ -68,7 +68,7 @@ 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_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/camera.dm b/code/game/machinery/computer/camera.dm index 2d8fd7e7dcaed..21f5ed3db7bab 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -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) @@ -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 0e47a752b01d2..6640f5582fa20 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -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 d7b9ac03dae6d..76701eca0d852 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -130,7 +130,7 @@ 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) return TRUE if(obj_flags & EMAGGED) @@ -139,7 +139,7 @@ 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, datum/tgui/ui, datum/ui_state/state) @@ -193,11 +193,11 @@ 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 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 var/new_sec_level = SSsecurity_level.text_level_to_number(params["newSecurityLevel"]) @@ -209,7 +209,7 @@ SSsecurity_level.set_level(new_sec_level) to_chat(user, span_notice("Authorization confirmed. Modifying security level.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) // Only notify people if an actual change happened user.log_message("changed the security level to [params["newSecurityLevel"]] with [src].", LOG_GAME) @@ -234,7 +234,7 @@ 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 @@ -300,7 +300,7 @@ 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_prompt.ogg', 50, FALSE) + 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(user)) @@ -308,7 +308,7 @@ if (!(obj_flags & EMAGGED)) return to_chat(user, span_notice("Backup routing data restored.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) obj_flags &= ~EMAGGED if ("sendToOtherSector") if (!authenticated_as_non_silicon_captain(user)) @@ -336,7 +336,7 @@ 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"] @@ -389,7 +389,7 @@ 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) @@ -397,7 +397,7 @@ authorize_access = SSid_access.get_region_access_list(list(REGION_ALL_STATION)) authorize_name = "Unknown" to_chat(user, span_warning("[src] lets out a quiet alarm as its login is overridden.")) - playsound(src, 'sound/machines/terminal_alert.ogg', 25, FALSE) + 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) @@ -407,7 +407,7 @@ 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") diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm index 050f3447a8ce4..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) 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 f03c08a8d821b..66440bb97c3fd 100644 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm @@ -72,7 +72,7 @@ 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 32c2ddba984df..a971dce2d9d02 100644 --- a/code/game/machinery/computer/prisoner/management.dm +++ b/code/game/machinery/computer/prisoner/management.dm @@ -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 7fd47887bc73d..a30c11c3abefa 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,12 +139,12 @@ 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) 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 - " @@ -155,7 +155,7 @@ 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 bdfa996dad68f..8b32bf9af0a15 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -204,13 +204,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 @@ -321,7 +321,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 @@ -330,7 +330,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/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 d2e3c895ebd1d..43946538ac51b 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -50,11 +50,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 ..() @@ -79,7 +79,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 @@ -134,7 +134,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 74ca492657b6e..544e58bcabeea 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -75,7 +75,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) @@ -89,7 +89,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)) @@ -129,7 +129,7 @@ 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) @@ -153,7 +153,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) @@ -166,8 +166,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/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 68251b2c1eec3..8033c697bfa3d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -125,12 +125,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" @@ -1051,7 +1051,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) @@ -1063,7 +1063,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) @@ -1137,12 +1137,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 @@ -1202,7 +1202,7 @@ 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(I.use_tool(src, user, time_to_open, volume = 100)) if(check_electrified && shock(user, 100)) @@ -1303,7 +1303,7 @@ return TRUE if(BYPASS_DOOR_CHECKS) // No power usage, special sound, get it open. - playsound(src, 'sound/machines/airlockforced.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/airlockforced.ogg', 30, TRUE) return TRUE else @@ -1381,7 +1381,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 @@ -1474,7 +1474,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)) @@ -2374,7 +2374,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) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index cd7d8201a9ec8..5449f7f7cee4c 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 @@ -399,13 +399,13 @@ 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) - playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/smash.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/machinery/door/emp_act(severity) . = ..() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 2e5d909f3e952..858f2dffefff2 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 diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index bf27dfcffc23b..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 diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index ab18a63361c97..cb33ed6c14f5a 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 a287aefeaa825..d093cc0d3556d 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -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/droneDispenser.dm index af39257973cce..03a5c4c6cf93b 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -36,7 +36,7 @@ // ceasing production. Set to 0 for infinite. var/maximum_idle = 3 - var/work_sound = 'sound/items/rped.ogg' + var/work_sound = 'sound/items/tools/rped.ogg' var/create_sound = 'sound/items/deconstruct.ogg' var/recharge_sound = 'sound/machines/ping.ogg' 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 01224ad8b00fa..56fcc8a8ae74c 100644 --- a/code/game/machinery/flatpacker.dm +++ b/code/game/machinery/flatpacker.dm @@ -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) @@ -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/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 bf3d97426fd24..a40eaf710a6be 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -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) diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index b5ec2c58b3870..5e15080d39c8b 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -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) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e1b10dae6e43e..437c2dbd168a6 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -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) diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 67ad91681506d..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) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index cd36dcce09ad0..834d7115b0418 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -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/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index aced87bfe588a..18c3d9434d869 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -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) @@ -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/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/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 31fc68b31421f..f3981484c3caf 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -747,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) @@ -769,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 @@ -788,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 @@ -806,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) @@ -817,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 @@ -851,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. @@ -878,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) 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 f5f5851b7586e..635f567b8b310 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -132,7 +132,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) @@ -156,9 +156,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/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 4a764872a8a2a..6124d15a7f4b7 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -200,7 +200,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) var/mob/living/L = usr message = L.treat_message(message)["message"] - minor_announce(message, "[department] Announcement:", html_encode = FALSE, sound_override = 'sound/misc/announce_dig.ogg') + minor_announce(message, "[department] Announcement:", html_encode = FALSE, sound_override = 'sound/announcer/announcement/announce_dig.ogg') GLOB.news_network.submit_article(message, department, "Station Announcements", null) usr.log_talk(message, LOG_SAY, tag="station announcement from [src]") message_admins("[ADMIN_LOOKUPFLW(usr)] has made a station announcement from [src] at [AREACOORD(usr)].") @@ -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 3ef023ccb64d7..f0bc48916ae21 100644 --- a/code/game/machinery/roulette_machine.dm +++ b/code/game/machinery/roulette_machine.dm @@ -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,7 +181,7 @@ 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 @@ -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() diff --git a/code/game/machinery/scanner_gate.dm b/code/game/machinery/scanner_gate.dm index 85d816543926b..07df8db82c704 100644 --- a/code/game/machinery/scanner_gate.dm +++ b/code/game/machinery/scanner_gate.dm @@ -306,7 +306,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) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 41aa0876169ed..d3266df16f880 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -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/stasis.dm b/code/game/machinery/stasis.dm index bf33530b93e3e..49f00741895fe 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -34,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) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 9ff9c562aa04c..1eff3f6587080 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -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 diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 0ac1f7ee44df8..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) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index c92384aa4b6c1..8b982b4e3b953 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -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/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/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index d97966160233b..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) 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/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index f423f3644f0c8..1124e32983f31 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -359,7 +359,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 55cd7cd98d089..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 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/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/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/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 9cb926fd19756..6e7df14b7c564 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -563,7 +563,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/items.dm b/code/game/objects/items.dm index e94b846acc1ee..94860a39c26e7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -266,7 +266,7 @@ if(!hitsound) if(damtype == BURN) - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' if(damtype == BRUTE) hitsound = SFX_SWING_HIT @@ -861,9 +861,9 @@ else if(hitsound) playsound(hit_atom, hitsound, volume, TRUE, -1) else - playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1) + playsound(hit_atom, 'sound/items/weapons/genhit.ogg',volume, TRUE, -1) else - playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1) + 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)) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 4adb8d28b8c8a..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 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 b49991b132a4e..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) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index b28acce35d42d..34c66dd47311b 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -767,7 +767,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 diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 5d5de16a4d12a..44585f5f010a3 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 @@ -88,7 +88,7 @@ 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) @@ -110,7 +110,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 +124,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 +162,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/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/cigarettes.dm b/code/game/objects/items/cigarettes.dm index 6722bf07ed3bc..69b65149775ba 100644 --- a/code/game/objects/items/cigarettes.dm +++ b/code/game/objects/items/cigarettes.dm @@ -47,7 +47,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." @@ -347,7 +347,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) @@ -355,7 +355,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 @@ -396,7 +396,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.")) diff --git a/code/game/objects/items/climbingrope.dm b/code/game/objects/items/climbingrope.dm index 552b5d5885011..f10a9db76704c 100644 --- a/code/game/objects/items/climbingrope.dm +++ b/code/game/objects/items/climbingrope.dm @@ -48,8 +48,8 @@ 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) + playsound(target, 'sound/effects/pickaxe/picaxe1.ogg', 50) //plays twice so people above and below can hear + playsound(user_turf, 'sound/effects/pickaxe/picaxe1.ogg', 50) var/list/effects = list(new /obj/effect/temp_visual/climbing_hook(target, away_dir), new /obj/effect/temp_visual/climbing_hook(user_turf, away_dir)) // Our climbers athletics ability diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 58f2cb49a130a..1870b6dd2ba0f 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -209,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/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 2aa0c927bedc0..45b716997c16b 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -210,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/debug_items.dm b/code/game/objects/items/debug_items.dm index 24f350f37907a..fb6400fc7b36c 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -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 491d48a66d392..9133068cb0027 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -258,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() @@ -399,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() @@ -418,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() @@ -451,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)) @@ -527,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) @@ -544,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 @@ -555,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()) @@ -582,14 +582,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) @@ -598,7 +598,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() @@ -626,7 +626,7 @@ 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() @@ -645,7 +645,7 @@ 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() @@ -662,9 +662,9 @@ 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.")) @@ -673,7 +673,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() 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..40c3628f2f059 100644 --- a/code/game/objects/items/devices/battle_royale.dm +++ b/code/game/objects/items/devices/battle_royale.dm @@ -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 index f2fc0192f5684..7ab68b8a55736 100644 --- a/code/game/objects/items/devices/broadcast_camera.dm +++ b/code/game/objects/items/devices/broadcast_camera.dm @@ -87,7 +87,7 @@ internal_radio = new(src) set_light_on(TRUE) - playsound(source = src, soundin = 'sound/machines/terminal_processing.ogg', vol = 20, vary = FALSE, ignore_walls = FALSE) + 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 @@ -100,5 +100,5 @@ stop_broadcasting_network(camera_networks) set_light_on(FALSE) - playsound(source = src, soundin = 'sound/machines/terminal_prompt_deny.ogg', vol = 20, vary = FALSE, ignore_walls = FALSE) + playsound(source = src, soundin = 'sound/machines/terminal/terminal_prompt_deny.ogg', vol = 20, vary = FALSE, ignore_walls = FALSE) balloon_alert_to_viewers("offline") diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index f0a934fc198cc..fbdf3bae40a88 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -68,7 +68,7 @@ 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 5e59ee700c6aa..657d054f11cc8 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 @@ -359,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 @@ -428,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() @@ -455,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 diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 91bd3040832e4..e41c346c9930d 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -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/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index dae54ce9e7816..03e53a87db35e 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.")) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 5ab635fda482b..e3c19dfde66f3 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -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 diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 8e29be708db6e..b9d8539562809 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -24,12 +24,12 @@ 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 diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 7a9a85cc66675..cd8535e8d2823 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -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 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 7303eaf873803..93a131a9b468b 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -352,7 +352,7 @@ if(isliving(talking_movable)) var/mob/living/talking_living = talking_movable 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/misc/radio_talk.ogg') + 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() @@ -435,10 +435,10 @@ 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 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/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 7374254885251..af0ab50b77284 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -560,7 +560,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 @@ -598,7 +598,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!")) @@ -623,7 +623,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 @@ -715,7 +715,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 fc5a9d39f9742..da597fa595d63 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -51,9 +51,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/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index ee4a61b935157..a2fac2b50a44f 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -380,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/dice.dm b/code/game/objects/items/dice.dm index 64ce9803657bb..aa98d325a7d46 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -507,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 86b99e8c47e4e..b25765a302443 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 @@ -47,8 +47,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)), \ ) @@ -60,7 +60,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/emags.dm b/code/game/objects/items/emags.dm index f854ba1b90a0c..2adfeb585ae5f 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -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/extinguisher.dm b/code/game/objects/items/extinguisher.dm index c542048b49d98..10713d12893ef 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 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/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 eb73f4736b1c3..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) 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/misc.dm b/code/game/objects/items/food/misc.dm index 54ec5ce019012..bfd26f534de23 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -328,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") diff --git a/code/game/objects/items/frog_statue.dm b/code/game/objects/items/frog_statue.dm index e2477d2179aca..d1f65dc4b2ad5 100644 --- a/code/game/objects/items/frog_statue.dm +++ b/code/game/objects/items/frog_statue.dm @@ -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/martial_arts/cqc.dm b/code/game/objects/items/granters/martial_arts/cqc.dm index b2191997586ba..1d8582cf10c1f 100644 --- a/code/game/objects/items/granters/martial_arts/cqc.dm +++ b/code/game/objects/items/granters/martial_arts/cqc.dm @@ -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/grenades/_grenade.dm b/code/game/objects/items/grenades/_grenade.dm index cbf604db63d0d..780311fa4d149 100644 --- a/code/game/objects/items/grenades/_grenade.dm +++ b/code/game/objects/items/grenades/_grenade.dm @@ -17,8 +17,8 @@ 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 @@ -155,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 diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 5aadc9fbb3f23..c193b9ab73b9c 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 6817610bf76e7..c83801d81fc53 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -23,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) @@ -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 cf752bf82accb..93d4cd65f3452 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) @@ -542,8 +542,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 9e8f1d7308860..e63085d65be52 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -48,8 +48,8 @@ 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 @@ -57,7 +57,7 @@ ///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. @@ -200,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 @@ -424,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) @@ -551,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, @@ -606,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/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index 50302173a796f..503a1a183e163 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -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/inspector.dm b/code/game/objects/items/inspector.dm index 4aff1f03388ab..fb7878605a9c2 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 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/kitchen.dm b/code/game/objects/items/kitchen.dm index 9a55b1cd57464..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") 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 index a0613450b28d6..a27db91909c3d 100644 --- a/code/game/objects/items/lighter.dm +++ b/code/game/objects/items/lighter.dm @@ -69,7 +69,7 @@ /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) + 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!")) @@ -99,15 +99,15 @@ 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")) heat = heat_while_on START_PROCESSING(SSobj, src) if(fancy) - playsound(src.loc , 'sound/items/zippo_on.ogg', 100, 1) + playsound(src.loc , 'sound/items/lighter/zippo_on.ogg', 100, 1) else - playsound(src.loc, 'sound/items/lighter_on.ogg', 100, 1) + 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)) @@ -120,9 +120,9 @@ attack_verb_simple = null STOP_PROCESSING(SSobj, src) if(fancy) - playsound(src.loc , 'sound/items/zippo_off.ogg', 100, 1) + playsound(src.loc , 'sound/items/lighter/zippo_off.ogg', 100, 1) else - playsound(src.loc , 'sound/items/lighter_off.ogg', 100, 1) + playsound(src.loc , 'sound/items/lighter/lighter_off.ogg', 100, 1) set_light_on(lit) update_appearance() diff --git a/code/game/objects/items/machine_wand.dm b/code/game/objects/items/machine_wand.dm index 7d8b4a0697d67..a4e1be08ee450 100644 --- a/code/game/objects/items/machine_wand.dm +++ b/code/game/objects/items/machine_wand.dm @@ -61,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) @@ -92,7 +92,7 @@ /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 26cefd6eeedbd..e11310b57e868 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -107,7 +107,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) @@ -145,7 +145,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 @@ -402,7 +402,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" @@ -419,7 +419,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 @@ -430,7 +430,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 diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index 74d908732a562..e50de0771c235 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -20,8 +20,8 @@ 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/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 0fd63321519c0..01e5983b7d7aa 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -177,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 @@ -327,7 +327,7 @@ 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. @@ -407,12 +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() @@ -442,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" @@ -507,7 +507,7 @@ 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) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index dd70bd08c2161..f78eec3898799 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. @@ -122,7 +122,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 @@ -136,7 +136,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 @@ -188,7 +188,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) @@ -227,7 +227,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 @@ -321,7 +321,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 855484c3066d4..813ace6ced89e 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 @@ -182,8 +182,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 +224,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 +370,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 +434,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 +475,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 +486,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 +524,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/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 7b9aa7ceefe08..0148076f529ec 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) 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 526b5ca2e985e..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 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 93fd6cb947a5d..7c7f998251c12 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -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 279bc91d622c5..daa71c54b73d7 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] diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm index 9c3aa6cffc284..07db9978e3e09 100644 --- a/code/game/objects/items/rcd/RPD.dm +++ b/code/game/objects/items/rcd/RPD.dm @@ -185,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 diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index 4872dffde362e..a41e86584af81 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -12,8 +12,8 @@ banned_upgrades = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK matter = 200 max_matter = 200 - 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 ///category of design selected diff --git a/code/game/objects/items/rcd/RTD.dm b/code/game/objects/items/rcd/RTD.dm index 93e5147175e4e..1925b3e6ffc66 100644 --- a/code/game/objects/items/rcd/RTD.dm +++ b/code/game/objects/items/rcd/RTD.dm @@ -24,8 +24,8 @@ item_flags = NO_MAT_REDEMPTION | NOBLUDGEON has_ammobar = TRUE banned_upgrades = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK - 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 for tile design diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 77b087b8ac53d..ecf43fdfab776 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 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..fc7486dd1382f 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"])") @@ -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/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 14a7c8a1d63a5..ce350ecb788f8 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -319,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!")) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 4727f16ee1dd2..4b210c47e9fca 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -607,7 +607,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) @@ -827,7 +827,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/shields.dm b/code/game/objects/items/shields.dm index 73aaa7e75a1cb..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 @@ -163,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) . = ..() @@ -305,7 +305,7 @@ 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. @@ -355,7 +355,7 @@ 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 @@ -420,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) @@ -472,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 f0548fa66f404..6ad49bf836f4f 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 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..f7ef5f01e5484 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -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..3956051d89bc7 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), \ @@ -326,7 +326,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 +348,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 +363,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 877460edfaf7a..c32919094391a 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -385,8 +385,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 @@ -684,8 +684,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) . = ..() @@ -863,8 +863,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 diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 110713d343612..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 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 b4855c52fae35..8d8b38c039294 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -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) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index a88da6537b64e..52c4d13def241 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) . = ..() @@ -642,7 +642,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' /obj/item/storage/backpack/duffelbag/syndie/hitman desc = "A large duffel bag for holding extra things. There is a Nanotrasen logo on the back." diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 095250fdcca52..864078c4b0839 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -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)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 40d35a334d08f..558689f70b048 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -374,7 +374,7 @@ /obj/item/restraints/handcuffs, /obj/item/restraints/legcuffs/bola, )) - 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 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/holsters.dm b/code/game/objects/items/storage/holsters.dm index cc8a790c8ef34..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 diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index e5db3d75855ea..643a1275b6f59 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" diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 873b45210cdec..c939e3d0dd9f4 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() diff --git a/code/game/objects/items/tail_pin.dm b/code/game/objects/items/tail_pin.dm index 71bd50b1dda21..df191da845aa4 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 diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 9c7138e00dee0..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) @@ -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/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index 30650fcd69f7e..1f6c334c9921b 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -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)) diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 6fa7e8d23b340..8634336504d54 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -365,7 +365,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) . = ..() @@ -479,7 +479,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 diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index d51130a4d21d2..a2efbe2d4beba 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -254,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) 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 dfc406437201b..41bcc25eba652 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -12,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 @@ -46,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 @@ -242,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 diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 7f2b11777d8f5..234f268ace29d 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 d08deec62e316..9aa8ef8ea0259 100644 --- a/code/game/objects/items/toy_mechs.dm +++ b/code/game/objects/items/toy_mechs.dm @@ -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 139a3fcb216f2..4a640063837bd 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 @@ -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!")) @@ -1143,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) @@ -1215,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" @@ -1358,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" @@ -1369,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" @@ -1460,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 @@ -1637,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) @@ -1716,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/weaponry.dm b/code/game/objects/items/weaponry.dm index 821f994a1ed6f..7015e403141c4 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))) @@ -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) 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/obj_defense.dm b/code/game/objects/obj_defense.dm index ceaa0e0beb734..748af49a69489 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/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 365e790ca48f5..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...")) @@ -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/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 73020ba93bbb7..d52cfebd505f8 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -328,7 +328,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 @@ -418,7 +418,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 @@ -431,7 +431,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 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/mounted_guns/mounted_gun.dm b/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm index da27cdbdaf9df..f0fa9e27d7869 100644 --- a/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm +++ b/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm @@ -34,9 +34,9 @@ ///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/weapons/gun/general/mountedgun.ogg' + var/fire_sound = 'sound/items/weapons/gun/general/mountedgun.ogg' ///sound of firing for last shot - var/last_fire_sound = 'sound/weapons/gun/general/mountedgunend.ogg' + var/last_fire_sound = 'sound/items/weapons/gun/general/mountedgunend.ogg' /obj/structure/mounted_gun/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/code/game/objects/structures/construction_console/construction_actions.dm b/code/game/objects/structures/construction_console/construction_actions.dm index b9abfe70c3f71..1a6b5deeeae26 100644 --- a/code/game/objects/structures/construction_console/construction_actions.dm +++ b/code/game/objects/structures/construction_console/construction_actions.dm @@ -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 c4740398d82d2..27eb510c278ab 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 diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 66950b0845f1d..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 @@ -380,7 +380,7 @@ /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" @@ -392,4 +392,4 @@ /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 2f555ed84dea5..19eb438876483 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -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 ca931d4c6ab10..b9f43a2009f83 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 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 255b61b6f6364..0a2cc788e544f 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 553258bd360ea..e4488b0b7f436 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -151,8 +151,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() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 2fed72c5bab3b..a7415c951f2f9 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -10,8 +10,8 @@ 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 @@ -121,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() @@ -148,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)) @@ -169,8 +169,8 @@ 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 diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index 8ff1e1aa21da8..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 @@ -67,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 12008cc4022bf..5d1418e397eb5 100644 --- a/code/game/objects/structures/crates_lockers/crates/cardboard.dm +++ b/code/game/objects/structures/crates_lockers/crates/cardboard.dm @@ -6,7 +6,7 @@ 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 diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index d116a33d8ff75..052ca9cffb63b 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -9,8 +9,8 @@ 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 diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 667dd9b2ebb8b..b3cce9609c06f 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -9,8 +9,8 @@ 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 @@ -40,7 +40,7 @@ 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) 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 6abb14294de5b..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) @@ -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) @@ -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 diff --git a/code/game/objects/structures/destructible_structures.dm b/code/game/objects/structures/destructible_structures.dm index beffa5d4fd741..e018be234b2f4 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_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/displaycase.dm b/code/game/objects/structures/displaycase.dm index 03957e2708bf0..d5e32af761e11 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() @@ -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) @@ -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 c2d67e6290145..5fc9bf674c144 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -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/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/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/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/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 1de24f030bf5e..c4f667a830851 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.")) 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 a8de16271f36d..171c16b82f5e4 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -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...")) @@ -123,7 +123,7 @@ at the cost of risking a vicious bite.**/ 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_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. diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index b80cee093fc66..97e35d8f6f3f8 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -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) if(!connected || connected.loc != src) diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm index cb56cfe8ef120..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 diff --git a/code/game/objects/structures/pinatas.dm b/code/game/objects/structures/pinatas.dm index 44d7a8b021594..56a258a45f7be 100644 --- a/code/game/objects/structures/pinatas.dm +++ b/code/game/objects/structures/pinatas.dm @@ -35,11 +35,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, '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/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 32e76bb2c83ee..071e528e9c449 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -697,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" @@ -913,9 +913,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 diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index c1963ea38a3ef..e0bb6357a8a22 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -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/window.dm b/code/game/objects/structures/window.dm index fdb5193035c84..5be22d5cb8632 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,7 +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_reverse.ogg', 70, TRUE), 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) @@ -899,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/sound.dm b/code/game/sound.dm index edd5437e3dcad..9d62aede03e9c 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -207,83 +207,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) @@ -431,49 +431,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', @@ -508,12 +508,12 @@ 'sound/effects/muffspeech/muffspeech9.ogg', ) if(SFX_DEFAULT_FISH_SLAP) - soundin = 'sound/creatures/fish/fish_slap1.ogg' + soundin = 'sound/mobs/non-humanoids/fish/fish_slap1.ogg' if(SFX_ALT_FISH_SLAP) - soundin = 'sound/creatures/fish/fish_slap2.ogg' + soundin = 'sound/mobs/non-humanoids/fish/fish_slap2.ogg' if(SFX_FISH_PICKUP) soundin = pick( - 'sound/creatures/fish/fish_pickup1.ogg', - 'sound/creatures/fish/fish_pickup2.ogg', + 'sound/mobs/non-humanoids/fish/fish_pickup1.ogg', + 'sound/mobs/non-humanoids/fish/fish_pickup2.ogg', ) return soundin diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 0fbe774a7c5ae..f1297e4a02258 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -131,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) @@ -234,7 +234,7 @@ 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/item_interaction(mob/living/user, obj/item/tool, list/modifiers) diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 01478f4d9f02b..b62de34f14690 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -435,7 +435,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!")) @@ -443,7 +443,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.")) @@ -459,7 +459,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) @@ -483,7 +483,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 @@ -496,5 +496,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/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/lava.dm b/code/game/turfs/open/lava.dm index c080e228438a5..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 @@ -201,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/turf.dm b/code/game/turfs/turf.dm index 19356c2e32309..38976bcfdd6df 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -47,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. 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/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/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index d2eeba90262cf..b3c61e8e787f2 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 = 'sound/misc/announce_dig.ogg', + 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 = 'sound/misc/announce_dig.ogg', + sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "green", ) diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index c7acd1cba4624..c58d63581bd34 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -147,7 +147,7 @@ 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() @@ -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/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 8540ff99e5733..834e4741cdecf 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/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/secrets.dm b/code/modules/admin/verbs/secrets.dm index 9012a8652bbff..368f6f4d6f45e 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -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 a8389ca0bc155..a60ee2e4ef5bd 100644 --- a/code/modules/admin/verbs/server.dm +++ b/code/modules/admin/verbs/server.dm @@ -98,7 +98,7 @@ ADMIN_VERB(start_now, R_SERVER, "Start Now", "Start the round RIGHT NOW.", ADMIN SSticker.start_immediately = FALSE SSticker.SetTimeLeft(3 MINUTES) to_chat(world, span_big(span_notice("The game will start in 3 minutes."))) - SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) + 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 @@ -206,7 +206,7 @@ ADMIN_VERB(delay, R_SERVER, "Delay Pre-Game", "Delay the game start.", ADMIN_CAT 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") diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index da7c7e9e39cac..27c1fd5a0ea89 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -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.")) 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 cd56fcdaa5cdc..6e71010a8ee27 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 diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index ab1636b4dedfd..174251d472960 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -306,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 @@ -339,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() @@ -422,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()) @@ -522,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() @@ -539,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" @@ -618,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? 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/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index 27093778c3116..c4e59c505bf04 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -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...") 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/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index c7a2fc3a1107f..ce1b016dcb045 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -282,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/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm index 5d5cca3cb6de1..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" diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index 4f535ece8cef0..80d14724170fe 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 diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 4cd4e9f8428f6..6add2894d0997 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -14,7 +14,7 @@ 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 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 6f2781b20336c..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!"), diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 01d97f448cd60..fd1b46c9de0bf 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -53,7 +53,7 @@ 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) + playsound(user, 'sound/effects/blob/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."), diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 4cfa39f3fa654..6c3135fbe4b32 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -82,7 +82,7 @@ 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 @@ -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)) @@ -461,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!")) @@ -559,7 +559,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)) @@ -642,7 +642,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)) @@ -673,7 +673,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 @@ -790,7 +790,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 @@ -845,7 +845,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) @@ -866,7 +866,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)) @@ -900,7 +900,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)) diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 45c3aee695574..7a8e2fa535fd4 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -122,7 +122,7 @@ team_member.current.update_mob_action_buttons() 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) @@ -143,7 +143,7 @@ for(var/datum/mind/team_member as anything in team.members) if(!team_member.current || team_member.current == nominee || team_member.current.incapacitated) continue - SEND_SOUND(team_member.current, 'sound/magic/exit_blood.ogg') + SEND_SOUND(team_member.current, 'sound/effects/magic/exit_blood.ogg') asked_cultists += team_member.current var/list/yes_voters = SSpolling.poll_candidates( @@ -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 1c715036d37b5..7c94baaa321f0 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -26,7 +26,7 @@ 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) . = ..() @@ -73,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 @@ -285,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) . = ..() @@ -301,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 @@ -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) @@ -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,9 +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' - shield_bash_sound = 'sound/effects/glassknock.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) @@ -1234,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 @@ -1286,13 +1286,13 @@ 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) new /obj/effect/temp_visual/cult/sparks(target) - playsound(target, 'sound/effects/glassbr3.ogg', 100) + playsound(target, 'sound/effects/glass/glassbr3.ogg', 100) qdel(src) else ..() diff --git a/code/modules/antagonists/cult/cult_structure_pylon.dm b/code/modules/antagonists/cult/cult_structure_pylon.dm index e436601325d25..819e27dab2051 100644 --- a/code/modules/antagonists/cult/cult_structure_pylon.dm +++ b/code/modules/antagonists/cult/cult_structure_pylon.dm @@ -5,7 +5,7 @@ icon_state = "pylon" light_range = 1.5 light_color = COLOR_SOFT_RED - break_sound = 'sound/effects/glassbr2.ogg' + break_sound = 'sound/effects/glass/glassbr2.ogg' break_message = "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 diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 511988fb5bcbb..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 diff --git a/code/modules/antagonists/cult/datums/cult_team.dm b/code/modules/antagonists/cult/datums/cult_team.dm index 4d77f65f588df..c7a5a333dfd11 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,7 +64,7 @@ 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') + 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 @@ -165,7 +165,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 de415f59c7482..433c9ebedbef8 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 985f5da950193..e417369358c62 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -386,14 +386,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) @@ -771,7 +771,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!")) @@ -1021,7 +1021,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) @@ -1136,7 +1136,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)) @@ -1157,7 +1157,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) 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/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 82a0f8ca6228f..4c9c25945c9e8 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -26,7 +26,7 @@ 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) @@ -513,7 +513,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 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/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index 4d2636fa19e8c..ab98e1b9e4c7c 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -19,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") 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 e4f333260a88f..178b8b16da5b7 100644 --- a/code/modules/antagonists/heretic/items/labyrinth_handbook.dm +++ b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm @@ -62,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/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index 957a78a27269c..4f061ca2d6dda 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 55db187ee73ba..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) @@ -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 dfc8aa39bef29..f6e364766f6ef 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -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 6f5b51d4eba4e..c0fd2b7bbe381 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -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", ) diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm index 72eacf607de55..ea0b609ef5c13 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,7 +240,7 @@ 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", ) 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 8c5a4587928dd..c1c1e2a4a04c9 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -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 5919f9a40d12a..65e6b6b2470e7 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -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() @@ -281,7 +281,7 @@ return // Remove the outline, we don't need it anymore. rune?.remove_filter("reward_outline") - playsound(loc, 'sound/magic/repulse.ogg', 75, TRUE) + 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. @@ -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,7 +403,7 @@ 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/ambience/antag/heretic/heretic_sacrifice.ogg', 50, FALSE) // play theme + 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 @@ -525,7 +525,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/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index 6cbaf844841e4..e7aa3f9e2065b 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -178,7 +178,7 @@ 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 @@ -297,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 ..() @@ -329,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) diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index d2fd0efe8b570..cc7cc085364c0 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -245,7 +245,7 @@ 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", ) user.add_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_NEGATES_GRAVITY, TRAIT_MOVE_FLYING, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAGIC_TRAIT) @@ -341,7 +341,7 @@ 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/magic/VoidDeflect01.ogg', 'sound/magic/VoidDeflect02.ogg', 'sound/magic/VoidDeflect03.ogg'), 75, TRUE) + 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)) 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 2be30ea5b0c49..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 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 ad942c71a328a..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 @@ -36,12 +36,12 @@ /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 @@ -66,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."), @@ -83,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 49b9ae96f3088..6a96403872f11 100644 --- a/code/modules/antagonists/heretic/magic/space_crawl.dm +++ b/code/modules/antagonists/heretic/magic/space_crawl.dm @@ -83,7 +83,7 @@ jaunter.put_in_hands(right_hand) RegisterSignal(jaunter, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) - 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,7 +107,7 @@ /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))) - playsound(get_turf(unjaunter), 'sound/magic/cosmic_energy.ogg', 50, TRUE, -1) + 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) 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 index bd7ba950dce89..036415269c975 100644 --- a/code/modules/antagonists/heretic/magic/void_conduit.dm +++ b/code/modules/antagonists/heretic/magic/void_conduit.dm @@ -108,7 +108,7 @@ affected_structure.take_damage(rand(10, 20)) /datum/looping_sound/void_conduit - mid_sounds = 'sound/ambience/ambiatm1.ogg' + mid_sounds = 'sound/ambience/misc/ambiatm1.ogg' mid_length = 1 SECONDS extra_range = 10 volume = 40 diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm index c6e367e87608c..473fa057cf54c 100644 --- a/code/modules/antagonists/heretic/magic/void_phase.dm +++ b/code/modules/antagonists/heretic/magic/void_phase.dm @@ -50,7 +50,7 @@ /// 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 diff --git a/code/modules/antagonists/heretic/magic/void_prison.dm b/code/modules/antagonists/heretic/magic/void_prison.dm index 211a747c8008e..cfd85c92b6e1c 100644 --- a/code/modules/antagonists/heretic/magic/void_prison.dm +++ b/code/modules/antagonists/heretic/magic/void_prison.dm @@ -8,7 +8,7 @@ button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "voidball" ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' - sound = 'sound/magic/voidblink.ogg' + sound = 'sound/effects/magic/voidblink.ogg' cooldown_time = 1 MINUTES cast_range = 3 diff --git a/code/modules/antagonists/heretic/magic/void_pull.dm b/code/modules/antagonists/heretic/magic/void_pull.dm index 1db1c6601718e..4e73ff6f49bf9 100644 --- a/code/modules/antagonists/heretic/magic/void_pull.dm +++ b/code/modules/antagonists/heretic/magic/void_pull.dm @@ -6,7 +6,7 @@ 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 = 30 SECONDS 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 e4f5990040be4..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!"), @@ -281,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/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index 4cbdbdf8c1ce1..2521794907231 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -47,7 +47,7 @@ /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 different effects when it is destroyed that combine with the mansus grasp effect. 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 5512d6027ee5a..295ecbb3a2b91 100644 --- a/code/modules/antagonists/heretic/structures/lock_final.dm +++ b/code/modules/antagonists/heretic/structures/lock_final.dm @@ -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..dd1d0d87d4028 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 ..() @@ -163,7 +163,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 +237,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 3f7072201590f..02c27c353a90e 100644 --- a/code/modules/antagonists/heretic/transmutation_rune.dm +++ b/code/modules/antagonists/heretic/transmutation_rune.dm @@ -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. 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 dc92289f66bef..6220127f68794 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) . = ..() @@ -258,7 +258,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/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index a9f84c51dad1a..b428060aa1c5f 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -201,7 +201,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf)) 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/malf)) 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/malf)) 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 @@ -381,7 +381,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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" @@ -430,7 +430,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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" @@ -503,7 +503,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/destructive/overload_machine @@ -607,7 +607,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf)) 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 @@ -730,7 +730,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/utility/break_fire_alarms @@ -742,7 +742,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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,7 +761,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/utility/emergency_lights @@ -799,7 +799,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf)) 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 @@ -839,7 +839,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/upgrade/upgrade_cameras/upgrade(mob/living/silicon/ai/AI) // Sets up nightvision @@ -876,7 +876,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/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)) @@ -884,7 +884,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/upgrade/eavesdrop @@ -894,7 +894,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/upgrade/eavesdrop/upgrade(mob/living/silicon/ai/AI) if(AI.eyeobj) @@ -910,7 +910,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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/malf/upgrade/mecha_domination/upgrade(mob/living/silicon/ai/AI) AI.can_dominate_mechs = TRUE //Yep. This is all it does. Honk! @@ -922,7 +922,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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" 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 19328f20378de..4aaacb77e5f3e 100644 --- a/code/modules/antagonists/nightmare/nightmare_organs.dm +++ b/code/modules/antagonists/nightmare/nightmare_organs.dm @@ -85,7 +85,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!"), @@ -131,7 +131,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 61a9b81c364c1..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 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/nukeop/datums/operative.dm b/code/modules/antagonists/nukeop/datums/operative.dm index c05295e15d32e..859cee578b265 100644 --- a/code/modules/antagonists/nukeop/datums/operative.dm +++ b/code/modules/antagonists/nukeop/datums/operative.dm @@ -8,7 +8,7 @@ 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. 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/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm index fb23cae705fab..83bdc0288b2a2 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 @@ -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 diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index f842b5d6b6e33..82113fb31be2b 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -55,7 +55,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 7f9d9614fb1d9..1db51329e3cb2 100644 --- a/code/modules/antagonists/obsessed/obsessed.dm +++ b/code/modules/antagonists/obsessed/obsessed.dm @@ -18,7 +18,7 @@ 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 diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index 602fcbe8b071f..feb62ec4fca66 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -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 d490944e1e310..7a983993c0b6f 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. 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 cc82f491c1fcd..8cbeca9c6d8fa 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 @@ -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) @@ -182,7 +182,7 @@ 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 diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm index 37bc2299928da..b54c5f2b8b3fe 100644 --- a/code/modules/antagonists/space_ninja/space_ninja.dm +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -101,7 +101,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.")) 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_uplink.dm b/code/modules/antagonists/spy/spy_uplink.dm index 920076f21b468..f5c60f706c588 100644 --- a/code/modules/antagonists/spy/spy_uplink.dm +++ b/code/modules/antagonists/spy/spy_uplink.dm @@ -100,7 +100,7 @@ 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 diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 661007d3163a6..f739245314fc2 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -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/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/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_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_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 bf04c535a56a0..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. @@ -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 eb4df6b6239f2..5b73a5dcfeb41 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) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm index b8bf9a8e3cf25..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 @@ -78,7 +78,7 @@ 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/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..9b67aa24a5380 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm @@ -31,7 +31,7 @@ ) /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) diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/captaincy.dm b/code/modules/antagonists/wizard/grand_ritual/finales/captaincy.dm index d1a3c1afaf758..237fdfe63e738 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 25883370c0d1b..009853bed22d1 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm @@ -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() 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/art/statues.dm b/code/modules/art/statues.dm index da4a47dd843d8..ff5cbc38f850d 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -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 diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index f20d364759927..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++ @@ -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 1f918888610da..3c0bb24536901 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -59,7 +59,7 @@ //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) + playsound(src, 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) toggle_scan() /obj/item/assembly/health/proc/toggle_scan() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index addbad2704e1b..16a33b2a9a344 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() 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 61153738ee714..3f434f524e752 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -94,7 +94,7 @@ pulse() audible_message("[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 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 5af89f10ec1b4..e5c5ff33d75fb 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) @@ -171,7 +171,7 @@ pulse() audible_message("[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 fad912d42229a..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() 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_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index e3ef70489ac85..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()) 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 8a165830cec07..5ce16365a5fda 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 22ee2f6b414a7..cc94f04623b71 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -322,7 +322,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/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index e6c60140f3a70..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) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index edd8e30eaf8ce..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 diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 5e3cf1bb21eac..00d23b592c00e 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) */ @@ -135,7 +135,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /obj/effect/gateway_portal_bumper/Bumped(atom/movable/AM) 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) @@ -200,7 +200,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) @@ -263,7 +263,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() @@ -306,7 +306,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 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/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/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index abf3a7809fcda..15c267cf0c8dd 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -69,7 +69,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 @@ -134,7 +134,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, @@ -179,7 +179,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, @@ -229,7 +229,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, @@ -244,7 +244,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/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/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/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/threats.dm b/code/modules/bitrunning/server/threats.dm index ea612a43efaea..145cdc9ee2bbf 100644 --- a/code/modules/bitrunning/server/threats.dm +++ b/code/modules/bitrunning/server/threats.dm @@ -121,7 +121,7 @@ antag_mind.special_role = ROLE_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,7 +170,7 @@ 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 diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm index ab267a34cd330..912f0c1f874fe 100644 --- a/code/modules/bitrunning/server/util.dm +++ b/code/modules/bitrunning/server/util.dm @@ -134,7 +134,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/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/cards/cardhand.dm b/code/modules/cards/cardhand.dm index 8fc9b4d0dc70a..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) 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/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/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/orderconsole.dm b/code/modules/cargo/orderconsole.dm index ac37511f789a4..87a085707c0c3 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -240,13 +240,13 @@ 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 diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index f1d13fc92c224..a8678fbdcef13 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 @@ -695,7 +695,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 895d12da99a2a..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() diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 9ce1771421e61..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 diff --git a/code/modules/clothing/belts/polymorph_belt.dm b/code/modules/clothing/belts/polymorph_belt.dm index 9f28c33e01964..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) . = ..() @@ -145,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/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 3bb50a5e6b176..0178ae09c5322 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 @@ -385,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 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/special.dm b/code/modules/clothing/gloves/special.dm index 3e18a4ed2adc0..98de3145ddc78 100644 --- a/code/modules/clothing/gloves/special.dm +++ b/code/modules/clothing/gloves/special.dm @@ -271,4 +271,4 @@ 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/weapons/bite.ogg', damage * 2, TRUE) + playsound(src,'sound/items/weapons/bite.ogg', damage * 2, TRUE) diff --git a/code/modules/clothing/head/cakehat.dm b/code/modules/clothing/head/cakehat.dm index d8dc0c0e7a044..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 @@ -60,9 +60,9 @@ 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 @@ -76,11 +76,11 @@ 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/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 1b86a8ea36ce0..6cd88c1746c7f 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -142,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) . = ..() diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm index 9dcaa5c365f27..e9ff99782395f 100644 --- a/code/modules/clothing/head/mind_monkey_helmet.dm +++ b/code/modules/clothing/head/mind_monkey_helmet.dm @@ -42,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.") @@ -64,7 +64,7 @@ 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-sigh.ogg', 30, TRUE) + 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?")) @@ -80,7 +80,7 @@ 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-two.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) particle_path = /particles/smoke/steam rage_chance += 7 @@ -117,7 +117,7 @@ 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 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/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm index 7b29519e12ba5..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 @@ -170,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 @@ -184,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 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 47ecf9a11f5a8..6d92b80ebfd47 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -242,7 +242,7 @@ 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) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index c5e538d44468e..aee1ac17b1b3e 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -58,7 +58,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( tint = 0 has_fov = FALSE fishing_modifier = 0 - unique_death = 'sound/voice/sec_death.ogg' + 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 @@ -210,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/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 61298e970cbf9..88b388b47264d 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 /obj/item/clothing/shoes/worn_overlays(mutable_appearance/standing, isinhands = FALSE) diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm index 4f2287f40d278..3c66c0ac0c6b5 100644 --- a/code/modules/clothing/shoes/costume.dm +++ b/code/modules/clothing/shoes/costume.dm @@ -44,7 +44,7 @@ /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 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/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 8faaf58b53ed4..88767b84b66d5 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -108,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() 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/suits/armor.dm b/code/modules/clothing/suits/armor.dm index efa23e1a06862..23e4d89ff2dbb 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -337,7 +337,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) 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/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 4636054ee3e6b..f09b6ac2f8585 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") diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index b590984cbc7cb..704182f3642d2 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -292,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 c03670ba058fd..85fff72052b23 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -181,7 +181,7 @@ return cabling.visible_message(span_notice("[user] repairs the suit sensors on [src] with [cabling].")) - playsound(source = src, soundin = 'sound/effects/sparks4.ogg', vol = 100, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) + 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() @@ -229,7 +229,7 @@ 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/sparks3.ogg', vol = 75, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) + 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() diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index b43196c1628e2..335eded4d4c82 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -275,12 +275,12 @@ var/mob/living/interacting_living = interacting_with if(user.combat_mode) - playsound(interacting_living, 'sound/weapons/throw.ogg', 30) + 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/weapons/throwsoft.ogg', 20) + 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/economy/account.dm b/code/modules/economy/account.dm index 4c76534175a60..5dd070f01bdae 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -233,7 +233,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 @@ -241,7 +241,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 @@ -251,7 +251,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/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 f0e1a7c893a3e..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, diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm index 1b7af6361fdbb..b9841283ceed7 100644 --- a/code/modules/events/ghost_role/morph_event.dm +++ b/code/modules/events/ghost_role/morph_event.dm @@ -28,7 +28,7 @@ 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 1fdebff0cd864..9f894c237d41c 100644 --- a/code/modules/events/ghost_role/nightmare.dm +++ b/code/modules/events/ghost_role/nightmare.dm @@ -31,7 +31,7 @@ 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/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 1a1fa3ac67c0c..a0bc06718c08d 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -67,7 +67,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/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/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/space_vines/vine_mutations.dm b/code/modules/events/space_vines/vine_mutations.dm index c2f8e2d41393c..57c5c003fd749 100644 --- a/code/modules/events/space_vines/vine_mutations.dm +++ b/code/modules/events/space_vines/vine_mutations.dm @@ -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. diff --git a/code/modules/events/space_vines/vine_structure.dm b/code/modules/events/space_vines/vine_structure.dm index a7b9aa2fce516..ceb5cca415a89 100644 --- a/code/modules/events/space_vines/vine_structure.dm +++ b/code/modules/events/space_vines/vine_structure.dm @@ -91,11 +91,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/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/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index bb0cc2fb0a5e3..0eaea94ff5807 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.")) /** @@ -130,7 +130,7 @@ playsound(user, 'sound/machines/ping.ogg', 25) to_chat(user, span_notice("You scan [target].")) 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.")) /** @@ -141,7 +141,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 @@ -153,7 +153,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 diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index fe8ba7586dd0e..56de1a9b10f6a 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -396,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) diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 8e5052ce96e52..c97669c41155f 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -16,7 +16,7 @@ attack_verb_continuous = list("slaps", "whacks") attack_verb_simple = list("slap", "whack") hitsound = SFX_DEFAULT_FISH_SLAP - drop_sound = 'sound/creatures/fish/fish_drop1.ogg' + drop_sound = 'sound/mobs/non-humanoids/fish/fish_drop1.ogg' pickup_sound = SFX_FISH_PICKUP sound_vary = TRUE obj_flags = UNIQUE_RENAME @@ -1288,14 +1288,14 @@ ) 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/weapons/bite.ogg', 45, TRUE, -1) + 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/weapons/thudswoosh.ogg', 30, TRUE, -1) + playsound(src, 'sound/items/weapons/thudswoosh.ogg', 30, TRUE, -1) addtimer(CALLBACK(src, PROC_REF(undo_petted)), 30 SECONDS) return TRUE diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 8e67ba2c0a1c1..22c7492fb8eaf 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -629,7 +629,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) fish.damtype = BURN fish.attack_verb_continuous = list("shocks", "zaps") fish.attack_verb_simple = list("shock", "zap") - fish.hitsound = 'sound/effects/sparks4.ogg' + fish.hitsound = 'sound/effects/sparks/sparks4.ogg' /datum/fish_trait/electrogenesis/apply_to_mob(mob/living/basic/mob) . = ..() diff --git a/code/modules/fishing/fish/types/mining.dm b/code/modules/fishing/fish/types/mining.dm index 2d8a345042cbc..9e44e08ae316c 100644 --- a/code/modules/fishing/fish/types/mining.dm +++ b/code/modules/fishing/fish/types/mining.dm @@ -172,7 +172,7 @@ 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',\ + sound_on_success = 'sound/items/weapons/parry.ogg',\ effect_on_success = /obj/effect/temp_visual/guardian/phase,\ ) @@ -186,7 +186,7 @@ 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) + playsound(src, 'sound/effects/explosion/explosion1.ogg', 40, TRUE) user.flash_act(1, 1) qdel(src) @@ -199,7 +199,7 @@ maximum_bonus = 30 /obj/item/fish/lavaloop/plasma_river/explode_on_user(mob/living/user) - playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) + 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) diff --git a/code/modules/fishing/fish/types/saltwater.dm b/code/modules/fishing/fish/types/saltwater.dm index afb14436fadfc..74f1d1d32b9e0 100644 --- a/code/modules/fishing/fish/types/saltwater.dm +++ b/code/modules/fishing/fish/types/saltwater.dm @@ -129,8 +129,8 @@ sharpness = SHARP_EDGED attack_verb_continuous = list("slashes", "cuts", "pierces") attack_verb_simple = list("slash", "cut", "pierce") - block_sound = 'sound/weapons/parry.ogg' - hitsound = 'sound/weapons/rapierhit.ogg' + block_sound = 'sound/items/weapons/parry.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' demolition_mod = 0.75 attack_speed = 1 SECONDS block_chance = 50 diff --git a/code/modules/fishing/fish/types/syndicate.dm b/code/modules/fishing/fish/types/syndicate.dm index 9f4b5b6d2bf3d..8732bb8f0bd3b 100644 --- a/code/modules/fishing/fish/types/syndicate.dm +++ b/code/modules/fishing/fish/types/syndicate.dm @@ -64,7 +64,7 @@ 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/weapons/chainsawhit.ogg' + hitsound = 'sound/items/weapons/chainsawhit.ogg' sharpness = SHARP_EDGED tool_behaviour = TOOL_SAW toolspeed = 0.5 @@ -180,8 +180,8 @@ 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/weapons/bladeslice.ogg' - block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' + block_sound = 'sound/items/weapons/parry.ogg' force = 20 sharpness = SHARP_EDGED wound_bonus = -15 diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index 7fb33da74ffad..7e46618accf72 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -99,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 diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm index f8c343d50b101..e1be9dc909ba9 100644 --- a/code/modules/fishing/fishing_portal_machine.dm +++ b/code/modules/fishing/fishing_portal_machine.dm @@ -125,11 +125,11 @@ var/datum/fish_source/stored = linked_fishing_spots[other_spot] if(stored == source) spot.balloon_alert(user, "already linked!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 15, FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + 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-sigh.ogg', 15, FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + 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)) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 08fd7c134645f..5c8b6d77abc3e 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -571,7 +571,7 @@ 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) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) update_appearance() QDEL_NULL(fishing_line) return COMPONENT_NO_DEFAULT_MESSAGE 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/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index 92687aee8d088..ae6e3945c94b4 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -489,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 @@ -588,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 @@ -628,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.")) @@ -808,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 @@ -825,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) @@ -833,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/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index ed0e5d448cd25..0481d1c491092 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -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) diff --git a/code/modules/food_and_drinks/machinery/stove_component.dm b/code/modules/food_and_drinks/machinery/stove_component.dm index fcbabafc2d12c..c5e32b541995e 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 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..a67145f691db7 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) @@ -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 282910007dd81..e4ef45bda7fde 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -274,7 +274,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/restaurant/customers/_customer.dm b/code/modules/food_and_drinks/restaurant/customers/_customer.dm index 646f31f80c67b..653ce81b7d461 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..316d5e16eaf5e 100644 --- a/code/modules/hallucination/fake_sound.dm +++ b/code/modules/hallucination/fake_sound.dm @@ -34,28 +34,28 @@ /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 @@ -63,11 +63,11 @@ /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 ba791f3a56c7c..de3b6b99411e9 100644 --- a/code/modules/hallucination/inhand_fake_item.dm +++ b/code/modules/hallucination/inhand_fake_item.dm @@ -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/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 39b5615c385d7..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) diff --git a/code/modules/hydroponics/beekeeping/bee_smoker.dm b/code/modules/hydroponics/beekeeping/bee_smoker.dm index f3eae4dc41c79..3daa75f89e63a 100644 --- a/code/modules/hydroponics/beekeeping/bee_smoker.dm +++ b/code/modules/hydroponics/beekeeping/bee_smoker.dm @@ -96,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/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/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 cf1875c8efed5..1251cb54d32b9 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 @@ -528,7 +528,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 @@ -589,7 +589,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) @@ -619,7 +619,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/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index aa63f5d41f13b..79dd725b6e354 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -802,7 +802,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/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index c3855ff6939e8..eef79ded735c5 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(1 SECONDS, 6 SECONDS)) /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 f0176e6453092..4cf7df5a671ce 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -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/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/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index dd7208d170618..7d41ba36cdc3b 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -105,9 +105,9 @@ 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." @@ -128,7 +128,7 @@ 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 @@ -140,7 +140,7 @@ 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." @@ -185,8 +185,8 @@ 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 @@ -221,7 +221,7 @@ 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) @@ -241,7 +241,7 @@ 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 @@ -255,7 +255,7 @@ 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) @@ -272,7 +272,7 @@ 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) @@ -293,7 +293,7 @@ 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") @@ -317,7 +317,7 @@ 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" @@ -348,7 +348,7 @@ 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." @@ -394,7 +394,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 = 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." @@ -445,7 +445,7 @@ 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) @@ -474,7 +474,7 @@ 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. @@ -552,7 +552,7 @@ 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) @@ -566,7 +566,7 @@ 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 @@ -606,7 +606,7 @@ 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 @@ -646,7 +646,7 @@ 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." @@ -683,7 +683,7 @@ 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. @@ -702,7 +702,7 @@ 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 @@ -725,7 +725,7 @@ 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' // Nullblade - For when you really want to feel like rolling dice during combat @@ -743,9 +743,9 @@ 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. \ @@ -896,4 +896,4 @@ // 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 4b07baaa05890..e6f34b894b3de 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/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/library/bibles.dm b/code/modules/library/bibles.dm index 42194d932e865..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)) @@ -310,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)) @@ -337,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/lib_machines.dm b/code/modules/library/lib_machines.dm index 35def980eb922..d7102fe96005a 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -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/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/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/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 aac22db015b20..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 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 646de6a2186ef..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 @@ -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/forgottenship.dm b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm index fa39b7063ae12..21bf3da443180 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm @@ -117,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 958fa51fcc109..04404dc630872 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm @@ -327,8 +327,8 @@ 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 @@ -353,9 +353,9 @@ 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 diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index b42618f94ee21..0e77140422525 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -395,7 +395,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) has_gravity = TRUE area_flags = NOTELEPORT | HIDDEN_AREA static_lighting = TRUE - ambientsounds = list('sound/ambience/servicebell.ogg') + ambientsounds = list('sound/ambience/ruin/servicebell.ogg') var/roomnumber = 0 var/obj/item/hilbertshotel/parentSphere var/datum/turf_reservation/reservation 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/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/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm index 834d8d08f807e..c504bdeca8c49 100644 --- a/code/modules/mining/boulder_processing/_boulder_processing.dm +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -262,7 +262,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 diff --git a/code/modules/mining/boulder_processing/boulder.dm b/code/modules/mining/boulder_processing/boulder.dm index 555ea50dff3bf..df717ed31be41 100644 --- a/code/modules/mining/boulder_processing/boulder.dm +++ b/code/modules/mining/boulder_processing/boulder.dm @@ -127,7 +127,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 @@ -142,7 +142,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 @@ -171,7 +171,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/brm.dm b/code/modules/mining/boulder_processing/brm.dm index 658eb97d5632f..bb7b7f650338a 100644 --- a/code/modules/mining/boulder_processing/brm.dm +++ b/code/modules/mining/boulder_processing/brm.dm @@ -284,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 1da0a7db6a394..d35ef3c2a9499 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -23,7 +23,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 @@ -126,7 +126,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) @@ -157,7 +157,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() @@ -167,17 +167,17 @@ 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/on_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 TRUE /obj/item/kinetic_crusher/update_icon_state() @@ -362,7 +362,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..36457cfa9e1d0 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -148,7 +148,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 0685dda148dee..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,10 +276,10 @@ 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) @@ -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/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 3783b5f592cd1..1ef2f778bc54b 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -80,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) @@ -124,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) @@ -134,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/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 94837a4ae4887..d355014c6ad70 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) @@ -368,7 +368,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 @@ -557,7 +557,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)) @@ -576,7 +576,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) @@ -592,7 +592,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) @@ -657,7 +657,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 @@ -794,7 +794,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 @@ -833,7 +833,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 +842,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 +873,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 +975,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 +992,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 +1034,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 +1071,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 +1083,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 +1103,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/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 2ded64c17aaea..af1b990a6fb6a 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 @@ -555,7 +555,7 @@ var/obj/item/organ/external/wings/functional/wings = get_wing_choice(exposed_human, chest) wings = new wings() wings.Insert(exposed_human) - playsound(exposed_human.loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -1) + 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") @@ -769,7 +769,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 @@ -787,7 +787,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 @@ -903,7 +903,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)) @@ -939,7 +939,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() @@ -960,7 +960,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) @@ -986,12 +986,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 @@ -1043,7 +1043,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) @@ -1068,7 +1068,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 @@ -1088,7 +1088,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) @@ -1101,7 +1101,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) @@ -1110,7 +1110,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) @@ -1121,7 +1121,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) @@ -1141,7 +1141,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") @@ -1150,7 +1150,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/mine_items.dm b/code/modules/mining/mine_items.dm index 5d96aace182a8..aaf127bf8b594 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -321,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/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 95c2a30176548..988dd6efdc14a 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -194,11 +194,11 @@ #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 - captain_sound = 'sound/misc/announce.ogg' + captain_sound = 'sound/announcer/announcement/announce.ogg' // If we don't have an assigned cap yet, check if this person qualifies for some from of captaincy. else if(!SSjob.assigned_captain && ishuman(character) && SSjob.chain_of_command[rank] && !is_banned_from(character.ckey, list(JOB_CAPTAIN))) is_captain = IS_ACTING_CAPTAIN diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 0fae07a4442dd..c812905d58fec 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -159,7 +159,7 @@ animate(transform = original_transform, time = 0.1 SECONDS) /datum/emote/jump/get_sound(mob/user) - return 'sound/weapons/thudswoosh.ogg' + return 'sound/items/weapons/thudswoosh.ogg' // Avoids playing sounds if we're a ghost /datum/emote/jump/should_play_sound(mob/user, intentional) 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_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 9a7ddef3ce0f2..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") 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/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 921909aa8a531..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) diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm index 38884bec503da..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,\ 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/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index 7b100aa554582..2466ab931cd19 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 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/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/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/deer.dm b/code/modules/mob/living/basic/farm_animals/deer/deer.dm index eb443def65996..dc27c82dd82f5 100644 --- a/code/modules/mob/living/basic/farm_animals/deer/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 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 fcb61892e5714..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) 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_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/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/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..e65fefc235e59 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" 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/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/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_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 ca07c1a043ed5..8e43e43e72c31 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm @@ -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 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 0556affe76184..78960b5340d30 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm @@ -12,7 +12,7 @@ /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 59f7ffb249d07..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!" 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/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/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_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..1885d44ce4da3 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm @@ -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/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/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_dex.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm index ef7e6fa3167c6..f6e555adfe31b 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm @@ -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_remote_control.dm b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm index adb6d79e541ae..742785769e90d 100644 --- a/code/modules/mob/living/basic/minebots/minebot_remote_control.dm +++ b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm @@ -56,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/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 2bcd715d7f5c8..596308fdee169 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" 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 e4e978568a0e6..45ea29024ad66 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/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/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 index 407f2c0997504..8aa41b3c7230d 100644 --- a/code/modules/mob/living/basic/revolutionary.dm +++ b/code/modules/mob/living/basic/revolutionary.dm @@ -13,7 +13,7 @@ melee_damage_lower = 15 melee_damage_upper = 20 obj_damage = 20 - attack_sound = 'sound/weapons/smash.ogg' + 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( @@ -49,26 +49,26 @@ ) /// Monkey screeches var/static/list/monkey_screeches = list( - '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/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/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/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/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', ) 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 7b27da8d9778e..6287c1f25e19e 100644 --- a/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm +++ b/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm @@ -77,7 +77,7 @@ ///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 @@ -119,7 +119,7 @@ . = ..() //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" @@ -142,7 +142,7 @@ /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) @@ -188,7 +188,7 @@ 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 f95a949faa27f..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" 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 ce4fbc53f51fa..7a9b6ae59f18a 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -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" @@ -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/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 d13df29806409..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" @@ -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 eb424cdce49d4..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 @@ -70,5 +70,5 @@ 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/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..ae26754259455 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) 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 15dfcdc29c045..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) 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 11e00be288b74..d7f14842d12b2 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm @@ -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/machines/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_abilities.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm index 9f565dab11253..fa21d157e9061 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/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/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/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/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm index 3a288918dbdc1..d2a634b7e9edd 100644 --- a/code/modules/mob/living/basic/vermin/frog.dm +++ b/code/modules/mob/living/basic/vermin/frog.dm @@ -26,7 +26,7 @@ response_harm_simple = "splat" density = FALSE faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES) - attack_sound = 'sound/effects/reee.ogg' + attack_sound = 'sound/mobs/non-humanoids/frog/reee.ogg' butcher_results = list(/obj/item/food/nugget = 1) pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY @@ -40,7 +40,7 @@ ai_controller = /datum/ai_controller/basic_controller/frog - var/stepped_sound = 'sound/effects/huuu.ogg' + var/stepped_sound = 'sound/mobs/non-humanoids/frog/huuu.ogg' ///How much of a reagent the mob injects on attack var/poison_per_bite = 3 ///What reagent the mob injects targets with 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 5b8aad138fe10..cb62ad956f95c 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -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/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/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index 663419ce22cff..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) @@ -121,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 21a09d82a6965..cf01a2d282b0a 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -379,7 +379,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 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/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 3c063aec7e752..ac9fd81cf976b 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -290,7 +290,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 @@ -318,7 +318,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 6d1ad16c8b1c8..f4b0fffb7a085 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/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b56351f906310..b12a0f287c124 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() @@ -182,13 +182,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. diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 978714e9bf7a3..f8552fdfa243f 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -392,7 +392,7 @@ if(body_position != STANDING_UP && !resting && !buckled && !HAS_TRAIT(src, TRAIT_FLOORED)) get_up(TRUE) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) // Shake animation if (incapacitated) @@ -499,7 +499,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 @@ -645,7 +645,7 @@ 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 diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 6995defb6dafe..74a5091565c74 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -29,17 +29,17 @@ 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', ) /datum/emote/living/carbon/crack 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 @@ -180,7 +180,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 /datum/emote/living/carbon/shoesteal diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 324c23a531456..325abea10d66d 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -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/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index bea66f71112d3..37cb6dd3995ba 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") @@ -209,12 +209,12 @@ 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) @@ -224,7 +224,7 @@ to_chat(user, "You shove [src] with great force!") else Paralyze(5 SECONDS) - playsound(loc, 'sound/weapons/punch3.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/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!") @@ -236,7 +236,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]!")) @@ -244,7 +244,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/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 0f27f0e47e69b..a7e88cf7b526c 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -176,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() @@ -267,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 8a040425a9747..4c89f9d4b66c1 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -53,60 +53,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/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index be6357f6b4f21..cbb16fea3dccc 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -15,78 +15,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.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/get_cry_sound(mob/living/carbon/human/human) if(human.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/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/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 65945467f5eb1..45faab6713931 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -25,7 +25,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 @@ -53,61 +53,61 @@ /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 f9a17b310fae9..1ae9c959c3c6e 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) @@ -44,59 +44,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. \ 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 8b347a22cca96..bcbdf0276df6f 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -132,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/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index c763127a4be7b..da7cf8f6be336 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -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 diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index a626cb47cc6d8..c71359c58f12b 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -193,8 +193,8 @@ var/mob/living/carbon/human/human_user = user if(human_user.physique == FEMALE) - return pick('sound/voice/human/gasp_female1.ogg', 'sound/voice/human/gasp_female2.ogg', 'sound/voice/human/gasp_female3.ogg') - 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" @@ -743,4 +743,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/living.dm b/code/modules/mob/living/living.dm index fc494befd9053..8c7f9c4532a8e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -406,7 +406,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) @@ -2830,7 +2830,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) ADD_TRAIT(src, TRAIT_BLOCKING_PROJECTILES, BLOCKING_TRAIT) var/icon/selected_overlay = pick(blocking_overlay) add_overlay(selected_overlay) - playsound(src, 'sound/weapons/fwoosh.ogg', 90, FALSE, frequency = 0.7) + 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) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 789a5c2ccd204..bb8d8a5d3abdf 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -166,7 +166,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]!")) @@ -275,7 +275,7 @@ 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) @@ -422,7 +422,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]!")) @@ -449,7 +449,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]!"), \ @@ -657,10 +657,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/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index fc488471861d3..3550b16829cdb 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1030,11 +1030,11 @@ 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 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/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/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 3ab7b25f8268d..6deab5f08e0ac 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 diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 7aabdafaa4825..8fe4634f0412e 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -208,7 +208,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 @@ -303,7 +303,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 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 507008caf943c..2142d1bb0a3d7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -7,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 diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 73d6ac25bdd0f..ddad79afacb91 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]!")) 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/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index bbd45e12a2733..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 @@ -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 c670f6561c86b..ae17e58686c65 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -316,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 68579730e8dd0..dd3303f35230d 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -360,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) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index d946367f6c3bd..269f08629e175 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. @@ -180,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) @@ -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/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/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 3cfc4e7dd35c7..3af739f736c0a 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 @@ -129,7 +129,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 @@ -306,7 +306,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 @@ -412,7 +412,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) 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 2d16cc169202a..1e539bcd05625 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 3d1b56d77e131..ef84034f2ac0d 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,7 +66,7 @@ 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, @@ -101,7 +101,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/hierophant/Initialize(mapload) . = ..() spawned_beacon_ref = WEAKREF(new /obj/effect/hierophant(loc)) - AddComponent(/datum/component/boss_music, 'sound/lavaland/hiero_boss.ogg', 145 SECONDS) + 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_ref) @@ -305,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) @@ -353,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) @@ -386,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 @@ -505,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) @@ -697,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 @@ -718,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]!") @@ -742,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 @@ -756,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" @@ -773,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 8b3a6b253e6dc..a7db852492442 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/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 821045b51690d..77b65d27fec85 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 @@ -142,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) @@ -181,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..8ed55103afe3c 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,7 +67,7 @@ . = ..() 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" @@ -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..a663b95f33fbc 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 @@ -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..64f658b24215e 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 @@ -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 57b49047436ee..5dba83e25320e 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 f69c010ac6bfb..46967b40b3c05 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 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/mob.dm b/code/modules/mob/mob.dm index 0e6a4d74b7279..731eeb4787667 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -987,7 +987,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( @@ -996,7 +996,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( @@ -1005,7 +1005,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) diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 00ff1b5a8fd1e..12b5c6deb2f2f 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -179,12 +179,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/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 8c4de3be84d84..7da28c17a3a46 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -22,7 +22,7 @@ return if(active || activating) 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(active || activating) 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) @@ -125,39 +125,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)) @@ -170,7 +170,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].")) @@ -178,11 +178,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 4f855fa8bc999..1336ff1707449 100644 --- a/code/modules/mod/mod_ai.dm +++ b/code/modules/mod/mod_ai.dm @@ -143,7 +143,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) diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 1faadafe0ec6d..df2096ae367a4 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -222,7 +222,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) @@ -231,7 +231,7 @@ 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 if(!wearer.incapacitated) var/atom/movable/screen/inventory/hand/ui_hand = over_object @@ -259,7 +259,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) @@ -276,14 +276,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() @@ -300,7 +300,7 @@ 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 // Makes use of tool act to prevent shoving stuff into our internal storage @@ -334,7 +334,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) @@ -342,11 +342,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) @@ -548,24 +548,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/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return new_module.forceMove(src) modules += new_module @@ -602,7 +602,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 5c8d4a2e2ee47..791c5347722b6 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -223,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") diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index aa5307957f981..e7a5a20d9f370 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)) @@ -421,7 +421,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_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_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index 374be840d9507..c17f03747b13f 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -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 c67fd7755d8c6..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() diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index 40e1889efd968..d0506b73193cb 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -96,7 +96,7 @@ /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) + playsound(src, 'sound/items/weapons/gun/general/dry_fire.ogg', 25, TRUE) return FALSE return ..() @@ -107,7 +107,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,8 +117,8 @@ 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 /// Reference to the beam following the projectile. diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 2a2d29bb08f6a..bc33172ec97f6 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -920,7 +920,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 @@ -949,7 +949,7 @@ /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) diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index 0d45bc4a44db8..f59076fa4b5ff 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -107,7 +107,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) . = ..() @@ -270,7 +270,7 @@ 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)) @@ -286,7 +286,7 @@ /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 22c30cf5c36c2..1d83f91dac81f 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 @@ -338,7 +338,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 @@ -369,7 +369,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) @@ -382,7 +382,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 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 5da8ff00241c9..8edcaff7715f0 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 diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 18c1ac6926763..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 @@ -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 d8e41c67cb5d6..3f29e3006befa 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -196,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 ..() @@ -288,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 @@ -322,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)) @@ -549,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) @@ -559,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() 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/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 37021e4fb0f82..bdc60c52be073 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -162,7 +162,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 @@ -189,7 +189,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) @@ -197,7 +197,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) 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 48966f2f2616f..90213963e3e64 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -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 d1ce57bda61d8..511c664c137ab 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -245,12 +245,12 @@ 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 a9bbff8db1b91..fe5fbbdfce10b 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -95,16 +95,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") @@ -129,7 +129,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") @@ -153,7 +153,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/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 2d51840886395..fefb76c7f84e9 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -70,7 +70,7 @@ 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"] @@ -83,7 +83,7 @@ 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"] @@ -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_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 3d7c735e4661c..bec3ca91a079e 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 @@ -589,7 +589,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 @@ -620,7 +620,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 var/shell_addendum = "" 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/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/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index ce7bb949b7b59..eacdb1323b368 100644 --- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm +++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm @@ -310,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]!") @@ -341,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 @@ -560,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 @@ -598,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/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/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/pai.dm b/code/modules/pai/pai.dm index 066a1146fd437..4b1bc23e832f8 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -463,7 +463,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/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 09858d8375b4b..6ad571896974f 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -144,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 @@ -369,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/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 5d6b10c0568a3..203d8234ca79f 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -287,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_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/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/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 425ff9d38a403..8666bcbda4dfd 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -252,7 +252,7 @@ printpicture(user, picture) if(!silent) - playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE, -3) + 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-- diff --git a/code/modules/photography/camera/other.dm b/code/modules/photography/camera/other.dm index 83e9a5fd28cac..149d69252a6ac 100644 --- a/code/modules/photography/camera/other.dm +++ b/code/modules/photography/camera/other.dm @@ -34,4 +34,4 @@ /obj/item/camera/detective/after_picture(mob/user, datum/picture/picture) . = ..() - user.playsound_local(get_turf(src), pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 35, TRUE) + 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 a8bf7a3ba90e7..fdc390fe0615a 100644 --- a/code/modules/photography/camera/silicon_camera.dm +++ b/code/modules/photography/camera/silicon_camera.dm @@ -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/photo.dm b/code/modules/photography/photos/photo.dm index 342abb1625c5a..e240e94292ddc 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -66,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) 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/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index d6c3b5d803da3..7b9bcd4f22388 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -420,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() @@ -432,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 diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index b8fe1510c918d..3f7d23244ece9 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -113,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/cable.dm b/code/modules/power/cable.dm index 5c68bb8f4c8b0..5ae5b6cb2dfed 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 diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index 7799018a238a3..5b9d983cf1dd6 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -308,7 +308,7 @@ . = ..() 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 @@ -318,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/lighting/light.dm b/code/modules/power/lighting/light.dm index 431f2095b0a69..defb73fe2c7d5 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -447,13 +447,13 @@ 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 @@ -641,7 +641,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 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/power_store.dm b/code/modules/power/power_store.dm index 8bbaa5bc0fe58..1be39dfbaa031 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) 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/emitter.dm b/code/modules/power/singularity/emitter.dm index 90aed00876359..f3dd1be2581cb 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 @@ -407,7 +407,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)) @@ -428,7 +428,7 @@ 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) @@ -461,7 +461,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" @@ -471,7 +471,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" @@ -553,7 +553,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 b15867790026d..7f9d9378b5e86 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,7 +284,7 @@ ///Third crew last second win check and flufftext for [/proc/begin_the_end()] /proc/narsie_apocalypse() if(QDELETED(GLOB.cult_narsie)) // tres - priority_announce("Normalization detected! Abort the solution package!","[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) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index cd36823a207e9..235cd358d899a 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) @@ -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 e7cc039c72df9..439c0b8d177b4 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -299,7 +299,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( diff --git a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm index aea846d237ef1..26ebb06fbeb8a 100644 --- a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm @@ -50,18 +50,18 @@ 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()) if(SUPERMATTER_DELAMINATING) - playsound(sm, 'sound/misc/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10) + playsound(sm, 'sound/announcer/alarm/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10) if(SUPERMATTER_EMERGENCY) - playsound(sm, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10) + playsound(sm, 'sound/machines/engine_alert/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 a6c3f171b61af..4fe8863815a2d 100644 --- a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm +++ b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm @@ -32,7 +32,7 @@ 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 var/message = "" var/location = victim.loc @@ -140,7 +140,7 @@ priority_announce( text = "Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.", title = "Shuttle Failure", - sound = 'sound/misc/announce_dig.ogg', + sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "grey", ) @@ -163,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 5d4c3474d59f6..a21a5ee728739 100644 --- a/code/modules/power/supermatter/supermatter_extra_effects.dm +++ b/code/modules/power/supermatter/supermatter_extra_effects.dm @@ -128,7 +128,7 @@ 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) if(delta_time) for(var/i in 1 to zap_count) @@ -144,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/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 14eb6c88864b0..394fcc96d33cb 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -114,7 +114,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 bbc1030f0d6ae..b6187760f8360 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -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 @@ -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 diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index a6118e9ac093f..1350ca6c85f95 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -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/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 42751441fca4f..ec4385dfd61e2 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -156,6 +156,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/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm index 877dc7784d02d..d6dc106ed72cf 100644 --- a/code/modules/projectiles/ammunition/energy/_energy.dm +++ b/code/modules/projectiles/ammunition/energy/_energy.dm @@ -6,5 +6,5 @@ slot_flags = null var/e_cost = LASER_SHOTS(10, 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 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..52c65d9049dff 100644 --- a/code/modules/projectiles/ammunition/energy/gravity.dm +++ b/code/modules/projectiles/ammunition/energy/gravity.dm @@ -1,6 +1,6 @@ /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 diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index a77dcfec663b1..61ef04059bb71 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -17,13 +17,13 @@ projectile_type = /obj/projectile/beam/laser/carbine e_cost = LASER_SHOTS(40, 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 @@ -90,13 +90,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 @@ -118,12 +118,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" @@ -134,7 +134,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 @@ -154,7 +154,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 632044f065203..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' + 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..213dfd0c7205d 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 @@ -62,7 +62,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 +77,18 @@ 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' /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/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 207190d08f924..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() diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 190f9e1a7aca8..d3b0782036b2b 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -23,14 +23,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 @@ -228,7 +228,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 2d77185f1d255..2222140c805a2 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -5,44 +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 @@ -174,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) /** @@ -284,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() diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index c3bb92eec7140..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 @@ -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 c0ce0b1ef2c9d..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 @@ -65,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) @@ -87,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() @@ -99,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 23c41d1d07e15..03c7f51b936be 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 @@ -54,7 +54,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 35660571074fd..ad925222703dc 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -9,16 +9,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 @@ -110,10 +110,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. @@ -138,10 +138,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 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 0317ead192882..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) @@ -200,7 +200,7 @@ icon_state = "rebarxbow" inhand_icon_state = "rebarxbow" worn_icon_state = "rebarxbow" - rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' mag_display = FALSE empty_indicator = TRUE bolt_type = BOLT_TYPE_OPEN @@ -297,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 @@ -424,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 c3ba84d1cb8cd..bf4715bdb41fd 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 @@ -159,7 +159,7 @@ burst_size = 2 fire_delay = 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 @@ -321,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 diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 39e55f94fca17..0648f7992487b 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -3,8 +3,8 @@ 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 diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm index 0bda1930c6260..d17e4be75ba89 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..2645a601c8271 100644 --- a/code/modules/projectiles/guns/energy/crank_guns.dm +++ b/code/modules/projectiles/guns/energy/crank_guns.dm @@ -19,7 +19,7 @@ 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, \ ) @@ -52,7 +52,7 @@ 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, \ ) @@ -99,7 +99,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 1180a90e8d217..0ad4f17bf07be 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -173,7 +173,7 @@ 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' /obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") ..() @@ -315,7 +315,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 a85d1d0db14ab..9c69a718986e4 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 244e68e8b031c..8072f62e46458 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) @@ -379,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 @@ -440,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 5ca2e3052518d..6a383befa54d3 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..9d68f79bf11ca 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" @@ -105,7 +105,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 @@ -146,7 +146,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 +164,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 +183,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 +219,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 +236,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 +267,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..fee1ce2600363 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 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 0fcf6b2c8e6b9..c3462abdd9144 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 da93e2c1ab8a7..51af794215790 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 5e06f115acea3..c220c1f960da1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -16,7 +16,7 @@ blocks_emissive = EMISSIVE_BLOCK_GENERIC layer = MOB_LAYER //The sound this plays on impact. - var/hitsound = 'sound/weapons/pierce.ogg' + var/hitsound = 'sound/items/weapons/pierce.ogg' var/hitsound_wall = "" resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 0e50326f1b07c..d3d1bb3811a94 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -4,8 +4,8 @@ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE 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 @@ -135,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/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/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 b393dc3415fe5..fb5c041b33875 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -5,7 +5,7 @@ paralyze = 10 SECONDS stutter = 10 SECONDS jitter = 40 SECONDS - hitsound = 'sound/weapons/taserhit.ogg' + hitsound = 'sound/items/weapons/taserhit.ogg' range = 7 tracer_type = /obj/effect/projectile/tracer/stun muzzle_type = /obj/effect/projectile/muzzle/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 23df9c9c50a6f..5f1f1017e836e 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/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 b7266ca0fe375..3c0997fda9708 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -357,7 +357,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/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index da57f6ce405a1..242456603efd4 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -630,14 +630,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) @@ -881,7 +881,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" @@ -1259,7 +1259,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" diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index c6cee8e91c062..bc719ce3ed1f2 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -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/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index ce829a6ac1222..3fd9188e8d4f0 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 /* @@ -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 df7f222a496fe..d8cc74b1079a6 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" diff --git a/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm b/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm index e7cb222ac5837..1abb9552f6d01 100644 --- a/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm @@ -41,7 +41,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 @@ -68,7 +68,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 +100,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/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 59271ccbcf9db..4670aebdd6e0a 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 @@ -403,7 +403,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 8e2353555be5d..d76e1edb863a5 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -640,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) @@ -884,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 diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 62a14ddc794be..b9699ce4b5312 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -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) @@ -579,7 +579,7 @@ 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_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 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/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 431e1d66c69a4..bb8172b32f96b 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -117,7 +117,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, pick('sound/effects/liquid_pour/liquid_pour1.ogg', 'sound/effects/liquid_pour/liquid_pour2.ogg', 'sound/effects/liquid_pour/liquid_pour3.ogg'), 50) 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() diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index c124ccec6bb77..b6db2ff2843af 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -263,7 +263,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 a214ea47eb148..67741748461c7 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -260,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 @@ -781,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 @@ -1005,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 2149b2fd4c495..945495815c089 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -232,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 diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 82ac4646e0526..b4580a8bc2353 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -434,7 +434,7 @@ 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_start.ogg', 40, TRUE) + playsound(src, 'sound/machines/lever/lever_start.ogg', 40, TRUE) if(oneway) //is it a oneway switch position = oneway @@ -444,7 +444,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) else position = CONVEYOR_BACKWARDS else - playsound(src, 'sound/machines/lever_stop.ogg', 40, TRUE) + playsound(src, 'sound/machines/lever/lever_stop.ogg', 40, TRUE) position = CONVEYOR_OFF /obj/machinery/conveyor_switch/proc/on_user_activation(mob/user, direction) @@ -606,7 +606,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 4930136b25bd7..1d1354e865dbc 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -685,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/holder.dm b/code/modules/recycling/disposal/holder.dm index 78469d491912b..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 diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index 63c3c83edd18c..1ba4b450509a6 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -86,7 +86,7 @@ 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_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 280d074c7ff19..3d36ef1eceae9 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)) @@ -280,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 */ diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index b256b4f9d4ac3..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 @@ -258,7 +258,7 @@ . = ..() 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..4d71d1fbc572e 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -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/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index 1269edb926561..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 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 ded27054695cc..998995436ad52 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -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 c69de9bb2d9c1..471129db2b262 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 6b1be6769844d..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 diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm index 89f38ee4a32e0..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) diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 46bd8746663b8..a82e818758ce7 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/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/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 152a90f9795eb..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,7 +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/glassknock.ogg' + shield_bash_sound = 'sound/effects/glass/glassknock.ogg' /datum/armor/shield_adamantineshield melee = 50 @@ -97,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/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 72d79b20ec53f..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 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/emergency.dm b/code/modules/shuttle/emergency.dm index c6336d6f38bf2..8e59c63cfbd70 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -599,7 +599,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) mode = SHUTTLE_ENDGAME 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/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..618e673c5bb17 100644 --- a/code/modules/spells/spell_types/conjure/link_worlds.dm +++ b/code/modules/spells/spell_types/conjure/link_worlds.dm @@ -2,7 +2,7 @@ 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' cooldown_time = 1 MINUTES cooldown_reduction_per_rank = 10 SECONDS 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/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/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/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/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..fa7b579002752 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -137,7 +137,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 306770c074f43..cafea93fce691 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/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/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 e7602a214f18f..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 diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm index b7542d4077f3c..a01faa1002dd2 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 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 57e88b9852025..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 diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index d1adc9619be27..355f11f763c73 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -20,7 +20,7 @@ */ /datum/action/cooldown/spell/touch check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' invocation = "High Five!" invocation_type = INVOCATION_SHOUT 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/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 5509f925cfd10..402a9aa73e19f 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -48,9 +48,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 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 16045a760324c..0bcf408b2a714 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 2a16c2a4922c1..44b114113e3cb 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. @@ -396,7 +396,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)) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 16a9a288bf0ba..cce8935f80349 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 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 acf64c3493160..547d502e8356a 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) diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index f8619943a81ed..e02d1daad8244 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 b437129db35c3..6761fa6751a5d 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -31,8 +31,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' @@ -43,8 +43,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/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 e9c136574b29b..c2cc3f551acd2 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -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/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 20458fb8dcaf8..12540945a5238 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 a31af5f69cc00..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( 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 c4987ae5c4786..84edc783af7a9 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -137,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 @@ -165,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)]!")) 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/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/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index e1f364f547559..4c0d14426cdac 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -194,7 +194,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 diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index a76b60325ff6d..0b29085bb1485 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -26,7 +26,7 @@ REMOVE_TRAIT(organ_owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(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 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..4dcd16c8ba655 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") diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 9fd0d89adfdd8..8a0fe4a89a8a0 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -42,7 +42,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) . = ..() diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm index d52e483da389d..34972c1ff21fe 100644 --- a/code/modules/surgery/organs/internal/heart/_heart.dm +++ b/code/modules/surgery/organs/internal/heart/_heart.dm @@ -115,11 +115,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 4a80f1857a0df..31e9e64750c92 100644 --- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm +++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm @@ -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 3e853a965b1bf..781df0dceb1f3 100644 --- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm +++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm @@ -187,7 +187,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 @@ -203,7 +203,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() @@ -236,7 +236,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_ABSOLUTE) regenerating.revive(HEAL_ALL & ~HEAL_REFRESH_ORGANS) diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm index 7df01c516a319..d340edbecea64 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm @@ -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/vocal_cords/_vocal_cords.dm b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm index 4ed51e77e42d6..f6fed86a90d60 100644 --- a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm +++ b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm @@ -78,7 +78,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) 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 5ade25890ecb6..76689032fb6a4 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -63,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 @@ -98,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/tools.dm b/code/modules/surgery/tools.dm index c0f71b57ca235..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 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/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 11b3bbcdec9e9..5ac6d5bc748bc 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() diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index 6d5231db96c56..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) diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index a5d309b8378b0..7f0da9331d613 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -562,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 @@ -571,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 1eed69c84ffb0..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" 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 56e1da7528d95..e2d9c50e5d66c 100644 --- a/code/modules/vehicles/cars/vim.dm +++ b/code/modules/vehicles/cars/vim.dm @@ -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 4755631dfeb0a..2d9991bb8c7ca 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -134,12 +134,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' @@ -376,7 +376,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) @@ -819,7 +819,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) 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 00d0a955d7b87..2ad10ae028d17 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/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index f89ddb9e274c2..c30e67a274633 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -18,7 +18,7 @@ ///How much base damage this clamp does var/clamp_damage = 20 ///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 @@ -370,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..71c85ee7c12d7 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 @@ -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 @@ -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_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index b167f38141594..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() 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_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 8634ff88591e7..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 diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 18f04c056e18e..53ad199cc0be7 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -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 diff --git a/code/modules/vehicles/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm index 0acfa2749a5bd..8ccee945ed26e 100644 --- a/code/modules/vehicles/mecha/working/clarke.dm +++ b/code/modules/vehicles/mecha/working/clarke.dm @@ -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 f5c55f613ee10..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, @@ -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 @@ -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 25e8ed9740943..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) 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 7322fc4d6d35e..779d253f29cc9 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -896,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) 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/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/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 7adefcaa5eda6..7e9f79a58f65a 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -460,7 +460,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/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/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..93aa4e2c53f75 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -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/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/antag/heretic/attribution.txt b/sound/ambience/antag/heretic/attribution.txt deleted file mode 100644 index 8744b2497f5bd..0000000000000 --- a/sound/ambience/antag/heretic/attribution.txt +++ /dev/null @@ -1 +0,0 @@ -heretic_sacrifice.ogg - made by sadboysusss, License: CC-by-SA \ No newline at end of file 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/magma.ogg b/sound/ambience/lavaland/magma.ogg similarity index 100% rename from sound/ambience/magma.ogg rename to sound/ambience/lavaland/magma.ogg 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/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/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 aa3cd0bf37fae..3dc8a84b12598 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/ @@ -181,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: 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/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/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_reverse.ogg b/sound/effects/glass/glass_reverse.ogg similarity index 100% rename from sound/effects/glass_reverse.ogg rename to sound/effects/glass/glass_reverse.ogg 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/magic/VoidDeflect01.ogg b/sound/effects/magic/VoidDeflect01.ogg similarity index 100% rename from sound/magic/VoidDeflect01.ogg rename to sound/effects/magic/VoidDeflect01.ogg diff --git a/sound/magic/VoidDeflect02.ogg b/sound/effects/magic/VoidDeflect02.ogg similarity index 100% rename from sound/magic/VoidDeflect02.ogg rename to sound/effects/magic/VoidDeflect02.ogg diff --git a/sound/magic/VoidDeflect03.ogg b/sound/effects/magic/VoidDeflect03.ogg similarity index 100% rename from sound/magic/VoidDeflect03.ogg rename to sound/effects/magic/VoidDeflect03.ogg 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/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/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 a9fa969808060..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 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/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/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/lead_pipe_drop.ogg b/sound/items/handling/lead_pipe/lead_pipe_drop.ogg similarity index 100% rename from sound/items/lead_pipe_drop.ogg rename to sound/items/handling/lead_pipe/lead_pipe_drop.ogg 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/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/reel1.ogg b/sound/items/reel/reel1.ogg similarity index 100% rename from sound/items/reel1.ogg rename to sound/items/reel/reel1.ogg diff --git a/sound/items/reel2.ogg b/sound/items/reel/reel2.ogg similarity index 100% rename from sound/items/reel2.ogg rename to sound/items/reel/reel2.ogg diff --git a/sound/items/reel3.ogg b/sound/items/reel/reel3.ogg similarity index 100% rename from sound/items/reel3.ogg rename to sound/items/reel/reel3.ogg diff --git a/sound/items/reel4.ogg b/sound/items/reel/reel4.ogg similarity index 100% rename from sound/items/reel4.ogg rename to sound/items/reel/reel4.ogg diff --git a/sound/items/reel5.ogg b/sound/items/reel/reel5.ogg similarity index 100% rename from sound/items/reel5.ogg rename to sound/items/reel/reel5.ogg 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/weapons/gun/general/mountedgun.ogg b/sound/items/weapons/gun/general/mountedgun.ogg similarity index 100% rename from sound/weapons/gun/general/mountedgun.ogg rename to sound/items/weapons/gun/general/mountedgun.ogg diff --git a/sound/weapons/gun/general/mountedgunend.ogg b/sound/items/weapons/gun/general/mountedgunend.ogg similarity index 100% rename from sound/weapons/gun/general/mountedgunend.ogg rename to sound/items/weapons/gun/general/mountedgunend.ogg 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/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 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 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 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/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_start.ogg b/sound/machines/lever/lever_start.ogg similarity index 100% rename from sound/machines/lever_start.ogg rename to sound/machines/lever/lever_start.ogg diff --git a/sound/machines/lever_stop.ogg b/sound/machines/lever/lever_stop.ogg similarity index 100% rename from sound/machines/lever_stop.ogg rename to sound/machines/lever/lever_stop.ogg diff --git a/sound/machines/license.txt b/sound/machines/license.txt index 0d7de5a5dfa3d..dbccfd7ea096d 100644 --- a/sound/machines/license.txt +++ b/sound/machines/license.txt @@ -1,14 +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 - -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/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/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/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/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/creatures/fish/attritbution.txt b/sound/mobs/non-humanoids/fish/attritbution.txt similarity index 100% rename from sound/creatures/fish/attritbution.txt rename to sound/mobs/non-humanoids/fish/attritbution.txt diff --git a/sound/creatures/fish/fish_drop1.ogg b/sound/mobs/non-humanoids/fish/fish_drop1.ogg similarity index 100% rename from sound/creatures/fish/fish_drop1.ogg rename to sound/mobs/non-humanoids/fish/fish_drop1.ogg diff --git a/sound/creatures/fish/fish_pickup1.ogg b/sound/mobs/non-humanoids/fish/fish_pickup1.ogg similarity index 100% rename from sound/creatures/fish/fish_pickup1.ogg rename to sound/mobs/non-humanoids/fish/fish_pickup1.ogg diff --git a/sound/creatures/fish/fish_pickup2.ogg b/sound/mobs/non-humanoids/fish/fish_pickup2.ogg similarity index 100% rename from sound/creatures/fish/fish_pickup2.ogg rename to sound/mobs/non-humanoids/fish/fish_pickup2.ogg diff --git a/sound/creatures/fish/fish_slap1.ogg b/sound/mobs/non-humanoids/fish/fish_slap1.ogg similarity index 100% rename from sound/creatures/fish/fish_slap1.ogg rename to sound/mobs/non-humanoids/fish/fish_slap1.ogg diff --git a/sound/creatures/fish/fish_slap2.ogg b/sound/mobs/non-humanoids/fish/fish_slap2.ogg similarity index 100% rename from sound/creatures/fish/fish_slap2.ogg rename to sound/mobs/non-humanoids/fish/fish_slap2.ogg 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/ambience/antag/heretic/heretic_sacrifice.ogg b/sound/music/antag/heretic/heretic_sacrifice.ogg similarity index 100% rename from sound/ambience/antag/heretic/heretic_sacrifice.ogg rename to sound/music/antag/heretic/heretic_sacrifice.ogg 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/round_start_sounds.txt b/strings/round_start_sounds.txt index c4428dc8c5def..9981097c30850 100644 --- a/strings/round_start_sounds.txt +++ b/strings/round_start_sounds.txt @@ -1,4 +1,4 @@ -sound/ambience/title1.mod -sound/ambience/title2.ogg -sound/ambience/title3.ogg -sound/ambience/clown.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 From e27489d07491fbd43c74769f0b29c619efdea346 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 05:25:15 +0000 Subject: [PATCH 038/153] Automatic changelog for PR #86726 [ci skip] --- html/changelogs/AutoChangeLog-pr-86726.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86726.yml diff --git a/html/changelogs/AutoChangeLog-pr-86726.yml b/html/changelogs/AutoChangeLog-pr-86726.yml new file mode 100644 index 0000000000000..d3f72669a0226 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86726.yml @@ -0,0 +1,5 @@ +author: "grungussuss" +delete-after: True +changes: + - 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" \ No newline at end of file From 5e66d872df3c1c1c8e1de62473a5d0248d5066fd Mon Sep 17 00:00:00 2001 From: Odairu Date: Tue, 24 Sep 2024 07:03:07 -0400 Subject: [PATCH 039/153] Fixes soapbox component hooking into literally every atom [NO GBP] (#86861) ## About The Pull Request anything and everything from ghosts to supermatter damage was getting soapbox speech, this adds a check for isliving so it only gives it to mobs ## Why It's Good For The Game bugs bugs bugs ## Changelog :cl: fix: fixes soapbox being given to non-mobs /:cl: --- code/datums/components/soapbox.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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) From 96fa7bd356cae8557b056ac78bc6a70755d84760 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:32:04 +0000 Subject: [PATCH 040/153] Automatic changelog for PR #86861 [ci skip] --- html/changelogs/AutoChangeLog-pr-86861.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86861.yml diff --git a/html/changelogs/AutoChangeLog-pr-86861.yml b/html/changelogs/AutoChangeLog-pr-86861.yml new file mode 100644 index 0000000000000..a4901fc065af2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86861.yml @@ -0,0 +1,4 @@ +author: "imedial" +delete-after: True +changes: + - bugfix: "fixes soapbox being given to non-mobs" \ No newline at end of file From 196960f6ed0db3fa2fc254c407a20a854b3f55da Mon Sep 17 00:00:00 2001 From: Sealed101 Date: Tue, 24 Sep 2024 21:50:41 +0300 Subject: [PATCH 041/153] Gelatinous cubes stop digesting dead mobs instead of mobs with 200 brute damage; Consume action changes to Eject when a mob is consumed (#86817) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Title; instead of using 200 brute damage as a point of "victim has been digested enough", it now uses death. Should be about the same mechanically, though consuming alive humans with burn damage will puke them out sooner now, since they won't be able to accumulate as much brute damage as before. But I think it's ?fine?, it feels kinda cheesy to let the cube eat an already almost fried human patty after it expires anyway. EDIT: Consume action isn't allowing for more than one mob to be consumed at a time, and the cube didn't have a way to dispose of the mob it's consuming, so per request I changed it so the action now changes to _Eject Mob_ when you consume a mob, letting you do just that. Also fixes visible message of an attempt at consuming a mob not showing the victim's name. ## Why It's Good For The Game Fixes #53512 QoL for getting rid of the consumed victim No more devouring blank space (in the visible message) ## Changelog :cl: fix: 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 fix: fixed gelatinous cube's consume attempt not showing the victim's name properly (You start attempting to devour  !) /:cl: --- .../mob/living/simple_animal/hostile/ooze.dm | 32 +++++++++++++----- icons/mob/actions/actions_slime.dmi | Bin 9174 -> 9881 bytes 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index 46967b40b3c05..a44cae6f139f5 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -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/icons/mob/actions/actions_slime.dmi b/icons/mob/actions/actions_slime.dmi index aa92eb702e27a0c87ecd686fff5f44201a2b66c0..fa81c45d24606dec297babbd5eca5e81a513104c 100644 GIT binary patch delta 9746 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 R)YGLekP=Kyu38oz^gqD4e@*}Z delta 9034 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 n^oxjPlgwq|!v0 Date: Tue, 24 Sep 2024 18:56:43 +0000 Subject: [PATCH 042/153] Automatic changelog for PR #86817 [ci skip] --- html/changelogs/AutoChangeLog-pr-86817.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86817.yml diff --git a/html/changelogs/AutoChangeLog-pr-86817.yml b/html/changelogs/AutoChangeLog-pr-86817.yml new file mode 100644 index 0000000000000..0ad4cdf010d50 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86817.yml @@ -0,0 +1,6 @@ +author: "Sealed101" +delete-after: True +changes: + - 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  !)" \ No newline at end of file From 057135702df842bd7975e02f57bfdfd61eccce0f Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:30:07 +0200 Subject: [PATCH 043/153] Fixes storage UI breaking upon an observer detaching while having your storage UI open under odd circumstances (#86842) ## About The Pull Request This is one of the stupidest issues I had the displeasure of working with and I still do not know concrete details behind the issue because some of the code introduced in this (supposed-to-be) debug PR accidentally fixed said issue. Essentially, under odd circumstances of the user either being SSD or having their storage focus stolen by something else, an observer who had their storage UI open via autoobserve could break their UI by moving away because that improperly removed the user from some lists. This is the primary theory judging from what fixed the issue, but sadly there is no concrete info behind it as all attempts to reproduce the bug, both locally and on live, have failed. Closes #85259 ## Changelog :cl: fix: Storage UI should no longer (not so much) randomly disappear, hooray! /:cl: --- code/datums/storage/storage.dm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 465a93a4c06b3..feda199d67071 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -974,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 /** @@ -1032,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 @@ -1046,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 @@ -1078,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 From f3f13d35b1ae2eb4b9c91e4918d3e27d34c41d30 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 19:30:49 +0000 Subject: [PATCH 044/153] Automatic changelog for PR #86842 [ci skip] --- html/changelogs/AutoChangeLog-pr-86842.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86842.yml diff --git a/html/changelogs/AutoChangeLog-pr-86842.yml b/html/changelogs/AutoChangeLog-pr-86842.yml new file mode 100644 index 0000000000000..ac39f0f4a5c24 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86842.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Storage UI should no longer (not so much) randomly disappear, hooray!" \ No newline at end of file From 48b7b890b440a88f3e91f054052699d227dd886d Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:19:48 -0500 Subject: [PATCH 045/153] Demotes the asstainers (#86880) (This folder doesn't even exist anymore) --- .github/CODEOWNERS | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 915dda724d53c..5d7970740da58 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -189,7 +189,6 @@ /_maps/ @EOBGames @Maurukas @MMMiracles @san7890 @ShizCalev /icons/ @Imaginos16 @Krysonism @Twaticus @Wallemations -/icons/ass/ @Ghilker @tralezab /code/__DEFINES/atmospherics/ @Ghilker @LemonInTheDark From 6a654b1612de81c57c486dcdd142cbd17cbf9695 Mon Sep 17 00:00:00 2001 From: Jerry <55355646+Jewelry-x@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:53:20 +0300 Subject: [PATCH 046/153] Fix link for rules button (#86860) ## About The Pull Request This pull request fixes the link you get redirected to when you click the "Rules" button on the top right of the game. Before it redirected to http://www.tgstation13.org/wiki/Rules but the correct link is http://tgstation13.org/wiki/rules (the www part is the problem). ## Why It's Good For The Game Makes the rules button direct you to the correct link, making it easier for someone to view the rules of the server. ## Changelog :cl: fix: fixed link for the rules button /:cl: --- code/controllers/configuration/entries/general.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 964459aea68d4..c17d86902a8a6 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -319,7 +319,7 @@ 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" From e17da3bb852a7a9e680ad2528a0a002faa350c6b Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:56:06 +0000 Subject: [PATCH 047/153] Automatic changelog for PR #86860 [ci skip] --- html/changelogs/AutoChangeLog-pr-86860.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86860.yml diff --git a/html/changelogs/AutoChangeLog-pr-86860.yml b/html/changelogs/AutoChangeLog-pr-86860.yml new file mode 100644 index 0000000000000..cbcfbcd59ef73 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86860.yml @@ -0,0 +1,4 @@ +author: "Jewelry-x" +delete-after: True +changes: + - bugfix: "fixed link for the rules button" \ No newline at end of file From 418e322ea2017c3787a1d4164b2005ddd5160f76 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:00:19 +0200 Subject: [PATCH 048/153] [NO GBP] Fixes the fishing experience gain from reeling objects (#86845) ## About The Pull Request Little oopsie since I've forgot that time is in deciseconds for a moment there, therefore it should be multiplied by 0.13 and not 1.3 ## Why It's Good For The Game I made a mistake. ## Changelog Too small to add to the CL. --- code/modules/fishing/fishing_rod.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 5c8b6d77abc3e..23aabcc3ece7c 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -153,7 +153,7 @@ 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 * 1.3) + 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)) From 9e3cf3fe5949920a9ac17518bc5c11d6c765fe0d Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:05:23 +0200 Subject: [PATCH 049/153] Fix the greeting message you get upon becoming an imaginary friend including nulls (#86866) ## About The Pull Request Previously the imaginary friend greeting message would be called on `Login()`, but this meant that it could run before it actually linked the `owner` value, thus putting nulls in the message where the owner's name should've been. This just changes it so `greet()` is only called on `Login()` if there's already an owner linked, otherwise calling it when being attached to an owner. ## Why It's Good For The Game Better if the greeting message actually says whose imaginary friend you are. ## Changelog :cl: fix: The greeting message imaginary friends get upon becoming one actually includes the owner's name, instead of displaying nothing where it should've been. /:cl: --- code/datums/brain_damage/imaginary_friend.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 99467c570990f..2ddba14059456 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -92,7 +92,8 @@ . = ..() if(!. || !client) return FALSE - greet() + if(owner) + greet() Show() /mob/camera/imaginary_friend/proc/greet() @@ -119,6 +120,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) From 7055202edb83f6c6d2a35871d139fa31445e5902 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:08:12 +0000 Subject: [PATCH 050/153] Automatic changelog for PR #86866 [ci skip] --- html/changelogs/AutoChangeLog-pr-86866.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86866.yml diff --git a/html/changelogs/AutoChangeLog-pr-86866.yml b/html/changelogs/AutoChangeLog-pr-86866.yml new file mode 100644 index 0000000000000..06135556e460c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86866.yml @@ -0,0 +1,4 @@ +author: "00-Steven" +delete-after: True +changes: + - 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." \ No newline at end of file From bb8fdcb915eddee8d76bf77c3c552f66247bda99 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:25:54 +0000 Subject: [PATCH 051/153] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-86726.yml | 5 ----- html/changelogs/AutoChangeLog-pr-86817.yml | 6 ------ html/changelogs/AutoChangeLog-pr-86842.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86860.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86861.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86866.yml | 4 ---- html/changelogs/archive/2024-09.yml | 23 ++++++++++++++++++++++ 7 files changed, 23 insertions(+), 27 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-86726.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86817.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86842.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86860.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86861.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86866.yml diff --git a/html/changelogs/AutoChangeLog-pr-86726.yml b/html/changelogs/AutoChangeLog-pr-86726.yml deleted file mode 100644 index d3f72669a0226..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86726.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - 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" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86817.yml b/html/changelogs/AutoChangeLog-pr-86817.yml deleted file mode 100644 index 0ad4cdf010d50..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86817.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Sealed101" -delete-after: True -changes: - - 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  !)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86842.yml b/html/changelogs/AutoChangeLog-pr-86842.yml deleted file mode 100644 index ac39f0f4a5c24..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86842.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Storage UI should no longer (not so much) randomly disappear, hooray!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86860.yml b/html/changelogs/AutoChangeLog-pr-86860.yml deleted file mode 100644 index cbcfbcd59ef73..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86860.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jewelry-x" -delete-after: True -changes: - - bugfix: "fixed link for the rules button" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86861.yml b/html/changelogs/AutoChangeLog-pr-86861.yml deleted file mode 100644 index a4901fc065af2..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86861.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "imedial" -delete-after: True -changes: - - bugfix: "fixes soapbox being given to non-mobs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86866.yml b/html/changelogs/AutoChangeLog-pr-86866.yml deleted file mode 100644 index 06135556e460c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86866.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index d02e79542f4ff..3eca7ba608cd9 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -739,3 +739,26 @@ 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 From 3f36ddf432f9068d7535b0666437fccfb2def09c Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Wed, 25 Sep 2024 06:13:28 +0300 Subject: [PATCH 052/153] Emote audio cooldown is now shared between all audible emotes (#86846) ## About The Pull Request all audible emotes share a cooldown now, that means, for example: emoting `*scream` will play a sound, then emoting `*cry`, if the cooldown for `*scream` hasn't passed, will not play a sound for the `*cry`, but will still play the emote. Note - all audible emotes have a default audible cooldown of 2 seconds, unless overriden on some emotes. ## Why It's Good For The Game - prevents people from spamming multiple audio emotes in quick succession. - allows us to add more emote sounds without fear of players abusing them for spam. - less audio from emotes makes the audible emotes more special and less ear-fatigue-ing - forces players to be more considerate with what audible emote they use, increasing quality of their usage for roleplay. --- code/datums/emotes.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 8d77c6fc6bdbb..d55e1fc1a0d48 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) playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore) var/is_important = emote_type & EMOTE_IMPORTANT From 56f131023bc7c20a36867e334c2262f7fa843b14 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 03:13:51 +0000 Subject: [PATCH 053/153] Automatic changelog for PR #86846 [ci skip] --- html/changelogs/AutoChangeLog-pr-86846.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86846.yml diff --git a/html/changelogs/AutoChangeLog-pr-86846.yml b/html/changelogs/AutoChangeLog-pr-86846.yml new file mode 100644 index 0000000000000..936be410215f3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86846.yml @@ -0,0 +1,4 @@ +author: "grungussus" +delete-after: True +changes: + - sound: "audible emotes share the same cooldown" \ No newline at end of file From 5717a497b8854981d0c677f2bb0613b3b8028f3f Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Wed, 25 Sep 2024 02:27:54 -0400 Subject: [PATCH 054/153] Fixes an oversight with bank accounts (#86850) ## About The Pull Request Fixes this runtime: ![image](https://github.com/user-attachments/assets/7f4640a9-fbf0-4a5e-a51d-5ca1ebe22545) `account_job` can in fact be null it seems, and that should be taken into account. ## Why It's Good For The Game Fixes oversight ## Changelog Nothing player facing (probably?) --- code/controllers/subsystem/id_access.dm | 2 +- code/modules/economy/account.dm | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/id_access.dm b/code/controllers/subsystem/id_access.dm index faa2df1050ec2..93b823f18b595 100644 --- a/code/controllers/subsystem/id_access.dm +++ b/code/controllers/subsystem/id_access.dm @@ -410,7 +410,7 @@ SUBSYSTEM_DEF(id_access) id_card.assignment = trim.assignment var/datum/job/trim_job = trim.find_job() - if (!isnull(trim_job) && !isnull(id_card.registered_account)) + 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) diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm index 5dd070f01bdae..8ec8e5b2d8a56 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -83,7 +83,8 @@ if(old_job) SSeconomy.bank_accounts_by_job[old_job.type] -= src - LAZYADD(SSeconomy.bank_accounts_by_job[new_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 From 15a0ca0b1c375ffdd766b4fac0a1ef25f8aaabfd Mon Sep 17 00:00:00 2001 From: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Date: Wed, 25 Sep 2024 02:33:29 -0400 Subject: [PATCH 055/153] Fixes augs not being able to cable heal if they aren't wearing a jumpsuit (#86705) ## About The Pull Request Trying to cable heal as an Aug while not wearing a jumpsuit makes you cable whip yourself. This fixes it so that you can cable heal even if you're chrome-ass naked. ## Why It's Good For The Game Bugfix ## Changelog :cl: Bisar fix: Fixes augs not being able to heal with cables if they're naked or going commando. /:cl: --- code/modules/power/cable.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 5ae5b6cb2dfed..4b6c03c5eae05 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -578,7 +578,7 @@ 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)) + if(uniform?.repair_sensors(src, user)) return ITEM_INTERACT_SUCCESS var/obj/item/bodypart/affecting = attacked_humanoid.get_bodypart(check_zone(user.zone_selected)) From 50a9c7ff0f25268ca41a5f415d8ad795486f0232 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 06:34:12 +0000 Subject: [PATCH 056/153] Automatic changelog for PR #86705 [ci skip] --- html/changelogs/AutoChangeLog-pr-86705.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86705.yml diff --git a/html/changelogs/AutoChangeLog-pr-86705.yml b/html/changelogs/AutoChangeLog-pr-86705.yml new file mode 100644 index 0000000000000..143e2ffc397e1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86705.yml @@ -0,0 +1,4 @@ +author: "Bisar" +delete-after: True +changes: + - bugfix: "Fixes augs not being able to heal with cables if they're naked or going commando." \ No newline at end of file From 5955036f110b5a5aaf4fc30c71c43814424c84c6 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 25 Sep 2024 08:38:10 +0200 Subject: [PATCH 057/153] Un-varedits kilo whiteship turrets (#86855) ## About The Pull Request varedited sounds/dmis make the map rely on existing in the same folder as our repo instead of only needing the .rsc file Closes #86836 ## Changelog :cl: fix: Kilo whiteship no longer has varedited turrets in it /:cl: --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> --- _maps/shuttles/whiteship_kilo.dmm | 9 +-------- code/game/machinery/porta_turret/portable_turret.dm | 7 +++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index 57cbf98e7cac8..0192f6aa1188a 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -399,14 +399,7 @@ /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/items/weapons/kinetic_accel.ogg'; - stun_projectile = /obj/projectile/kinetic/miner; - stun_projectile_sound = 'sound/items/weapons/kinetic_accel.ogg' - }, +/obj/machinery/porta_turret/centcom_shuttle/weak/mining, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/bar) "rC" = ( diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index f3981484c3caf..e64e01bbcf246 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -904,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// //////////////////////// From 798907453580bb3eec55b7f1f6d173ebbbcd34d3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 06:38:34 +0000 Subject: [PATCH 058/153] Automatic changelog for PR #86855 [ci skip] --- html/changelogs/AutoChangeLog-pr-86855.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86855.yml diff --git a/html/changelogs/AutoChangeLog-pr-86855.yml b/html/changelogs/AutoChangeLog-pr-86855.yml new file mode 100644 index 0000000000000..a0b5875f2f90a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86855.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Kilo whiteship no longer has varedited turrets in it" \ No newline at end of file From 24548c154ef926329e5d63fa36829fae1a478f8e Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Wed, 25 Sep 2024 08:54:08 +0200 Subject: [PATCH 059/153] Respriting the experimentor (#86848) --- icons/obj/machines/experimentator.dmi | Bin 4334 -> 4493 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/machines/experimentator.dmi b/icons/obj/machines/experimentator.dmi index 924606d9847bbca78105a7b7b107e28da366c19d..64e11b3ead0869e76abb359d59e7efa41ea921a1 100644 GIT binary patch literal 4493 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 Date: Wed, 25 Sep 2024 06:54:29 +0000 Subject: [PATCH 060/153] Automatic changelog for PR #86848 [ci skip] --- html/changelogs/AutoChangeLog-pr-86848.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86848.yml diff --git a/html/changelogs/AutoChangeLog-pr-86848.yml b/html/changelogs/AutoChangeLog-pr-86848.yml new file mode 100644 index 0000000000000..d5d403f1ccdd1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86848.yml @@ -0,0 +1,4 @@ +author: "Skilets" +delete-after: True +changes: + - image: "Resprited the experimentor." \ No newline at end of file From ddc6a2fa8dacaccda4de16d7498c79e7787e12dc Mon Sep 17 00:00:00 2001 From: FinancialGoose <92416224+TheBoondock@users.noreply.github.com> Date: Wed, 25 Sep 2024 07:49:57 -0400 Subject: [PATCH 061/153] Add fire proof flag to item that are lava proofed by xenobio potion (#86871) ## About The Pull Request fix #85250 ## Why It's Good For The Game Kinda makes sense that lava proofed item wouldnt break from fire damage ## Changelog :cl: fix: fixed lava proofed clothing from xenobio potion being damaged from fire /:cl: --- code/modules/research/xenobiology/crossbreeding/_potions.dm | 1 + 1 file changed, 1 insertion(+) 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) From e1637f7633608b14970fa9e4eb39c24c05923524 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:55:45 +0000 Subject: [PATCH 062/153] Automatic changelog for PR #86871 [ci skip] --- html/changelogs/AutoChangeLog-pr-86871.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86871.yml diff --git a/html/changelogs/AutoChangeLog-pr-86871.yml b/html/changelogs/AutoChangeLog-pr-86871.yml new file mode 100644 index 0000000000000..dd62bbdec51f4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86871.yml @@ -0,0 +1,4 @@ +author: "TheBoondock" +delete-after: True +changes: + - bugfix: "fixed lava proofed clothing from xenobio potion being damaged from fire" \ No newline at end of file From df3fc8c626502a840228b6ac97b4b7e50db642eb Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:35:18 +0200 Subject: [PATCH 063/153] Fixes cat ear layering, makes getFlatIcon account for RESET_COLOR on under/overlays (#86757) ## About The Pull Request After the external organ removal pr, cat ears stopped being as weirdly specialcased, and instead just used a `/datum/bodypart_overlay/mutant` subtype. However, this was set up in a way where the inner ears were put on a different layer from the outer ears, leading to wonky layering. In this pr, we revert their layers and instead apply the inner ears as an overlay onto the base ears, fixing this. Thank you Melbert for the idea. o7 ### Addendum: Additionally, as this pr tripped the screenshot tests, makes the `getFlatIcon(...)` proc account for `RESET_COLOR` on under/overlays. We do this by making it stop applying the colour after merging all the under/overlays, and instead apply it and the parent color _before_ merging any under/overlays, while proxying the parent color as a new parameter `parentcolor` to any new `getFlatIcon(...)` calls. This coincidentally also fixes usage of `getFlatIcon(...)` on husked bodies, as those also used `RESET_COLOR` for their blood overlay. The screenshot tests had to be updated for this. ## Why It's Good For The Game Fixes #86453. ## Changelog :cl: fix: Fixed cat ears not layering properly. fix: Husked bodies show their blood with the right colours in photographs. /:cl: --- code/__HELPERS/icons.dm | 29 +++++++++++++----- .../surgery/organs/internal/ears/_ears.dm | 26 +++++++++++----- .../screenshots/screenshot_husk_body.png | Bin 826 -> 826 bytes .../screenshot_husk_body_missing_limbs.png | Bin 788 -> 788 bytes icons/mob/human/cat_features.dmi | Bin 1756 -> 1906 bytes 5 files changed, 41 insertions(+), 14 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 4c0cf3038f58f..7c12561c9977b 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -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) { \ @@ -513,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 @@ -520,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 @@ -553,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) diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 8a0fe4a89a8a0..83e41b44fa3e3 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -128,6 +128,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' @@ -144,12 +145,12 @@ /// Bodypart overlay for the horrible cat ears /datum/bodypart_overlay/mutant/cat_ears - layers = EXTERNAL_FRONT | EXTERNAL_ADJACENT + layers = EXTERNAL_FRONT | EXTERNAL_BEHIND color_source = ORGAN_COLOR_HAIR feature_key = "ears" - /// We dont color the inner part, which is the front layer - var/colorless_layer = EXTERNAL_FRONT + /// 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 @@ -159,10 +160,21 @@ return FALSE return TRUE -/datum/bodypart_overlay/mutant/cat_ears/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(draw_layer != bitflag_to_layer(colorless_layer)) - return ..() - return overlay +/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 /obj/item/organ/internal/ears/penguin name = "penguin ears" diff --git a/code/modules/unit_tests/screenshots/screenshot_husk_body.png b/code/modules/unit_tests/screenshots/screenshot_husk_body.png index d113b47384678017d1704b8f5f5ea1c76f2dc372..0892b864695acd35d2995b24b75ad3893e8a068b 100644 GIT binary patch delta 45 zcmV+|0Mh@u2D%22FCt<90H&sg=b`7k&%y4C;%H98$2EWg8QE1u~F#) DhA0uB delta 45 zcmV+|0Mh@u2D%22FCsty0H&sg=b`7k&%xz8UPX!5+@V@(#TuKu~F#) DbW;$e diff --git a/code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png b/code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png index 1a1db7dfd87fee800a76d21706f5caa6394f8e48..6ea75db4bb7b79382e3a7f9bfe5f4ba5abb18bed 100644 GIT binary patch delta 45 zcmV+|0Mh@I29ySnFCt<90H&sg=b`7k&%y4C;%H98$2EWg8QE1u~EYU Dc+3$l delta 45 zcmV+|0Mh@I29ySnFCsty0H&sg=b`7k&%xz8UPX!5+@V@(#TuKu~EYU DX7>;? diff --git a/icons/mob/human/cat_features.dmi b/icons/mob/human/cat_features.dmi index d2d67fdd9b32e40f5b047be2f169431c1c6f8b53..6e7fd024fee1d2b32e9e8feac22fbd88cb568dc4 100644 GIT binary patch literal 1906 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 From 8c3c9a6ea29bf32385c148c5294e3f6a18f57bf3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:35:46 +0000 Subject: [PATCH 064/153] Automatic changelog for PR #86757 [ci skip] --- html/changelogs/AutoChangeLog-pr-86757.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86757.yml diff --git a/html/changelogs/AutoChangeLog-pr-86757.yml b/html/changelogs/AutoChangeLog-pr-86757.yml new file mode 100644 index 0000000000000..1f43c19259259 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86757.yml @@ -0,0 +1,5 @@ +author: "00-Steven" +delete-after: True +changes: + - bugfix: "Fixed cat ears not layering properly." + - bugfix: "Husked bodies show their blood with the right colours in photographs." \ No newline at end of file From 0a3ec28175690c094e45c8c23a350fbccea57277 Mon Sep 17 00:00:00 2001 From: Jerry <55355646+Jewelry-x@users.noreply.github.com> Date: Wed, 25 Sep 2024 20:39:15 +0300 Subject: [PATCH 065/153] Implement functionality to toggle broadcast camera microphone on and off, independent of camera state. (#86694) Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- .../objects/items/devices/broadcast_camera.dm | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/code/game/objects/items/devices/broadcast_camera.dm b/code/game/objects/items/devices/broadcast_camera.dm index 7ab68b8a55736..78868844e48cb 100644 --- a/code/game/objects/items/devices/broadcast_camera.dm +++ b/code/game/objects/items/devices/broadcast_camera.dm @@ -22,6 +22,8 @@ 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 @@ -56,6 +58,7 @@ /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) . = ..() @@ -85,6 +88,8 @@ // 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) @@ -102,3 +107,18 @@ 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) From bcfe54f9c9ce2bf7647e2ff25020499d60522b4b Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:39:43 +0000 Subject: [PATCH 066/153] Automatic changelog for PR #86694 [ci skip] --- html/changelogs/AutoChangeLog-pr-86694.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86694.yml diff --git a/html/changelogs/AutoChangeLog-pr-86694.yml b/html/changelogs/AutoChangeLog-pr-86694.yml new file mode 100644 index 0000000000000..b060a13bf5910 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86694.yml @@ -0,0 +1,4 @@ +author: "Jewelry-x" +delete-after: True +changes: + - rscadd: "Added ability to turn broadcast microphone on or off" \ No newline at end of file From c42d4dcfb212836fd4c6e9c94cf989d96cea2c47 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:18:24 -0500 Subject: [PATCH 067/153] Health Analyzer Rework (medial mains inquire within) (#86666) --- code/__DEFINES/chat.dm | 2 + code/__DEFINES/surgery.dm | 2 + code/datums/components/irradiated.dm | 8 + .../status_effects/debuffs/genetic_damage.dm | 13 +- .../status_effects/debuffs/hallucination.dm | 6 +- code/datums/wounds/_wounds.dm | 34 +- code/datums/wounds/bones.dm | 15 +- code/datums/wounds/burns.dm | 44 +- code/datums/wounds/cranial_fissure.dm | 3 +- code/datums/wounds/pierce.dm | 15 +- code/datums/wounds/slash.dm | 14 +- .../items/devices/scanners/autopsy_scanner.dm | 9 +- .../items/devices/scanners/health_analyzer.dm | 392 +++++++++--------- .../heretic/items/corrupted_organs.dm | 14 +- code/modules/language/_language_holder.dm | 4 - .../basic/lavaland/legion/legion_tumour.dm | 2 +- code/modules/mob/living/brain/brain_item.dm | 22 +- code/modules/surgery/organs/_organ.dm | 31 +- .../organs/internal/appendix/_appendix.dm | 9 +- .../surgery/organs/internal/ears/_ears.dm | 16 + .../surgery/organs/internal/eyes/_eyes.dm | 30 ++ .../surgery/organs/internal/heart/_heart.dm | 9 + 22 files changed, 437 insertions(+), 257 deletions(-) diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index 40f342df26834..516fe8c4e193a 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -51,3 +51,5 @@ #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/surgery.dm b/code/__DEFINES/surgery.dm index feddc24c6f858..237e956ca7fae 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -28,6 +28,8 @@ #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) diff --git a/code/datums/components/irradiated.dm b/code/datums/components/irradiated.dm index 9562f161fb4a8..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) @@ -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/status_effects/debuffs/genetic_damage.dm b/code/datums/status_effects/debuffs/genetic_damage.dm index 91cfc593fcc41..21b6f1db2185c 100644 --- a/code/datums/status_effects/debuffs/genetic_damage.dm +++ b/code/datums/status_effects/debuffs/genetic_damage.dm @@ -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/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index fe6c83d8169e9..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" @@ -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". diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 45635f5a70a20..667684c0f9f15 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -199,7 +199,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 @@ -334,7 +336,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" @@ -367,8 +371,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 394486fef9a24..a4ef3bd7b7df7 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -41,7 +41,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) @@ -135,6 +135,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.") @@ -168,9 +175,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 @@ -249,7 +272,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 @@ -280,7 +303,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 @@ -304,7 +328,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 @@ -330,7 +358,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 diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm index 45c8528717c91..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" diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index a276dbfbad476..2cdc2bab382ac 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -192,7 +192,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' @@ -223,7 +226,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' @@ -253,7 +259,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 31c44a8cbe79b..fd3cb4bd7b2b1 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -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/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 af0ab50b77284..d51a36fcb31b3 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -60,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) || user.is_blind()) - return ITEM_INTERACT_BLOCKING var/mob/living/M = interacting_with @@ -71,12 +69,20 @@ // 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:
\tOverall status: Healthy")]\ -
[span_info("Key: Suffocation/Toxin/Burn/Brute")]\ -
[span_info("\tDamage specifics: 0-0-0-0")]\ -
[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) && !user.is_blind()) + to_chat(user, examine_block(floor_text)) + last_scan_text = floor_text return if(ispodperson(M) && !advanced) @@ -87,22 +93,21 @@ 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 = FALSE) + 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) || user.is_blind()) - return ITEM_INTERACT_BLOCKING - - chemscan(user, interacting_with) + if(user.can_read(src) && !user.is_blind()) + chemscan(user, interacting_with) return ITEM_INTERACT_SUCCESS /obj/item/healthanalyzer/add_item_context( @@ -139,37 +144,33 @@ 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.stat == DEAD ? 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 - render_list += "[span_info("Analyzing results for [target]:")]
Overall status: [mob_status]
" + 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!
" - 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)) - render_list += "Subject has been husked by severe burns.
" + render_list += "Subject has been husked by [conditional_tooltip("severe burns", "Tend burns and apply a de-husking agent, such as [/datum/reagent/medicine/c2/synthflesh::name].", tochat)].
" else if (HAS_TRAIT_FROM(target, TRAIT_HUSK, CHANGELING_DRAIN)) - render_list += "Subject has been husked by dessication.
" + render_list += "Subject has been husked by [conditional_tooltip("desiccation", "Irreparable. Under normal circumstances, revival can only proceed via brain transplant.", tochat)].
" else render_list += "Subject has been husked by mysterious causes.
" @@ -186,139 +187,156 @@ 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()) - 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 " - if(TRAUMA_RESILIENCE_MAGIC, TRAUMA_RESILIENCE_ABSOLUTE) - trauma_desc += "permanent " - trauma_desc += trauma.scan_desc - trauma_text += trauma_desc - render_list += "Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].
" - if(carbontarget.quirks.len) + 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)].
" - if (HAS_TRAIT(target, TRAIT_IRRADIATED)) - render_list += "Subject is irradiated. Supply toxin healing.
" - - //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.
" - else if(HAS_TRAIT_FROM(carbontarget, TRAIT_DEAF, EAR_DAMAGE)) - render_list += "Subject is deaf from ear damage.
" - else if(HAS_TRAIT(carbontarget, TRAIT_DEAF)) - render_list += "Subject is deaf.
" - else - if(ears.damage) - render_list += "Subject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage.
" - if(ears.deaf) - render_list += "Subject is [ears.damage > ears.maxHealth ? "permanently": "temporarily"] deaf.
" - - // 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.
" - else if(carbontarget.is_nearsighted()) - render_list += "Subject is nearsighted.
" - // 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]
" 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()) + if(advanced && humantarget.has_dna() && humantarget.dna.stability != initial(humantarget.dna.stability)) render_list += "Genetic Stability: [humantarget.dna.stability]%.
" // Hulk and body temperature @@ -342,51 +360,22 @@ else render_list += "[body_temperature_message]
" - // 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]
" - var/tdelta = round(world.time - target.timeofdeath) - render_list += "Subject died [DisplayTimeText(tdelta)] ago.
" - - // 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()])
Recommended 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
\ -
Name: [disease.name].
Type: [disease.spread_text].
Stage: [disease.stage]/[disease.max_stages].
Possible Cure: [disease.cure_text]
\ -
" // divs do not need extra linebreak - // 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!
" - 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]")]
" - 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]
" + 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) @@ -394,22 +383,33 @@ else 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.examine_title(user)]" : ", [cyberimp.examine_title(user)]"]" - if(cyberimp_detect) - render_list += "Detected cybernetic modifications:
" - render_list += "[cyberimp_detect]
" - // 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]
\ +
" + // Time of death + if(target.station_timestamp_timeofdeath && (target.stat == DEAD || (HAS_TRAIT(target, TRAIT_FAKEDEATH) && !advanced))) + 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) . = ..() @@ -426,9 +426,9 @@ /obj/item/healthanalyzer/proc/print_report(mob/user) var/obj/item/paper/report_paper = new(get_turf(src)) - report_paper.color = COLOR_STARLIGHT - report_paper.name = "Health scan report" - var/report_text = "
Health scan report. Time of scan: [station_time_timestamp()]


" + 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) 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/language/_language_holder.dm b/code/modules/language/_language_holder.dm index a368186a5137b..b48a1ab1530ab 100644 --- a/code/modules/language/_language_holder.dm +++ b/code/modules/language/_language_holder.dm @@ -510,13 +510,9 @@ GLOBAL_LIST_INIT(prototype_language_holders, init_language_holder_prototypes()) // 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() . = ..() 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 1885d44ce4da3..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 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/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index 4d28b987abcaf..3e67b5c43792b 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -320,27 +320,40 @@ 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) return Insert(new_owner, special = TRUE, movement_flags = DELETE_IF_REPLACED) diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index 169495bccaa33..436307322951f 100644 --- a/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -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/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 83e41b44fa3e3..e45bb7c4f4a4d 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -57,6 +57,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 * diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 9a2174a939fe7..69d5abf197897 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -121,6 +121,36 @@ #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) diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm index 34972c1ff21fe..ce659792529bb 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) ..() From 858d488990f22c3a7f05574d29d1aa46b205103f Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 18:18:45 +0000 Subject: [PATCH 068/153] Automatic changelog for PR #86666 [ci skip] --- html/changelogs/AutoChangeLog-pr-86666.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86666.yml diff --git a/html/changelogs/AutoChangeLog-pr-86666.yml b/html/changelogs/AutoChangeLog-pr-86666.yml new file mode 100644 index 0000000000000..baf1ed3575049 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86666.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - qol: "Health Analyzer output has been reworked to be less \"it takes up my entire chat box\", report any oddities or missing information" \ No newline at end of file From fac6932cb6173d09f949cbef0476f5464446fd8c Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 00:26:51 +0000 Subject: [PATCH 069/153] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-86666.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86694.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86705.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86757.yml | 5 ----- html/changelogs/AutoChangeLog-pr-86846.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86848.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86855.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86871.yml | 4 ---- html/changelogs/archive/2024-09.yml | 20 ++++++++++++++++++++ 9 files changed, 20 insertions(+), 33 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-86666.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86694.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86705.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86757.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86846.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86848.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86855.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86871.yml diff --git a/html/changelogs/AutoChangeLog-pr-86666.yml b/html/changelogs/AutoChangeLog-pr-86666.yml deleted file mode 100644 index baf1ed3575049..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86666.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - qol: "Health Analyzer output has been reworked to be less \"it takes up my entire chat box\", report any oddities or missing information" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86694.yml b/html/changelogs/AutoChangeLog-pr-86694.yml deleted file mode 100644 index b060a13bf5910..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86694.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jewelry-x" -delete-after: True -changes: - - rscadd: "Added ability to turn broadcast microphone on or off" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86705.yml b/html/changelogs/AutoChangeLog-pr-86705.yml deleted file mode 100644 index 143e2ffc397e1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86705.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Bisar" -delete-after: True -changes: - - bugfix: "Fixes augs not being able to heal with cables if they're naked or going commando." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86757.yml b/html/changelogs/AutoChangeLog-pr-86757.yml deleted file mode 100644 index 1f43c19259259..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86757.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - bugfix: "Fixed cat ears not layering properly." - - bugfix: "Husked bodies show their blood with the right colours in photographs." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86846.yml b/html/changelogs/AutoChangeLog-pr-86846.yml deleted file mode 100644 index 936be410215f3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86846.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussus" -delete-after: True -changes: - - sound: "audible emotes share the same cooldown" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86848.yml b/html/changelogs/AutoChangeLog-pr-86848.yml deleted file mode 100644 index d5d403f1ccdd1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86848.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Skilets" -delete-after: True -changes: - - image: "Resprited the experimentor." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86855.yml b/html/changelogs/AutoChangeLog-pr-86855.yml deleted file mode 100644 index a0b5875f2f90a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86855.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Kilo whiteship no longer has varedited turrets in it" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86871.yml b/html/changelogs/AutoChangeLog-pr-86871.yml deleted file mode 100644 index dd62bbdec51f4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86871.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheBoondock" -delete-after: True -changes: - - bugfix: "fixed lava proofed clothing from xenobio potion being damaged from fire" \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index 3eca7ba608cd9..f3d7d5ab95569 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -762,3 +762,23 @@ - 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 From 1cfb3bf54df478d0ea934aad95e00acb31be1ff2 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Thu, 26 Sep 2024 05:57:17 +0300 Subject: [PATCH 070/153] removes a few unused sound files (#86875) ## About The Pull Request removed: - null.ogg (40 seconds of silence) - YeeHaw.ogg ## Why It's Good For The Game - I couldn't find a use for YeeHaw.ogg - null.ogg was used before for magic with `pick()`, we can send null as sound now so we don't need it anymore and it's unused. ## Changelog Nothing player facing --- sound/misc/Yeehaw.ogg | Bin 12582 -> 0 bytes sound/misc/null.ogg | Bin 5607 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sound/misc/Yeehaw.ogg delete mode 100644 sound/misc/null.ogg diff --git a/sound/misc/Yeehaw.ogg b/sound/misc/Yeehaw.ogg deleted file mode 100644 index 05bec20b9c120a6bd0f48c5dd5386d365da68611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12582 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 From 10909f42a4a05c9f7414c64c0add02d7f6fd1f10 Mon Sep 17 00:00:00 2001 From: ZeWaka Date: Wed, 25 Sep 2024 19:57:58 -0700 Subject: [PATCH 071/153] Fixes flashing render when positioning cached TGUI windows (at cost of dev hotloading flicker) (#86868) ## About The Pull Request Fixes the following: https://github.com/user-attachments/assets/575c0ae9-b53d-446b-ab4b-7f6eb22a1c61 It now looks like: https://github.com/user-attachments/assets/60ad64f0-da02-47f9-9bcd-edf2aba441e8 This comes at the cost of a small flash when a UI is hotloaded during tgui dev server development: https://github.com/user-attachments/assets/c1b26fe2-5be3-4388-903b-45b04fc6ac6e Basically, [this bit of code](https://github.com/tgstation/tgstation/blob/b523190c6dd2d895f4e228d74085cfe98f594ca4/tgui/packages/tgui/backend.ts#L210) is no longer working 100% as intended. I spent an hour trying to think about how to fix it to no avail. Port upstream from https://github.com/goonstation/goonstation/pull/20060 ## Why It's Good For The Game shitty flashing sucks ## Changelog :cl: fix: TGUI windows now flash less when opening new windows. /:cl: --- tgui/packages/tgui/layouts/Window.tsx | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tgui/packages/tgui/layouts/Window.tsx b/tgui/packages/tgui/layouts/Window.tsx index abf35d8a31142..f00ed542dd071 100644 --- a/tgui/packages/tgui/layouts/Window.tsx +++ b/tgui/packages/tgui/layouts/Window.tsx @@ -6,7 +6,13 @@ import { classes } from 'common/react'; import { decodeHtmlEntities, toTitleCase } from 'common/string'; -import { PropsWithChildren, ReactNode, useEffect } from 'react'; +import { + PropsWithChildren, + ReactNode, + useEffect, + useLayoutEffect, + useState, +} from 'react'; import { backendSuspendStart, useBackend } from '../backend'; import { globalStore } from '../backend'; @@ -51,9 +57,19 @@ export const Window = (props: Props) => { const { config, suspended } = useBackend(); const { debugLayout = false } = useDebug(); + const [isReadyToRender, setIsReadyToRender] = useState(false); + + // We need to set the window to be invisible before we can set its geometry + // Otherwise, we get a flicker effect when the window is first rendered + useLayoutEffect(() => { + Byond.winset(Byond.windowId, { + 'is-visible': false, + }); + setIsReadyToRender(true); + }, []); useEffect(() => { - if (!suspended) { + if (!suspended && isReadyToRender) { const updateGeometry = () => { const options = { ...config.window, @@ -67,6 +83,10 @@ export const Window = (props: Props) => { setWindowKey(config.window.key); } recallWindowGeometry(options); + Byond.winset(Byond.windowId, { + 'is-visible': true, + }); + logger.log('set to visible'); }; Byond.winset(Byond.windowId, { @@ -79,7 +99,7 @@ export const Window = (props: Props) => { logger.log('unmounting'); }; } - }, [width, height]); + }, [isReadyToRender, width, height]); const dispatch = globalStore.dispatch; const fancy = config.window?.fancy; From c95458f28d36e63610b045f255f2e532679a21eb Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Thu, 26 Sep 2024 05:02:01 +0200 Subject: [PATCH 072/153] Fixes water overlays showing on toilets facing directions other than SOUTH (#86878) ## About The Pull Request The overlays shows on directions other than south because the code doesn't update the overlays whenever the dir is changed. Honestly saving a tiny blip of space with a pair of 1-dir static icons isn't worth making all this messy code over anyway, so I just scratched all of it and gave the icon state 4 dirs (3 of which are empty but that may change if someone decides to give the toilet a 3/4 perspective when facing right or left. ## Why It's Good For The Game Fixed water overlays showing on toilets facing directions other than SOUTH (down). ## Changelog :cl: fix: Fixed water overlays showing on toilets facing directions other than SOUTH (down). /:cl: --- .../structures/water_structures/toilet.dm | 8 ++------ icons/obj/watercloset.dmi | Bin 34282 -> 34872 bytes 2 files changed, 2 insertions(+), 6 deletions(-) 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/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index f8f83d9ab54aefcf70f972051ad7c62c6eed2ed9..c8bee52855868a69b7a83605c6016e9b765c91ba 100644 GIT binary patch literal 34872 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 DQ7qmr literal 34282 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 YV9Wb&RWRZ>AmE?uCnd@9k0$>A2b!lsZU6uP From 1f401f2671babfc7519ad584f4c3fb184ee9a47b Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 03:03:02 +0000 Subject: [PATCH 073/153] Automatic changelog for PR #86868 [ci skip] --- html/changelogs/AutoChangeLog-pr-86868.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86868.yml diff --git a/html/changelogs/AutoChangeLog-pr-86868.yml b/html/changelogs/AutoChangeLog-pr-86868.yml new file mode 100644 index 0000000000000..9c4c41e03638a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86868.yml @@ -0,0 +1,4 @@ +author: "ZeWaka" +delete-after: True +changes: + - bugfix: "TGUI windows now flash less when opening new windows." \ No newline at end of file From b9245878a4901cfdf906e75dcd486251ec824c73 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 03:03:14 +0000 Subject: [PATCH 074/153] Automatic changelog for PR #86878 [ci skip] --- html/changelogs/AutoChangeLog-pr-86878.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86878.yml diff --git a/html/changelogs/AutoChangeLog-pr-86878.yml b/html/changelogs/AutoChangeLog-pr-86878.yml new file mode 100644 index 0000000000000..853afc7dcbed0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86878.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixed water overlays showing on toilets facing directions other than SOUTH (down)." \ No newline at end of file From 8fa9207abc416e227036353de4e1640e0032a4e1 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 25 Sep 2024 20:52:48 -0700 Subject: [PATCH 075/153] Removes particles from Slimed and Slime Food status effects to fix fps lag in xenobio (#86701) ## About The Pull Request Removes particles from Slimed and Slime Food status effects to fix fps lag in xenobio ## Why It's Good For The Game Particles, when used in excessive density, lag the shit out of clients because BYOND. Xenobiology not only creates a lot of particles using both of these status effects, it also rapidly duplicates because of the design of xenobiology. Ergo, massive lag as xenobiology scales up in size over the round progression. This is bad for obvious reasons. Last PR got ignored by both keyholders and maintainers #86076 so I'm remaking it because letting an FPS fix stale out is incredibly bad. Long-term for particles, because they're a dumpster fire from BYOND but we don't want to restrict people from using the feature, we should have a particle management subsystem that keeps track of particle density in an area using the cell system to automatically approve/deny creation of particles to avoid too high of clientside costs, and also automatically handling using shared holder particles in nullspace and adding to viscontents so we can use one particle everywhere it's needed without creating multiple ccing @armhulenn cuz they're a particle gamer ## Changelog :cl: fix: Removes particles from Slimed and Slime Food status effects to fix fps lag in xenobio /:cl: --- .../datums/status_effects/debuffs/slime/slime_food.dm | 9 --------- code/datums/status_effects/debuffs/slime/slimed.dm | 11 ----------- 2 files changed, 20 deletions(-) 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/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!") From 49a7e2360a88cea3a9cb37de0b2fea9d84791ac4 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 04:00:27 +0000 Subject: [PATCH 076/153] Automatic changelog for PR #86701 [ci skip] --- html/changelogs/AutoChangeLog-pr-86701.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86701.yml diff --git a/html/changelogs/AutoChangeLog-pr-86701.yml b/html/changelogs/AutoChangeLog-pr-86701.yml new file mode 100644 index 0000000000000..691d2cb95a2d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86701.yml @@ -0,0 +1,4 @@ +author: "Iamgoofball" +delete-after: True +changes: + - bugfix: "Removes particles from Slimed and Slime Food status effects to fix fps lag in xenobio" \ No newline at end of file From 42ff7bf843fb5b2ce1d9910c01e734a7d4fa93b6 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Thu, 26 Sep 2024 08:57:08 +0200 Subject: [PATCH 077/153] [NO GBP] The Pun Pun job trait actually removes the premapped Pun Pun (#86877) ## About The Pull Request Yeah, I've got the `SSticker.HasRoundStarted` check wrong. ## Why It's Good For The Game Until proven otherwise, monkeys do not reproduce by mitosis. ## Changelog :cl: fix: The Pun Pun job trait doesn't leave behind a fake (or is it?) Pun Pun. /:cl: --- code/datums/station_traits/job_traits.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/station_traits/job_traits.dm b/code/datums/station_traits/job_traits.dm index b23a694cfdec9..3e8171d99c57b 100644 --- a/code/datums/station_traits/job_traits.dm +++ b/code/datums/station_traits/job_traits.dm @@ -258,7 +258,8 @@ /datum/station_trait/job/pun_pun/New() . = ..() - if(!SSticker.HasRoundStarted() || !GLOB.the_one_and_only_punpun) //Make sure we don't have two Pun Puns if loaded before the start of the round. + //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) From 52d81d9695aa1a4fd25c94d351311a288d183c14 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 06:57:30 +0000 Subject: [PATCH 078/153] Automatic changelog for PR #86877 [ci skip] --- html/changelogs/AutoChangeLog-pr-86877.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86877.yml diff --git a/html/changelogs/AutoChangeLog-pr-86877.yml b/html/changelogs/AutoChangeLog-pr-86877.yml new file mode 100644 index 0000000000000..5c50f776ebf29 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86877.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "The Pun Pun job trait doesn't leave behind a fake (or is it?) Pun Pun." \ No newline at end of file From ad111f4950a6548f5ac1a573e65d749b06fdf410 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:49:54 +0200 Subject: [PATCH 079/153] Spacemove refactor - Newtonian physics (#84869) ## About The Pull Request This PR significantly enhances how zero-g movement works. Its no longer locked to one of 8 directions, everything now has inertia and is affected by weight. This means that throwing a piece of wire will no longer completely reverse your movement direction, and that being thrown out of mass driver no longer will slow you down to a halt at some point. This leads to following gameplay changes: * Guns now accelerate you. Ballistics have higher acceleration than lasers, and higher calibers have higher acceleration than smaller ones. This means that firing full-auto weapons in zero-g will make you drift and accelerate significantly. While this can be a hilarious way to travel in space, it makes using them trickier. * Impacting a wall or an object while moving at high speeds will cause you to violently crash into it as if you were thrown. Careful when exploring! * Jetpacks now have inertia. Changes introduced in #84712 have been mostly reverted, although speed buff has been reduced to 0.3 instead of 0.5 (although this is compensated by new movement mechanics, so overall speed should be roughly equal). All MODsuit jetpacks now possess the speed boost. Advanced MODsuit jets (which has also been added back) and captain's jetpack instead have higher acceleration and stabilization power, providing much more precise control over your movement. * Firing guns while moving on a jetpack will partially negate your pack's acceleration, slowing you down. Non-advanced jetpacks' stabilization is not enough to compensate for heavy caliber weaponry as sniper rifles, shotguns or rocket launchers. * You no longer instantly decelerate upon sliding along a wall. Instead, it may take a few tiles if you are moving at extreme speeds. Passing over lattices still allows you to grab onto them! As space movement is angle-based instead of dir-based now, its much more smooth than before due to using new movement logic. Example of jetpack stabilization in action: https://github.com/tgstation/tgstation/assets/44720187/6761a4fd-b7de-4523-97ea-38144b8aab41 And, of course, you can do this now. ![jetpack_500](https://github.com/tgstation/tgstation/assets/44720187/37b11cd8-2bd1-4640-ae0c-5e0cc505bf52) **This pull request requires extensive gameplay testing before merging**, as a large amount of numbers have been picked arbitrarily in an attempt to keep consistency with previous behavior (guns and normal-sized items applying 1 drift force, which is equal to what everything applied before this PR). Jetpacks and impacts may also require adjustments as to not be frustrating to use. Closes #85165 ## Why It's Good For The Game Zero-G refactor - currently our zero-g movement is rather ugly and can be uncomfortable to work with. A piece of cable being able to accelerate you the same as a duffelbag full of items when thrown makes no sense, and so does instantly changing directions. Inertia-based version is smoother and more intuitive. This also makes being thrown into space more of a hazard (possibly opening the door for explosive decompressions?) Jetpack inertia and gun changes - this is mostly a consequence of inertia-based movement. However, zero-g combat being preferred during modes like warops was an issue due to it negatively affecting everyone without jetpacks which are in limited supply onboard. This reverts the mobility changes which severely impacted space exploration, while making zero-g combat more dangerous and having it require more skill to be a viable option. ## What's left - [x] Refactor moth wings to use jetpack code - [x] Refactor functional wings to use jetpack code - [x] Locate and fix a recursion runtime that sometimes occurs upon splattering against a wall - [x] Add craftable tethers and modify engineering MOD tethers to use the same system ## Changelog :cl: add: 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. add: 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. /:cl: --- .../signals_atom/signals_atom_movable.dm | 3 - .../signals/signals_mob/signals_mob_main.dm | 6 + code/__DEFINES/dcs/signals/signals_object.dm | 2 + code/__DEFINES/movement.dm | 16 ++ code/__DEFINES/traits/declarations.dm | 3 + code/__DEFINES/traits/sources.dm | 3 + code/__HELPERS/maths.dm | 4 + code/__HELPERS/mobs.dm | 4 +- code/__HELPERS/movement.dm | 2 + code/_globalvars/traits/_traits.dm | 1 + .../subsystem/movement/movement.dm | 2 +- .../subsystem/movement/movement_types.dm | 92 +++++++ .../subsystem/movement/newtonian_movement.dm | 31 +++ .../subsystem/movement/spacedrift.dm | 5 - code/controllers/subsystem/throwing.dm | 9 +- code/datums/beam.dm | 3 + code/datums/components/crafting/equipment.dm | 12 + code/datums/components/drift.dm | 194 ------------- code/datums/components/jetpack.dm | 111 ++++---- code/datums/components/tether.dm | 177 ++++++++++-- code/datums/drift_handler.dm | 258 ++++++++++++++++++ code/datums/elements/embed.dm | 2 + code/datums/mutations/sight.dm | 2 +- code/datums/quirks/positive_quirks/spacer.dm | 4 +- code/game/atoms_movable.dm | 43 ++- .../effects/effect_system/effect_system.dm | 4 +- code/game/objects/effects/portals.dm | 2 +- code/game/objects/items/extinguisher.dm | 2 +- code/game/objects/items/tanks/jetpack.dm | 32 ++- code/game/objects/items/tanks/watertank.dm | 2 +- .../mob/living/basic/pets/parrot/_parrot.dm | 5 - .../living/carbon/alien/adult/alien_powers.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 7 +- .../mob/living/carbon/human/human_movement.dm | 4 - .../living/simple_animal/hostile/hostile.dm | 2 +- code/modules/mob/mob_movement.dm | 34 ++- code/modules/mod/mod_types.dm | 32 ++- .../mod/modules/modules_engineering.dm | 118 +++++++- code/modules/mod/modules/modules_general.dm | 33 ++- code/modules/movespeed/modifiers/items.dm | 8 +- code/modules/power/solar.dm | 2 +- code/modules/power/tracker.dm | 2 +- .../projectiles/ammunition/_ammunition.dm | 3 + .../modules/projectiles/ammunition/_firing.dm | 4 +- .../projectiles/ammunition/ballistic/foam.dm | 1 + .../ammunition/ballistic/harpoon.dm | 1 + .../ammunition/ballistic/pistol.dm | 2 + .../projectiles/ammunition/ballistic/rifle.dm | 3 + .../ammunition/ballistic/rocket.dm | 1 + .../ammunition/ballistic/shotgun.dm | 1 + .../ammunition/ballistic/sniper.dm | 1 + .../projectiles/ammunition/energy/_energy.dm | 1 + .../projectiles/ammunition/energy/gravity.dm | 1 + .../projectiles/ammunition/energy/special.dm | 2 + .../projectiles/ammunition/special/magic.dm | 1 + .../guns/energy/kinetic_accelerator.dm | 1 + .../reagents/reagent_containers/spray.dm | 2 +- .../spells/spell_types/pointed/_pointed.dm | 2 +- .../organs/external/wings/functional_wings.dm | 61 +++-- .../organs/external/wings/moth_wings.dm | 64 +++-- .../internal/cyberimp/augments_chest.dm | 4 +- ...dynamic_human_icons_syndicate_commando.png | Bin 1039 -> 1039 bytes code/modules/vehicles/mecha/_mecha.dm | 2 + .../mecha/equipment/weapons/weapons.dm | 4 +- code/modules/vehicles/mecha/mecha_movement.dm | 2 +- icons/obj/clothing/modsuit/mod_modules.dmi | Bin 58559 -> 58716 bytes tgstation.dme | 5 +- 67 files changed, 1058 insertions(+), 391 deletions(-) create mode 100644 code/__HELPERS/movement.dm create mode 100644 code/controllers/subsystem/movement/newtonian_movement.dm delete mode 100644 code/controllers/subsystem/movement/spacedrift.dm delete mode 100644 code/datums/components/drift.dm create mode 100644 code/datums/drift_handler.dm 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 925c7bc4e718e..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) 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 5fe266bc3f0d1..4a558c5fa7e03 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -52,6 +52,8 @@ #define MOVE_ARG_NEW_LOC 1 /// 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) @@ -253,5 +255,9 @@ /// 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_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 1b167de3354d2..a9cc41b7d8d8d 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -417,6 +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" +///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/movement.dm b/code/__DEFINES/movement.dm index be3546ea102d1..9a2c01f0bfb92 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -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/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 0af9d78de9f23..4fdf598f65977 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1280,6 +1280,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" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index e3d1f9f065b18..beb2b98944bc0 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -299,6 +299,9 @@ /// 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" diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index 5a55fd46fd296..395aa12f1397f 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -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 7c8e84e226d23..867f6f9e7649d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -208,7 +208,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() @@ -237,7 +237,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 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/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index cfe1a93632c76..dad143c4279db 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -544,6 +544,7 @@ 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, 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/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/datums/beam.dm b/code/datums/beam.dm index 708a416301159..ad27ee5ee3edf 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -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/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index dfd79e696224c..2546106d40327 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -282,3 +282,15 @@ ) category = CAT_EQUIPMENT tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER) + +/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/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/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/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/drift_handler.dm b/code/datums/drift_handler.dm new file mode 100644 index 0000000000000..c70ea9802d6dc --- /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(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/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/embed.dm b/code/datums/elements/embed.dm index 2aae03fb3a4b6..fbaf638bdd520 100644 --- a/code/datums/elements/embed.dm +++ b/code/datums/elements/embed.dm @@ -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/mutations/sight.dm b/code/datums/mutations/sight.dm index 288d62846980c..d3627167cb507 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -167,7 +167,7 @@ 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) diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 051798b4c06a6..344462703e906 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -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/game/atoms_movable.dm b/code/game/atoms_movable.dm index f58a5def187c7..b7ec0d00a782e 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -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 @@ -107,6 +109,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 = "" @@ -198,6 +203,7 @@ /atom/movable/Destroy(force) QDEL_NULL(language_holder) QDEL_NULL(em_block) + QDEL_NULL(drift_handler) unbuckle_all_mobs(force = TRUE) @@ -768,7 +774,7 @@ if(!. && set_dir_on_move && update_dir) 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 @@ -842,8 +848,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 @@ -1262,15 +1268,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) @@ -1451,6 +1461,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 @@ -1458,12 +1469,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/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/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/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 10713d12893ef..9c4192116a003 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -240,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/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index a7a577c77cf16..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,7 +87,7 @@ 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) @@ -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/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 15db2a5d3edf2..1c23937d2b589 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -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/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/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index cf01a2d282b0a..0b760c0f2e7b9 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -299,7 +299,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. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b12a0f287c124..a18bb74bb34b3 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -202,7 +202,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() 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/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 5b0cfdcc51e7e..201c83497dfd5 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -483,7 +483,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/mob_movement.dm b/code/modules/mob/mob_movement.dm index 33a4ea12f753b..13bd8ee2318e8 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() || ..() 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/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index d0506b73193cb..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/items/weapons/gun/general/dry_fire.ogg', 25, TRUE) - return FALSE - return ..() - /obj/item/mod/module/tether/on_select_use(atom/target) . = ..() if(!.) @@ -121,8 +114,26 @@ 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 bc33172ec97f6..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 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/power/solar.dm b/code/modules/power/solar.dm index 235cd358d899a..1823f086228a4 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -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, diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 1350ca6c85f95..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, diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index ec4385dfd61e2..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. diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 282c722b169e6..b15cd334a8e6d 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -23,10 +23,10 @@ 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 d6dc106ed72cf..29e3d635585e9 100644 --- a/code/modules/projectiles/ammunition/energy/_energy.dm +++ b/code/modules/projectiles/ammunition/energy/_energy.dm @@ -8,3 +8,4 @@ var/select_name = CALIBER_ENERGY fire_sound = 'sound/items/weapons/laser.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/red + newtonian_force = 0.5 diff --git a/code/modules/projectiles/ammunition/energy/gravity.dm b/code/modules/projectiles/ammunition/energy/gravity.dm index 52c65d9049dff..076a586c26d3b 100644 --- a/code/modules/projectiles/ammunition/energy/gravity.dm +++ b/code/modules/projectiles/ammunition/energy/gravity.dm @@ -5,6 +5,7 @@ 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/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 213dfd0c7205d..47940ad81c99c 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -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 @@ -78,6 +79,7 @@ select_name = "marksman nanoshot" e_cost = 0 // Can't use the macro 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 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/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 0ad4f17bf07be..7e174b544ea29 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -174,6 +174,7 @@ select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) 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 = "") ..() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 945495815c089..a1792a9670db3 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -69,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. 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/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 4c0d14426cdac..e97ed1bbd363d 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 @@ -54,7 +52,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) @@ -78,8 +76,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) @@ -106,19 +103,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 @@ -219,3 +245,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 0b29085bb1485..16b9832f6de0f 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,12 +20,13 @@ . = ..() 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/mobs/humanoids/moth/moth_flutter.ogg', 50, TRUE) @@ -31,27 +34,46 @@ /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() - SIGNAL_HANDLER - - if(can_fly()) - 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 - - REMOVE_TRAIT(owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) - -///Checks if our wings are usable -/obj/item/organ/external/wings/moth/proc/can_fly() +/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(isspaceturf(owner.loc) || burnt) - return FALSE //No flight in space/burnt wings - return TRUE + 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 (!allow_flight()) + 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 = 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) @@ -106,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/cyberimp/augments_chest.dm b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm index 4dcd16c8ba655..c9cbfbe445bdf 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm @@ -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/unit_tests/screenshots/screenshot_dynamic_human_icons_syndicate_commando.png b/code/modules/unit_tests/screenshots/screenshot_dynamic_human_icons_syndicate_commando.png index adc462ace50d158885c4a02912b57195e3a98828..c29a1e742f1f426812c1129dbe612b46bdc81d97 100644 GIT binary patch delta 30 mcmeC@=;xRaCfuxSx6v_7LCqi_G{wNw?aKPgOdB(oF#`aYo(h=& delta 30 lcmeC@=;xRaCM;r-q7idMLCqi_G{wNwO=Y!g)5gqY%m9kw33mVh diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 2d9991bb8c7ca..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 diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index 71c85ee7c12d7..287c9e3cf0e20 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -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 @@ -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) 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/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index 9d5600dab8073900f6bada13888444e481a71f6c..9811af0b54838f5174f565fb9549a47925410a02 100644 GIT binary patch literal 58716 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

7*(jA8rKh!!nyFfBhIK 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

Release notes

Sourced from JamesIves/github-pages-deploy-action's releases.

v4.6.4

What's Changed

What's Changed

Bug Fixes 🐝

  • fix: resolved an issue where the default config was not being applied to the non-action version of the project.

Build 🔧

Full Changelog: https://github.com/JamesIves/github-pages-deploy-action/compare/v4...v4.6.4

v4.6.3

What's Changed

Build 🔧

  • Consolidated a number of build scripts to make publishing easier.

Full Changelog: https://github.com/JamesIves/github-pages-deploy-action/compare/v4...v4.6.3

v4.6.2

What's Changed

Dependencies 🤖

Full Changelog: https://github.com/JamesIves/github-pages-deploy-action/compare/v4.6.1...v4.6.2

v4.6.1

What's Changed

Fixes

  • Resolved an issue where workflows were suddenly failing due to a worktree in use error. The action will now attempt to create a temp branch name if the existing branch name is already checked out by a prior to step to ensure it can occur. This issue was only occurring in a handful of workflows, and likely stemmed from a git version change on the official GitHub runners. The actual root cause is still somewhat unknown.

... (truncated)

= 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�ib*ifii-@RP7YrVN-Dg>D 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 Fe*u4TjgkNW literal 58559 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%0AwzQM*6uVuN8_J%h&_ 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 LRa>Q82^RWaTPK|a diff --git a/tgstation.dme b/tgstation.dme index fd16781494469..ed7d09bb8fe50 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -445,6 +445,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" @@ -730,7 +731,7 @@ #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" @@ -781,6 +782,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" @@ -1092,7 +1094,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" From 19221588cdf6d75b532e6295b2122bfee787df86 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:12:51 +0000 Subject: [PATCH 080/153] Automatic changelog for PR #84869 [ci skip] --- html/changelogs/AutoChangeLog-pr-84869.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84869.yml diff --git a/html/changelogs/AutoChangeLog-pr-84869.yml b/html/changelogs/AutoChangeLog-pr-84869.yml new file mode 100644 index 0000000000000..159a3b02be8b2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84869.yml @@ -0,0 +1,10 @@ +author: "SmArtKar" +delete-after: True +changes: + - 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." \ No newline at end of file From 54d979562c5fb29ec16c86514fb98dc77f470920 Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:59:51 +0200 Subject: [PATCH 081/153] fixes password paper in museum (#86913) ## About The Pull Request closes #86898 ## Changelog :cl: fix: fixed password paper in museum /:cl: --- _maps/RandomZLevels/museum.dmm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm index 88bf95847b9a4..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) @@ -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 From 25e43464ae76e3680d8b98535877ae50cb8aedc0 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 18:00:13 +0000 Subject: [PATCH 082/153] Automatic changelog for PR #86913 [ci skip] --- html/changelogs/AutoChangeLog-pr-86913.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86913.yml diff --git a/html/changelogs/AutoChangeLog-pr-86913.yml b/html/changelogs/AutoChangeLog-pr-86913.yml new file mode 100644 index 0000000000000..4e6971a2f1f14 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86913.yml @@ -0,0 +1,4 @@ +author: "mc-oofert" +delete-after: True +changes: + - bugfix: "fixed password paper in museum" \ No newline at end of file From 68b3e98df7e5a7c05b6a76b62c2724da378d036f Mon Sep 17 00:00:00 2001 From: oranges Date: Fri, 27 Sep 2024 07:14:33 +1200 Subject: [PATCH 083/153] You can now smack people on the head with cardboard rolls and wrapping paper (#86882) ## About The Pull Request Lets you hit mobs over the head with wrapping paper, giving them a -1 moodlet (-2 if felinid) --- .../mood_events/generic_negative_events.dm | 11 ++++++ code/game/objects/items/stacks/wrap.dm | 33 ++++++++++++++++-- sound/attributions.txt | 2 ++ sound/effects/bonk.ogg | Bin 0 -> 9311 bytes 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 sound/effects/bonk.ogg diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 82cd275aef25e..695bf43949653 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -490,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/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index d1cbb7f1ce8a3..0b6c26899f21c 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) . = ..() @@ -155,7 +171,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) @@ -203,3 +218,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/sound/attributions.txt b/sound/attributions.txt index 3dc8a84b12598..dab6cedf7eb62 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -207,3 +207,5 @@ place glass object.wav by milpower -- https://freesound.org/s/353105/ -- License 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/effects/bonk.ogg b/sound/effects/bonk.ogg new file mode 100644 index 0000000000000000000000000000000000000000..709078c1efb4705fe6aad2b1db42c391cd27564c GIT binary patch literal 9311 zcmbVw30Tv|*7qbpNFZPqmVf~g2uRpWAXq@KA%rE!8bB7o5`xI$!fFwTT1D4{`3BN?c?qsH5p-z*t;h`EvrD=ffRkI{ek80@0c$mBDFLBEZUg} zNDY2TK9Ae*_TNgL&bx(-;CPr|Z-%Fr+Xoxmm<)z?f+_rN-!0sezCGXX-v{;H&2r`h zY(W4tWMhU=MnsyLH~??}q|)fdM>2TycBRU3U%fI!`!vF+tXEc!kc4vP==+AkN{6q| z1tLd`qIHp%J?XuJv`&%V?41?i)k)E>ihk&g8GP*^+}&}ZBWL#{-5za}s0R-W*df$% z6TY@dlToE4*i?}7$Elr7`36p1&7}tJyj;HZetF6-ZyG2JLJ%t46T1Y6EI$L^OE3YFXyEp5ziq-5grFnrfj~; zNIomLfHhX&3u|y8_qsCd)~m2J?}eZhI{<7Zc_fc~9iqW^ozC}+FYuc!2%m*eXc76J zi+ELE;6bRzGmd48&>l5{RaiuDS&|AJfPMES$RJZarZj3Af4=2y-1wxq+vKz9Yn8E| zt?Tcu|7=x)J0~p`pe*S(8b+EMG>rw5JZxk8yQh7G&-71s-+_G=Pn(QKEd-D+>rSJ7 z_csY}Zlb1fv8&$%K2<6|Ti4eg`)<8I)S`P^)8sYpM{q{vgU@pMF)8rrxAdmJ-@<77 z{!@L}P;P?zq|xK0l!FRXnhCXodc?Z$udZ?Ueuuypn06aXZ+ zRV{wstg7-mEpDr;a=PL8#f1A!7j1KDXwv7|*&$p2mI<}k#S?1rp}xfv1-;%OIqiM- zlAPO>{7`!PJBxxsrKH#Rqbyd9L|UJJgWd_P;;({xPP>h_n)*w<{em1#u!nWZ-8II; zFD^DNe($ctPm8|2RGxCb==<4&-_IWU$XxoLiuI@E0BAIlRhv|%$(dtKWf2_AI|0A9 zoII1UTJrT;+UE1L@H;NIUa}&8W=#6V>YBrdv2eO+kSWN_HQn3 z-+Jj_;>AA<=AGGmKU?${%h8&Mt+!$!q)zu=mecI0nDpA1mQBLVti^uHiGfXM&=QLrb31_1E zMSFqVfBooXKF9GI8eV(4AQ}J^&z48yy=1k7yrSK*tMbK*XeGXfpYl$O|6FVhcqaR- zZy({-K7HW}y#m4*e$6;4sxwmLg#gvGeb&5}zIBiHvBFKLRdpSewzoaPPh?bu#l)$4 z{vaFIHLj8;9DAJLHQBQ~kpAsO!OcI&j+KF(-&~}A3(cMu857=^(a5^Rs%**T#M$5S zhghj`>YNvinaG?k(g*XAhj4)tE&Hj496!{R-H_~qBmg3WJ`e%o z4K{=jA#wzuVm{#*gl+7cOE@uHAxvz{sG{+veQ&c=i6?e6YFN>+ahZ(}Ij!dd24wiN zQ=?2EH*1xE9Rfr{c`lnF`_EixN=FtFjyZ1)fbbD5)KgM2Zz{%=vQ}RMi_uX@+cf$+IzWu_n zq?^rc_mXlNB(OORz*!xA_%&3mp3545QaNAl{gmt(L?3M`P*}E_2q(RRkMeJLKc%!O zokp4pjQOD!+I!fs9r865DEX@nJ+xa1`^fFFp^#MYo$TSXbpUj!5rCo&s=b8?Dm5@l z#DF#=Ad$z;L*T-uSgyP~tZ0)!2-M~}EfCS3aYwgjX~BWWKv*EOTE$)2*U{YrFNoOq zS5To-;*b3c6$E&QF$QeC4W|^je3n^4=6EQeK&4`$sOebFI7wo{LDSoD1OONhVU(20 zv2bLi+k+Yd=94DOgcWiI(VvbUjb^M%Yq1@lmzWrWH4i%E2 zrvqm>S~97c-xC{}eR_n{9^0*iBr~+TAQX~9CI1&?QuVoej_rl+FxonO%lm0MjJuKy z0Xs7nfQ@GbMUo>e=hRSKNU#rjdrqh}D#KCRNx}(cMGapYq{UV-N6A8CxOEt_=~LkX zPn*hc+Vv*=(Z>rEaIX@L_gH-aj`OrhIN^;}708*3O)w}yY88BK;D&W1jFa|^ICy1{ zhUyFC-l*de1L{*sp)tp)I~MJ&uPVTW^16$Sedtu^znn%OiBTz)NzQIkeyC%6+YG;! zDS?g+p0W;&-D4$YY=`96^YkQ z(kd54qKyZYq3~!0lm7ZtNIGh@ZuJTJyeR%keSxvo`)T>wXWq|%BoqgP>fL}u$$$R@ z`Cvf&euk0&k5Uf%>?MRyw0)bBZ=jt)Z|E_4glZ#ne(37T@A*Ov zv|aReC{JjYB4Fp_IvnBA>x&FFaSvmcOHb(nKGc5gejuBtJbLvNRpfW;u1?i9+MT>x z=+CbIKN6w-&fHkEiTH2!1=9zH6pAc=(z_kn5Y#Va2p#HIL@3=)E05z6Wyz|b==9g5 z07ohW=h-=Fgb%v?!c5K@szjNT-TjNTdzWK-9sei4z9@b+eROXBX8SMhB;{OvI=9)0 zKKh{KC+|yj{4iHDkV<$2M3+;CR?zDLg<=Q+5~M-n3BYnf-ktH!%;sM?4if=H@Lm9j zEoYs-xRBj?x%$6Sq_=S-UYeU<6o9_poPeFAU?U^x1e=jb-) zG?Jt)+r`LV?qAuzebn&@ZSfv_(~*RjaV38uvC6(Mj2=YqAaF*NZBX;+g?ExB{Vv6Z z8bU8a0cy5nLKmqQl?tyRV;rFkhz5}XW4U--&E|1Oh9j9c$?G%%Y@DqJ*EWqA64r&P zs#*rAd19&!aA$3}8;lXxjCtYJKx5< zWxl1qb$+|{t?OH}x0Y|M-mZrqr?(bd=8r(V{$lIekqbKD>-&noM<<%H8{Ku3H=|I= zU(FU7c@%iRjJ4MH7~-Ta1XNPpf=#T-%vv&#WrzoHO~Xm9A>V7-My(x}og&gso3-u9 zbtCb5(t!(`&~@(><| zBf2IRrIu1bqg1G1zwp_1oqV{A+#gcB{b8EI`{BwUVbj4bVr}=_lkqRRJ}|QqI&K38u_%=-x<3l?_j8u9z7&Q^@W5(DqaG?-wjs{xsGuFs#w?fjUF$ZpmzQ_ZZc zsI`r;TxpxxN=eToB3u2@93pmD$H&l`G&IcM{BY4ra&O?EUFMr0O$#oGs2BcesYsn5 z%hQ#sHeaedDDB0wWGO9O2r#!Ld7@zj&2c-{78@D%psLzC#>#(uq)xd~d0lL0Y=>PN z(;qwER7cue$JNR)Y?>o;7kdRlkOt>3h|;3-lA0<>f!}zuVt4LT-zz_rmVlX=2>9HxEt}CK>ME` z!kh^kjb_RQbWcpF1A>oRPoe_?TnBuM_Qg9+#Rxe_B`4Ca_3&c^3Uxdt*y510T!F&t zXe@2ZqSU6WgG);qe`1=U0I9N(D5%CpDFcm)-JdgjSedFrz2Z;EOcD|yMX+(;A8|Vu zf6!Idl|))L?LXM zcaMma=zEOSETp9(O0sdALNYj{@#^Hr*UtrAA2dAHYoPw7o11HO{WakHgpqp;4q+^} zWJgD)7-w-a+d`;z#6dI?{7e#E2Ri95Z6DV@b1(VnPT5q=Sb|J-EDZfGHu3F=88fM7Q{_K^c z4kshgn%=~1Gr-X>gB{YJ>U|&~ms+}FQD_&zwIXs1g~NEB;{m(9c>G52U#>jeb7Sn< zZ~nQp4xM&bZ2QH>TTG}&t~{l;dwmYPe68`h5^ge=%dXTQnN>J&w%~8#z+FG?8krR9 zY}^=N<#iU{_h92sY}%czQA z$H6o4dA6Xs8Y8(NLJw0ioE6@=OPbLOefJ$Z9%-1t3bAF!zQ@yLYu2|o7&oz9wgjAO zU5oJD@~JLK_w%354baq-Uk_Xw?Lw}dK_7AY(E;;Z78O$L8zgVZN+NTckoAPBDs%(E ze8>GXAI7d9h9`$dt+#HBJ1Iyadyo@%xpo{HNsEg%9Xo~c!u5Fs6iwE=9LEA>c591Z zi~rAQ%uDO<1_chCDqS2&+x>O+xMdEyiF;(%{jlRdepCLa=f_Y{f_q!4ZP4_E`Y0~N zfm1!zg6m8Kh~dCYRabpiy`xcHo~;`)8ZSm0;Z=eJt1ljS;r8$M#0LCu?e%=Uv-ED^ zMy4saBApF8__t}x>XDfT(uI(kkYr*A8` zVm(_CAC{NevQh+qWmZb+&Ju%@)#MxHFK^8;3I9RAw2X3=ahUEs&Nr&u-Q9Jgck6WR zKAB%wP&pM|r}b;kF_F?-i=ZIxIQ~g!RZR_!Uz3WVH?XS>Gi5Onf+_J%^MN@P)3g;uvkBi8kyRYv}rt0XM0 zGH%oGH1o}O&EF>2I#U+t{)SZ zwn(Ckk#)wL(=T8C-M?BWISfjKVIS;m{;{WSIA`bW>Q@ z2tyzb3~-fVP6qn5=lbZDe-*fk4gbP@>2ojm(%RobBGQ^W)4o3Q{ZGG?ZTfEaryGDj zWiR6NTAeUmSG1kn%xG|_VrtFrjMC0 z#y`VIPu4YVNuiZ@cXxa3IL7*dN8oAw00n3IbIL?rcU=RaDGxyR)CRa4Z zTZhi3mZXg39rQvU&dH!Wo@YwL=KAZ4ubGnAwg81P6pV7=xzfps z+gTHU=>D^hLjyw*))g4q9f(8W;zNSx)|xl#;~ru3j))m&F!%=lPLGnSllp_?!&fN% z88fvn+&-QA2Aemi*~;Zg1gxO1Jsa26hL9q!OsnjQS1i!2c|Iw%S3hvWEu@)9y&p0s z7y%AE>-0hFpsbML<*#bRwJ7e7px5jfj0&aiQ|JSM^=Il6@okLV&%_|hn2?Ed}JQJy~ zc-<(>XFht7wV1d4VX+YhEgBC(iIRhVWgT81dN3?99A;lUuk{tu=2>QB>Gz^E)HrTi zvVILiiV*cH`V~S>{XThZNiaid>2)VC3T4o9SjL#cEL;HdFTtiK*T|Tf+=+@BgtW}? zIcn4vWj$0QM!Zm7)3FYsDVGB1R|JJguZAUeTc&m7Z=&vGs`@arl#R>xOPAwb5)=Z%9wJHhZ{hiwrS4da(@SG8zk6P^?OW?Zvg+| z@Mk;E2it5u_kXev?FhMXtoTUyKb96wipCqmaE9juD9@t)wuw8V1UeEX*)Xv5I?yXo zdf^xFq5g*TG6Ra6TdEnplip~CzUJcO)`mcm3w-mLhlOZ!eeZ|U6Xby2$+hz{9#KO$ z&uIT2&v}j%Ub&2NS0g+G074SK?eH@M1A`p`I*4K`eWsViaV)EpTa`P&!MF@q2V_W- z1)Qgd`VaxS$aYW_80qpR%DiQqES#Q;;XFR6;|F)Zf|=L>Am&GsrioA8}~j|ezapXb-aBgye0QCIbP zYz}_c;d%8E>Bdqzur$(pSU9K(P*)&FYog3OeE`&$sU`XWlDSxA93BGX#pTtw)IqXk z6iJPH^JYrjB3AIjtMQ0bT|16Ozcovi>1sTT(P0^JEx}jx-|v3Ry&m~t$({Hjw{Oel zJ6^?qkGKEu_a)v(cl&p)sXBvfiNciYTAa#SX}dGREon$!jkf@}T*@*2sLE~-@j1Z^ zfj2d01Y#;lLzuC!lXlZ{+129H6!ewe$o0KBpoNsS$GJ!9)TKj_0AB}&T2~R7o`KqC zGY-Z~`_P?hi2mJ^5>>?UPTdpr=34oQV6y-(7BxupZ0I*q^j^D1_xucy?G8)#MG+G`w$)`up3MN4o3c`{i5HcVo|c9hA8rKbflTibsaDE8eVUm2`k zFgW{#zA2uI3tMDjBs%pvDAYD=|D$OOb59yae)`*_c&Ya`FqGaBQ6VWUCeo2JD&ven zTJGb3`U4?eV$E48(?<<*nQx+k1|ODMmlUHy1FZJh;4uwj5?=4@wf4T=`#~TtBo!nv z5PD5YZoZ|6kJ7L@<1?()HRf1&wDHYWdaF4U}#BAV(Vmrug3rDg$L`Cnq6I;^R_>a-PZi-e^GS;s!gov zcHLo0SU5JGu;9f@<7rbtV8G#${F%|bW9|ny)pzExRprfr{?S{iuL_uVM;W_zM(@9p zG48u~Ee9D~{A8M`W~z_oUeh5te5z1re*BoLh<8}uiy31C-^Nwi&a53p&u1m1ytzL+ zmG;9%JLb}>;k68Jl=YE#q*XbQf{&P=*(in?pmYF@U^dI=NParyd2M#+A+{h>Vpwt; zbbj18ZbBmO3l`5uk^uE0>x_C~{Pu z1Y`6@g;=`e$YuS$yH$uhS2S|pmJO;j_b!afGNu0wb^%=q%-A<&9vEZZsua!C=Y*mT z{p8i*jjypR2*2*Ef4<2bxfb!DpY-MY_)%KJyZ-`)h)0#F7MN%}^F)*`E1a2$w+!PZ z2JRyF*cF8_Tx~ayyz+e&Id#`f-K@`u#Wjygl6e^-L)!rj8nwn&@Nz&QkTyhf_wM6H z2}HbNCKmYbtJv8h;B-BAgnRI!0=cYqeeArs8cWyyw8@ z^dxq^^%8LacgYcJb*_5doO(ZM!H(^BWe&4KFAEM>y9?%lLeXn6Y%S=%Oxhaeer`1>PEAAvBwFiZ zKT}wn&21r6-b_l_f#hjk`Za6RoU#(k|UhU`1T* z9Htg|+tLVD*K{37R<KBO@drA+g9v)<)LCN9*Yg{1G3y*1 zjrvcBuIS#VvXm%0F8_VlzP6f1+^jV*FD1Iz<>o@3#AQvkaL35mz6aj&}l>DBh=t+vp5A+?Q86Q zMu_%!gbsjlIm4npQe8W%H&!e5Pq&e(qx_Pk_~*^TB!d6d>H+oAoqwX^NkUmG+5!|8ensMfNFcv6yN*UA*L7hzj&*xxSh5g#$0>fmu}V;E!pe!y9;n zBU-F})s+|;>zd%swkV^*OprFgAl~z4as#Qh%F` zY8@cD4&sEtHi*`#UBZ@;Pj((OYTk$n3Ls{tmKx_#nk(Pnw(5!mZO_@do8qr5*%=@S zGafbl^MN+exEg4Ke?wb%=E!YBT<*>AmUzlx+I5;X7OEMpL)Y;_>If2YG2=nWm4Zkr8Qug`v!f;3d3K(GD_PR&mH1NC@`+5!+PaEtin{L^W z+J>*Svr{6mKE*;#Wi|hDIw${%)LEnmG8C^MkK$WG3U-VNpYw)L}~Y1MYNbDk(2BTpz820IXeX^^y=|O3idp4>H03 E1>?takpKVy literal 0 HcmV?d00001 From 4fd9d30016550b06c51aa73d0e532e3191e49423 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:14:53 +0000 Subject: [PATCH 084/153] Automatic changelog for PR #86882 [ci skip] --- html/changelogs/AutoChangeLog-pr-86882.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86882.yml diff --git a/html/changelogs/AutoChangeLog-pr-86882.yml b/html/changelogs/AutoChangeLog-pr-86882.yml new file mode 100644 index 0000000000000..c2aaa123b4d6f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86882.yml @@ -0,0 +1,4 @@ +author: "oranges" +delete-after: True +changes: + - rscadd: "Cardboard rolls and Wrapping paper can now be used to hit people on the head with" \ No newline at end of file From 422103338105746e20b2ce57d8d36fa8b3ed668a Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:25:11 +0300 Subject: [PATCH 085/153] Lead pipe readjustments (#86835) --- code/game/objects/items.dm | 9 +++++++-- code/game/objects/items/maintenance_loot.dm | 3 ++- .../handling/lead_pipe/lead_pipe_drop.ogg | Bin 38846 -> 36885 bytes 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 94860a39c26e7..b45d9dfb65e02 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -83,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 @@ -852,7 +854,10 @@ /obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() if(!isliving(hit_atom)) //Living mobs handle hit sounds differently. - playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE) + 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 var/volume = get_volume_by_throwforce_and_or_w_class() if (throwforce > 0 || HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index e50de0771c235..9d1c4fe676b84 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -21,7 +21,8 @@ demolition_mod = 1.25 grind_results = list(/datum/reagent/lead = 20) pickup_sound = 'sound/items/handling/lead_pipe/lead_pipe_pickup.ogg' - drop_sound = 'sound/items/handling/lead_pipe/lead_pipe_drop.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/sound/items/handling/lead_pipe/lead_pipe_drop.ogg b/sound/items/handling/lead_pipe/lead_pipe_drop.ogg index 144d24ca94c7a7b305e4ec74f5cbe3fb88dca6c8..63561fc2f950c6f73b44e1ff8f4eac2024c98b04 100644 GIT binary patch delta 32657 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≷I0v99Y;|M|N(A!)P%YNQ$joSJG&++z zk~OK;UETFN1I|CFpis}Ef}j;0rg20Q*KqGV9;;GOx+G#>o4sc=9(o|C6!CDCuhuw4 zS!02^NG(DrDKK+&)iI&8z?vF8cP;d{1)RKQwE)m#uw3*MNb6JZy${o!mGyonKU24w9*e6y{Zyd4Wqimf*HNn)a+C3op&Ck(`p zObq=#c>vX}WWfyIiztc%&=*TSeCc$Q`HpchGBDI08M!SW3}r^9lNdS@%D1f`07}Bw z<2DqN1x0~z?e$g*(?yqqP|#v1&BisEjn-;)Pj-~<@GnZ*VT%C)uL5iar%Ba|k4>V% zvjoo8+_f+-Ji%N#eIX?@@c7%7N3yPo!r@!5Y?zX;&1Rlz-H!u9Fqinn@20k&H;uf$ zD+zv8V43nsyMiScp86fT|4DoAwr?%BBX=E!Z%E7X=yE<2>f?QwabZAi5_OeMOJ0JdMXShYTie{p@>uK~Vp77CdMZ%06a8Hh>~BB)R?K9(V|&Ko zlmYCVb3t8@wH&Wo$xCDB?#6@mSikY<4QC>dw=k$>ypNRxc)#{;?ZTcHZ=`R&*fgoE z@xhsh2@P}Coce0pfBO~%M;g}6sOS#>L)G@y19dJ{qyh*4xS<31P#C+ z@63~BKra_#laQrG6g>_ntWl^vPQ17P0m_2Hfc7_Mk_kcwvzo0&Qo80q-LjGz9lqpL zE*W5KztFCA=DdwM8FXc1^7dn2;dg$o$i;u&xjXyLiIUVm3tt;M54cL8J3?!V>m>pX z)Z8VcUiv29dGG|QqM)PskxVpeQ?>lReZJKB#vKvS!(oOeb-1&3z~x`+$)_&n86@r5 zC7raiUB@SRqK3uCuVs&%4PRt3tK8%}K@1G7$b3VB2_3 zX$r>Eyez*FWtlN(ah`{4BHT@_B;`D2z53^e`j)T8O3kyIIRs}siyleeB~(b*i=6S> zLZ1G!5R*qvHIHW-M`yoph`oR2TtL{qJBt^UDwA(*iNQc4UTR()7^)_)gmC>$HU z^Y!svt6ynX2h<%uvqIi|S$(Y|2m${hAM?L!Hs8@!_-4uij_A=DrjC-oH5{CJ95n38 z`jFb^mWbMjmCo^hzz-JHU{OaPID!FIyUCsHrBkQ@7%r@?Wn#C69%a_m@yz*j3Oy@R zqH;TQRwozmgm|DIwAz4;(S)&}gUlGG&=BP`nIJj9F~~GojVyMnr#z9bNGp`ZVb?3S zeij)c<+dLJ*%S53eGlfKa!`h@Dvy>j&2W$dB0#%uxY<0 zguq1?Z2NT~#xvCzUi7;FSvxi0tG`!7I z1lT6%LY(M`=MZU#T#8jxy7QNd<5lU9-TNG!V+L+EWsEez}4|5lQ;a*ECol z!BMj12lwr(D_$kgYFFn^j$&)?cEhKVD5spL56j_~zFp9?zx?-~*hPOB#rOqxhl2tn z$RscE`<8$#7nene1nv%}vy%m5ACYJ4Wn%zznI1l5q{GKy_?Ycmug^ZNHC73i9fh!JVZ$37wBA=2e8RUzKqenWC}b z7;|JH3%IkY^-UhuZ1~XLorQ?P`vOR z4ehC)5%5^0+npK90|a1ix$U9iXrv|rTIZ+Idacnn-yCpnr=%X78FD^FprAf$sMFxY z)F`W84G7VnEL61+5c;1%m(0VOd1rf`EGmg{?|72&<=?-1RhKpx_eK41`O!C}>c4G@epd`IMq2GMw_1`Tzhw2=*v5?7k8!naE*JUU{%hA>ItvUo-xgz^v8>;)2^D-JoH65S;mY_#gT}3HVcXb{MdY;`+`P4GnQ#xX2`DtQnw&-Tj92mT z4cWEMHx3OMp%lu~G^H{a3n*b&GDOa9IKaCdCxhL*0UaoH zu;>6m9)xb&wEFt000-4~$}f1)?kX(I>v>2vYB9t5iQLy0yImEot=2#n?)HwTuMu%0D+zrVRdeC5&Tiz4BM- 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 k^}qb}*WeMS%NE?dZ|>ls+GqEU Date: Thu, 26 Sep 2024 19:25:52 +0000 Subject: [PATCH 086/153] Automatic changelog for PR #86835 [ci skip] --- html/changelogs/AutoChangeLog-pr-86835.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86835.yml diff --git a/html/changelogs/AutoChangeLog-pr-86835.yml b/html/changelogs/AutoChangeLog-pr-86835.yml new file mode 100644 index 0000000000000..171a51ab03523 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86835.yml @@ -0,0 +1,5 @@ +author: "grungussuss" +delete-after: True +changes: + - 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" \ No newline at end of file From 9a7dbd61eed25d155d10b4e825e58d329ab13439 Mon Sep 17 00:00:00 2001 From: Jerry <55355646+Jewelry-x@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:27:21 +0300 Subject: [PATCH 087/153] Fix for sprite not updating properly when planting a new seed (#86876) --- code/modules/hydroponics/hydroponics.dm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8981b90d1cab0..3a1a6d83e7dbf 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -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 @@ -910,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 @@ -1015,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) From 7ced5e911ac8fe0ad7458174cf23cf6ce4e6d275 Mon Sep 17 00:00:00 2001 From: carlarctg <53100513+carlarctg@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:31:28 -0300 Subject: [PATCH 088/153] you can now use the toy codex cicatrix as base for the codex ritual (#86824) --- code/modules/antagonists/heretic/knowledge/starting_lore.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index e7aa3f9e2065b..2b5186bb55019 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -234,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, ) From 6e99f558119aed9c98feab1ec364870bde8b3d9a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:32:28 +0000 Subject: [PATCH 089/153] Automatic changelog for PR #86876 [ci skip] --- html/changelogs/AutoChangeLog-pr-86876.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86876.yml diff --git a/html/changelogs/AutoChangeLog-pr-86876.yml b/html/changelogs/AutoChangeLog-pr-86876.yml new file mode 100644 index 0000000000000..364c0f216ec11 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86876.yml @@ -0,0 +1,4 @@ +author: "Jewelry-x" +delete-after: True +changes: + - bugfix: "fixed hydroponics tray not updating new crop sprite properly" \ No newline at end of file From a985fbed2ef2af8be60bc864f1eb2980e8e7d99a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:32:47 +0000 Subject: [PATCH 090/153] Automatic changelog for PR #86824 [ci skip] --- html/changelogs/AutoChangeLog-pr-86824.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86824.yml diff --git a/html/changelogs/AutoChangeLog-pr-86824.yml b/html/changelogs/AutoChangeLog-pr-86824.yml new file mode 100644 index 0000000000000..179ca3eaf1cff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86824.yml @@ -0,0 +1,4 @@ +author: "carlarctg" +delete-after: True +changes: + - qol: "you can now use the toy codex cicatrix as base for the codex ritual" \ No newline at end of file From 38c52107cc611d3457828c22f9e5017cf6e92372 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:35:16 +0300 Subject: [PATCH 091/153] maintenance for click.ogg (#86874) --- sound/machines/click.ogg | Bin 7470 -> 4889 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sound/machines/click.ogg b/sound/machines/click.ogg index b3947c86e040a056dfcb45a3adb043562d6b07f6..3b4914a487d37e4f7e86769b32f05ae68cccf7b5 100644 GIT binary patch delta 1035 zcmV+m1oZo^I+-RKPiJRS00IC200000004gv00000005bTrj?NzE+u~t000310061G zdt(qp|NsC0|NsC0|NsC0|NqGYc5iZGX>&A@Z5kOeFfcbTG$1HaWn^_@X>MmAMQ(O! za&K;Jv6spYe?JQV000000Dlhv00IC20BV5B`3N{RJUBJZ@V)#63+Ox- zF0e?wApkoqPtkU|k&OR5Y}Ccv@ZNu~9v48R(w>CI;S0ci_6YiOS^*p)cWUI`on|-+ zUhk@=13<;pf%os$%qXX5hyT91iK(gnvR^EKg$^Ej}F8$aq`*;T@*1c5< z09;bbkN`%iLckYHV;VmLsF(t_n)y3eXj1;nZCQY`x`v_RA$~pEcVaDHI(qUc&bB+K zei6?Ee*ip2%b5LB1sMvOYE2TL(V+t%ayu2T*&w$+4KfaLmzi%7CQ|~{VOis@v6EVg~e{{26Yx4uG1d7&>Qp?p#eSuIj_3~Ru zeZez=5Zcnrmn)#LqL)O1()J**nSRv760Hzzj0YGElr&^tJtek$+(|Pmm4C}XO|b+cRcy%(0HIgJil-vGa(e?Ns{A+rH`Fu$ z0EB5^{AoN0<{9006(m zUI7>ggsqhv^pWd#bG!v-Ea18P0AVaR5azNU6XAIr6q*hS#e4@~`G-QBS4ma#29shF z8(F8H7NAorXdI z0sx5172~#Lc_p)bN`IY9$GHFcpV?7Y^RjwzCEFxAa{qXIMo9+avi`qQ1bWcA8P{iO97ryfpB-9ABLzRbBB9L35Na?LJ?q!;n_{z)V@AZ7K$Y$`+wD*RRE3! z06lo(l4iuhEAAqlO?2`w`OQ=O(7s_>OfDkX&nGOK*_T|$C008Xc F90wp^&G7&L delta 3636 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 E0hQvQJOBUy From d4ac95a0e1c7500c70e823705aef415e26f62958 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:36:13 +0200 Subject: [PATCH 092/153] Nobody expects the span inquisition: replaces most s with macros (#86798) ## About The Pull Request 123 changed files and multiple crashes after writing broken regex, I replaced most remains of direct spans with macros. This cleans up the code and makes it easier to work with in general, see justification for the original PR. I also fixed a bunch of broken and/or unclosed spans here too. I intentionally avoided replacing spans with multiple classes (in most cases) and spans in the middle of strings as it would impact readability (in my opinion at least) and could be done later if required. ## Why It's Good For The Game Cleaner code, actually using our macros, fixes borked HTML in some places. See original PR. ## Changelog Nothing player-facing --- code/__DEFINES/span.dm | 4 +++ code/__HELPERS/game.dm | 2 +- code/__HELPERS/roundend.dm | 4 +-- code/controllers/subsystem/job.dm | 2 +- code/datums/actions/mobs/blood_warp.dm | 4 +-- code/datums/announcers/intern_announcer.dm | 2 +- code/datums/components/religious_tool.dm | 6 ++-- .../components/riding/riding_vehicle.dm | 8 +++--- code/datums/components/trapdoor.dm | 4 +-- code/datums/elements/spooky.dm | 2 +- code/datums/emotes.dm | 16 +++++------ code/datums/helper_datums/getrev.dm | 2 +- code/datums/weather/weather.dm | 6 ++-- .../datums/weather/weather_types/ash_storm.dm | 10 +++---- .../weather/weather_types/floor_is_lava.dm | 6 ++-- .../weather/weather_types/radiation_storm.dm | 6 ++-- .../weather/weather_types/snow_storm.dm | 6 ++-- .../game/machinery/computer/arcade/_arcade.dm | 2 +- .../machinery/computer/arcade/orion_event.dm | 2 +- code/game/machinery/computer/dna_console.dm | 4 +-- code/game/machinery/hypnochair.dm | 4 +-- code/game/objects/items/cards_ids.dm | 2 +- code/game/objects/items/chainsaw.dm | 2 +- code/game/objects/items/charter.dm | 4 +-- .../items/devices/scanners/health_analyzer.dm | 2 +- code/game/objects/items/food/pancakes.dm | 2 +- .../items/granters/martial_arts/cqc.dm | 2 +- .../granters/martial_arts/plasma_fist.dm | 4 +-- .../granters/martial_arts/sleeping_carp.dm | 4 +-- code/game/objects/items/inspector.dm | 6 ++-- code/game/objects/items/rcd/RCD.dm | 5 ++-- .../game/objects/items/robot/items/generic.dm | 4 +-- code/game/objects/items/stacks/medical.dm | 4 +-- .../items/storage/boxes/service_boxes.dm | 2 +- .../objects/structures/beds_chairs/chair.dm | 2 +- .../structures/destructible_structures.dm | 2 +- code/game/objects/structures/fireplace.dm | 27 +++++++++--------- code/game/objects/structures/maintenance.dm | 2 +- code/game/objects/structures/safe.dm | 2 +- code/game/objects/structures/tables_racks.dm | 3 +- code/game/objects/structures/traps.dm | 6 ++-- code/modules/admin/antag_panel.dm | 10 +++---- code/modules/admin/verbs/debug.dm | 6 ++-- code/modules/admin/verbs/server.dm | 2 +- .../antagonists/_common/antag_datum.dm | 2 +- .../modules/antagonists/_common/antag_team.dm | 4 +-- code/modules/antagonists/abductor/abductor.dm | 2 +- .../abductor/equipment/gear/abductor_items.dm | 4 +-- .../antagonists/ashwalker/ashwalker.dm | 4 +-- .../changeling/powers/mutations.dm | 4 +-- .../changeling/powers/tiny_prick.dm | 6 ++-- code/modules/antagonists/cult/cult_items.dm | 2 +- .../antagonists/cult/cult_structure_altar.dm | 2 +- .../cult/cult_structure_archives.dm | 2 +- .../antagonists/cult/cult_structure_forge.dm | 2 +- .../antagonists/cult/cult_structure_pylon.dm | 2 +- .../antagonists/cult/datums/cult_team.dm | 2 +- code/modules/antagonists/cult/runes.dm | 18 ++++++------ .../antagonists/highlander/highlander.dm | 8 +++--- .../nukeop/datums/operative_team.dm | 4 +-- code/modules/antagonists/obsessed/obsessed.dm | 2 +- .../paradox_clone/paradox_clone.dm | 2 +- code/modules/antagonists/pirate/pirate.dm | 2 +- .../antagonists/revolution/revolution.dm | 6 ++-- .../antagonists/space_dragon/space_dragon.dm | 2 +- .../antagonists/wizard/equipment/soulstone.dm | 12 ++++---- code/modules/antagonists/wizard/wizard.dm | 4 +-- code/modules/antagonists/xeno/xeno.dm | 4 +-- code/modules/assembly/health.dm | 2 +- code/modules/assembly/proximity.dm | 2 +- code/modules/assembly/signaler.dm | 2 +- .../asset_cache/transports/asset_transport.dm | 2 +- code/modules/buildmode/submodes/map_export.dm | 2 +- code/modules/client/verbs/ooc.dm | 12 ++++---- code/modules/client/verbs/who.dm | 2 +- code/modules/clothing/masks/gas_filter.dm | 2 +- code/modules/events/ghost_role/sentience.dm | 4 +-- .../recipes/drinks/drinks_alcoholic.dm | 2 +- .../generic_skillchips/rod_suplex.dm | 4 +-- .../skill_learning/job_skillchips/chef.dm | 4 +-- .../job_skillchips/psychologist.dm | 4 +-- .../job_skillchips/roboticist.dm | 4 +-- .../job_skillchips/station_engineer.dm | 4 +-- .../library/skill_learning/skillchip.dm | 28 +++++++++---------- .../mining/equipment/marker_beacons.dm | 3 +- .../living/basic/drone/extra_drone_types.dm | 2 +- code/modules/mob/living/brain/posibrain.dm | 12 ++++---- .../mob/living/carbon/human/human_defense.dm | 12 ++++---- .../carbon/human/species_types/jellypeople.dm | 7 ++--- code/modules/mob/living/living.dm | 6 ++-- .../mob/living/silicon/robot/robot_model.dm | 8 +++--- .../mob/living/simple_animal/bot/bot.dm | 4 +-- .../hostile/megafauna/hierophant.dm | 8 +++--- .../hostile/mining_mobs/elites/elite.dm | 6 ++-- .../mining_mobs/elites/goliath_broodmother.dm | 8 +++--- .../hostile/mining_mobs/elites/herald.dm | 8 +++--- .../hostile/mining_mobs/elites/legionnaire.dm | 8 +++--- .../hostile/mining_mobs/elites/pandora.dm | 8 +++--- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/mob.dm | 8 +++--- .../mob_spawn/ghost_roles/unused_roles.dm | 2 +- code/modules/mob_spawn/mob_spawn.dm | 2 +- code/modules/projectiles/guns/magic/wand.dm | 10 +++---- .../projectiles/guns/special/blastcannon.dm | 2 +- .../modules/reagents/chemistry/equilibrium.dm | 6 ++-- .../chemistry/machinery/chem_dispenser.dm | 4 +-- .../chemistry/machinery/reagentgrinder.dm | 2 +- .../reagents/cat2_medicine_reagents.dm | 2 +- .../reagents/drinks/drink_reagents.dm | 4 +-- .../chemistry/reagents/drug_reagents.dm | 6 ++-- .../reagents/chemistry/recipes/others.dm | 2 +- .../chemistry/recipes/pyrotechnics.dm | 10 +++---- .../reagents/chemistry/recipes/toxins.dm | 6 ++-- code/modules/religion/religion_sects.dm | 2 +- .../spell_types/list_target/telepathy.dm | 2 +- .../surgery/experimental_dissection.dm | 8 +++--- .../organs/internal/appendix/_appendix.dm | 4 +-- .../surgery/organs/internal/ears/_ears.dm | 8 +++--- .../surgery/organs/internal/eyes/_eyes.dm | 12 ++++---- .../surgery/organs/internal/lungs/_lungs.dm | 12 ++++---- .../organs/internal/stomach/_stomach.dm | 8 +++--- code/modules/tgui_panel/tgui_panel.dm | 2 +- code/modules/zombie/organs.dm | 4 +-- 123 files changed, 306 insertions(+), 313 deletions(-) diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index a4f81a168e610..f7d9ebef916f7 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -48,9 +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 + "") @@ -70,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 + "") diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 699ae8aa72cdd..3eb89831957b8 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -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) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 71e80014bb54a..72af6cf3ac181 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -571,7 +571,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("
")]
" @@ -660,7 +660,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" diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 0b04b25c59721..74b820894b256 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -680,7 +680,7 @@ SUBSYSTEM_DEF(job) 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 diff --git a/code/datums/actions/mobs/blood_warp.dm b/code/datums/actions/mobs/blood_warp.dm index 0a1082ca603ac..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...") + 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/effects/magic/exit_blood.ogg', 100, TRUE, -1) - owner.visible_message("And springs back out!") + owner.visible_message(span_danger("And springs back out!")) SEND_SIGNAL(owner, COMSIG_BLOOD_WARP) return TRUE return FALSE diff --git a/code/datums/announcers/intern_announcer.dm b/code/datums/announcers/intern_announcer.dm index 325ca04de437e..635508256b781 100644 --- a/code/datums/announcers/intern_announcer.dm +++ b/code/datums/announcers/intern_announcer.dm @@ -43,4 +43,4 @@ 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/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_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm index f7ee78673e057..3c55eae46688a 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/trapdoor.dm b/code/datums/components/trapdoor.dm index 7c0795a868288..9efce370e82c7 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -243,8 +243,8 @@ 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/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) 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/emotes.dm b/code/datums/emotes.dm index d55e1fc1a0d48..0a8646df07084 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -125,22 +125,22 @@ 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 else if(is_important) for(var/mob/viewer as anything in viewers(user)) - 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, @@ -152,7 +152,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, ) @@ -180,7 +180,7 @@ continue if(!(get_chat_toggles(ghost.client) & CHAT_GHOSTSIGHT)) continue - to_chat(ghost, "[FOLLOW_LINK(ghost, user)] [dchatmsg]") + to_chat(ghost, span_emote("[FOLLOW_LINK(ghost, user)] [dchatmsg]")) return 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/weather/weather.dm b/code/datums/weather/weather.dm index 16ffb326f8a86..df2518b4322c6 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 diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm index bb4e5af63f3ad..7d432c1e488da 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" @@ -81,10 +81,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 12510341b01c9..8acf8be4b9e66 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -4,9 +4,9 @@ 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 @@ -14,7 +14,7 @@ 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, 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/game/machinery/computer/arcade/_arcade.dm b/code/game/machinery/computer/arcade/_arcade.dm index 69994634fc3b1..053ec907f3e63 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/orion_event.dm b/code/game/machinery/computer/arcade/orion_event.dm index ac80f83e91638..d39766200dc52 100644 --- a/code/game/machinery/computer/arcade/orion_event.dm +++ b/code/game/machinery/computer/arcade/orion_event.dm @@ -67,7 +67,7 @@ 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_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() diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index da00fc3542197..58de43525357c 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -1347,7 +1347,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) @@ -1731,7 +1731,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/hypnochair.dm b/code/game/machinery/hypnochair.dm index 5e15080d39c8b..a2895f6ae9fcd 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -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/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 34c66dd47311b..2d1a16986fbe8 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -810,7 +810,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()]") diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 44585f5f010a3..00ca25985bfee 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -95,7 +95,7 @@ /obj/item/chainsaw/doomslayer name = "THE GREAT COMMUNICATOR" - desc = "VRRRRRRR!!!" + desc = span_warning("VRRRRRRR!!!") armour_penetration = 100 force_on = 30 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/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index d51a36fcb31b3..322bc56390ec1 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -86,7 +86,7 @@ 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.")) 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/granters/martial_arts/cqc.dm b/code/game/objects/items/granters/martial_arts/cqc.dm index 1d8582cf10c1f..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...", 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/inspector.dm b/code/game/objects/items/inspector.dm index fb7878605a9c2..c22bf5d2ac60d 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -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/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index daa71c54b73d7..961e0fff88afd 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -426,9 +426,8 @@ 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/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index fc7486dd1382f..385baa0381ae9 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -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) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index f7ef5f01e5484..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 diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index 767f351635d3a..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() diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index d52cfebd505f8..b104e472dc2b2 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -79,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) diff --git a/code/game/objects/structures/destructible_structures.dm b/code/game/objects/structures/destructible_structures.dm index e018be234b2f4..e64779c31ed1a 100644 --- a/code/game/objects/structures/destructible_structures.dm +++ b/code/game/objects/structures/destructible_structures.dm @@ -1,6 +1,6 @@ /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_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) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 180b085778abf..4e568a56f48b2 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() . = ..() diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index 171c16b82f5e4..d3eb552c46b8b 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -122,7 +122,7 @@ 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_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 diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 14e3b53680d15..b2796019f168b 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -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/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 071e528e9c449..834347cc84f4f 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -976,8 +976,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/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/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index ca7b45649d159..e348321326473 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -77,16 +77,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() @@ -154,7 +154,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/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/server.dm b/code/modules/admin/verbs/server.dm index a60ee2e4ef5bd..5ac9fd272b45c 100644 --- a/code/modules/admin/verbs/server.dm +++ b/code/modules/admin/verbs/server.dm @@ -202,7 +202,7 @@ 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, "The game start has been delayed.", confidential = TRUE) + 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) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index fc8bfa0de8486..f490095a019d9 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -415,7 +415,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. 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/abductor.dm b/code/modules/antagonists/abductor/abductor.dm index 6e71010a8ee27..2ca46499a7db0 100644 --- a/code/modules/antagonists/abductor/abductor.dm +++ b/code/modules/antagonists/abductor/abductor.dm @@ -171,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 174251d472960..91107529721bc 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -226,7 +226,7 @@ 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") @@ -235,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) diff --git a/code/modules/antagonists/ashwalker/ashwalker.dm b/code/modules/antagonists/ashwalker/ashwalker.dm index 827d929b0fbb5..fae4dd5059b16 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/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index fd1b46c9de0bf..f6b42bf19f212 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -54,7 +54,7 @@ user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL will delete the item if(!silent) playsound(user, 'sound/effects/blob/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."), "You hear organic matter ripping and tearing!") + H.visible_message(span_warning("With a sickening crunch, [H] reforms [H.p_their()] shield into an arm!"), span_notice("We assimilate our shield into our body"), span_italics("You hear organic matter ripping and tearing!")) qdel(src) return 0 else diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index fd58b6aa7d5ac..3e1cb7276b7f1 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -184,10 +184,8 @@ /datum/action/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade) playsound(target, 'sound/effects/blob/blobattack.ogg', 30, TRUE) - target.visible_message("With a sickening crunch, \ - [target] reforms [target.p_their()] [blade.name] into an arm!", - span_warning("[blade] reforms back to normal."), - "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)) 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 819e27dab2051..54151f1171e12 100644 --- a/code/modules/antagonists/cult/cult_structure_pylon.dm +++ b/code/modules/antagonists/cult/cult_structure_pylon.dm @@ -6,7 +6,7 @@ light_range = 1.5 light_color = COLOR_SOFT_RED break_sound = 'sound/effects/glass/glassbr2.ogg' - break_message = "The blood-red crystal falls to the floor and shatters!" + 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/datums/cult_team.dm b/code/modules/antagonists/cult/datums/cult_team.dm index c7a5a333dfd11..87ad2ab649101 100644 --- a/code/modules/antagonists/cult/datums/cult_team.dm +++ b/code/modules/antagonists/cult/datums/cult_team.dm @@ -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 diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index e417369358c62..e7cde6d1425c2 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -500,7 +500,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 @@ -849,37 +849,37 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) 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) @@ -969,12 +969,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() diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index a1c31241e0b75..184ca9c4f77f4 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/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/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm index 1db51329e3cb2..ff4232ab2dc00 100644 --- a/code/modules/antagonists/obsessed/obsessed.dm +++ b/code/modules/antagonists/obsessed/obsessed.dm @@ -147,7 +147,7 @@ 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() diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm index bd8eb7cd7d866..960cf7f59ec2f 100644 --- a/code/modules/antagonists/paradox_clone/paradox_clone.dm +++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm @@ -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/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 7a983993c0b6f..da7b76577275c 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -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/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 8cbeca9c6d8fa..090c8f66dc82e 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -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/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 5b73a5dcfeb41..751873c836277 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -238,7 +238,7 @@ to_chat(user, span_userdanger("Your body is wracked with debilitating pain!")) 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!")) @@ -261,11 +261,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) . = ..() diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index fa6d9a515b680..67b9a971bad5b 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -443,10 +443,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 5ef26665bf238..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!") + "
      " diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 3c0bb24536901..ad2c6ac17641d 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -58,7 +58,7 @@ //do the pulse & the scan pulse() - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") + 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() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 3f434f524e752..6ba2a7a63421e 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -92,7 +92,7 @@ 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/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index e5c5ff33d75fb..4e265384ace24 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -169,7 +169,7 @@ 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/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) return TRUE 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/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/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 954724ed520ff..bd915cdf37a14 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -254,7 +254,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 @@ -275,7 +275,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 @@ -287,7 +287,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() @@ -298,7 +298,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 @@ -313,7 +313,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 @@ -325,7 +325,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" 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/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/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/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm index a67145f691db7..78b9623c3a016 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -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) 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/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/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 36457cfa9e1d0..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)]" 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/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index d883cbc635950..6557d0d1da889 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 = "" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 37cb6dd3995ba..c26b22b0711da 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -219,15 +219,15 @@ 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/items/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!") + 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 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 bcf0e1c0de2de..b7c97b6451bd1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -462,16 +462,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////////////////////////////////////////// diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8c7f9c4532a8e..e3f6b7d1ae981 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -525,7 +525,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 @@ -1789,13 +1789,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() diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 8fe4634f0412e..221b1d18478cf 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -755,8 +755,8 @@ /obj/item/robot_model/peacekeeper/do_transform_animation() ..() - to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN 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.") + to_chat(loc, span_userdanger("Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN 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.")) /obj/item/robot_model/security name = "Security" @@ -779,8 +779,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/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index ee7cd1357989e..2c5d4c6aa91bd 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -117,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. 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 ef84034f2ac0d..9383718e7bd30 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -111,28 +111,28 @@ Difficulty: Hard 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) 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 77b65d27fec85..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 @@ -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() 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 8ed55103afe3c..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 @@ -72,25 +72,25 @@ /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() 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 a663b95f33fbc..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 @@ -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() 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 64f658b24215e..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 @@ -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() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 179b50710c1d3..3bdc67a3c8984 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -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/mob.dm b/code/modules/mob/mob.dm index 731eeb4787667..7a45abc2825ae 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -281,7 +281,7 @@ var/raw_msg = message if(visible_message_flags & EMOTE_MESSAGE) - message = "[src] [message]" + message = span_emote("[src] [message]") for(var/mob/M in hearers) if(!M.client) @@ -318,7 +318,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) @@ -348,7 +348,7 @@ hearers -= src var/raw_msg = message if(audible_message_flags & EMOTE_MESSAGE) - message = "[src] [message]" + message = span_emote("[src] [message]") for(var/mob/M in hearers) if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags) && M.can_hear()) M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) @@ -372,7 +372,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 diff --git a/code/modules/mob_spawn/ghost_roles/unused_roles.dm b/code/modules/mob_spawn/ghost_roles/unused_roles.dm index d533c2365c47b..df651eb29c77c 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" diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index b70b89a4da1e9..b4ff1c48b6cac 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -249,7 +249,7 @@ 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 != "") diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 9d68f79bf11ca..0a82f44318e79 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -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 @@ -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 diff --git a/code/modules/projectiles/guns/special/blastcannon.dm b/code/modules/projectiles/guns/special/blastcannon.dm index fee1ce2600363..a7c35c9122ec2 100644 --- a/code/modules/projectiles/guns/special/blastcannon.dm +++ b/code/modules/projectiles/guns/special/blastcannon.dm @@ -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/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/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 3c0997fda9708..8790883688e0e 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -122,9 +122,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) 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 dd463397b77bd..8c0aa36189f99 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -529,7 +529,7 @@ 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 + 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 /******ORGAN HEALING******/ /*Suffix: -rite*/ diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 34b2dce4170e6..6ef6fc0a44d1d 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -586,8 +586,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) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index bc719ce3ed1f2..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 diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index d76e1edb863a5..8e86a85e21264 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -585,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 diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index b9699ce4b5312..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)) @@ -564,21 +564,21 @@ /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_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 @@ -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/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/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 4d71d1fbc572e..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 diff --git a/code/modules/spells/spell_types/list_target/telepathy.dm b/code/modules/spells/spell_types/list_target/telepathy.dm index 861fc49732dfc..9f3694c03b41b 100644 --- a/code/modules/spells/spell_types/list_target/telepathy.dm +++ b/code/modules/spells/spell_types/list_target/telepathy.dm @@ -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/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/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index 436307322951f..795871c7ccd5d 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 diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index e45bb7c4f4a4d..bbc45b093998c 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -9,10 +9,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 diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 69d5abf197897..acae5f1b71f10 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 diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 5f435fff98ebb..b2d85a26f8fdc 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 @@ -547,7 +547,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) diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index 4f1edd1542d69..7e7a864f0a04c 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/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/zombie/organs.dm b/code/modules/zombie/organs.dm index 93aa4e2c53f75..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) From 693b348dffbe87fee3d760e880b6c313ed08ffdc Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:36:16 +0000 Subject: [PATCH 093/153] Automatic changelog for PR #86874 [ci skip] --- html/changelogs/AutoChangeLog-pr-86874.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86874.yml diff --git a/html/changelogs/AutoChangeLog-pr-86874.yml b/html/changelogs/AutoChangeLog-pr-86874.yml new file mode 100644 index 0000000000000..7e1d3a67f1609 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86874.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "improved click.ogg" \ No newline at end of file From c7f02d7c46d00f6949dcb3dcbb97a6ee35c2fe77 Mon Sep 17 00:00:00 2001 From: EnterTheJake <102721711+EnterTheJake@users.noreply.github.com> Date: Thu, 26 Sep 2024 22:02:46 +0200 Subject: [PATCH 094/153] Fixes touch spells on_hand hit signals (#86849) ## About The Pull Request Fixes touch spells on_hand hit signals ## Why It's Good For The Game Mainly fixes the issues with mansus grasp not being able to attack things properly, specifically unanchor the mawed crucible. --- .../heretic/structures/mawed_crucible.dm | 13 ++++++------ .../spells/spell_types/touch/_touch.dm | 20 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/code/modules/antagonists/heretic/structures/mawed_crucible.dm b/code/modules/antagonists/heretic/structures/mawed_crucible.dm index dd1d0d87d4028..ea962cbc5a4e1 100644 --- a/code/modules/antagonists/heretic/structures/mawed_crucible.dm +++ b/code/modules/antagonists/heretic/structures/mawed_crucible.dm @@ -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(.) diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 355f11f763c73..24eefe04d1020 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -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. From 37b6ac2fccee99213af5ce517bc3bc31fede3806 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 20:06:44 +0000 Subject: [PATCH 095/153] Automatic changelog for PR #86849 [ci skip] --- html/changelogs/AutoChangeLog-pr-86849.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86849.yml diff --git a/html/changelogs/AutoChangeLog-pr-86849.yml b/html/changelogs/AutoChangeLog-pr-86849.yml new file mode 100644 index 0000000000000..46d2efa6116d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86849.yml @@ -0,0 +1,5 @@ +author: "EnterTheJake" +delete-after: True +changes: + - bugfix: "Mansus Grasp can now properly interact with non living things." + - code_imp: "proc/on_hand_hit and secondary have better return values." \ No newline at end of file From 06675a4940a0fba8fcacfb7f82c35b06ffa427dd Mon Sep 17 00:00:00 2001 From: tattle <66640614+dragomagol@users.noreply.github.com> Date: Thu, 26 Sep 2024 14:38:25 -0700 Subject: [PATCH 096/153] Removes the chunkyfingers trait from insuls (#86903) ## About The Pull Request Does what it says in the title. ## Why It's Good For The Game Right now I feel like this is an engineer nerf more than anything else, since they have to interface with a lot of things that chunky fingers blocks, like their tablets and computers. I think that gloves having this trait is more to inconvenience certain players rather than add something to the gameplay. ## Changelog :cl: Tattle balance: insulated gloves no longer have the chunky fingers trait /:cl: Co-authored-by: tattle --- code/modules/clothing/gloves/insulated.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm index b04637d4c527b..d20ae78c6c4cc 100644 --- a/code/modules/clothing/gloves/insulated.dm +++ b/code/modules/clothing/gloves/insulated.dm @@ -13,7 +13,6 @@ 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) . = ..() @@ -22,11 +21,9 @@ /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 ..() From a8af27fa0af69cd6859c8e03faf8b7c20932a1a3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:38:45 +0000 Subject: [PATCH 097/153] Automatic changelog for PR #86903 [ci skip] --- html/changelogs/AutoChangeLog-pr-86903.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86903.yml diff --git a/html/changelogs/AutoChangeLog-pr-86903.yml b/html/changelogs/AutoChangeLog-pr-86903.yml new file mode 100644 index 0000000000000..ce241cf3a4805 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86903.yml @@ -0,0 +1,4 @@ +author: "Tattle" +delete-after: True +changes: + - balance: "insulated gloves no longer have the chunky fingers trait" \ No newline at end of file From 60dea653042ad6f3907ebf3c8f2c06c86daadaca Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Fri, 27 Sep 2024 01:57:45 +0200 Subject: [PATCH 098/153] Fix broken span defines, fixes broken traitor panel (#86924) ## About The Pull Request So uh. https://github.com/tgstation/tgstation/blob/a8af27fa0af69cd6859c8e03faf8b7c20932a1a3/code/__DEFINES/span.dm#L17-L18 Improperly ended spans. Yeah this broke the traitor panel, making it all red, and blocking the remove button. ## Why It's Good For The Game Fixes #86921. ## Changelog :cl: fix: 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. /:cl: --- code/__DEFINES/span.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index f7d9ebef916f7..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 + "") From 811f4307dc52418a9f814352e301b07d0af1abfb Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 23:58:06 +0000 Subject: [PATCH 099/153] Automatic changelog for PR #86924 [ci skip] --- html/changelogs/AutoChangeLog-pr-86924.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86924.yml diff --git a/html/changelogs/AutoChangeLog-pr-86924.yml b/html/changelogs/AutoChangeLog-pr-86924.yml new file mode 100644 index 0000000000000..49fdc4d18478a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86924.yml @@ -0,0 +1,5 @@ +author: "00-Steven" +delete-after: True +changes: + - 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." \ No newline at end of file From e2cd47647a075b8079aaf991b2a4f53793ca7602 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 00:25:34 +0000 Subject: [PATCH 100/153] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-84869.yml | 10 ----- html/changelogs/AutoChangeLog-pr-86701.yml | 4 -- html/changelogs/AutoChangeLog-pr-86824.yml | 4 -- html/changelogs/AutoChangeLog-pr-86835.yml | 5 --- html/changelogs/AutoChangeLog-pr-86849.yml | 5 --- html/changelogs/AutoChangeLog-pr-86868.yml | 4 -- html/changelogs/AutoChangeLog-pr-86874.yml | 4 -- html/changelogs/AutoChangeLog-pr-86876.yml | 4 -- html/changelogs/AutoChangeLog-pr-86877.yml | 4 -- html/changelogs/AutoChangeLog-pr-86878.yml | 4 -- html/changelogs/AutoChangeLog-pr-86882.yml | 4 -- html/changelogs/AutoChangeLog-pr-86903.yml | 4 -- html/changelogs/AutoChangeLog-pr-86913.yml | 4 -- html/changelogs/AutoChangeLog-pr-86924.yml | 5 --- html/changelogs/archive/2024-09.yml | 47 ++++++++++++++++++++++ 15 files changed, 47 insertions(+), 65 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-84869.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86701.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86824.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86835.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86849.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86868.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86874.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86876.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86877.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86878.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86882.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86903.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86913.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86924.yml diff --git a/html/changelogs/AutoChangeLog-pr-84869.yml b/html/changelogs/AutoChangeLog-pr-84869.yml deleted file mode 100644 index 159a3b02be8b2..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84869.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86701.yml b/html/changelogs/AutoChangeLog-pr-86701.yml deleted file mode 100644 index 691d2cb95a2d0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86701.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Iamgoofball" -delete-after: True -changes: - - bugfix: "Removes particles from Slimed and Slime Food status effects to fix fps lag in xenobio" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86824.yml b/html/changelogs/AutoChangeLog-pr-86824.yml deleted file mode 100644 index 179ca3eaf1cff..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86824.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "carlarctg" -delete-after: True -changes: - - qol: "you can now use the toy codex cicatrix as base for the codex ritual" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86835.yml b/html/changelogs/AutoChangeLog-pr-86835.yml deleted file mode 100644 index 171a51ab03523..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86835.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - 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" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86849.yml b/html/changelogs/AutoChangeLog-pr-86849.yml deleted file mode 100644 index 46d2efa6116d9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86849.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "EnterTheJake" -delete-after: True -changes: - - bugfix: "Mansus Grasp can now properly interact with non living things." - - code_imp: "proc/on_hand_hit and secondary have better return values." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86868.yml b/html/changelogs/AutoChangeLog-pr-86868.yml deleted file mode 100644 index 9c4c41e03638a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86868.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ZeWaka" -delete-after: True -changes: - - bugfix: "TGUI windows now flash less when opening new windows." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86874.yml b/html/changelogs/AutoChangeLog-pr-86874.yml deleted file mode 100644 index 7e1d3a67f1609..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86874.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "improved click.ogg" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86876.yml b/html/changelogs/AutoChangeLog-pr-86876.yml deleted file mode 100644 index 364c0f216ec11..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86876.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jewelry-x" -delete-after: True -changes: - - bugfix: "fixed hydroponics tray not updating new crop sprite properly" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86877.yml b/html/changelogs/AutoChangeLog-pr-86877.yml deleted file mode 100644 index 5c50f776ebf29..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86877.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "The Pun Pun job trait doesn't leave behind a fake (or is it?) Pun Pun." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86878.yml b/html/changelogs/AutoChangeLog-pr-86878.yml deleted file mode 100644 index 853afc7dcbed0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86878.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed water overlays showing on toilets facing directions other than SOUTH (down)." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86882.yml b/html/changelogs/AutoChangeLog-pr-86882.yml deleted file mode 100644 index c2aaa123b4d6f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86882.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "oranges" -delete-after: True -changes: - - rscadd: "Cardboard rolls and Wrapping paper can now be used to hit people on the head with" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86903.yml b/html/changelogs/AutoChangeLog-pr-86903.yml deleted file mode 100644 index ce241cf3a4805..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86903.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Tattle" -delete-after: True -changes: - - balance: "insulated gloves no longer have the chunky fingers trait" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86913.yml b/html/changelogs/AutoChangeLog-pr-86913.yml deleted file mode 100644 index 4e6971a2f1f14..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86913.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "fixed password paper in museum" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86924.yml b/html/changelogs/AutoChangeLog-pr-86924.yml deleted file mode 100644 index 49fdc4d18478a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86924.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - 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." \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index f3d7d5ab95569..fc65da7062d81 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -782,3 +782,50 @@ - 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 From 3ce81d8844be2416284934d052158581647a9a15 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:45:55 -0500 Subject: [PATCH 101/153] Removes intentional ling check in health analyzer (#86893) ## About The Pull Request Advanced health analyzers have an intended ling check which tells you if the scanned body is faking death (is in regen stasis), which is at odds with the rest of the codebase (which actively removes unintentional ling checks and blocks the addition of intentional ones). This PR removes it (making advanced analyzers unable to determine if the target is faking death). Also tweaks some code around it in general. ## Why It's Good For The Game I'm actually like 50/50 on whether this should actually be removed or not, so I opened the PR for discussion. On one hand I think it's kind of interesting to have a doctor look at the results *closely* and realize something is wrong here. On the other hand, ling check bad? ## Changelog :cl: Melbert del: Advanced Health Analyzers can no longer be used to determine if a body is faking death (like a changeling) /:cl: --- .../items/devices/scanners/health_analyzer.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 322bc56390ec1..270c070d6dc5e 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -151,11 +151,13 @@ 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] ([station_time_timestamp()]):")]
      Overall status: [mob_status]
      " @@ -401,7 +403,7 @@
      " // Time of death - if(target.station_timestamp_timeofdeath && (target.stat == DEAD || (HAS_TRAIT(target, TRAIT_FAKEDEATH) && !advanced))) + 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.
      " From d46d0fd0b13776f62307fd79dcf870c4de533943 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 02:46:15 +0000 Subject: [PATCH 102/153] Automatic changelog for PR #86893 [ci skip] --- html/changelogs/AutoChangeLog-pr-86893.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86893.yml diff --git a/html/changelogs/AutoChangeLog-pr-86893.yml b/html/changelogs/AutoChangeLog-pr-86893.yml new file mode 100644 index 0000000000000..5bb73cc058c75 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86893.yml @@ -0,0 +1,4 @@ +author: "Melbert" +delete-after: True +changes: + - rscdel: "Advanced Health Analyzers can no longer be used to determine if a body is faking death (like a changeling)" \ No newline at end of file From 66dc1060b7150efb3b989426232780710d15e780 Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Fri, 27 Sep 2024 05:18:09 -0400 Subject: [PATCH 103/153] Replaces the unusable Blink spell in the Necromancer deathmatch kit with Link Worlds (#86890) --- code/modules/deathmatch/deathmatch_loadouts.dm | 2 +- code/modules/spells/spell_types/conjure/link_worlds.dm | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index d89fdd383c80f..1e3d792f67b53 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -440,7 +440,7 @@ head = /obj/item/clothing/head/wizard/black 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 diff --git a/code/modules/spells/spell_types/conjure/link_worlds.dm b/code/modules/spells/spell_types/conjure/link_worlds.dm index 618e673c5bb17..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/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 From cae71558a422dbafcb52366de2667889495dea83 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:18:31 +0000 Subject: [PATCH 104/153] Automatic changelog for PR #86890 [ci skip] --- html/changelogs/AutoChangeLog-pr-86890.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86890.yml diff --git a/html/changelogs/AutoChangeLog-pr-86890.yml b/html/changelogs/AutoChangeLog-pr-86890.yml new file mode 100644 index 0000000000000..37cf8f870d168 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86890.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Replaces the unusable blink spell on the Necromancer deathmatch kit with a nether portal summon." \ No newline at end of file From a6bf8c18d78feef7d10f22eaeeca44ea7ced4ebe Mon Sep 17 00:00:00 2001 From: Goat <126099705+Goat-Real@users.noreply.github.com> Date: Fri, 27 Sep 2024 07:39:23 -0600 Subject: [PATCH 105/153] Removes a bookcase from the holdout simulation (#86907) ## About The Pull Request Gets rid of a bookcase that was under the foam in the holdout bunker simulation. ## Why It's Good For The Game There's no reason for it to be there, and it would cause random books to be there after simulations changed. And most importantly, it caused me MILD ANNOYANCE. ## Changelog :cl: Goat fix: Removes a random bookcase that was in the holdout bunker holodeck simulation /:cl: --- _maps/templates/holodeck_holdoutbunker.dmm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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 From 42863ba9b078a498b7b3bbec82b48b43064de334 Mon Sep 17 00:00:00 2001 From: Soupy <140170895+Soupfgc@users.noreply.github.com> Date: Fri, 27 Sep 2024 15:39:51 +0200 Subject: [PATCH 106/153] Fixes typos with the closets (#86900) ## About The Pull Request Fixes typos for closets. ## Why It's Good For The Game Proper spelling so it doesn't ruin immersion and user experience. ## Changelog :cl: spellcheck: Fixed closet typos /:cl: --- code/game/objects/structures/crates_lockers/closets.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 27eb510c278ab..58e99dc8839aa 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -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.") From eda07742b8e3ce228fc99065c221178b8d77d7fd Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:15:47 +0000 Subject: [PATCH 107/153] Automatic changelog for PR #86900 [ci skip] --- html/changelogs/AutoChangeLog-pr-86900.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86900.yml diff --git a/html/changelogs/AutoChangeLog-pr-86900.yml b/html/changelogs/AutoChangeLog-pr-86900.yml new file mode 100644 index 0000000000000..1fa230d1e52f1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86900.yml @@ -0,0 +1,4 @@ +author: "Soupfgc" +delete-after: True +changes: + - spellcheck: "Fixed closet typos" \ No newline at end of file From 3ceaf41119c50faac96bc07b7b6f93388e7c3963 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:15:49 +0000 Subject: [PATCH 108/153] Automatic changelog for PR #86907 [ci skip] --- html/changelogs/AutoChangeLog-pr-86907.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86907.yml diff --git a/html/changelogs/AutoChangeLog-pr-86907.yml b/html/changelogs/AutoChangeLog-pr-86907.yml new file mode 100644 index 0000000000000..3834786cf8f80 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86907.yml @@ -0,0 +1,4 @@ +author: "Goat" +delete-after: True +changes: + - bugfix: "Removes a random bookcase that was in the holdout bunker holodeck simulation" \ No newline at end of file From 2cf34ec44e5543d11b58f99728d2c5ad5f583fbd Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:33:45 +0300 Subject: [PATCH 109/153] Reduces volume of the nuke sound (#86888) --- code/game/objects/items/devices/battle_royale.dm | 2 +- code/game/objects/items/toys.dm | 4 ++-- code/modules/antagonists/blob/overmind.dm | 2 +- code/modules/antagonists/malf_ai/malf_ai_modules.dm | 2 +- .../nukeop/equipment/nuclear_authentication_disk.dm | 2 +- .../nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm | 2 +- .../nukeop/equipment/nuclear_challenge.dm | 4 ++-- code/modules/events/wizard/fakeexplosion.dm | 2 +- code/modules/hallucination/fake_sound.dm | 4 ++-- .../living/basic/space_fauna/netherworld/migo.dm | 2 +- code/modules/mob/living/living_defense.dm | 2 +- code/modules/power/singularity/narsie.dm | 2 +- .../alarm.ogg => announcer/alarm/nuke_alarm.ogg} | Bin 13 files changed, 15 insertions(+), 15 deletions(-) rename sound/{machines/alarm.ogg => announcer/alarm/nuke_alarm.ogg} (100%) diff --git a/code/game/objects/items/devices/battle_royale.dm b/code/game/objects/items/devices/battle_royale.dm index 40c3628f2f059..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", diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4a640063837bd..065f4929e4089 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -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) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 65d2acb8bb905..99a27429e61a7 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -187,7 +187,7 @@ 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) diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index b428060aa1c5f..f91d1b90ba46b 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -350,7 +350,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) 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) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm index 7e06dd0d6e050..ebc2c6ec32639 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm @@ -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 83bdc0288b2a2..3214232648b2a 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm @@ -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) 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 b59d984238e61..0dba54bf2aaaf 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -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/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/hallucination/fake_sound.dm b/code/modules/hallucination/fake_sound.dm index 316d5e16eaf5e..1d93be83f947c 100644 --- a/code/modules/hallucination/fake_sound.dm +++ b/code/modules/hallucination/fake_sound.dm @@ -58,8 +58,8 @@ 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 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 d7f14842d12b2..3f7adc2272252 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm @@ -35,7 +35,7 @@ /mob/living/basic/migo/Initialize(mapload) . = ..() - migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/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/machines/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 + 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) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index bb8d8a5d3abdf..ff8406ac4ca15 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -546,7 +546,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) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 7f9d9378b5e86..09e380aca17f4 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -291,7 +291,7 @@ 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/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 From 7f2961a6fb19f4b9e1fc56d6fb2f2fdb3808c5e8 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:35:28 +0000 Subject: [PATCH 110/153] Automatic changelog for PR #86888 [ci skip] --- html/changelogs/AutoChangeLog-pr-86888.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86888.yml diff --git a/html/changelogs/AutoChangeLog-pr-86888.yml b/html/changelogs/AutoChangeLog-pr-86888.yml new file mode 100644 index 0000000000000..7c6a82b137b4e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86888.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "the volume of the nuclear fission explosive have been reduced" \ No newline at end of file From 18ffabca053a331c5da8905a89b24a7518cb2158 Mon Sep 17 00:00:00 2001 From: Cheshify <73589390+Cheshify@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:05:19 -0400 Subject: [PATCH 111/153] Laser Musket & Smoothbore Disabler BUFFS (Crank it AND Run) (#86867) ## About The Pull Request This rebalances the Laser Musket and Heroic Laser Musket Replaces glasses with 2 drinking glasses in the crafting recipe Removes 2-handed demand Standard shot damage slightly increased and stamina damage greatly decreased Heroic shot made a 3-round scatter shot, very powerful, damage and stamina damage decreased to compensate Crank-charge weapons, except the thermal revolvers, can be charged while moving Muskets can also be worn on jackets ## Why It's Good For The Game These things were severely underused, and I always kinda wanted them to be crankable while you moved, I just didn't know how. This should also help the Militiamen ERT be less of a joke. I would appreciate balanceposters giving some advice on the numbers if you're seeing this. The heroic musket is incredibly rare, and SHOULD be pretty powerful. ## Changelog :cl: balance: laser muskets have been rebalanced balance: crank weapons can be charged while moving /:cl: --- code/datums/components/crafting/ranged_weapon.dm | 3 +-- code/datums/components/crank_recharge.dm | 8 +++++--- code/modules/clothing/suits/jacket.dm | 4 ++++ code/modules/projectiles/ammunition/energy/laser.dm | 2 ++ code/modules/projectiles/guns/energy/crank_guns.dm | 3 ++- code/modules/projectiles/projectile/beams.dm | 8 ++++---- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index bfd2385f89e01..e69d535a58b30 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -339,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/crank_recharge.dm b/code/datums/components/crank_recharge.dm index 4e4cf290a4b9a..4940a02b0553e 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/items/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/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/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 61ef04059bb71..04d139ca3751a 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -44,6 +44,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 diff --git a/code/modules/projectiles/guns/energy/crank_guns.dm b/code/modules/projectiles/guns/energy/crank_guns.dm index 2645a601c8271..32aa65827cfb0 100644 --- a/code/modules/projectiles/guns/energy/crank_guns.dm +++ b/code/modules/projectiles/guns/energy/crank_guns.dm @@ -13,7 +13,6 @@ /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(), \ @@ -21,6 +20,7 @@ cooldown_time = 2 SECONDS, \ 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() @@ -54,6 +54,7 @@ cooldown_time = 2 SECONDS, \ 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() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d3d1bb3811a94..d36b66eac7ffe 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -76,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 From 764ad4f4642791b0a0e33865a54033abb3c79572 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 20:05:38 +0000 Subject: [PATCH 112/153] Automatic changelog for PR #86867 [ci skip] --- html/changelogs/AutoChangeLog-pr-86867.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86867.yml diff --git a/html/changelogs/AutoChangeLog-pr-86867.yml b/html/changelogs/AutoChangeLog-pr-86867.yml new file mode 100644 index 0000000000000..d1e51d5c8a1f4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86867.yml @@ -0,0 +1,5 @@ +author: "Cheshify" +delete-after: True +changes: + - balance: "laser muskets have been rebalanced" + - balance: "crank weapons can be charged while moving" \ No newline at end of file From 20d9e3a1d6228abf1aa7bbbc6d7d667f28180dfb Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Sat, 28 Sep 2024 03:11:21 +0530 Subject: [PATCH 113/153] Gives Debug chem synthesizer temperature control (#86911) ## About The Pull Request - Fixes #86858 You can set the temperature of the reagents in the UI before adding them so the ice does not melt instantly ## Changelog :cl: fix: Debug chem synthesizer now has temperature control for adding reagents /:cl: --- .../chemistry/machinery/chem_synthesizer.dm | 35 ++++++++++++++----- .../tgui/interfaces/ChemDebugSynthesizer.tsx | 16 ++++++++- 2 files changed, 41 insertions(+), 10 deletions(-) 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/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, + }) + } + /> Date: Fri, 27 Sep 2024 22:02:18 +0000 Subject: [PATCH 114/153] Automatic changelog for PR #86911 [ci skip] --- html/changelogs/AutoChangeLog-pr-86911.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86911.yml diff --git a/html/changelogs/AutoChangeLog-pr-86911.yml b/html/changelogs/AutoChangeLog-pr-86911.yml new file mode 100644 index 0000000000000..e985ffe28f97b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86911.yml @@ -0,0 +1,4 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "Debug chem synthesizer now has temperature control for adding reagents" \ No newline at end of file From 12ffd52fdb59837fbc0a4ed7283b2ebc1b5422f8 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 00:31:02 +0000 Subject: [PATCH 115/153] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-86867.yml | 5 ----- html/changelogs/AutoChangeLog-pr-86888.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86890.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86893.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86900.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86907.yml | 4 ---- html/changelogs/AutoChangeLog-pr-86911.yml | 4 ---- html/changelogs/archive/2024-09.yml | 18 ++++++++++++++++++ 8 files changed, 18 insertions(+), 29 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-86867.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86888.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86890.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86893.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86900.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86907.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-86911.yml diff --git a/html/changelogs/AutoChangeLog-pr-86867.yml b/html/changelogs/AutoChangeLog-pr-86867.yml deleted file mode 100644 index d1e51d5c8a1f4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86867.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Cheshify" -delete-after: True -changes: - - balance: "laser muskets have been rebalanced" - - balance: "crank weapons can be charged while moving" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86888.yml b/html/changelogs/AutoChangeLog-pr-86888.yml deleted file mode 100644 index 7c6a82b137b4e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86888.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "the volume of the nuclear fission explosive have been reduced" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86890.yml b/html/changelogs/AutoChangeLog-pr-86890.yml deleted file mode 100644 index 37cf8f870d168..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86890.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - bugfix: "Replaces the unusable blink spell on the Necromancer deathmatch kit with a nether portal summon." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86893.yml b/html/changelogs/AutoChangeLog-pr-86893.yml deleted file mode 100644 index 5bb73cc058c75..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86893.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - rscdel: "Advanced Health Analyzers can no longer be used to determine if a body is faking death (like a changeling)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86900.yml b/html/changelogs/AutoChangeLog-pr-86900.yml deleted file mode 100644 index 1fa230d1e52f1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86900.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Soupfgc" -delete-after: True -changes: - - spellcheck: "Fixed closet typos" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86907.yml b/html/changelogs/AutoChangeLog-pr-86907.yml deleted file mode 100644 index 3834786cf8f80..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86907.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Goat" -delete-after: True -changes: - - bugfix: "Removes a random bookcase that was in the holdout bunker holodeck simulation" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86911.yml b/html/changelogs/AutoChangeLog-pr-86911.yml deleted file mode 100644 index e985ffe28f97b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-86911.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "Debug chem synthesizer now has temperature control for adding reagents" \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index fc65da7062d81..00d9a59b348d8 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -829,3 +829,21 @@ 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 From 5b8358cb7465e29e87aae0f845d86a035ea1ea63 Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Sat, 28 Sep 2024 05:18:57 +0300 Subject: [PATCH 116/153] raptor retaliate targetting fix (#86925) ## About The Pull Request raptors werent meant to retaliate against each other or against their owner. this was initially handled by their targeting strategy, however some changes to it at some point broke this. raptors would now over-escalate conflicts against troublemaker raptors, locking both into a deathmatch. this fixes that ## Why It's Good For The Game fixes raptor retaliate targetting ## Changelog :cl: fix: fixes raptors retaliating against each other and their owners /:cl: --- .../lavaland/raptor/raptor_ai_controller.dm | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) 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), ) From b275647c8d33243cfc2568e36dc2c26fd8963237 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:19:16 +0000 Subject: [PATCH 117/153] Automatic changelog for PR #86925 [ci skip] --- html/changelogs/AutoChangeLog-pr-86925.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86925.yml diff --git a/html/changelogs/AutoChangeLog-pr-86925.yml b/html/changelogs/AutoChangeLog-pr-86925.yml new file mode 100644 index 0000000000000..8bbb16786d86a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86925.yml @@ -0,0 +1,4 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - bugfix: "fixes raptors retaliating against each other and their owners" \ No newline at end of file From e5f023a3d53ffe309de544adddc40b7dbd7b97d0 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Fri, 27 Sep 2024 22:19:34 -0400 Subject: [PATCH 118/153] Fixes polling causing an unexpected return value when there are 0 players picked (#86912) ## About The Pull Request So this was caused by the change in https://github.com/tgstation/tgstation/pull/86012 . They tried to fix a case for polls with `amount_to_pick` set to _greater than 1_ having null entries in the returned lists, and succeeded at that. However, in doing so they messed up the control flow of the proc such that now it's returning early with an empty `list()` whenever the amount is _equal to 1_. The assumption was, when `amount_to_pick` was equal to 1 specifically then the return value would be either a `null` value or the valid mob. However, now what was being returned was either a `list()` or the valid mob because that code was no longer ever being reached. For example ![image](https://github.com/user-attachments/assets/e49fe031-7120-4a17-8bba-3c5054a90fae) ![image](https://github.com/user-attachments/assets/c7ae27a8-1dce-4fcd-9f19-fcde417f7695) Fixes https://github.com/NovaSector/NovaSector/issues/4427 Fixes both bugs in a way that should not cause any problems, and adjusts documentation to make it clearer what the return value of this proc is expected to be. ## Why It's Good For The Game Fixes a bug that pretty much effects the majority of ghost polls as most of them are only asking for 1 player. ## Changelog :cl: fix: 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 /:cl: --- code/controllers/subsystem/polling.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index 4c3bf452c2c66..b237edd3870b6 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, @@ -175,9 +175,11 @@ SUBSYSTEM_DEF(polling) UNTIL(new_poll.finished) if(!(amount_to_pick > 0)) return new_poll.signed_up - if(length(new_poll.signed_up) < amount_to_pick) - return new_poll.signed_up 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) if(announce_chosen) new_poll.announce_chosen(group) From 36fb349f110bddba63919152e70c243699fcd18d Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:19:59 +0000 Subject: [PATCH 119/153] Automatic changelog for PR #86912 [ci skip] --- html/changelogs/AutoChangeLog-pr-86912.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86912.yml diff --git a/html/changelogs/AutoChangeLog-pr-86912.yml b/html/changelogs/AutoChangeLog-pr-86912.yml new file mode 100644 index 0000000000000..7598fc5b582d6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86912.yml @@ -0,0 +1,4 @@ +author: "vinylspiders" +delete-after: True +changes: + - 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" \ No newline at end of file From 2c9f0add82ceff1fb95179b046e862fdaddf8b14 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 28 Sep 2024 04:20:10 +0200 Subject: [PATCH 120/153] Mindswap can no longer be used inside of pipes (#86909) ## About The Pull Request Closes #86905 by adding an action flag to prevent usage of certain moves from inside of pipes. Should be assigned to most of our actions to be honest. ## Why It's Good For The Game Mindswapping from inside of pipes is extremely cheesy and has quite literally no counterplay, permanently forcing someone into being a mouse without them being able to react, do anything or even know about your presence is not fun at all. ## Changelog :cl: fix: Mindswap can no longer be used inside of pipes /:cl: --- code/__DEFINES/actions.dm | 3 +++ code/datums/actions/action.dm | 8 +++++++- code/modules/spells/spell_types/pointed/mind_transfer.dm | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) 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/datums/actions/action.dm b/code/datums/actions/action.dm index d8247d3e92a5e..2f297f480ae66 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -114,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) @@ -141,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), @@ -200,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/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index fa7b579002752..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 From 0cadbafada8f029416863e51578a9adec99c6189 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:20:33 +0000 Subject: [PATCH 121/153] Automatic changelog for PR #86909 [ci skip] --- html/changelogs/AutoChangeLog-pr-86909.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86909.yml diff --git a/html/changelogs/AutoChangeLog-pr-86909.yml b/html/changelogs/AutoChangeLog-pr-86909.yml new file mode 100644 index 0000000000000..4a71fc158ecea --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86909.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Mindswap can no longer be used inside of pipes" \ No newline at end of file From 83ec2a2d2032643bb479b9a4a45264347bd085a1 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 28 Sep 2024 04:20:52 +0200 Subject: [PATCH 122/153] [NO GBP] Changes stagger animation to use animate chains instead of sleeping (#86897) ## About The Pull Request Closes #86895 ## Changelog :cl: fix: Players no longer can randomly get semi-permanently offset from being shoved /:cl: --- code/datums/status_effects/debuffs/staggered.dm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/code/datums/status_effects/debuffs/staggered.dm b/code/datums/status_effects/debuffs/staggered.dm index 1291da1307a61..88dd91c00e0d2 100644 --- a/code/datums/status_effects/debuffs/staggered.dm +++ b/code/datums/status_effects/debuffs/staggered.dm @@ -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 - animate(owner, pixel_x = owner.base_pixel_x, time = 0.2 SECONDS, flags = ANIMATION_PARALLEL) /// Signal proc that self deletes our staggered effect /datum/status_effect/staggered/proc/clear_staggered(datum/source) @@ -45,11 +43,12 @@ /// 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, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) - sleep(0.2 SECONDS) - animate(src, pixel_x = -8, time = 0.2 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) - sleep(0.2 SECONDS) - animate(src, pixel_x = 4, time = 0.2 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) + 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 From 97c24929e627d292df5f5da25cf2d24dacab4241 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 27 Sep 2024 21:21:12 -0500 Subject: [PATCH 123/153] Fix air alarm helper to ignore gas when appropriate (#86915) ## About The Pull Request Certain air alarms were marked with no checks for the pressure/temperature. This should also extend to ignore all gas checks otherwise it triggers alarms. ## Why It's Good For The Game No more air alarms crying wolf. Certain air alarms on the station are meant to only be used to trigger vents/scrubbers and not care about the gases inside. (ordance chambers, burn chambers, SM, etc.) ## Changelog :cl: fix: Fix air alarm helper to ignore gas when appropriate /:cl: --- code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 737018b24ad7d..7beb060318710 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -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]] From ab71e8760943a9faa625b165a4f327f9e700b5d7 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:21:17 +0000 Subject: [PATCH 124/153] Automatic changelog for PR #86897 [ci skip] --- html/changelogs/AutoChangeLog-pr-86897.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86897.yml diff --git a/html/changelogs/AutoChangeLog-pr-86897.yml b/html/changelogs/AutoChangeLog-pr-86897.yml new file mode 100644 index 0000000000000..85ac5c543263c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86897.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Players no longer can randomly get semi-permanently offset from being shoved" \ No newline at end of file From d260b6f7bf667d98dff2162bcc8d9e408bfb91dc Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 27 Sep 2024 21:21:30 -0500 Subject: [PATCH 125/153] Fix air alarms not updating icon (#86914) ## About The Pull Request This updates the air alarms whenever a power change is triggered. When connecting a gas sensor using mapping link helpers air alarms would not update their icons at roundstart. I'm sure this applies to other rare situations where the icon wasn't updating when it should green/red/etc. ## Why It's Good For The Game Better consistency. ## Changelog :cl: fix: Fix air alarms being stuck and not updating their icons. /:cl: --- code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 7beb060318710..fbd5e8f1bcac9 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)) From ff057be4e1121504aaa8380704cd0f345498843e Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:21:33 +0000 Subject: [PATCH 126/153] Automatic changelog for PR #86915 [ci skip] --- html/changelogs/AutoChangeLog-pr-86915.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86915.yml diff --git a/html/changelogs/AutoChangeLog-pr-86915.yml b/html/changelogs/AutoChangeLog-pr-86915.yml new file mode 100644 index 0000000000000..956d4b2fa5773 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86915.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - bugfix: "Fix air alarm helper to ignore gas when appropriate" \ No newline at end of file From fb3ae625a89e9b99bb117fdf1978fb084cbee968 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 28 Sep 2024 04:22:18 +0200 Subject: [PATCH 127/153] Adds missing venue prices for certain foods and reagents (#86873) ## About The Pull Request Closes #60318 Need to make a unit test for these once I get some spare time ## Changelog :cl: fix: Added missing venue prices for certain foods and reagents /:cl: --- code/game/objects/items/food/egg.dm | 1 + code/game/objects/items/food/meatdish.dm | 2 ++ code/game/objects/items/food/mexican.dm | 1 + code/game/objects/items/food/sandwichtoast.dm | 1 + .../reagents/chemistry/reagents/drinks/alcohol_reagents.dm | 1 + code/modules/reagents/chemistry/reagents/other_reagents.dm | 1 + .../reagents/chemistry/reagents/reaction_agents_reagents.dm | 2 ++ 7 files changed, 9 insertions(+) diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index bcc61e721e211..d731d8c4978dc 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -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 415fe5775d907..9bda586b2693f 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -290,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 @@ -306,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//////////////////////////////////////////// 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/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/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 242456603efd4..fa869cb267a57 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -2638,6 +2638,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) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 6f28d12964771..bbaad188151a2 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -587,6 +587,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) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm b/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm index 1abb9552f6d01..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) @@ -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) . = ..() From f8456555fe42fd5c19bdee55110cce480bd671ee Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:22:26 +0000 Subject: [PATCH 128/153] Automatic changelog for PR #86914 [ci skip] --- html/changelogs/AutoChangeLog-pr-86914.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86914.yml diff --git a/html/changelogs/AutoChangeLog-pr-86914.yml b/html/changelogs/AutoChangeLog-pr-86914.yml new file mode 100644 index 0000000000000..a743ee3a28cc3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86914.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - bugfix: "Fix air alarms being stuck and not updating their icons." \ No newline at end of file From 9cb7c7cbcabc8696b52b5915c35dfa2350e31985 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:22:44 +0000 Subject: [PATCH 129/153] Automatic changelog for PR #86873 [ci skip] --- html/changelogs/AutoChangeLog-pr-86873.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86873.yml diff --git a/html/changelogs/AutoChangeLog-pr-86873.yml b/html/changelogs/AutoChangeLog-pr-86873.yml new file mode 100644 index 0000000000000..c7562c525da85 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86873.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Added missing venue prices for certain foods and reagents" \ No newline at end of file From ba7e7d3d31ad9e8f488b56ca8f60a3157a2b3cb9 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 27 Sep 2024 21:24:03 -0500 Subject: [PATCH 130/153] Fix missing pour sounds from reagent dispensers (#86859) ## About The Pull Request When pouring liquid out of a barrel or watertank, none of the pour sounds would trigger. This is now fixed. Also added a missing signal and returned `ITEM_INTERACT_SUCCESS` bitflag. ## Why It's Good For The Game When I play bartender I want consistency. ## Changelog :cl: code: Add missing signal to reagent dispenser RMB interactions. sound: Fix missing pour sounds from reagent dispensers /:cl: --- code/__DEFINES/sound.dm | 1 + code/game/sound.dm | 6 ++++++ code/modules/reagents/reagent_containers/cups/_cup.dm | 8 ++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 7322340fb1f4f..4335d535ee6f6 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -184,3 +184,4 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_DEFAULT_FISH_SLAP "default_fish_slap" #define SFX_ALT_FISH_SLAP "alt_fish_slap" #define SFX_FISH_PICKUP "fish_pickup" +#define SFX_LIQUID_POUR "liquid_pour" diff --git a/code/game/sound.dm b/code/game/sound.dm index 9d62aede03e9c..b1a35ba1db126 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -516,4 +516,10 @@ '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', + ) return soundin diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index bb8172b32f96b..ca20e1519fb91 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -117,7 +117,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_pour/liquid_pour1.ogg', 'sound/effects/liquid_pour/liquid_pour2.ogg', 'sound/effects/liquid_pour/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() @@ -133,6 +133,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() @@ -158,9 +159,12 @@ 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 NONE /obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, params) From 5994ab2e0fda4f08f0ced3798a8493a5a7e5b30d Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:24:28 +0000 Subject: [PATCH 131/153] Automatic changelog for PR #86859 [ci skip] --- html/changelogs/AutoChangeLog-pr-86859.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86859.yml diff --git a/html/changelogs/AutoChangeLog-pr-86859.yml b/html/changelogs/AutoChangeLog-pr-86859.yml new file mode 100644 index 0000000000000..6619ac4e8b5de --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86859.yml @@ -0,0 +1,5 @@ +author: "timothymtorres" +delete-after: True +changes: + - code_imp: "Add missing signal to reagent dispenser RMB interactions." + - sound: "Fix missing pour sounds from reagent dispensers" \ No newline at end of file From 777a8ef8f683fde5b3a2b6bbf3b7f8b48e754525 Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Sat, 28 Sep 2024 04:24:56 +0200 Subject: [PATCH 132/153] Show a feedback message for whispers you cannot hear (#86791) ## About The Pull Request In this pr we make it so, instead of doing an early return, whispers you cannot hear will display a feedback message along the lines of: `Angel Randolph says something, but you are too far away to understand him.` As long as you are capable of seeing them say something. This includes signing, as it uses the same logic. If they're not signing and you cannot hear at all, then it skips to the normal deaf messages.
      Example Test Images ### explanation: The number after each message denotes the distance between speaker and listener. The first image is from the speaker's pov, the second from the listener's. ### no blindfold, no earmuffs: no signing ![image](https://github.com/user-attachments/assets/eaf271e6-3174-40e5-8eec-647aba239e55) ![image](https://github.com/user-attachments/assets/272ef988-46ea-4c40-91a4-f55df2404d5b) signing ![image](https://github.com/user-attachments/assets/9ef54ff9-9a63-4291-800b-9adce2e00727) ![image](https://github.com/user-attachments/assets/acd76a99-8395-4e10-90c4-dc28aaf3d888) ### no blindfold, earmuffs: no signing ![image](https://github.com/user-attachments/assets/bf839a0e-8a0e-433c-b60e-d3e0677f6f39) ![image](https://github.com/user-attachments/assets/6da2e226-2149-45a5-9214-3e80bdd71c30) signing ![image](https://github.com/user-attachments/assets/3fcf08ea-81fb-4e1f-a3d7-4037c9d75635) ![image](https://github.com/user-attachments/assets/e20a4e7b-4fcd-4f2c-9bee-b1bf8cdd9e5d) ### blindfold, no earmuffs: no signing ![image](https://github.com/user-attachments/assets/963467b7-8cca-44d8-94f5-3f75d86f5e3a) ![image](https://github.com/user-attachments/assets/83793e34-b386-4595-8063-164915ff43e2) signing ![image](https://github.com/user-attachments/assets/1a8f220d-02f2-4def-826a-a313a35f4894) ![image](https://github.com/user-attachments/assets/248c5e46-ed9d-4f87-b1da-ed6a361228e4) ### blindfold, earmuffs: no signing ![image](https://github.com/user-attachments/assets/d084a21b-c050-44ba-b16a-86a7b3d2aa4c) ![image](https://github.com/user-attachments/assets/7b797034-7b0d-4238-b2eb-135193cab5c7)
      ## Why It's Good For The Game Currently, someone whispering grants zero feedback to listeners who are beyond 2 tiles (without good hearing), all they get is that the speaker's typing indicator disappeared. This makes it look indistinguishable from the speaker just having backspaced their message. This is _especially_ annoying with soft-spoken, as it tends to cause other players to disengage, because to them you just didn't press enter if they left your immediate range before you finished speaking. But even outside of that, arguably, even if you couldn't _hear_ it, you should be able to _see_ the movements of them speaking. And really, I just think that it'd lead to fun interactions if you could grumble to yourself or whisper amongst each other and have people actually know you're up to _something_. ## Changelog :cl: add: 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. /:cl: --- code/modules/mob/living/living_say.dm | 28 ++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index c5f41678732cf..6f27b4db7192a 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -287,21 +287,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) From 7cc0f6e88dd50215796a4b5907af3aa5559ee5e8 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:25:16 +0000 Subject: [PATCH 133/153] Automatic changelog for PR #86791 [ci skip] --- html/changelogs/AutoChangeLog-pr-86791.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86791.yml diff --git a/html/changelogs/AutoChangeLog-pr-86791.yml b/html/changelogs/AutoChangeLog-pr-86791.yml new file mode 100644 index 0000000000000..8cad532c946c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86791.yml @@ -0,0 +1,4 @@ +author: "00-Steven" +delete-after: True +changes: + - 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." \ No newline at end of file From 29663083b19dad2252e33e64197323536c6ceb32 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 27 Sep 2024 21:25:25 -0500 Subject: [PATCH 134/153] Fix air alarm not checking missing gases (#86918) ## About The Pull Request Fixes #72841 Air alarms only check the current gases in the environment. This means that any gas with a minimum threshold will not trigger if it is completely gone from the environment. (like oxygen) ## Why It's Good For The Game Better consistency. ## Changelog :cl: fix: Fix air alarm not checking missing gases /:cl: --- code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index fbd5e8f1bcac9..824731087f21e 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -568,8 +568,8 @@ 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) From 7a35055eb4fdc2983c83d3ac5d982fddbccf258b Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:25:44 +0000 Subject: [PATCH 135/153] Automatic changelog for PR #86918 [ci skip] --- html/changelogs/AutoChangeLog-pr-86918.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86918.yml diff --git a/html/changelogs/AutoChangeLog-pr-86918.yml b/html/changelogs/AutoChangeLog-pr-86918.yml new file mode 100644 index 0000000000000..8663c672627a0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86918.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - bugfix: "Fix air alarm not checking missing gases" \ No newline at end of file From 1bfe5375903703302bb572780eb76586a51b12d4 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 27 Sep 2024 21:26:09 -0500 Subject: [PATCH 136/153] Fix air alarms warning message to use pressure & temp settings (#86917) ## About The Pull Request Air alarms had temp/pressure that were hardcoded to be dangerous temps/pressure for humans. This fixes it so that the temp/pressure is based on the settings used in the air alarm. So if a air alarm is ignoring pressure/temp then it doesn't give a warning message. ## Why It's Good For The Game If you want to ignore atmos checks for air alarms in certain areas, then it shouldn't be giving warning messages. ## Changelog :cl: fix: Fix air alarms warning message to use pressure & temp settings /:cl: --- .../machinery/air_alarm/_air_alarm.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 824731087f21e..5f073d17fc1e2 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -574,28 +574,28 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) 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 From 8f8f9fd1634b45d1a10485304b4e5288a140d4c6 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:26:34 +0000 Subject: [PATCH 137/153] Automatic changelog for PR #86917 [ci skip] --- html/changelogs/AutoChangeLog-pr-86917.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86917.yml diff --git a/html/changelogs/AutoChangeLog-pr-86917.yml b/html/changelogs/AutoChangeLog-pr-86917.yml new file mode 100644 index 0000000000000..334faafa398a8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86917.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - bugfix: "Fix air alarms warning message to use pressure & temp settings" \ No newline at end of file From 652a253a627dab0a42a438f2c9629472097ef81f Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Sat, 28 Sep 2024 07:57:35 +0530 Subject: [PATCH 138/153] Fixes ethereal APC drain/charge attack (#86910) ## About The Pull Request - Fixes #86908 ## Changelog :cl: fix: Fixes ethereal APC drain/charge attack /:cl: --- code/__DEFINES/apc_defines.dm | 6 ----- code/modules/power/apc/apc_attack.dm | 33 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 18 deletions(-) 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/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 From 8d0ca9d299c6955f6ec9d04006a059adad442f5f Mon Sep 17 00:00:00 2001 From: Sealed101 Date: Sat, 28 Sep 2024 05:28:03 +0300 Subject: [PATCH 139/153] Adjusts offset values for Nukie Infiltrator shuttle's nav console so it's actually centered (#86922) ## About The Pull Request The Infiltrator, in a vacuum of its map file, is facing _NORTH_, the docking port thinks that the shuttle is facing _NORTH_, and the docking port itself is pointed towards _EAST_ (`port_direction = 4`). In times past, this was good and well, the navigation console would properly center the shuttle preview as its offset values dictated. Then the nukie base got a rework. That made it so the shuttle is docked facing _SOUTH_, and since that moves the entire shuttle around, the docking port is now actually facing _WEST_, while still thinking the shuttle is facing _NORTH_, which in turn fucks up `CreateEye()` for the nav console, and the preview is spawned completely off-center. This sucks, this blows, this is awful, please scream at a coder, etc etc. So here's the thing. The ideal solution here is probably actually flipping the shuttle's map file so it's facing _SOUTH_, then adjusting the docking port's vars to account for that and probably adjusting something else in the viscinity. What's done in the first commit here is instead a lazy removal of the offsets' `-` plus a comment. Go me. Anyway, I want some input on those solutions, so here's the PR. ## Why It's Good For The Game Actually centered nukie infiltrator shuttle preview, for once. Wow, that didn't take long at all. Surprisingly no issue opened for this one, but that's more likely because the previews were missing for [a long-ass while](https://github.com/tgstation/tgstation/issues/62203). Eh, if I find one, I'll close one. ## Changelog :cl: fix: 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! /:cl: --- code/modules/shuttle/syndicate.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From fe1987bbba0022bc3677331aef633d365e5ebff5 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:28:10 +0000 Subject: [PATCH 140/153] Automatic changelog for PR #86910 [ci skip] --- html/changelogs/AutoChangeLog-pr-86910.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86910.yml diff --git a/html/changelogs/AutoChangeLog-pr-86910.yml b/html/changelogs/AutoChangeLog-pr-86910.yml new file mode 100644 index 0000000000000..8c093c570c9f4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86910.yml @@ -0,0 +1,4 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "Fixes ethereal APC drain/charge attack" \ No newline at end of file From 5fa6a537a564abd049bff8b79d9ac51f8780fbd5 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:28:22 +0000 Subject: [PATCH 141/153] Automatic changelog for PR #86922 [ci skip] --- html/changelogs/AutoChangeLog-pr-86922.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86922.yml diff --git a/html/changelogs/AutoChangeLog-pr-86922.yml b/html/changelogs/AutoChangeLog-pr-86922.yml new file mode 100644 index 0000000000000..9365a9a1bebf6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86922.yml @@ -0,0 +1,4 @@ +author: "Sealed101" +delete-after: True +changes: + - 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!" \ No newline at end of file From 80e9133218d3054adc34b9c207ffa95e26142ec1 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 27 Sep 2024 21:28:59 -0500 Subject: [PATCH 142/153] Fix Meta and Wawa coldrooms (#86923) ## About The Pull Request - Adds a coldroom air alarm mapping helper to Meta's medical coldroom so no alerts due to the cold. - Mark coldroom area for kitchen backroom with included APC/Atmos alarm. ## Why It's Good For The Game The atmos to these areas are really cold and will trigger normal atmos alarms so they need special ones. ## Changelog :cl: fix: Fix Meta's medical freezer air alarm to not trigger on cold temps. Fix missing atmos alarm in Wawa kitchen coldroom. /:cl: --- _maps/map_files/MetaStation/MetaStation.dmm | 1 + _maps/map_files/wawastation/wawastation.dmm | 86 +++++++++++++-------- 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 920c3c93f8d55..70090fc32fcee 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -10266,6 +10266,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" = ( diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 59c71329b21fb..096cf003ac4eb 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -1631,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, @@ -2135,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, @@ -4200,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, @@ -8267,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, @@ -10056,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, @@ -16256,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 @@ -36207,6 +36207,9 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"mMT" = ( +/turf/closed/wall, +/area/station/service/kitchen/coldroom) "mNl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, @@ -37574,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{ @@ -40888,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 @@ -44775,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 @@ -47955,6 +47967,16 @@ /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, @@ -50245,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) @@ -53736,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, @@ -55255,7 +55277,7 @@ /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, @@ -59791,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) @@ -93333,10 +93355,10 @@ bIi acc jrX gGm -enu -enu -enu -enu +mMT +mMT +mMT +mMT edv eBb hRB @@ -93589,12 +93611,12 @@ kYl sUD dGc fDN -enu -enu +mMT +mMT twW pTn -enu -enu +mMT +mMT hwk hRB jkF @@ -93846,12 +93868,12 @@ heh jUd acc fDN -enu +mMT uZg byb rNs -rNs -sUI +nlz +rbt cXL enu tGt @@ -94103,12 +94125,12 @@ acc acc acc fDN -enu +mMT oBU aAg cYH aJv -enu +mMT drJ shG vMb @@ -94360,12 +94382,12 @@ acB jmn atX mUW -enu +mMT fNy rNs rNs dCh -enu +mMT alP enu nii @@ -94617,12 +94639,12 @@ gGS bcu bcu pPy -enu -enu +mMT +mMT sUI -enu -enu -enu +mMT +mMT +mMT duS pQM pYu From f24b6014beaf8d6eea74d0ec55b192c99d685117 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:29:24 +0000 Subject: [PATCH 143/153] Automatic changelog for PR #86923 [ci skip] --- html/changelogs/AutoChangeLog-pr-86923.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86923.yml diff --git a/html/changelogs/AutoChangeLog-pr-86923.yml b/html/changelogs/AutoChangeLog-pr-86923.yml new file mode 100644 index 0000000000000..a1757370637a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86923.yml @@ -0,0 +1,4 @@ +author: "timothymtorres" +delete-after: True +changes: + - bugfix: "Fix Meta's medical freezer air alarm to not trigger on cold temps. Fix missing atmos alarm in Wawa kitchen coldroom." \ No newline at end of file From 47430a4c0461c64362459a07e30daaa790b90073 Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Fri, 27 Sep 2024 22:32:15 -0400 Subject: [PATCH 144/153] A smattering of boulder-related QOL and fixes. (#86834) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request This pull request does a little bit of cleanup that I came across awhile ago while looking at #85081, then forgot about, then came back up when I was looking at some additional cleanup that needed to be done. Reorganizes the handle_wave_conclusion function such that it can take a force arg, to force a ore vent to be completed for debug purposes. This also fixes a minor bug where vents, when successfully completed, will still show a warning alert that the waves were failed, and that the vent has closed up. Grammar fix to the examine of boulder processing machines. Moves the can-move behavior of boulders on conveyor belts and during regular stacking to an early return over a late return (Thank you Goofball for pointing that out). Artifact boulders will now default to their artifact icon_state whenever possible. Finally, adds an additional sanity check to boulder processing to check for custom material length, to attempt to avoid zero-content boulders existing and running into the afforementioned #85081 ## Why It's Good For The Game Largely applies cleanup to several aspects of the boulder processing system, and a handful of (hopefully) performance related rearrangements to the existing layout of boulder processing code. I can't for sure say that it'll fix the linked issue, due to the fact that I could not for some reason re-create the issue in local testing, but I'm hopeful that it's some kind of nebulous sanity-related issue. Cleans up grammar in some spots, and provides a useful debug tool for admin purposes when you just want a vent to flip. Might be a good justification for a ore-manager admin panel later? 🤷 ## Changelog :cl: fix: Artifact boulders should keep their alien icon even after a first round of processing. fix: Boulders are less likely to exist with zero materials after processing. fix: Boulders should be slightly less laggy on conveyor belts. fix: Grammar of refinery/smeltery examine is corrected. /:cl: --- .../objects/structures/lavaland/ore_vent.dm | 45 ++++++++++--------- .../boulder_processing/_boulder_processing.dm | 6 ++- .../mining/boulder_processing/boulder.dm | 2 +- .../boulder_processing/boulder_types.dm | 4 ++ 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index c4f667a830851..adf888a2d9c42 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -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)) diff --git a/code/modules/mining/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm index c504bdeca8c49..28d8f9b6ea462 100644 --- a/code/modules/mining/boulder_processing/_boulder_processing.dm +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -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 @@ -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 df717ed31be41..57a143a0d33a5 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) . = ..() 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" From 5cff02684535b23535f155616f22e2f138fb05ff Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:32:48 +0000 Subject: [PATCH 145/153] Automatic changelog for PR #86834 [ci skip] --- html/changelogs/AutoChangeLog-pr-86834.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86834.yml diff --git a/html/changelogs/AutoChangeLog-pr-86834.yml b/html/changelogs/AutoChangeLog-pr-86834.yml new file mode 100644 index 0000000000000..4742c8725c79d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86834.yml @@ -0,0 +1,7 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - 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." \ No newline at end of file From 38b3031ab6f853b1f9931e2701f444e5790c602a Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Sat, 28 Sep 2024 04:34:18 +0200 Subject: [PATCH 146/153] Add NTNRC client to pAIs digital messenger (#86820) ## About The Pull Request Just adds the NTNRC client to the pAI digital messenger software's starting programs. To avoid also giving this to the AI, creates a new silicon PDA subtype for pAIs and applies it similarly to borgs. ## Why It's Good For The Game It's already barely ever used, and I just think it'd be fun to let pAIs talk to the never-checked department consoles or open chatrooms with each other or their hosts. Currently you can do this by being in your host's PDA, but this means they couldn't use their PDA at the same time as you just... chatting. Nor could you share a chatroom with them, due to sharing the same account. Also the pAI cabal using the bootleg IRC client to plot their next move is just incredibly funny to me. ## Changelog :cl: balance: The pAI digital messenger software now includes the NTNRC client. /:cl: --- code/modules/modular_computers/computers/item/pda.dm | 6 ++++++ code/modules/pai/pai.dm | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index bdc60c52be073..d21a3e2047559 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -322,6 +322,12 @@ ///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, diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 4b1bc23e832f8..ee732432851a7 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -240,6 +240,11 @@ 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)) +/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() return TRUE From 3347370ed50250a4fa802b8134b3eb387c915401 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:35:12 +0000 Subject: [PATCH 147/153] Automatic changelog for PR #86820 [ci skip] --- html/changelogs/AutoChangeLog-pr-86820.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86820.yml diff --git a/html/changelogs/AutoChangeLog-pr-86820.yml b/html/changelogs/AutoChangeLog-pr-86820.yml new file mode 100644 index 0000000000000..d57e4f388337f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86820.yml @@ -0,0 +1,4 @@ +author: "00-Steven" +delete-after: True +changes: + - balance: "The pAI digital messenger software now includes the NTNRC client." \ No newline at end of file From 199a5eff21bb9fd52b37141801e8acbde84b4c1b Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Sat, 28 Sep 2024 04:45:12 +0200 Subject: [PATCH 148/153] Fix imaginary friends not being able to hear their host, some minor adjustments (#86863) --- code/datums/brain_damage/imaginary_friend.dm | 17 ++++++++++++++++- code/modules/mob/living/living_say.dm | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 2ddba14059456..da0388f6c54d2 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,6 +93,9 @@ 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) @@ -214,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) @@ -234,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]) @@ -530,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/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 6f27b4db7192a..d728db0b7c16d 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -383,6 +383,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. From a4e5d2632f35bf1880a5f0c657f763caa2aa2da1 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 02:45:32 +0000 Subject: [PATCH 149/153] Automatic changelog for PR #86863 [ci skip] --- html/changelogs/AutoChangeLog-pr-86863.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86863.yml diff --git a/html/changelogs/AutoChangeLog-pr-86863.yml b/html/changelogs/AutoChangeLog-pr-86863.yml new file mode 100644 index 0000000000000..0ef2a98f9138b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86863.yml @@ -0,0 +1,4 @@ +author: "00-Steven" +delete-after: True +changes: + - bugfix: "Imaginary friends can now hear their host wherever they are." \ No newline at end of file From 396ed10a85b360f9c58dab8fae4f0db1fe9925f0 Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Sat, 28 Sep 2024 09:23:16 +0200 Subject: [PATCH 150/153] Imaginary friend smite shows target name to ghosts polled, now also technically build mode compatible (#86865) --- .../admin/smites/imaginary_friend_special.dm | 104 ++++++++++++------ 1 file changed, 70 insertions(+), 34 deletions(-) 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 From 17e376c44ccad5bd489f16f588913c9d81764a86 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 07:23:37 +0000 Subject: [PATCH 151/153] Automatic changelog for PR #86865 [ci skip] --- html/changelogs/AutoChangeLog-pr-86865.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-86865.yml diff --git a/html/changelogs/AutoChangeLog-pr-86865.yml b/html/changelogs/AutoChangeLog-pr-86865.yml new file mode 100644 index 0000000000000..5392926586867 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86865.yml @@ -0,0 +1,6 @@ +author: "00-Steven" +delete-after: True +changes: + - 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." \ No newline at end of file From c39cd4fbd46c26b2d98485cb63270ec2921aa8a4 Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Sat, 28 Sep 2024 19:18:51 +0200 Subject: [PATCH 152/153] test --- .github/workflows/generate_documentation.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 40710a9044b74..af0a6eacfb344 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -30,6 +30,7 @@ jobs: uses: JamesIves/github-pages-deploy-action@v4.6.4 with: branch: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} clean: true single-commit: true folder: dmdoc From ee4804a6749ce4976fd9756cf8a55cffcf1b7698 Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Sat, 28 Sep 2024 19:25:27 +0200 Subject: [PATCH 153/153] Revert "test" This reverts commit c39cd4fbd46c26b2d98485cb63270ec2921aa8a4. --- .github/workflows/generate_documentation.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index af0a6eacfb344..40710a9044b74 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -30,7 +30,6 @@ jobs: uses: JamesIves/github-pages-deploy-action@v4.6.4 with: branch: gh-pages - github_token: ${{ secrets.GITHUB_TOKEN }} clean: true single-commit: true folder: dmdoc