diff --git a/.editorconfig b/.editorconfig index 72e85029ef..c07643f112 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,21 +2,11 @@ root = true [*] -indent_style = tab -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +end_of_line = lf +indent_style = space insert_final_newline = true +trim_trailing_whitespace = true -[*.yml] -indent_style = space -indent_size = 2 - -[*.py] -indent_style = space - -[*.md] -trim_trailing_whitespace = false - -[Dockerfile] -indent_style = space +[*.{dm,json,md}] +indent_style = tab diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 97d93875ce..5f22c8db5b 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -7,19 +7,20 @@ The following is a set of regulations for contributing to Chomp Station, which i #### Table Of Contents [What should I know before I get started?](#what-should-i-know-before-i-get-started) - * [Code of Conduct](#code-of-conduct) - * [Upstream Parity with Virgo](#upstream-parity-with-virgo) + +- [Code of Conduct](#code-of-conduct) +- [Upstream Parity with Virgo](#upstream-parity-with-virgo) [How Can I Contribute?](#how-can-i-contribute) - * [Your First Code Contribution](#your-first-code-contribution) - * [Chomp Station Map Edits](#chomp-station-map-edits) - * [Chomp Station Coding Standards](#chomp-station-coding-standards) - * [Pull Requests](#pull-requests) - * [Git Commit Messages](#git-commit-messages) + +- [Your First Code Contribution](#your-first-code-contribution) +- [Chomp Station Map Edits](#chomp-station-map-edits) +- [Chomp Station Coding Standards](#chomp-station-coding-standards) +- [Pull Requests](#pull-requests) +- [Git Commit Messages](#git-commit-messages) [Licensing](#Licensing) - ## What should I know before I get started? ### Code of Conduct @@ -30,20 +31,21 @@ By participating, you are expected to uphold this code. ### Upstream Parity with [Virgo](https://github.com/VOREStation/VOREStation) To work together with Virgo and make the lives of the devstaff easier for ourselves, our upstream and our downstreams, we enforce parity with upstream files. -* What are upstream files? - * Upstream files are files that exist on Virgo's repo identically to here. -* What is upstream parity? - * Upstream parity means to keep files that exist identically both here and upstream, identical. -* Why are we doing this? - * Cooperation between this codebase and upstream has taken significant upturns recently. There is much effort from coders both here and upstream to fix a great many issues with this shared codebase. To avoid the difficulty of trying to both fix a codebase and retain parity/maintainability, it is much preferred to fix core code on Virgo, whom is the primary upstream of this codebase (They disconnected from polaris) in a complete and clean manner and allow those fixes to trickle down to all downstreams. This helps us, it helps virgo, and it helps all the other downstreams too. -* I just want to code for Chomp though. - * This is fine, we do not want to prevent this. There will be greater emphasis on putting all chomp-only code in the /modular_chomp subdirectory from now on. For assistance on coding in a modular fashion, please ask for help in the CHOMP discord #ss13-development channel. -* I want to edit a core mechanic / implement a feature that only works when editing upstream code. - * Please try your hardest to make this modular. If this isn't possible, your PR might be requested to be moved up to virgo, or denied. -* I just want to add sprites / sounds / add a new type of mob / add clothing / add a map - * This is fine! This is easily made modular and done by adding code and resources to the modular_chomp directory. -* What if Virgo deny a core change that was desired on Chomp? - * Hopefully this shouldn't happen. If you implement your feature with an "on/off" switch, then you can push it to virgo turned off, and we can turn it on here. If differences of development become too divisive in the future, then we will go back to the way things were with more freedom on this codebase. + +- What are upstream files? + - Upstream files are files that exist on Virgo's repo identically to here. +- What is upstream parity? + - Upstream parity means to keep files that exist identically both here and upstream, identical. +- Why are we doing this? + - Cooperation between this codebase and upstream has taken significant upturns recently. There is much effort from coders both here and upstream to fix a great many issues with this shared codebase. To avoid the difficulty of trying to both fix a codebase and retain parity/maintainability, it is much preferred to fix core code on Virgo, whom is the primary upstream of this codebase (They disconnected from polaris) in a complete and clean manner and allow those fixes to trickle down to all downstreams. This helps us, it helps virgo, and it helps all the other downstreams too. +- I just want to code for Chomp though. + - This is fine, we do not want to prevent this. There will be greater emphasis on putting all chomp-only code in the /modular_chomp subdirectory from now on. For assistance on coding in a modular fashion, please ask for help in the CHOMP discord #ss13-development channel. +- I want to edit a core mechanic / implement a feature that only works when editing upstream code. + - Please try your hardest to make this modular. If this isn't possible, your PR might be requested to be moved up to virgo, or denied. +- I just want to add sprites / sounds / add a new type of mob / add clothing / add a map + - This is fine! This is easily made modular and done by adding code and resources to the modular_chomp directory. +- What if Virgo deny a core change that was desired on Chomp? + - Hopefully this shouldn't happen. If you implement your feature with an "on/off" switch, then you can push it to virgo turned off, and we can turn it on here. If differences of development become too divisive in the future, then we will go back to the way things were with more freedom on this codebase. ## How Can I Contribute? @@ -53,67 +55,71 @@ Unsure where to begin contributing to Chomp Station? You can start by looking th ### Chomp Station Map Edits -* Our base map files are in [modular_chomp/maps/]. -* Our stationary overmap location files are in [modular_chomp/maps/southern_cross/overmap/]. -* Our random overmap POI files are in [modular_chomp/maps/overmap/]. -* Our surface POI map files (Wilderness, plains, ...) are in [modular_chomp/maps/submaps/surface_submaps/]. -* Map changes must be in tgm format. See the [Mapmerge2 Readme](../tools/mapmerge2/readme.md) for details, or use [StrongDMM](../tools/StrongDMM/README.md) which can automatically save maps as tgm. -* PoIs or map templates placed during generation (Mining, plains, wilderness, space...) are generally fair game for editing or creating anew. -* Maps that are placed permanently (Station, planetary locations) must be subject to discussion. To prevent wasted time, discuss these with the community and staff - * There is a limited budget of RAM available for permanent maps. This must be carefully rationed. -* Entire new station designs MUST be discussed with the community and the staff. Post a floor plan or basic design before committing effort in discord to prevent wasted time. -* For new atmospherics settings, subtypes of turfs for all turfs can be created with the [turfpacks](../modular_chomp/maps/~turfpacks/turfpacks.dm) system quickly and easily. +- Our base map files are in [modular_chomp/maps/]. +- Our stationary overmap location files are in [modular_chomp/maps/southern_cross/overmap/]. +- Our random overmap POI files are in [modular_chomp/maps/overmap/]. +- Our surface POI map files (Wilderness, plains, ...) are in [modular_chomp/maps/submaps/surface_submaps/]. +- Map changes must be in tgm format. See the [Mapmerge2 Readme](../tools/mapmerge2/readme.md) for details, or use [StrongDMM](../tools/StrongDMM/README.md) which can automatically save maps as tgm. +- PoIs or map templates placed during generation (Mining, plains, wilderness, space...) are generally fair game for editing or creating anew. +- Maps that are placed permanently (Station, planetary locations) must be subject to discussion. To prevent wasted time, discuss these with the community and staff + - There is a limited budget of RAM available for permanent maps. This must be carefully rationed. +- Entire new station designs MUST be discussed with the community and the staff. Post a floor plan or basic design before committing effort in discord to prevent wasted time. +- For new atmospherics settings, subtypes of turfs for all turfs can be created with the [turfpacks](../modular_chomp/maps/~turfpacks/turfpacks.dm) system quickly and easily. ## Chomp Station Coding Standards ### General -* **DO NOT** create joke or meme PRs. The Github is intended to be a sterile location for reviewing technical content. -* We **DO NOT** allow any kind of CKEY/personally locked content on this codebase. Anything created must be available to all or none. - * Our upstream does allow this, and ckey-locked content from them does exist in our code. We try to comment it out where possible. Please report anything missing. - * If you have ckey locked content from our upstream and would like to make it available to all here, please contact us. -* we **DO NOT** allow any 'naming' in our coded content. this includes shoutouts, naming a player as an owner or otherwise. All descriptions, names, lore-texts must be free of an individual's name. NPC naming is permitted. + +- **DO NOT** create joke or meme PRs. The Github is intended to be a sterile location for reviewing technical content. +- We **DO NOT** allow any kind of CKEY/personally locked content on this codebase. Anything created must be available to all or none. + - Our upstream does allow this, and ckey-locked content from them does exist in our code. We try to comment it out where possible. Please report anything missing. + - If you have ckey locked content from our upstream and would like to make it available to all here, please contact us. +- we **DO NOT** allow any 'naming' in our coded content. this includes shoutouts, naming a player as an owner or otherwise. All descriptions, names, lore-texts must be free of an individual's name. NPC naming is permitted. ### Codewriting -* Where possible, add changes to the modular_chomp/ subdirectory. -* Avoid edits to upstream code. If upstream code MUST be edited to make a feature work, please make that change on [Virgo](https://github.com/VOREStation/VOREStation). - * Single line edits may still be okay (Tweaks, toggling functions, ect) and should have a //ChompEDIT comment on each line. -* **DO NOT** edit upstream .dmi (icon) files. Add icon changes in a new file in the /modular_chomp folder and override the object's "icon" and "icon_state" variables. -* **DO NOT** edit anything in the upstream /maps folder -* Avoid the use of the 'usr' variable where possible. Use src or have the proc chain give the user's reference. -* Use defines where they exist, e.g. string names of jobs, factions, ect. -* Where possible and applicable, send bugfixes to Virgo (Our upstream) to fix at the source. this is not enforced, however. + +- Where possible, add changes to the modular_chomp/ subdirectory. +- Avoid edits to upstream code. If upstream code MUST be edited to make a feature work, please make that change on [Virgo](https://github.com/VOREStation/VOREStation). + - Single line edits may still be okay (Tweaks, toggling functions, ect) and should have a //ChompEDIT comment on each line. +- **DO NOT** edit upstream .dmi (icon) files. Add icon changes in a new file in the /modular_chomp folder and override the object's "icon" and "icon_state" variables. +- **DO NOT** edit anything in the upstream /maps folder +- Avoid the use of the 'usr' variable where possible. Use src or have the proc chain give the user's reference. +- Use defines where they exist, e.g. string names of jobs, factions, ect. +- Where possible and applicable, send bugfixes to Virgo (Our upstream) to fix at the source. this is not enforced, however. ### Scene devices -* A scene device or tool is considered any object or coded mechanic designed primarily to service roleplay scenes in-game. Usually, but not limited to roleplay of a private nature. -* Scene devices **MUST** avoid giving a purely mechanical/gameplay advantage of any kind -* Scene devices **MUST** respect OOC consent where applicable. -* Scene devices **MUST** react to the 'OOC Escape' command where possible. + +- A scene device or tool is considered any object or coded mechanic designed primarily to service roleplay scenes in-game. Usually, but not limited to roleplay of a private nature. +- Scene devices **MUST** avoid giving a purely mechanical/gameplay advantage of any kind +- Scene devices **MUST** respect OOC consent where applicable. +- Scene devices **MUST** react to the 'OOC Escape' command where possible. ### TGUI -* **DO NOT** edit upstream TGUI files. Small changes should be passed to upstream. Large edits require the file to be copied/rewritten in the chompstation subdirectory. -* **ALL** TGUI files require typescript with properly defined types. +- **DO NOT** edit upstream TGUI files. Small changes should be passed to upstream. Large edits require the file to be copied/rewritten in the chompstation subdirectory. +- **ALL** TGUI files require typescript with properly defined types. ### Pull Requests -* Your submission must pass CI checking. The checks are important, prevent many common mistakes, and even experienced coders get caught by it sometimes. If you think there is a bug in CI, open an issue. (One known CI issue is comments in the middle of multi-line lists, just don't do it) -* You can create a WIP PR, and if so, please mark it with [WIP] in the title **and make it a draft pr** so it can be labeled appropriately. These can't sit forever, though. -* If your pull request has many no-conflict merge commits ('merge from master' into your PR branch), it cannot be merged. Squash and make a new PR/forcepush to your PR branch. -* PRs here are squash-merged into a single commit onto Master +- Your submission must pass CI checking. The checks are important, prevent many common mistakes, and even experienced coders get caught by it sometimes. If you think there is a bug in CI, open an issue. (One known CI issue is comments in the middle of multi-line lists, just don't do it) +- You can create a WIP PR, and if so, please mark it with [WIP] in the title **and make it a draft pr** so it can be labeled appropriately. These can't sit forever, though. +- If your pull request has many no-conflict merge commits ('merge from master' into your PR branch), it cannot be merged. Squash and make a new PR/forcepush to your PR branch. +- PRs here are squash-merged into a single commit onto Master ### Git Commit Messages -* Limit the first line to 72 characters or less, otherwise it truncates the title with '...', wrapping the rest into the description. -* Reference issues and pull requests liberally. -* Use the GitHub magic words "Fixed/Fixes/Fix, Resolved/Resolves/Resolve, Closed/Closes/Close", as in, "Closes #1928", as this will automatically close that issue when the PR is merged if it is a fix for that issue. +- Limit the first line to 72 characters or less, otherwise it truncates the title with '...', wrapping the rest into the description. +- Reference issues and pull requests liberally. +- Use the GitHub magic words "Fixed/Fixes/Fix, Resolved/Resolves/Resolve, Closed/Closes/Close", as in, "Closes #1928", as this will automatically close that issue when the PR is merged if it is a fix for that issue. ### Early porting -* You may earlyport. -* Follow standard chompcomments incase upstream ends up closing their PR for any reason. -* If it does get merged upstream and the mirror appears on our repo, you are responsible for unfucking the comments situation, because it'll have to say VORE edits instead of CHOMP edits. +- You may earlyport. +- Follow standard chompcomments incase upstream ends up closing their PR for any reason. +- If it does get merged upstream and the mirror appears on our repo, you are responsible for unfucking the comments situation, because it'll have to say VORE edits instead of CHOMP edits. ## Licensing + CHOMPStation is licensed under the GNU Affero General Public License version 3, which can be found in full in LICENSE-AGPL3.txt. Commits with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt. diff --git a/.github/ISSUE_TEMPLATE/0-feature.yml b/.github/ISSUE_TEMPLATE/0-feature.yml index d8adbbed9c..b11425ae42 100644 --- a/.github/ISSUE_TEMPLATE/0-feature.yml +++ b/.github/ISSUE_TEMPLATE/0-feature.yml @@ -1,29 +1,29 @@ name: "✨ New feature" description: Suggest an idea for this codebase title: "✨ " -type: 'feature' -labels: ['Type: Feature/Suggestion'] +type: "feature" +labels: ["Type: Feature/Suggestion"] body: -- type: textarea - attributes: - label: Brief description of the feature - description: "Please provide a clear and concise description of what the feature should be." - validations: - required: true + - type: textarea + attributes: + label: Brief description of the feature + description: "Please provide a clear and concise description of what the feature should be." + validations: + required: true -- type: textarea - attributes: - label: What you want to happen - description: "Please use as much detail as possible when describing the feature behavior, including any context that might be relevant." - validations: - required: false + - type: textarea + attributes: + label: What you want to happen + description: "Please use as much detail as possible when describing the feature behavior, including any context that might be relevant." + validations: + required: false -- type: textarea - attributes: - label: Anything else you may wish to add - description: | - Location if it's a mapping issue, screenshots, sprites, etc. + - type: textarea + attributes: + label: Anything else you may wish to add + description: | + Location if it's a mapping issue, screenshots, sprites, etc. - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/1-bug_report.yml b/.github/ISSUE_TEMPLATE/1-bug_report.yml index 82ae8a0b68..0553f22660 100644 --- a/.github/ISSUE_TEMPLATE/1-bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1-bug_report.yml @@ -1,56 +1,56 @@ name: General Bug description: Create a report to help us improve -title: '[GENERAL] <title>' -type: 'bug' -labels: 'Type: Bug' +title: "[GENERAL] <title>" +type: "bug" +labels: "Type: Bug" body: -- type: textarea - attributes: - label: Brief description of the bug - description: "Please provide a clear and concise description of what the bug is." - validations: - required: true + - type: textarea + attributes: + label: Brief description of the bug + description: "Please provide a clear and concise description of what the bug is." + validations: + required: true -- type: textarea - attributes: - label: What you expected to happen - description: "What normally happens when this occurs? Keep in mind that behavior may be different on other servers." - validations: - required: false + - type: textarea + attributes: + label: What you expected to happen + description: "What normally happens when this occurs? Keep in mind that behavior may be different on other servers." + validations: + required: false -- type: textarea - attributes: - label: What actually happened - description: "Please use as much detail as possible when describing the bug behavior, including any context (things you did before) that might be relevant." - validations: - required: false + - type: textarea + attributes: + label: What actually happened + description: "Please use as much detail as possible when describing the bug behavior, including any context (things you did before) that might be relevant." + validations: + required: false -- type: textarea - attributes: - label: Reproduction steps - description: "How do you trigger this bug? Please walk us through it step by step." - value: | - 1. - 2. - 3. - ... - render: bash - validations: - required: true + - type: textarea + attributes: + label: Reproduction steps + description: "How do you trigger this bug? Please walk us through it step by step." + value: | + 1. + 2. + 3. + ... + render: bash + validations: + required: true -- type: textarea - attributes: - label: Server Revision Info - description: "Copy-paste the entirety of the 'Show Server Revision' verb found under the OOC tab." - validations: - required: false + - type: textarea + attributes: + label: Server Revision Info + description: "Copy-paste the entirety of the 'Show Server Revision' verb found under the OOC tab." + validations: + required: false -- type: textarea - attributes: - label: Anything else you may wish to add - description: | - Location if it's a mapping issue, screenshots, sprites, etc. + - type: textarea + attributes: + label: Anything else you may wish to add + description: | + Location if it's a mapping issue, screenshots, sprites, etc. - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/2-ui_report.yml b/.github/ISSUE_TEMPLATE/2-ui_report.yml index 1067316086..137c2114c8 100644 --- a/.github/ISSUE_TEMPLATE/2-ui_report.yml +++ b/.github/ISSUE_TEMPLATE/2-ui_report.yml @@ -1,42 +1,42 @@ name: UI Bug description: File a bug report, specific to any UI related things. -title: '[UI] <title>' -labels: 'Type: Bug' -type: 'bug' +title: "[UI] <title>" +labels: "Type: Bug" +type: "bug" body: -- type: textarea - attributes: - label: Brief description of the bug - description: "Please provide a clear and concise description of what the bug is." - validations: - required: true + - type: textarea + attributes: + label: Brief description of the bug + description: "Please provide a clear and concise description of what the bug is." + validations: + required: true -- type: textarea - attributes: - label: Reproduction steps - description: "How do you trigger this bug? Please walk us through it step by step." - value: | - 1. - 2. - 3. - ... - render: bash - validations: - required: true + - type: textarea + attributes: + label: Reproduction steps + description: "How do you trigger this bug? Please walk us through it step by step." + value: | + 1. + 2. + 3. + ... + render: bash + validations: + required: true -- type: textarea - attributes: - label: Server Revision Info - description: "Copy-paste the entirety of the 'Show Server Revision' verb found under the OOC tab." - validations: - required: false + - type: textarea + attributes: + label: Server Revision Info + description: "Copy-paste the entirety of the 'Show Server Revision' verb found under the OOC tab." + validations: + required: false -- type: textarea - attributes: - label: Anything else you may wish to add - description: | - Location if it's a mapping issue, screenshots, sprites, etc. + - type: textarea + attributes: + label: Anything else you may wish to add + description: | + Location if it's a mapping issue, screenshots, sprites, etc. - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/3-map_report.yml b/.github/ISSUE_TEMPLATE/3-map_report.yml index 7354a820d5..e5a9b52359 100644 --- a/.github/ISSUE_TEMPLATE/3-map_report.yml +++ b/.github/ISSUE_TEMPLATE/3-map_report.yml @@ -1,56 +1,56 @@ name: Map Bug description: Create a report, specific to any map related things. -title: '[MAPPING] <title>' -type: 'bug' -labels: ['Type: Bug', 'Type: Map'] +title: "[MAPPING] <title>" +type: "bug" +labels: ["Type: Bug", "Type: Map"] body: -- type: textarea - attributes: - label: Brief description of the bug - description: "Please provide a clear and concise description of what the bug is." - validations: - required: true + - type: textarea + attributes: + label: Brief description of the bug + description: "Please provide a clear and concise description of what the bug is." + validations: + required: true -- type: textarea - attributes: - label: What you expected to happen - description: "What normally happens when this occurs? Keep in mind that behavior may be different on other servers." - validations: - required: false + - type: textarea + attributes: + label: What you expected to happen + description: "What normally happens when this occurs? Keep in mind that behavior may be different on other servers." + validations: + required: false -- type: textarea - attributes: - label: What actually happened - description: "Please use as much detail as possible when describing the bug behavior, including any context (things you did before) that might be relevant." - validations: - required: false + - type: textarea + attributes: + label: What actually happened + description: "Please use as much detail as possible when describing the bug behavior, including any context (things you did before) that might be relevant." + validations: + required: false -- type: textarea - attributes: - label: Reproduction steps - description: "How do you trigger this bug? Please walk us through it step by step." - value: | - 1. - 2. - 3. - ... - render: bash - validations: - required: true + - type: textarea + attributes: + label: Reproduction steps + description: "How do you trigger this bug? Please walk us through it step by step." + value: | + 1. + 2. + 3. + ... + render: bash + validations: + required: true -- type: textarea - attributes: - label: Server Revision Info - description: "Copy-paste the entirety of the 'Show Server Revision' verb found under the OOC tab." - validations: - required: false + - type: textarea + attributes: + label: Server Revision Info + description: "Copy-paste the entirety of the 'Show Server Revision' verb found under the OOC tab." + validations: + required: false -- type: textarea - attributes: - label: Anything else you may wish to add - description: | - Location if it's a mapping issue, screenshots, sprites, etc. + - type: textarea + attributes: + label: Anything else you may wish to add + description: | + Location if it's a mapping issue, screenshots, sprites, etc. - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml index a1dc949a3d..02022c6a34 100644 --- a/.github/boring-cyborg.yml +++ b/.github/boring-cyborg.yml @@ -6,40 +6,40 @@ labelPRBasedOnFilePath: # Add 'Type: Map' to any changes to .dmm files "Type: Map": - - '**/*.dmm' + - "**/*.dmm" # Add 'Type: Vore' to any changes to any vore files "Type: Vore": - - '**/*_vr*' + - "**/*_vr*" # Add 'Type: Map' to any changes to image files "Type: Icon": - - '**/*.dmi' - - '**/*.png' - - '**/*.jpg' + - "**/*.dmi" + - "**/*.png" + - "**/*.jpg" # Add 'Type: Sound' to any change to sound files "Type: Sound": - - '**/*.ogg' - - '**/*.mp3' - - '**/*.wav' + - "**/*.ogg" + - "**/*.mp3" + - "**/*.wav" # Add 'Type: Fluff' to any change to *custom_items_yw or loadout_fluffitems_yw* "Type: Fluff": - - '**/*custom_items*_yw*' - - '**/*loadout_fluff*_yw*' - - 'config/alienwhitelist.txt' - - 'config/jobwhitelist.txt' - - 'config/custom_sprites.txt' + - "**/*custom_items*_yw*" + - "**/*loadout_fluff*_yw*" + - "config/alienwhitelist.txt" + - "config/jobwhitelist.txt" + - "config/custom_sprites.txt" # Contains changes to system folders "Type: .git or .github": - - '.github/**' - - '.git/**' - + - ".github/**" + - ".git/**" + # Contains changes to the TGUI bundle "Type: TGUI Bundle": - - 'tgui/public/**' + - "tgui/public/**" ##### Greetings ######################################################################################################## # Comment to be posted to welcome users when they open their first PR @@ -99,7 +99,7 @@ firstIssueWelcomeComment: > ###### PR/Branch Up-To-Date Checker #################################################################################### # Check if the branch is up to date with master when certain files are modified #checkUpToDate: -# # The default branch is "master", change the branch if you want to check against a different target branch +# # The default branch is "master", change the branch if you want to check against a different target branch # targetBranch: master # files: # # File paths that you want to check for diff --git a/.github/code_of_conduct.md b/.github/code_of_conduct.md index 06161256c8..0d17f66bae 100644 --- a/.github/code_of_conduct.md +++ b/.github/code_of_conduct.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/.github/stale.yml b/.github/stale.yml index 7622dac94d..9cd3ffa608 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -7,11 +7,11 @@ daysUntilClose: 30 # - pinned # - security # Label to use when marking an issue as stale -staleLabel: 'Status: No Response' +staleLabel: "Status: No Response" # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false \ No newline at end of file +closeComment: false diff --git a/.github/workflows/autochangelog.yml b/.github/workflows/autochangelog.yml index bf033bd2af..c6a46c886f 100644 --- a/.github/workflows/autochangelog.yml +++ b/.github/workflows/autochangelog.yml @@ -13,24 +13,24 @@ jobs: runs-on: ubuntu-latest if: github.event.pull_request.merged == true steps: - - name: Checkout - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v4 - - name: Generate App Token - id: app-token-generation - uses: actions/create-github-app-token@v2 - if: env.APP_PRIVATE_KEY != '' && env.APP_ID != '' - with: - app-id: ${{ secrets.APP_ID }} - private-key: ${{ secrets.APP_PRIVATE_KEY }} - env: - APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} - APP_ID: ${{ secrets.APP_ID }} + - name: Generate App Token + id: app-token-generation + uses: actions/create-github-app-token@v2 + if: env.APP_PRIVATE_KEY != '' && env.APP_ID != '' + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + env: + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + APP_ID: ${{ secrets.APP_ID }} - - name: Run auto changelog - uses: actions/github-script@v7 - with: - script: | - const { processAutoChangelog } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoChangelog.js') - await processAutoChangelog({ github, context }) - github-token: ${{ steps.app-token-generation.outputs.token || secrets.GITHUB_TOKEN }} + - name: Run auto changelog + uses: actions/github-script@v7 + with: + script: | + const { processAutoChangelog } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoChangelog.js') + await processAutoChangelog({ github, context }) + github-token: ${{ steps.app-token-generation.outputs.token || secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1158ede2e3..12549b1dd6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 + fetch-depth: 0 # Caches - name: Setup Bun uses: ./.github/actions/setup_bun @@ -113,7 +113,7 @@ jobs: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) strategy: matrix: - map: ['USE_MAP_SOUTHERN_CROSS', 'USE_MAP_SOLUNA_NEXUS'] + map: ["USE_MAP_SOUTHERN_CROSS", "USE_MAP_SOLUNA_NEXUS"] # name: Integration Tests (${{ matrix.map }}) name: Integration Tests # needs: ['run_linters', 'dreamchecker'] @@ -155,7 +155,7 @@ jobs: tests_successful: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Integration Tests - needs: ['run_linters', 'dreamchecker', 'unit_tests'] + needs: ["run_linters", "dreamchecker", "unit_tests"] runs-on: ubuntu-24.04 steps: - name: Report Success diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml index 911db67a27..8baffeaafd 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -2,7 +2,7 @@ name: Compile changelogs on: schedule: - - cron: "0 0 * * *" + - cron: "0 0 * * *" workflow_dispatch: jobs: @@ -23,7 +23,7 @@ jobs: #if: steps.value_holder.outputs.ACTIONS_ENABLED uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: "3.x" - name: "Install deps" #if: steps.value_holder.outputs.ACTIONS_ENABLED diff --git a/.github/workflows/remove_guide_comments.yml b/.github/workflows/remove_guide_comments.yml index 621d860c5c..2c65239133 100644 --- a/.github/workflows/remove_guide_comments.yml +++ b/.github/workflows/remove_guide_comments.yml @@ -8,11 +8,11 @@ jobs: remove_guide_comments: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Remove guide comments - uses: actions/github-script@v7 - with: - script: | - const { removeGuideComments } = await import('${{ github.workspace }}/tools/pull_request_hooks/removeGuideComments.js') - await removeGuideComments({ github, context }) + - name: Checkout + uses: actions/checkout@v4 + - name: Remove guide comments + uses: actions/github-script@v7 + with: + script: | + const { removeGuideComments } = await import('${{ github.workspace }}/tools/pull_request_hooks/removeGuideComments.js') + await removeGuideComments({ github, context }) diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index 05594d7f59..dcdd3f1405 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -3,13 +3,13 @@ # The file names and locations are VERY important here # DO NOT EDIT THIS UNLESS YOU KNOW WHAT YOU ARE DOING # -aa -name: 'Render Nanomaps' +name: "Render Nanomaps" on: push: branches: - master paths: - - 'modular_chomp/maps/**' + - "modular_chomp/maps/**" workflow_dispatch: permissions: {} @@ -19,51 +19,51 @@ jobs: contents: write # to push to branch pull-requests: write # to create pull requests (repo-sync/pull-request) - name: 'Generate NanoMaps' + name: "Generate NanoMaps" runs-on: ubuntu-24.04 steps: - - name: Clone - uses: actions/checkout@v4 + - name: Clone + uses: actions/checkout@v4 - - name: Branch - run: | - git fetch origin - git branch -f nanomaps_generation - git checkout nanomaps_generation - git reset --hard origin/master - - name: Restore SpacemanDMM cache - uses: actions/cache@v4 - with: - path: ~/SpacemanDMM - key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }} - restore-keys: | - ${{ runner.os }}-spacemandmm- - - name: Install Tools - run: | - sudo apt update - bash tools/ci/install_spaceman_dmm.sh dmm-tools - sudo apt install -y imagemagick - - name: Ensure +x on github-actions directory - run: chmod -R +x ./tools/github-actions + - name: Branch + run: | + git fetch origin + git branch -f nanomaps_generation + git checkout nanomaps_generation + git reset --hard origin/master + - name: Restore SpacemanDMM cache + uses: actions/cache@v4 + with: + path: ~/SpacemanDMM + key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }} + restore-keys: | + ${{ runner.os }}-spacemandmm- + - name: Install Tools + run: | + sudo apt update + bash tools/ci/install_spaceman_dmm.sh dmm-tools + sudo apt install -y imagemagick + - name: Ensure +x on github-actions directory + run: chmod -R +x ./tools/github-actions - - name: Generate Maps - run: tools/github-actions/nanomap-renderer-invoker.sh + - name: Generate Maps + run: tools/github-actions/nanomap-renderer-invoker.sh - - name: Commit Maps - run: | - git config --local user.email "action@github.com" - git config --local user.name "NanoMap Generation" - git add . - git commit -m "NanoMap Auto-Update (`date`)" -a || true - git push -f -u origin nanomaps_generation + - name: Commit Maps + run: | + git config --local user.email "action@github.com" + git config --local user.name "NanoMap Generation" + git add . + git commit -m "NanoMap Auto-Update (`date`)" -a || true + git push -f -u origin nanomaps_generation - - name: Create Pull Request - uses: repo-sync/pull-request@v2 - with: - source_branch: "nanomaps_generation" - destination_branch: "master" - pr_title: "Automatic NanoMap Update" - pr_body: "This pull request updates the nanomap images to the latest version of the map." - pr_label: "Infrastructure" - pr_allow_empty: false - github_token: ${{ secrets.GITHUB_TOKEN }} + - name: Create Pull Request + uses: repo-sync/pull-request@v2 + with: + source_branch: "nanomaps_generation" + destination_branch: "master" + pr_title: "Automatic NanoMap Update" + pr_body: "This pull request updates the nanomap images to the latest version of the map." + pr_label: "Infrastructure" + pr_allow_empty: false + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 42f5fab0b8..79d2ac3b51 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -3,18 +3,18 @@ # You can adjust the behavior by modifying this file. # For more information, see: # https://github.com/actions/stale -name: 'Close stale issues and PRs' +name: "Close stale issues and PRs" on: schedule: - - cron: '30 1 * * *' + - cron: "30 1 * * *" workflow_dispatch: inputs: logLevel: - description: 'Log level' + description: "Log level" required: true - default: 'warning' + default: "warning" tags: - description: 'Test scenario tags' + description: "Test scenario tags" jobs: stale: @@ -22,8 +22,8 @@ jobs: steps: - uses: actions/stale@v9 with: - stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 150 days.' - close-issue-message: 'This issue was closed because it has been stalled for 150 days with no activity.' + stale-issue-message: "This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 150 days." + close-issue-message: "This issue was closed because it has been stalled for 150 days with no activity." days-before-issue-stale: 30 days-before-pr-stale: -1 days-before-issue-close: 150 diff --git a/.prettierignore b/.prettierignore index 43eea47231..5e6414db00 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,6 +7,8 @@ juke **/build **/dist **/node_modules +html/templates +html/create_object.html # File names / types *.min.* diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000000..ce6d654346 --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1 @@ +# This file is okay being empty as it will tell prettier to run in the repo diff --git a/.travis.yml b/.travis.yml index 7eff55898b..08634cb161 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ jobs: - stage: "File Tests" #This is the odd man out, with specific installs and stuff. name: "Validate Files" addons: - apt: + apt: packages: - python3 - python3-pip @@ -54,5 +54,4 @@ jobs: env: TEST_DEFINE="MAP_TEST" TEST_FILE="code/_map_tests.dm" RUN="0" name: "Compile POIs (no run)" - env: TEST_DEFINE="AWAY_MISSION_TEST" TEST_FILE="code/_away_mission_tests.dm" RUN="0" - name: "Compile away missions (no run)" - + name: "Compile away missions (no run)" diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 42b452ee25..9cbb34b363 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,14 +1,14 @@ { - "recommendations": [ + "recommendations": [ "gbasood.byond-dm-language-support", "platymuus.dm-langclient", "stylemistake.auto-comment-blocks", "eamodio.gitlens", "oderwat.indent-rainbow", "rexebin.darkpurple-black", - "dbaeumer.vscode-eslint", "donkie.vscode-tgstation-test-adapter", "icrawl.discord-vscode", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "biomejs.biome" ] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 80b1d58f75..18ec2abd95 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,9 +1,9 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ { "type": "byond", "request": "launch", @@ -40,10 +40,7 @@ "request": "launch", "program": "${command:dreammaker.returnDreamDaemonPath}", "cwd": "${workspaceRoot}", - "args": [ - "${command:dreammaker.getFilenameDmb}", - "-trusted" - ], + "args": ["${command:dreammaker.getFilenameDmb}", "-trusted"], "preLaunchTask": "Build All" }, { @@ -52,11 +49,8 @@ "request": "launch", "program": "${command:dreammaker.returnDreamDaemonPath}", "cwd": "${workspaceRoot}", - "args": [ - "${command:dreammaker.getFilenameDmb}", - "-trusted" - ], + "args": ["${command:dreammaker.getFilenameDmb}", "-trusted"], "preLaunchTask": "Build All (low memory mode)" } - ] + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index ab1c3b2217..d600dfc6af 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,73 +1,35 @@ { - "eslint.workingDirectories": ["./tgui"], - "workbench.editorAssociations": { - "*.dmi": "dmiEditor.dmiEditor" - }, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "editor.codeActionsOnSave": { + "source.fixAll.biome": "explicit" }, - "files.eol": "\n", - "files.encoding": "utf8", - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "files.trimTrailingWhitespace": true, - "files.associations": { - "*.{dme,dmf,dmm,dm}": "dm", - }, + "files.eol": "\n", + "files.encoding": "utf8", + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "files.trimTrailingWhitespace": true, + "editor.insertSpaces": false, "git.branchProtection": ["master"], - "gitlens.advanced.blame.customArguments": [ - "-w", "--ignore-revs-file", ".git-blame-ignore-revs" - ], - "search.exclude": { - "**/node_modules": true, - }, - "tgstationTestExplorer.project.resultsType": "json", - "[dm]": { - "files.eol": "\n", - "editor.detectIndentation": false, - "editor.insertSpaces": false - }, - "[markdown]": { - "files.trimTrailingWhitespace": false - }, - "[python]": { - "editor.detectIndentation": false, - "editor.insertSpaces": true, - "editor.tabSize": 4 - }, - "[yaml]": { - "editor.detectIndentation": false, - "editor.insertSpaces": true, - "editor.tabSize": 2 - }, - "[javascript]": { - "editor.rulers": [120], + "gitlens.advanced.blame.customArguments": ["-w"], + "tgstationTestExplorer.project.resultsType": "json", + "[javascript][typescript][javascriptreact][typescriptreact][css][json][jsonc]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + "editor.rulers": [80] + }, + "[yaml][markdown][html][scss]": { "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "[javascriptreact]": { - "editor.rulers": [120], - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "[typescript]": { - "editor.rulers": [120], - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "[typescriptreact]": { - "editor.rulers": [120], - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "[scss]": { - "editor.rulers": [120], - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true - }, - "debug.onTaskErrors": "abort", - "dreammaker.objectTreePane": true, - "dreammaker.autoUpdate": true, - "dreammaker.tickOnCreate": true, - "tgstationTestExplorer.project.DMEName": "tgmc.dme" + "editor.formatOnSave": true, + "editor.rulers": [80] + }, + "workbench.editorAssociations": { + "*.dmi": "dmiEditor.dmiEditor" + }, + "search.exclude": { + "**/node_modules": true + }, + "debug.onTaskErrors": "abort", + "dreammaker.objectTreePane": true, + "dreammaker.autoUpdate": true, + "dreammaker.tickOnCreate": true, + "tgstationTestExplorer.project.DMEName": "vorestation.dme" } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5efaf21e8f..45a6cbb9dc 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -12,11 +12,7 @@ "DM_EXE": "${config:dreammaker.byondPath}" } }, - "problemMatcher": [ - "$dreammaker", - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$dreammaker", "$tsc", "$eslint-stylish"], "group": { "kind": "build", "isDefault": true @@ -37,11 +33,7 @@ "DM_EXE": "${config:dreammaker.byondPath}" } }, - "problemMatcher": [ - "$dreammaker", - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$dreammaker", "$tsc", "$eslint-stylish"], "group": { "kind": "build" }, @@ -61,11 +53,7 @@ "DM_EXE": "${config:dreammaker.byondPath}" } }, - "problemMatcher": [ - "$dreammaker", - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$dreammaker", "$tsc", "$eslint-stylish"], "group": { "kind": "build" }, @@ -85,11 +73,7 @@ "DM_EXE": "${config:dreammaker.byondPath}" } }, - "problemMatcher": [ - "$dreammaker", - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$dreammaker", "$tsc", "$eslint-stylish"], "group": { "kind": "build" }, @@ -109,11 +93,7 @@ "DM_EXE": "${config:dreammaker.byondPath}" } }, - "problemMatcher": [ - "$dreammaker", - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$dreammaker", "$tsc", "$eslint-stylish"], "group": { "kind": "build" }, @@ -133,11 +113,7 @@ "DM_EXE": "${config:dreammaker.byondPath}" } }, - "problemMatcher": [ - "$dreammaker", - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$dreammaker", "$tsc", "$eslint-stylish"], "group": { "kind": "build" }, @@ -147,9 +123,7 @@ { "type": "dreammaker", "dme": "vorestation.dme", - "problemMatcher": [ - "$dreammaker" - ], + "problemMatcher": ["$dreammaker"], "group": "build", "label": "dm: build - vorestation.dme" }, @@ -164,10 +138,7 @@ "windows": { "command": ".\\bin\\tgui-build.cmd" }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$tsc", "$eslint-stylish"], "group": "build", "label": "tgui: build" }, @@ -177,10 +148,7 @@ "windows": { "command": ".\\bin\\tgui-dev.cmd" }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$tsc", "$eslint-stylish"], "group": "build", "label": "tgui: dev server" }, @@ -190,10 +158,7 @@ "windows": { "command": ".\\bin\\tgui-bench.cmd" }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$tsc", "$eslint-stylish"], "group": "build", "label": "tgui: bench" }, @@ -203,10 +168,7 @@ "windows": { "command": ".\\bin\\tgui-sonar.cmd" }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$tsc", "$eslint-stylish"], "group": "build", "label": "tgui: sonar" }, @@ -216,10 +178,7 @@ "windows": { "command": ".\\bin\\tgfont.cmd" }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], + "problemMatcher": ["$tsc", "$eslint-stylish"], "group": "build", "label": "tgui: rebuild tgfont" } diff --git a/1Item_list.dmm b/1Item_list.dmm index 855960a72a..3b5d4397ff 100644 --- a/1Item_list.dmm +++ b/1Item_list.dmm @@ -31441,7 +31441,7 @@ }, /area/survivalpod) "jkQ" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch{ +/mob/living/simple_mob/animal/passive/raccoon{ ai_holder_type = null }, /turf/simulated/floor/atoll, diff --git a/ATTRIBUTIONS.md b/ATTRIBUTIONS.md index f1e5784a1e..ceaf2d5674 100644 --- a/ATTRIBUTIONS.md +++ b/ATTRIBUTIONS.md @@ -109,4 +109,4 @@ **Title:** Gooborgs<br> **Creator / Copyright:** Toriate<br> **License Holders:** Matica<br> -**License:** [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/)<br> \ No newline at end of file +**License:** [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/)<br> diff --git a/README.md b/README.md index e078c8117f..7f81c09f26 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,14 @@ CHOMPStation was a fork of the Yawn-wider code branch which is a fork of the VOR --- ### LICENSE + The code for CHOMPStation is licensed under the [GNU Affero General Public License](http://www.gnu.org/licenses/agpl.html) version 3, which can be found in full in LICENSE-AGPL3.txt. Code with a git authorship date prior to `1420675200 +0000` (2015/01/08 00:00) are licensed under the GNU General Public License version 3, which can be found in full in LICENSE-GPL3.txt. All code whose authorship dates are not prior to `1420675200 +0000` is assumed to be licensed under AGPL v3, if you wish to license under GPL v3 please make this clear in the commit message and any added files. -If you wish to develop and host this codebase in a closed source manner you may use all code prior to `1420675200 +0000`, which is licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made. +If you wish to develop and host this codebase in a closed source manner you may use all code prior to `1420675200 +0000`, which is licensed under GPL v3. The major change here is that if you host a server using any code licensed under AGPLv3 you are required to provide full source code for your servers users as well including addons and modifications you have made. See [here](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. @@ -36,11 +37,12 @@ All assets including icons and sound are under a [CC BY-SA 3.0](http://creativec Attributions and other licenses with links to original works are noted in [ATTRIBUTIONS.md](./ATTRIBUTIONS.md). ### GETTING THE CODE + The simplest way to obtain the code is using the github .zip feature. If you do this, you won't be able to make a Pull Request later, though. You'll need to use the git method. Click [here](https://github.com/CHOMPStation2/CHOMPStation2/archive/master.zip) to get the latest code as a .zip file, then unzip it to wherever you want. -The more complicated and easier to update method is using git. You'll need to download git or some client from [here](http://git-scm.com/). When that's installed, right click in any folder and click on "Git Bash". When that opens, type in: +The more complicated and easier to update method is using git. You'll need to download git or some client from [here](http://git-scm.com/). When that's installed, right click in any folder and click on "Git Bash". When that opens, type in: git clone https://github.com/CHOMPStation2/CHOMPStation2.git @@ -50,7 +52,7 @@ This will take a while to download, but it provides an easier method for updatin ### INSTALLATION -First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from [here](http://www.byond.com/). +First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from [here](http://www.byond.com/). **The quick way**. Find `bin/server.cmd` in this folder and double click it to automatically build and host the server on port 1337. @@ -58,17 +60,17 @@ First-time installation should be fairly straightforward. First, you'll need BY **Building vorestation in DreamMaker directly is deprecated and might produce errors**, such as `'tgui.bundle.js': cannot find file`. -If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong, or a code issue on the main repo. Ask on IRC. +If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong, or a code issue on the main repo. Ask on IRC. -Once that's done, open up the config folder. You'll want to edit config.txt to set the probabilities for different gamemodes in Secret and to set your server location so that all your players don't get disconnected at the end of each round. It's recommended you don't turn on the gamemodes with probability 0, as they have various issues and aren't currently being tested, so they may have unknown and bizarre bugs. +Once that's done, open up the config folder. You'll want to edit config.txt to set the probabilities for different gamemodes in Secret and to set your server location so that all your players don't get disconnected at the end of each round. It's recommended you don't turn on the gamemodes with probability 0, as they have various issues and aren't currently being tested, so they may have unknown and bizarre bugs. -You'll also want to edit admins.txt to remove the default admins and add your own. "Host" is the highest level of access, and the other recommended admin levels for now are "Game Admin" and "Moderator". The format is: +You'll also want to edit admins.txt to remove the default admins and add your own. "Host" is the highest level of access, and the other recommended admin levels for now are "Game Admin" and "Moderator". The format is: byondkey - Rank -where the BYOND key must be in lowercase and the admin rank must be properly capitalised. There are a bunch more admin ranks, but these two should be enough for most servers, assuming you have trustworthy admins. +where the BYOND key must be in lowercase and the admin rank must be properly capitalised. There are a bunch more admin ranks, but these two should be enough for most servers, assuming you have trustworthy admins. -Finally, to start the server, run Dream Daemon and enter the path to your compiled vorestation.dmb file. Make sure to set the port to the one you specified in the config.txt, and set the Security box to 'Trusted'. Then press GO and the server should start up and be ready to join. +Finally, to start the server, run Dream Daemon and enter the path to your compiled vorestation.dmb file. Make sure to set the port to the one you specified in the config.txt, and set the Security box to 'Trusted'. Then press GO and the server should start up and be ready to join. --- @@ -97,4 +99,4 @@ For a basic setup, simply copy every file from config/example to config. ### SQL Setup -The SQL backend for the library and stats tracking requires a MySQL server. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql. More detailed setup instructions arecoming soon, for now ask in our Discord. +The SQL backend for the library and stats tracking requires a MySQL server. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql. More detailed setup instructions arecoming soon, for now ask in our Discord. diff --git a/SECURITY.md b/SECURITY.md index a47f021db1..35be45b502 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -10,9 +10,9 @@ Please be as descriptive as possible! ## Older Libraries/Dependencies -Some of our libraries may not be used in a way that makes -them vulnerable, because we tend to only use a couple of -functions out of them. If that's the case and we think that -your vulnerability won't apply to our use-case, then -it may be closed, even if we're using an older version +Some of our libraries may not be used in a way that makes +them vulnerable, because we tend to only use a couple of +functions out of them. If that's the case and we think that +your vulnerability won't apply to our use-case, then +it may be closed, even if we're using an older version of the library. diff --git a/TGS3.json b/TGS3.json deleted file mode 100644 index 261668cf8e..0000000000 --- a/TGS3.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "static_directories": [ - "config", - "data" - ], - "dlls": [ - "libmysql.dll" - ] -} \ No newline at end of file diff --git a/bin/tgui-bench.cmd b/bin/tgui-bench.cmd deleted file mode 100644 index 333115f795..0000000000 --- a/bin/tgui-bench.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-bench %* -pause diff --git a/bin/tgui-fix.cmd b/bin/tgui-fix.cmd index f2844408ef..9c5123bd76 100644 --- a/bin/tgui-fix.cmd +++ b/bin/tgui-fix.cmd @@ -1,2 +1,2 @@ @echo off -call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-fix %* +call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-lint %* diff --git a/biome.json b/biome.json new file mode 100644 index 0000000000..81114a5cc9 --- /dev/null +++ b/biome.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.1.1/schema.json", + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + }, + "enabled": true + }, + "css": { + "formatter": { + "quoteStyle": "double" + } + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "!**/node_modules", + "!tgui/public", + "tgui/public/tgui.html", + "!tgui/packages/tgui-setup/helpers.js" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab", + "lineEnding": "lf" + }, + "javascript": { + "formatter": { + "indentStyle": "space", + "quoteStyle": "single" + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "a11y": "off", + "correctness": { + "noUnusedImports": "warn", + "noUnusedVariables": "off", + "useExhaustiveDependencies": "off", + "noUnusedFunctionParameters": "off", + "useHookAtTopLevel": "off" + }, + "security": { + "noDangerouslySetInnerHtml": "off" + }, + "style": { + "noNonNullAssertion": "off" + }, + "suspicious": { + "noArrayIndexKey": "off", + "noExplicitAny": "off", + "noImplicitAnyLet": "off", + "noAssignInExpressions": "warn" + } + } + }, + "vcs": { + "clientKind": "git", + "enabled": false, + "useIgnoreFile": false + } +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000000..d234ff9912 --- /dev/null +++ b/bun.lock @@ -0,0 +1,32 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "devDependencies": { + "@biomejs/biome": "^2.1.2", + "prettier": "^3.6.2", + }, + }, + }, + "packages": { + "@biomejs/biome": ["@biomejs/biome@2.1.2", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.1.2", "@biomejs/cli-darwin-x64": "2.1.2", "@biomejs/cli-linux-arm64": "2.1.2", "@biomejs/cli-linux-arm64-musl": "2.1.2", "@biomejs/cli-linux-x64": "2.1.2", "@biomejs/cli-linux-x64-musl": "2.1.2", "@biomejs/cli-win32-arm64": "2.1.2", "@biomejs/cli-win32-x64": "2.1.2" }, "bin": { "biome": "bin/biome" } }, "sha512-yq8ZZuKuBVDgAS76LWCfFKHSYIAgqkxVB3mGVVpOe2vSkUTs7xG46zXZeNPRNVjiJuw0SZ3+J2rXiYx0RUpfGg=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.1.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-leFAks64PEIjc7MY/cLjE8u5OcfBKkcDB0szxsWUB4aDfemBep1WVKt0qrEyqZBOW8LPHzrFMyDl3FhuuA0E7g=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.1.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-Nmmv7wRX5Nj7lGmz0FjnWdflJg4zii8Ivruas6PBKzw5SJX/q+Zh2RfnO+bBnuKLXpj8kiI2x2X12otpH6a32A=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.1.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-NWNy2Diocav61HZiv2enTQykbPP/KrA/baS7JsLSojC7Xxh2nl9IczuvE5UID7+ksRy2e7yH7klm/WkA72G1dw=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.1.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-qgHvafhjH7Oca114FdOScmIKf1DlXT1LqbOrrbR30kQDLFPEOpBG0uzx6MhmsrmhGiCFCr2obDamu+czk+X0HQ=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.1.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Km/UYeVowygTjpX6sGBzlizjakLoMQkxWbruVZSNE6osuSI63i4uCeIL+6q2AJlD3dxoiBJX70dn1enjQnQqwA=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.1.2", "", { "os": "linux", "cpu": "x64" }, "sha512-xlB3mU14ZUa3wzLtXfmk2IMOGL+S0aHFhSix/nssWS/2XlD27q+S6f0dlQ8WOCbYoXcuz8BCM7rCn2lxdTrlQA=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.1.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-G8KWZli5ASOXA3yUQgx+M4pZRv3ND16h77UsdunUL17uYpcL/UC7RkWTdkfvMQvogVsAuz5JUcBDjgZHXxlKoA=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.1.2", "", { "os": "win32", "cpu": "x64" }, "sha512-9zajnk59PMpjBkty3bK2IrjUsUHvqe9HWwyAWQBjGLE7MIBjbX2vwv1XPEhmO2RRuGoTkVx3WCanHrjAytICLA=="], + + "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], + } +} diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 64505c13fd..9fb451dea2 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -427,7 +427,7 @@ GLOBAL_LIST_INIT(vr_mob_tf_options, list( "Frog" = /mob/living/simple_mob/vore/aggressive/frog, "Seagull" =/mob/living/simple_mob/vore/seagull, "Fox" = /mob/living/simple_mob/animal/passive/fox, - "Racoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, //TODO: Port from Downstream //CHOMPStation Enable + "Racoon" = /mob/living/simple_mob/animal/passive/raccoon, "Shantak" = /mob/living/simple_mob/animal/sif/shantak, "Goose" = /mob/living/simple_mob/animal/space/goose, "Space shark" = /mob/living/simple_mob/animal/space/shark, @@ -490,7 +490,7 @@ GLOBAL_LIST_INIT(vr_mob_spawner_options, list( "Seagull" =/mob/living/simple_mob/vore/seagull, "Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, "Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, //TODO: Port from Downstream //CHOMPStation Enable - "Racoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, //TODO: Port from Downstream //CHOMPStation Enable + "Racoon" = /mob/living/simple_mob/animal/passive/raccoon, "Goose" = /mob/living/simple_mob/animal/space/goose, "Frog" = /mob/living/simple_mob/vore/aggressive/frog, "Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, diff --git a/code/_helpers/global_lists_ch.dm b/code/_helpers/global_lists_ch.dm index 6e5efad44b..3e4173bef1 100644 --- a/code/_helpers/global_lists_ch.dm +++ b/code/_helpers/global_lists_ch.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_INIT(maint_mob_pred_options, list( "Fennix" = /mob/living/simple_mob/vore/fennix, "Fox" = /mob/living/simple_mob/animal/passive/fox, "Syndi-Fox" = /mob/living/simple_mob/animal/passive/fox/syndicate, - "Raccoon" = /mob/living/simple_mob/animal/passive/raccoon_ch, + "Raccoon" = /mob/living/simple_mob/animal/passive/raccoon, "Cat" = /mob/living/simple_mob/animal/passive/cat, "Space Bumblebee" = /mob/living/simple_mob/vore/bee, "Space Bear" = /mob/living/simple_mob/animal/space/bear, diff --git a/code/controllers/subsystems/mobs.dm b/code/controllers/subsystems/mobs.dm index 0570b9001a..c89d502df9 100644 --- a/code/controllers/subsystems/mobs.dm +++ b/code/controllers/subsystems/mobs.dm @@ -126,14 +126,14 @@ SUBSYSTEM_DEF(mobs) var/podname = placeofdeath ? placeofdeath.name : "Unknown area" var/list/data = list( - "name" = L.real_name, - "byondkey" = L.key, - "job" = L.mind.assigned_role, - "special" = L.mind.special_role, + "name" = "[L.real_name]", + "byondkey" = "[L.key]", + "job" = "[L.mind.assigned_role]", + "special" = "[L.mind.special_role]", "pod" = podname, "tod" = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss"), - "laname" = L.lastattacker ? L.lastattacker:real_name : null, - "lakey" = L.lastattacker ? L.lastattacker:key : null, + "laname" = L.lastattacker ? L.lastattacker:real_name : "", + "lakey" = L.lastattacker ? L.lastattacker:key : "", "gender" = L.gender, "bruteloss" = L.getBruteLoss(), "fireloss" = L.getFireLoss(), diff --git a/code/controllers/subsystems/statpanel.dm b/code/controllers/subsystems/statpanel.dm index 4f1cfeef13..804ed064f9 100644 --- a/code/controllers/subsystems/statpanel.dm +++ b/code/controllers/subsystems/statpanel.dm @@ -148,7 +148,7 @@ SUBSYSTEM_DEF(statpanels) var/atom/atom_icon = description_holders["icon"] var/shown_icon = target.examine_icon - if(!shown_icon) + if(!shown_icon && atom_icon) if(ismob(atom_icon) || length(atom_icon.overlays) > 0) var/force_south = FALSE if(isliving(atom_icon)) diff --git a/code/datums/components/COMPONENT_TEMPLATE.md b/code/datums/components/COMPONENT_TEMPLATE.md index 7b08205888..d458f597cc 100644 --- a/code/datums/components/COMPONENT_TEMPLATE.md +++ b/code/datums/components/COMPONENT_TEMPLATE.md @@ -1,7 +1,6 @@ - # Template file for your new component -See _component.dm for detailed explanations +See \_component.dm for detailed explanations ```dm /datum/component/mycomponent diff --git a/code/datums/components/README.md b/code/datums/components/README.md index db8bf10a32..bb711e795d 100644 --- a/code/datums/components/README.md +++ b/code/datums/components/README.md @@ -4,6 +4,6 @@ Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening. -### [HackMD page for an introduction to the system as a whole.](https://hackmd.io/@tgstation/SignalsComponentsElements) +### [HackMD page for an introduction to the system as a whole.](https://hackmd.io/@tgstation/SignalsComponentsElements) -### See/Define signals and their arguments in [__DEFINES\components.dm](../../__DEFINES/components.dm) +### See/Define signals and their arguments in [\_\_DEFINES\components.dm](../../__DEFINES/components.dm) diff --git a/code/datums/elements/ELEMENT_TEMPLATE.md b/code/datums/elements/ELEMENT_TEMPLATE.md index 4bc1f72f2d..33586bd94e 100644 --- a/code/datums/elements/ELEMENT_TEMPLATE.md +++ b/code/datums/elements/ELEMENT_TEMPLATE.md @@ -1,7 +1,6 @@ - # Template file for your new element -See _element.dm for detailed explanations +See \_element.dm for detailed explanations ```dm /datum/element/myelement diff --git a/code/datums/elements/lootable/_lootable.dm b/code/datums/elements/lootable/_lootable.dm index 8e66e76e6c..5717091aa9 100644 --- a/code/datums/elements/lootable/_lootable.dm +++ b/code/datums/elements/lootable/_lootable.dm @@ -34,7 +34,7 @@ GLOBAL_LIST_INIT(unique_gamma_loot,list(\ UnregisterSignal(target, COMSIG_LOOT_REWARD) /// Calculates and drops loot, the source's turf is where it will be dropped, L is the searching mob, and searched_by is a passed list for storing who has searched a loot pile. -/datum/element/lootable/proc/loot(atom/source,mob/living/L,var/list/searched_by, wake_chance) +/datum/element/lootable/proc/loot(atom/source,mob/living/L,var/list/searched_by, wake_chance = 0) SIGNAL_HANDLER // The loot's all gone. if(loot_depletion && loot_left <= 0) @@ -91,6 +91,10 @@ GLOBAL_LIST_INIT(unique_gamma_loot,list(\ if("alium") final_message = span_alium(final_message) to_chat(L, span_info(final_message)) + var/disturbed_sleep = rand(1,100) //spawning of mobs, for now only the trash panda. + if(disturbed_sleep <= wake_chance) + new /mob/living/simple_mob/animal/passive/raccoon(get_turf(source)) + source.visible_message("A raccoon jumps out of the trash!.") // Check if we should delete on depletion if(!loot_depletion) diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index e35c0cb185..68991c8f65 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -22,7 +22,7 @@ "Fennix" = /mob/living/simple_mob/vore/fennix, "Fox" = /mob/living/simple_mob/animal/passive/fox,//CHOMPedit: more mobs "Syndi-Fox" = /mob/living/simple_mob/animal/passive/fox/syndicate,//CHOMPedit: more mobs - "Raccoon" = /mob/living/simple_mob/animal/passive/raccoon_ch,//CHOMPedit: more mobs + "Raccoon" = /mob/living/simple_mob/animal/passive/raccoon,//CHOMPedit: more mobs "Cat" = /mob/living/simple_mob/animal/passive/cat,//CHOMPedit: more mobs "Space Bumblebee" = /mob/living/simple_mob/vore/bee, "Space Bear" = /mob/living/simple_mob/animal/space/bear, diff --git a/code/js/view_variables.js b/code/js/view_variables.js index 86ca8cadc6..1b29528706 100644 --- a/code/js/view_variables.js +++ b/code/js/view_variables.js @@ -1,33 +1,33 @@ function updateSearch() { - var filter_text = document.getElementById('filter'); - var filter = filter_text.value.toLowerCase(); + var filter_text = document.getElementById("filter"); + var filter = filter_text.value.toLowerCase(); - var vars_ol = document.getElementById('vars'); - var lis = vars_ol.children; - // the above line can be changed to vars_ol.getElementsByTagName("li") to filter child lists too - // potential todo: implement a per-admin toggle for this + var vars_ol = document.getElementById("vars"); + var lis = vars_ol.children; + // the above line can be changed to vars_ol.getElementsByTagName("li") to filter child lists too + // potential todo: implement a per-admin toggle for this - for(var i = 0; i < lis.length; i++) { - var li = lis[i]; - if(filter == "" || li.innerText.toLowerCase().indexOf(filter) != -1) { - li.style.display = "block"; - } else { - li.style.display = "none"; - } - } + for (var i = 0; i < lis.length; i++) { + var li = lis[i]; + if (filter == "" || li.innerText.toLowerCase().indexOf(filter) != -1) { + li.style.display = "block"; + } else { + li.style.display = "none"; + } + } } function selectTextField() { - var filter_text = document.getElementById('filter'); - filter_text.focus(); - filter_text.select(); + var filter_text = document.getElementById("filter"); + filter_text.focus(); + filter_text.select(); } function loadPage(list) { - if(list.options[list.selectedIndex].value == "") { - return; - } + if (list.options[list.selectedIndex].value == "") { + return; + } - location.href=list.options[list.selectedIndex].value; - list.selectedIndex = 0; + location.href = list.options[list.selectedIndex].value; + list.selectedIndex = 0; } diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index 9383ceb8d4..5bcbcfdec9 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -60,7 +60,7 @@ ADMIN_VERB(gib_them, (R_ADMIN|R_FUN), "Gib", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CA victim.gib() feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -ADMIN_VERB(gib_self, R_HOLDER, "Gibself", "Give yourself the same treatment you give others.", ADMIN_CATEGORY_FUN) +ADMIN_VERB(gib_self, R_HOLDER, "Gibself", "Give yourself the same treatment you give others.", "Fun.Do Not") var/confirm = tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) if(!confirm) return diff --git a/code/modules/asset_cache/readme.md b/code/modules/asset_cache/readme.md index 82e6bea896..b2f8914708 100644 --- a/code/modules/asset_cache/readme.md +++ b/code/modules/asset_cache/readme.md @@ -24,14 +24,12 @@ Call .get_url_mappings() to get an associated list with the urls your assets can See the documentation for `/datum/asset_transport` for the backend api the asset datums utilize. -The global variable `SSassets.transport` contains the currently configured transport. - - +The global variable `SSassets.transport` contains the currently configured transport. ### Notes: Because byond browse() calls use non-blocking queues, if your code uses output() (which bypasses all of these queues) to invoke javascript functions you will need to first have the javascript announce to the server it has loaded before trying to invoke js functions. -To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by `get_url_mappings()` or by asset_transport's `get_asset_url()`. (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details. +To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by `get_url_mappings()` or by asset_transport's `get_asset_url()`. (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details. CSS files that use url() can be made to use the CDN without needing to rewrite all url() calls in code by using the namespaced helper datum. See the documentation for `/datum/asset/simple/namespaced` for details. diff --git a/code/modules/asset_cache/validate_assets.html b/code/modules/asset_cache/validate_assets.html index 9728bb5c28..d55c8892cb 100644 --- a/code/modules/asset_cache/validate_assets.html +++ b/code/modules/asset_cache/validate_assets.html @@ -1,29 +1,31 @@ -<!DOCTYPE html> +<!doctype html> <html lang="en"> - <head> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - </head> - <body> - <script> - //this is used over window.location because window.location has a character limit in IE. - function sendbyond(text) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', '?'+text, true); - xhr.send(null); - } - var xhr = new XMLHttpRequest(); - xhr.open('GET', 'asset_data.json', true); - xhr.responseType = 'text'; - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - var status = xhr.status; - if (status >= 200 && status < 400) { - sendbyond('asset_cache_preload_data=' + encodeURIComponent(xhr.responseText)); - } - } - }; - xhr.send(null); - </script> - -</body> + <head> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + </head> + <body> + <script> + //this is used over window.location because window.location has a character limit in IE. + function sendbyond(text) { + var xhr = new XMLHttpRequest(); + xhr.open("GET", "?" + text, true); + xhr.send(null); + } + var xhr = new XMLHttpRequest(); + xhr.open("GET", "asset_data.json", true); + xhr.responseType = "text"; + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + var status = xhr.status; + if (status >= 200 && status < 400) { + sendbyond( + "asset_cache_preload_data=" + + encodeURIComponent(xhr.responseText), + ); + } + } + }; + xhr.send(null); + </script> + </body> </html> diff --git a/code/modules/awaymissions/overmap_renamer/readme.md b/code/modules/awaymissions/overmap_renamer/readme.md index e370bbfaeb..eca39b34a0 100644 --- a/code/modules/awaymissions/overmap_renamer/readme.md +++ b/code/modules/awaymissions/overmap_renamer/readme.md @@ -1,4 +1,4 @@ -/* +/\* How to use - for mappers: @@ -7,8 +7,8 @@ How to use - for mappers: There, create a new object as given in the following example: /obj/effect/landmark/overmap_renamer/debris_field/examplelandmark - name = "Debris field example landmark that hints at which POI it came from!!!" - descriptors = list("This element appears when you hover over the obj in the nav console", "if someone manages to examine it", "This is what the printed paper says") + name = "Debris field example landmark that hints at which POI it came from!!!" + descriptors = list("This element appears when you hover over the obj in the nav console", "if someone manages to examine it", "This is what the printed paper says") Make sure you use exactly 3 elements, no more and no less and make sure each element is enclosed in a "". If you want to only change one element, fill in the other ones with the appropriate /obj/effect/overmap/visitable/ subtype's name, desc or scanner_desc your Z level corresponds to. @@ -21,7 +21,7 @@ How to use - for mappers: When making such landmarks: reserve them for MAJOR POIs - stuff a ship's scanner might pick up as having a significance. A small shuttle in the debris field shouldn't get a landmark The big alien derelict? Now that's worthy of a special landmark! - The idea of this system is for us to be able to treat existing Z levels as technically different locations. + The idea of this system is for us to be able to treat existing Z levels as technically different locations. Did you want to make an abandoned mining facility overmap adventure? Now this system will let you turn the DF into one (if the dice permits) Adding a new POI to a brand new lateloaded Z level (you can check which Z levels are handled by the renamer in code\controllers\subsystems\overmap_renamer_vr.dm) @@ -30,7 +30,7 @@ How to use - for mappers: Your task will become a bit more difficult now. Create a new .dm file following convention already estabilished with debrisfield_renamer.dm Within this file, define your /obj/effect/landmark/overmap_renamer/newname here - add the following line: + add the following line: var/static/reference //leave thus null. The initialization will change this to contain reference to your overmap object instance. Saves us from excess looping name = "obvious reference to the lateloaded Z in question here" Within this file, create a new /obj/effect/landmark/overmap_renamer/newname/Initialize() @@ -44,9 +44,6 @@ How to use - for mappers: change the if(D == "Debris Field") section in your new if statement just like you did for the landmark! And you're done! Refer to the "How to add a landmark" section on the top from now on. - - - Important procs, vars etc. contained within the following files: @@ -69,10 +66,9 @@ Important procs, vars etc. contained within the following files: /obj/effect/landmark/overmap_renamer/debris_field/Initialize() - Copy the entire thing, and change the "Debris Field" to your obj's var/unique_identifier code\controllers\subsystems\overmap_renamer_vr.dm - /datum/controller/subsystem/overmap_renamer/proc/update_names() - Checks which Z levels are loaded, modifies them + /datum/controller/subsystem/overmap_renamer/proc/update_names() - Checks which Z levels are loaded, modifies them To add new Z levels to the renamer, simply copy the if statement and its contents for debris field, taking care to change the "Debris Field - Z1 Space" to the name var defined in your lateloaded Z level's map_template datum example: maps\offmap_vr\common_offmaps.dm and then the /datum/map_template/common_lateload/away_debrisfield - -*/ +\*/ diff --git a/code/modules/client/preference_setup/loadout/02_loadout.dm b/code/modules/client/preference_setup/loadout/02_loadout.dm index c290a2ad0f..b79d573819 100644 --- a/code/modules/client/preference_setup/loadout/02_loadout.dm +++ b/code/modules/client/preference_setup/loadout/02_loadout.dm @@ -53,7 +53,7 @@ var/list/gear_datums = list() for(var/j in entries) entries["[j]"] = path2text_list(entries["[j]"]) pref.gear_list["[i]"] = entries - pref.gear_slot = save_data["gear_slot"] + pref.gear_slot = save_data["gear_slot"] || 1 /datum/category_item/player_setup_item/loadout/loadout/save_character(list/save_data) var/list/all_gear = list() diff --git a/code/modules/client/preferences/README.md b/code/modules/client/preferences/README.md index fabfb779c9..f822667968 100644 --- a/code/modules/client/preferences/README.md +++ b/code/modules/client/preferences/README.md @@ -1,6 +1,6 @@ # Preferences (by Mothblocks) -This does not contain all the information on specific values--you can find those as doc-comments in relevant paths, such as `/datum/preference`. Rather, this gives you an overview for creating *most* preferences, and getting your foot in the door to create more advanced ones. +This does not contain all the information on specific values--you can find those as doc-comments in relevant paths, such as `/datum/preference`. Rather, this gives you an overview for creating _most_ preferences, and getting your foot in the door to create more advanced ones. ## Anatomy of a preference (A.K.A. how do I make one?) @@ -10,6 +10,7 @@ Most preferences consist of two parts: 2. A tgui representation in a TypeScript file. Every `/datum/preference` requires these three values be set: + 1. `category` - See [Categories](#Categories). 2. `savefile_key` - The value which will be saved in the savefile. This will also be the identifier for tgui. 3. `savefile_identifier` - Whether or not this is a character specific preference (`PREFERENCE_CHARACTER`) or one that affects the player (`PREFERENCE_PLAYER`). As an example: hair color is `PREFERENCE_CHARACTER` while your UI settings are `PREFERENCE_PLAYER`, since they do not change between characters. @@ -22,15 +23,15 @@ From here, you will want to write code resembling: import { Feature } from "../base"; export const savefile_key_here: Feature<T> = { - name: "Preference Name Here", - component: Component, + name: "Preference Name Here", + component: Component, - // Necessary for game preferences, unused for others - category: "CATEGORY", + // Necessary for game preferences, unused for others + category: "CATEGORY", - // Optional, shown as a tooltip - description: "This preference will blow your mind!", -} + // Optional, shown as a tooltip + description: "This preference will blow your mind!", +}; ``` `T` and `Component` depend on the type of preference you're making. Here are all common examples... @@ -59,9 +60,9 @@ Your `.tsx` file would look like: import { Feature, FeatureNumberInput } from "../base"; export const legs: Feature<number> = { - name: "Legs", - component: FeatureNumberInput, -} + name: "Legs", + component: FeatureNumberInput, +}; ``` ## Toggle preferences @@ -84,12 +85,13 @@ Your `.tsx` file would look like: import { CheckboxInput, FeatureToggle } from "../base"; export const enable_breathing: FeatureToggle = { - name: "Enable breathing", - component: CheckboxInput, -} + name: "Enable breathing", + component: CheckboxInput, +}; ``` ## Choiced preferences + A choiced preference is one where the only options are in a distinct few amount of choices. Examples include skin tone, shirt, and UI style. To create one, derive from `/datum/preference/choiced`. @@ -118,14 +120,15 @@ Your `.tsx` file would then look like: import { FeatureChoiced, FeatureDropdownInput } from "../base"; export const favorite_drink: FeatureChoiced = { - name: "Favorite drink", - component: FeatureDropdownInput, + name: "Favorite drink", + component: FeatureDropdownInput, }; ``` This will create a dropdown input for your preference. ### Choiced preferences - Icons + Choiced preferences can generate icons. This is how the clothing/species preferences work, for instance. However, if we just want a basic dropdown input with icons, it would look like this: ```dm @@ -155,12 +158,13 @@ Then, change your `.tsx` file to look like: import { FeatureChoiced, FeatureIconnedDropdownInput } from "../base"; export const favorite_drink: FeatureChoiced = { - name: "Favorite drink", - component: FeatureIconnedDropdownInput, + name: "Favorite drink", + component: FeatureIconnedDropdownInput, }; ``` ### Choiced preferences - Display names + Sometimes the values you want to save in code aren't the same as the ones you want to display. You can specify display names to change this. The only thing you will add is "compiled data". @@ -182,7 +186,8 @@ The only thing you will add is "compiled data". Your `.tsx` file does not change. The UI will figure it out for you! ## Color preferences -These refer to colors, such as your OOC color. When read, these values will be given as 6 hex digits, *without* the pound sign. + +These refer to colors, such as your OOC color. When read, these values will be given as 6 hex digits, _without_ the pound sign. ```dm /datum/preference/color/eyeliner_color @@ -197,12 +202,13 @@ Your `.tsx` file would look like: import { FeatureColorInput, Feature } from "../base"; export const eyeliner_color: Feature<string> = { - name: "Eyeliner color", - component: FeatureColorInput, + name: "Eyeliner color", + component: FeatureColorInput, }; ``` ## Name preferences + These refer to an alternative name. Examples include AI names and backup human names. These exist in `code/modules/client/preferences/names.dm`. @@ -255,6 +261,7 @@ If your preference is `PREFERENCE_CHARACTER`, it MUST override `apply_to_human`, You can also read preferences directly with `prefs.read_preference(/datum/preference/type/here)`, which will return the stored value. ## Categories + Every preference needs to be in a `category`. These can be found in `code/__DEFINES/preferences.dm`. ```dm @@ -306,7 +313,7 @@ Compiled data is sent to the `serverData` field in the `FeatureValueProps`. If you have good knowledge with tgui (especially TypeScript), you'll be able to create your own component to represent preferences. -The `component` field in a feature accepts __any__ component that accepts `FeatureValueProps<TReceiving, TSending = TReceiving, TServerData = undefined>`. +The `component` field in a feature accepts **any** component that accepts `FeatureValueProps<TReceiving, TSending = TReceiving, TServerData = undefined>`. This will give you the fields: @@ -335,18 +342,21 @@ For a basic example of how this can look, observe `CheckboxInput`: ```tsx export const CheckboxInput = ( - props: FeatureValueProps<BooleanLike, boolean> + props: FeatureValueProps<BooleanLike, boolean>, ) => { - return (<Button.Checkbox - checked={!!props.value} - onClick={() => { - props.handleSetValue(!props.value); - }} - />); + return ( + <Button.Checkbox + checked={!!props.value} + onClick={() => { + props.handleSetValue(!props.value); + }} + /> + ); }; ``` ## Advanced - Middleware + A `/datum/preference_middleware` is a way to inject your own data at specific points, as well as hijack actions. Middleware can hijack actions by specifying `action_delegations`: @@ -422,20 +432,20 @@ import { Antagonist, Category } from "../base"; import { multiline } from "common/string"; const Changeling: Antagonist = { - key: "changeling", // This must be the same as your filename - name: "Changeling", - description: [ - multiline` + key: "changeling", // This must be the same as your filename + name: "Changeling", + description: [ + multiline` A highly intelligent alien predator that is capable of altering their shape to flawlessly resemble a human. `, - multiline` + multiline` Transform yourself or others into different identities, and buy from an arsenal of biological weaponry with the DNA you collect. `, - ], - category: Category.Roundstart, // Category.Roundstart, Category.Midround, or Category.Latejoin + ], + category: Category.Roundstart, // Category.Roundstart, Category.Midround, or Category.Latejoin }; export default Changeling; @@ -453,4 +463,4 @@ If `antag_preference` is set, it will refer to that preference instead of `antag ## Updating special_roles -In `code/__DEFINES/role_preferences.dm` (the same place you'll need to make your ROLE_\* defined), simply add your antagonist to the `special_roles` assoc list. The key is your ROLE, the value is the number of days since your first game in order to play as that antagonist. +In `code/__DEFINES/role_preferences.dm` (the same place you'll need to make your ROLE\_\* defined), simply add your antagonist to the `special_roles` assoc list. The key is your ROLE, the value is the number of days since your first game in order to play as that antagonist. diff --git a/code/modules/keybindings/readme.md b/code/modules/keybindings/readme.md index 3f8b992b93..c9ad3772e5 100644 --- a/code/modules/keybindings/readme.md +++ b/code/modules/keybindings/readme.md @@ -33,9 +33,9 @@ No client-set keybindings at this time, but it shouldn't be too hard if someone Notes about certain keys: -* `Tab` has client-sided behavior but acts normally -* `T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away. -* `\` needs to be escaped in the dmf so any usage is `\\` +- `Tab` has client-sided behavior but acts normally +- `T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away. +- `\` needs to be escaped in the dmf so any usage is `\\` You cannot `TICK_CHECK` or check `world.tick_usage` inside of procs called by key down and up events. They happen outside of a byond tick and have no meaning there. Key looping diff --git a/code/modules/maint_recycler/code/vendor_datums/readme b/code/modules/maint_recycler/code/vendor_datums/readme index a8984f3bd4..cbc5778daa 100644 --- a/code/modules/maint_recycler/code/vendor_datums/readme +++ b/code/modules/maint_recycler/code/vendor_datums/readme @@ -1,26 +1,26 @@ Adding something to the recycling vendor? Cool! Try and abide by the following design rules, though! -* Is it a "gamer tool" that directly helps with station round progression? Probably shouldn't have it! This includes things like diamonds, rare materials, etc. - (the materials that ARE in the vendor are the more "useless" ones, with the intended purpose of allowing people to get some materials for hangouts a bit easier if there's no cargo) - Steel and Glass are the exception here, because they're common enough that I don't really think people will use metacurrency to get meager amounts. obviously if that's not the case I'll tweak it. +- Is it a "gamer tool" that directly helps with station round progression? Probably shouldn't have it! This includes things like diamonds, rare materials, etc. + (the materials that ARE in the vendor are the more "useless" ones, with the intended purpose of allowing people to get some materials for hangouts a bit easier if there's no cargo) + Steel and Glass are the exception here, because they're common enough that I don't really think people will use metacurrency to get meager amounts. obviously if that's not the case I'll tweak it. -* is it recycleable? - If so - make sure it costs more than you can recycle it for. +- is it recycleable? + If so - make sure it costs more than you can recycle it for. -* Is it something that has huge potential to be annoying when used? - Things like Photon nades, voice changers, etc. While they COULD technically be classified as scene tools, in reality, it's just going to result in people being a PITA with them. we don't want to encourage that behaviour! +- Is it something that has huge potential to be annoying when used? + Things like Photon nades, voice changers, etc. While they COULD technically be classified as scene tools, in reality, it's just going to result in people being a PITA with them. we don't want to encourage that behaviour! Basically! does the hypothetical stock addition fall into any of these? if not, put a bit of thought into it! -* Scene tools. Stuff that has minimal impact on the game There's two subcategories of it. - * Stuff that explicitly can't interact with people without consent - NIF laws, capture crystals, etc. - * Stuff that has potential to. The various spicy chemicals, size guns, the various TF guns, etc. - Both of these should be good to go, but, you know. assume the worst. don't make a gas grenade with shrink chems. +- Scene tools. Stuff that has minimal impact on the game There's two subcategories of it. + - Stuff that explicitly can't interact with people without consent - NIF laws, capture crystals, etc. + - Stuff that has potential to. The various spicy chemicals, size guns, the various TF guns, etc. + Both of these should be good to go, but, you know. assume the worst. don't make a gas grenade with shrink chems. -* Mischief. Nothing overtly illegal or griefy, but stuff that'd otherwise be slightly inconvienent to get. - Insuls (for the hideout), and uhhh.... +- Mischief. Nothing overtly illegal or griefy, but stuff that'd otherwise be slightly inconvienent to get. + Insuls (for the hideout), and uhhh.... -* Rare stuff - Stuff that makes people go "awooga" and want to spend points on it, but can be achieved elsewhere. Stuff like NIFs, Bluespace harpoons, etc. Stuff you can already get on station, just a way to do so more consistently. Note that AT BEST these should be tied with the station version of the item. we still want people to go to science for 90% of the NIFs they get. +- Rare stuff + Stuff that makes people go "awooga" and want to spend points on it, but can be achieved elsewhere. Stuff like NIFs, Bluespace harpoons, etc. Stuff you can already get on station, just a way to do so more consistently. Note that AT BEST these should be tied with the station version of the item. we still want people to go to science for 90% of the NIFs they get. -* Showoff items. Stuff that makes other people go awooga. this shouldn't be anything actually useful. Just silly stuff akin to the fish hats. Golden tools, etc. +- Showoff items. Stuff that makes other people go awooga. this shouldn't be anything actually useful. Just silly stuff akin to the fish hats. Golden tools, etc. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm index ef1f37d218..384bc59963 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm @@ -205,7 +205,7 @@ victim = L break - if(victim) + if(victim?.reagents) victim.reagents.add_reagent(REAGENT_ID_WARNINGTOXIN, poison_per_bite) victim.AdjustWeakened(2) victim.visible_message(span_danger("\The [src] has bitten \the [victim]!")) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/raccoon_ch.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/raccoon.dm similarity index 73% rename from code/modules/mob/living/simple_mob/subtypes/animal/passive/raccoon_ch.dm rename to code/modules/mob/living/simple_mob/subtypes/animal/passive/raccoon.dm index 1b62968e9d..311c563842 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/raccoon_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/raccoon.dm @@ -1,17 +1,17 @@ //raccoon -/mob/living/simple_mob/animal/passive/raccoon_ch +/mob/living/simple_mob/animal/passive/raccoon name = "raccoon" desc = "A raccoon, also known as a trash panda." tt_desc = "E purgamentum raccoonus" - icon = 'modular_chomp/icons/mob/animal_ch.dmi' + icon = 'icons/mob/animal_vr.dmi' icon_state = "raccoon" item_state = "raccoon" icon_living = "raccoon" icon_dead = "raccoon_dead" icon_rest = "raccoon_rest" - ai_holder_type = /datum/ai_holder/simple_mob/passive/raccoon_ch - say_list_type = /datum/say_list/raccoon_ch + ai_holder_type = /datum/ai_holder/simple_mob/passive/raccoon + say_list_type = /datum/say_list/raccoon see_in_dark = 6 movement_cooldown = 3 @@ -37,22 +37,22 @@ pain_emote_1p = list("chitter") pain_emote_3p = list("chitters") -/mob/living/simple_mob/animal/passive/raccoon_ch/Initialize(mapload) +/mob/living/simple_mob/animal/passive/raccoon/Initialize(mapload) . = ..() ghostjoin = 1 ghostjoin_icon() GLOB.active_ghost_pods += src -/mob/living/simple_mob/animal/passive/raccoon_ch/Destroy() +/mob/living/simple_mob/animal/passive/raccoon/Destroy() GLOB.active_ghost_pods -= src . = ..() -/datum/say_list/raccoon_ch +/datum/say_list/raccoon speak = list("HSSSSS") emote_see = list("shakes their head", "shivers","grooms self", "nibbles on some trash") emote_hear = list("purrs") -/datum/ai_holder/simple_mob/passive/raccoon_ch +/datum/ai_holder/simple_mob/passive/raccoon flee_when_dying = TRUE dying_threshold = 0.9 speak_chance = 1 diff --git a/code/modules/reagents/readme.md b/code/modules/reagents/readme.md index ef274b6f9e..9f9fd7e798 100644 --- a/code/modules/reagents/readme.md +++ b/code/modules/reagents/readme.md @@ -1,306 +1,305 @@ -/* +/\* NOTE: IF YOU UPDATE THE REAGENT-SYSTEM, ALSO UPDATE THIS README. -Structure: /////////////////// ////////////////////////// - // Mob or object // -------> // Reagents var (datum) // Is a reference to the datum that holds the reagents. - /////////////////// ////////////////////////// - | | - The object that holds everything. V - reagent_list var (list) A List of datums, each datum is a reagent. +Structure: /////////////////// ////////////////////////// +// Mob or object // -------> // Reagents var (datum) // Is a reference to the datum that holds the reagents. +/////////////////// ////////////////////////// +| | +The object that holds everything. V +reagent_list var (list) A List of datums, each datum is a reagent. - | | | - V V V - - reagents (datums) Reagents. I.e. Water , antitoxins or mercury. + | | | + V V V + reagents (datums) Reagents. I.e. Water , antitoxins or mercury. Random important notes: - An objects on_reagent_change will be called every time the objects reagents change. - Useful if you want to update the objects icon etc. + An objects on_reagent_change will be called every time the objects reagents change. + Useful if you want to update the objects icon etc. About the Holder: - The holder (reagents datum) is the datum that holds a list of all reagents - currently in the object.It also has all the procs needed to manipulate reagents + The holder (reagents datum) is the datum that holds a list of all reagents + currently in the object.It also has all the procs needed to manipulate reagents - Vars: - list/datum/reagent/reagent_list - List of reagent datums. + Vars: + list/datum/reagent/reagent_list + List of reagent datums. - total_volume - Total volume of all reagents. + total_volume + Total volume of all reagents. - maximum_volume - Maximum volume. + maximum_volume + Maximum volume. - atom/my_atom - Reference to the object that contains this. + atom/my_atom + Reference to the object that contains this. - Procs: + Procs: - get_free_space() - Returns the remaining free volume in the holder. + get_free_space() + Returns the remaining free volume in the holder. - get_master_reagent() - Returns the reference to the reagent with the largest volume + get_master_reagent() + Returns the reference to the reagent with the largest volume - get_master_reagent_name() - Ditto, but returns the name. + get_master_reagent_name() + Ditto, but returns the name. - get_master_reagent_id() - Ditto, but returns ID. + get_master_reagent_id() + Ditto, but returns ID. - update_total() - Updates total volume, called automatically. + update_total() + Updates total volume, called automatically. - handle_reactions() - Checks reagents and triggers any reactions that happen. Usually called automatically. + handle_reactions() + Checks reagents and triggers any reactions that happen. Usually called automatically. - add_reagent(var/id, var/amount, var/data = null, var/safety = 0) - Adds [amount] units of [id] reagent. [data] will be passed to reagent's mix_data() or initialize_data(). If [safety] is 0, handle_reactions() will be called. Returns 1 if successful, 0 otherwise. + add_reagent(var/id, var/amount, var/data = null, var/safety = 0) + Adds [amount] units of [id] reagent. [data] will be passed to reagent's mix_data() or initialize_data(). If [safety] is 0, handle_reactions() will be called. Returns 1 if successful, 0 otherwise. - remove_reagent(var/id, var/amount, var/safety = 0) - Ditto, but removes reagent. Returns 1 if successful, 0 otherwise. + remove_reagent(var/id, var/amount, var/safety = 0) + Ditto, but removes reagent. Returns 1 if successful, 0 otherwise. - del_reagent(var/id) - Removes all of the reagent. + del_reagent(var/id) + Removes all of the reagent. - has_reagent(var/id, var/amount = 0) - Checks if holder has at least [amount] of [id] reagent. Returns 1 if the reagent is found and volume is above [amount]. Returns 0 otherwise. + has_reagent(var/id, var/amount = 0) + Checks if holder has at least [amount] of [id] reagent. Returns 1 if the reagent is found and volume is above [amount]. Returns 0 otherwise. - clear_reagents() - Removes all reagents. + clear_reagents() + Removes all reagents. - get_reagent_amount(var/id) - Returns reagent volume. Returns 0 if reagent is not found. + get_reagent_amount(var/id) + Returns reagent volume. Returns 0 if reagent is not found. - get_data(var/id) - Returns get_data() of the reagent. + get_data(var/id) + Returns get_data() of the reagent. - get_reagents() - Returns a string containing all reagent ids and volumes, e.g. "carbon(4),nittrogen(5)". + get_reagents() + Returns a string containing all reagent ids and volumes, e.g. "carbon(4),nittrogen(5)". - remove_any(var/amount = 1) - Removes up to [amount] of reagents from [src]. Returns actual amount removed. + remove_any(var/amount = 1) + Removes up to [amount] of reagents from [src]. Returns actual amount removed. - trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]). If [copy] is 1, copies reagents instead. + trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) + Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]). If [copy] is 1, copies reagents instead. - touch(var/atom/target) - When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. - This does not handle transferring reagents to things. - For example, splashing someone with water will get them wet and extinguish them if they are on fire, - even if they are wearing an impermeable suit that prevents the reagents from contacting the skin. - Basically just defers to touch_mob(target), touch_turf(target), or touch_obj(target), depending on target's type. - Not recommended to use this directly, since trans_to() calls it before attempting to transfer. + touch(var/atom/target) + When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. + This does not handle transferring reagents to things. + For example, splashing someone with water will get them wet and extinguish them if they are on fire, + even if they are wearing an impermeable suit that prevents the reagents from contacting the skin. + Basically just defers to touch_mob(target), touch_turf(target), or touch_obj(target), depending on target's type. + Not recommended to use this directly, since trans_to() calls it before attempting to transfer. - touch_mob(var/mob/target) - Calls each reagent's touch_mob(target). + touch_mob(var/mob/target) + Calls each reagent's touch_mob(target). - touch_turf(var/turf/target) - Calls each reagent's touch_turf(target). + touch_turf(var/turf/target) + Calls each reagent's touch_turf(target). - touch_obj(var/obj/target) - Calls each reagent's touch_obj(target). + touch_obj(var/obj/target) + Calls each reagent's touch_obj(target). - trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - The general proc for applying reagents to things externally (as opposed to directly injected into the contents). - It first calls touch, then the appropriate trans_to_*() or splash_mob(). - If for some reason you want touch effects to be bypassed (e.g. injecting stuff directly into a reagent container or person), call the appropriate trans_to_*() proc. - - Calls touch() before checking the type of [target], calling splash_mob(target, amount), trans_to_turf(target, amount, multiplier, copy), or trans_to_obj(target, amount, multiplier, copy). + trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) + The general proc for applying reagents to things externally (as opposed to directly injected into the contents). + It first calls touch, then the appropriate trans_to_*() or splash_mob(). + If for some reason you want touch effects to be bypassed (e.g. injecting stuff directly into a reagent container or person), call the appropriate trans_to_*() proc. - trans_id_to(var/atom/target, var/id, var/amount = 1) - Transfers [amount] of [id] to [target]. Returns amount transferred. + Calls touch() before checking the type of [target], calling splash_mob(target, amount), trans_to_turf(target, amount, multiplier, copy), or trans_to_obj(target, amount, multiplier, copy). - splash_mob(var/mob/target, var/amount = 1, var/clothes = 1) - Checks mob's clothing if [clothes] is 1 and transfers [amount] reagents to mob's skin. - Don't call this directly. Call apply_to() instead. + trans_id_to(var/atom/target, var/id, var/amount = 1) + Transfers [amount] of [id] to [target]. Returns amount transferred. - trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) - Transfers [amount] reagents to the mob's appropriate holder, depending on [type]. Ignores protection. + splash_mob(var/mob/target, var/amount = 1, var/clothes = 1) + Checks mob's clothing if [clothes] is 1 and transfers [amount] reagents to mob's skin. + Don't call this directly. Call apply_to() instead. - trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - Turfs don't currently have any reagents. Puts [amount] reagents into a temporary holder, calls touch_turf(target) from it, and deletes it. + trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) + Transfers [amount] reagents to the mob's appropriate holder, depending on [type]. Ignores protection. - trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf(). + trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) + Turfs don't currently have any reagents. Puts [amount] reagents into a temporary holder, calls touch_turf(target) from it, and deletes it. - atom/proc/create_reagents(var/max_vol) - Creates a new reagent datum. + trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) + If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf(). + + atom/proc/create_reagents(var/max_vol) + Creates a new reagent datum. About Reagents: - Reagents are all the things you can mix and fille in bottles etc. This can be anything from - rejuvs over water to... iron. + Reagents are all the things you can mix and fille in bottles etc. This can be anything from + rejuvs over water to... iron. - Vars: + Vars: - name - Name that shows up in-game. + name + Name that shows up in-game. - id - ID that is used for internal tracking. MUST BE UNIQUE. + id + ID that is used for internal tracking. MUST BE UNIQUE. - description - Description that shows up in-game. + description + Description that shows up in-game. - datum/reagents/holder - Reference to holder. + datum/reagents/holder + Reference to holder. - reagent_state - Could be GAS, LIQUID, or SOLID. Affects nothing. Reserved for future use. + reagent_state + Could be GAS, LIQUID, or SOLID. Affects nothing. Reserved for future use. - list/data - Use varies by reagent. Custom variable. For example, blood stores blood group and viruses. + list/data + Use varies by reagent. Custom variable. For example, blood stores blood group and viruses. - volume - Current volume. + volume + Current volume. - metabolism - How quickly reagent is processed in mob's bloodstream; by default aslo affects ingest and touch metabolism. + metabolism + How quickly reagent is processed in mob's bloodstream; by default aslo affects ingest and touch metabolism. - ingest_met - How quickly reagent is processed when ingested; [metabolism] is used if zero. + ingest_met + How quickly reagent is processed when ingested; [metabolism] is used if zero. - touch_met - Ditto when touching. + touch_met + Ditto when touching. - dose - How much of the reagent has been processed, limited by [max_dose]. Used for reagents with varying effects (e.g. ethanol or rezadone) and overdosing. + dose + How much of the reagent has been processed, limited by [max_dose]. Used for reagents with varying effects (e.g. ethanol or rezadone) and overdosing. - max_dose - Maximum amount of reagent that has ever been in a mob. Exists so dose won't grow infinitely when small amounts of reagent are added over time. + max_dose + Maximum amount of reagent that has ever been in a mob. Exists so dose won't grow infinitely when small amounts of reagent are added over time. - overdose - If [dose] is bigger than [overdose], overdose() proc is called every tick. + overdose + If [dose] is bigger than [overdose], overdose() proc is called every tick. - scannable - If set to 1, will show up on health analyzers by name. + scannable + If set to 1, will show up on health analyzers by name. - affects_dead - If set to 1, will affect dead players. Used by Adminordrazine. + affects_dead + If set to 1, will affect dead players. Used by Adminordrazine. - glass_icon_state - Used by drinks. icon_state of the glass when this reagent is the master reagent. + glass_icon_state + Used by drinks. icon_state of the glass when this reagent is the master reagent. - glass_name - Ditto for glass name. + glass_name + Ditto for glass name. - glass_desc - Ditto for glass desciption. + glass_desc + Ditto for glass desciption. - glass_center_of_mass_x - glass_center_of_mass_y - Used for glass placement on tables. + glass_center_of_mass_x + glass_center_of_mass_y + Used for glass placement on tables. - color - "#RRGGBB" or "#RRGGBBAA" where A is alpha channel. + color + "#RRGGBB" or "#RRGGBBAA" where A is alpha channel. - color_weight - How much reagent affects color of holder. Used by paint. + color_weight + How much reagent affects color of holder. Used by paint. - Procs: + Procs: - remove_self(var/amount) - Removes [amount] of itself. + remove_self(var/amount) + Removes [amount] of itself. - touch_mob(var/mob/M) - Called when reagent is in another holder and not splashing the mob. Can be used with noncarbons. + touch_mob(var/mob/M) + Called when reagent is in another holder and not splashing the mob. Can be used with noncarbons. - touch_obj(var/obj/O) - How reagent reacts with objects. + touch_obj(var/obj/O) + How reagent reacts with objects. - touch_turf(var/turf/T) - How reagent reacts with turfs. + touch_turf(var/turf/T) + How reagent reacts with turfs. - on_mob_life(var/mob/living/carbon/M, var/alien, var/location) - Makes necessary checks and calls one of affect procs. + on_mob_life(var/mob/living/carbon/M, var/alien, var/location) + Makes necessary checks and calls one of affect procs. - affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - How reagent affects mob when injected. [removed] is the amount of reagent that has been removed this tick. [alien] is the mob's reagent flag. + affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + How reagent affects mob when injected. [removed] is the amount of reagent that has been removed this tick. [alien] is the mob's reagent flag. - affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - Ditto, ingested. Defaults to affect_blood with halved dose. + affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + Ditto, ingested. Defaults to affect_blood with halved dose. - affect_touch(var/mob/living/carbon/M, var/alien, var/removed) - Ditto, touching. + affect_touch(var/mob/living/carbon/M, var/alien, var/removed) + Ditto, touching. - overdose(var/mob/living/carbon/M, var/alien) - Called when dose is above overdose. Defaults to M.adjustToxLoss(REM). + overdose(var/mob/living/carbon/M, var/alien) + Called when dose is above overdose. Defaults to M.adjustToxLoss(REM). - initialize_data(var/newdata) - Called when reagent is created. Defaults to setting [data] to [newdata]. + initialize_data(var/newdata) + Called when reagent is created. Defaults to setting [data] to [newdata]. - mix_data(var/newdata, var/newamount) - Called when [newamount] of reagent with [newdata] data is added to the current reagent. Used by paint. + mix_data(var/newdata, var/newamount) + Called when [newamount] of reagent with [newdata] data is added to the current reagent. Used by paint. - get_data() - Returns data. Can be overriden. + get_data() + Returns data. Can be overriden. About Recipes: - Recipes are simple datums that contain a list of required reagents and a result. - They also have a proc that is called when the recipe is matched. + Recipes are simple datums that contain a list of required reagents and a result. + They also have a proc that is called when the recipe is matched. - Vars: + Vars: - name - Name of the reaction, currently unused. + name + Name of the reaction, currently unused. - id - ID of the reaction, must be unique. + id + ID of the reaction, must be unique. - result - ID of the resulting reagent. Can be null. + result + ID of the resulting reagent. Can be null. - list/required_reagents - Reagents that are required for the reaction and are used up during it. + list/required_reagents + Reagents that are required for the reaction and are used up during it. - list/catalysts - Ditto, but not used up. + list/catalysts + Ditto, but not used up. - list/inhibitors - Opposite, prevent the reaction from happening. + list/inhibitors + Opposite, prevent the reaction from happening. - result_amount - Amount of resulting reagent. + result_amount + Amount of resulting reagent. - mix_message - Message that is shown to mobs when reaction happens. + mix_message + Message that is shown to mobs when reaction happens. - Procs: + Procs: - can_happen(var/datum/reagents/holder) - Customizable. If it returns 0, reaction will not happen. Defaults to always returning 1. Used by slime core reactions. + can_happen(var/datum/reagents/holder) + Customizable. If it returns 0, reaction will not happen. Defaults to always returning 1. Used by slime core reactions. - on_reaction(var/datum/reagents/holder, var/created_volume) - Called when reaction happens. Used by explosives. + on_reaction(var/datum/reagents/holder, var/created_volume) + Called when reaction happens. Used by explosives. - send_data(var/datum/reagents/T) - Sets resulting reagent's data. Used by blood paint. + send_data(var/datum/reagents/T) + Sets resulting reagent's data. Used by blood paint. About the Tools: - By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. - system you'll need to add something like this in its new proc: + By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. + system you'll need to add something like this in its new proc: - atom/proc/create_reagents(var/max_volume) + atom/proc/create_reagents(var/max_volume) - Other important stuff: + Other important stuff: - amount_per_transfer_from_this var - This var is mostly used by beakers and bottles. - It simply tells us how much to transfer when - 'pouring' our reagents into something else. + amount_per_transfer_from_this var + This var is mostly used by beakers and bottles. + It simply tells us how much to transfer when + 'pouring' our reagents into something else. - atom/proc/is_open_container() - Checks atom/var/flags & OPENCONTAINER. - If this returns 1 , you can use syringes, beakers etc - to manipulate the contents of this object. - If it's 0, you'll need to write your own custom reagent - transfer code since you will not be able to use the standard - tools to manipulate it. + atom/proc/is_open_container() + Checks atom/var/flags & OPENCONTAINER. + If this returns 1 , you can use syringes, beakers etc + to manipulate the contents of this object. + If it's 0, you'll need to write your own custom reagent + transfer code since you will not be able to use the standard + tools to manipulate it. -*/ +\*/ diff --git a/code/modules/shuttles/upgrade_guide.md b/code/modules/shuttles/upgrade_guide.md index 7c2c73f422..4e7275b4a6 100644 --- a/code/modules/shuttles/upgrade_guide.md +++ b/code/modules/shuttles/upgrade_guide.md @@ -1,35 +1,37 @@ # "Landmark" Shuttles Conversion + This guide helps with updating maps and shuttle datums from the old "area" based system to the "landmark" based system. ## Summary -The old shuttle datum worked with areas (`/area`). You are probably familiar with every shuttle having a few cookie-cutter shaped areas it travels between. + +The old shuttle datum worked with areas (`/area`). You are probably familiar with every shuttle having a few cookie-cutter shaped areas it travels between. When the shuttle "moved" it was translated from its current area to the destination area. The areas had to be _exactly_ the same shape so -that each turf in the origin area got translated to the equivalent place at the target.\ +that each turf in the origin area got translated to the equivalent place at the target.\ Since _all possible_ destinations had to have a dedicated area (and areas in BYOND can't overlap) this means it is impossible for two shuttles to travel to the same spot, even at different times. In the new system shuttle destinations are represented by "landmark" objects (`/obj/effect/shuttle_landmark`). When a shuttle is "moved" it is translated from its current landmark to the destination landmark, with each turf keeping its same position _relative_ to the landmarks. -In other words, whatever a turf's x/y/z offsets are from the origin landmark, it will be moved to the same x/y/z offset from the destination landmark. +In other words, whatever a turf's x/y/z offsets are from the origin landmark, it will be moved to the same x/y/z offset from the destination landmark. ## Landmark Objects + Shuttle destinations are represented by `/obj/effect/shuttle_landmark` objects on the map. -* `name` - Pretty name of the nav point, used on overmap and in messages and console UI. -* `landmark_tag` - Globally unique ID, used by everything else to refer to this landmark. -* `docking_controller` - ID of the controller on the dock side (initialize to id_tag, becomes reference). Leave null if not applicable. -* `base_area` - Type path of the `/area` that should be here when a shuttle is *not* present. -* `base_turf` - Type path of the `/turf` that should be here when a shuttle is *not* present. -* `shuttle_restricted` - If not null, only the named shuttle is allowed to use this landmark. (TODO: Overmap functionality) -* `flags` - Bitfield - defaults to `SLANDMARK_FLAG_AUTOSET`, can be any combination of: - * `SLANDMARK_FLAG_AUTOSET` (1) - If set, will initialize base_area and base_turf to same as where it was spawned at. - * `SLANDMARK_FLAG_ZERO_G` (2) - If set, Zero-G shuttles moved here will lose gravity unless the area has ambient gravity. -* `special_dock_targets` - Used to configure shuttles with multiple docking controllers on the shuttle. Map of shuttle `name` -> `id_tag` of the docking controller it should use for this landmark. (Think of a shuttle with airlocks on both sides, each with their own controller. This would tell it which side to use.) - +- `name` - Pretty name of the nav point, used on overmap and in messages and console UI. +- `landmark_tag` - Globally unique ID, used by everything else to refer to this landmark. +- `docking_controller` - ID of the controller on the dock side (initialize to id_tag, becomes reference). Leave null if not applicable. +- `base_area` - Type path of the `/area` that should be here when a shuttle is _not_ present. +- `base_turf` - Type path of the `/turf` that should be here when a shuttle is _not_ present. +- `shuttle_restricted` - If not null, only the named shuttle is allowed to use this landmark. (TODO: Overmap functionality) +- `flags` - Bitfield - defaults to `SLANDMARK_FLAG_AUTOSET`, can be any combination of: + - `SLANDMARK_FLAG_AUTOSET` (1) - If set, will initialize base_area and base_turf to same as where it was spawned at. + - `SLANDMARK_FLAG_ZERO_G` (2) - If set, Zero-G shuttles moved here will lose gravity unless the area has ambient gravity. +- `special_dock_targets` - Used to configure shuttles with multiple docking controllers on the shuttle. Map of shuttle `name` -> `id_tag` of the docking controller it should use for this landmark. (Think of a shuttle with airlocks on both sides, each with their own controller. This would tell it which side to use.) ## Shuttle Types - ### Ferry Shuttles + These shuttles go back and forth between two locations (normally called "station" and "offsite"). Examples: Mining shuttle, Arrivals Shuttle, etc. @@ -38,24 +40,22 @@ New Type Path: `/datum/shuttle/autodock/ferry` ##### New Vars: -Name|Type|Required?|Info ----|---|---|--- -shuttle_area |`/area` typepath(s)|Yes| Can be a single path or list of paths. +| Name | Type | Required? | Info | +| ------------ | ------------------- | --------- | -------------------------------------- | +| shuttle_area | `/area` typepath(s) | Yes | Can be a single path or list of paths. | ##### Replaced vars: -Old|New|Required?|Info -:---:|:---:|:---:|--- -area_station |landmark_station |Yes|Tag of the landmark for the "station" location. -area_offsite |landmark_offsite |Yes|Tag of the landmark for the "offsite" location. -area_transition |landmark_transition |No|Tag of the landmark for the "transition" location used during long_jump() -dock_target_station |On landmark |No|`id_tag` docking controller *on the dock* has been moved to the `docking_controller` var on the landmark_station landmark obj. -dock_target_offsite |On landmark |No|`id_tag` docking controller *on the dock* has been moved to the `docking_controller` var on the landmark_offsite landmark obj. - - - +| Old | New | Required? | Info | +| :-----------------: | :-----------------: | :-------: | ------------------------------------------------------------------------------------------------------------------------------ | +| area_station | landmark_station | Yes | Tag of the landmark for the "station" location. | +| area_offsite | landmark_offsite | Yes | Tag of the landmark for the "offsite" location. | +| area_transition | landmark_transition | No | Tag of the landmark for the "transition" location used during long_jump() | +| dock_target_station | On landmark | No | `id_tag` docking controller _on the dock_ has been moved to the `docking_controller` var on the landmark_station landmark obj. | +| dock_target_offsite | On landmark | No | `id_tag` docking controller _on the dock_ has been moved to the `docking_controller` var on the landmark_offsite landmark obj. | ### Multi Shuttles + These shuttles go between a list of configured locations, one of which is its starting location. Examples: Skipjack, Syndicate Shuttle @@ -64,61 +64,64 @@ New Type Path: `/datum/shuttle/autodock/multi` ##### New Vars: -Name|Type|Required?|Info ----|---|---|--- -shuttle_area |`/area` typepath(s)|Yes| Can be a single path or list of paths. +| Name | Type | Required? | Info | +| ------------ | ------------------- | --------- | -------------------------------------- | +| shuttle_area | `/area` typepath(s) | Yes | Can be a single path or list of paths. | ##### Replaced vars: -Old|New|Required?|Info -:---:|:---:|:---:|--- -origin |current_location |Yes|Tag of the landmark where the shuttle is at startup. -interim |landmark_transition |No|Tag of the landmark for the "transition" location used during long_jump() -start_location |N/A |No|No longer necessary, automatically determined from the value of `origin` -destinations |destination_tags |Yes|List of destinations the shuttle can travel to. Used to be associative list of *name* -> *area typepath*, now is normal list of landmark tag ids. Name is now read from the landmark obj. -destination_dock_targets|On landmarks |No|Used to be associative list of *name* -> *id_tag* for which docking controller *on the dock* to use at each destination. This is now specified by the `docking_controller` var on each landmark obj. - - +| Old | New | Required? | Info | +| :----------------------: | :-----------------: | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| origin | current_location | Yes | Tag of the landmark where the shuttle is at startup. | +| interim | landmark_transition | No | Tag of the landmark for the "transition" location used during long_jump() | +| start_location | N/A | No | No longer necessary, automatically determined from the value of `origin` | +| destinations | destination_tags | Yes | List of destinations the shuttle can travel to. Used to be associative list of _name_ -> _area typepath_, now is normal list of landmark tag ids. Name is now read from the landmark obj. | +| destination_dock_targets | On landmarks | No | Used to be associative list of _name_ -> _id_tag_ for which docking controller _on the dock_ to use at each destination. This is now specified by the `docking_controller` var on each landmark obj. | ### Web Shuttles -These shuttles travel along a network of locations connected by routes. Instead of being able to travel to any of its destinations, it can only travel to destinations connected by a route to its current location. Added by Polaris as an upgrade to Multi Shuttles. + +These shuttles travel along a network of locations connected by routes. Instead of being able to travel to any of its destinations, it can only travel to destinations connected by a route to its current location. Added by Polaris as an upgrade to Multi Shuttles. Note: While cool, it is likely that the upcoming "overmap" shuttles will be even cooler, and may eventually replace some web shuttles. -Examples: Southern Cross' Ninja Shuttle, Tether's Excursion Shuttle +Examples: Southern Cross' Ninja Shuttle, Tether's Excursion Shuttle Old Type Path: `/datum/shuttle/web_shuttle`\ New Type Path: `/datum/shuttle/autodock/web_shuttle` ##### New Vars: -Name|Type|Required?|Info ----|---|---|--- -shuttle_area |`/area` typepath(s)|Yes| Can be a single path or list of paths. +| Name | Type | Required? | Info | +| ------------ | ------------------- | --------- | -------------------------------------- | +| shuttle_area | `/area` typepath(s) | Yes | Can be a single path or list of paths. | ##### Replaced vars: -Old|New|Required?|Info -:---:|:---:|:---:|--- -current_area |current_location |Yes|Tag of the landmark where the shuttle is at startup. +| Old | New | Required? | Info | +| :----------: | :--------------: | :-------: | ---------------------------------------------------- | +| current_area | current_location | Yes | Tag of the landmark where the shuttle is at startup. | #### Web Destination Configuration (`/datum/shuttle_destination`) -The network of routes for each web shuttle is configured by defining datums. These are mostly unchanged but use landmarks instead of areas now. + +The network of routes for each web shuttle is configured by defining datums. These are mostly unchanged but use landmarks instead of areas now. ##### Replaced vars: -Old|New|Required?|Info -:---:|:---:|:---:|--- -my_area |my_landmark |Yes|Tag of the landmark associated with this destination. -preferred_interim_area |preferred_interim_tag |No|Tag of the landmark for the "transition" location used during long_jump() -dock_target |On landmark |No|`id_tag` docking controller *on the dock* has been moved to the `docking_controller` var on the my_landmark landmark obj. +| Old | New | Required? | Info | +| :--------------------: | :-------------------: | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| my_area | my_landmark | Yes | Tag of the landmark associated with this destination. | +| preferred_interim_area | preferred_interim_tag | No | Tag of the landmark for the "transition" location used during long_jump() | +| dock_target | On landmark | No | `id_tag` docking controller _on the dock_ has been moved to the `docking_controller` var on the my_landmark landmark obj. | ### Misc Shuttle Types + Other shuttle types that are either unused or unchanged in particular. #### Escape Pods + Special case of ferry shuttles that use escape pod berth controllers. -Type path changed from `/datum/shuttle/ferry/escape_pod` to `/datum/shuttle/autodock/ferry/escape_pod` +Type path changed from `/datum/shuttle/ferry/escape_pod` to `/datum/shuttle/autodock/ferry/escape_pod` Follow same instructions as for other ferry shuttles. #### Multidock Ferry Shuttles + `/datum/shuttle/ferry/multidock` was a variant of ferry shuttles that could use a different docking port at each location. Obsolete since is now natively supported by all dockable shuttles. diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md index 71acb47c45..d2a99e5ffd 100644 --- a/code/modules/tgchat/README.md +++ b/code/modules/tgchat/README.md @@ -5,6 +5,7 @@ ### Message Format TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: + ```json { "sequence": 0, @@ -13,13 +14,13 @@ TgChat handles sending messages from the server to the client through the use of "text": ". . .", // ?optional !atleast-one "html": ". . .", // ?optional !atleast-one "avoidHighlighting": 0 // ?optional - }, + } } ``` ### Reliability -In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets. +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets. ### Ping System diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 35ca73d7e9..473442fd11 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -5,9 +5,9 @@ This folder should be placed on its own inside a codebase that wishes to use the - [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. - The [core](./core) folder includes all code not directly part of any API version. - The other versioned folders contain code for the different DMAPI versions. - - [v3210](./v3210) contains the final TGS3 API. - - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). - - [v5](./v5) is the current DMAPI version used by TGS >=4.1. + - [v3210](./v3210) contains the final TGS3 API. + - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). + - [v5](./v5) is the current DMAPI version used by TGS >=4.1. - [LICENSE](./LICENSE) is the MIT license for the DMAPI. APIs communicate with TGS in two ways. All versions implement TGS -> DM communication using /world/Topic. DM -> TGS communication, called the bridge method, is different for each version. diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index 965e21b549..7886a85714 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -2,7 +2,7 @@ This folder contains all DMAPI code not directly involved in an API. -- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [\_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. - [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index a8a0c748e7..fb374c2f87 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -2,8 +2,8 @@ This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. -- [__interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. -- [_defines.dm](./_defines.dm) contains constant definitions. +- [\_\_interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. +- [\_defines.dm](./_defines.dm) contains constant definitions. - [api.dm](./api.dm) contains the bulk of the API code. - [bridge.dm](./bridge.dm) contains functions related to making bridge requests. - [chunking.dm](./chunking.dm) contains common function for splitting large raw data sets into chunks BYOND can natively process. diff --git a/code/modules/tickets/tickets.dm b/code/modules/tickets/tickets.dm index 3e44ca419a..1b44f6a5c3 100644 --- a/code/modules/tickets/tickets.dm +++ b/code/modules/tickets/tickets.dm @@ -169,7 +169,7 @@ GLOBAL_DATUM_INIT(tickets, /datum/tickets, new) if(C.current_ticket) var/datum/ticket/T = C.current_ticket T.AddInteraction("Client disconnected.") - T.initiator.mob.clear_alert("open ticket") + T.initiator.mob?.clear_alert("open ticket") T.initiator = null T = null @@ -413,7 +413,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list) switch(level) if(0) for (var/client/C in GLOB.admins) - var/chat_msg = span_mentor_channel(span_admin_pm_notice(span_adminhelp("Ticket [TicketHref("#[id]", ref_src)]") + span_bold(" (Mentor): [LinkedReplyName(ref_src)] [FullMonty(ref_src, check_rights_for(C, (R_ADMIN|R_SERVER|R_MOD)))]:") + msg)) + var/chat_msg = span_mentor_channel(span_admin_pm_notice(span_adminhelp("Ticket [TicketHref("#[id]", ref_src)]") + span_bold(" (Mentor): [LinkedReplyName(ref_src)] [FullMonty(ref_src, check_rights_for(C, (R_ADMIN|R_SERVER|R_MOD)))]: ") + msg)) if (C.prefs?.read_preference(/datum/preference/toggle/play_mentorhelp_ping)) C << 'sound/effects/mentorhelp.mp3' to_chat(C, chat_msg) diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html index ee355fa80e..096a3c51f6 100644 --- a/code/modules/tooltip/tooltip.html +++ b/code/modules/tooltip/tooltip.html @@ -1,269 +1,410 @@ -<!DOCTYPE html> +<!doctype html> <html> -<head> - <title>Tooltip - - - + + +
+
+
+ + - - + //Go get the map details + window.location = + "byond://winget?callback=tooltip.updateCallback;id=mapwindow.map;property=size,view-size"; + }, + }; + + diff --git a/code/modules/vchat/js/vchat.js b/code/modules/vchat/js/vchat.js deleted file mode 100644 index 6a7029f0e2..0000000000 --- a/code/modules/vchat/js/vchat.js +++ /dev/null @@ -1,1048 +0,0 @@ -//The 'V' is for 'VORE' but you can pretend it's for Vue.js if you really want. - -(function(){ - var oldLog = console.log; - console.log = function (message) { - send_debug(message); - oldLog.apply(console, arguments); - }; - var oldError = console.error; - console.error = function (message) { - send_debug(message); - oldError.apply(console, arguments); - } - window.onerror = function (message, url, line, col, error) { - var stacktrace = ""; - if(error && error.stack) { - stacktrace = error.stack; - } - send_debug(message+" ("+url+"@"+line+":"+col+") "+error+"|UA: "+navigator.userAgent+"|Stack: "+stacktrace); - return true; - } -})(); - - -//Options for vchat -var vchat_opts = { - msBeforeDropped: 30000, //No ping for this long, and the server must be gone - cookiePrefix: "vst-", //If you're another server, you can change this if you want. - alwaysShow: ["vc_adminpm", "vc_system"], //Categories to always display on every tab. YW Edit: removes vc_looc adds: vc_adminpm - vchatTabsVer: 1.0 //Version of vchat tabs save 'file' -}; - -/*********** -* If you are changing either tabBackgroundColor in dark or lightmode, -* lease keep this synchronized with code\modules\examine\examine.dm -* I cannot think of a elegant way to ensure it tracks these settings properly. -* As long as LIGHTMODE stays as "none", stuff should not break. -* Thank you! -************/ - -var DARKMODE_COLORS = { - buttonBgColor: "#40628a", - buttonTextColor: "#FFFFFF", - windowBgColor: "#272727", - highlightColor: "#009900", - tabTextColor: "#FFFFFF", - tabBackgroundColor: "#272727" -}; - -var LIGHTMODE_COLORS = { - buttonBgColor: "none", - buttonTextColor: "#000000", - windowBgColor: "none", - highlightColor: "#007700", - tabTextColor: "#000000", - tabBackgroundColor: "none" -}; - - -/*********** -* -* Setup Methods -* -************/ - -var set_storage = set_cookie; -var get_storage = get_cookie; -var domparser = new DOMParser(); - -//Upgrade to LS -if (storageAvailable('localStorage')) { - set_storage = set_localstorage; - get_storage = get_localstorage; -} - -//State-tracking variables -var vchat_state = { - ready: false, - - //Userinfo as reported by byond - byond_ip: null, - byond_cid: null, - byond_ckey: null, - - //Ping status - lastPingReceived: 0, - latency_sent: 0, - - //Last ID - lastId: 0 -} - -function start_vchat() { - //Instantiate Vue.js - start_vue(); - - //Inform byond we're done - vchat_state.ready = true; - push_Topic('done_loading'); - push_Topic_showingnum(this.showingnum); - - //I'll do my own winsets - doWinset("htmloutput", {"is-visible": true}); - doWinset("oldoutput", {"is-visible": false}); - doWinset("chatloadlabel", {"is-visible": false}); - - //Commence the pingening - setInterval(check_ping, vchat_opts.msBeforeDropped); - - //For fun - send_debug("VChat Loaded!"); - //throw new Error("VChat Loaded!"); - -} - -//Loads vue for chat usage -var vueapp; -function start_vue() { - vueapp = new Vue({ - el: '#app', - data: { - messages: [], //List o messages from byond - shown_messages: [], //Used on filtered tabs, but not "Main" because it has 0len categories list, which bypasses filtering for speed - unshown_messages: 0, //How many messages in archive would be shown but aren't - archived_messages: [], //Too old to show - tabs: [ //Our tabs - {name: "Main", categories: [], immutable: true, active: true} - ], - unread_messages: {}, //Message categories that haven't been looked at since we got one of them - editing: false, //If we're in settings edit mode - paused: false, //Autoscrolling - latency: 0, //Not necessarily network latency, since the game server has to align the responses into ticks - reconnecting: false, //If we've lost our connection - ext_styles: "", //Styles for chat downloaded files - is_admin: false, - - //Settings - inverted: false, //Dark mode - crushing: 3, //Combine similar messages - animated: false, //Small CSS animations for new messages - fontsize: 0.9, //Font size nudging - lineheight: 130, - showingnum: 200, //How many messages to show - - //The table to map game css classes to our vchat categories - type_table: [ - { - matches: ".filter_say, .say, .emote, .emotesubtle", //VOREStation Edit - becomes: "vc_localchat", - pretty: "Local Chat", - tooltip: "In-character local messages (say, emote, etc)", - required: false, - admin: false - }, - { - matches: ".filter_radio, .alert, .syndradio, .centradio, .airadio, .entradio, .comradio, .secradio, .engradio, .medradio, .sciradio, .supradio, .srvradio, .expradio, .radio, .deptradio, .newscaster", - becomes: "vc_radio", - pretty: "Radio Comms", - tooltip: "All departments of radio messages", - required: false, - admin: false - }, - { - matches: ".filter_notice, .notice:not(.pm), .adminnotice, .info, .sinister, .cult", - becomes: "vc_info", - pretty: "Notices", - tooltip: "Non-urgent messages from the game and items", - required: false, - admin: false - }, - { - matches: ".filter_warning, .warning:not(.pm), .critical, .userdanger, .italics", - becomes: "vc_warnings", - pretty: "Warnings", - tooltip: "Urgent messages from the game and items", - required: false, - admin: false - }, - { - matches: ".valert, .vwarning, .vnotice, .vdanger", - becomes: "vc_vore_message", - pretty: "Vore Messages", - tooltip: "Vore Messages", - required: false, - admin: false - }, - { - matches: ".filter_deadsay, .deadsay", - becomes: "vc_deadchat", - pretty: "Deadchat", - tooltip: "All of deadchat", - required: false, - admin: false - }, - { - matches: ".filter_pray", - becomes: "vc_pray", - pretty: "Pray", - tooltip: "Prayer messages", - required: false, - admin: false - }, - { - matches: ".ooc, .filter_ooc", - becomes: "vc_globalooc", - pretty: "Global OOC", - tooltip: "The bluewall of global OOC messages", - required: false, - admin: false - }, - //VOREStation Add Start - { - matches: ".nif", - becomes: "vc_nif", - pretty: "NIF Messages", - tooltip: "Messages from the NIF itself and people inside", - required: false, - admin: false - }, - { - matches: ".psay, .pemote", - becomes: "vc_pmessage", - pretty: "Pred/Prey Messages", - tooltip: "Messages from / to absorbed or dominated prey", - required: false, - admin: false - }, - //VOREStation Add End - { - matches: ".mentor_channel, .mentor", - becomes: "vc_mentor", - pretty: "Mentor messages", - tooltip: "Mentorchat and mentor pms", - required: false, - admin: false - }, - { - matches: ".filter_pm, .pm", - becomes: "vc_adminpm", - pretty: "Admin PMs", - tooltip: "Messages to/from admins ('adminhelps'), always enabled", - required: true, //YW Edit - admin: false - }, - { - matches: ".filter_ASAY, .admin_channel", - becomes: "vc_adminchat", - pretty: "Admin Chat", - tooltip: "ASAY messages", - required: false, - admin: true - }, - { - matches: ".filter_MSAY, .mod_channel", - becomes: "vc_modchat", - pretty: "Mod Chat", - tooltip: "MSAY messages", - required: false, - admin: true - }, - { - matches: ".filter_ESAY, .event_channel", - becomes: "vc_eventchat", - pretty: "Event Chat", - tooltip: "ESAY messages", - required: false, - admin: true - }, - { - matches: ".filter_combat, .danger", - becomes: "vc_combat", - pretty: "Combat Logs", - tooltip: "Urist McTraitor has stabbed you with a knife!", - required: false, - admin: false - }, - { - matches: ".filter_adminlogs, .log_message", - becomes: "vc_adminlogs", - pretty: "Admin Logs", - tooltip: "ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z", - required: false, - admin: true - }, - { - matches: ".filter_attacklogs", - becomes: "vc_attacklogs", - pretty: "Attack Logs", - tooltip: "Urist McTraitor has shot John Doe", - required: false, - admin: true - }, - { - matches: ".filter_debuglogs", - becomes: "vc_debuglogs", - pretty: "Debug Logs", - tooltip: "DEBUG: SSPlanets subsystem Recover().", - required: false, - admin: true - }, - { - matches: ".looc", - becomes: "vc_looc", - pretty: "Local OOC", - tooltip: "Local OOC messages", - required: false //YW Edit - }, - { - matches: ".rlooc", - becomes: "vc_rlooc", - pretty: "Remote LOOC", - tooltip: "Remote LOOC messages", - required: false, - admin: true - }, - { - matches: ".boldannounce, .filter_system", - becomes: "vc_system", - pretty: "System Messages", - tooltip: "Messages from your client, always enabled", - required: true - }, - { - matches: ".unsorted", - becomes: "vc_unsorted", - pretty: "Unsorted", - tooltip: "Messages that don't have any filters.", - required: false, - admin: false - } - ], - }, - mounted: function() { - //Load our settings - this.load_settings(); - - var xhr = new XMLHttpRequest(); - xhr.open('GET', 'ss13styles.css'); - xhr.onreadystatechange = (function() { - this.ext_styles = xhr.responseText; - }).bind(this); - xhr.send(); - }, - updated: function() { - if(!this.editing && !this.paused) { - window.scrollTo(0,document.getElementById("messagebox").scrollHeight); - } - }, - watch: { - reconnecting: function(newSetting, oldSetting) { - if(newSetting == true && oldSetting == false) { - this.internal_message("Your client has lost connection to the server, or there is severe lag. Your client will reconnect if possible."); - } else if (newSetting == false && oldSetting == true) { - this.internal_message("Your client has reconnected to the server."); - } - }, - //Save the inverted setting to LS - inverted: function (newSetting) { - set_storage("darkmode",newSetting); - if(newSetting) { //Special treatment for which is outside Vue's scope and has custom css - document.body.classList.add("inverted"); - switch_ui_mode(DARKMODE_COLORS); - } else { - document.body.classList.remove("inverted"); - switch_ui_mode(LIGHTMODE_COLORS); - } - }, - crushing: function (newSetting) { - set_storage("crushing",newSetting); - }, - animated: function (newSetting) { - set_storage("animated",newSetting); - }, - fontsize: function (newSetting, oldSetting) { - if(isNaN(newSetting)) { //Numbers only - this.fontsize = oldSetting; - return; - } - if(newSetting < 0.2) { - this.fontsize = 0.2; - } else if(newSetting > 5) { - this.fontsize = 5; - } - set_storage("fontsize",newSetting); - }, - lineheight: function (newSetting, oldSetting) { - if(!isFinite(newSetting)) { //Integers only - this.lineheight = oldSetting; - return; - } - if(newSetting < 100) { - this.lineheight = 100; - } else if(newSetting > 200) { - this.lineheight = 200; - } - set_storage("lineheight",newSetting); - }, - showingnum: function (newSetting, oldSetting) { - if(!isFinite(newSetting)) { //Integers only - this.showingnum = oldSetting; - return; - } - - newSetting = Math.floor(newSetting); - if(newSetting < 50) { - this.showingnum = 50; - } else if(newSetting > 2000) { - this.showingnum = 2000; - } - - set_storage("showingnum",this.showingnum); - push_Topic_showingnum(this.showingnum); // Send the buffer length back to byond so we have it in case of reconnect - this.attempt_archive(); - }, - current_categories: function(newSetting, oldSetting) { - if(newSetting.length) { - this.apply_filter(newSetting); - } - } - }, - computed: { - //Which tab is active? - active_tab: function() { - //Had to polyfill this stupid .find since IE doesn't have EC6 - let tab = this.tabs.find( function(tab) { - return tab.active; - }); - return tab; - }, - //What color does the latency pip get? - ping_classes: function() { - if(!this.latency) { - return this.reconnecting ? "red" : "green"; //Standard - } - - if (this.latency == "?") { return "grey"; } //Waiting for latency test reply - else if(this.latency < 0 ) {return "red"; } - else if(this.latency <= 200) { return "green"; } - else if(this.latency <= 400) { return "yellow"; } - else { return "grey"; } - }, - current_categories: function() { - if(this.active_tab == this.tabs[0]) { - return []; //Everything, no filtering, special case for speed. - } else { - return this.active_tab.categories.concat(vchat_opts.alwaysShow); - } - } - }, - methods: { - //Load the chat settings - load_settings: function() { - this.inverted = get_storage("darkmode", false); - this.crushing = get_storage("crushing", 3); - this.animated = get_storage("animated", false); - this.fontsize = get_storage("fontsize", 0.9); - this.lineheight = get_storage("lineheight", 130); - this.showingnum = get_storage("showingnum", 200); - - if(isNaN(this.crushing)){this.crushing = 3;} //This used to be a bool (03-02-2020) - if(isNaN(this.fontsize)){this.fontsize = 0.9;} //This used to be a string (03-02-2020) - - this.load_tabs(); - }, - load_tabs: function() { - var loadstring = get_storage("tabs") - if(!loadstring) - return; - var loadfile = JSON.parse(loadstring); - //Malformed somehow. - if(!loadfile.version || !loadfile.tabs) { - this.internal_message("There was a problem loading your tabs. Any new ones you make will be saved, however."); - return; - } - //Version is old? Sorry. - if(!loadfile.version == vchat_opts.vchatTabsVer) { - this.internal_message("Your saved tabs are for an older version of VChat and must be recreated, sorry."); - return; - } - - this.tabs.push.apply(this.tabs, loadfile.tabs); - }, - save_tabs: function() { - var savefile = { - version: vchat_opts.vchatTabsVer, - tabs: [] - } - - //The tabs contain a bunch of vue stuff that gets funky when you try to serialize it with stringify, so we 'purify' it - this.tabs.forEach(function(tab){ - if(tab.immutable) - return; - - var name = tab.name; - - var categories = []; - tab.categories.forEach(function(category){categories.push(category);}); - - var cleantab = {name: name, categories: categories, immutable: false, active: false} - - savefile.tabs.push(cleantab); - }); - - var savestring = JSON.stringify(savefile); - set_storage("tabs", savestring); - }, - //Change to another tab - switchtab: function(tab) { - if(tab == this.active_tab) return; - this.active_tab.active = false; - tab.active = true; - - tab.categories.forEach( function(cls) { - this.unread_messages[cls] = 0; - }, this); - - this.apply_filter(this.current_categories); - }, - //Toggle edit mode - editmode: function() { - this.editing = !this.editing; - this.save_tabs(); - }, - //Toggle autoscroll - pause: function() { - this.paused = !this.paused; - }, - //Create a new tab (stupid lack of classes in ES5...) - newtab: function() { - this.tabs.push({ - name: "New Tab", - categories: [], - immutable: false, - active: false - }); - this.switchtab(this.tabs[this.tabs.length - 1]); - }, - //Rename an existing tab - renametab: function() { - if(this.active_tab.immutable) { - return; - } - var tabtorename = this.active_tab; - var newname = window.prompt("Type the desired tab name:", tabtorename.name); - if(newname === null || newname === "" || tabtorename === null) { - return; - } - tabtorename.name = newname; - }, - //Delete the currently active tab - deltab: function(tab) { - if(!tab) { - tab = this.active_tab; - } - if(tab.immutable) { - return; - } - this.switchtab(this.tabs[0]); - this.tabs.splice(this.tabs.indexOf(tab), 1); - }, - movetab: function(tab, shift) { - if(!tab || tab.immutable) { - return; - } - var at = this.tabs.indexOf(tab); - var to = at + shift; - this.tabs.splice(to, 0, this.tabs.splice(at, 1)[0]); - }, - tab_unread_count: function(tab) { - var unreads = 0; - var thisum = this.unread_messages; - tab.categories.find( function(cls){ - if(thisum[cls]) { - unreads += thisum[cls]; - } - }); - return unreads; - }, - tab_unread_categories: function(tab) { - var unreads = false; - var thisum = this.unread_messages; - tab.categories.find( function(cls){ - if(thisum[cls]) { - unreads = true; - return true; - } - }); - - return { red: unreads, grey: !unreads}; - }, - attempt_archive: function() { - var wiggle = 20; //Wiggle room to prevent hysterisis effects. Slice off 20 at a time. - //Pushing out old messages - if(this.messages.length > this.showingnum) {//Time to slice off old messages - var too_old = this.messages.splice(0,wiggle); //We do a few at a time to avoid doing it too often - Array.prototype.push.apply(this.archived_messages, too_old); //ES6 adds spread operator. I'd use it if I could. - }/* - //Pulling back old messages - } else if(this.messages.length < (this.showingnum - wiggle)) { //Sigh, repopulate old messages - var too_new = this.archived_messages.splice(this.messages.length - (this.showingnum - wiggle)); - Array.prototype.shift.apply(this.messages, too_new); - } - */ - }, - apply_filter: function(cat_array) { - //Clean up the array - this.shown_messages.splice(0); - this.unshown_messages = 0; - - //For each message, try to find it's category in the categories we're showing - this.messages.forEach( function(msg){ - if(cat_array.indexOf(msg.category) > -1) { //Returns the position in the array, and -1 for not found - this.shown_messages.push(msg); - } - }, this); - - //For each message, try to find it's category in the categories we're showing - this.archived_messages.forEach( function(msg){ - if(cat_array.indexOf(msg.category) > -1) { //Returns the position in the array, and -1 for not found - this.unshown_messages++; - } - }, this); - }, - //Push a new message into our array - add_message: function(message) { - //IE doesn't support the 'class' syntactic sugar so we're left making our own object. - let newmessage = { - time: message.time, - category: "error", - content: message.message, - repeats: 1 - }; - - //Get a category - newmessage.category = this.get_category(newmessage.content); - - //Put it in unsorted blocks - if (newmessage.category == "vc_unsorted") { - newmessage.content = "" + newmessage.content + ""; - } - - //Try to crush it with one of the last few - if(this.crushing) { - let crushwith = this.messages.slice(-(this.crushing)); - for (let i = crushwith.length - 1; i >= 0; i--) { - let oldmessage = crushwith[i]; - if(oldmessage.content == newmessage.content) { - newmessage.repeats += oldmessage.repeats; - this.messages.splice(this.messages.indexOf(oldmessage), 1); - } - } - } - - newmessage.content = newmessage.content.replace( - /(\b(https?):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|])/img, //Honestly good luck with this regex ~Gear - '$1'); - - //Unread indicator and insertion into current tab shown messages if sensible - if(this.current_categories.length && (this.current_categories.indexOf(newmessage.category) < 0)) { //Not in the current categories - if (isNaN(this.unread_messages[newmessage.category])) { - this.unread_messages[newmessage.category] = 0; - } - this.unread_messages[newmessage.category] += 1; - } else if(this.current_categories.length) { //Is in the current categories - this.shown_messages.push(newmessage); - } - - //Append to vue's messages - newmessage.id = ++vchat_state.lastId; - this.attempt_archive(); - this.messages.push(newmessage); - }, - //Push an internally generated message into our array - internal_message: function(message) { - let newmessage = { - time: this.messages.length ? this.messages.slice(-1).time+1 : 0, - category: "vc_system", - content: "[VChat Internal] " + message + "" - }; - newmessage.id = ++vchat_state.lastId; - this.messages.push(newmessage); - }, - on_mouseup: function(event) { - // Focus map window on mouseup so hotkeys work. Exception for if they highlighted text or clicked an input. - let ele = event.target; - let textSelected = ('getSelection' in window) && window.getSelection().isCollapsed === false; - if (!textSelected && !(ele && (ele.tagName === 'INPUT' || ele.tagName === 'TEXTAREA'))) { - focusMapWindow(); - // Okay focusing map window appears to prevent click event from being fired. So lets do it ourselves. - event.preventDefault(); - event.target.click(); - } - }, - click_message: function(event) { - let ele = event.target; - if(ele.tagName === "A") { - event.stopPropagation(); - event.preventDefault ? event.preventDefault() : (event.returnValue = false); //The second one is the weird IE method. - - var href = ele.getAttribute('href'); // Gets actual href without transformation into fully qualified URL - - if (href[0] == '?' || (href.length >= 8 && href.substring(0,8) == "byond://")) { - window.location = href; //Internal byond link - } else { //It's an external link - window.location = "byond://?action=openLink&link="+encodeURIComponent(href); - } - } - }, - //Derive a vchat category based on css classes - get_category: function(message) { - if(!vchat_state.ready) { - push_Topic('not_ready'); - return; - } - - let doc = domparser.parseFromString(message, 'text/html'); - let evaluating = doc.querySelector('span'); - - let category = "vc_unsorted"; //What we use if the classes aren't anything we know. - if(!evaluating) return category; - this.type_table.find( function(type) { - if(evaluating.msMatchesSelector(type.matches)) { - category = type.becomes; - return true; - } - }); - - return category; - }, - save_chatlog: function() { - var textToSave = ""; - - var messagesToSave = this.archived_messages.concat(this.messages); - var cats = this.current_categories; - - messagesToSave.forEach( function(message) { - if(cats.length == 0 || (cats.indexOf(message.category) >= 0)) { //only in the active tab - textToSave += message.content; - if(message.repeats > 1) { - textToSave += "(x"+message.repeats+")"; - } - textToSave += "
\n"; - } - }); - textToSave += ""; - - var fileprefix = "log"; - var extension =".html"; - - var now = new Date(); - var hours = String(now.getHours()); - if(hours.length < 2) { - hours = "0" + hours; - } - var minutes = String(now.getMinutes()); - if(minutes.length < 2) { - minutes = "0" + minutes; - } - var dayofmonth = String(now.getDate()); - if(dayofmonth.length < 2) { - dayofmonth = "0" + dayofmonth; - } - var month = String(now.getMonth()+1); //0-11 - if(month.length < 2) { - month = "0" + month; - } - var year = String(now.getFullYear()); - var datesegment = " "+year+"-"+month+"-"+dayofmonth+" ("+hours+" "+minutes+")"; - - var filename = fileprefix+datesegment+extension; - - //Unlikely to work unfortunately, not supported in any version of IE, only Edge - var hiddenElement = document.createElement('a'); - if (hiddenElement.download !== undefined) { - hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave); //Has a problem in byond 512 due to weird unicode handling - hiddenElement.target = '_blank'; - hiddenElement.download = filename; - hiddenElement.click(); - //Probably what will end up getting used - } else { - var blob = new Blob([textToSave], {type: 'text/html;charset=utf8;'}); - saved = window.navigator.msSaveOrOpenBlob(blob, filename); - } - }, - do_latency_test: function() { - send_latency_check(); - }, - blur_this: function(event) { - event.target.blur(); - } - } - }); -} - -/*********** -* -* Actual Methods -* -************/ -function check_ping() { - var time_ago = Date.now() - vchat_state.lastPingReceived; - if(time_ago > vchat_opts.msBeforeDropped) - vueapp.reconnecting = true; -} - -//Send a 'ping' to byond -function send_latency_check() { - if(vchat_state.latency_sent) - return; - - vchat_state.latency_sent = Date.now(); - vueapp.latency = "?"; - push_Topic("ping"); - setTimeout(function() { - if(vchat_state.latency_ms == "?") { - vchat_state.latency_ms = 999; - } - }, 1000); // 1 second to reply otherwise we mark it as bad - setTimeout(function() { - vchat_state.latency_sent = 0; - vueapp.latency = 0; - }, 5000); //5 seconds to display ping time overall -} - -function get_latency_check() { - if(!vchat_state.latency_sent) { - return; //Too late - } - - vueapp.latency = Date.now() - vchat_state.latency_sent; -} - -//We accept double-url-encoded JSON strings because Byond is garbage and UTF-8 encoded url_encode() text has crazy garbage in it. -function byondDecode(message) { - - //Byond encodes spaces as pluses?! This is 1998 I guess. - message = message.replace(/\+/g, "%20"); - try { - message = decodeURIComponent(message); - } catch (err) { - message = unescape(message); - } - return JSON.parse(message); -} - -//This is the function byond actually communicates with using byond's client << output() method. -function putmessage(messages) { - messages = byondDecode(messages); - if (Array.isArray(messages)) { - messages.forEach(function(message) { - vueapp.add_message(message); - }); - } else if (typeof messages === 'object') { - vueapp.add_message(messages); - } -} - -//Send an internal message generated in the javascript -function system_message(message) { - vueapp.internal_message(message); -} - -//This is the other direction of communication, to push a Topic message back -function push_Topic(topic_uri) { - window.location = '?_src_=chat&proc=' + topic_uri; //Yes that's really how it works. -} - -// Send the showingnum back to byond -function push_Topic_showingnum(topic_num) { - window.location = '?_src_=chat&showingnum=' + topic_num; -} - -//Tells byond client to focus the main map window. -function focusMapWindow() { - window.location = 'byond://winset?mapwindow.map.focus=true'; -} - -//Debug event -function send_debug(message) { - push_Topic("debug¶m[message]="+encodeURIComponent(message)); -} - -//A side-channel to send events over that aren't just chat messages, if necessary. -function get_event(event) { - if(!vchat_state.ready) { - push_Topic("not_ready"); - return; - } - - var parsed_event = {evttype: 'internal_error', event: event}; - parsed_event = byondDecode(event); - - switch(parsed_event.evttype) { - //We didn't parse it very well - case 'internal_error': - system_message("Event parse error: " + event); - break; - - //They provided byond data. - case 'byond_player': - send_client_data(); - vueapp.is_admin = (parsed_event.admin === 'true'); - vchat_state.byond_ip = parsed_event.address; - vchat_state.byond_cid = parsed_event.cid; - vchat_state.byond_ckey = parsed_event.ckey; - set_storage("ip",vchat_state.byond_ip); - set_storage("cid",vchat_state.byond_cid); - set_storage("ckey",vchat_state.byond_ckey); - break; - - //Just a ping. - case 'keepalive': - vchat_state.lastPingReceived = Date.now(); - vueapp.reconnecting = false; - break; - - //Response to a latency test. - case 'pong': - get_latency_check(); - break; - - //The server doesn't know if we're loaded or not (we bail above if we're not, so we must be). - case 'availability': - push_Topic("done_loading"); - break; - - default: - system_message("Didn't know what to do with event: " + event); - } -} - -//Send information retrieved from storage -function send_client_data() { - let client_data = { - ip: get_storage("ip"), - cid: get_storage("cid"), - ckey: get_storage("ckey") - }; - push_Topic("ident¶m[clientdata]="+JSON.stringify(client_data)); -} - -//Newer localstorage methods -function set_localstorage(key, value) { - let localstorage = window.localStorage; - localstorage.setItem(vchat_opts.cookiePrefix+key,value); -} - -function get_localstorage(key, deffo) { - let localstorage = window.localStorage; - let value = localstorage.getItem(vchat_opts.cookiePrefix+key); - - //localstorage only stores strings. - if(value === "null" || value === null) { - value = deffo; - //Coerce bools back into their native forms - } else if(value === "true") { - value = true; - } else if(value === "false") { - value = false; - //Coerce numbers back into numerical form - } else if(!isNaN(value)) { - value = +value; - } - return value; -} - -//Older cookie methods -function set_cookie(key, value) { - let now = new Date(); - now.setFullYear(now.getFullYear() + 1); - let then = now.toUTCString(); - document.cookie = vchat_opts.cookiePrefix+key+"="+value+";expires="+then+";path=/"; -} - -function get_cookie(key, deffo) { - var candidates = {cookie: null, localstorage: null, indexeddb: null}; - let cookie_array = document.cookie.split(';'); - let cookie_object = {}; - cookie_array.forEach( function(element) { - let clean = element.replace(vchat_opts.cookiePrefix,"").trim(); //Strip the prefix, trim whitespace - let equals = clean.search("="); //Find the equals - let left = decodeURIComponent(clean.substring(0,equals)); //From start to one char before equals - let right = decodeURIComponent(clean.substring(equals+1)); //From one char after equals to end - //cookies only stores strings. - if(right == "null" || right === null) { - right = deffo; - } else if(right === "true") { - right = true; - } else if(right === "false") { - right = false; - } else if(!isNaN(right)) { - right = +right; - } - cookie_object[left] = right; //Stick into object - }); - candidates.cookie = cookie_object[key]; //Return value of that key in our object (or undefined) -} - -// Button Controls that need background-color and text-color set. -var SKIN_BUTTONS = [ - /* Rpane */ "rpane.textb", "rpane.infob", "rpane.wikib", "rpane.forumb", "rpane.rulesb", "rpane.github", "rpane.discord", "rpane.mapb", "rpane.changelog", - /* Mainwindow */ "mainwindow.saybutton", "mainwindow.mebutton", "mainwindow.hotkey_toggle" - -]; -// Windows or controls that need background-color set. -var SKIN_ELEMENTS = [ - /* Mainwindow */ "mainwindow", "mainwindow.mainvsplit", "mainwindow.tooltip", - /* Rpane */ "rpane", "rpane.rpanewindow", "rpane.mediapanel", -]; - -function switch_ui_mode(options) { - doWinset(SKIN_BUTTONS.reduce(function(params, ctl) {params[ctl + ".background-color"] = options.buttonBgColor; return params;}, {})); - doWinset(SKIN_BUTTONS.reduce(function(params, ctl) {params[ctl + ".text-color"] = options.buttonTextColor; return params;}, {})); - doWinset(SKIN_ELEMENTS.reduce(function(params, ctl) {params[ctl + ".background-color"] = options.windowBgColor; return params;}, {})); - doWinset("statwindow", { - "background-color": options.tabBackgroundColor, - "text-color": options.tabTextColor - }); - doWinset("stat", { - "background-color": options.tabBackgroundColor, - "tab-background-color": options.tabBackgroundColor, - "text-color": options.tabTextColor, - "tab-text-color": options.tabTextColor, - "prefix-color": options.tabTextColor, - "suffix-color": options.tabTextColor - }) - - if(options.buttonBgColor == "#40628a") { - push_Topic("set_theme¶m[theme]=dark") - } else { - push_Topic("set_theme¶m[theme]=light") - } -} - -function doWinset(control_id, params) { - if (typeof params === 'undefined') { - params = control_id; // Handle single-argument use case. - control_id = null; - } - var url = "byond://winset?"; - if (control_id) { - url += ("id=" + control_id + "&"); - } - url += Object.keys(params).map(function(ctl) { - return ctl + "=" + encodeURIComponent(params[ctl]); - }).join("&"); - window.location = url; -} diff --git a/code/modules/vchat/js/vchat.min.js b/code/modules/vchat/js/vchat.min.js deleted file mode 100644 index e8c0c2a515..0000000000 --- a/code/modules/vchat/js/vchat.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var e=console.log;console.log=function(t){send_debug(t),e.apply(console,arguments)};var t=console.error;console.error=function(e){send_debug(e),t.apply(console,arguments)},window.onerror=function(e,t,s,a,o){var n="";return o&&o.stack&&(n=o.stack),send_debug(e+" ("+t+"@"+s+":"+a+") "+o+"|UA: "+navigator.userAgent+"|Stack: "+n),!0}}();var vchat_opts={msBeforeDropped:3e4,cookiePrefix:"vst-",alwaysShow:["vc_adminpm","vc_system"],vchatTabsVer:1},DARKMODE_COLORS={buttonBgColor:"#40628a",buttonTextColor:"#FFFFFF",windowBgColor:"#272727",highlightColor:"#009900",tabTextColor:"#FFFFFF",tabBackgroundColor:"#272727"},LIGHTMODE_COLORS={buttonBgColor:"none",buttonTextColor:"#000000",windowBgColor:"none",highlightColor:"#007700",tabTextColor:"#000000",tabBackgroundColor:"none"},set_storage=set_cookie,get_storage=get_cookie,domparser=new DOMParser;storageAvailable("localStorage")&&(set_storage=set_localstorage,get_storage=get_localstorage);var vueapp,vchat_state={ready:!1,byond_ip:null,byond_cid:null,byond_ckey:null,lastPingReceived:0,latency_sent:0,lastId:0};function start_vchat(){start_vue(),vchat_state.ready=!0,push_Topic("done_loading"),push_Topic_showingnum(this.showingnum),doWinset("htmloutput",{"is-visible":!0}),doWinset("oldoutput",{"is-visible":!1}),doWinset("chatloadlabel",{"is-visible":!1}),setInterval(check_ping,vchat_opts.msBeforeDropped),send_debug("VChat Loaded!")}function start_vue(){vueapp=new Vue({el:"#app",data:{messages:[],shown_messages:[],unshown_messages:0,archived_messages:[],tabs:[{name:"Main",categories:[],immutable:!0,active:!0}],unread_messages:{},editing:!1,paused:!1,latency:0,reconnecting:!1,ext_styles:"",is_admin:!1,inverted:!1,crushing:3,animated:!1,fontsize:.9,lineheight:130,showingnum:200,type_table:[{matches:".filter_say, .say, .emote, .emotesubtle",becomes:"vc_localchat",pretty:"Local Chat",tooltip:"In-character local messages (say, emote, etc)",required:!1,admin:!1},{matches:".filter_radio, .alert, .syndradio, .centradio, .airadio, .entradio, .comradio, .secradio, .engradio, .medradio, .sciradio, .supradio, .srvradio, .expradio, .radio, .deptradio, .newscaster",becomes:"vc_radio",pretty:"Radio Comms",tooltip:"All departments of radio messages",required:!1,admin:!1},{matches:".filter_notice, .notice:not(.pm), .adminnotice, .info, .sinister, .cult",becomes:"vc_info",pretty:"Notices",tooltip:"Non-urgent messages from the game and items",required:!1,admin:!1},{matches:".filter_warning, .warning:not(.pm), .critical, .userdanger, .italics",becomes:"vc_warnings",pretty:"Warnings",tooltip:"Urgent messages from the game and items",required:!1,admin:!1},{matches:".valert, .vwarning, .vnotice, .vdanger",becomes:"vc_vore_message",pretty:"Vore Messages",tooltip:"Vore Messages",required:!1,admin:!1},{matches:".filter_deadsay, .deadsay",becomes:"vc_deadchat",pretty:"Deadchat",tooltip:"All of deadchat",required:!1,admin:!1},{matches:".filter_pray",becomes:"vc_pray",pretty:"Pray",tooltip:"Prayer messages",required:!1,admin:!1},{matches:".ooc, .filter_ooc",becomes:"vc_globalooc",pretty:"Global OOC",tooltip:"The bluewall of global OOC messages",required:!1,admin:!1},{matches:".nif",becomes:"vc_nif",pretty:"NIF Messages",tooltip:"Messages from the NIF itself and people inside",required:!1,admin:!1},{matches:".psay, .pemote",becomes:"vc_pmessage",pretty:"Pred/Prey Messages",tooltip:"Messages from / to absorbed or dominated prey",required:!1,admin:!1},{matches:".mentor_channel, .mentor",becomes:"vc_mentor",pretty:"Mentor messages",tooltip:"Mentorchat and mentor pms",required:!1,admin:!1},{matches:".filter_pm, .pm",becomes:"vc_adminpm",pretty:"Admin PMs",tooltip:"Messages to/from admins ('adminhelps'), always enabled",required:!0,admin:!1},{matches:".filter_ASAY, .admin_channel",becomes:"vc_adminchat",pretty:"Admin Chat",tooltip:"ASAY messages",required:!1,admin:!0},{matches:".filter_MSAY, .mod_channel",becomes:"vc_modchat",pretty:"Mod Chat",tooltip:"MSAY messages",required:!1,admin:!0},{matches:".filter_ESAY, .event_channel",becomes:"vc_eventchat",pretty:"Event Chat",tooltip:"ESAY messages",required:!1,admin:!0},{matches:".filter_combat, .danger",becomes:"vc_combat",pretty:"Combat Logs",tooltip:"Urist McTraitor has stabbed you with a knife!",required:!1,admin:!1},{matches:".filter_adminlogs, .log_message",becomes:"vc_adminlogs",pretty:"Admin Logs",tooltip:"ADMIN LOG: Urist McAdmin has jumped to coordinates X, Y, Z",required:!1,admin:!0},{matches:".filter_attacklogs",becomes:"vc_attacklogs",pretty:"Attack Logs",tooltip:"Urist McTraitor has shot John Doe",required:!1,admin:!0},{matches:".filter_debuglogs",becomes:"vc_debuglogs",pretty:"Debug Logs",tooltip:"DEBUG: SSPlanets subsystem Recover().",required:!1,admin:!0},{matches:".looc",becomes:"vc_looc",pretty:"Local OOC",tooltip:"Local OOC messages",required:!1},{matches:".rlooc",becomes:"vc_rlooc",pretty:"Remote LOOC",tooltip:"Remote LOOC messages",required:!1,admin:!0},{matches:".boldannounce, .filter_system",becomes:"vc_system",pretty:"System Messages",tooltip:"Messages from your client, always enabled",required:!0},{matches:".unsorted",becomes:"vc_unsorted",pretty:"Unsorted",tooltip:"Messages that don't have any filters.",required:!1,admin:!1}]},mounted:function(){this.load_settings();var e=new XMLHttpRequest;e.open("GET","ss13styles.css"),e.onreadystatechange=function(){this.ext_styles=e.responseText}.bind(this),e.send()},updated:function(){this.editing||this.paused||window.scrollTo(0,document.getElementById("messagebox").scrollHeight)},watch:{reconnecting:function(e,t){1==e&&0==t?this.internal_message("Your client has lost connection to the server, or there is severe lag. Your client will reconnect if possible."):0==e&&1==t&&this.internal_message("Your client has reconnected to the server.")},inverted:function(e){set_storage("darkmode",e),e?(document.body.classList.add("inverted"),switch_ui_mode(DARKMODE_COLORS)):(document.body.classList.remove("inverted"),switch_ui_mode(LIGHTMODE_COLORS))},crushing:function(e){set_storage("crushing",e)},animated:function(e){set_storage("animated",e)},fontsize:function(e,t){isNaN(e)?this.fontsize=t:(e<.2?this.fontsize=.2:e>5&&(this.fontsize=5),set_storage("fontsize",e))},lineheight:function(e,t){isFinite(e)?(e<100?this.lineheight=100:e>200&&(this.lineheight=200),set_storage("lineheight",e)):this.lineheight=t},showingnum:function(e,t){isFinite(e)?((e=Math.floor(e))<50?this.showingnum=50:e>2e3&&(this.showingnum=2e3),set_storage("showingnum",this.showingnum),push_Topic_showingnum(this.showingnum),this.attempt_archive()):this.showingnum=t},current_categories:function(e,t){e.length&&this.apply_filter(e)}},computed:{active_tab:function(){return this.tabs.find((function(e){return e.active}))},ping_classes:function(){return this.latency?"?"==this.latency?"grey":this.latency<0?"red":this.latency<=200?"green":this.latency<=400?"yellow":"grey":this.reconnecting?"red":"green"},current_categories:function(){return this.active_tab==this.tabs[0]?[]:this.active_tab.categories.concat(vchat_opts.alwaysShow)}},methods:{load_settings:function(){this.inverted=get_storage("darkmode",!1),this.crushing=get_storage("crushing",3),this.animated=get_storage("animated",!1),this.fontsize=get_storage("fontsize",.9),this.lineheight=get_storage("lineheight",130),this.showingnum=get_storage("showingnum",200),isNaN(this.crushing)&&(this.crushing=3),isNaN(this.fontsize)&&(this.fontsize=.9),this.load_tabs()},load_tabs:function(){var e=get_storage("tabs");if(e){var t=JSON.parse(e);t.version&&t.tabs?!t.version!=vchat_opts.vchatTabsVer?this.tabs.push.apply(this.tabs,t.tabs):this.internal_message("Your saved tabs are for an older version of VChat and must be recreated, sorry."):this.internal_message("There was a problem loading your tabs. Any new ones you make will be saved, however.")}},save_tabs:function(){var e={version:vchat_opts.vchatTabsVer,tabs:[]};this.tabs.forEach((function(t){if(!t.immutable){var s=t.name,a=[];t.categories.forEach((function(e){a.push(e)}));var o={name:s,categories:a,immutable:!1,active:!1};e.tabs.push(o)}}));var t=JSON.stringify(e);set_storage("tabs",t)},switchtab:function(e){e!=this.active_tab&&(this.active_tab.active=!1,e.active=!0,e.categories.forEach((function(e){this.unread_messages[e]=0}),this),this.apply_filter(this.current_categories))},editmode:function(){this.editing=!this.editing,this.save_tabs()},pause:function(){this.paused=!this.paused},newtab:function(){this.tabs.push({name:"New Tab",categories:[],immutable:!1,active:!1}),this.switchtab(this.tabs[this.tabs.length-1])},renametab:function(){if(!this.active_tab.immutable){var e=this.active_tab,t=window.prompt("Type the desired tab name:",e.name);null!==t&&""!==t&&null!==e&&(e.name=t)}},deltab:function(e){e||(e=this.active_tab),e.immutable||(this.switchtab(this.tabs[0]),this.tabs.splice(this.tabs.indexOf(e),1))},movetab:function(e,t){if(e&&!e.immutable){var s=this.tabs.indexOf(e),a=s+t;this.tabs.splice(a,0,this.tabs.splice(s,1)[0])}},tab_unread_count:function(e){var t=0,s=this.unread_messages;return e.categories.find((function(e){s[e]&&(t+=s[e])})),t},tab_unread_categories:function(e){var t=!1,s=this.unread_messages;return e.categories.find((function(e){if(s[e])return t=!0,!0})),{red:t,grey:!t}},attempt_archive:function(){if(this.messages.length>this.showingnum){var e=this.messages.splice(0,20);Array.prototype.push.apply(this.archived_messages,e)}},apply_filter:function(e){this.shown_messages.splice(0),this.unshown_messages=0,this.messages.forEach((function(t){e.indexOf(t.category)>-1&&this.shown_messages.push(t)}),this),this.archived_messages.forEach((function(t){e.indexOf(t.category)>-1&&this.unshown_messages++}),this)},add_message:function(e){let t={time:e.time,category:"error",content:e.message,repeats:1};if(t.category=this.get_category(t.content),"vc_unsorted"==t.category&&(t.content=""+t.content+""),this.crushing){let e=this.messages.slice(-this.crushing);for(let s=e.length-1;s>=0;s--){let a=e[s];a.content==t.content&&(t.repeats+=a.repeats,this.messages.splice(this.messages.indexOf(a),1))}}t.content=t.content.replace(/(\b(https?):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|])/gim,'$1'),this.current_categories.length&&this.current_categories.indexOf(t.category)<0?(isNaN(this.unread_messages[t.category])&&(this.unread_messages[t.category]=0),this.unread_messages[t.category]+=1):this.current_categories.length&&this.shown_messages.push(t),t.id=++vchat_state.lastId,this.attempt_archive(),this.messages.push(t)},internal_message:function(e){let t={time:this.messages.length?this.messages.slice(-1).time+1:0,category:"vc_system",content:"[VChat Internal] "+e+""};t.id=++vchat_state.lastId,this.messages.push(t)},on_mouseup:function(e){let t=e.target;"getSelection"in window&&!1===window.getSelection().isCollapsed||t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName)||(focusMapWindow(),e.preventDefault(),e.target.click())},click_message:function(e){let t=e.target;if("A"===t.tagName){e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1;var s=t.getAttribute("href");"?"==s[0]||s.length>=8&&"byond://"==s.substring(0,8)?window.location=s:window.location="byond://?action=openLink&link="+encodeURIComponent(s)}},get_category:function(e){if(!vchat_state.ready)return void push_Topic("not_ready");let t=domparser.parseFromString(e,"text/html").querySelector("span"),s="vc_unsorted";return t?(this.type_table.find((function(e){if(t.msMatchesSelector(e.matches))return s=e.becomes,!0})),s):s},save_chatlog:function(){var e="",t=this.archived_messages.concat(this.messages),s=this.current_categories;t.forEach((function(t){(0==s.length||s.indexOf(t.category)>=0)&&(e+=t.content,t.repeats>1&&(e+="(x"+t.repeats+")"),e+="
\n")})),e+="";var a=new Date,o=String(a.getHours());o.length<2&&(o="0"+o);var n=String(a.getMinutes());n.length<2&&(n="0"+n);var i=String(a.getDate());i.length<2&&(i="0"+i);var r=String(a.getMonth()+1);r.length<2&&(r="0"+r);var c="log"+(" "+String(a.getFullYear())+"-"+r+"-"+i+" ("+o+" "+n+")")+".html",l=document.createElement("a");if(void 0!==l.download)l.href="data:attachment/text,"+encodeURI(e),l.target="_blank",l.download=c,l.click();else{var d=new Blob([e],{type:"text/html;charset=utf8;"});saved=window.navigator.msSaveOrOpenBlob(d,c)}},do_latency_test:function(){send_latency_check()},blur_this:function(e){e.target.blur()}}})}function check_ping(){Date.now()-vchat_state.lastPingReceived>vchat_opts.msBeforeDropped&&(vueapp.reconnecting=!0)}function send_latency_check(){vchat_state.latency_sent||(vchat_state.latency_sent=Date.now(),vueapp.latency="?",push_Topic("ping"),setTimeout((function(){"?"==vchat_state.latency_ms&&(vchat_state.latency_ms=999)}),1e3),setTimeout((function(){vchat_state.latency_sent=0,vueapp.latency=0}),5e3))}function get_latency_check(){vchat_state.latency_sent&&(vueapp.latency=Date.now()-vchat_state.latency_sent)}function byondDecode(e){e=e.replace(/\+/g,"%20");try{e=decodeURIComponent(e)}catch(t){e=unescape(e)}return JSON.parse(e)}function putmessage(e){e=byondDecode(e),Array.isArray(e)?e.forEach((function(e){vueapp.add_message(e)})):"object"==typeof e&&vueapp.add_message(e)}function system_message(e){vueapp.internal_message(e)}function push_Topic(e){window.location="?_src_=chat&proc="+e}function push_Topic_showingnum(e){window.location="?_src_=chat&showingnum="+e}function focusMapWindow(){window.location="byond://winset?mapwindow.map.focus=true"}function send_debug(e){push_Topic("debug¶m[message]="+encodeURIComponent(e))}function get_event(e){if(vchat_state.ready){var t;switch((t=byondDecode(e)).evttype){case"internal_error":system_message("Event parse error: "+e);break;case"byond_player":send_client_data(),vueapp.is_admin="true"===t.admin,vchat_state.byond_ip=t.address,vchat_state.byond_cid=t.cid,vchat_state.byond_ckey=t.ckey,set_storage("ip",vchat_state.byond_ip),set_storage("cid",vchat_state.byond_cid),set_storage("ckey",vchat_state.byond_ckey);break;case"keepalive":vchat_state.lastPingReceived=Date.now(),vueapp.reconnecting=!1;break;case"pong":get_latency_check();break;case"availability":push_Topic("done_loading");break;default:system_message("Didn't know what to do with event: "+e)}}else push_Topic("not_ready")}function send_client_data(){let e={ip:get_storage("ip"),cid:get_storage("cid"),ckey:get_storage("ckey")};push_Topic("ident¶m[clientdata]="+JSON.stringify(e))}function set_localstorage(e,t){window.localStorage.setItem(vchat_opts.cookiePrefix+e,t)}function get_localstorage(e,t){let s=window.localStorage.getItem(vchat_opts.cookiePrefix+e);return"null"===s||null===s?s=t:"true"===s?s=!0:"false"===s?s=!1:isNaN(s)||(s=+s),s}function set_cookie(e,t){let s=new Date;s.setFullYear(s.getFullYear()+1);let a=s.toUTCString();document.cookie=vchat_opts.cookiePrefix+e+"="+t+";expires="+a+";path=/"}function get_cookie(e,t){let s=document.cookie.split(";"),a={};s.forEach((function(e){let s=e.replace(vchat_opts.cookiePrefix,"").trim(),o=s.search("="),n=decodeURIComponent(s.substring(0,o)),i=decodeURIComponent(s.substring(o+1));"null"==i||null===i?i=t:"true"===i?i=!0:"false"===i?i=!1:isNaN(i)||(i=+i),a[n]=i})),a[e]}var SKIN_BUTTONS=["rpane.textb","rpane.infob","rpane.wikib","rpane.forumb","rpane.rulesb","rpane.github","rpane.discord","rpane.mapb","rpane.changelog","mainwindow.saybutton","mainwindow.mebutton","mainwindow.hotkey_toggle"],SKIN_ELEMENTS=["mainwindow","mainwindow.mainvsplit","mainwindow.tooltip","rpane","rpane.rpanewindow","rpane.mediapanel"];function switch_ui_mode(e){doWinset(SKIN_BUTTONS.reduce((function(t,s){return t[s+".background-color"]=e.buttonBgColor,t}),{})),doWinset(SKIN_BUTTONS.reduce((function(t,s){return t[s+".text-color"]=e.buttonTextColor,t}),{})),doWinset(SKIN_ELEMENTS.reduce((function(t,s){return t[s+".background-color"]=e.windowBgColor,t}),{})),doWinset("infowindow",{"background-color":e.tabBackgroundColor,"text-color":e.tabTextColor}),doWinset("infowindow.info",{"background-color":e.tabBackgroundColor,"text-color":e.tabTextColor,"highlight-color":e.highlightColor,"tab-text-color":e.tabTextColor,"tab-background-color":e.tabBackgroundColor})}function doWinset(e,t){void 0===t&&(t=e,e=null);var s="byond://winset?";e&&(s+="id="+e+"&"),s+=Object.keys(t).map((function(e){return e+"="+encodeURIComponent(t[e])})).join("&"),window.location=s} diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm deleted file mode 100644 index 925ac8a153..0000000000 --- a/code/modules/vchat/vchat_client.dm +++ /dev/null @@ -1,430 +0,0 @@ -//The 'V' is for 'VORE' but you can pretend it's for Vue.js if you really want. - -//These are sent to the client via browse_rsc() in advance so the HTML can access them. -GLOBAL_LIST_INIT(vchatFiles, list( - "code/modules/vchat/css/vchat-font-embedded.css", - "code/modules/vchat/css/semantic.min.css", - "code/modules/vchat/css/ss13styles.css", - "code/modules/vchat/js/polyfills.min.js", - "code/modules/vchat/js/vue.min.js", - "code/modules/vchat/js/vchat.min.js" -)) - -// The to chat macro calls this proc, deprecated -/proc/__to_chat(var/target, var/message) - // First do logging in database - if(isclient(target)) - var/client/C = target - vchat_add_message(C.ckey, message) - else if(ismob(target)) - var/mob/M = target - if(M.ckey) - vchat_add_message(M.ckey, message) - else if(target == world) - for(var/client/C in GLOB.clients) - if(!QDESTROYING(C)) // Might be necessary? - vchat_add_message(C.ckey, message) - - // Now lets either queue it for sending, or send it right now - if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.subsystem_initialized) - to_chat_immediate(target, world.time, message) - else - SSchat.queue(target, world.time, message) - -//This is used to convert icons to base64 strings, because byond stores icons in base64 in savefiles. -GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of icons for the browser output - -//The main object attached to clients, created when they connect, and has start() called on it in client/New() -/datum/chatOutput - var/client/owner = null - var/loaded = FALSE - var/list/message_queue = list() - var/broken = FALSE - var/resources_sent = FALSE - var/message_buffer = 200 // Number of messages being actively shown to the user, used to play back that many messages on reconnect - - var/last_topic_time = 0 - var/too_many_topics = 0 - var/topic_spam_limit = 10 //Just enough to get over the startup and such - -/datum/chatOutput/New(client/C) - . = ..() - - owner = C - -/datum/chatOutput/Destroy() - owner = null - . = ..() - -/datum/chatOutput/proc/update_vis() - if(!loaded && !broken) - winset(owner, null, "outputwindow.htmloutput.is-visible=false;outputwindow.oldoutput.is-visible=false;outputwindow.chatloadlabel.is-visible=true") - else if(broken) - winset(owner, null, "outputwindow.htmloutput.is-visible=false;outputwindow.oldoutput.is-visible=true;outputwindow.chatloadlabel.is-visible=false") - else if(loaded) - return //It can do it's own winsets from inside the JS if it's working. - -//Shove all the assets at them -/datum/chatOutput/proc/send_resources() - for(var/filename in GLOB.vchatFiles) - owner << browse_rsc(file(filename)) - resources_sent = TRUE - -//Called from client/New() in a spawn() -/datum/chatOutput/proc/start() - if(!owner) - qdel(src) - return FALSE - - if(!winexists(owner, "htmloutput")) - tgui_alert_async(owner, "Updated chat window does not exist. If you are using a custom skin file please allow the game to update.") - become_broken() - return FALSE - - if(!owner?.is_preference_enabled(/datum/client_preference/vchat_enable)) - become_broken() - return FALSE - - //Could be loaded from a previous round, are you still there? - if(winget(owner,"outputwindow.htmloutput","is-visible") == "true") //Winget returns strings - send_event(event = list("evttype" = "availability")) - sleep(3 SECONDS) - - if(!owner) // In case the client vanishes before winexists returns - qdel(src) - return FALSE - - if(!loaded) - update_vis() - if(!resources_sent) - send_resources() - load() - - return TRUE - -//Attempts to actually load the HTML page into the client's UI -/datum/chatOutput/proc/load() - if(!owner) - qdel(src) - return - - owner << browse(file2text("code/modules/vchat/html/vchat.html"), "window=htmloutput") - - //Check back later - spawn(15 SECONDS) - if(!src) - return - if(!src.loaded) - src.become_broken() - -//var/list/joins = list() //Just for testing with the below -//Called by Topic, when the JS in the HTML page finishes loading -/datum/chatOutput/proc/done_loading() - if(loaded) - return - - loaded = TRUE - broken = FALSE - owner.chatOutputLoadedAt = world.time - - //update_vis() //It does it's own winsets - ping_cycle() - send_playerinfo() - load_database() - - add_verb(owner, /client/proc/vchat_export_log) - -//Perform DB shenanigans -/datum/chatOutput/proc/load_database() - set waitfor = FALSE - // Only send them the number of buffered messages, instead of the ENTIRE log - var/list/results = vchat_get_messages(owner.ckey, message_buffer) //If there's bad performance on reconnects, look no further - if(islist(results)) - for(var/i in results.len to 1 step -1) - var/list/message = results[i] - var/count = 10 - to_chat_immediate(owner, message["time"], message["message"]) - count++ - if(count >= 10) - count = 0 - CHECK_TICK - -//It din work -/datum/chatOutput/proc/become_broken() - broken = TRUE - loaded = FALSE - - if(!owner) - qdel(src) - return - - update_vis() - - spawn() - if(owner.is_preference_enabled(/datum/client_preference/vchat_enable)) - tgui_alert_async(owner,"VChat didn't load after some time. Switching to use oldchat as a fallback. Try using 'Reload VChat' verb in OOC verbs, or reconnecting to try again.") - -//Provide the JS with who we are -/datum/chatOutput/proc/send_playerinfo() - if(!owner) - qdel(src) - return - - var/list/playerinfo = list("evttype" = "byond_player", "cid" = owner.computer_id, "ckey" = owner.ckey, "address" = owner.address, "admin" = owner.holder ? "true" : "false") - send_event(playerinfo) - -//Ugh byond doesn't handle UTF-8 well so we have to do this. -/proc/jsEncode(var/list/message) { - if(!islist(message)) - CRASH("Passed a non-list to encode.") - - return url_encode(url_encode(json_encode(message))) -} - -//Send a side-channel event to the chat window -/datum/chatOutput/proc/send_event(var/event, var/client/C = owner) - C << output(jsEncode(event), "htmloutput:get_event") - -//Looping sleeping proc that just pings the client and dies when we die -/datum/chatOutput/proc/ping_cycle() - set waitfor = FALSE - while(!QDELING(src)) - if(!owner) - qdel(src) - return - send_event(event = keep_alive()) - sleep(20 SECONDS) //Make sure this makes sense with what the js client is expecting - -//Just produces a message for using in keepalives from the server to the client -/datum/chatOutput/proc/keep_alive() - return list("evttype" = "keepalive") - -//A response to a latency check from the client -/datum/chatOutput/proc/latency_check() - return list("evttype" = "pong") - -//Redirected from client/Topic when the user clicks a link that pertains directly to the chat (when src == "chat") -/datum/chatOutput/Topic(var/href, var/list/href_list) - if(usr.client != owner) - return 1 - - if(last_topic_time > (world.time - 3 SECONDS)) - too_many_topics++ - if(too_many_topics >= topic_spam_limit) - log_and_message_admins("Kicking [key_name(owner)] - VChat Topic() spam") - to_chat(owner,span_danger("You have been kicked due to VChat sending too many messages to the server. Try reconnecting.")) - qdel(owner) - qdel(src) - return - else - too_many_topics = 0 - last_topic_time = world.time - - var/list/params = list() - for(var/key in href_list) - if(length(key) > 7 && findtext(key, "param")) - var/param_name = copytext(key, 7, -1) - var/item = href_list[key] - params[param_name] = item - - var/data - switch(href_list["proc"]) - if("not_ready") - CRASH("Tried to send a message to [owner.ckey] chatOutput before it was ready!") - if("done_loading") - data = done_loading(arglist(params)) - if("ping") - data = latency_check(arglist(params)) - if("ident") - data = bancheck(arglist(params)) - if("unloading") - loaded = FALSE - if("debug") - data = debugmsg(arglist(params)) - if("set_theme") - usr << output(params["theme"], "statbrowser:set_theme") - - if(href_list["showingnum"]) - message_buffer = CLAMP(text2num(href_list["showingnum"]), 50, 2000) - - if(data) - send_event(event = data) - -//Print a message that was an error from a client -/datum/chatOutput/proc/debugmsg(var/message = "No String Provided") - log_debug("VChat: [owner] got: [message]") - -//Check relevant client info reported from JS -/datum/chatOutput/proc/bancheck(var/clientdata) - var/list/info = json_decode(clientdata) - var/ckey = info["ckey"] - var/ip = info["ip"] - var/cid = info["cid"] - - //Never connected? How sad! - if(!cid && !ip && !ckey) - return - - if(cid && !isnum(cid) && !(cid == "")) - log_and_message_admins("- bancheck with invalid cid! ([cid])", owner) - - if(ip && !findtext(ip, new/regex(@"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$")) && !(ip == "")) - log_and_message_admins("- bancheck with invalid ip! ([ip])", owner) - - var/list/ban = world.IsBanned(key = ckey, address = ip, computer_id = cid) - if(ban) - log_and_message_admins("has a cookie from a banned account! (Cookie: [ckey], [ip], [cid])", owner) - -//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, -// exporting it as text, and then parsing the base64 from that. -// (This relies on byond automatically storing icons in savefiles as base64) -/proc/icon2base64(var/icon/icon, var/iconKey = "misc") - if (!isicon(icon)) return FALSE - - GLOB.iconCache[iconKey] << icon - var/iconData = GLOB.iconCache.ExportText(iconKey) - var/list/partial = splittext(iconData, "{") - return replacetext(copytext(partial[2], 3, -5), "\n", "") - -/proc/expire_bicon_cache(key) - if(GLOB.bicon_cache[key]) - GLOB.bicon_cache -= key - return TRUE - return FALSE - -GLOBAL_LIST_EMPTY(bicon_cache) // Cache of the tag results, not the icons -/proc/icon2html(var/obj, var/use_class = 1, var/custom_classes = "") - var/class = use_class ? "class='icon misc [custom_classes]'" : null - if(!obj) - return - - // Try to avoid passing bicon an /icon directly. It is better to pass it an atom so it can cache. - if(isicon(obj)) // Passed an icon directly, nothing to cache-key on, as icon refs get reused *often* - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = obj - var/key - var/changes_often = ishuman(A) || isobserver(A) // If this ends up with more, move it into a proc or var on atom. - - if(changes_often) - key = "\ref[A]" - else - key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - - var/base64 = GLOB.bicon_cache[key] - // Non-human atom, no cache - if(!base64) // Doesn't exist, make it. - base64 = icon2base64(A.examine_icon(), key) - GLOB.bicon_cache[key] = base64 - if(changes_often) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(expire_bicon_cache), key), 50 SECONDS, TIMER_UNIQUE) - - // May add a class to the img tag created by bicon - if(use_class) - class = "class='icon [A.icon_state] [custom_classes]'" - - return "" - -//Checks if the message content is a valid to_chat message -/proc/is_valid_tochat_message(message) - return istext(message) - -//Checks if the target of to_chat is something we can send to -/proc/is_valid_tochat_target(target) - return !istype(target, /savefile) && (ismob(target) || islist(target) || isclient(target) || target == world) - -var/to_chat_filename -var/to_chat_line -var/to_chat_src - -//This proc is only really used if the SSchat subsystem is unavailable (not started yet) -/proc/to_chat_immediate(target, time, message) - if(!is_valid_tochat_message(message) || !is_valid_tochat_target(target)) - target << message - - // Info about the "message" - if(isnull(message)) - message = "(null)" - else if(istype(message, /datum)) - var/datum/D = message - message = "([D.type]): '[D]'" - else if(!is_valid_tochat_message(message)) - message = "(bad message) : '[message]'" - - // Info about the target - var/targetstring = "'[target]'" - if(istype(target, /datum)) - var/datum/D = target - targetstring += ", [D.type]" - - // The final output - log_debug("to_chat called with invalid message/target: [to_chat_filename], [to_chat_line], [to_chat_src], Message: '[message]', Target: [targetstring]") - return - - else if(is_valid_tochat_message(message)) - if(istext(target)) - log_debug("Somehow, to_chat got a text as a target") - return - - var/original_message = message - message = replacetext(message, "\n", "
") - message = replacetext(message, "\improper", "") - message = replacetext(message, "\proper", "") - - if(isnull(time)) - time = world.time - - var/client/C = CLIENT_FROM_VAR(target) - if(!C) - return // No client? No care. - else if(C.chatOutput.broken) - DIRECT_OUTPUT(C, original_message) - return - else if(!C.chatOutput.loaded) - return // If not loaded yet, do nothing and history-sending on load will get it. - - var/list/tojson = list("time" = time, "message" = message); - target << output(jsEncode(tojson), "htmloutput:putmessage") - -/client/proc/vchat_export_log() - set name = "Export chatlog" - set category = "OOC.Chat" - - if(chatOutput.broken) - to_chat(src, span_warning("Error: VChat isn't processing your messages!")) - return - - var/list/results = vchat_get_messages(ckey) - if(!LAZYLEN(results)) - to_chat(src, span_warning("Error: No messages found! Please inform a dev if you do have messages!")) - return - - var/o_file = "data/chatlog_tmp/[ckey]_chat_log" - if(fexists(o_file) && !fdel(o_file)) - to_chat(src, span_warning("Error: Your chat log is already being prepared. Please wait until it's been downloaded before trying to export it again.")) - return - - // Write the CSS file to the log - var/text_blob = "" - - // Write the messages to the log - for(var/list/result in results) - text_blob += "[result["message"]]
" - CHECK_TICK - - text_blob += "" - - rustg_file_write(text_blob, o_file) - - // Send the log to the client - src << ftp(file(o_file), "log_[time2text(world.timeofday, "YYYY_MM_DD_(hh_mm)")].html") - - // clean up the file on our end - spawn(10 SECONDS) - if(!fdel(o_file)) - spawn(1 MINUTE) - if(!fdel(o_file)) - log_debug("Warning: [ckey]'s chatlog could not be deleted one minute after file transfer was initiated. It is located at 'data/chatlog_tmp/[ckey]_chat_log' and will need to be manually removed.") diff --git a/config/docker/README.md b/config/docker/README.md index 3c1b9b3482..7e1fb0a072 100644 --- a/config/docker/README.md +++ b/config/docker/README.md @@ -1,6 +1,5 @@ ## How to set-up the Docker database - First, open `config/docker/mysql.env.example`, open in notepad or N++, change all the values to something else ~~or don't if you are lazy~~ for security sake. Then proceed to save the changed version to `mysql.env` and save it in the same directory as the `mysql.env.example` file. diff --git a/config/example/jukebox.json b/config/example/jukebox.json index d2baa92532..6863d7059e 100644 --- a/config/example/jukebox.json +++ b/config/example/jukebox.json @@ -1,42 +1,42 @@ [ - { - "url": "https://s.put.re/bkZYkYwX.mp3", - "title": "Flip-Flap (Title One)", - "duration": 1500, - "artist": "X-CEED", - "secret": false, - "lobby": true, - "jukebox": false, - "genre": "Jazz" - }, - { - "url": "https://s.put.re/EzLP21Mp.mp3", - "title": "Robocop Theme (Title Two)", - "duration": 1180, - "artist": "Cboyardee", - "secret": false, - "lobby": true, - "jukebox": false, - "genre": "Electronic" - }, - { - "url": "https://s.put.re/uDpZrL1L.mp3", - "title": "Tin Tin on the Moon (Remix)", - "duration": 2320, - "artist": "Jeroen Tel (Remixed by Cuboos)", - "secret": false, - "lobby": true, - "jukebox": true, - "genre": "Electronic" - }, - { - "url": "https://s.put.re/nNXTd9ko.mp3", - "title": "Phoron Will Make Us Rich", - "duration": 1370, - "artist": "Earthcrusher", - "secret": false, - "lobby": true, - "jukebox": true, - "genre": "Electronic" - } -] \ No newline at end of file + { + "url": "https://s.put.re/bkZYkYwX.mp3", + "title": "Flip-Flap (Title One)", + "duration": 1500, + "artist": "X-CEED", + "secret": false, + "lobby": true, + "jukebox": false, + "genre": "Jazz" + }, + { + "url": "https://s.put.re/EzLP21Mp.mp3", + "title": "Robocop Theme (Title Two)", + "duration": 1180, + "artist": "Cboyardee", + "secret": false, + "lobby": true, + "jukebox": false, + "genre": "Electronic" + }, + { + "url": "https://s.put.re/uDpZrL1L.mp3", + "title": "Tin Tin on the Moon (Remix)", + "duration": 2320, + "artist": "Jeroen Tel (Remixed by Cuboos)", + "secret": false, + "lobby": true, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://s.put.re/nNXTd9ko.mp3", + "title": "Phoron Will Make Us Rich", + "duration": 1370, + "artist": "Earthcrusher", + "secret": false, + "lobby": true, + "jukebox": true, + "genre": "Electronic" + } +] diff --git a/config/example/jukebox_private.json b/config/example/jukebox_private.json index 0637a088a0..fe51488c70 100644 --- a/config/example/jukebox_private.json +++ b/config/example/jukebox_private.json @@ -1 +1 @@ -[] \ No newline at end of file +[] diff --git a/config/example/rules.html b/config/example/rules.html index 9336435a9f..d199248bc9 100644 --- a/config/example/rules.html +++ b/config/example/rules.html @@ -1,8 +1,14 @@ -Server Rules - - - - - - \ No newline at end of file + + Server Rules + + + + + diff --git a/config/example/webhooks.json b/config/example/webhooks.json index fc8ea883fb..947e2c74f4 100644 --- a/config/example/webhooks.json +++ b/config/example/webhooks.json @@ -1,12 +1,12 @@ [ - { - "id" : "webhook_roundend", - "url" : { - "someurl0" : [], - "someurl1" : [], - "someurl2" : "somemention0", - "someurl3" : [ "somemention1", "somemention2" ] - }, - "mentions" : [ "somemention3", "somemention4" ] - } -] + { + "id": "webhook_roundend", + "url": { + "someurl0": [], + "someurl1": [], + "someurl2": "somemention0", + "someurl3": ["somemention1", "somemention2"] + }, + "mentions": ["somemention3", "somemention4"] + } +] diff --git a/config/jukebox.json b/config/jukebox.json index 8ea44c246e..db63003f83 100644 --- a/config/jukebox.json +++ b/config/jukebox.json @@ -1,4481 +1,4481 @@ [ -{ -"url": "https://files.catbox.moe/notc7y.mp3", -"title": "Flip-Flap (Title One)", -"duration": 1500, -"artist": "X-CEED", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/b24m07.mp3", -"title": "Robocop Theme (Title Two)", -"duration": 1180, -"artist": "Cboyardee", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/qn5tdv.mp3", -"title": "Tin Tin on the Moon (Remix)", -"duration": 2450, -"artist": "Jeroen Tel (Remixed by Cuboos)", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/uk3pr2.mp3", -"title": "Phoron Will Make Us Rich", -"duration": 1370, -"artist": "Earthcrusher", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/k25nxo.mp3", -"title": "Spaceman's Dilemma", -"duration": 2080, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/y1dxvn.mp3", -"title": "Banned from Argo", -"duration": 3150, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/zlct4c.mp3", -"title": "Stayin' Alive", -"duration": 2420, -"artist": "The Bee Gees", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/dluppg.m4a", -"title": "Tannhauser Overture", -"duration": 9360, -"artist": "Richard Wagner", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/b4j5jc.m4a", -"title": "Another Song About the Weekend", -"duration": 2250, -"artist": "A Day to Remember", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/n36iy9.m4a", -"title": "Truly Madly Deeply", -"duration": 2770, -"artist": "Savage Garden", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/t88x7z.m4a", -"title": "Adult Education", -"duration": 3230, -"artist": "Hall and Oates", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/k38d32.mp3", -"title": "That's All", -"duration": 2640, -"artist": "Genesis", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/b59gnc.mp3", -"title": "Faith", -"duration": 1580, -"artist": "George Michael", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/twy9ln.m4a", -"title": "Last Christmas", -"duration": 2630, -"artist": "Wham!", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/m00qlo.mp3", -"title": "Dreams", -"duration": 2920, -"artist": "Van Halen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/fwvkr7.m4a", -"title": "Geronimo's Cadillac", -"duration": 1960, -"artist": "Modern Talking", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/py8x5m.m4a", -"title": "Home Sweet Home", -"duration": 2400, -"artist": "Motley Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/ius137.mp3", -"title": "Too Young to Fall in Love", -"duration": 2100, -"artist": "Motley Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/dc6s20.mp3", -"title": "Working for the Weekend", -"duration": 2220, -"artist": "Loverboy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/977069.m4a", -"title": "Miles Away", -"duration": 2520, -"artist": "Winger", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/i5q08z.m4a", -"title": "Run, Sally, Run!", -"duration": 2870, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/34kdfv.mp3", -"title": "Kickstart my Heart", -"duration": 2830, -"artist": "Motley Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/ul3m8e.mp3", -"title": "Bizarre Love Triangle", -"duration": 2610, -"artist": "New Order", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/8f5h2b.mp3", -"title": "Regret", -"duration": 2490, -"artist": "New Order", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/8r1ifw.m4a", -"title": "Rule Britannia Overture", -"duration": 7320, -"artist": "Richard Wagner", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/75o3mo.m4a", -"title": "Da Ya Think I'm Sexy?", -"duration": 3270, -"artist": "Rod Stewart", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/s37xwb.m4a", -"title": "Missing You", -"duration": 2690, -"artist": "John Waite", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/nayw83.mp3", -"title": "Red Velvet", -"duration": 2080, -"artist": "NicolArmarfi", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/m8qpa4.m4a", -"title": "Space Age Love Song", -"duration": 2270, -"artist": "A Flock of Seagulls", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/shjfud.m4a", -"title": "Streets of Laredo", -"duration": 1690, -"artist": "Marty Robbins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/2qdzcj.m4a", -"title": "Crockett's Theme", -"duration": 2040, -"artist": "Jan Hammer", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/8ft96j.m4a", -"title": "Take Me Home", -"duration": 3510, -"artist": "Phil Collins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/q5c942.m4a", -"title": "Moonlight Sonata", -"duration": 8990, -"artist": "Ludwig van Beethoven", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/rlutyi.m4a", -"title": "We Built This City", -"duration": 2960, -"artist": "Starship", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/1rgsqr.m4a", -"title": "A Night on Bald Mountain", -"duration": 6830, -"artist": "Modest Mussorgsky", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/frq3un.m4a", -"title": "Keep on Loving You", -"duration": 2000, -"artist": "REO Speedwagon", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/z3v10u.m4a", -"title": "Lone Star", -"duration": 1470, -"artist": "Lost Weekend Western Swing Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/zg7gkh.m4a", -"title": "In The Shadow of the Valley", -"duration": 1870, -"artist": "Lost Weekend Western Swing Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/v4xtn8.m4a", -"title": "Blue Moon", -"duration": 1710, -"artist": "Frank Sinatra", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/w2ysbr.m4a", -"title": "I Will Wait", -"duration": 2760, -"artist": "Mumford and Sons", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/jim3bp.m4a", -"title": "You Can't Hurry Love", -"duration": 1760, -"artist": "Phil Collins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/r6jh89.m4a", -"title": "Big Iron", -"duration": 2350, -"artist": "Marty Robbins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/h698sa.m4a", -"title": "Overnight Sensation", -"duration": 2380, -"artist": "Firehouse", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/bmik55.mp3", -"title": "Lightnin' Strikes Again", -"duration": 2270, -"artist": "Dokken", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/0e0wmd.m4a", -"title": "Gettin' Jiggy Wit It", -"duration": 2270, -"artist": "Will Smith", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/fm20mk.m4a", -"title": "Lay It Down", -"duration": 2050, -"artist": "Ratt", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/xogao9.m4a", -"title": "Night Fever", -"duration": 2110, -"artist": "The Bee Gees", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/8gvr40.m4a", -"title": "Robot Rock", -"duration": 2870, -"artist": "Daft Punk", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/owzo1t.m4a", -"title": "Space Jam", -"duration": 3040, -"artist": "Quad City DJs", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/t4t9qi.m4a", -"title": "Take Me Home, Country Roads", -"duration": 1980, -"artist": "John Denver", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/il9tge.m4a", -"title": "White Collar Crime", -"duration": 4620, -"artist": "Simon Viklund", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/bcniut.m4a", -"title": "Carmen Miranda's Ghost", -"duration": 1340, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/yg44gl.mp3", -"title": "Dawson's Christian", -"duration": 2660, -"artist": "Duane Elms", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/fhvudh.m4a", -"title": "Good Ship Manatee", -"duration": 1700, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/v5wm23.mp3", -"title": "Bomber", -"duration": 1920, -"artist": "Duane Elms", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/ych1i1.m4a", -"title": "Some Kind of Hero", -"duration": 4070, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/7rfftg.m4a", -"title": "Guardians", -"duration": 2370, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/yg7ndh.m4a", -"title": "One Last Battle", -"duration": 1580, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/8c3n30.m4a", -"title": "New Sins for Old", -"duration": 1520, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/t9i5vh.mp3", -"title": "Space Hero", -"duration": 1680, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/xbj8ep.mp3", -"title": "Sam Jones", -"duration": 5090, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/iiggpj.mp3", -"title": "Spacer's Home", -"duration": 2190, -"artist": "Duane Elms", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/1vowpl.m4a", -"title": "Harder, Better, Faster, Stronger", -"duration": 2260, -"artist": "Daft Punk", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/fnse07.m4a", -"title": "Crazy Train", -"duration": 2960, -"artist": "Ozzy Osbourne", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/z7b6ih.m4a", -"title": "Poison Arrow", -"duration": 2040, -"artist": "ABC", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/d874c4.m4a", -"title": "Everything Counts", -"duration": 2390, -"artist": "Depeche Mode", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/p9yfvg.m4a", -"title": "Legend Has It", -"duration": 2050, -"artist": "Run the Jewels", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/gg4pti.m4a", -"title": "Rasputin", -"duration": 2650, -"artist": "Boney M", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/u3ylxd.m4a", -"title": "Still D.R.E", -"duration": 2740, -"artist": "Dr. Dre (feat. Snoop Dogg)", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/2r3cbk.m4a", -"title": "It Was a Good Day", -"duration": 2600, -"artist": "Ice Cube", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/asthsu.m4a", -"title": "A Kiss to Build a Dream On", -"duration": 1840, -"artist": "Louis Armstrong", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/rze7qx.m4a", -"title": "(I Always Kill) The Things I Love", -"duration": 1750, -"artist": "The Real Tuesday Weld (feat. Claudia Brucken)", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/5o0uwa.mp3", -"title": "Invisible Touch", -"duration": 2080, -"artist": "Gensis", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/pdtbyi.m4a", -"title": "Tainted Love", -"duration": 1620, -"artist": "Soft Cell", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/j58vt2.mp3", -"title": "Everybody Wants To Rule The World", -"duration": 2520, -"artist": "Tears for Fears", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/llja8t.m4a", -"title": "Pink Cloud Days", -"duration": 1890, -"artist": "A.L.I.S.O.N", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/vbydgp.m4a", -"title": "Ethical Constraints Removed", -"duration": 2310, -"artist": "zircon & Jonathan Peros", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/y5tpk4.m4a", -"title": "The Blue Valley", -"duration": 7250, -"artist": "Karsten Koch", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/4vxedh.m4a", -"title": "Miami Disco", -"duration": 2700, -"artist": "Perturbator", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/dw5h51.m4a", -"title": "Shattered Dreams", -"duration": 2050, -"artist": "Johnny Hates Jazz", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/3zfcq0.mp3", -"title": "Miami", -"duration": 2730, -"artist": "Jasper Byrne", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/ecicu2.mp3", -"title": "Voyager", -"duration": 2140, -"artist": "Jasper Byrne", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/zfwxms.m4a", -"title": "Clouds of Fire", -"duration": 1170, -"artist": "Hector", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/5pl46n.m4a", -"title": "Every Day Is Night", -"duration": 2200, -"artist": "Garoad", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/0y4tjc.m4a", -"title": "Angel", -"duration": 3790, -"artist": "Massive Attack", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/ke8uk5.m4a", -"title": "Beware the Beast", -"duration": 2260, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/u7yyft.m4a", -"title": "The Promise", -"duration": 2200, -"artist": "When In Rome", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/gcej08.m4a", -"title": "UNATCO - Conversation", -"duration": 1720, -"artist": "Michiel van den Bos", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/pf929m.m4a", -"title": "Virtual Insanity", -"duration": 3400, -"artist": "Jamiroquai", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/lu1gif.m4a", -"title": "Freek'n You", -"duration": 3790, -"artist": "Jodeci", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/g368sb.m4a", -"title": "And The Beat Goes On", -"duration": 4500, -"artist": "The Whispers", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/5ikte3.m4a", -"title": "Kiss From a Rose", -"duration": 2880, -"artist": "Seal", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/cqqyzj.m4a", -"title": "Sexual Healing", -"duration": 2430, -"artist": "Marvin Gaye", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/t9mwa9.m4a", -"title": "Sometimes", -"duration": 2530, -"artist": "Miami Horror", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/hdi0l9.m4a", -"title": "Nightcall", -"duration": 2580, -"artist": "Kavinsky", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/4pul1m.m4a", -"title": "Wash Away", -"duration": 2070, -"artist": "Alkaline Trio", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/whcm2r.m4a", -"title": "You Get What You Give", -"duration": 3000, -"artist": "New Radicals", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/adxl47.m4a", -"title": "Let's Dance", -"duration": 2500, -"artist": "David Bowie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/50sksv.m4a", -"title": "Do It Again", -"duration": 3560, -"artist": "Steely Dan", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/j3ntvh.m4a", -"title": "Reelin' In The Years", -"duration": 2750, -"artist": "Steely Dan", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/utxphs.m4a", -"title": "Fire", -"duration": 1750, -"artist": "The Crazy World of Arthur Brown", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/5sh98r.m4a", -"title": "Everlong", -"duration": 2500, -"artist": "Foo Fighters", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/fdjdmj.m4a", -"title": "Limelight", -"duration": 2590, -"artist": "Rush", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/hdlhuf.m4a", -"title": "Revolution", -"duration": 2030, -"artist": "The Beatles", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/9hg3cr.m4a", -"title": "Dance the Night Away", -"duration": 1880, -"artist": "Van Halen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/c961k1.m4a", -"title": "Blue Monday", -"duration": 4430, -"artist": "New Order", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/gldcwv.m4a", -"title": "Dancin' In the Ruins", -"duration": 2410, -"artist": "Blue Oyster Cult", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/1ckdtl.m4a", -"title": "The Boys Are Back In Town", -"duration": 2690, -"artist": "Thin Lizzy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/w8plzv.m4a", -"title": "What It Takes", -"duration": 3110, -"artist": "Aerosmith", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/kdrv1r.m4a", -"title": "Angel", -"duration": 3080, -"artist": "Aerosmith", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/eh54mt.m4a", -"title": "Dude (Looks Like A Lady)", -"duration": 2650, -"artist": "Aerosmith", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/yczf2s.m4a", -"title": "Baba O'Riley", -"duration": 3000, -"artist": "The Who", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/v5376r.m4a", -"title": "Broken Wings", -"duration": 3430, -"artist": "Mr. Mister", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/r27dka.m4a", -"title": "Can't Fight This Feeling", -"duration": 2940, -"artist": "REO Speedwagon", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/a69sg1.m4a", -"title": "Talk Dirty To Me", -"duration": 2240, -"artist": "Poison", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/agtxnz.mp3", -"title": "Jump", -"duration": 2420, -"artist": "Van Halen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/s8fzga.m4a", -"title": "Itz Nothin", -"duration": 2040, -"artist": "Young Roscoe", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/5qgnr9.m4a", -"title": "The Power Of Love", -"duration": 2340, -"artist": "Huey Lewis and The News", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/whbte8.m4a", -"title": "Just a Gigolo / I Ain't Got Nobody", -"duration": 2780, -"artist": "David Lee Roth", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/r32v4i.mp3", -"title": "True Faith", -"duration": 3540, -"artist": "New Order", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/oi7rov.m4a", -"title": "I Want You", -"duration": 2320, -"artist": "Savage Garden", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/tshasp.m4a", -"title": "Space Asshole", -"duration": 2340, -"artist": "Chris Remo", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/yfg6if.m4a", -"title": "Far Away", -"duration": 2810, -"artist": "Jose Gonzalez", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/6rbq2q.m4a", -"title": "All That Could Ever Be", -"duration": 3960, -"artist": "Rik Schaffer", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/l8baty.m4a", -"title": "Sleepwalking", -"duration": 2170, -"artist": "The Chain Gang of 1974", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/n6wwdu.m4a", -"title": "Take It On the Run", -"duration": 2390, -"artist": "REO Speedwagon", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/xwcipt.m4a", -"title": "Radio Ga Ga", -"duration": 3480, -"artist": "Queen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/kq2ak3.m4a", -"title": "Dancing With Myself", -"duration": 2900, -"artist": "Billy Idol", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/ufk5gk.m4a", -"title": "Get Down Saturday Night", -"duration": 4100, -"artist": "Oliver Cheatham", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/3pvlwa.m4a", -"title": "Disco Inferno", -"duration": 2130, -"artist": "The Trammps", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/mt0w0u.mp3", -"title": "Wayfarer", -"duration": 2710, -"artist": "Kavinsky", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/wsjaml.m4a", -"title": "Papa Was A Rolling Stone", -"duration": 4180, -"artist": "The Temptations", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/ln6qoi.m4a", -"title": "I Don't Care Anymore", -"duration": 3050, -"artist": "Phil Collins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/sp6pks.m4a", -"title": "Throwing It All Away", -"duration": 2300, -"artist": "Genesis", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/1kv7kx.mp3", -"title": "In Too Deep", -"duration": 2980, -"artist": "Genesis", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/u42u20.mp3", -"title": "Easy Lover", -"duration": 3020, -"artist": "Phil Collins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/vwlu1a.mp3", -"title": "How To Be A Millionaire", -"duration": 2150, -"artist": "ABC", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/r6d520.mp3", -"title": "Hip To Be Square", -"duration": 2450, -"artist": "Huey Lewis and The News", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/i7qhge.m4a", -"title": "You've Got Another Thing Coming", -"duration": 3100, -"artist": "Judas Priest", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/16y3iy.m4a", -"title": "Live Wire", -"duration": 1940, -"artist": "Motley Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/4sdesv.m4a", -"title": "Ace of Spades", -"duration": 1670, -"artist": "Motorhead", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/3qqt2v.m4a", -"title": "Rise Of The Chaos Wizards", -"duration": 2370, -"artist": "Gloryhammer", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/fgcdu2.m4a", -"title": "Turn Up the Radio", -"duration": 2780, -"artist": "Autograph", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/86ylwc.mp3", -"title": "Bark at the Moon", -"duration": 2560, -"artist": "Ozzy Osbourne", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/nfxzcn.m4a", -"title": "Cum on Feel the Noize", -"duration": 2900, -"artist": "Quiet Riot", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/gl22vl.m4a", -"title": "The Hellion / Electric Eye", -"duration": 2610, -"artist": "Judas Priest", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/j4fvlc.mp3", -"title": "2 Minutes To Midnight", -"duration": 3600, -"artist": "Iron Maiden", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/sj1o0z.m4a", -"title": "Restless Gypsy", -"duration": 2990, -"artist": "W.A.S.P", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/lkkq00.m4a", -"title": "Universe On Fire", -"duration": 2460, -"artist": "Gloryhammer", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/ftmgxf.m4a", -"title": "Girls, Girls, Girls", -"duration": 2700, -"artist": "Motley Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/uciolb.m4a", -"title": "To Hell with the Devil", -"duration": 2440, -"artist": "Stryper", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/6x9zur.m4a", -"title": "God Blessed Video", -"duration": 2100, -"artist": "Alcatrazz", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/gmgh6w.m4a", -"title": "Cumin' Atcha Live", -"duration": 2660, -"artist": "Tesla", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/zti66s.m4a", -"title": "Heavy Metal: The Black and Silver", -"duration": 2000, -"artist": "Blue Oyster Cult", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/8ew21k.m4a", -"title": "Mars For The Rich", -"duration": 2510, -"artist": "King Gizzard & the Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/di9apc.m4a", -"title": "Insane in the Membrane", -"duration": 2100, -"artist": "Cypress Hill", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/8nyu9s.m4a", -"title": "Just a Friend", -"duration": 2380, -"artist": "Biz Markie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/2b0wu2.m4a", -"title": "Intergalactic", -"duration": 2290, -"artist": "Beastie Boys", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/nv66ck.mp3", -"title": "Wild Child", -"duration": 3120, -"artist": "W.A.S.P", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/z3k8rs.m4a", -"title": "Icarus' Dream Suite Op.4", -"duration": 5140, -"artist": "Yngwie Malmsteen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/57ghcq.m4a", -"title": "Fantasy", -"duration": 3030, -"artist": "Aldo Nova", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/kwwvsg.m4a", -"title": "Nocturne Op.9 No.2", -"duration": 2690, -"artist": "Frederic Chopin", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/zab3he.mp3", -"title": "Concord", -"duration": 1850, -"artist": "NicolArmarfi & Blue123", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/e52gys.mp3", -"title": "Clair de Lune", -"duration": 3570, -"artist": "Claude Debussy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/e7nk9a.mp3", -"title": "Gymnopedie No.1", -"duration": 1870, -"artist": "Erik Satie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/wf7jr8.mp3", -"title": "Johans Waltz", -"duration": 2860, -"artist": "Andreas Waldetoft", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/15ybh9.mp3", -"title": "Handel This", -"duration": 890, -"artist": "Andreas Waldetoft", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/0294ze.m4a", -"title": "Lohengrin: Prelude", -"duration": 5930, -"artist": "Richard Wagner", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/xgq1tr.m4a", -"title": "Concerto Grosso no. 10 in B Minor - Allegro", -"duration": 2150, -"artist": "Antonio Vivaldi", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/vxe2qt.m4a", -"title": "Ancient Stones", -"duration": 2850, -"artist": "Jeremy Soule", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/8bdxq3.m4a", -"title": "Secunda", -"duration": 1230, -"artist": "Jeremy Soule", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/lqgoiv.m4a", -"title": "Far Horizons", -"duration": 3310, -"artist": "Jeremy Soule", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/azzap9.mp3", -"title": "Time of Change", -"duration": 2020, -"artist": "FlybyNo", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/m67gzk.m4a", -"title": "Dreamer's Rest", -"duration": 2380, -"artist": "Vindsvept", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/tnx2fb.mp3", -"title": "Moment of Decision", -"duration": 2430, -"artist": "NicolArmarfi", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Classical and Orchestral" -}, -{ -"url": "https://files.catbox.moe/c7yeau.mp3", -"title": "In My Dreams", -"duration": 2600, -"artist": "Dokken", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/u8xh6b.m4a", -"title": "Wasted Years", -"duration": 3090, -"artist": "Iron Maiden", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/utjagr.m4a", -"title": "Round and Round", -"duration": 2650, -"artist": "Ratt", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/mbzbla.m4a", -"title": "Crystal Ball", -"duration": 2950, -"artist": "Yngwie Malmsteen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/p9cnth.m4a", -"title": "I Remember You", -"duration": 3130, -"artist": "Skid Row", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/pkhotw.m4a", -"title": "I Won't Forget You", -"duration": 2150, -"artist": "Poison", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/231ksl.m4a", -"title": "Pjanoo (Club Mix)", -"duration": 4500, -"artist": "Eric Prydz", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/58hrry.m4a", -"title": "Inferno Galore", -"duration": 2250, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/vsdg7v.m4a", -"title": "Low Rider", -"duration": 1910, -"artist": "War", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/gu2yfz.m4a", -"title": "How Deep Is Your Love", -"duration": 2450, -"artist": "The Bee Gees", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/slm18k.m4a", -"title": "You Dropped A Bomb On Me", -"duration": 3120, -"artist": "The Gap Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/24cqmw.m4a", -"title": "Every Rose Has It's Thorn", -"duration": 2600, -"artist": "Poison", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/v3otpl.m4a", -"title": "Fallen Angel", -"duration": 2380, -"artist": "Poison", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/iezn71.m4a", -"title": "Baby Hold On", -"duration": 2100, -"artist": "Eddie Money", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/e8w3ym.m4a", -"title": "Two Tickets To Paradise", -"duration": 2370, -"artist": "Eddie Money", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/cavpff.m4a", -"title": "Take Me Home Tonight", -"duration": 2110, -"artist": "Eddie Money", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/n8l93a.m4a", -"title": "Same Ol' Situation (S.O.S.)", -"duration": 2530, -"artist": "Motely Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/gnr6py.m4a", -"title": "Metal Health (Bang Your Head)", -"duration": 3160, -"artist": "Quiet Riot", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/1drakx.m4a", -"title": "Shout At The Devil", -"duration": 1950, -"artist": "Motley Crue", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/1kevft.m4a", -"title": "Walk With Me in Hell", -"duration": 3110, -"artist": "Lamb of God", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/9cdsmd.m4a", -"title": "Crazy (A Suitable Case For Treatment)", -"duration": 2070, -"artist": "Nazareth", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/6oq1qw.m4a", -"title": "Freezing Moon", -"duration": 3830, -"artist": "Mayhem", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/jrc74a.m4a", -"title": "Raining Blood", -"duration": 2540, -"artist": "Slayer", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/ey07dt.m4a", -"title": "Marching Off to War", -"duration": 2490, -"artist": "Motorhead", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/a77r2l.m4a", -"title": "Hymn Of The Forsaken", -"duration": 3880, -"artist": "Climmhazard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/omm3y6.m4a", -"title": "Victory Song", -"duration": 6390, -"artist": "Ensiferum", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/sx7kbr.m4a", -"title": "Dunkelheit", -"duration": 4210, -"artist": "Burzum", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/r6uftn.m4a", -"title": "Sick Bubblegum", -"duration": 2240, -"artist": "Rob Zombie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/ysee6q.m4a", -"title": "Laser Enforcer", -"duration": 2540, -"artist": "Slough Feg", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/sxcus4.m4a", -"title": "Veteran of the Psychic Wars", -"duration": 2890, -"artist": "Blue Oyster Cult", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/qkxavx.m4a", -"title": "Tiger! Tiger!", -"duration": 2530, -"artist": "Slough Feg", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/u7rhxc.m4a", -"title": "Hyperdrive", -"duration": 2140, -"artist": "The Devin Townsend Project", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/narev2.m4a", -"title": "Judas", -"duration": 2500, -"artist": "Fozzy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/pguvz2.m4a", -"title": "Alone Again", -"duration": 2600, -"artist": "Dokken", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/0gol3u.m4a", -"title": "Superbeast", -"duration": 2200, -"artist": "Rob Zombie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/irrxal.m4a", -"title": "Perihelion", -"duration": 1910, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/f9yw8d.m4a", -"title": "Self-Immolate", -"duration": 2680, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/zmyym2.m4a", -"title": "Planet B", -"duration": 2360, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/isa0lb.m4a", -"title": "On The Wind", -"duration": 2250, -"artist": "Dream Evil", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/oi9dt1.m4a", -"title": "Catch The Rainbow", -"duration": 3960, -"artist": "Rainbow", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/1ozes3.m4a", -"title": "Peace Sells", -"duration": 2440, -"artist": "Megadeth", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Metal" -}, -{ -"url": "https://files.catbox.moe/iyi2ll.m4a", -"title": "Never Gonna Give You Up", -"duration": 2130, -"artist": "Rick Astley", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/s46vw9.m4a", -"title": "I Fought The Law", -"duration": 1630, -"artist": "The Clash", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/3blefo.m4a", -"title": "Piano Man", -"duration": 3400, -"artist": "Billy Joel", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/qq4cbx.m4a", -"title": "Mr. Blue Sky", -"duration": 3030, -"artist": "Electric Light Orchestra", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/uxwl09.m4a", -"title": "Here I Go Again (1987 Version)", -"duration": 2750, -"artist": "Whitesnake", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/jgigel.m4a", -"title": "Starman", -"duration": 2540, -"artist": "David Bowie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/nq2w6w.m4a", -"title": "Space Oddity", -"duration": 3180, -"artist": "David Bowie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/2n2gdq.m4a", -"title": "Changes", -"duration": 2170, -"artist": "David Bowie", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/jzucsv.mp3", -"title": "A Horse With No Name", -"duration": 2470, -"artist": "America", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/d05y2k.m4a", -"title": "Space Oddity (Cover)", -"duration": 3330, -"artist": "Chris Hadfield", -"secret": false, -"lobby": false, -"jukebox": false, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/1gbbu1.m4a", -"title": "Cruel, Cruel World (Josh Homme)", -"duration": 2140, -"artist": "Josh Homme", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/3941ms.m4a", -"title": "House Building", -"duration": 2200, -"artist": "David 'Fergie' Ferguson", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/rf6v2o.m4a", -"title": "Folsom Prison Blues", -"duration": 1680, -"artist": "Johnny Cash", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/1deyd1.m4a", -"title": "A White Sport Coat (And a Pink Carnation)", -"duration": 1480, -"artist": "Marty Robbins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/r7asbn.m4a", -"title": "Lovers Of The World", -"duration": 1680, -"artist": "Jerry Wallace", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/gdd5v3.m4a", -"title": "Cruel, Cruel World (Willie Nelson)", -"duration": 2660, -"artist": "Willie Nelson", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/vrj0cl.m4a", -"title": "The Story Of A Soldier", -"duration": 2390, -"artist": "Ennio Morricone", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/wdswuf.m4a", -"title": "Rawhide", -"duration": 1200, -"artist": "Frankie Laine", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/sa9lg3.m4a", -"title": "Psycho", -"duration": 2160, -"artist": "Eddie Noack", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/j84ln2.m4a", -"title": "Before You Use That Gun", -"duration": 1520, -"artist": "Eddie Noack", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/3ae5p2.m4a", -"title": "Rhinestone Cowboy", -"duration": 2090, -"artist": "Glen Campbell", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/hbc1vd.m4a", -"title": "Flowers on the Wall", -"duration": 1390, -"artist": "The Statler Brothers", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/7ibtm1.m4a", -"title": "Bed Of Roses", -"duration": 1480, -"artist": "The Statler Brothers", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/mv8xql.m4a", -"title": "New York City", -"duration": 1710, -"artist": "The Statler Brothers", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/5mtinr.m4a", -"title": "The Devil Went Down to Georgia", -"duration": 2140, -"artist": "The Charlie Daniels Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/qvd0qg.m4a", -"title": "Cottonwood Tree", -"duration": 2370, -"artist": "Marty Robbins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/378qb4.m4a", -"title": "Ain't I Right", -"duration": 1980, -"artist": "Marty Robbins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/5sgpkn.m4a", -"title": "Wish It Was True", -"duration": 2280, -"artist": "The White Buffalo", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/de3b29.m4a", -"title": "Burn The Witch", -"duration": 2480, -"artist": "Shawn James", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/av3j0o.m4a", -"title": "Sink The Bismarck", -"duration": 1940, -"artist": "Johnny Horton", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/8z0ueu.m4a", -"title": "Mr. Shorty", -"duration": 3030, -"artist": "Marty Robbins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/0wwk0d.m4a", -"title": "Uneasy Rider", -"duration": 3180, -"artist": "The Charlie Daniels Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/dws0dz.m4a", -"title": "Uneasy Rider '88", -"duration": 2640, -"artist": "The Charlie Daniels Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/ci1gka.m4a", -"title": "For A Few Dollars More", -"duration": 1680, -"artist": "Ennio Morricone", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Country and Western" -}, -{ -"url": "https://files.catbox.moe/pbw43i.m4a", -"title": "Faster Than Light", -"duration": 2370, -"artist": "Ben Prunty", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/va5a54.m4a", -"title": "Rebecca", -"duration": 2540, -"artist": "Tesla Boy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/g3mwvn.m4a", -"title": "Zero Point Non-Response", -"duration": 3330, -"artist": "Mega Drive", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/fu3mf9.m4a", -"title": "Edge of Reality", -"duration": 3300, -"artist": "Mega Drive", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/nspw3i.m4a", -"title": "What Is Love", -"duration": 2700, -"artist": "Haddaway", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/8kyy4o.mp3", -"title": "Time Lapse", -"duration": 2600, -"artist": "Kalax", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/yuwdr5.m4a", -"title": "So Far Away", -"duration": 2820, -"artist": "Lazerhawk", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/hlsk69.m4a", -"title": "Children of the Omnissiah", -"duration": 1060, -"artist": "Guillaume David", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/t7q36u.m4a", -"title": "Noosphere", -"duration": 3880, -"artist": "Guillaume David", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/e2lxd4.m4a", -"title": "Resonance", -"duration": 2120, -"artist": "HOME", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/fnngli.m4a", -"title": "We're Finally Landing", -"duration": 2720, -"artist": "HOME", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/36juno.mp3", -"title": "Head First", -"duration": 2130, -"artist": "HOME", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/bvwhm0.m4a", -"title": "Dust", -"duration": 3020, -"artist": "M|O|O|N", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/b6urx6.m4a", -"title": "Silent Strike", -"duration": 2970, -"artist": "Garth Knight", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/ywr4gd.mp3", -"title": "Night Train", -"duration": 2440, -"artist": "Mitch Murder", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/rgtjn3.m4a", -"title": "Welcome to VA-11 Hall-A", -"duration": 1880, -"artist": "Garoad", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/86wwz1.m4a", -"title": "Drive Me Wild", -"duration": 2280, -"artist": "Garoad", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/j14cpw.m4a", -"title": "Sexualizer", -"duration": 2990, -"artist": "Perturbator (feat. Flash Arnold)", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/3zb1hx.m4a", -"title": "Into The Labyrinth", -"duration": 3100, -"artist": "Kraddy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/qxadpn.m4a", -"title": "Turbo Killer", -"duration": 2080, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/dclq52.m4a", -"title": "Deep Cover", -"duration": 4850, -"artist": "Sun Araw", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/wpws58.m4a", -"title": "Fragments of Bach I", -"duration": 3060, -"artist": "Compilerbau", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/ltlzpi.mp3", -"title": "Leather Teeth", -"duration": 2330, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/bem2ur.m4a", -"title": "Cheerleader Effect", -"duration": 2170, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/hwfg7e.m4a", -"title": "Hairspray Hurricane", -"duration": 3310, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/xx00ka.m4a", -"title": "Sunday Lunch", -"duration": 1950, -"artist": "Carpenter Brut", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/4ju4p1.mp3", -"title": "Lone Digger", -"duration": 2300, -"artist": "Caravan Palace", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/4c0lmk.m4a", -"title": "Dessert", -"duration": 1840, -"artist": "Jun Chikuma", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/g0ms06.m4a", -"title": "Propane Nightmares", -"duration": 3130, -"artist": "Pendulum", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/7i23kv.m4a", -"title": "Overdrive (Instrumental)", -"duration": 2260, -"artist": "Lily Arciniega", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/re4is1.m4a", -"title": "Tusk", -"duration": 2180, -"artist": "Fleetwood Mac", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/xztay0.m4a", -"title": "Rock On Rockall", -"duration": 1740, -"artist": "The Wolfe Tones", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/6ryyk0.m4a", -"title": "Apocalypse", -"duration": 2900, -"artist": "Cigarettes After Sex", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/2z6lpx.mp3", -"title": "Pioneer's Song", -"duration": 1790, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/e55ey0.mp3", -"title": "Bones", -"duration": 1200, -"artist": "Leslie Fish", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Folk and Indie" -}, -{ -"url": "https://files.catbox.moe/evilyr.m4a", -"title": "Age of Consent", -"duration": 3150, -"artist": "New Order", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/lgot68.m4a", -"title": "Maneater", -"duration": 2730, -"artist": "Hall & Oates", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/8e4bb0.m4a", -"title": "Ordinary World", -"duration": 3400, -"artist": "Duran Duran", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/leulle.m4a", -"title": "Forever Young", -"duration": 2260, -"artist": "Alphaville", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/z8bxjp.m4a", -"title": "Sussudio", -"duration": 2640, -"artist": "Phil Collins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/wti40y.m4a", -"title": "One More Night", -"duration": 2910, -"artist": "Phil Collins", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/zifzgk.m4a", -"title": "Little Girls", -"duration": 2230, -"artist": "Oingo Boingo", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/5yk0mm.m4a", -"title": "Everything She Wants", -"duration": 3920, -"artist": "Wham!", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/5ye8et.m4a", -"title": "Careless Whisper", -"duration": 3030, -"artist": "George Michael", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/9a5dov.m4a", -"title": "Space Cowboy", -"duration": 2160, -"artist": "Jamiroquai", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Disco, Funk, Soul, and R&B" -}, -{ -"url": "https://files.catbox.moe/dpjb9r.m4a", -"title": "Video Killed The Radio Star", -"duration": 2530, -"artist": "The Buggles", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/367b33.m4a", -"title": "Honey, There's No Time", -"duration": 2610, -"artist": "Feng Suave", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/q5kk5l.m4a", -"title": "Sink into the Floor", -"duration": 2790, -"artist": "Feng Suave", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/w7d9qk.m4a", -"title": "This Train", -"duration": 2850, -"artist": "Turk Murphy's San Francisco Jazz Band", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/79d8gs.mp3", -"title": "Love Theme", -"duration": 5710, -"artist": "Andrew Hale", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/u1h4vg.m4a", -"title": "Jingle Jangle Jingle", -"duration": 1970, -"artist": "Kay Kyser", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/ky7dvn.m4a", -"title": "Personality", -"duration": 1690, -"artist": "Johnny Mercer & The Pied Pipers", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/5jm318.m4a", -"title": "Let's Face The Music And Dance", -"duration": 1710, -"artist": "Frank Sinatra", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/jhjidm.m4a", -"title": "I'll Get By", -"duration": 1700, -"artist": "Frank Fontaine", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/bwg49y.m4a", -"title": "That Face!", -"duration": 1430, -"artist": "Frank Sinatra Jr", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/2wmc3x.m4a", -"title": "Mack the Knife", -"duration": 1840, -"artist": "Bobby Darin", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/q2t0i0.m4a", -"title": "The Day The Clown Cried", -"duration": 1900, -"artist": "Jimmy Beaumont & The Skyliners", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/c06zik.m4a", -"title": "Invitation To The Blues", -"duration": 3240, -"artist": "Tom Waits", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/1z0mli.m4a", -"title": "Drunk On The Moon", -"duration": 3060, -"artist": "Tom Waits", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/dqu0t5.m4a", -"title": "La Vie En Rose", -"duration": 2050, -"artist": "Louis Armstrong", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/0ys4q8.m4a", -"title": "So What", -"duration": 5690, -"artist": "Miles Davis Sextet", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/nr7btw.m4a", -"title": "Just The Two Of Us", -"duration": 4430, -"artist": "Grover Washington Jr", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/tb9ys2.m4a", -"title": "Quiet Nights Of Quiet Stars", -"duration": 1640, -"artist": "Frank Sinatra & Antonio Carlos Jobim", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/zd1sw1.m4a", -"title": "Drinking Water", -"duration": 1530, -"artist": "Frank Sinatra & Antonio Carlos Jobim", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/fwtdoh.m4a", -"title": "Ol' Man River (Showboat)", -"duration": 2340, -"artist": "Paul Robseon", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Jazz" -}, -{ -"url": "https://files.catbox.moe/mp8tab.m4a", -"title": "Juke Box Hero", -"duration": 2590, -"artist": "Foreigner", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/n0ezuw.m4a", -"title": "Waiting for a Girl Like You", -"duration": 2890, -"artist": "Foreigner", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/gd49uk.m4a", -"title": "I Want to Know What Love Is", -"duration": 3040, -"artist": "Foreigner", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/s36f97.m4a", -"title": "She Sells Sanctuary", -"duration": 2620, -"artist": "The Cult", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/62lks9.m4a", -"title": "No One Knows", -"duration": 2580, -"artist": "Queens of the Stone Age", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/e4sltu.m4a", -"title": "Like a Stone", -"duration": 2940, -"artist": "Audioslave", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/yitsz9.m4a", -"title": "Friday I'm in Love", -"duration": 2140, -"artist": "The Cure", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/dwyjkt.m4a", -"title": "Ozymandias", -"duration": 1920, -"artist": "Red Vox", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/wmpgcr.mp3", -"title": "Welcome To The Jungle", -"duration": 2690, -"artist": "Guns N' Roses", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/20exnb.mp3", -"title": "Fortunate Son", -"duration": 1400, -"artist": "Creedence Clearwater Revival", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/8xzmw5.mp3", -"title": "Bohemian Rhapsody", -"duration": 3580, -"artist": "Queen", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/7x2cvf.mp3", -"title": "Rocket Man", -"duration": 2820, -"artist": "Elton John", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/xjgch6.m4a", -"title": "Smooth Sailing", -"duration": 2910, -"artist": "Queens of the Stone Age", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/f8ebif.m4a", -"title": "Face Melter (How to Do Impossible Things)", -"duration": 2100, -"artist": "Death Grips", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/6i31kh.m4a", -"title": "Rapper's Delight", -"duration": 8850, -"artist": "The Sugar Hill Gang", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/3y9k43.m4a", -"title": "Super Freak", -"duration": 2020, -"artist": "Rick James", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/93ynna.m4a", -"title": "Party All The Time", -"duration": 2530, -"artist": "Eddie Murphy", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/4s8xyr.m4a", -"title": "Funky Cold Medina", -"duration": 2480, -"artist": "Tone-Loc", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/jzpkv4.m4a", -"title": "Children's Story", -"duration": 2420, -"artist": "Slick Rick", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/tk1zno.m4a", -"title": "Voila", -"duration": 2080, -"artist": "Death Grips", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/jvhl18.m4a", -"title": "Black Ballons Reprise", -"duration": 1620, -"artist": "Flying Lotus (feat. Denzel Curry)", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/59nnfc.m4a", -"title": "Take_it_Back_v2", -"duration": 1690, -"artist": "Denzel Curry & Kenny Beats", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/pkwkd1.m4a", -"title": "All Caps", -"duration": 1340, -"artist": "Madvillain", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/d7zx95.m4a", -"title": "Express Yourself", -"duration": 2650, -"artist": "N.W.A", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/fgn4pf.m4a", -"title": "BLACK BALLOONS", -"duration": 2100, -"artist": "Denzel Curry", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/o7hb3j.m4a", -"title": "Meat Grinder", -"duration": 1310, -"artist": "Madvillain", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Hip-Hop and Rap" -}, -{ -"url": "https://files.catbox.moe/8o0z0l.m4a", -"title": "Keep Your Eyes Peeled", -"duration": 3040, -"artist": "Queens of the Stone Age", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/ri8l16.m4a", -"title": "Sleep Drifter", -"duration": 2840, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/zz1p3n.m4a", -"title": "Open Water", -"duration": 4330, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/prllpr.m4a", -"title": "Gamma Knife", -"duration": 2910, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/v66qvy.m4a", -"title": "Baby Gotterdammerung", -"duration": 1880, -"artist": "Monster Magnet", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/isus1b.m4a", -"title": "Robot Stop", -"duration": 2100, -"artist": "King Gizzard & The Lizard Wizard", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/qhionp.mp3", -"title": "Come Sail Away", -"duration": 3650, -"artist": "Styx", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/vm93di.m4a", -"title": "Bullet Girl", -"duration": 3210, -"artist": "John Butler Trio", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/f3gvmk.m4a", -"title": "Holland, 1945", -"duration": 1920, -"artist": "Neutral Milk Hotel", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/8rn8uz.mp3", -"title": "I Wupped Batman's Ass", -"duration": 3270, -"genre": "Miscellaneous", -"artist": "Wesley Willis Fiasco", -"secret": true, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"duration" : 1416, -"url" : "https://files.catbox.moe/h967s5.mp3", -"title" : "MEGALOVANIA", -"artist" : "Toby Fox", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"duration" : 1416, -"url" : "https://files.catbox.moe/yumfgs.mp3", -"title" : "ASGORE", -"artist" : "Toby Fox", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"duration" : 1800, -"url" : "https://files.catbox.moe/ewn2u4.mp3", -"title" : "Disco Descent", -"artist" : "Danny Baranowsky", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"duration" : 1130, -"url" : "https://files.catbox.moe/8rns1d.mp3", -"title" : "Konga Conga Kappa", -"artist" : "Danny Baranowsky", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Electronic" -}, -{ -"url": "https://files.catbox.moe/3h38kn.mp3", -"title": "Among Us", -"duration": 720, -"artist": "Leonz", -"genre": "Disco, Funk, Soul, and R&B", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/rqhxj1.mp3", -"title": "Leggy Zone", -"duration": 1470, -"artist": "Binox", -"genre": "Electronic", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/e6l6mw.mp3", -"title": "Shop Theme", -"duration": 8910, -"artist": "Kazumi Totaka/Nintendo", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/q2ob3n.mp3", -"title": "PONPONPON", -"duration": 2430, -"artist": "Kyary Pamyu Pamyu", -"genre": "J-Pop", -"secret": false, -"lobby": false -}, -{ -"url": "https://files.catbox.moe/o8flhu.mp3", -"title": "Man's Road", -"duration": 2060, -"artist": "America", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/0gb5qs.mp3", -"title": "Passionflower", -"duration": 3840, -"artist": "Jon Gomm", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/p5e28z.mp3", -"title": "What the Fuck", -"duration": 2420, -"artist": "Koh", -"genre": "Folk and Indie", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/0f2xma.mp3", -"title": "Bonetrousle", -"duration": 580, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/6ivc7w.mp3", -"title": "Bury the Light", -"duration": 5830, -"artist": "Victor Borba & Casey Edwards", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/pbtbjv.mp3", -"title": "Dog Song", -"duration": 380, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/4v3eeb.mp3", -"title": "Anticipation", -"duration": 230, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/0q8ch6.mp3", -"title": "Smash Clown", -"duration": 820, -"artist": "Goat", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ygcg2e.mp3", -"title": "Honk The Police", -"duration": 590, -"artist": "Goat", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/h0yswi.mp3", -"title": "Cargonia", -"duration": 630, -"artist": "Goat", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/xg76ja.mp3", -"title": "Hail Cargonia", -"duration": 980, -"artist": "Goat", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/tbr2rc.mp3", -"title": "Banned From Cargo", -"duration": 2450, -"artist": "Goat", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/tw2et2.mp3", -"title": "Periphery Dixie", -"duration": 1200, -"artist": "Goat", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/rm5hcs.mp3", -"title": "Cargonia (cover)", -"duration": 2730, -"artist": "Dadbot5000", -"genre": "Space", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ybfof9.mp3", -"title": "The Legend", -"duration": 1120, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ugfx06.mp3", -"title": "Field of Hopes and Dreams", -"duration": 1610, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/wr08om.mp3", -"title": "Checker Dance", -"duration": 780, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/4au954.mp3", -"title": "Vs Susie", -"duration": 810, -"artist": "Toby Fox", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/c9y5x2.mp3", -"title": "Golden Wind", -"duration": 2930, -"artist": "Yugo Kanno", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ymvtem.mp3", -"title": "Sono Chi no Sadame", -"duration": 2610, -"artist": "Hiroaki TOMMY Tominaga", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/z73u05.mp3", -"title": "Bloody Stream", -"duration": 2590, -"artist": "Coda", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/yg3643.mp3", -"title": "Stand Proud", -"duration": 2750, -"artist": "Jin Hashimoto", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/344qrf.mp3", -"title": "Sono Chi no Kioku ~end of THE WORLD~", -"duration": 2620, -"artist": "JO☆STARS", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/0n6y6v.mp3", -"title": "Crazy Noisy Bizarre Town", -"duration": 1840, -"artist": "THE DU", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/j3xzw6.mp3", -"title": "Chase", -"duration": 1450, -"artist": "Batta", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/luf1bh.mp3", -"title": "Great Days", -"duration": 2400, -"artist": "Karen Aoki & Daisuke Hasegaw", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ytp4d2.mp3", -"title": "Fighting Gold", -"duration": 2540, -"artist": "Coda", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/q1xjdp.mp3", -"title": "I Want It That Way", -"duration": 2120, -"artist": "Backstreet Boys", -"genre": "Pop", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/pxpkat.mp3", -"title": "Shop Theme Cover", -"duration": 1770, -"artist": "Songe", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/nz03o1.mp3", -"title": "Deep Space 9 (Cover)", -"duration": 1220, -"artist": "Heropoint", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/n4vcnq.mp3", -"title": "Trouble Shooting Star", -"duration": 1460, -"artist": "", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/byy378.mp3", -"title": "The Lord of the Rings The Fellowship of the its my book they will walk if I tell them to", -"duration": 970, -"artist": "Tom Cardy", -"genre": "Folk and Indie", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/akgbup.mp3", -"title": "Flight of the Bumblebee", -"duration": 2050, -"artist": "Rimsky Korsakov", -"genre": "Classical and Orchestral", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/milk8o.mp3", -"title": "As Heaven Is Wide", -"duration": 2880, -"artist": "Garbage", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/8mh82l.mp3", -"title": "Combat Montage", -"duration": 1410, -"artist": "Kevin Manthei", -"genre": "Rock", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/qa6ahi.mp3", -"title": "Deadlines", -"duration": 1570, -"artist": "Network Music Ensemble", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/cdmm5k.mp3", -"title": "Holding Out For A Hero", -"duration": 2620, -"artist": "Ella Mae Bowen", -"genre": "Country and Western", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/jlv9eb.mp3", -"title": "Jiko Bunseki", -"duration": 1420, -"artist": "Yuki Hayashi", -"genre": "Anime", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/vzbcsc.mp3", -"title": "Let It End", -"duration": 2220, -"artist": "Karliene", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/nsfwxe.mp3", -"title": "Proof Of A Hero (16 bit)", -"duration": 1410, -"artist": "Bulby", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ywoaqa.mp3", -"title": "Proof Of A Hero", -"duration": 1340, -"artist": "Kouda Masato", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/xlrbbe.mp3", -"title": "Pure Imagination", -"duration": 2060, -"artist": "Fiona Apple", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/q3f6sq.mp3", -"title": "Rhapsody In Blue", -"duration": 9870, -"artist": "Kamil Hala, Slovak Philharmonic Orchestra, Libor Pešek", -"genre": "Classical and Orchestral", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/vzsm5k.mp3", -"title": "Surface Of SR388", -"duration": 1710, -"artist": "BG Ollie", -"genre": "Video Game", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/ngtv3e.mp3", -"title": "Where My Heart Will Take Me", -"duration": 2490, -"artist": "Russell Watson", -"genre": "Country and Western", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/cfq7bo.mp3", -"title": "Kiss From A Rose", -"duration": 2860, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/4mypzc.mp3", -"title": "Black Hole Sun", -"duration": 3210, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/qpkv1q.mp3", -"title": "I Still Haven't Found What I'm Looking For", -"duration": 2870, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/g8vawq.mp3", -"title": "Nights In White Satin", -"duration": 2710, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/01ljjx.mp3", -"title": "Land Of Confusion", -"duration": 2850, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/2iugx4.mp3", -"title": "Aspirations", -"duration": 3010, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/m3cwu1.mp3", -"title": "Head Over Heels", -"duration": 2420, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/xtizlg.mp3", -"title": "Get Lucky", -"duration": 2490, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/dym0sp.mp3", -"title": "God Only Knows", -"duration": 1810, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/i8gml0.mp3", -"title": "Scarborough Fair", -"duration": 2020, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/chc70l.mp3", -"title": "The Sphere A Kind Of Dream", -"duration": 620, -"artist": "Dan Avidan & Super Guitar Bros", -"genre": "Acoustic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/w48oqv.mp3", -"title": "Pushin' The Speed of Light", -"duration": 2130, -"artist": "Julia Ecklar & Anne Prather", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/zacsky.mp3", -"title": "S.T.L.", -"duration": 1190, -"artist": "Free Fall & Other Delights", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/9a3ow3.mp3", -"title": "Phantom Lover of the Star Drive", -"duration": 1930, -"artist": "Free Fall & Other Delights", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/eo59pv.mp3", -"title": "Molecular Clouds", -"duration": 1560, -"artist": "Free Fall & Other Delights", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/227jw9.mp3", -"title": "A Reconsideration (Zero-G Sex)", -"duration": 2530, -"artist": "Free Fall & Other Delights", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/yvn8bu.mp3", -"title": "Stuck Here", -"duration": 1360, -"artist": "Free Fall & Other Delights", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/nsnf73.mp3", -"title": "The Ballad of Transport 18", -"duration": 2660, -"artist": "Leslie Fish", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/hwsbsi.mp3", -"title": "Don't Push That Button", -"duration": 2450, -"artist": "Duane Elms", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/iizfw9.mp3", -"title": "Late Night at the Draco Tavern", -"duration": 2600, -"artist": "Duane Elms", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/4zaljk.mp3", -"title": "Startide Rising", -"duration": 1050, -"artist": "Duane Elms", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/9y01ry.mp3", -"title": "F.A.P. Feline American Princess", -"duration": 2640, -"artist": "Leslie Fish", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/s7u3vi.mp3", -"title": "Hymn to Breaking Strain", -"duration": 2710, -"artist": "Julia Ecklar & Leslie Fish", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/5pwnw3.m4a", -"title": "Eristocrats (Discordia Pt.II)", -"duration": 1690, -"artist": "That Handsome Devil", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/8r5d7q.mp3", -"title": "Take me to Snurch (Snail Church)", -"duration": 2370, -"genre": "Pop", -"artist": "fairyeiry", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/2ozzmg.m4a", -"title": "Charlie's Inferno", -"duration": 2250, -"artist": "That Handsome Devil", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Rock" -}, -{ -"url": "https://files.catbox.moe/w8x8qb.m4a", -"title": "Monster Mash", -"duration": 1930, -"artist": "Bobby Pickett", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/rjvm4j.mp3", -"title": "What's New Pussycat", -"duration": 1290, -"artist": "Tom Jones", -"secret": false, -"lobby": false, -"jukebox": true, -"genre": "Pop" -}, -{ -"url": "https://files.catbox.moe/t19nip.m4a", -"title": "It's Not Unusual", -"duration": 1200, -"artist": "Tom Jones", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/n10l5v.mp3", -"title": "Sucklet's Song", -"duration": 1840, -"artist": "emamouse", -"genre": "Folk and Indie", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/6m88w6.mp3", -"title": "King Sucklet", -"duration": 1370, -"artist": "emamouse", -"genre": "Folk and Indie", -"secret": true, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/dgloyl.mp3", -"title": "Bomb-Sniffing Pomeranian", -"duration": 2600, -"artist": "Stinkbug & Coda", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/mrgdre.mp3", -"title": "Nuclear", -"duration": 3050, -"artist": "Mike Oldfield", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/mjt2ll.mp3", -"title": "Brain Power", -"duration": 3700, -"artist": "NOMA", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/l91mps.mp3", -"title": "Fungal Funk", -"duration": 1610, -"artist": "Danny Baranowsky", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/hwv7lf.mp3", -"title": "Heart Transplant", -"duration": 2700, -"artist": "Surgeon Simulator", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/dowdad.mp3", -"title": "Distant Duet", -"duration": 1920, -"artist": "Rhythm Doctor", -"genre": "Classical and Orchestral", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/8drrgl.mp3", -"title": "All the Times", -"duration": 2150, -"artist": "Rhythm Doctor", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/c6bjxg.mp3", -"title": "Lo-fi Hip-Hop Beats To Treat Patients To", -"duration": 1250, -"artist": "Rhythm Doctor", -"genre": "Hip-Hop and Rap", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/s5a2mp.mp3", -"title": "We All Lift Together", -"duration": 1520, -"artist": "Warframe", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://files.catbox.moe/i9b6ew.mp3", -"title": "Sleeping In The Cold Below", -"duration": 2110, -"artist": "Warframe", -"genre": "Folk and Indie", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://archive.org/download/i-care-because-you-do-flac/10.%20Aphex%20Twin%20-%20Alberto%20Balsalm.mp3", -"title": "Alberto Balsalm", -"duration": 3110, - "artist": "Aphex Twin", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://archive.org/download/selected-ambient-works-85-92-flac/01.%20Aphex%20Twin%20-%20Xtal.mp3", -"title": "Xtal", -"duration": 2930, -"artist": "Aphex Twin", -"genre": "Electronic", -"secret": false, -"lobby": false, -"jukebox": true -}, -{ -"url": "https://archive.org/download/04.-dos-en-uno/02.%20Hojas%20De%20Te.mp3", -"title": "Hojas de Te", -"duration": 2180, -"artist": "Los Tres", -"genre": "Rock", -"secret": false, -"lobby": false, -"jukebox": true -} + { + "url": "https://files.catbox.moe/notc7y.mp3", + "title": "Flip-Flap (Title One)", + "duration": 1500, + "artist": "X-CEED", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/b24m07.mp3", + "title": "Robocop Theme (Title Two)", + "duration": 1180, + "artist": "Cboyardee", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/qn5tdv.mp3", + "title": "Tin Tin on the Moon (Remix)", + "duration": 2450, + "artist": "Jeroen Tel (Remixed by Cuboos)", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/uk3pr2.mp3", + "title": "Phoron Will Make Us Rich", + "duration": 1370, + "artist": "Earthcrusher", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/k25nxo.mp3", + "title": "Spaceman's Dilemma", + "duration": 2080, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/y1dxvn.mp3", + "title": "Banned from Argo", + "duration": 3150, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/zlct4c.mp3", + "title": "Stayin' Alive", + "duration": 2420, + "artist": "The Bee Gees", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/dluppg.m4a", + "title": "Tannhauser Overture", + "duration": 9360, + "artist": "Richard Wagner", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/b4j5jc.m4a", + "title": "Another Song About the Weekend", + "duration": 2250, + "artist": "A Day to Remember", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/n36iy9.m4a", + "title": "Truly Madly Deeply", + "duration": 2770, + "artist": "Savage Garden", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/t88x7z.m4a", + "title": "Adult Education", + "duration": 3230, + "artist": "Hall and Oates", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/k38d32.mp3", + "title": "That's All", + "duration": 2640, + "artist": "Genesis", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/b59gnc.mp3", + "title": "Faith", + "duration": 1580, + "artist": "George Michael", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/twy9ln.m4a", + "title": "Last Christmas", + "duration": 2630, + "artist": "Wham!", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/m00qlo.mp3", + "title": "Dreams", + "duration": 2920, + "artist": "Van Halen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/fwvkr7.m4a", + "title": "Geronimo's Cadillac", + "duration": 1960, + "artist": "Modern Talking", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/py8x5m.m4a", + "title": "Home Sweet Home", + "duration": 2400, + "artist": "Motley Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/ius137.mp3", + "title": "Too Young to Fall in Love", + "duration": 2100, + "artist": "Motley Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/dc6s20.mp3", + "title": "Working for the Weekend", + "duration": 2220, + "artist": "Loverboy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/977069.m4a", + "title": "Miles Away", + "duration": 2520, + "artist": "Winger", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/i5q08z.m4a", + "title": "Run, Sally, Run!", + "duration": 2870, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/34kdfv.mp3", + "title": "Kickstart my Heart", + "duration": 2830, + "artist": "Motley Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/ul3m8e.mp3", + "title": "Bizarre Love Triangle", + "duration": 2610, + "artist": "New Order", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/8f5h2b.mp3", + "title": "Regret", + "duration": 2490, + "artist": "New Order", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/8r1ifw.m4a", + "title": "Rule Britannia Overture", + "duration": 7320, + "artist": "Richard Wagner", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/75o3mo.m4a", + "title": "Da Ya Think I'm Sexy?", + "duration": 3270, + "artist": "Rod Stewart", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/s37xwb.m4a", + "title": "Missing You", + "duration": 2690, + "artist": "John Waite", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/nayw83.mp3", + "title": "Red Velvet", + "duration": 2080, + "artist": "NicolArmarfi", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/m8qpa4.m4a", + "title": "Space Age Love Song", + "duration": 2270, + "artist": "A Flock of Seagulls", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/shjfud.m4a", + "title": "Streets of Laredo", + "duration": 1690, + "artist": "Marty Robbins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/2qdzcj.m4a", + "title": "Crockett's Theme", + "duration": 2040, + "artist": "Jan Hammer", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/8ft96j.m4a", + "title": "Take Me Home", + "duration": 3510, + "artist": "Phil Collins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/q5c942.m4a", + "title": "Moonlight Sonata", + "duration": 8990, + "artist": "Ludwig van Beethoven", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/rlutyi.m4a", + "title": "We Built This City", + "duration": 2960, + "artist": "Starship", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/1rgsqr.m4a", + "title": "A Night on Bald Mountain", + "duration": 6830, + "artist": "Modest Mussorgsky", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/frq3un.m4a", + "title": "Keep on Loving You", + "duration": 2000, + "artist": "REO Speedwagon", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/z3v10u.m4a", + "title": "Lone Star", + "duration": 1470, + "artist": "Lost Weekend Western Swing Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/zg7gkh.m4a", + "title": "In The Shadow of the Valley", + "duration": 1870, + "artist": "Lost Weekend Western Swing Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/v4xtn8.m4a", + "title": "Blue Moon", + "duration": 1710, + "artist": "Frank Sinatra", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/w2ysbr.m4a", + "title": "I Will Wait", + "duration": 2760, + "artist": "Mumford and Sons", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/jim3bp.m4a", + "title": "You Can't Hurry Love", + "duration": 1760, + "artist": "Phil Collins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/r6jh89.m4a", + "title": "Big Iron", + "duration": 2350, + "artist": "Marty Robbins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/h698sa.m4a", + "title": "Overnight Sensation", + "duration": 2380, + "artist": "Firehouse", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/bmik55.mp3", + "title": "Lightnin' Strikes Again", + "duration": 2270, + "artist": "Dokken", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/0e0wmd.m4a", + "title": "Gettin' Jiggy Wit It", + "duration": 2270, + "artist": "Will Smith", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/fm20mk.m4a", + "title": "Lay It Down", + "duration": 2050, + "artist": "Ratt", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/xogao9.m4a", + "title": "Night Fever", + "duration": 2110, + "artist": "The Bee Gees", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/8gvr40.m4a", + "title": "Robot Rock", + "duration": 2870, + "artist": "Daft Punk", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/owzo1t.m4a", + "title": "Space Jam", + "duration": 3040, + "artist": "Quad City DJs", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/t4t9qi.m4a", + "title": "Take Me Home, Country Roads", + "duration": 1980, + "artist": "John Denver", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/il9tge.m4a", + "title": "White Collar Crime", + "duration": 4620, + "artist": "Simon Viklund", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/bcniut.m4a", + "title": "Carmen Miranda's Ghost", + "duration": 1340, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/yg44gl.mp3", + "title": "Dawson's Christian", + "duration": 2660, + "artist": "Duane Elms", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/fhvudh.m4a", + "title": "Good Ship Manatee", + "duration": 1700, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/v5wm23.mp3", + "title": "Bomber", + "duration": 1920, + "artist": "Duane Elms", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/ych1i1.m4a", + "title": "Some Kind of Hero", + "duration": 4070, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/7rfftg.m4a", + "title": "Guardians", + "duration": 2370, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/yg7ndh.m4a", + "title": "One Last Battle", + "duration": 1580, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/8c3n30.m4a", + "title": "New Sins for Old", + "duration": 1520, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/t9i5vh.mp3", + "title": "Space Hero", + "duration": 1680, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/xbj8ep.mp3", + "title": "Sam Jones", + "duration": 5090, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/iiggpj.mp3", + "title": "Spacer's Home", + "duration": 2190, + "artist": "Duane Elms", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/1vowpl.m4a", + "title": "Harder, Better, Faster, Stronger", + "duration": 2260, + "artist": "Daft Punk", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/fnse07.m4a", + "title": "Crazy Train", + "duration": 2960, + "artist": "Ozzy Osbourne", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/z7b6ih.m4a", + "title": "Poison Arrow", + "duration": 2040, + "artist": "ABC", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/d874c4.m4a", + "title": "Everything Counts", + "duration": 2390, + "artist": "Depeche Mode", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/p9yfvg.m4a", + "title": "Legend Has It", + "duration": 2050, + "artist": "Run the Jewels", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/gg4pti.m4a", + "title": "Rasputin", + "duration": 2650, + "artist": "Boney M", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/u3ylxd.m4a", + "title": "Still D.R.E", + "duration": 2740, + "artist": "Dr. Dre (feat. Snoop Dogg)", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/2r3cbk.m4a", + "title": "It Was a Good Day", + "duration": 2600, + "artist": "Ice Cube", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/asthsu.m4a", + "title": "A Kiss to Build a Dream On", + "duration": 1840, + "artist": "Louis Armstrong", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/rze7qx.m4a", + "title": "(I Always Kill) The Things I Love", + "duration": 1750, + "artist": "The Real Tuesday Weld (feat. Claudia Brucken)", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/5o0uwa.mp3", + "title": "Invisible Touch", + "duration": 2080, + "artist": "Gensis", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/pdtbyi.m4a", + "title": "Tainted Love", + "duration": 1620, + "artist": "Soft Cell", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/j58vt2.mp3", + "title": "Everybody Wants To Rule The World", + "duration": 2520, + "artist": "Tears for Fears", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/llja8t.m4a", + "title": "Pink Cloud Days", + "duration": 1890, + "artist": "A.L.I.S.O.N", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/vbydgp.m4a", + "title": "Ethical Constraints Removed", + "duration": 2310, + "artist": "zircon & Jonathan Peros", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/y5tpk4.m4a", + "title": "The Blue Valley", + "duration": 7250, + "artist": "Karsten Koch", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/4vxedh.m4a", + "title": "Miami Disco", + "duration": 2700, + "artist": "Perturbator", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/dw5h51.m4a", + "title": "Shattered Dreams", + "duration": 2050, + "artist": "Johnny Hates Jazz", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/3zfcq0.mp3", + "title": "Miami", + "duration": 2730, + "artist": "Jasper Byrne", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/ecicu2.mp3", + "title": "Voyager", + "duration": 2140, + "artist": "Jasper Byrne", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/zfwxms.m4a", + "title": "Clouds of Fire", + "duration": 1170, + "artist": "Hector", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/5pl46n.m4a", + "title": "Every Day Is Night", + "duration": 2200, + "artist": "Garoad", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/0y4tjc.m4a", + "title": "Angel", + "duration": 3790, + "artist": "Massive Attack", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/ke8uk5.m4a", + "title": "Beware the Beast", + "duration": 2260, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/u7yyft.m4a", + "title": "The Promise", + "duration": 2200, + "artist": "When In Rome", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/gcej08.m4a", + "title": "UNATCO - Conversation", + "duration": 1720, + "artist": "Michiel van den Bos", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/pf929m.m4a", + "title": "Virtual Insanity", + "duration": 3400, + "artist": "Jamiroquai", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/lu1gif.m4a", + "title": "Freek'n You", + "duration": 3790, + "artist": "Jodeci", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/g368sb.m4a", + "title": "And The Beat Goes On", + "duration": 4500, + "artist": "The Whispers", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/5ikte3.m4a", + "title": "Kiss From a Rose", + "duration": 2880, + "artist": "Seal", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/cqqyzj.m4a", + "title": "Sexual Healing", + "duration": 2430, + "artist": "Marvin Gaye", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/t9mwa9.m4a", + "title": "Sometimes", + "duration": 2530, + "artist": "Miami Horror", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/hdi0l9.m4a", + "title": "Nightcall", + "duration": 2580, + "artist": "Kavinsky", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/4pul1m.m4a", + "title": "Wash Away", + "duration": 2070, + "artist": "Alkaline Trio", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/whcm2r.m4a", + "title": "You Get What You Give", + "duration": 3000, + "artist": "New Radicals", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/adxl47.m4a", + "title": "Let's Dance", + "duration": 2500, + "artist": "David Bowie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/50sksv.m4a", + "title": "Do It Again", + "duration": 3560, + "artist": "Steely Dan", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/j3ntvh.m4a", + "title": "Reelin' In The Years", + "duration": 2750, + "artist": "Steely Dan", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/utxphs.m4a", + "title": "Fire", + "duration": 1750, + "artist": "The Crazy World of Arthur Brown", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/5sh98r.m4a", + "title": "Everlong", + "duration": 2500, + "artist": "Foo Fighters", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/fdjdmj.m4a", + "title": "Limelight", + "duration": 2590, + "artist": "Rush", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/hdlhuf.m4a", + "title": "Revolution", + "duration": 2030, + "artist": "The Beatles", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/9hg3cr.m4a", + "title": "Dance the Night Away", + "duration": 1880, + "artist": "Van Halen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/c961k1.m4a", + "title": "Blue Monday", + "duration": 4430, + "artist": "New Order", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/gldcwv.m4a", + "title": "Dancin' In the Ruins", + "duration": 2410, + "artist": "Blue Oyster Cult", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/1ckdtl.m4a", + "title": "The Boys Are Back In Town", + "duration": 2690, + "artist": "Thin Lizzy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/w8plzv.m4a", + "title": "What It Takes", + "duration": 3110, + "artist": "Aerosmith", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/kdrv1r.m4a", + "title": "Angel", + "duration": 3080, + "artist": "Aerosmith", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/eh54mt.m4a", + "title": "Dude (Looks Like A Lady)", + "duration": 2650, + "artist": "Aerosmith", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/yczf2s.m4a", + "title": "Baba O'Riley", + "duration": 3000, + "artist": "The Who", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/v5376r.m4a", + "title": "Broken Wings", + "duration": 3430, + "artist": "Mr. Mister", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/r27dka.m4a", + "title": "Can't Fight This Feeling", + "duration": 2940, + "artist": "REO Speedwagon", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/a69sg1.m4a", + "title": "Talk Dirty To Me", + "duration": 2240, + "artist": "Poison", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/agtxnz.mp3", + "title": "Jump", + "duration": 2420, + "artist": "Van Halen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/s8fzga.m4a", + "title": "Itz Nothin", + "duration": 2040, + "artist": "Young Roscoe", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/5qgnr9.m4a", + "title": "The Power Of Love", + "duration": 2340, + "artist": "Huey Lewis and The News", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/whbte8.m4a", + "title": "Just a Gigolo / I Ain't Got Nobody", + "duration": 2780, + "artist": "David Lee Roth", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/r32v4i.mp3", + "title": "True Faith", + "duration": 3540, + "artist": "New Order", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/oi7rov.m4a", + "title": "I Want You", + "duration": 2320, + "artist": "Savage Garden", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/tshasp.m4a", + "title": "Space Asshole", + "duration": 2340, + "artist": "Chris Remo", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/yfg6if.m4a", + "title": "Far Away", + "duration": 2810, + "artist": "Jose Gonzalez", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/6rbq2q.m4a", + "title": "All That Could Ever Be", + "duration": 3960, + "artist": "Rik Schaffer", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/l8baty.m4a", + "title": "Sleepwalking", + "duration": 2170, + "artist": "The Chain Gang of 1974", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/n6wwdu.m4a", + "title": "Take It On the Run", + "duration": 2390, + "artist": "REO Speedwagon", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/xwcipt.m4a", + "title": "Radio Ga Ga", + "duration": 3480, + "artist": "Queen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/kq2ak3.m4a", + "title": "Dancing With Myself", + "duration": 2900, + "artist": "Billy Idol", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/ufk5gk.m4a", + "title": "Get Down Saturday Night", + "duration": 4100, + "artist": "Oliver Cheatham", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/3pvlwa.m4a", + "title": "Disco Inferno", + "duration": 2130, + "artist": "The Trammps", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/mt0w0u.mp3", + "title": "Wayfarer", + "duration": 2710, + "artist": "Kavinsky", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/wsjaml.m4a", + "title": "Papa Was A Rolling Stone", + "duration": 4180, + "artist": "The Temptations", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/ln6qoi.m4a", + "title": "I Don't Care Anymore", + "duration": 3050, + "artist": "Phil Collins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/sp6pks.m4a", + "title": "Throwing It All Away", + "duration": 2300, + "artist": "Genesis", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/1kv7kx.mp3", + "title": "In Too Deep", + "duration": 2980, + "artist": "Genesis", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/u42u20.mp3", + "title": "Easy Lover", + "duration": 3020, + "artist": "Phil Collins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/vwlu1a.mp3", + "title": "How To Be A Millionaire", + "duration": 2150, + "artist": "ABC", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/r6d520.mp3", + "title": "Hip To Be Square", + "duration": 2450, + "artist": "Huey Lewis and The News", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/i7qhge.m4a", + "title": "You've Got Another Thing Coming", + "duration": 3100, + "artist": "Judas Priest", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/16y3iy.m4a", + "title": "Live Wire", + "duration": 1940, + "artist": "Motley Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/4sdesv.m4a", + "title": "Ace of Spades", + "duration": 1670, + "artist": "Motorhead", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/3qqt2v.m4a", + "title": "Rise Of The Chaos Wizards", + "duration": 2370, + "artist": "Gloryhammer", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/fgcdu2.m4a", + "title": "Turn Up the Radio", + "duration": 2780, + "artist": "Autograph", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/86ylwc.mp3", + "title": "Bark at the Moon", + "duration": 2560, + "artist": "Ozzy Osbourne", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/nfxzcn.m4a", + "title": "Cum on Feel the Noize", + "duration": 2900, + "artist": "Quiet Riot", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/gl22vl.m4a", + "title": "The Hellion / Electric Eye", + "duration": 2610, + "artist": "Judas Priest", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/j4fvlc.mp3", + "title": "2 Minutes To Midnight", + "duration": 3600, + "artist": "Iron Maiden", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/sj1o0z.m4a", + "title": "Restless Gypsy", + "duration": 2990, + "artist": "W.A.S.P", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/lkkq00.m4a", + "title": "Universe On Fire", + "duration": 2460, + "artist": "Gloryhammer", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/ftmgxf.m4a", + "title": "Girls, Girls, Girls", + "duration": 2700, + "artist": "Motley Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/uciolb.m4a", + "title": "To Hell with the Devil", + "duration": 2440, + "artist": "Stryper", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/6x9zur.m4a", + "title": "God Blessed Video", + "duration": 2100, + "artist": "Alcatrazz", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/gmgh6w.m4a", + "title": "Cumin' Atcha Live", + "duration": 2660, + "artist": "Tesla", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/zti66s.m4a", + "title": "Heavy Metal: The Black and Silver", + "duration": 2000, + "artist": "Blue Oyster Cult", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/8ew21k.m4a", + "title": "Mars For The Rich", + "duration": 2510, + "artist": "King Gizzard & the Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/di9apc.m4a", + "title": "Insane in the Membrane", + "duration": 2100, + "artist": "Cypress Hill", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/8nyu9s.m4a", + "title": "Just a Friend", + "duration": 2380, + "artist": "Biz Markie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/2b0wu2.m4a", + "title": "Intergalactic", + "duration": 2290, + "artist": "Beastie Boys", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/nv66ck.mp3", + "title": "Wild Child", + "duration": 3120, + "artist": "W.A.S.P", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/z3k8rs.m4a", + "title": "Icarus' Dream Suite Op.4", + "duration": 5140, + "artist": "Yngwie Malmsteen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/57ghcq.m4a", + "title": "Fantasy", + "duration": 3030, + "artist": "Aldo Nova", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/kwwvsg.m4a", + "title": "Nocturne Op.9 No.2", + "duration": 2690, + "artist": "Frederic Chopin", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/zab3he.mp3", + "title": "Concord", + "duration": 1850, + "artist": "NicolArmarfi & Blue123", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/e52gys.mp3", + "title": "Clair de Lune", + "duration": 3570, + "artist": "Claude Debussy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/e7nk9a.mp3", + "title": "Gymnopedie No.1", + "duration": 1870, + "artist": "Erik Satie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/wf7jr8.mp3", + "title": "Johans Waltz", + "duration": 2860, + "artist": "Andreas Waldetoft", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/15ybh9.mp3", + "title": "Handel This", + "duration": 890, + "artist": "Andreas Waldetoft", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/0294ze.m4a", + "title": "Lohengrin: Prelude", + "duration": 5930, + "artist": "Richard Wagner", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/xgq1tr.m4a", + "title": "Concerto Grosso no. 10 in B Minor - Allegro", + "duration": 2150, + "artist": "Antonio Vivaldi", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/vxe2qt.m4a", + "title": "Ancient Stones", + "duration": 2850, + "artist": "Jeremy Soule", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/8bdxq3.m4a", + "title": "Secunda", + "duration": 1230, + "artist": "Jeremy Soule", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/lqgoiv.m4a", + "title": "Far Horizons", + "duration": 3310, + "artist": "Jeremy Soule", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/azzap9.mp3", + "title": "Time of Change", + "duration": 2020, + "artist": "FlybyNo", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/m67gzk.m4a", + "title": "Dreamer's Rest", + "duration": 2380, + "artist": "Vindsvept", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/tnx2fb.mp3", + "title": "Moment of Decision", + "duration": 2430, + "artist": "NicolArmarfi", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Classical and Orchestral" + }, + { + "url": "https://files.catbox.moe/c7yeau.mp3", + "title": "In My Dreams", + "duration": 2600, + "artist": "Dokken", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/u8xh6b.m4a", + "title": "Wasted Years", + "duration": 3090, + "artist": "Iron Maiden", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/utjagr.m4a", + "title": "Round and Round", + "duration": 2650, + "artist": "Ratt", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/mbzbla.m4a", + "title": "Crystal Ball", + "duration": 2950, + "artist": "Yngwie Malmsteen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/p9cnth.m4a", + "title": "I Remember You", + "duration": 3130, + "artist": "Skid Row", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/pkhotw.m4a", + "title": "I Won't Forget You", + "duration": 2150, + "artist": "Poison", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/231ksl.m4a", + "title": "Pjanoo (Club Mix)", + "duration": 4500, + "artist": "Eric Prydz", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/58hrry.m4a", + "title": "Inferno Galore", + "duration": 2250, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/vsdg7v.m4a", + "title": "Low Rider", + "duration": 1910, + "artist": "War", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/gu2yfz.m4a", + "title": "How Deep Is Your Love", + "duration": 2450, + "artist": "The Bee Gees", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/slm18k.m4a", + "title": "You Dropped A Bomb On Me", + "duration": 3120, + "artist": "The Gap Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/24cqmw.m4a", + "title": "Every Rose Has It's Thorn", + "duration": 2600, + "artist": "Poison", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/v3otpl.m4a", + "title": "Fallen Angel", + "duration": 2380, + "artist": "Poison", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/iezn71.m4a", + "title": "Baby Hold On", + "duration": 2100, + "artist": "Eddie Money", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/e8w3ym.m4a", + "title": "Two Tickets To Paradise", + "duration": 2370, + "artist": "Eddie Money", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/cavpff.m4a", + "title": "Take Me Home Tonight", + "duration": 2110, + "artist": "Eddie Money", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/n8l93a.m4a", + "title": "Same Ol' Situation (S.O.S.)", + "duration": 2530, + "artist": "Motely Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/gnr6py.m4a", + "title": "Metal Health (Bang Your Head)", + "duration": 3160, + "artist": "Quiet Riot", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/1drakx.m4a", + "title": "Shout At The Devil", + "duration": 1950, + "artist": "Motley Crue", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/1kevft.m4a", + "title": "Walk With Me in Hell", + "duration": 3110, + "artist": "Lamb of God", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/9cdsmd.m4a", + "title": "Crazy (A Suitable Case For Treatment)", + "duration": 2070, + "artist": "Nazareth", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/6oq1qw.m4a", + "title": "Freezing Moon", + "duration": 3830, + "artist": "Mayhem", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/jrc74a.m4a", + "title": "Raining Blood", + "duration": 2540, + "artist": "Slayer", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/ey07dt.m4a", + "title": "Marching Off to War", + "duration": 2490, + "artist": "Motorhead", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/a77r2l.m4a", + "title": "Hymn Of The Forsaken", + "duration": 3880, + "artist": "Climmhazard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/omm3y6.m4a", + "title": "Victory Song", + "duration": 6390, + "artist": "Ensiferum", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/sx7kbr.m4a", + "title": "Dunkelheit", + "duration": 4210, + "artist": "Burzum", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/r6uftn.m4a", + "title": "Sick Bubblegum", + "duration": 2240, + "artist": "Rob Zombie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/ysee6q.m4a", + "title": "Laser Enforcer", + "duration": 2540, + "artist": "Slough Feg", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/sxcus4.m4a", + "title": "Veteran of the Psychic Wars", + "duration": 2890, + "artist": "Blue Oyster Cult", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/qkxavx.m4a", + "title": "Tiger! Tiger!", + "duration": 2530, + "artist": "Slough Feg", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/u7rhxc.m4a", + "title": "Hyperdrive", + "duration": 2140, + "artist": "The Devin Townsend Project", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/narev2.m4a", + "title": "Judas", + "duration": 2500, + "artist": "Fozzy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/pguvz2.m4a", + "title": "Alone Again", + "duration": 2600, + "artist": "Dokken", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/0gol3u.m4a", + "title": "Superbeast", + "duration": 2200, + "artist": "Rob Zombie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/irrxal.m4a", + "title": "Perihelion", + "duration": 1910, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/f9yw8d.m4a", + "title": "Self-Immolate", + "duration": 2680, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/zmyym2.m4a", + "title": "Planet B", + "duration": 2360, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/isa0lb.m4a", + "title": "On The Wind", + "duration": 2250, + "artist": "Dream Evil", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/oi9dt1.m4a", + "title": "Catch The Rainbow", + "duration": 3960, + "artist": "Rainbow", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/1ozes3.m4a", + "title": "Peace Sells", + "duration": 2440, + "artist": "Megadeth", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Metal" + }, + { + "url": "https://files.catbox.moe/iyi2ll.m4a", + "title": "Never Gonna Give You Up", + "duration": 2130, + "artist": "Rick Astley", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/s46vw9.m4a", + "title": "I Fought The Law", + "duration": 1630, + "artist": "The Clash", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/3blefo.m4a", + "title": "Piano Man", + "duration": 3400, + "artist": "Billy Joel", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/qq4cbx.m4a", + "title": "Mr. Blue Sky", + "duration": 3030, + "artist": "Electric Light Orchestra", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/uxwl09.m4a", + "title": "Here I Go Again (1987 Version)", + "duration": 2750, + "artist": "Whitesnake", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/jgigel.m4a", + "title": "Starman", + "duration": 2540, + "artist": "David Bowie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/nq2w6w.m4a", + "title": "Space Oddity", + "duration": 3180, + "artist": "David Bowie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/2n2gdq.m4a", + "title": "Changes", + "duration": 2170, + "artist": "David Bowie", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/jzucsv.mp3", + "title": "A Horse With No Name", + "duration": 2470, + "artist": "America", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/d05y2k.m4a", + "title": "Space Oddity (Cover)", + "duration": 3330, + "artist": "Chris Hadfield", + "secret": false, + "lobby": false, + "jukebox": false, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/1gbbu1.m4a", + "title": "Cruel, Cruel World (Josh Homme)", + "duration": 2140, + "artist": "Josh Homme", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/3941ms.m4a", + "title": "House Building", + "duration": 2200, + "artist": "David 'Fergie' Ferguson", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/rf6v2o.m4a", + "title": "Folsom Prison Blues", + "duration": 1680, + "artist": "Johnny Cash", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/1deyd1.m4a", + "title": "A White Sport Coat (And a Pink Carnation)", + "duration": 1480, + "artist": "Marty Robbins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/r7asbn.m4a", + "title": "Lovers Of The World", + "duration": 1680, + "artist": "Jerry Wallace", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/gdd5v3.m4a", + "title": "Cruel, Cruel World (Willie Nelson)", + "duration": 2660, + "artist": "Willie Nelson", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/vrj0cl.m4a", + "title": "The Story Of A Soldier", + "duration": 2390, + "artist": "Ennio Morricone", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/wdswuf.m4a", + "title": "Rawhide", + "duration": 1200, + "artist": "Frankie Laine", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/sa9lg3.m4a", + "title": "Psycho", + "duration": 2160, + "artist": "Eddie Noack", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/j84ln2.m4a", + "title": "Before You Use That Gun", + "duration": 1520, + "artist": "Eddie Noack", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/3ae5p2.m4a", + "title": "Rhinestone Cowboy", + "duration": 2090, + "artist": "Glen Campbell", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/hbc1vd.m4a", + "title": "Flowers on the Wall", + "duration": 1390, + "artist": "The Statler Brothers", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/7ibtm1.m4a", + "title": "Bed Of Roses", + "duration": 1480, + "artist": "The Statler Brothers", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/mv8xql.m4a", + "title": "New York City", + "duration": 1710, + "artist": "The Statler Brothers", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/5mtinr.m4a", + "title": "The Devil Went Down to Georgia", + "duration": 2140, + "artist": "The Charlie Daniels Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/qvd0qg.m4a", + "title": "Cottonwood Tree", + "duration": 2370, + "artist": "Marty Robbins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/378qb4.m4a", + "title": "Ain't I Right", + "duration": 1980, + "artist": "Marty Robbins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/5sgpkn.m4a", + "title": "Wish It Was True", + "duration": 2280, + "artist": "The White Buffalo", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/de3b29.m4a", + "title": "Burn The Witch", + "duration": 2480, + "artist": "Shawn James", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/av3j0o.m4a", + "title": "Sink The Bismarck", + "duration": 1940, + "artist": "Johnny Horton", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/8z0ueu.m4a", + "title": "Mr. Shorty", + "duration": 3030, + "artist": "Marty Robbins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/0wwk0d.m4a", + "title": "Uneasy Rider", + "duration": 3180, + "artist": "The Charlie Daniels Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/dws0dz.m4a", + "title": "Uneasy Rider '88", + "duration": 2640, + "artist": "The Charlie Daniels Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/ci1gka.m4a", + "title": "For A Few Dollars More", + "duration": 1680, + "artist": "Ennio Morricone", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Country and Western" + }, + { + "url": "https://files.catbox.moe/pbw43i.m4a", + "title": "Faster Than Light", + "duration": 2370, + "artist": "Ben Prunty", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/va5a54.m4a", + "title": "Rebecca", + "duration": 2540, + "artist": "Tesla Boy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/g3mwvn.m4a", + "title": "Zero Point Non-Response", + "duration": 3330, + "artist": "Mega Drive", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/fu3mf9.m4a", + "title": "Edge of Reality", + "duration": 3300, + "artist": "Mega Drive", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/nspw3i.m4a", + "title": "What Is Love", + "duration": 2700, + "artist": "Haddaway", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/8kyy4o.mp3", + "title": "Time Lapse", + "duration": 2600, + "artist": "Kalax", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/yuwdr5.m4a", + "title": "So Far Away", + "duration": 2820, + "artist": "Lazerhawk", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/hlsk69.m4a", + "title": "Children of the Omnissiah", + "duration": 1060, + "artist": "Guillaume David", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/t7q36u.m4a", + "title": "Noosphere", + "duration": 3880, + "artist": "Guillaume David", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/e2lxd4.m4a", + "title": "Resonance", + "duration": 2120, + "artist": "HOME", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/fnngli.m4a", + "title": "We're Finally Landing", + "duration": 2720, + "artist": "HOME", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/36juno.mp3", + "title": "Head First", + "duration": 2130, + "artist": "HOME", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/bvwhm0.m4a", + "title": "Dust", + "duration": 3020, + "artist": "M|O|O|N", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/b6urx6.m4a", + "title": "Silent Strike", + "duration": 2970, + "artist": "Garth Knight", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/ywr4gd.mp3", + "title": "Night Train", + "duration": 2440, + "artist": "Mitch Murder", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/rgtjn3.m4a", + "title": "Welcome to VA-11 Hall-A", + "duration": 1880, + "artist": "Garoad", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/86wwz1.m4a", + "title": "Drive Me Wild", + "duration": 2280, + "artist": "Garoad", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/j14cpw.m4a", + "title": "Sexualizer", + "duration": 2990, + "artist": "Perturbator (feat. Flash Arnold)", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/3zb1hx.m4a", + "title": "Into The Labyrinth", + "duration": 3100, + "artist": "Kraddy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/qxadpn.m4a", + "title": "Turbo Killer", + "duration": 2080, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/dclq52.m4a", + "title": "Deep Cover", + "duration": 4850, + "artist": "Sun Araw", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/wpws58.m4a", + "title": "Fragments of Bach I", + "duration": 3060, + "artist": "Compilerbau", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/ltlzpi.mp3", + "title": "Leather Teeth", + "duration": 2330, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/bem2ur.m4a", + "title": "Cheerleader Effect", + "duration": 2170, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/hwfg7e.m4a", + "title": "Hairspray Hurricane", + "duration": 3310, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/xx00ka.m4a", + "title": "Sunday Lunch", + "duration": 1950, + "artist": "Carpenter Brut", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/4ju4p1.mp3", + "title": "Lone Digger", + "duration": 2300, + "artist": "Caravan Palace", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/4c0lmk.m4a", + "title": "Dessert", + "duration": 1840, + "artist": "Jun Chikuma", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/g0ms06.m4a", + "title": "Propane Nightmares", + "duration": 3130, + "artist": "Pendulum", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/7i23kv.m4a", + "title": "Overdrive (Instrumental)", + "duration": 2260, + "artist": "Lily Arciniega", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/re4is1.m4a", + "title": "Tusk", + "duration": 2180, + "artist": "Fleetwood Mac", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/xztay0.m4a", + "title": "Rock On Rockall", + "duration": 1740, + "artist": "The Wolfe Tones", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/6ryyk0.m4a", + "title": "Apocalypse", + "duration": 2900, + "artist": "Cigarettes After Sex", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/2z6lpx.mp3", + "title": "Pioneer's Song", + "duration": 1790, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/e55ey0.mp3", + "title": "Bones", + "duration": 1200, + "artist": "Leslie Fish", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Folk and Indie" + }, + { + "url": "https://files.catbox.moe/evilyr.m4a", + "title": "Age of Consent", + "duration": 3150, + "artist": "New Order", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/lgot68.m4a", + "title": "Maneater", + "duration": 2730, + "artist": "Hall & Oates", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/8e4bb0.m4a", + "title": "Ordinary World", + "duration": 3400, + "artist": "Duran Duran", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/leulle.m4a", + "title": "Forever Young", + "duration": 2260, + "artist": "Alphaville", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/z8bxjp.m4a", + "title": "Sussudio", + "duration": 2640, + "artist": "Phil Collins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/wti40y.m4a", + "title": "One More Night", + "duration": 2910, + "artist": "Phil Collins", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/zifzgk.m4a", + "title": "Little Girls", + "duration": 2230, + "artist": "Oingo Boingo", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/5yk0mm.m4a", + "title": "Everything She Wants", + "duration": 3920, + "artist": "Wham!", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/5ye8et.m4a", + "title": "Careless Whisper", + "duration": 3030, + "artist": "George Michael", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/9a5dov.m4a", + "title": "Space Cowboy", + "duration": 2160, + "artist": "Jamiroquai", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Disco, Funk, Soul, and R&B" + }, + { + "url": "https://files.catbox.moe/dpjb9r.m4a", + "title": "Video Killed The Radio Star", + "duration": 2530, + "artist": "The Buggles", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/367b33.m4a", + "title": "Honey, There's No Time", + "duration": 2610, + "artist": "Feng Suave", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/q5kk5l.m4a", + "title": "Sink into the Floor", + "duration": 2790, + "artist": "Feng Suave", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/w7d9qk.m4a", + "title": "This Train", + "duration": 2850, + "artist": "Turk Murphy's San Francisco Jazz Band", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/79d8gs.mp3", + "title": "Love Theme", + "duration": 5710, + "artist": "Andrew Hale", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/u1h4vg.m4a", + "title": "Jingle Jangle Jingle", + "duration": 1970, + "artist": "Kay Kyser", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/ky7dvn.m4a", + "title": "Personality", + "duration": 1690, + "artist": "Johnny Mercer & The Pied Pipers", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/5jm318.m4a", + "title": "Let's Face The Music And Dance", + "duration": 1710, + "artist": "Frank Sinatra", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/jhjidm.m4a", + "title": "I'll Get By", + "duration": 1700, + "artist": "Frank Fontaine", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/bwg49y.m4a", + "title": "That Face!", + "duration": 1430, + "artist": "Frank Sinatra Jr", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/2wmc3x.m4a", + "title": "Mack the Knife", + "duration": 1840, + "artist": "Bobby Darin", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/q2t0i0.m4a", + "title": "The Day The Clown Cried", + "duration": 1900, + "artist": "Jimmy Beaumont & The Skyliners", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/c06zik.m4a", + "title": "Invitation To The Blues", + "duration": 3240, + "artist": "Tom Waits", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/1z0mli.m4a", + "title": "Drunk On The Moon", + "duration": 3060, + "artist": "Tom Waits", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/dqu0t5.m4a", + "title": "La Vie En Rose", + "duration": 2050, + "artist": "Louis Armstrong", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/0ys4q8.m4a", + "title": "So What", + "duration": 5690, + "artist": "Miles Davis Sextet", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/nr7btw.m4a", + "title": "Just The Two Of Us", + "duration": 4430, + "artist": "Grover Washington Jr", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/tb9ys2.m4a", + "title": "Quiet Nights Of Quiet Stars", + "duration": 1640, + "artist": "Frank Sinatra & Antonio Carlos Jobim", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/zd1sw1.m4a", + "title": "Drinking Water", + "duration": 1530, + "artist": "Frank Sinatra & Antonio Carlos Jobim", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/fwtdoh.m4a", + "title": "Ol' Man River (Showboat)", + "duration": 2340, + "artist": "Paul Robseon", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Jazz" + }, + { + "url": "https://files.catbox.moe/mp8tab.m4a", + "title": "Juke Box Hero", + "duration": 2590, + "artist": "Foreigner", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/n0ezuw.m4a", + "title": "Waiting for a Girl Like You", + "duration": 2890, + "artist": "Foreigner", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/gd49uk.m4a", + "title": "I Want to Know What Love Is", + "duration": 3040, + "artist": "Foreigner", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/s36f97.m4a", + "title": "She Sells Sanctuary", + "duration": 2620, + "artist": "The Cult", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/62lks9.m4a", + "title": "No One Knows", + "duration": 2580, + "artist": "Queens of the Stone Age", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/e4sltu.m4a", + "title": "Like a Stone", + "duration": 2940, + "artist": "Audioslave", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/yitsz9.m4a", + "title": "Friday I'm in Love", + "duration": 2140, + "artist": "The Cure", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/dwyjkt.m4a", + "title": "Ozymandias", + "duration": 1920, + "artist": "Red Vox", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/wmpgcr.mp3", + "title": "Welcome To The Jungle", + "duration": 2690, + "artist": "Guns N' Roses", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/20exnb.mp3", + "title": "Fortunate Son", + "duration": 1400, + "artist": "Creedence Clearwater Revival", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/8xzmw5.mp3", + "title": "Bohemian Rhapsody", + "duration": 3580, + "artist": "Queen", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/7x2cvf.mp3", + "title": "Rocket Man", + "duration": 2820, + "artist": "Elton John", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/xjgch6.m4a", + "title": "Smooth Sailing", + "duration": 2910, + "artist": "Queens of the Stone Age", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/f8ebif.m4a", + "title": "Face Melter (How to Do Impossible Things)", + "duration": 2100, + "artist": "Death Grips", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/6i31kh.m4a", + "title": "Rapper's Delight", + "duration": 8850, + "artist": "The Sugar Hill Gang", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/3y9k43.m4a", + "title": "Super Freak", + "duration": 2020, + "artist": "Rick James", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/93ynna.m4a", + "title": "Party All The Time", + "duration": 2530, + "artist": "Eddie Murphy", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/4s8xyr.m4a", + "title": "Funky Cold Medina", + "duration": 2480, + "artist": "Tone-Loc", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/jzpkv4.m4a", + "title": "Children's Story", + "duration": 2420, + "artist": "Slick Rick", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/tk1zno.m4a", + "title": "Voila", + "duration": 2080, + "artist": "Death Grips", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/jvhl18.m4a", + "title": "Black Ballons Reprise", + "duration": 1620, + "artist": "Flying Lotus (feat. Denzel Curry)", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/59nnfc.m4a", + "title": "Take_it_Back_v2", + "duration": 1690, + "artist": "Denzel Curry & Kenny Beats", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/pkwkd1.m4a", + "title": "All Caps", + "duration": 1340, + "artist": "Madvillain", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/d7zx95.m4a", + "title": "Express Yourself", + "duration": 2650, + "artist": "N.W.A", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/fgn4pf.m4a", + "title": "BLACK BALLOONS", + "duration": 2100, + "artist": "Denzel Curry", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/o7hb3j.m4a", + "title": "Meat Grinder", + "duration": 1310, + "artist": "Madvillain", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Hip-Hop and Rap" + }, + { + "url": "https://files.catbox.moe/8o0z0l.m4a", + "title": "Keep Your Eyes Peeled", + "duration": 3040, + "artist": "Queens of the Stone Age", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/ri8l16.m4a", + "title": "Sleep Drifter", + "duration": 2840, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/zz1p3n.m4a", + "title": "Open Water", + "duration": 4330, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/prllpr.m4a", + "title": "Gamma Knife", + "duration": 2910, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/v66qvy.m4a", + "title": "Baby Gotterdammerung", + "duration": 1880, + "artist": "Monster Magnet", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/isus1b.m4a", + "title": "Robot Stop", + "duration": 2100, + "artist": "King Gizzard & The Lizard Wizard", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/qhionp.mp3", + "title": "Come Sail Away", + "duration": 3650, + "artist": "Styx", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/vm93di.m4a", + "title": "Bullet Girl", + "duration": 3210, + "artist": "John Butler Trio", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/f3gvmk.m4a", + "title": "Holland, 1945", + "duration": 1920, + "artist": "Neutral Milk Hotel", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/8rn8uz.mp3", + "title": "I Wupped Batman's Ass", + "duration": 3270, + "genre": "Miscellaneous", + "artist": "Wesley Willis Fiasco", + "secret": true, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "duration": 1416, + "url": "https://files.catbox.moe/h967s5.mp3", + "title": "MEGALOVANIA", + "artist": "Toby Fox", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "duration": 1416, + "url": "https://files.catbox.moe/yumfgs.mp3", + "title": "ASGORE", + "artist": "Toby Fox", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "duration": 1800, + "url": "https://files.catbox.moe/ewn2u4.mp3", + "title": "Disco Descent", + "artist": "Danny Baranowsky", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "duration": 1130, + "url": "https://files.catbox.moe/8rns1d.mp3", + "title": "Konga Conga Kappa", + "artist": "Danny Baranowsky", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Electronic" + }, + { + "url": "https://files.catbox.moe/3h38kn.mp3", + "title": "Among Us", + "duration": 720, + "artist": "Leonz", + "genre": "Disco, Funk, Soul, and R&B", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/rqhxj1.mp3", + "title": "Leggy Zone", + "duration": 1470, + "artist": "Binox", + "genre": "Electronic", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/e6l6mw.mp3", + "title": "Shop Theme", + "duration": 8910, + "artist": "Kazumi Totaka/Nintendo", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/q2ob3n.mp3", + "title": "PONPONPON", + "duration": 2430, + "artist": "Kyary Pamyu Pamyu", + "genre": "J-Pop", + "secret": false, + "lobby": false + }, + { + "url": "https://files.catbox.moe/o8flhu.mp3", + "title": "Man's Road", + "duration": 2060, + "artist": "America", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/0gb5qs.mp3", + "title": "Passionflower", + "duration": 3840, + "artist": "Jon Gomm", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/p5e28z.mp3", + "title": "What the Fuck", + "duration": 2420, + "artist": "Koh", + "genre": "Folk and Indie", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/0f2xma.mp3", + "title": "Bonetrousle", + "duration": 580, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/6ivc7w.mp3", + "title": "Bury the Light", + "duration": 5830, + "artist": "Victor Borba & Casey Edwards", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/pbtbjv.mp3", + "title": "Dog Song", + "duration": 380, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/4v3eeb.mp3", + "title": "Anticipation", + "duration": 230, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/0q8ch6.mp3", + "title": "Smash Clown", + "duration": 820, + "artist": "Goat", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ygcg2e.mp3", + "title": "Honk The Police", + "duration": 590, + "artist": "Goat", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/h0yswi.mp3", + "title": "Cargonia", + "duration": 630, + "artist": "Goat", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/xg76ja.mp3", + "title": "Hail Cargonia", + "duration": 980, + "artist": "Goat", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/tbr2rc.mp3", + "title": "Banned From Cargo", + "duration": 2450, + "artist": "Goat", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/tw2et2.mp3", + "title": "Periphery Dixie", + "duration": 1200, + "artist": "Goat", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/rm5hcs.mp3", + "title": "Cargonia (cover)", + "duration": 2730, + "artist": "Dadbot5000", + "genre": "Space", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ybfof9.mp3", + "title": "The Legend", + "duration": 1120, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ugfx06.mp3", + "title": "Field of Hopes and Dreams", + "duration": 1610, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/wr08om.mp3", + "title": "Checker Dance", + "duration": 780, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/4au954.mp3", + "title": "Vs Susie", + "duration": 810, + "artist": "Toby Fox", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/c9y5x2.mp3", + "title": "Golden Wind", + "duration": 2930, + "artist": "Yugo Kanno", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ymvtem.mp3", + "title": "Sono Chi no Sadame", + "duration": 2610, + "artist": "Hiroaki TOMMY Tominaga", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/z73u05.mp3", + "title": "Bloody Stream", + "duration": 2590, + "artist": "Coda", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/yg3643.mp3", + "title": "Stand Proud", + "duration": 2750, + "artist": "Jin Hashimoto", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/344qrf.mp3", + "title": "Sono Chi no Kioku ~end of THE WORLD~", + "duration": 2620, + "artist": "JO☆STARS", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/0n6y6v.mp3", + "title": "Crazy Noisy Bizarre Town", + "duration": 1840, + "artist": "THE DU", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/j3xzw6.mp3", + "title": "Chase", + "duration": 1450, + "artist": "Batta", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/luf1bh.mp3", + "title": "Great Days", + "duration": 2400, + "artist": "Karen Aoki & Daisuke Hasegaw", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ytp4d2.mp3", + "title": "Fighting Gold", + "duration": 2540, + "artist": "Coda", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/q1xjdp.mp3", + "title": "I Want It That Way", + "duration": 2120, + "artist": "Backstreet Boys", + "genre": "Pop", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/pxpkat.mp3", + "title": "Shop Theme Cover", + "duration": 1770, + "artist": "Songe", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/nz03o1.mp3", + "title": "Deep Space 9 (Cover)", + "duration": 1220, + "artist": "Heropoint", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/n4vcnq.mp3", + "title": "Trouble Shooting Star", + "duration": 1460, + "artist": "", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/byy378.mp3", + "title": "The Lord of the Rings The Fellowship of the its my book they will walk if I tell them to", + "duration": 970, + "artist": "Tom Cardy", + "genre": "Folk and Indie", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/akgbup.mp3", + "title": "Flight of the Bumblebee", + "duration": 2050, + "artist": "Rimsky Korsakov", + "genre": "Classical and Orchestral", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/milk8o.mp3", + "title": "As Heaven Is Wide", + "duration": 2880, + "artist": "Garbage", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/8mh82l.mp3", + "title": "Combat Montage", + "duration": 1410, + "artist": "Kevin Manthei", + "genre": "Rock", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/qa6ahi.mp3", + "title": "Deadlines", + "duration": 1570, + "artist": "Network Music Ensemble", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/cdmm5k.mp3", + "title": "Holding Out For A Hero", + "duration": 2620, + "artist": "Ella Mae Bowen", + "genre": "Country and Western", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/jlv9eb.mp3", + "title": "Jiko Bunseki", + "duration": 1420, + "artist": "Yuki Hayashi", + "genre": "Anime", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/vzbcsc.mp3", + "title": "Let It End", + "duration": 2220, + "artist": "Karliene", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/nsfwxe.mp3", + "title": "Proof Of A Hero (16 bit)", + "duration": 1410, + "artist": "Bulby", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ywoaqa.mp3", + "title": "Proof Of A Hero", + "duration": 1340, + "artist": "Kouda Masato", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/xlrbbe.mp3", + "title": "Pure Imagination", + "duration": 2060, + "artist": "Fiona Apple", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/q3f6sq.mp3", + "title": "Rhapsody In Blue", + "duration": 9870, + "artist": "Kamil Hala, Slovak Philharmonic Orchestra, Libor Pešek", + "genre": "Classical and Orchestral", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/vzsm5k.mp3", + "title": "Surface Of SR388", + "duration": 1710, + "artist": "BG Ollie", + "genre": "Video Game", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/ngtv3e.mp3", + "title": "Where My Heart Will Take Me", + "duration": 2490, + "artist": "Russell Watson", + "genre": "Country and Western", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/cfq7bo.mp3", + "title": "Kiss From A Rose", + "duration": 2860, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/4mypzc.mp3", + "title": "Black Hole Sun", + "duration": 3210, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/qpkv1q.mp3", + "title": "I Still Haven't Found What I'm Looking For", + "duration": 2870, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/g8vawq.mp3", + "title": "Nights In White Satin", + "duration": 2710, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/01ljjx.mp3", + "title": "Land Of Confusion", + "duration": 2850, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/2iugx4.mp3", + "title": "Aspirations", + "duration": 3010, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/m3cwu1.mp3", + "title": "Head Over Heels", + "duration": 2420, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/xtizlg.mp3", + "title": "Get Lucky", + "duration": 2490, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/dym0sp.mp3", + "title": "God Only Knows", + "duration": 1810, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/i8gml0.mp3", + "title": "Scarborough Fair", + "duration": 2020, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/chc70l.mp3", + "title": "The Sphere A Kind Of Dream", + "duration": 620, + "artist": "Dan Avidan & Super Guitar Bros", + "genre": "Acoustic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/w48oqv.mp3", + "title": "Pushin' The Speed of Light", + "duration": 2130, + "artist": "Julia Ecklar & Anne Prather", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/zacsky.mp3", + "title": "S.T.L.", + "duration": 1190, + "artist": "Free Fall & Other Delights", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/9a3ow3.mp3", + "title": "Phantom Lover of the Star Drive", + "duration": 1930, + "artist": "Free Fall & Other Delights", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/eo59pv.mp3", + "title": "Molecular Clouds", + "duration": 1560, + "artist": "Free Fall & Other Delights", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/227jw9.mp3", + "title": "A Reconsideration (Zero-G Sex)", + "duration": 2530, + "artist": "Free Fall & Other Delights", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/yvn8bu.mp3", + "title": "Stuck Here", + "duration": 1360, + "artist": "Free Fall & Other Delights", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/nsnf73.mp3", + "title": "The Ballad of Transport 18", + "duration": 2660, + "artist": "Leslie Fish", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/hwsbsi.mp3", + "title": "Don't Push That Button", + "duration": 2450, + "artist": "Duane Elms", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/iizfw9.mp3", + "title": "Late Night at the Draco Tavern", + "duration": 2600, + "artist": "Duane Elms", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/4zaljk.mp3", + "title": "Startide Rising", + "duration": 1050, + "artist": "Duane Elms", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/9y01ry.mp3", + "title": "F.A.P. Feline American Princess", + "duration": 2640, + "artist": "Leslie Fish", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/s7u3vi.mp3", + "title": "Hymn to Breaking Strain", + "duration": 2710, + "artist": "Julia Ecklar & Leslie Fish", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/5pwnw3.m4a", + "title": "Eristocrats (Discordia Pt.II)", + "duration": 1690, + "artist": "That Handsome Devil", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/8r5d7q.mp3", + "title": "Take me to Snurch (Snail Church)", + "duration": 2370, + "genre": "Pop", + "artist": "fairyeiry", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/2ozzmg.m4a", + "title": "Charlie's Inferno", + "duration": 2250, + "artist": "That Handsome Devil", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Rock" + }, + { + "url": "https://files.catbox.moe/w8x8qb.m4a", + "title": "Monster Mash", + "duration": 1930, + "artist": "Bobby Pickett", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/rjvm4j.mp3", + "title": "What's New Pussycat", + "duration": 1290, + "artist": "Tom Jones", + "secret": false, + "lobby": false, + "jukebox": true, + "genre": "Pop" + }, + { + "url": "https://files.catbox.moe/t19nip.m4a", + "title": "It's Not Unusual", + "duration": 1200, + "artist": "Tom Jones", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/n10l5v.mp3", + "title": "Sucklet's Song", + "duration": 1840, + "artist": "emamouse", + "genre": "Folk and Indie", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/6m88w6.mp3", + "title": "King Sucklet", + "duration": 1370, + "artist": "emamouse", + "genre": "Folk and Indie", + "secret": true, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/dgloyl.mp3", + "title": "Bomb-Sniffing Pomeranian", + "duration": 2600, + "artist": "Stinkbug & Coda", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/mrgdre.mp3", + "title": "Nuclear", + "duration": 3050, + "artist": "Mike Oldfield", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/mjt2ll.mp3", + "title": "Brain Power", + "duration": 3700, + "artist": "NOMA", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/l91mps.mp3", + "title": "Fungal Funk", + "duration": 1610, + "artist": "Danny Baranowsky", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/hwv7lf.mp3", + "title": "Heart Transplant", + "duration": 2700, + "artist": "Surgeon Simulator", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/dowdad.mp3", + "title": "Distant Duet", + "duration": 1920, + "artist": "Rhythm Doctor", + "genre": "Classical and Orchestral", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/8drrgl.mp3", + "title": "All the Times", + "duration": 2150, + "artist": "Rhythm Doctor", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/c6bjxg.mp3", + "title": "Lo-fi Hip-Hop Beats To Treat Patients To", + "duration": 1250, + "artist": "Rhythm Doctor", + "genre": "Hip-Hop and Rap", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/s5a2mp.mp3", + "title": "We All Lift Together", + "duration": 1520, + "artist": "Warframe", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://files.catbox.moe/i9b6ew.mp3", + "title": "Sleeping In The Cold Below", + "duration": 2110, + "artist": "Warframe", + "genre": "Folk and Indie", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://archive.org/download/i-care-because-you-do-flac/10.%20Aphex%20Twin%20-%20Alberto%20Balsalm.mp3", + "title": "Alberto Balsalm", + "duration": 3110, + "artist": "Aphex Twin", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://archive.org/download/selected-ambient-works-85-92-flac/01.%20Aphex%20Twin%20-%20Xtal.mp3", + "title": "Xtal", + "duration": 2930, + "artist": "Aphex Twin", + "genre": "Electronic", + "secret": false, + "lobby": false, + "jukebox": true + }, + { + "url": "https://archive.org/download/04.-dos-en-uno/02.%20Hojas%20De%20Te.mp3", + "title": "Hojas de Te", + "duration": 2180, + "artist": "Los Tres", + "genre": "Rock", + "secret": false, + "lobby": false, + "jukebox": true + } ] diff --git a/docker-compose.yml b/docker-compose.yml index b22b1c4ac0..d9e9b3a7fd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" services: # Virgo DM server @@ -8,24 +8,24 @@ services: build: context: . dockerfile: Dockerfile - ports: + ports: - "2303:2303" depends_on: - db volumes: - ./config/:/vorestation/config - gamedata:/vorestation/data - # MariaDB/MySQL database: game + # MariaDB/MySQL database: game # (if you don't really need this, feel free to remove this section.) db: image: mariadb restart: unless-stopped env_file: - ./config/docker/mysql.env - volumes: - - ./SQL/tgstation_schema.sql:/docker-entrypoint-initdb.d/tgstation_schema.sql:ro - - ./SQL/feedback_schema.sql:/docker-entrypoint-initdb.d/feedback_schema.sql:ro - - database:/var/lib/mysql + volumes: + - ./SQL/tgstation_schema.sql:/docker-entrypoint-initdb.d/tgstation_schema.sql:ro + - ./SQL/feedback_schema.sql:/docker-entrypoint-initdb.d/feedback_schema.sql:ro + - database:/var/lib/mysql # Adminer, for managing the DB, commented out by default but uncomment if you need it I guess. #adminer: # image: wodby/adminer diff --git a/guides/Guide to Dream Maker.md b/guides/Guide to Dream Maker.md index c373e8c46a..456121007c 100644 --- a/guides/Guide to Dream Maker.md +++ b/guides/Guide to Dream Maker.md @@ -14,7 +14,7 @@ Choose “Open” You will be greeted with: https://i.imgur.com/oAbOjwR.png -If you’d prefer to skip right to codestuff/the wiki, this is a good start. Otherwise, continue below: +If you’d prefer to skip right to codestuff/the wiki, this is a good start. Otherwise, continue below: https://wiki.chompstation13.net/index.php?title=Basics_of_Coding_in_BYOND MAPPERS: @@ -24,7 +24,7 @@ Southern Cross is located in /maps/southern_cross/, and each level of the statio Submaps are in the /submaps/ folder, and, for instance, if you are looking to add new submaps to the Underdark, you’ll expand underdark_pois and create a new .dmm in the folder by clicking on it, and then going to New. Example here: https://i.imgur.com/Q1Cqfll.png -If you are adding a submap, ensure you add it to _templates.dm, a small snippet is here: +If you are adding a submap, ensure you add it to \_templates.dm, a small snippet is here: https://i.imgur.com/Ek9jaCe.png Cost is how much the POI system has to spend to spawn that .dmm, and name/mappath are self-explanatory. @@ -32,7 +32,7 @@ Cost is how much the POI system has to spend to spawn that .dmm, and name/mappat If you have questions, ask in Discord in #ss13-development! <3 SPRITERS: -If you are looking to edit icons, skip that, and just go to “icons” (expand it by hitting the +), and then find the icon file you’re looking for. Most people go to adding new drinks + foods for their first foray into DM, so: +If you are looking to edit icons, skip that, and just go to “icons” (expand it by hitting the +), and then find the icon file you’re looking for. Most people go to adding new drinks + foods for their first foray into DM, so: If you want to add a new drink, CHOMPStation-specific drinks are in icons/obj/drinks_ch.dmi, and CHOMPStation-specific food is icons/obj/food_ch.dmi. If you have questions, ask in Discord in #ss13-development! <3 diff --git a/guides/Guide to Map Folders.md b/guides/Guide to Map Folders.md index b7a1f81cf7..71cf91593f 100644 --- a/guides/Guide to Map Folders.md +++ b/guides/Guide to Map Folders.md @@ -3,24 +3,27 @@ As of 8/25/2020, the map folders have been reworked to allow expedition areas an This does introduce some changes, and I'll walk you through adding a NEW expedition area in the new system. ## EXPEDITION AREAS: + In order to add a new expedition area, we need to go to maps/expedition_vr and create a new folder. This will house our expedition map, as well as any map-specific code, and our submap pointing. In order to 'point' an expedition area to load a submap, you will need to ensure the following: -#include "../../submaps/pois_vr/expedition_area_name/_template_name.dm" +#include "../../submaps/pois_vr/expedition_area_name/\_template_name.dm" -This tells us "go to root, maps, submaps, pois_vr, mapname, and use _template_name.dm" +This tells us "go to root, maps, submaps, pois_vr, mapname, and use \_template_name.dm" Then simply place your poi's in the expedition_area_name folder as you would with any other POI. Easy way to do it is to look at the others. ## GATEWAY MAPS: + In order to add a new gateway area, we need to go to maps/gateway_vr and create a new .dm and .dmm for our map. Follow one of the existing gateway maps to configure your new map. DO NOT USE GATEWAY_ARCHIVE_VR as that is outdated/broken gateway maps. ## Folders listed as follows: + ~map_system: Polaris, do not touch example: Polaris, do not touch expedition_vr: VORE, our expedition areas (shared between station maps) @@ -32,13 +35,14 @@ overmap: Do not touch, ask maintainers. plane: Polaris, do not touch RandomZLevels: Polaris, do not touch southern_cross: Polaris, do not touch -submaps: All our submaps. non _vr files are Polaris, do not touch them. +submaps: All our submaps. non \_vr files are Polaris, do not touch them. tether: VORE, Our map, self-explanatory virgo_minitest: VORE, Testing map used for CI, do not touch -## What _submaps.dm (map-folder-specific, Tether uses _tether_submaps.dm) should look like: +## What \_submaps.dm (map-folder-specific, Tether uses \_tether_submaps.dm) should look like: # Map-specific areas should be loaded without a #include, and the mappath should just be: + mappath = "maps/your_map/tether_plains.dmm" # Non-map specific expedition areas should be loaded as follows: @@ -55,14 +59,14 @@ mappath = "maps/your_map/tether_plains.dmm" #include "../../expedition_vr/space/guttersite.dmm" #endif -#include "../../expedition_vr/beach/_beach.dm" +#include "../../expedition_vr/beach/\_beach.dm" /datum/map_template/tether_lateload/away_beach - name = "Desert Planet - Z1 Beach" - desc = "The beach away mission." - mappath = "maps/expedition_vr/beach/beach.dmm" - associated_map_datum = /datum/map_z_level/tether_lateload/away_beach +name = "Desert Planet - Z1 Beach" +desc = "The beach away mission." +mappath = "maps/expedition_vr/beach/beach.dmm" +associated_map_datum = /datum/map_z_level/tether_lateload/away_beach /datum/map_z_level/tether_lateload/away_beach - name = "Away Mission - Desert Beach" - z = Z_LEVEL_BEACH - base_turf = /turf/simulated/floor/outdoors/rocks/caves +name = "Away Mission - Desert Beach" +z = Z_LEVEL_BEACH +base_turf = /turf/simulated/floor/outdoors/rocks/caves diff --git a/guides/Guide to Opening Your First PR.md b/guides/Guide to Opening Your First PR.md index 58d28b1362..017226cebc 100644 --- a/guides/Guide to Opening Your First PR.md +++ b/guides/Guide to Opening Your First PR.md @@ -28,8 +28,6 @@ Choose “Clone a Repo”, and then choose Github.com. You can then choose where https://i.imgur.com/y15Qir2.png https://i.imgur.com/bsw8p18.png - - Opening your Repo for the first time: Once your repo is cloned, you’ll be greeted with a screen SIMILAR to this (Note that mine has a lot of branches and repos): https://i.imgur.com/Ei6QZOh.png @@ -82,9 +80,9 @@ If the TO repo doesn’t autofill, don’t panic. Just choose CHOMPStation2/CHOM Then type the NAME of your PR, and a description underneath, then hit “Create Pull Request”! -And that’s it! +And that’s it! -**You’ve now successfully made your first PR!** +**You’ve now successfully made your first PR!** Any further issues or changes, maintainers will assist you with! If you have any questions or run into any snags during this tutorial, feel free to @ a maintainer (The green names on the sidebar) in #ss13-development or just ask for help and someone should be with you momentarily! diff --git a/guides/Guide to Your First POI Map.md b/guides/Guide to Your First POI Map.md index 759ef04256..61e4d64f6e 100644 --- a/guides/Guide to Your First POI Map.md +++ b/guides/Guide to Your First POI Map.md @@ -1,12 +1,12 @@ Welcome! -This guide **ASSUMES** you have gone through the Guide to Opening your First PR. If you have NOT done so yet, please refer here, and ask in Discord's #ss13-development channel (For CHOMPStation), #dev-general (for VOREStation), or #code (for Polaris) if you have any questions, or need assistance with completing these steps. +This guide **ASSUMES** you have gone through the Guide to Opening your First PR. If you have NOT done so yet, please refer here, and ask in Discord's #ss13-development channel (For CHOMPStation), #dev-general (for VOREStation), or #code (for Polaris) if you have any questions, or need assistance with completing these steps. You can also @ maintainers or staff devs, which can be viewed in the sidebar of each codebase’s Discord, and will usually have roles such as “Maintainer” (For VOREStation), “StaffDev/StaffMaintainer” (for CHOMPStation), and “Maintainer” (for Polaris). -[CHOMPStation]([https://github.com/CHOMPStation2/CHOMPStation2/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md](https://github.com/CHOMPStation2/CHOMPStation2/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md)) +[CHOMPStation](<[https://github.com/CHOMPStation2/CHOMPStation2/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md](https://github.com/CHOMPStation2/CHOMPStation2/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md)>) -[VOREStation]([https://github.com/VOREStation/VOREStation/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md](https://github.com/VOREStation/VOREStation/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md)) +[VOREStation](<[https://github.com/VOREStation/VOREStation/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md](https://github.com/VOREStation/VOREStation/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md)>) [Polaris - TBD] @@ -17,12 +17,12 @@ Before proceeding, remember to make your branch! We should have a new branch tit With that out of the way, congrats on getting setup! Let’s dive into how to make your first POI. \ \ To start, we need to open up the repo you downloaded earlier. If you’re not sure where that is, Gitkraken should be able to tell you by hovering over the codebase name, in the top left, and hitting **Alt+O** will open the file manager. \ -Either way, we should see [this]([https://i.imgur.com/FOUVK4n.png](https://i.imgur.com/FOUVK4n.png)) - Image references CHOMPStation, but the general folders should be the same for Polaris + VOREStation. +Either way, we should see [this](<[https://i.imgur.com/FOUVK4n.png](https://i.imgur.com/FOUVK4n.png)>) - Image references CHOMPStation, but the general folders should be the same for Polaris + VOREStation. Before we can map, we need to setup several code prerequisites in order to actually have a new area for our map. In order to do so, we are going to locate the POI folder. We are going to add a POI to the Wilderness area for our tutorial. Follow this reference: \ -Go to /maps/, and then find the folder the POIs for the given map are saved. This is code-base specific, so Polaris + CHOMP use /maps/submaps/surface_submaps/ for theirs, and then each folder (mountains, wilderness, plains) is a different area. If you’re on Southern Cross, Plains is the area around the outpost, Mountains is the mines, and Wilderness is the deep wilds. Polaris, TBD. +Go to /maps/, and then find the folder the POIs for the given map are saved. This is code-base specific, so Polaris + CHOMP use /maps/submaps/surface_submaps/ for theirs, and then each folder (mountains, wilderness, plains) is a different area. If you’re on Southern Cross, Plains is the area around the outpost, Mountains is the mines, and Wilderness is the deep wilds. Polaris, TBD. VORE has their submaps for SPECIFIC areas defined in /mapused (IE Tether)/submaps. This sub-main folder should only be used for map-specific POIs, for example, POIs that would only exist if Tether was loaded. @@ -56,8 +56,8 @@ With that, we save, and exit the code. We’ll come back to it at a later step t For this next step, return to the BASE folder, where the .dme and maps/etc folders are. - \ -We’re going to navigate to *tools* and then StrongDMM. This is not REQUIRED, but is heavily recommended - maintainers will ask you to run mapmerge where possible if you use DreamMaker. The rest of this guide WILL ASSUME YOU ARE USING STRONGDMM. The wiki will offer sections for DreamMaker as well as StrongDMM. \ +\ +We’re going to navigate to _tools_ and then StrongDMM. This is not REQUIRED, but is heavily recommended - maintainers will ask you to run mapmerge where possible if you use DreamMaker. The rest of this guide WILL ASSUME YOU ARE USING STRONGDMM. The wiki will offer sections for DreamMaker as well as StrongDMM. \ \ Run sdmmlauncher.exe. Screenshot here: \ [https://i.imgur.com/VxvRntf.png](https://i.imgur.com/VxvRntf.png) @@ -77,7 +77,7 @@ You should also be able to see the name in the top left. Now, we are going to go to File, New Map. \ This will open a dialogue box with the base folder of our repo. Don’t panic. \ -Go to /maps/, and then find the folder the POIs for the given map are saved. This is code-base specific, so Polaris + CHOMP use /maps/submaps/surface_submaps/ for theirs, and then each folder (mountains, wilderness, plains) is a different area. If you’re on Southern Cross, Plains is the area around the outpost, Mountains is the mines, and Wilderness is the deep wilds. Polaris, TBD. +Go to /maps/, and then find the folder the POIs for the given map are saved. This is code-base specific, so Polaris + CHOMP use /maps/submaps/surface_submaps/ for theirs, and then each folder (mountains, wilderness, plains) is a different area. If you’re on Southern Cross, Plains is the area around the outpost, Mountains is the mines, and Wilderness is the deep wilds. Polaris, TBD. VORE has their submaps for SPECIFIC areas defined in /mapused (IE Tether)/submaps. This sub-main folder should only be used for map-specific POIs, for example, POIs that would only exist if Tether was loaded. @@ -92,7 +92,7 @@ Hit Ok. \ \ Your new map will load in the bottom-left corner, depending on SDMM. Scroll in using your mouse, and hold the middle mouse button (or whatever the hotkey is if SDMM ever changes) to pan. -Once we’ve navigated and zoomed so our POI is relatively sized, we should see this: [https://i.imgur.com/e8VhPxk.png](https://i.imgur.com/e8VhPxk.png) +Once we’ve navigated and zoomed so our POI is relatively sized, we should see this: [https://i.imgur.com/e8VhPxk.png](https://i.imgur.com/e8VhPxk.png) Hit Save (Ctrl + S) now! Just in case. @@ -152,4 +152,4 @@ Commit, and then again, as per prior, we are going to start a pull request. At t As with the other guides, if you run into issues, please let maintainers know and we’ll help you out. DON’T FEEL BAD FOR BEING NEW AND GOING “AAA”. \ \ -We all started somewhere. I hope this guide helps give you the confidence you need to contribute to this codebase and help keep our project going. Thank you for your time and effort. <3 \ No newline at end of file +We all started somewhere. I hope this guide helps give you the confidence you need to contribute to this codebase and help keep our project going. Thank you for your time and effort. <3 diff --git a/guides/Overmap Ships and Places - What's Needed.md b/guides/Overmap Ships and Places - What's Needed.md index f5795f0cbf..76205ed86a 100644 --- a/guides/Overmap Ships and Places - What's Needed.md +++ b/guides/Overmap Ships and Places - What's Needed.md @@ -4,6 +4,7 @@ Proper, full-length guide will be added later to here + the wiki. For now, just use this as reference for what is needed for Overmap ships + locations. **CREATED IN-EDITOR:** + ``` /obj/effect/shuttle_landmark var edits: @@ -14,13 +15,14 @@ For now, just use this as reference for what is needed for Overmap ships + locat ``` **CREATED IN-CODE:** + ```c /area/shuttle/SHIPNAME name = "\improper [Name]" // Just replace [Name] with whatever your want to name the ship icon_state = "shuttlered" - requires_power = 1 // Or 0 if you don't want to have to power the ship yourself. + requires_power = 1 // Or 0 if you don't want to have to power the ship yourself. //Area should probably be placed in southern-cross-areas.dm but the rest can go into some file all together. - + /datum/shuttle/autodock/overmap/SHIPNAME name = "[Name]" warmup_time = 0 @@ -44,6 +46,7 @@ For now, just use this as reference for what is needed for Overmap ships + locat **OVERMAP SHIP CREATION INSTRUCTIONS:** Build your shuttle however you'd like, though it MUST have: + - Phoron cannister(s) hooked up to proper engines. /obj/machinery/atmospherics/unary/engine - Engine Control. `/obj/machinery/computer/ship/engines` - Helm Control. `/obj/machinery/computer/ship/helm` @@ -54,6 +57,7 @@ Build your shuttle however you'd like, though it MUST have: - The shuttle also needs to be placed entirely in the designated area that you made in the above code, since shuttles are based off of the area everything is in. It would be **RECOMMENDED** to also have: + - Sensors, controlled by `/obj/machinery/computer/ship/sensors` and `/obj/machinery/shipsensors` (maybe the /weak variant for small ships if you add them at all?) - Docking Controller. Not 100% sure on how these work yet, but will be updated as needed. Not necessary, just nice to have for ease of access. -- A pump somewhere in the fuel intake to your engines, for better fuel management. \ No newline at end of file +- A pump somewhere in the fuel intake to your engines, for better fuel management. diff --git a/guides/VSCode Setup Guide.md b/guides/VSCode Setup Guide.md index 35f298b3c2..39d14d4593 100644 --- a/guides/VSCode Setup Guide.md +++ b/guides/VSCode Setup Guide.md @@ -27,4 +27,4 @@ If you run into issues, ask in Discord for help. **Quick Tips for VSCode** Highlighting a proc and right clicking, then going to "Definition" or "Implementation" will allow you to easily see/lookup wherever it's used. This is massively helpful over having to manually search it. CTRL+F will bring up a search, that also allows a replace line-by-line. -CTRL+Clicking will also (usually) take you to the definition of a proc/verb/etc. \ No newline at end of file +CTRL+Clicking will also (usually) take you to the definition of a proc/verb/etc. diff --git a/html/admin/search.js b/html/admin/search.js index 639a3729fe..b51c3b20dc 100644 --- a/html/admin/search.js +++ b/html/admin/search.js @@ -1,33 +1,34 @@ -function selectTextField(){ - var filter_text = document.getElementById('filter'); - filter_text.focus(); - filter_text.select(); +function selectTextField() { + var filter_text = document.getElementById("filter"); + filter_text.focus(); + filter_text.select(); } -function updateSearch(){ - var input_form = document.getElementById('filter'); - var filter = input_form.value.toLowerCase(); - input_form.value = filter; - var table = document.getElementById('searchable'); - var alt_style = 'norm'; - for(var i = 0; i < table.rows.length; i++){ - try{ - var row = table.rows[i]; - if(row.className == 'title') continue; - var found=0; - for(var j = 0; j < row.cells.length; j++){ - var cell = row.cells[j]; - if(cell.innerText.toLowerCase().indexOf(filter) != -1){ - found=1; - break; - } - } - if(found == 0) row.style.display='none'; - else{ - row.style.display='table-row'; /* DON'T make tables with block property */ - row.className = alt_style; - if(alt_style == 'alt') alt_style = 'norm'; - else alt_style = 'alt'; - } - }catch(err) { } - } +function updateSearch() { + var input_form = document.getElementById("filter"); + var filter = input_form.value.toLowerCase(); + input_form.value = filter; + var table = document.getElementById("searchable"); + var alt_style = "norm"; + for (var i = 0; i < table.rows.length; i++) { + try { + var row = table.rows[i]; + if (row.className == "title") continue; + var found = 0; + for (var j = 0; j < row.cells.length; j++) { + var cell = row.cells[j]; + if (cell.innerText.toLowerCase().indexOf(filter) != -1) { + found = 1; + break; + } + } + if (found == 0) row.style.display = "none"; + else { + row.style.display = + "table-row"; /* DON'T make tables with block property */ + row.className = alt_style; + if (alt_style == "alt") alt_style = "norm"; + else alt_style = "alt"; + } + } catch (err) {} + } } diff --git a/html/admin/view_variables.css b/html/admin/view_variables.css index 09923e30af..5d9a582e79 100644 --- a/html/admin/view_variables.css +++ b/html/admin/view_variables.css @@ -1,236 +1,233 @@ body { - font-family: Verdana, sans-serif; - font-size: 9pt; + font-family: Verdana, sans-serif; + font-size: 9pt; } .bold { - font-weight: bold; + font-weight: bold; } .italic, .italics { - font-style: italic; + font-style: italic; } .underline { - text-decoration: underline; + text-decoration: underline; } .value { - font-family: "Courier New", monospace; - font-size: 8pt; - display: inline-block; + font-family: "Courier New", monospace; + font-size: 8pt; + display: inline-block; } table.matrix { - border-collapse: collapse; border-spacing: 0; - font-size: 7pt; + border-collapse: collapse; + border-spacing: 0; + font-size: 7pt; } -.matrix td{ - text-align: center; - padding: 0 1ex 0ex 1ex; +.matrix td { + text-align: center; + padding: 0 1ex 0ex 1ex; } table.matrixbrak { - border-collapse: collapse; border-spacing: 0; + border-collapse: collapse; + border-spacing: 0; } table.matrixbrak td.lbrak { - width: 0.8ex; - font-size: 50%; - border-top: solid 0.25ex black; - border-bottom: solid 0.25ex black; - border-left: solid 0.5ex black; - border-right: none; + width: 0.8ex; + font-size: 50%; + border-top: solid 0.25ex black; + border-bottom: solid 0.25ex black; + border-left: solid 0.5ex black; + border-right: none; } table.matrixbrak td.rbrak { - width: 0.8ex; - font-size: 50%; - border-top: solid 0.25ex black; - border-bottom: solid 0.25ex black; - border-right: solid 0.5ex black; - border-left: none; + width: 0.8ex; + font-size: 50%; + border-top: solid 0.25ex black; + border-bottom: solid 0.25ex black; + border-right: solid 0.5ex black; + border-left: none; } .green { - color: hsl(133, 100%, 51%); + color: hsl(133, 100%, 51%); } .darkgreen { - color: hsl(120, 100%, 25%); + color: hsl(120, 100%, 25%); } .grey { - color: hsl(0, 0%, 51%); + color: hsl(0, 0%, 51%); } .red { - color: hsl(0, 100%, 50%); + color: hsl(0, 100%, 50%); } .crimson { - color: hsl(348, 83%, 47%); + color: hsl(348, 83%, 47%); } .maroon { - color: hsl(0, 100%, 25%); + color: hsl(0, 100%, 25%); } .brown { - color: hsl(21, 58%, 35%); + color: hsl(21, 58%, 35%); } .blue { - color: hsl(240, 100%, 50%); + color: hsl(240, 100%, 50%); } .black { - color: hsl(0, 0%, 0%); + color: hsl(0, 0%, 0%); } .white { - color: hsl(0, 0%, 0%); + color: hsl(0, 0%, 0%); } .darkgray { - color: hsl(0, 0%, 50%); + color: hsl(0, 0%, 50%); } .gray { - color: hsl(0, 0%, 66%); + color: hsl(0, 0%, 66%); } .yellow { - color: hsl(48, 100%, 50%); + color: hsl(48, 100%, 50%); } .pink { - color: hsl(350, 100%, 88%); + color: hsl(350, 100%, 88%); } .cyan { - color: hsl(180, 100%, 50%); + color: hsl(180, 100%, 50%); } .orange { - color: hsl(33, 100%, 50%); + color: hsl(33, 100%, 50%); } .nicegreen { - color: hsl(133, 79%, 37%); + color: hsl(133, 79%, 37%); } -.brute -{ - color: #FF3333; +.brute { + color: #ff3333; } -.burn -{ - color: #FF9933; +.burn { + color: #ff9933; } -.tox -{ - color: #00CC66; +.tox { + color: #00cc66; } -.oxy -{ - color: #0053FA; +.oxy { + color: #0053fa; } -.clone -{ - color: #00CCCC; +.clone { + color: #00cccc; } /* Dark Mode */ .dark body { - background-color: #131313; - color: #f0f6fc; + background-color: #131313; + color: #f0f6fc; } .dark a { - color: rgb(68, 147, 248); + color: rgb(68, 147, 248); } .dark select { - background-color: black; - color: white; + background-color: black; + color: white; } .dark input { - background-color: black; - color: white; + background-color: black; + color: white; } .dark .green { - color: hsl(133, 93%, 30%); + color: hsl(133, 93%, 30%); } .dark .darkgreen { - color: hsl(120, 100%, 25%); + color: hsl(120, 100%, 25%); } .dark .grey { - color: hsl(0, 0%, 51%); + color: hsl(0, 0%, 51%); } .dark .red { - color: hsl(0, 100%, 50%); + color: hsl(0, 100%, 50%); } .dark .crimson { - color: hsl(348, 83%, 47%); + color: hsl(348, 83%, 47%); } .dark .maroon { - color: hsl(0, 100%, 39%); + color: hsl(0, 100%, 39%); } .dark .brown { - color: hsl(21, 69%, 55%); + color: hsl(21, 69%, 55%); } .dark .blue { - color: hsl(224, 98%, 62%); + color: hsl(224, 98%, 62%); } .dark .black { - color: hsl(0, 0%, 100%); + color: hsl(0, 0%, 100%); } .dark .white { - color: hsl(0, 0%, 100%); + color: hsl(0, 0%, 100%); } .dark .darkgray { - color: hsl(0, 0%, 50%); + color: hsl(0, 0%, 50%); } .dark .gray { - color: hsl(0, 0%, 66%); + color: hsl(0, 0%, 66%); } .dark .yellow { - color: hsl(48, 100%, 50%); + color: hsl(48, 100%, 50%); } .dark .pink { - color: hsl(350, 100%, 88%); + color: hsl(350, 100%, 88%); } .dark .cyan { - color: hsl(180, 100%, 50%); + color: hsl(180, 100%, 50%); } .dark .orange { - color: hsl(33, 100%, 50%); + color: hsl(33, 100%, 50%); } .dark .nicegreen { - color: hsl(133, 93%, 30%); + color: hsl(133, 93%, 30%); } diff --git a/html/archivedchangelog.html b/html/archivedchangelog.html index cbd6206420..b4037ca96b 100644 --- a/html/archivedchangelog.html +++ b/html/archivedchangelog.html @@ -3,968 +3,1823 @@ Stick old posts here to prevent cluttering of main changelog. -->
-

December 28nd

-

Cael_Aislinn updated:

- -
- -
-

November 2012 - January 2013

-

chinsky updated:

- -

CIB updated:

- -

CaelAislinn updated:

- -

Ravensdale updated:

- -
- -
-

December 3rd

-

Cael_Aislinn updated:

- +

December 28nd

+

Cael_Aislinn updated:

+ +
+ +
+

November 2012 - January 2013

+

chinsky updated:

+ +

CIB updated:

+ +

CaelAislinn updated:

+ +

Ravensdale updated:

+ +
+ +
+

December 3rd

+

Cael_Aislinn updated:

+ +
+ +
+

23.11.12

+

CIB updated:

+ +
+ +
+

14.11.12

+

Chinsky updated:

+ +

CIB updated:

+ +
+ +
+

November 12th

+

CIB updated:

+ +
+ +
+

November 11th

+

CIB updated:

+ +
+ +
+

November 9th

+

AterIgnis updated:

+ +
+ +
+

6.11.2012

+

Chinsky updated:

+ +
+ +
+

November 4th

+

SkyMarshal updated:

+ +
+ +
+

October 24th

+

Mij updated:

+ +
+ +
+

October 22nd

+

Cael_Aislinn updated:

+ +
+ +
+

October 18th

+

CIB updated:

+ +

Chinsky updated:

+ +
+ +
+

17.10.2012

+

CIB updated:

+ +

Chinsky updated:

+ +
+ +
+

October 13th, 2012

+

Cael_Aislinn updated:

+ +

CIB updated:

+ +
+ +
+

October 12th, 2012

+

Cael_Aislinn updated:

+ +
+ +
+

October 9th, 2012

+

Cael_Aislinn updated:

+ +
+ +
+

September 26th, 2012

+

Cael_Aislinn updated:

+ +
+ +
+

September 24th, 2012

+

Cael_Aislinn updated:

+ +
+ +
+

September 23nd, 2012

+

Cael_Aislinn updated:

+ +
+ +
+

August 22, 2012

+

Cael_Aislinn updated:

+ +
+ +
+

15th August 2012

+

Cael_Aislinn updated:

+ +
+ +
+

7th August 2012

+

CIB updated:

+ +
+ +
+

4 August 2012

+

Cael_Aislinn updated:

+ + +

FireFishie updated:

+ +
+ +
+

2 August 2012

+

Cael_Aislinn updated:

+ +
+ +
+

10 July 2012

+

Abi79 updated:

+ + +

CIB updated:

+ +
+ +
+

9 July 2012

+

CIB updated:

+ +
+ +
+

5 July 2012

+

Cael_Aislinn updated:

+ +
+ +
+

3 July 2012

+

CIB updated:

+ +
+ +
+

29 June 2012

+

Erthilo updated:

+ +
+
+

28 June 2012

+

Chinsky updated:

+ +
+
+

27 June 2012

+

Erthilo updated:

+ +
+
+

26 June 2012

+

TG updated:

+ +
+ +
+

25 June 2012

+

Erthilo updated:

+ +

Watermelon Storm updated:

+ +

Drieden updated:

+ +
+ +
+

23 June 2012

+

SkyMarshal updated:

+ +

TG updated:

+ +
+ +
+

22 June 2012

+

Cael_Aislinn updated:

+ +
+ +
+

18 June 2012

+

Cael_Aislinn updated:

+ +
+ +
+

16 June 2012

+

Cael_Aislinn updated:

+ +
+ +
+

09 June 2012

+

Erthilo updated:

+ +
+ +
+

07 June 2012

+

SkyMarshal updated:

+ +
+ +
+

06 June 2012

+

Erthilo updated:

+ +
+ +
+

04 June 2012

+

TG updated:

+ +

SkyMarshal updated:

+ +

Erthilo updated:

+ +
+ +
+

01 June 2012

+

Erthilo updated:

+ +
+ +
+

29 May 2012

+

Aryn updated:

+ +
+ +
+

28 May 2012

+

Erthilo updated:

+ +
+ +
+

27 May 2012

+

Abi79 updated:

+ +

Erthilo updated:

+ +
+ +
+

26 May 2012

+

Erthilo updated:

+ + +

Abi79 updated:

+ +
+ +
+

25 May 2012

+

Erthilo updated:

+ +
+ +
+

24 May 2012

+

cib updated:

+ +
+ +
+

23 May 2012

+

CIB updated:

+ +

TG & Erthilo updated:

+ +
+ +
+

22 May 2012

+

cib updated:

+ +

Erthilo updated:

+ +
+ +
+

21 May 2012

+

TG updated:

+ +

SkyMarshal updated:

+ +

Uristqwerty updated:

+ +

Erthilo updated:

+ +
+ +
+

20 May 2012

+

Erthilo updated:

+ +
+ +
+

19 May 2012

+

cib updated:

+ +

TG updated:

+ +
+ +
+

17 May 2012

+

TG updated:

+ +

Erthilo updated:

+ +

Abi79 updated:

+ +

SkyMarshal updated:

+ +
+ +
+

16 May 2012

+

Erthilo updated:

+ +
+ +
+

15 May 2012

+

TG updated:

+ +

Erthilo updated:

+ +
+ +
+

13 May 2012

+

TG updated:

+ +
+ +
+

10 May 2012

+

Erthilo updated:

+ +

TG updated:

+ +
+ +
+

07 May 2012

+

TG updated:

+ +
+ +
+

06 May 2012

+

TG updated:

+ +
+ +
+

05 May 2012

+

Erthilo updated:

+ +
+ +
+

04 May 2012

+

dopeghoti updated:

+ +
+ +
+

03 May 2012

+

TG updated:

+ +
+ +
+

2nd May 2012

+

TG updated:

+ +

Erthilo updated:

+ +
+ +
+

1st May 2012

+

Mloc updated:

+ +

Erthilo updated:

+ +
+ +
+

30th April 2012

+

Mloc updated:

+ +

Erthilo updated:

+ +

TG updated:

+ +
+ +
+

TG

+

29th April 2012 updated:

+
- -
-

23.11.12

-

CIB updated:

- -
- -
-

14.11.12

-

Chinsky updated:

- -

CIB updated:

- -
- -
-

November 12th

-

CIB updated:

- -
- -
-

November 11th

-

CIB updated:

- -
- -
-

November 9th

-

AterIgnis updated:

- -
- -
-

6.11.2012

-

Chinsky updated:

- -
- -
-

November 4th

-

SkyMarshal updated:

- -
- -
-

October 24th

-

Mij updated:

- -
- -
-

October 22nd

-

Cael_Aislinn updated:

- -
- -
-

October 18th

-

CIB updated:

- -

Chinsky updated:

- -
- -
-

17.10.2012

-

CIB updated:

- -

Chinsky updated:

- -
- -
-

October 13th, 2012

-

Cael_Aislinn updated:

- -

CIB updated:

- -
- -
-

October 12th, 2012

-

Cael_Aislinn updated:

- -
- -
-

October 9th, 2012

-

Cael_Aislinn updated:

- -
- -
-

September 26th, 2012

-

Cael_Aislinn updated:

- -
- -
-

September 24th, 2012

-

Cael_Aislinn updated:

- -
- -
-

September 23nd, 2012

-

Cael_Aislinn updated:

- -
- -
-

August 22, 2012

-

Cael_Aislinn updated:

- -
- -
-

15th August 2012

-

Cael_Aislinn updated:

- -
- -
-

7th August 2012

-

CIB updated:

- -
- -
-

4 August 2012

-

Cael_Aislinn updated:

- - -

FireFishie updated:

- -
- -
-

2 August 2012

-

Cael_Aislinn updated:

- -
- -
-

10 July 2012

-

Abi79 updated:

- - -

CIB updated:

- -
- -
-

9 July 2012

-

CIB updated:

- -
- -
-

5 July 2012

-

Cael_Aislinn updated:

- -
- -
-

3 July 2012

-

CIB updated:

- -
- -
-

29 June 2012

-

Erthilo updated:

- -
-
-

28 June 2012

-

Chinsky updated:

- -
-
-

27 June 2012

-

Erthilo updated:

- -
-
-

26 June 2012

-

TG updated:

- -
- -
-

25 June 2012

-

Erthilo updated:

- -

Watermelon Storm updated:

- -

Drieden updated:

- -
- -
-

23 June 2012

-

SkyMarshal updated:

- -

TG updated:

- -
- -
-

22 June 2012

-

Cael_Aislinn updated:

- -
- -
-

18 June 2012

-

Cael_Aislinn updated:

- -
- -
-

16 June 2012

-

Cael_Aislinn updated:

- -
- -
-

09 June 2012

-

Erthilo updated:

- -
- -
-

07 June 2012

-

SkyMarshal updated:

- -
- -
-

06 June 2012

-

Erthilo updated:

- -
- -
-

04 June 2012

-

TG updated:

- -

SkyMarshal updated:

- -

Erthilo updated:

- -
- -
-

01 June 2012

-

Erthilo updated:

- -
- -
-

29 May 2012

-

Aryn updated:

- -
- -
-

28 May 2012

-

Erthilo updated:

- -
- -
-

27 May 2012

-

Abi79 updated:

- -

Erthilo updated:

- -
- -
-

26 May 2012

-

Erthilo updated:

- - -

Abi79 updated:

- -
- -
-

25 May 2012

-

Erthilo updated:

- -
- -
-

24 May 2012

-

cib updated:

- -
- -
-

23 May 2012

-

CIB updated:

- -

TG & Erthilo updated:

- -
- -
-

22 May 2012

-

cib updated:

- -

Erthilo updated:

- -
- -
-

21 May 2012

-

TG updated:

- -

SkyMarshal updated:

- -

Uristqwerty updated:

- -

Erthilo updated:

- -
- -
-

20 May 2012

-

Erthilo updated:

- -
- -
-

19 May 2012

-

cib updated:

- -

TG updated:

- -
- -
-

17 May 2012

-

TG updated:

- -

Erthilo updated:

- -

Abi79 updated:

- -

SkyMarshal updated:

- -
- -
-

16 May 2012

-

Erthilo updated:

- -
- -
-

15 May 2012

-

TG updated:

- -

Erthilo updated:

- -
- -
-

13 May 2012

-

TG updated:

- -
- -
-

10 May 2012

-

Erthilo updated:

- -

TG updated:

- -
- -
-

07 May 2012

-

TG updated:

- -
- -
-

06 May 2012

-

TG updated:

- -
- -
-

05 May 2012

-

Erthilo updated:

- -
- -
-

04 May 2012

-

dopeghoti updated:

- -
- -
-

03 May 2012

-

TG updated:

- -
- -
-

2nd May 2012

-

TG updated:

- -

Erthilo updated:

- -
- -
-

1st May 2012

-

Mloc updated:

- -

Erthilo updated:

- -
- -
-

30th April 2012

-

Mloc updated:

- -

Erthilo updated:

- -

TG updated:

- -
- -
-

TG

-

29th April 2012 updated:

- -
\ No newline at end of file diff --git a/html/browser/codex.css b/html/browser/codex.css index c757b4fc0e..969d43c249 100644 --- a/html/browser/codex.css +++ b/html/browser/codex.css @@ -1,34 +1,30 @@ -body -{ - background-image: url("paper_bg.png"); +body { + background-image: url("paper_bg.png"); } -.button-group .button -{ - border: 1px solid RoyalBlue; - color: black; - padding: 5px 32px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 16px; - cursor: pointer; - width: 40%; - display: block; +.button-group .button { + border: 1px solid RoyalBlue; + color: black; + padding: 5px 32px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + cursor: pointer; + width: 40%; } -.button-group .button:not(:last-child) -{ - border-bottom: none; /* Will hopefully prevent double borders */ +.button-group .button:not(:last-child) { + border-bottom: none; /* Will hopefully prevent double borders */ } -.button-group .button:hover -{ - background-color: RoyalBlue; - color: white; +.button-group .button:hover { + background-color: RoyalBlue; + color: white; } - -table, th, td { - border: 0px solid black; -} \ No newline at end of file +table, +th, +td { + border: 0px solid black; +} diff --git a/html/browser/common.css b/html/browser/common.css index 182ebed527..101a510069 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -187,33 +187,28 @@ h4 { color: #ff0000; } -.brute -{ - color: #FF3333; +.brute { + color: #ff3333; } -.burn -{ - color: #FF9933; +.burn { + color: #ff9933; } -.tox -{ - color: #00CC66; +.tox { + color: #00cc66; } -.oxy -{ - color: #0053FA; +.oxy { + color: #0053fa; } -.clone -{ - color: #00CCCC; +.clone { + color: #00cccc; } .highlight { - color: #8BA5C4; + color: #8ba5c4; } .dark { @@ -288,8 +283,8 @@ h4 { .boldnotice { position: relative; - background: #E9C183; - color: #15345A; + background: #e9c183; + color: #15345a; font-weight: bold; font-size: 10px; font-style: italic; @@ -462,31 +457,31 @@ div.notice { background-color: #b4b4b4; } -input:checked+.slider { +input:checked + .slider { background-color: #40628a; } -input:checked+.slider.red { +input:checked + .slider.red { background-color: #a92621; } -input:checked+.slider.locked { +input:checked + .slider.locked { background-color: #707070; } -input:focus+.slider { +input:focus + .slider { box-shadow: 0 0 1px #2196f3; } -input:focus+.slider.red { +input:focus + .slider.red { box-shadow: 0 0 1px #f3212d; } -input:focus+.slider.locked { +input:focus + .slider.locked { box-shadow: 0 0 1px #979797; } -input:checked+.slider:before { +input:checked + .slider:before { transform: translateX(24px); } diff --git a/html/browser/cryo.css b/html/browser/cryo.css index 05e9746aa2..82991e0b78 100644 --- a/html/browser/cryo.css +++ b/html/browser/cryo.css @@ -1,11 +1,9 @@ -.statusLabel -{ - width: 128px; - float: left; - overflow: hidden; +.statusLabel { + width: 128px; + float: left; + overflow: hidden; } -.statusValue -{ - float: left; +.statusValue { + float: left; } diff --git a/html/browser/scannernew.css b/html/browser/scannernew.css index a2c404b2c5..d1cbbe9cec 100644 --- a/html/browser/scannernew.css +++ b/html/browser/scannernew.css @@ -1,25 +1,20 @@ -.getblockstring -{ - font-family: Fixed, monospace; +.getblockstring { + font-family: Fixed, monospace; } -.blockString -{ - width: 55px; - height: 19px; - padding: 0 8px 8px 0; - float: left; +.blockString { + width: 55px; + height: 19px; + padding: 0 8px 8px 0; + float: left; } -.statusLabel -{ - width: 128px; - float: left; - overflow: hidden; +.statusLabel { + width: 128px; + float: left; + overflow: hidden; } -.statusValue -{ - float: left; +.statusValue { + float: left; } - diff --git a/html/browser/sleeper.css b/html/browser/sleeper.css index 05e9746aa2..82991e0b78 100644 --- a/html/browser/sleeper.css +++ b/html/browser/sleeper.css @@ -1,11 +1,9 @@ -.statusLabel -{ - width: 128px; - float: left; - overflow: hidden; +.statusLabel { + width: 128px; + float: left; + overflow: hidden; } -.statusValue -{ - float: left; +.statusValue { + float: left; } diff --git a/html/changelog.css b/html/changelog.css index 69a3a16405..c6dffdcf13 100644 --- a/html/changelog.css +++ b/html/changelog.css @@ -1,77 +1,119 @@ -body{font-family:Tahoma,sans-serif;} -.top{font-size:12px;} -a img {border:none;} -.bgimages16 li { - padding:2px 10px 2px 30px; - background-position:6px center; - background-repeat:no-repeat; - border:1px solid #ddd; - border-left:4px solid #999; - margin-bottom:2px; +body { + font-family: Tahoma, sans-serif; +} +.top { + font-size: 12px; +} +a img { + border: none; +} +.bgimages16 li { + padding: 2px 10px 2px 30px; + background-position: 6px center; + background-repeat: no-repeat; + border: 1px solid #ddd; + border-left: 4px solid #999; + margin-bottom: 2px; +} +.bugfix { + background-image: url(bug-minus.png); +} +.wip { + background-image: url(hard-hat-exclamation.png); +} +.tweak { + background-image: url(wrench-screwdriver.png); +} +.soundadd { + background-image: url(music-plus.png); +} +.sounddel { + background-image: url(music-minus.png); +} +.rscdel { + background-image: url(cross-circle.png); +} +.rscadd { + background-image: url(tick-circle.png); +} +.imageadd { + background-image: url(image-plus.png); +} +.imagedel { + background-image: url(image-minus.png); +} +.spellcheck { + background-image: url(spell-check.png); +} +.experiment { + background-image: url(burn-exclamation.png); +} +.maptweak { + background-image: url(map-pencil.png); +} +.sansserif { + font-size: 12px; } -.bugfix {background-image:url(bug-minus.png)} -.wip {background-image:url(hard-hat-exclamation.png)} -.tweak {background-image:url(wrench-screwdriver.png)} -.soundadd {background-image:url(music-plus.png)} -.sounddel {background-image:url(music-minus.png)} -.rscdel {background-image:url(cross-circle.png)} -.rscadd {background-image:url(tick-circle.png)} -.imageadd {background-image:url(image-plus.png)} -.imagedel {background-image:url(image-minus.png)} -.spellcheck {background-image:url(spell-check.png)} -.experiment {background-image:url(burn-exclamation.png)} -.maptweak {background-image:url(map-pencil.png)} -.sansserif {font-size:12px;} .commit { - margin-bottom:20px; - font-size:100%;font-weight:normal; + margin-bottom: 20px; + font-size: 100%; + font-weight: normal; } .changes { - list-style:none; - margin:5px 0; - padding:0 0 0 25px; - font-size:0.8em; + list-style: none; + margin: 5px 0; + padding: 0 0 0 25px; + font-size: 0.8em; } .date { - margin:10px 0; - color:blue; - border-bottom:2px solid #00f; - width:60%; - padding:2px 0; - font-size:1em; - font-weight:bold; -} -.author { - padding-left:10px; - margin:0; - font-weight:bold; - font-size:0.9em; - } -.drop { - cursor:pointer; - border:1px solid #999; - display:inline; - font-size:0.9em; - padding:1px 20px 1px 5px; - line-height:16px; + margin: 10px 0; + color: blue; + border-bottom: 2px solid #00f; + width: 60%; + padding: 2px 0; + font-size: 1em; + font-weight: bold; +} +.author { + padding-left: 10px; + margin: 0; + font-weight: bold; + font-size: 0.9em; +} +.drop { + cursor: pointer; + border: 1px solid #999; + display: inline; + font-size: 0.9em; + padding: 1px 20px 1px 5px; + line-height: 16px; +} +.hidden { + display: none; } -.hidden {display:none;} .indrop { - margin:2px 0 0 0; - clear:both; - background:#fff; - border:1px solid #ddd; - padding:5px 10px; - } + margin: 2px 0 0 0; + clear: both; + background: #fff; + border: 1px solid #ddd; + padding: 5px 10px; +} .indrop p { - margin:0; - font-size:0.8em; - line-height:16px; - margin:1px 0; + margin: 0; + font-size: 0.8em; + line-height: 16px; + margin: 1px 0; } .indrop img { - margin-right:5px; - vertical-align:middle;} -.closed {background:url(chevron-expand.png) right center no-repeat;} -.open {background:url(chevron.png) right center no-repeat;} -.lic {font-size:9px;} + margin-right: 5px; + vertical-align: middle; +} +.closed { + background: url(chevron-expand.png) right center no-repeat; +} +.open { + background: url(chevron.png) right center no-repeat; +} +.lic { + font-size: 9px; +} diff --git a/html/changelog.js b/html/changelog.js index 4146d0f094..0da7e59cb1 100644 --- a/html/changelog.js +++ b/html/changelog.js @@ -55,33 +55,32 @@ function filterchanges(type){ } */ function dropdowns() { - var drops = $('div.drop'); - var indrops = $('div.indrop'); - if(drops.length!=indrops.length){ - alert("Some coder fucked up with dropdowns"); - } - drops.each(function(index){ - $(this).toggleClass('closed'); - $(indrops[index]).hide(); - $(this).click(function(){ - $(this).toggleClass('closed'); - $(this).toggleClass('open'); - $(indrops[index]).toggle(); - }); - }); + var drops = $("div.drop"); + var indrops = $("div.indrop"); + if (drops.length != indrops.length) { + alert("Some coder fucked up with dropdowns"); + } + drops.each(function (index) { + $(this).toggleClass("closed"); + $(indrops[index]).hide(); + $(this).click(function () { + $(this).toggleClass("closed"); + $(this).toggleClass("open"); + $(indrops[index]).toggle(); + }); + }); } -function filterchanges(type){ - $('ul.changes li').each(function(){ - if(!type || $(this).hasClass(type)){ - $(this).show(); - } - else { - $(this).hide(); - } - }); +function filterchanges(type) { + $("ul.changes li").each(function () { + if (!type || $(this).hasClass(type)) { + $(this).show(); + } else { + $(this).hide(); + } + }); } -$(document).ready(function(){ - dropdowns(); -}); \ No newline at end of file +$(document).ready(function () { + dropdowns(); +}); diff --git a/html/changelogs_ch/archive/2023-07.yml b/html/changelogs_ch/archive/2023-07.yml index 7b4bf4de11..def0285913 100644 --- a/html/changelogs_ch/archive/2023-07.yml +++ b/html/changelogs_ch/archive/2023-07.yml @@ -1,137 +1,146 @@ 2023-07-17: Aroliacue: - - rscadd: 'Adds alt job title for secretary: Bridge Officer' - - rscadd: Adds some start gear for Bridge Officer title + - rscadd: "Adds alt job title for secretary: Bridge Officer" + - rscadd: Adds some start gear for Bridge Officer title 2023-07-18: Aroliacue: - - qol: Upped Cyborg job limit from 4 to 8. + - qol: Upped Cyborg job limit from 4 to 8. FluffMedic: - - bugfix: fixes the coloring of a medkit. - - rscadd: 'Balance: Swaps an item to the proper version' + - bugfix: fixes the coloring of a medkit. + - rscadd: "Balance: Swaps an item to the proper version" FoxglovePurpur: - - bugfix: Fix a typo in 'posessed' + - bugfix: Fix a typo in 'posessed' Jesseman1: - - rscadd: Added new orca tail and markings. - - bugfix: Updated female orca markings to display as intended. + - rscadd: Added new orca tail and markings. + - bugfix: Updated female orca markings to display as intended. Raeschen: - - bugfix: change 'Show Game Updates' button to 'Show Server News' - - rscadd: Adds changelog button to new_player screen, with highlight behavior if - there are new changes since you last viewed - - bugfix: fix bug with 'changelog_hash' var not being set properly - - bugfix: fix changelog tgui links to be correct - - bugfix: remove species-locked customisaiton options for xeno heads(hair) and shadekin - hair - - bugfix: removes some missed fluff items + - bugfix: change 'Show Game Updates' button to 'Show Server News' + - rscadd: + Adds changelog button to new_player screen, with highlight behavior if + there are new changes since you last viewed + - bugfix: fix bug with 'changelog_hash' var not being set properly + - bugfix: fix changelog tgui links to be correct + - bugfix: + remove species-locked customisaiton options for xeno heads(hair) and shadekin + hair + - bugfix: removes some missed fluff items Scarlet-Oduko: - - rscadd: adds a new cult faction + - rscadd: adds a new cult faction UniquaSa: - - imageadd: Tallborgs finally receive some bellies, Thank you Kcin! + - imageadd: Tallborgs finally receive some bellies, Thank you Kcin! Upstream: - - bugfix: PDA records missing linebreaks & fixes communicator weather app gibberish + - bugfix: PDA records missing linebreaks & fixes communicator weather app gibberish 2023-07-19: Raeschen: - - bugfix: start menu consistency/redesign - - bugfix: Show server news (NEW) now resets on read - - bugfix: fix a runtime in inducer.vr - - bugfix: fixed weird savefile behavior when done before roundstart + - bugfix: start menu consistency/redesign + - bugfix: Show server news (NEW) now resets on read + - bugfix: fix a runtime in inducer.vr + - bugfix: fixed weird savefile behavior when done before roundstart Upstream: - - rscadd: adds ui buttons for language panel, pose, move up, move down, and using - objects on self + - rscadd: + adds ui buttons for language panel, pose, move up, move down, and using + objects on self VictorZisthus: - - rscadd: HoS now has a fun new gun at round-start! - - bugfix: fixed a few missing things from several closets. + - rscadd: HoS now has a fun new gun at round-start! + - bugfix: fixed a few missing things from several closets. 2023-07-20: Aroliacue: - - rscadd: 'balance: Stun Batons can now disrupt solargrubs infesting machinery, - similar to a multitool.' - - balance: Combined the medical borg and surgeon borg modules into one. - - balance: Doubled medical borg's medicine capacity from 15,000 to 30,000. - - balance: medical borgs now have access to more basic chems from their hyposprays. - - balance: medihound hypospray no longer requires water to function. - - qol: Gave the medihound access to the remote crew monitor, which it was lacking. + - rscadd: + "balance: Stun Batons can now disrupt solargrubs infesting machinery, + similar to a multitool." + - balance: Combined the medical borg and surgeon borg modules into one. + - balance: Doubled medical borg's medicine capacity from 15,000 to 30,000. + - balance: medical borgs now have access to more basic chems from their hyposprays. + - balance: medihound hypospray no longer requires water to function. + - qol: Gave the medihound access to the remote crew monitor, which it was lacking. FluffMedic: - - rscadd: 'adds: a new event' - - rscadd: 'adds: 3 new mobs similiar to solar moth, tied with the event' - - rscadd: 'adds: Event_container_CH, disabled the VR version' + - rscadd: "adds: a new event" + - rscadd: "adds: 3 new mobs similiar to solar moth, tied with the event" + - rscadd: "adds: Event_container_CH, disabled the VR version" Raeschen: - - rscadd: xeno & a few shadekin hairstyles unlocked for all + - rscadd: xeno & a few shadekin hairstyles unlocked for all Upstream: - - rscadd: Adds 'twin drills long' hair - - bugfix: Renames custom subtle back to subtle (Custom) - - rscadd: cooldown on 'use item on self' UI button (not the hotkey) - - bugfix: mouse-hole interactions - - rscadd: adds a recolorable flannel jacket to loadout + - rscadd: Adds 'twin drills long' hair + - bugfix: Renames custom subtle back to subtle (Custom) + - rscadd: cooldown on 'use item on self' UI button (not the hotkey) + - bugfix: mouse-hole interactions + - rscadd: adds a recolorable flannel jacket to loadout 2023-07-21: Raeschen: - - bugfix: fixed a bad MekaSCI iconstate - - bugfix: fix a bad tallborg icon_state - - bugfix: '''No shoes'' loadout option is now specie-unrestricted.' + - bugfix: fixed a bad MekaSCI iconstate + - bugfix: fix a bad tallborg icon_state + - bugfix: "'No shoes' loadout option is now specie-unrestricted." 2023-07-22: FluffMedic: - - balance: Made it so hadzardzone and it's alts are less lethal and their safes - are more rewarding. + - balance: + Made it so hadzardzone and it's alts are less lethal and their safes + are more rewarding. kcin2001: - - bugfix: pixelshifting not working right on wideborgs - - bugfix: boozehound sprite changing not working - - rscadd: Added gold tag collar to looty inc. - - bugfix: fixed silver tag collar being the wrong item in looty inc. + - bugfix: pixelshifting not working right on wideborgs + - bugfix: boozehound sprite changing not working + - rscadd: Added gold tag collar to looty inc. + - bugfix: fixed silver tag collar being the wrong item in looty inc. 2023-07-23: kcin2001: - - bugfix: reset module being borg + - bugfix: reset module being borg 2023-07-24: FluffMedic: - - bugfix: volcanic tiles not showing up in map edit - - rscadd: sergal sprites to the xenotech/xenoweave/precursor rig + - bugfix: volcanic tiles not showing up in map edit + - rscadd: sergal sprites to the xenotech/xenoweave/precursor rig kcin2001: - - bugfix: crisis borg being broken + - bugfix: crisis borg being broken 2023-07-25: FluffMedic: - - imageadd: Teshari now have a precursor rig sprite + - imageadd: Teshari now have a precursor rig sprite Raeschen: - - bugfix: criminal detected + - bugfix: criminal detected UniquaSa: - - rscadd: Unity MEKA is now a thing + - rscadd: Unity MEKA is now a thing 2023-07-26: Raeschen: - - rscadd: mgeow - - soundadd: mgeow + - rscadd: mgeow + - soundadd: mgeow UniquaSa: - - rscadd: Unity NIKA and NIKO has been added - - bugfix: Fixed cargo NIKA's eyes and MEKA's eyes when their lights are switched - on. + - rscadd: Unity NIKA and NIKO has been added + - bugfix: + Fixed cargo NIKA's eyes and MEKA's eyes when their lights are switched + on. VictorZisthus: - - bugfix: Fixed an issue where Promethean's were taking toxins when consuming blood. - Eat away at it now! + - bugfix: + Fixed an issue where Promethean's were taking toxins when consuming blood. + Eat away at it now! 2023-07-27: Verkister: - - bugfix: Fixed grille sprites being jank and ugly - - bugfix: fixed missing grille subtype icons + - bugfix: Fixed grille sprites being jank and ugly + - bugfix: fixed missing grille subtype icons 2023-07-28: kcin2001: - - bugfix: fancy raptor using wrong sprite + - bugfix: fancy raptor using wrong sprite 2023-07-29: Jesseman1: - - rscadd: Radiation Immunity positive trait + - rscadd: Radiation Immunity positive trait 2023-07-30: Upstream: - - rscadd: recolorable fingerless gloves - - rscadd: HYPER boxers, briefs - - admin: Adds AI reinitialisation/editing in VV menu - - admin: '''Triggerable landmarks'' for events' - - rscadd: Adds staves. Craftable from most metal sheets. + - rscadd: recolorable fingerless gloves + - rscadd: HYPER boxers, briefs + - admin: Adds AI reinitialisation/editing in VV menu + - admin: "'Triggerable landmarks' for events" + - rscadd: Adds staves. Craftable from most metal sheets. Verkister: - - rscadd: Added dynamic belly mush overlay system. - - rscadd: Added per-belly setting buttons for custom liquid/mush colors and transparency. - - rscadd: Added a simple vorepanel prey interaction for a basic health/maxhealth - check. - - bugfix: fixed liquidbelly reagents getting erased by swallowed sauce packets and - such. + - rscadd: Added dynamic belly mush overlay system. + - rscadd: Added per-belly setting buttons for custom liquid/mush colors and transparency. + - rscadd: + Added a simple vorepanel prey interaction for a basic health/maxhealth + check. + - bugfix: + fixed liquidbelly reagents getting erased by swallowed sauce packets and + such. 2023-07-31: Aroliacue: - - rscadd: New Exploration Carrier. - - rscadd: New sound effects for phase weapons. - - rscadd: New Humvee for exploration. + - rscadd: New Exploration Carrier. + - rscadd: New sound effects for phase weapons. + - rscadd: New Humvee for exploration. Upstream: - - rscadd: 'tweak: Make staves only able to block melee attacks' + - rscadd: "tweak: Make staves only able to block melee attacks" Verkister: - - rscadd: Added liquidbelly setting for maximum liquid overlay level. + - rscadd: Added liquidbelly setting for maximum liquid overlay level. diff --git a/html/changelogs_ch/archive/2023-08.yml b/html/changelogs_ch/archive/2023-08.yml index 884cb4a60b..12d7a1abdf 100644 --- a/html/changelogs_ch/archive/2023-08.yml +++ b/html/changelogs_ch/archive/2023-08.yml @@ -1,232 +1,259 @@ 2023-08-01: FoxglovePurpur: - - qol: Lunchbox Loadout cost from 2 to 0 - - rscadd: Pocket sized double nitrogen tank (Customs) - - rscadd: Pocket sized double phoron tank (Vox, Customs) - - rscadd: A Syringe Case in the CMO's office for "Clonemed". The case has three - injectors. - - rscadd: Syringe Gun Shelf in Secondary Storage as well as BrainSnax for taking - care of feral xenochimeras. - - qol: Gave Security Visors proper AR vision. - - maptweak: Moved the camera and sink in Medical Secondary Storage. - - maptweak: Replaced the Visible pipes with Hidden pipes and cleaned up a bit. + - qol: Lunchbox Loadout cost from 2 to 0 + - rscadd: Pocket sized double nitrogen tank (Customs) + - rscadd: Pocket sized double phoron tank (Vox, Customs) + - rscadd: + A Syringe Case in the CMO's office for "Clonemed". The case has three + injectors. + - rscadd: + Syringe Gun Shelf in Secondary Storage as well as BrainSnax for taking + care of feral xenochimeras. + - qol: Gave Security Visors proper AR vision. + - maptweak: Moved the camera and sink in Medical Secondary Storage. + - maptweak: Replaced the Visible pipes with Hidden pipes and cleaned up a bit. Seris02: - - qol: improved language scrambling with punctuation, etc - - bugfix: fixed mech/in-object targetting + - qol: improved language scrambling with punctuation, etc + - bugfix: fixed mech/in-object targetting Verkister: - - rscadd: Added support for simple taur bellysprites. - - rscadd: Added a bunch of those simple bellysprites. - - bugfix: Fixed another case of certain reagent containers erasing liquidbelly contents. + - rscadd: Added support for simple taur bellysprites. + - rscadd: Added a bunch of those simple bellysprites. + - bugfix: Fixed another case of certain reagent containers erasing liquidbelly contents. 2023-08-02: FoxglovePurpur: - - qol: Engine Side SMES Maintenance now starts unbolted. + - qol: Engine Side SMES Maintenance now starts unbolted. Verkister: - - admin: Changed Remote LOOC logs to use a different color from normal LOOC logs. - - rscadd: Added belly overlay setting for contained items to affect the mush level. - - bugfix: Fixed belly overlay item mush level not working when starved to 0. - - bugfix: fixed drake taur belly bulge alignment. + - admin: Changed Remote LOOC logs to use a different color from normal LOOC logs. + - rscadd: Added belly overlay setting for contained items to affect the mush level. + - bugfix: Fixed belly overlay item mush level not working when starved to 0. + - bugfix: fixed drake taur belly bulge alignment. 2023-08-03: Verkister: - - bugfix: fixed a bunch of janky mechanics around liquidbelly acid mechanics. - - rscadd: Added Big Leggies. + - bugfix: fixed a bunch of janky mechanics around liquidbelly acid mechanics. + - rscadd: Added Big Leggies. 2023-08-04: Razgriz1032: - - rscadd: Riot control is now rad shielded. - - rscdel: Removed maint access and atmos access from riot control atmos door. + - rscadd: Riot control is now rad shielded. + - rscdel: Removed maint access and atmos access from riot control atmos door. Verkister: - - qol: Rearranged belly overlay color/preview buttons for better convenience. + - qol: Rearranged belly overlay color/preview buttons for better convenience. 2023-08-05: FluffMedic: - - maptweak: changed SC's maint bar's empety dispenser to a filled one. - - maptweak: Added two straight jackets to medical's storage - - maptweak: Turned Hydro's caves turrets to buildable ones + - maptweak: changed SC's maint bar's empety dispenser to a filled one. + - maptweak: Added two straight jackets to medical's storage + - maptweak: Turned Hydro's caves turrets to buildable ones TheGreatKitsune: - - rscadd: Carbonkin will now automatically convert excess dark energy into nutrition, - and excess nutrition into dark energy - - rscadd: Bellies are now dark for shadekin - - rscadd: '' - - rscadd: + - rscadd: + Carbonkin will now automatically convert excess dark energy into nutrition, + and excess nutrition into dark energy + - rscadd: Bellies are now dark for shadekin + - rscadd: + "" + - rscadd: + Verkister: - - refactor: Reworked how egg belly mode functions. - - qol: More borg vore charge gains converted for nutrition. Also new ability verb - to check nutrition level. - - bugfix: Fixed belly icons not updating when transfering contents to iconless belly - and optimized fullness update call stacking. + - refactor: Reworked how egg belly mode functions. + - qol: + More borg vore charge gains converted for nutrition. Also new ability verb + to check nutrition level. + - bugfix: + Fixed belly icons not updating when transfering contents to iconless belly + and optimized fullness update call stacking. 2023-08-06: BlackMajor: - - qol: RCD's have been given a significant useability tweak, including numerous - new construction modes and the capacity to deconstruct way more things. - - qol: RCD can now be reloaded with steel/plasteel/glass/reinforced glass/rods/tiles/borosilicate/reinforced - borosilicate - - qol: RCD can now construct everything a frame can when applied to a wall - - qol: RCD can now deconstruct those same wall mounted machines - - qol: RCD can now construct/deconstruct firelocks - - qol: RCD can now customise an airlock before deploying it - - qol: RCD can now construct/deconstruct conveyors - - qol: RCD can now place directional glass windows as well as full ones - - qol: RCD can now construct/deconstruct windoors - - qol: RCD can now place machine/computer frames - - qol: RCD will now target the grille/girder on the target turf when in the respective - mode instead of doing nothing - - rscadd: Added a janitorial holosign projector to the janitorial closet - - rscadd: Added an atmospherics holofan projector to the atmospherics lockers - - rscadd: Added an advanced RCD to the chief engineers locker - - bugfix: Fixed jank involving radial menu scaling and layering. Making them always - render at the proper scale, luminosity and plane. + - qol: + RCD's have been given a significant useability tweak, including numerous + new construction modes and the capacity to deconstruct way more things. + - qol: + RCD can now be reloaded with steel/plasteel/glass/reinforced glass/rods/tiles/borosilicate/reinforced + borosilicate + - qol: RCD can now construct everything a frame can when applied to a wall + - qol: RCD can now deconstruct those same wall mounted machines + - qol: RCD can now construct/deconstruct firelocks + - qol: RCD can now customise an airlock before deploying it + - qol: RCD can now construct/deconstruct conveyors + - qol: RCD can now place directional glass windows as well as full ones + - qol: RCD can now construct/deconstruct windoors + - qol: RCD can now place machine/computer frames + - qol: + RCD will now target the grille/girder on the target turf when in the respective + mode instead of doing nothing + - rscadd: Added a janitorial holosign projector to the janitorial closet + - rscadd: Added an atmospherics holofan projector to the atmospherics lockers + - rscadd: Added an advanced RCD to the chief engineers locker + - bugfix: + Fixed jank involving radial menu scaling and layering. Making them always + render at the proper scale, luminosity and plane. Verkister: - - bugfix: fixed belly reagent digestion generation overflow giving 4.5x more nutrition - than supposed to. + - bugfix: + fixed belly reagent digestion generation overflow giving 4.5x more nutrition + than supposed to. 2023-08-07: FluffMedic: - - balance: made the eclipse mobs have slower projectiles. Some have new special - attacks, or special effects to their attacks. + - balance: + made the eclipse mobs have slower projectiles. Some have new special + attacks, or special effects to their attacks. ItsSelis: - - rscdel: player-side ticket ui has been temporarily disabled until an issue related - to it's interface has been mitigated. - - admin: the order of the interaction log in all ticket ui's has been turned around - for better readability. + - rscdel: + player-side ticket ui has been temporarily disabled until an issue related + to it's interface has been mitigated. + - admin: + the order of the interaction log in all ticket ui's has been turned around + for better readability. Verkister: - - bugfix: Fixed egg mode bug with item digestion/preservation modes. - - bugfix: Fixed TF items spitting out visible voice ghosts when despawned via cryo/gateway/etc. - - rscadd: Added big leggies with fox tail and snake tail. + - bugfix: Fixed egg mode bug with item digestion/preservation modes. + - bugfix: Fixed TF items spitting out visible voice ghosts when despawned via cryo/gateway/etc. + - rscadd: Added big leggies with fox tail and snake tail. 2023-08-08: UniquaSa: - - rscadd: Added Mob Spawner - - bugfix: Added Squirrel sprites + - rscadd: Added Mob Spawner + - bugfix: Added Squirrel sprites 2023-08-10: Aroliacue: - - balance: Parry shield belt to last twice as long, but takes an extra second to - recharge. - - bugfix: Cell can no longer be removed from the parry shield belt. + - balance: + Parry shield belt to last twice as long, but takes an extra second to + recharge. + - bugfix: Cell can no longer be removed from the parry shield belt. Seris02: - - rscadd: adds user_vars_to_edit (for events and stuff or just fun) + - rscadd: adds user_vars_to_edit (for events and stuff or just fun) TheGreatKitsune: - - rscadd: click dragging things into rechargers - - bugfix: being able to click-drag guns at all - - rscadd: '' - - rscadd: + - rscadd: click dragging things into rechargers + - bugfix: being able to click-drag guns at all + - rscadd: + "" + - rscadd: + Upstream: - - rscadd: Zone based marking customisation + - rscadd: Zone based marking customisation Verkister: - - bugfix: Fixed too fast mob digestion failing to update belly sprites. - - balance: Cockroaches now carry the same drainable nutrition value as mice do. - - balance: Borg nutrition recharge now uses smaller increments with higher frequency. - - qol: Lick/Smell verbs can now be used on held mobs and yourself. - - rscadd: Added bellysprites for big leggies (3 sizes, "taur" belly). - - rscadd: Added bird big leggies. - - bugfix: Fixed digest_act proc not working properly for non-belly use (acid turfs - etc.) - - bugfix: Trasheater toy tease messages are no longer oral-specific. - - qol: Vore nutrition is no longer useless for borgs. + - bugfix: Fixed too fast mob digestion failing to update belly sprites. + - balance: Cockroaches now carry the same drainable nutrition value as mice do. + - balance: Borg nutrition recharge now uses smaller increments with higher frequency. + - qol: Lick/Smell verbs can now be used on held mobs and yourself. + - rscadd: Added bellysprites for big leggies (3 sizes, "taur" belly). + - rscadd: Added bird big leggies. + - bugfix: + Fixed digest_act proc not working properly for non-belly use (acid turfs + etc.) + - bugfix: Trasheater toy tease messages are no longer oral-specific. + - qol: Vore nutrition is no longer useless for borgs. 2023-08-11: Seris02: - - bugfix: fixes the input for customized markings not defaulting to their color - - bugfix: fixes the vanity_copy_to proc which broke with the new marking customization + - bugfix: fixes the input for customized markings not defaulting to their color + - bugfix: fixes the vanity_copy_to proc which broke with the new marking customization Upstream: - - refactor: OOC notes reworked into a panel - - rscadd: Custom URL link for examine text + - refactor: OOC notes reworked into a panel + - rscadd: Custom URL link for examine text Verkister: - - bugfix: Fixed Big Leggies belly sprites. + - bugfix: Fixed Big Leggies belly sprites. 2023-08-14: FirstSgtDan: - - rscadd: Added a box of Pilot NIFsoft to Sling Carrier exploration briefing room. - - rscadd: 'tweak: Rearranged boxes on the table with death alarms to fit the new - box.' + - rscadd: Added a box of Pilot NIFsoft to Sling Carrier exploration briefing room. + - rscadd: + "tweak: Rearranged boxes on the table with death alarms to fit the new + box." Seris02: - - bugfix: fixes up the transparency/marking customization toggling in modular code + - bugfix: fixes up the transparency/marking customization toggling in modular code Upstream: - - refactor: Changed borg/dogborg system entirely. Dogborg sprites are now merged - with normal borg modules. - - refactor: Puppy jaws and crowbar are merged - - refactor: All borgs have belly modules now, not just dogborgs - - refactor: All borgs have boop modules - - refactor: Pounce is now a emag / scrambled equip item - - refactor: Boozerhound belly color customisation moved to 'Customise appearance' - verb - - rscadd: More vore screen overlays - - rscadd: Automated job/staff request in fax machines + - refactor: + Changed borg/dogborg system entirely. Dogborg sprites are now merged + with normal borg modules. + - refactor: Puppy jaws and crowbar are merged + - refactor: All borgs have belly modules now, not just dogborgs + - refactor: All borgs have boop modules + - refactor: Pounce is now a emag / scrambled equip item + - refactor: + Boozerhound belly color customisation moved to 'Customise appearance' + verb + - rscadd: More vore screen overlays + - rscadd: Automated job/staff request in fax machines Verkister: - - bugfix: Actually fixed Big Leggies belly sprites. + - bugfix: Actually fixed Big Leggies belly sprites. kcin2001: - - rscadd: Readd all chomp-specific borg changes to the new overhauled code + - rscadd: Readd all chomp-specific borg changes to the new overhauled code 2023-08-15: FoxglovePurpur: - - qol: Adds the ability to lock the Shadekin Dorm Rooms - - imageadd: Adds locked open door sprites to TGMC Angled doors. - - rscdel: Removes nonfunctional Haste, Minor trait. + - qol: Adds the ability to lock the Shadekin Dorm Rooms + - imageadd: Adds locked open door sprites to TGMC Angled doors. + - rscdel: Removes nonfunctional Haste, Minor trait. Verkister: - - bugfix: Fixed sect drone taur bellysprites. - - rscadd: Added recycling feature for vorebellies (found in options tab). Produces - mixed matter piles that can be recycled in cargo/autolathes. (mechanically similar - to trash grinder output stuff) - - qol: Cargo trash grinder now merges existing matter piles on the output tile instead - of spawning a new one for each item. - - bugfix: Fixed cargo trash grinder ignoring sheet amount on stack items. + - bugfix: Fixed sect drone taur bellysprites. + - rscadd: + Added recycling feature for vorebellies (found in options tab). Produces + mixed matter piles that can be recycled in cargo/autolathes. (mechanically similar + to trash grinder output stuff) + - qol: + Cargo trash grinder now merges existing matter piles on the output tile instead + of spawning a new one for each item. + - bugfix: Fixed cargo trash grinder ignoring sheet amount on stack items. 2023-08-16: TheCaramelion: - - rscadd: 55 sprites for digitigrade legs for the neo uniforms - - rscadd: neo_gorka sprites for each department - - qol: Rearranged sprites to follow mob.dmi order + - rscadd: 55 sprites for digitigrade legs for the neo uniforms + - rscadd: neo_gorka sprites for each department + - qol: Rearranged sprites to follow mob.dmi order Upstream: - - rscadd: Seagull mob + - rscadd: Seagull mob 2023-08-17: TheCaramelion: - - rscadd: Sprites for uniforms with jeans for all the departments. - - rscadd: Sprites for the a variety of pants and their alternative versions. - - qol: Revamped the galoshes sprite. - - bugfix: Misaligned sprites on some of the uniforms. + - rscadd: Sprites for uniforms with jeans for all the departments. + - rscadd: Sprites for the a variety of pants and their alternative versions. + - qol: Revamped the galoshes sprite. + - bugfix: Misaligned sprites on some of the uniforms. Verkister: - - bugfix: Fixed throw vore mobvore prey pref check being in wrong place and bricking - the feature for mob preds. + - bugfix: + Fixed throw vore mobvore prey pref check being in wrong place and bricking + the feature for mob preds. 2023-08-20: TheCaramelion: - - rscadd: Digitigrade sprites for a variety of uniforms - - rscadd: Digitigrade sprites for some of the skirts and dresses - - qol: Fixed some misaligned and sprite mistakes. + - rscadd: Digitigrade sprites for a variety of uniforms + - rscadd: Digitigrade sprites for some of the skirts and dresses + - qol: Fixed some misaligned and sprite mistakes. Upstream: - - rscadd: Scugs can now have hats. Click with hat to put on, click with grab intent - to remove. + - rscadd: + Scugs can now have hats. Click with hat to put on, click with grab intent + to remove. Verkister: - - bugfix: Fixed borg nutrition recharge stuff. + - bugfix: Fixed borg nutrition recharge stuff. 2023-08-22: Upstream: - - rscadd: Fox and kitsune taurs - - qol: modernized pray input dialog - - qol: prayer message filter added to vchat - - admin: enables pray logging + - rscadd: Fox and kitsune taurs + - qol: modernized pray input dialog + - qol: prayer message filter added to vchat + - admin: enables pray logging 2023-08-23: FluffMedic: - - maptweak: the hadzard zone POI areas have better placed smoke clouds, and better - loot. + - maptweak: + the hadzard zone POI areas have better placed smoke clouds, and better + loot. Upstream: - - rscadd: Adds food-vore (putting micros in food-objects) - - rscadd: vwag ringtail - - rscadd: raccoon tail + - rscadd: Adds food-vore (putting micros in food-objects) + - rscadd: vwag ringtail + - rscadd: raccoon tail tacoguy7765093: - - maptweak: VR map improvements + - maptweak: VR map improvements 2023-08-25: Upstream: - - bugfix: fixes 'bad href token' message when trying to view a new fax + - bugfix: fixes 'bad href token' message when trying to view a new fax 2023-08-27: Verkister: - - qol: New and improved wormborg sprites with wrecks and bulges. - - bugfix: Fixed borgs spawning with extra nutrition for roundstart overcharge. - - bugfix: Fixed borg belly icons not working with our vorebelly icon system. + - qol: New and improved wormborg sprites with wrecks and bulges. + - bugfix: Fixed borgs spawning with extra nutrition for roundstart overcharge. + - bugfix: Fixed borg belly icons not working with our vorebelly icon system. 2023-08-29: Seris02: - - bugfix: container sounds now correctly play + - bugfix: container sounds now correctly play Verkister: - - rscadd: Added Slippery Reflexes trait. + - rscadd: Added Slippery Reflexes trait. 2023-08-31: Aroliacue: - - rscadd: Ported over some new Xenomorph markings and backplates from Citadel. + - rscadd: Ported over some new Xenomorph markings and backplates from Citadel. diff --git a/html/changelogs_ch/archive/2023-09.yml b/html/changelogs_ch/archive/2023-09.yml index 77e48bb65f..8e31988bab 100644 --- a/html/changelogs_ch/archive/2023-09.yml +++ b/html/changelogs_ch/archive/2023-09.yml @@ -1,154 +1,172 @@ 2023-09-01: Aroliacue: - - rscadd: Added in a new Xenomorph Hybrid species, with unique stats and Xenomorph-centric - abilities. - - rscadd: Added Xenolingua and Hivemind as selectable languages. Hivemind requires - you to be a Xenomorph Hybrid. - - qol: Gave Zaddat the ability to move much faster with their special Shroud voidsuits. + - rscadd: + Added in a new Xenomorph Hybrid species, with unique stats and Xenomorph-centric + abilities. + - rscadd: + Added Xenolingua and Hivemind as selectable languages. Hivemind requires + you to be a Xenomorph Hybrid. + - qol: Gave Zaddat the ability to move much faster with their special Shroud voidsuits. 2023-09-02: Aroliacue: - - rscadd: Added in some new skinsuit types and digitigrade variations. + - rscadd: Added in some new skinsuit types and digitigrade variations. 2023-09-03: Verkister: - - rscadd: Added giant lab rat mob - - rscadd: Added event/shenanigans vareditable shapeshifter mechanic - - rscadd: Added some recyclable material to more things. + - rscadd: Added giant lab rat mob + - rscadd: Added event/shenanigans vareditable shapeshifter mechanic + - rscadd: Added some recyclable material to more things. 2023-09-04: FluffMedic: - - maptweak: The Lab gateway and contents has been tweaked. One of many + - maptweak: The Lab gateway and contents has been tweaked. One of many Razgriz1032: - - bugfix: A couple upstream bugs with the modular shiny clothes set - - maptweak: Added more items to the hidden crate on deck 2 + - bugfix: A couple upstream bugs with the modular shiny clothes set + - maptweak: Added more items to the hidden crate on deck 2 Upstream: - - rscadd: New tesla coil types for tesla engines + - rscadd: New tesla coil types for tesla engines 2023-09-05: Darlantanis: - - rscadd: Replaces booleans in configuration_ch.dm with TRUE/FALSE defines - - rscadd: Tweaks whitelisted positions - - rscadd: Adds whitelist_only vars in new job_whitelist_overrides.dm file - - rscadd: Comments out return value of guest_jobbans proc which broke the jobwhitelist - system. - - rscadd: Adds numerous missing CHOMPedit comments - - rscadd: Adds jobwhitelist.txt to gitignore + - rscadd: Replaces booleans in configuration_ch.dm with TRUE/FALSE defines + - rscadd: Tweaks whitelisted positions + - rscadd: Adds whitelist_only vars in new job_whitelist_overrides.dm file + - rscadd: + Comments out return value of guest_jobbans proc which broke the jobwhitelist + system. + - rscadd: Adds numerous missing CHOMPedit comments + - rscadd: Adds jobwhitelist.txt to gitignore Verkister: - - rscadd: BS compostor can now recycle materials too. - - bugfix: Fixed multiplayer shapeshifter vorgan reversion issue. + - rscadd: BS compostor can now recycle materials too. + - bugfix: Fixed multiplayer shapeshifter vorgan reversion issue. 2023-09-07: Aroliacue: - - admin: All staff can now cancel the evac shuttle. + - admin: All staff can now cancel the evac shuttle. 2023-09-08: Verkister: - - rscadd: Added visual effect and shared nutrition to mob TF mechanics. - - bugfix: Fixed mob TF with uninitialized voremobs overwriting user's main vorgan - with the mob's own settings. - - bugfix: Stored reverted non-multiplayer tf_forms no longer cause double cryo announcements - when user leaves round. - - qol: Fixed highlight icon inconsistencies on Polaris hairs. - - rscadd: Big Leggies can now *vwag into digilegs stance. + - rscadd: Added visual effect and shared nutrition to mob TF mechanics. + - bugfix: + Fixed mob TF with uninitialized voremobs overwriting user's main vorgan + with the mob's own settings. + - bugfix: + Stored reverted non-multiplayer tf_forms no longer cause double cryo announcements + when user leaves round. + - qol: Fixed highlight icon inconsistencies on Polaris hairs. + - rscadd: Big Leggies can now *vwag into digilegs stance. 2023-09-10: Aroliacue: - - rscadd: Xenomorph Hybrids now have some exclusive traits to change up their playstyle, - found in the Neutral tab. - - rscadd: Xenomorph Hybrids can now use Protean Rigs. - - rscadd: Vests and the bluespace badge no longer have specific role/job requirements, - to facilitate more character customization. - - rscadd: 'Added in a new holster option: left leg holsters. These just visibly - sit on your left leg.' - - balance: Increased the loadout cost of vests and drop pouches from 1 to 2, as - they carry more than the simple webbing. - - bugfix: Fixed black holster sprites not showing up on mob correctly, and also - not showing up in the loadout. + - rscadd: + Xenomorph Hybrids now have some exclusive traits to change up their playstyle, + found in the Neutral tab. + - rscadd: Xenomorph Hybrids can now use Protean Rigs. + - rscadd: + Vests and the bluespace badge no longer have specific role/job requirements, + to facilitate more character customization. + - rscadd: + "Added in a new holster option: left leg holsters. These just visibly + sit on your left leg." + - balance: + Increased the loadout cost of vests and drop pouches from 1 to 2, as + they carry more than the simple webbing. + - bugfix: + Fixed black holster sprites not showing up on mob correctly, and also + not showing up in the loadout. UniquaSa: - - bugfix: You should be able to play as a tallborg in security and service.. + - bugfix: You should be able to play as a tallborg in security and service.. Verkister: - - bugfix: Fixed cloth and fiber materials missing sheet type definitions. - - bugfix: Fixed a bellysprite update lag bug. + - bugfix: Fixed cloth and fiber materials missing sheet type definitions. + - bugfix: Fixed a bellysprite update lag bug. tacoguy7765093: - - rscadd: Added new gateway into rotation - - rscadd: Added a mob and a weapon for use in the gateway. + - rscadd: Added new gateway into rotation + - rscadd: Added a mob and a weapon for use in the gateway. 2023-09-11: tacoguy7765093: - - bugfix: VR works again + - bugfix: VR works again 2023-09-12: Upstream: - - rscadd: Various bird related markings + - rscadd: Various bird related markings 2023-09-18: HatArchAzel: - - rscadd: Added a modular system cloned from the big dragon one on live to simplemob - synx, allowing customization of the body, eyes, facial markings, and horns. - - rscdel: Commented out some old OC insert content in the synx code as per content - standards. - - balance: Tweaked some factors such as movement to make synx a little bit more - accurate. Overall, they're probably a little weaker now, but should encourage - roleplaying them more accurately when playing as one and allow for a few nice - QoL changes in the process. - - bugfix: Fixed several bugs in synx code. - - imageadd: Added 'transformed' and 'stomach distended' synx sprites, replacing - the previous placeholders. + - rscadd: + Added a modular system cloned from the big dragon one on live to simplemob + synx, allowing customization of the body, eyes, facial markings, and horns. + - rscdel: + Commented out some old OC insert content in the synx code as per content + standards. + - balance: + Tweaked some factors such as movement to make synx a little bit more + accurate. Overall, they're probably a little weaker now, but should encourage + roleplaying them more accurately when playing as one and allow for a few nice + QoL changes in the process. + - bugfix: Fixed several bugs in synx code. + - imageadd: + Added 'transformed' and 'stomach distended' synx sprites, replacing + the previous placeholders. TheGreatKitsune: - - rscadd: New on duty signs for robotics and chemistry - - maptweak: Added on duty signs and buttons for turning them on to Robotics and - Chemistry + - rscadd: New on duty signs for robotics and chemistry + - maptweak: + Added on duty signs and buttons for turning them on to Robotics and + Chemistry Upstream: - - rscadd: adds 'Health & Damage' section in mob spawner + - rscadd: adds 'Health & Damage' section in mob spawner Verkister: - - rscadd: Flushing too much/big stuff can now glog toilets. Also un-bluespaced non-station - ones can be flushed too (much weaker tho and not connected to station systems) - - bugfix: Fixed flushing ignoring mob size_multiplier. - - rscadd: Added belly-specific toggle setting for entrance logs. - - bugfix: Fixed runtime spam with vore footsteps. - - bugfix: Symmetry scaling no longer un-symmetrifies the side views. + - rscadd: + Flushing too much/big stuff can now glog toilets. Also un-bluespaced non-station + ones can be flushed too (much weaker tho and not connected to station systems) + - bugfix: Fixed flushing ignoring mob size_multiplier. + - rscadd: Added belly-specific toggle setting for entrance logs. + - bugfix: Fixed runtime spam with vore footsteps. + - bugfix: Symmetry scaling no longer un-symmetrifies the side views. tacoguy7765093: - - balance: Synth limb HP is 60 instead of 30 now, just like organics. + - balance: Synth limb HP is 60 instead of 30 now, just like organics. 2023-09-19: FluffMedic: - - rscadd: MoL's VR area has a small expansion + - rscadd: MoL's VR area has a small expansion Verkister: - - rscadd: Added vorgan-specific noise pitch/frequency setting for belly noises. + - rscadd: Added vorgan-specific noise pitch/frequency setting for belly noises. 2023-09-20: Fracshun: - - rscadd: Added new belly option to allow auto-transfer of absorbed creatures + - rscadd: Added new belly option to allow auto-transfer of absorbed creatures TheGreatKitsune: - - rscadd: Liquid belly sloshing noises now work for robots + - rscadd: Liquid belly sloshing noises now work for robots 2023-09-21: Verkister: - - bugfix: Fixed exonet_node runtime spam. - - bugfix: Fixed vorepanel export missing a lot of the newer vars. + - bugfix: Fixed exonet_node runtime spam. + - bugfix: Fixed vorepanel export missing a lot of the newer vars. 2023-09-22: FluffMedic: - - qol: Removed phoron from the base of size chems, replacing clonedex with cryptobiolin + - qol: Removed phoron from the base of size chems, replacing clonedex with cryptobiolin Verkister: - - bugfix: Fixed other missing exportpanel vars. + - bugfix: Fixed other missing exportpanel vars. 2023-09-26: FluffMedic: - - qol: curea now uses spacechillin instead of dylvo, and iron instead of carbon - - bugfix: fire bird chem can properly be made - - bugfix: chemical imbalances in several meats + - qol: curea now uses spacechillin instead of dylvo, and iron instead of carbon + - bugfix: fire bird chem can properly be made + - bugfix: chemical imbalances in several meats Fracshun: - - rscadd: Added new filtering options for auto-transfer + - rscadd: Added new filtering options for auto-transfer TheGreatKitsune: - - bugfix: Posibrains and similar not being able to use ' or such - - qol: A few more traits opened up to non-custom species + - bugfix: Posibrains and similar not being able to use ' or such + - qol: A few more traits opened up to non-custom species Theonewhowaits: - - balance: rebalances combat mobs health alongside weapon damage + - balance: rebalances combat mobs health alongside weapon damage Verkister: - - bugfix: Fixed Unathi Big Horns ear style. - - qol: Food item digestion now uses gradual item digestion rather than instant qdel. - Also reagent content no longer nerfed to half. - - bugfix: Fixed vorepanel sound previews not using custom noise freq. - - bugfix: Fixed runtime spam caused by putting cake hat on Torta. - - rscadd: SWOOPIE XL suck mechanics overhaul with integrated hands-free Vac-Pack - implementation. - - rscadd: Added mush overlay settings for ingested metabolism stuff. - - qol: Reworked how vore fx preview stuff works. - - bugfix: Adjusted wonky resting pose vertical offset. + - bugfix: Fixed Unathi Big Horns ear style. + - qol: + Food item digestion now uses gradual item digestion rather than instant qdel. + Also reagent content no longer nerfed to half. + - bugfix: Fixed vorepanel sound previews not using custom noise freq. + - bugfix: Fixed runtime spam caused by putting cake hat on Torta. + - rscadd: + SWOOPIE XL suck mechanics overhaul with integrated hands-free Vac-Pack + implementation. + - rscadd: Added mush overlay settings for ingested metabolism stuff. + - qol: Reworked how vore fx preview stuff works. + - bugfix: Adjusted wonky resting pose vertical offset. tacoguy7765093: - - rscadd: Players can now create an area innately for off-station construction. + - rscadd: Players can now create an area innately for off-station construction. 2023-09-27: TheCaramelion: - - bugfix: mail per minute 2 to 0.75 - - bugfix: mailbag capacity changed to 21 - - bugfix: envelopes now have department colours + - bugfix: mail per minute 2 to 0.75 + - bugfix: mailbag capacity changed to 21 + - bugfix: envelopes now have department colours Verkister: - - bugfix: Fixed vorgan nutrition percent not affecting food/drink reagent gains. - - bugfix: Fixed vorgan overlays not showing up for prey. + - bugfix: Fixed vorgan nutrition percent not affecting food/drink reagent gains. + - bugfix: Fixed vorgan overlays not showing up for prey. diff --git a/html/changelogs_ch/archive/2023-10.yml b/html/changelogs_ch/archive/2023-10.yml index cad369e556..4fcd8e8bb8 100644 --- a/html/changelogs_ch/archive/2023-10.yml +++ b/html/changelogs_ch/archive/2023-10.yml @@ -1,133 +1,147 @@ 2023-10-04: FluffMedic: - - qol: Adds descriptions to experimental firstaid kit's pill bottles. - - qol: Made speedloaders 18, because revolvers hold six. - - bugfix: turrets where missed in the refactor, well their health + - qol: Adds descriptions to experimental firstaid kit's pill bottles. + - qol: Made speedloaders 18, because revolvers hold six. + - bugfix: turrets where missed in the refactor, well their health Razgriz1032: - - rscdel: Removed Among Us slugcats + - rscdel: Removed Among Us slugcats Verkister: - - bugfix: Fixed disabled autotransfer un-disabling itself when aghosted/SSD - - rscadd: Added bellysprites for sergal and skunk taurs. - - rscadd: Added a verb for synths to plug their leaking stomach. - - bugfix: Fixed vorgan overlay preview removing the owner's hud if hud hiding setting - is enabled. - - bugfix: Fixed prey vorgan overlay updates requiring 5u of liquid. - - balance: Excess borg nutrition now causes slowdown. - - bugfix: Fixed logged out ghosts getting timeout deleted while still on manifest. - - bugfix: Fixed unintentional glogged toilet spammability. - - rscadd: Added intentional glogged toilet spammability (harm intent panic mode) + - bugfix: Fixed disabled autotransfer un-disabling itself when aghosted/SSD + - rscadd: Added bellysprites for sergal and skunk taurs. + - rscadd: Added a verb for synths to plug their leaking stomach. + - bugfix: + Fixed vorgan overlay preview removing the owner's hud if hud hiding setting + is enabled. + - bugfix: Fixed prey vorgan overlay updates requiring 5u of liquid. + - balance: Excess borg nutrition now causes slowdown. + - bugfix: Fixed logged out ghosts getting timeout deleted while still on manifest. + - bugfix: Fixed unintentional glogged toilet spammability. + - rscadd: Added intentional glogged toilet spammability (harm intent panic mode) purplefoxy27: - - spellcheck: Fixed a few typos in inshoe steppies, proteans, outsider capsules - and a few other miscs. + - spellcheck: + Fixed a few typos in inshoe steppies, proteans, outsider capsules + and a few other miscs. tacoguy7765093: - - maptweak: Botany fridges are now semi-persistent, have fun farming! + - maptweak: Botany fridges are now semi-persistent, have fun farming! 2023-10-05: tacoguy7765093: - - bugfix: Fixes some guns appearing invisible + - bugfix: Fixes some guns appearing invisible 2023-10-12: Darlantanis: - - rscadd: Reduces codex memory usage, also fixing a memory leak. - - rscadd: Fixes bug with "go back" button in codexes. - - rscadd: Adds a cooking codex which algorithmically documents all cooking recipes. - - rscadd: Adds .dmi for new manual. Doesn't actually make new sprites. - - rscadd: Doubles cooking burn time. + - rscadd: Reduces codex memory usage, also fixing a memory leak. + - rscadd: Fixes bug with "go back" button in codexes. + - rscadd: Adds a cooking codex which algorithmically documents all cooking recipes. + - rscadd: Adds .dmi for new manual. Doesn't actually make new sprites. + - rscadd: Doubles cooking burn time. TheCaramelion: - - rscadd: Colours for each department - - qol: Removed random colours for junk mail - - qol: Bigger money quantities are a little bit more rare now + - rscadd: Colours for each department + - qol: Removed random colours for junk mail + - qol: Bigger money quantities are a little bit more rare now Verkister: - - bugfix: Fixed special clicks not working for player-controlled swoopies while - vac is powered. - - bugfix: Fixed synth metabolism processing toggle. - - bugfix: Fixed simplemobs being unable to use handheld ID cards. - - bugfix: Fixed ghost body re-entering bug. + - bugfix: + Fixed special clicks not working for player-controlled swoopies while + vac is powered. + - bugfix: Fixed synth metabolism processing toggle. + - bugfix: Fixed simplemobs being unable to use handheld ID cards. + - bugfix: Fixed ghost body re-entering bug. 2023-10-17: FluffMedic: - - rscadd: Walls that are breakable that have the looks of some shuttle walls + - rscadd: Walls that are breakable that have the looks of some shuttle walls Kazzc: - - rscadd: Deck 2, finally fixed pipes shuttle lounge area. - - rscadd: Deck 2, Fixed some inconsistent tiles. - - rscadd: Deck 3, new hidden kitchen. - - rscadd: Added a new area for the hidden kitchen. + - rscadd: Deck 2, finally fixed pipes shuttle lounge area. + - rscadd: Deck 2, Fixed some inconsistent tiles. + - rscadd: Deck 3, new hidden kitchen. + - rscadd: Added a new area for the hidden kitchen. 2023-10-21: FluffMedic: - - rscadd: Eclipse lore and more stuff in the valley + - rscadd: Eclipse lore and more stuff in the valley 2023-10-24: FluffMedic: - - rscadd: Two minor traits that mess with how much air your character needs to breath. + - rscadd: Two minor traits that mess with how much air your character needs to breath. 2023-10-25: FluffMedic: - - bugfix: event spiders deleting themselves - - balance: changes projectile speed from 0.8 to 3. - - rscadd: A handful more sprites added for precursor and Aegis rigsuits, well teshari - sprites. - - bugfix: cryogel is makeable + - bugfix: event spiders deleting themselves + - balance: changes projectile speed from 0.8 to 3. + - rscadd: + A handful more sprites added for precursor and Aegis rigsuits, well teshari + sprites. + - bugfix: cryogel is makeable TheCaramelion: - - bugfix: Stamps no longer get colours on them. - - bugfix: NT stamp no longer goes past the edges of the envelopes. - - qol: The mail colours have been revamped - - rscdel: Removed unused variables + - bugfix: Stamps no longer get colours on them. + - bugfix: NT stamp no longer goes past the edges of the envelopes. + - qol: The mail colours have been revamped + - rscdel: Removed unused variables TheGreatKitsune: - - rscadd: Verb in IC to clear nutrition as a borg. - - rscadd: new verb for shadekin to toggle off nutrition <-> energy convversion - - balance: shadekin no longer count as observers for phasing + - rscadd: Verb in IC to clear nutrition as a borg. + - rscadd: new verb for shadekin to toggle off nutrition <-> energy convversion + - balance: shadekin no longer count as observers for phasing Upstream: - - rscadd: added ability to toggle conveyor speed (slow/fast) - - bugfix: fixed tool usage on conveyor switches - - rscadd: added a new proc that imitates the leapers lunge attack, which can be - given to mobs to use as an ability when player controlled. - - rscadd: added the lunge ability to player controlled scel. - - bugfix: fixed scel going invisible when they eat more than one prey. - - bugfix: fixed scel automatically and randomly using special attacks when controlled - by a player. + - rscadd: added ability to toggle conveyor speed (slow/fast) + - bugfix: fixed tool usage on conveyor switches + - rscadd: + added a new proc that imitates the leapers lunge attack, which can be + given to mobs to use as an ability when player controlled. + - rscadd: added the lunge ability to player controlled scel. + - bugfix: fixed scel going invisible when they eat more than one prey. + - bugfix: + fixed scel automatically and randomly using special attacks when controlled + by a player. Verkister: - - rscadd: Added vorgan setting for item digestion logs. - - bugfix: Fixed bug with affect-worn item digestion with liquids. - - rscadd: Adjacent users can now borrow Swoopie's vac tube. - - bugfix: Fixed non-swoopie users being able to accidentally link swoopie's vac - to their own vorgans. - - bugfix: Borrowed vac-packs can now maintain vorgan connection with held/contained - vorgan owners. - - qol: Jukebox default volume reduced to a more sensible level. + - rscadd: Added vorgan setting for item digestion logs. + - bugfix: Fixed bug with affect-worn item digestion with liquids. + - rscadd: Adjacent users can now borrow Swoopie's vac tube. + - bugfix: + Fixed non-swoopie users being able to accidentally link swoopie's vac + to their own vorgans. + - bugfix: + Borrowed vac-packs can now maintain vorgan connection with held/contained + vorgan owners. + - qol: Jukebox default volume reduced to a more sensible level. tacoguy7765093: - - rscadd: The overmap shuttles now got enough budget to deploy distress beacons - - rscadd: SMESs on the missing shuttles, no more losing power. + - rscadd: The overmap shuttles now got enough budget to deploy distress beacons + - rscadd: SMESs on the missing shuttles, no more losing power. 2023-10-26: Verkister: - - rscadd: Added more autotransfer filters. - - rscadd: Added a right-click verb to toggle item's digestability. - - rscadd: Recycling mode can now churn loose ores into an ore chunk. - - bugfix: Fixed a bug with client-less teleop messages breaking chat. + - rscadd: Added more autotransfer filters. + - rscadd: Added a right-click verb to toggle item's digestability. + - rscadd: Recycling mode can now churn loose ores into an ore chunk. + - bugfix: Fixed a bug with client-less teleop messages breaking chat. 2023-10-30: TheGreatKitsune: - - rscadd: Toggle for liquids automatically applying to prey + - rscadd: Toggle for liquids automatically applying to prey 2023-10-31: FluffMedic: - - rscadd: Teppi is public use - - rscadd: Added new plants - - rscadd: Added a seed to seed vendors + - rscadd: Teppi is public use + - rscadd: Added new plants + - rscadd: Added a seed to seed vendors ReoDaProtovali: - - rscadd: Added spawn message for player swoopies that let them know how to control - the suck birb - - rscadd: Moved the description part informing the player how to use swoopie's vac - pack to a description_info section as well as adding information about how to - use the swoopie like a normal vaccum - - rscadd: also gave swoopies a muffling belly by default - - rscdel: Removed contaminates from swoopie's neck bellies. Their belly is the messy - place - - qol: made swoopies' integrated vac-pack only trigger while they're on grab intent - - balance: rebalanced something - - qol: made swoopie's neck bellies not have entrance logs by default. This should - reduce message spam when sucking down stuff. - - bugfix: Fixed swoopies being able to suck while dead - - bugfix: Fixed swoopies AI returning to the mob and being able to vaccum the ground - while the player was dead and ghosted (also presumably fixing pure AI swoopies - from doing this too) - - code_imp: changed swoopies from using speedy_mob_processing to using TURBO MODE - belly flags. It does the same thing, but TURBO MODE is ingame accessable without - varedit, so I think that's the proper implementation that should be used going - forward + - rscadd: + Added spawn message for player swoopies that let them know how to control + the suck birb + - rscadd: + Moved the description part informing the player how to use swoopie's vac + pack to a description_info section as well as adding information about how to + use the swoopie like a normal vaccum + - rscadd: also gave swoopies a muffling belly by default + - rscdel: + Removed contaminates from swoopie's neck bellies. Their belly is the messy + place + - qol: made swoopies' integrated vac-pack only trigger while they're on grab intent + - balance: rebalanced something + - qol: + made swoopie's neck bellies not have entrance logs by default. This should + reduce message spam when sucking down stuff. + - bugfix: Fixed swoopies being able to suck while dead + - bugfix: + Fixed swoopies AI returning to the mob and being able to vaccum the ground + while the player was dead and ghosted (also presumably fixing pure AI swoopies + from doing this too) + - code_imp: + changed swoopies from using speedy_mob_processing to using TURBO MODE + belly flags. It does the same thing, but TURBO MODE is ingame accessable without + varedit, so I think that's the proper implementation that should be used going + forward TheCaramelion: - - rscadd: 3 new stage 1 symptoms, 2 new stage 2 symptoms + - rscadd: 3 new stage 1 symptoms, 2 new stage 2 symptoms tacoguy7765093: - - rscdel: Removed those rusty bolts off oxygen lockers. + - rscdel: Removed those rusty bolts off oxygen lockers. diff --git a/html/changelogs_ch/archive/2023-11.yml b/html/changelogs_ch/archive/2023-11.yml index 7e90fd0e18..5f875fe8a8 100644 --- a/html/changelogs_ch/archive/2023-11.yml +++ b/html/changelogs_ch/archive/2023-11.yml @@ -1,242 +1,274 @@ 2023-11-01: ReoDaProtovali: - - rscadd: SWOOPIE XL catalouge data - - bugfix: fixes swoopies checking if they were dead to do stuff when they should've - been checking if they were alive + - rscadd: SWOOPIE XL catalouge data + - bugfix: + fixes swoopies checking if they were dead to do stuff when they should've + been checking if they were alive 2023-11-04: FluffMedic: - - maptweak: weird lab gateway be different + - maptweak: weird lab gateway be different 2023-11-05: ReoDaProtovali: - - bugfix: Fixes swoopie AI behavior when player controlled + - bugfix: Fixes swoopie AI behavior when player controlled TheGreatKitsune: - - bugfix: Hitting X to close reset prompt is no longer counted as hitting yes. + - bugfix: Hitting X to close reset prompt is no longer counted as hitting yes. purplefoxy27: - - rscadd: Add weight mechanics to remaining gym machines and punching bags. + - rscadd: Add weight mechanics to remaining gym machines and punching bags. 2023-11-07: Aroliacue: - - qol: Ported storage reach, allowing you to pull out items from a storage slot - inside of another storage slot. For example, pulling out medkit equipment from - your bag without holding the medkit. + - qol: + Ported storage reach, allowing you to pull out items from a storage slot + inside of another storage slot. For example, pulling out medkit equipment from + your bag without holding the medkit. FluffMedic: - - rscadd: Some new crafting things. - - bugfix: fixed a few POIs, and missed balance alterations - - rscdel: Removed a gateway thing due to a bug + - rscadd: Some new crafting things. + - bugfix: fixed a few POIs, and missed balance alterations + - rscdel: Removed a gateway thing due to a bug ItsSelis: - - code_imp: fixed mirror conflict of the upstream port of the confetti cannon - - bugfix: fixes players having infinite reach + - code_imp: fixed mirror conflict of the upstream port of the confetti cannon + - bugfix: fixes players having infinite reach 2023-11-08: Aroliacue: - - qol: Ported storage reach, allowing you to pull out items from a storage slot - inside of another storage slot. For example, pulling out medkit equipment from - your bag without holding the medkit. - - bugfix: Storage reach no longer gives you telekinesis. + - qol: + Ported storage reach, allowing you to pull out items from a storage slot + inside of another storage slot. For example, pulling out medkit equipment from + your bag without holding the medkit. + - bugfix: Storage reach no longer gives you telekinesis. 2023-11-10: Missile597: - - rscadd: Added storage tanks to deck three Atmos maintenance for waste gasses to - scrub to. - - rscadd: Connected dorms area scrubbers to the new waste tanks so that these areas - can scrub, which should prevent atmos issues on long shifts in this area. Scrubbers - are still isolated from the rest of the station for protection from spiderlings. - - qol: Added connectors to the air and scrubber loops in deck three atmos maintenance, - to allow a pump and scrubber to be filled/emptied here in case of emergency. - - bugfix: Fixed various air alarms across deck 3 and Sif outpost, and one on deck - one which had the incorrect frequency set for some reason. This should resolve - the issue with air alarms being unable to communicate and change settings on - vents and scrubbers in the area. - - maptweak: Atmos Maintenance on deck three has been made a bit wider, to fit the - added tanks and pipework in. + - rscadd: + Added storage tanks to deck three Atmos maintenance for waste gasses to + scrub to. + - rscadd: + Connected dorms area scrubbers to the new waste tanks so that these areas + can scrub, which should prevent atmos issues on long shifts in this area. Scrubbers + are still isolated from the rest of the station for protection from spiderlings. + - qol: + Added connectors to the air and scrubber loops in deck three atmos maintenance, + to allow a pump and scrubber to be filled/emptied here in case of emergency. + - bugfix: + Fixed various air alarms across deck 3 and Sif outpost, and one on deck + one which had the incorrect frequency set for some reason. This should resolve + the issue with air alarms being unable to communicate and change settings on + vents and scrubbers in the area. + - maptweak: + Atmos Maintenance on deck three has been made a bit wider, to fit the + added tanks and pipework in. 2023-11-11: FluffMedic: - - bugfix: fixes a few non-functional shadekin blockers - - rscadd: 'rebalance: Pummeler has been nerfed further, mostly with a nerf I thought - I did ages ago. Also did weird bola stuff.' - - qol: Eclipse tells you when you're hitting them with the wrong damage type. + - bugfix: fixes a few non-functional shadekin blockers + - rscadd: + "rebalance: Pummeler has been nerfed further, mostly with a nerf I thought + I did ages ago. Also did weird bola stuff." + - qol: Eclipse tells you when you're hitting them with the wrong damage type. ItsSelis: - - rscadd: added http_request datum to properly use rust-g based http requests (including - async ones). - - code_imp: byond 515 support defines for rust-g definitions + - rscadd: + added http_request datum to properly use rust-g based http requests (including + async ones). + - code_imp: byond 515 support defines for rust-g definitions Verkister: - - bugfix: Fixed item digestion logs not working on recycled stuff + - bugfix: Fixed item digestion logs not working on recycled stuff tacoguy7765093: - - balance: Heart Damage is no longer debilitating at decimal values. + - balance: Heart Damage is no longer debilitating at decimal values. 2023-11-12: FluffMedic: - - rscadd: Glow to the the radiation eclipse critter - - maptweak: Makes the Eclipse POI I forgot to make fancy, fancy + - rscadd: Glow to the the radiation eclipse critter + - maptweak: Makes the Eclipse POI I forgot to make fancy, fancy 2023-11-13: FluffMedic: - - rscadd: New chems to the distiller + - rscadd: New chems to the distiller ItsSelis: - - code_imp: slightly changed GitHub issue templates - - rscadd: added new way of generating tgui bundles, compiling the game & launching - a server - - rscdel: removed the old executables to compile new tgui bundles - - bugfix: enforcing text mode and LF line breaks in specific file endings - - code_imp: improved .gitignore once more + - code_imp: slightly changed GitHub issue templates + - rscadd: + added new way of generating tgui bundles, compiling the game & launching + a server + - rscdel: removed the old executables to compile new tgui bundles + - bugfix: enforcing text mode and LF line breaks in specific file endings + - code_imp: improved .gitignore once more Upstream: - - rscadd: added a new PDA type - - imageadd: added new PDA sprites for the new type + - rscadd: added a new PDA type + - imageadd: added new PDA sprites for the new type 2023-11-14: TheGreatKitsune: - - bugfix: Vox engineering suit now properly has modules - - imageadd: Added in sprites for wearing vox suits + - bugfix: Vox engineering suit now properly has modules + - imageadd: Added in sprites for wearing vox suits 2023-11-15: Drathek: - - code_imp: Renamed node/expression/operator to node/expression/op to resolve parsing - issues with spacemandmm and strongdmm + - code_imp: + Renamed node/expression/operator to node/expression/op to resolve parsing + issues with spacemandmm and strongdmm FluffMedic: - - maptweak: Makes MoL look nicer + - maptweak: Makes MoL look nicer ItsSelis: - - code_imp: changed the filing cabinet design + - code_imp: changed the filing cabinet design Kashargul: - - rscadd: pounce to command and explo borg on emag - - rscadd: the chameleon pen to command borgs on emag - - rscadd: 'changes: exploration hound now has a dedicated sleeper for items and - one person. Limit 4 items or 3+1 Person. It can be upgraded to up to 8 slots.' - - rscadd: 'changes: reverted the offset removal for the tall borgs' - - rscadd: 'changes: implemented the upstream borgs where possible' - - rscadd: 'changes: removed the modular chomp overwrites where no longer needed' - - rscadd: 'changes: moved some modular chomp borgs into /ch not to interfere with - the upstream borgs' - - rscadd: '"fixes #6996"' - - bugfix: borgbellies not showing for some borgs - - bugfix: borgpanels not showing upon opening the panel on some borgs - - bugfix: ERT bogs not showing at all - - bugfix: Explorationborg not being selectable - - bugfix: ServicehoundV2 - Alt going invisible on missing rest sprites. Only default - is now available - - bugfix: 'worm eyes/panel, including #7224 from Verkister to prevent conflicts' - - bugfix: eyes / lights where available on the chomp tall/wide robot - - rscadd: 'removes: deprecated tools from clownborg, exploborg, widerobot standard' + - rscadd: pounce to command and explo borg on emag + - rscadd: the chameleon pen to command borgs on emag + - rscadd: + "changes: exploration hound now has a dedicated sleeper for items and + one person. Limit 4 items or 3+1 Person. It can be upgraded to up to 8 slots." + - rscadd: "changes: reverted the offset removal for the tall borgs" + - rscadd: "changes: implemented the upstream borgs where possible" + - rscadd: "changes: removed the modular chomp overwrites where no longer needed" + - rscadd: + "changes: moved some modular chomp borgs into /ch not to interfere with + the upstream borgs" + - rscadd: '"fixes #6996"' + - bugfix: borgbellies not showing for some borgs + - bugfix: borgpanels not showing upon opening the panel on some borgs + - bugfix: ERT bogs not showing at all + - bugfix: Explorationborg not being selectable + - bugfix: + ServicehoundV2 - Alt going invisible on missing rest sprites. Only default + is now available + - bugfix: "worm eyes/panel, including #7224 from Verkister to prevent conflicts" + - bugfix: eyes / lights where available on the chomp tall/wide robot + - rscadd: "removes: deprecated tools from clownborg, exploborg, widerobot standard" Upstream: - - rscdel: removed the last _ in emote_subtle - - bugfix: "changed the timestamp insert regex as it was causing issues with multiline\ - \ subtle / emote to also include matches on \n" - - qol: small change to the flavor input verb for robots to allow multiline flavor - texts to be added or edited for the round directly + - rscdel: removed the last _ in emote_subtle + - bugfix: + "changed the timestamp insert regex as it was causing issues with multiline\ + \ subtle / emote to also include matches on \n" + - qol: + small change to the flavor input verb for robots to allow multiline flavor + texts to be added or edited for the round directly 2023-11-16: Darlantanis: - - rscadd: Adds casino gear dispensers for mapping - - rscadd: Adds casino areas - - rscadd: Moves and comments out older casino areas + - rscadd: Adds casino gear dispensers for mapping + - rscadd: Adds casino areas + - rscadd: Moves and comments out older casino areas Kashargul: - - bugfix: hotfix for the raptorborgs + - bugfix: hotfix for the raptorborgs 2023-11-17: Aroliacue: - - rscadd: Added in two new marking specific Xenomorph Queen heads and a new Xenomorph - backplate. + - rscadd: + Added in two new marking specific Xenomorph Queen heads and a new Xenomorph + backplate. ItsSelis: - - code_imp: some more changes in the CI suite + - code_imp: some more changes in the CI suite Upstream: - - rscdel: removed skin element "browserwindow" and "browser" - - rscadd: Added a way to make parquet wood flooring using hardwood planks - - bugfix: fixed typo in the vorepanel tgui, resulting in "Item Vorebelly Size Mult" - not being changeabale - - bugfix: fixed a wrong variable use which could lead to broken sprites in case - the "Mob Vorebelly Size Mult" was set to 0. - - rscadd: added VTEC toggle. (This adds a Verb under Abilities once VTEC has been - installed to allow robots to turn it off / on on a whim) - - code_imp: 'Changed the robot paper dispenser to an actual paperwork printer and - added the first set of forms (command, medical, some research and security mostly) - [Other contributors to the forms: Guti, Skol, Vee]' - - rscadd: 'Added a new module for robohounds: "Robohound Capability Expansion Module", - Material 5, Engineering 4. This module allows sleeper bellies to ingest items - and doubles their capacity. Due to this, a sleeper belly can in combination - with the "Robohound Capacity Expansion Module" (1 x2 x2) have a total of 4 slots. - At all times, only one "patient" can be ingested. With the new module though, - the space can be used for items. This allows robots to get their paws on some - kind of "trash eating" if they want it for scening without simply adding the - ability by default towards the sleeper modules.' + - rscdel: removed skin element "browserwindow" and "browser" + - rscadd: Added a way to make parquet wood flooring using hardwood planks + - bugfix: + fixed typo in the vorepanel tgui, resulting in "Item Vorebelly Size Mult" + not being changeabale + - bugfix: + fixed a wrong variable use which could lead to broken sprites in case + the "Mob Vorebelly Size Mult" was set to 0. + - rscadd: + added VTEC toggle. (This adds a Verb under Abilities once VTEC has been + installed to allow robots to turn it off / on on a whim) + - code_imp: + "Changed the robot paper dispenser to an actual paperwork printer and + added the first set of forms (command, medical, some research and security mostly) + [Other contributors to the forms: Guti, Skol, Vee]" + - rscadd: + 'Added a new module for robohounds: "Robohound Capability Expansion Module", + Material 5, Engineering 4. This module allows sleeper bellies to ingest items + and doubles their capacity. Due to this, a sleeper belly can in combination + with the "Robohound Capacity Expansion Module" (1 x2 x2) have a total of 4 slots. + At all times, only one "patient" can be ingested. With the new module though, + the space can be used for items. This allows robots to get their paws on some + kind of "trash eating" if they want it for scening without simply adding the + ability by default towards the sleeper modules.' 2023-11-18: CHOMPStation2: - - rscadd: Added yet more highly compressed artificial delights from rat world + - rscadd: Added yet more highly compressed artificial delights from rat world Kashargul: - - rscadd: added ability for borgs to play in the casino by holding chips with the - "misc gripper". + - rscadd: + added ability for borgs to play in the casino by holding chips with the + "misc gripper". 2023-11-19: Aroliacue: - - qol: Casino Chip Exchanger now tells you the exchange rate on examine. - - qol: Casino Chip Exchanger now fully exchanges chips back to thalers instead of - deleting 25% of the value. - - imageadd: Added new xenomorph queen backplate and xenomorph teeth markings. - - imageadd: Resprited xenomorph body parts to try and give a slightly more glossy - look. - - imageadd: Resprited the royal xenomorph headcrest to blend slightly better. + - qol: Casino Chip Exchanger now tells you the exchange rate on examine. + - qol: + Casino Chip Exchanger now fully exchanges chips back to thalers instead of + deleting 25% of the value. + - imageadd: Added new xenomorph queen backplate and xenomorph teeth markings. + - imageadd: + Resprited xenomorph body parts to try and give a slightly more glossy + look. + - imageadd: Resprited the royal xenomorph headcrest to blend slightly better. Kashargul: - - bugfix: raptor - crisis sprite - - qol: medical robot overwrite code clean-up + - bugfix: raptor - crisis sprite + - qol: medical robot overwrite code clean-up Upstream: - - bugfix: fixes the naming of the medraptor sprites to have them show again. + - bugfix: fixes the naming of the medraptor sprites to have them show again. 2023-11-20: Aroliacue: - - soundadd: Added new xenomorph talksounds. - - soundadd: Added three new xenomorph emotes - xenogrowl, xenohiss and xenopurr. + - soundadd: Added new xenomorph talksounds. + - soundadd: Added three new xenomorph emotes - xenogrowl, xenohiss and xenopurr. 2023-11-21: FluffMedic: - - bugfix: Janitor Rig is FREE of access + - bugfix: Janitor Rig is FREE of access 2023-11-23: FluffMedic: - - maptweak: Tweaks two tiles to make a cloner not spawn things + - maptweak: Tweaks two tiles to make a cloner not spawn things ItsSelis: - - bugfix: Including 'modular_chomp' in build system to make code changes actually - be detected + - bugfix: + Including 'modular_chomp' in build system to make code changes actually + be detected Kashargul: - - balance: changed borg nutrition purge to only reduce nutrition to 1000 instead - of 0 + - balance: + changed borg nutrition purge to only reduce nutrition to 1000 instead + of 0 WinterDarkraven: - - rscadd: Demonic halos - - imageadd: Demonic halo icons + - rscadd: Demonic halos + - imageadd: Demonic halo icons theXDkidoflol: - - balance: Size and compliance NIFs drain durability much less. + - balance: Size and compliance NIFs drain durability much less. 2023-11-25: Aroliacue: - - rscadd: Xenomorph Queen trait, with experimental buff ability - - qol: Xenomorph Hybrids can now clear weeds by harm intent clicking - - bugfix: Engineers can now spawn with AR-E Glasses - - soundadd: New SFX for entering mechs. - - soundadd: mechsteps now use different logic for future additions. + - rscadd: Xenomorph Queen trait, with experimental buff ability + - qol: Xenomorph Hybrids can now clear weeds by harm intent clicking + - bugfix: Engineers can now spawn with AR-E Glasses + - soundadd: New SFX for entering mechs. + - soundadd: mechsteps now use different logic for future additions. FluffMedic: - - bugfix: Adds code to sawn-off shot guns that should allow reloading - - bugfix: Disables staves melee immunity. - - bugfix: Temp. raising to cryogel's mixing to allow it to be made. + - bugfix: Adds code to sawn-off shot guns that should allow reloading + - bugfix: Disables staves melee immunity. + - bugfix: Temp. raising to cryogel's mixing to allow it to be made. ItsSelis: - - code_imp: Skips the CI for autochangelogs + - code_imp: Skips the CI for autochangelogs Upstream: - - rscadd: Added vorebelly sprites to the V2 service hound and V2 dark service hound - - rscdel: Removed sleep toxin from tofurkey - - qol: Devoured are ignored in greater and lesser virus selection - - qol: Devoured can no longer be event & admin infected - - rscadd: Added the Xenobiology Bag to the standard Level 3 Science locker - - code_imp: tgchat code (part 1) + - rscadd: Added vorebelly sprites to the V2 service hound and V2 dark service hound + - rscdel: Removed sleep toxin from tofurkey + - qol: Devoured are ignored in greater and lesser virus selection + - qol: Devoured can no longer be event & admin infected + - rscadd: Added the Xenobiology Bag to the standard Level 3 Science locker + - code_imp: tgchat code (part 1) 2023-11-26: Verkister: - - qol: Buffed flushies glog limits. + - qol: Buffed flushies glog limits. 2023-11-28: Upstream: - - bugfix: fixed DNA bounds defines that previously broke toggling genetic powers - in the admin player planel + - bugfix: + fixed DNA bounds defines that previously broke toggling genetic powers + in the admin player planel 2023-11-29: Aroliacue: - - rscadd: Added Concentrated Radium and Tricordrazine as selectable liquid types - for the vore panel. Concentrated Radium builds up radiation damage for themed - digestion, and Tricordrazine heals. - - qol: Curabitur cannon and macrobattery descriptions improved to provide more information - on what they actually do. - - balance: Significantly reduced the recharge time of the Curabitur cannon macrobattery - cells. Previously regular mediguns were significantly more efficient despite - being readily available, whereas the Curabitur is very rare. + - rscadd: + Added Concentrated Radium and Tricordrazine as selectable liquid types + for the vore panel. Concentrated Radium builds up radiation damage for themed + digestion, and Tricordrazine heals. + - qol: + Curabitur cannon and macrobattery descriptions improved to provide more information + on what they actually do. + - balance: + Significantly reduced the recharge time of the Curabitur cannon macrobattery + cells. Previously regular mediguns were significantly more efficient despite + being readily available, whereas the Curabitur is very rare. 2023-11-30: FluffMedic: - - rscadd: Enabled three new things for genetics + - rscadd: Enabled three new things for genetics TheCaramelion: - - rscadd: Alternative Cargo Technician title - - imageadd: Mailman suit and hat - - balance: Less mail per minute - - balance: Less junk mail per crate - - balance: NT mugs and money chances reduced - - bugfix: Junk mail has stamps again - - bugfix: Reagents will be added to beakers now - - bugfix: Event antags no longer gets mail + - rscadd: Alternative Cargo Technician title + - imageadd: Mailman suit and hat + - balance: Less mail per minute + - balance: Less junk mail per crate + - balance: NT mugs and money chances reduced + - bugfix: Junk mail has stamps again + - bugfix: Reagents will be added to beakers now + - bugfix: Event antags no longer gets mail Upstream: - - bugfix: naming of the sleeper sprite of the v2 clerical hound + - bugfix: naming of the sleeper sprite of the v2 clerical hound diff --git a/html/changelogs_ch/archive/2023-12.yml b/html/changelogs_ch/archive/2023-12.yml index 80637ef870..50eaebbc81 100644 --- a/html/changelogs_ch/archive/2023-12.yml +++ b/html/changelogs_ch/archive/2023-12.yml @@ -1,356 +1,410 @@ 2023-12-01: FluffMedic: - - balance: Nerfed Eclipse mob health, made it so their special attacks are used - more often. - - maptweak: tweaked some outsider pods - - bugfix: A few gaps in a previous PR - - maptweak: alters the loot and looks of some valley POIs, alongside adding some - more. + - balance: + Nerfed Eclipse mob health, made it so their special attacks are used + more often. + - maptweak: tweaked some outsider pods + - bugfix: A few gaps in a previous PR + - maptweak: + alters the loot and looks of some valley POIs, alongside adding some + more. Kashargul: - - qol: cleanup of medical borg naming and removal of unnecessary overwrite code. - - qol: cleanup of mining borg overwrites. - - qol: chompadd W0RM sprites moved to modular_chomp - - rscadd: Blade as ERT module - - rscadd: Paragon.Corps icon to paperwork for events - - rscadd: Trader icon to paperwork for events - - bugfix: naming of the casino telemut injector, had been named Telepathy, but is - Telekinesis - - rscadd: 're-adds: borg water supply' - - rscadd: 're-adds: lick cleaning' - - rscadd: 're-adds: verb to refill fire extinguisher from water supply' - - bugfix: licking exploit which allowed borgs to gain massive charges from a single - cell + - qol: cleanup of medical borg naming and removal of unnecessary overwrite code. + - qol: cleanup of mining borg overwrites. + - qol: chompadd W0RM sprites moved to modular_chomp + - rscadd: Blade as ERT module + - rscadd: Paragon.Corps icon to paperwork for events + - rscadd: Trader icon to paperwork for events + - bugfix: + naming of the casino telemut injector, had been named Telepathy, but is + Telekinesis + - rscadd: "re-adds: borg water supply" + - rscadd: "re-adds: lick cleaning" + - rscadd: "re-adds: verb to refill fire extinguisher from water supply" + - bugfix: + licking exploit which allowed borgs to gain massive charges from a single + cell TheCaramelion: - - bugfix: Mailman alt title starts with a PDA too + - bugfix: Mailman alt title starts with a PDA too Verkister: - - bugfix: Fixed bigdragon double vorgan init + - bugfix: Fixed bigdragon double vorgan init 2023-12-02: FluffMedic: - - bugfix: Temporary gene fix, maybe metroids being butcherable, and mol maze is - less painful + - bugfix: + Temporary gene fix, maybe metroids being butcherable, and mol maze is + less painful TheCaramelion: - - rscadd: Added paperworks printer in various departments - - maptweak: Teleporter bay border control decal moved to the right place + - rscadd: Added paperworks printer in various departments + - maptweak: Teleporter bay border control decal moved to the right place Upstream: - - rscadd: Added animated sprite for the borg paper printer. Thanks to MAK for the - sprite edit! - - rscadd: Added more PDA ringtone choices - - bugfix: fixed the paper spawn location. It now picks the location after selecting, - preventing it from spawning at the original place if one moved meanwhile. - - rscadd: Adds one or seven EMT/medical jackets, coats, vests and others to the - loadout, also tries to put them together in a single list. + - rscadd: + Added animated sprite for the borg paper printer. Thanks to MAK for the + sprite edit! + - rscadd: Added more PDA ringtone choices + - bugfix: + fixed the paper spawn location. It now picks the location after selecting, + preventing it from spawning at the original place if one moved meanwhile. + - rscadd: + Adds one or seven EMT/medical jackets, coats, vests and others to the + loadout, also tries to put them together in a single list. tacoguy7765093: - - qol: dancefloor is now anchored - - maptweak: small map fixes + - qol: dancefloor is now anchored + - maptweak: small map fixes 2023-12-03: FluffMedic: - - bugfix: A mob spamming admin logs + - bugfix: A mob spamming admin logs Upstream: - - rscadd: 'Added new redgate map: Laserdome' - - rscadd: Added 'redgate_allowed' variable in objs - - rscadd: Added entertainment encryption key - - rscadd: 'Added a new machine that makes proteans revivable in-round: Protean Reconstitutor' - - imageadd: added Protean Reconstitutor sprite - - rscadd: Adds the option for admins to quickly add or remove modules, radio channels - and components from robots. This should make event handling with borgs much - easier. - - rscadd: Added two new type of robot cells - - bugfix: Minor sprite fix. - - qol: Rejuvenate now fully restores borgs - - qol: escape timers have been cut in half - - rscadd: 'adds a chance of escaping if absorbed into a belly that is possible to - escape from (read PR #7318 for more details)' - - qol: minor tweak to the messages when restisting in a belly - - qol: different probabilities of absorbtion on gaslamps - - bugfix: fixed duplication of NIFs during rejuvenation + - rscadd: "Added new redgate map: Laserdome" + - rscadd: Added 'redgate_allowed' variable in objs + - rscadd: Added entertainment encryption key + - rscadd: "Added a new machine that makes proteans revivable in-round: Protean Reconstitutor" + - imageadd: added Protean Reconstitutor sprite + - rscadd: + Adds the option for admins to quickly add or remove modules, radio channels + and components from robots. This should make event handling with borgs much + easier. + - rscadd: Added two new type of robot cells + - bugfix: Minor sprite fix. + - qol: Rejuvenate now fully restores borgs + - qol: escape timers have been cut in half + - rscadd: + "adds a chance of escaping if absorbed into a belly that is possible to + escape from (read PR #7318 for more details)" + - qol: minor tweak to the messages when restisting in a belly + - qol: different probabilities of absorbtion on gaslamps + - bugfix: fixed duplication of NIFs during rejuvenation 2023-12-04: FluffMedic: - - bugfix: Fixing an immunity + - bugfix: Fixing an immunity Missile597: - - balance: Adjusted the distillery recipe for biomass to be more in line with the - buffed instant recipe. Recipe remains the same as before, but now distils 6 - units instead of 1. This makes the distillery twice as phoron efficient once - more, whilst retaining the cost of needing to provide blood as well as using - the distillery. (Maybe it'll see some use? Probably not) + - balance: + Adjusted the distillery recipe for biomass to be more in line with the + buffed instant recipe. Recipe remains the same as before, but now distils 6 + units instead of 1. This makes the distillery twice as phoron efficient once + more, whilst retaining the cost of needing to provide blood as well as using + the distillery. (Maybe it'll see some use? Probably not) Upstream: - - bugfix: actually showing a proper list of valid ringtones (secret ones can be - still set via 'Other') - - bugfix: fixes the RD console crash and allows designs to be transferred from one - console to another using the disks + - bugfix: + actually showing a proper list of valid ringtones (secret ones can be + still set via 'Other') + - bugfix: + fixes the RD console crash and allows designs to be transferred from one + console to another using the disks Verkister: - - bugfix: Fixed synths not getting metabolism traits. - - bugfix: Fixed VR mob spawner button runtiming on bad spawn paths. - - bugfix: Fixed runtimes with uninitialized pakkun mob rest features. + - bugfix: Fixed synths not getting metabolism traits. + - bugfix: Fixed VR mob spawner button runtiming on bad spawn paths. + - bugfix: Fixed runtimes with uninitialized pakkun mob rest features. 2023-12-06: Aroliacue: - - soundadd: New SFX for curabitur cannon. - - qol: Macrobatteries for the curabitur now fit in medical belts. - - qol: Added several items to the trasheat whitelist. - - qol: Xenomorph resin doors can now be destroyed by regular carbon crew by harm - intent clicking with an empty hand. Xenomorph Hybrids clearing resin structures - must now be on harm intent, to prevent accidental deconstruction. All xeno structures - can now be cleared instantly by Xenomorph Hybrids. - - balance: All gloves now provide heat and cold protection instead of just the black - ones. - - bugfix: Xenomorph Queen buff no longer gives infinite attack speed. - - imageadd: Xenomorph structures have new icons. Still WIP. + - soundadd: New SFX for curabitur cannon. + - qol: Macrobatteries for the curabitur now fit in medical belts. + - qol: Added several items to the trasheat whitelist. + - qol: + Xenomorph resin doors can now be destroyed by regular carbon crew by harm + intent clicking with an empty hand. Xenomorph Hybrids clearing resin structures + must now be on harm intent, to prevent accidental deconstruction. All xeno structures + can now be cleared instantly by Xenomorph Hybrids. + - balance: + All gloves now provide heat and cold protection instead of just the black + ones. + - bugfix: Xenomorph Queen buff no longer gives infinite attack speed. + - imageadd: Xenomorph structures have new icons. Still WIP. Kashargul: - - bugfix: lickclean will no longer break the synthtongue - - balance: mimic chance on spawner's crates from 30% to 70% - - bugfix: runtime error in the mob spawner - - bugfix: mimics will spawn again - - qol: moved the mob_spawner_ch file to modular chomp + - bugfix: lickclean will no longer break the synthtongue + - balance: mimic chance on spawner's crates from 30% to 70% + - bugfix: runtime error in the mob spawner + - bugfix: mimics will spawn again + - qol: moved the mob_spawner_ch file to modular chomp TheCaramelion: - - balance: Various job goodies have been changed, slightly more useful stuff. - - bugfix: Liquid goodies spawn in bottles. + - balance: Various job goodies have been changed, slightly more useful stuff. + - bugfix: Liquid goodies spawn in bottles. Upstream: - - rscadd: added hairs from Skyrat and Citadel - - qol: updated paper mask sprite from Skyrat - - rscadd: ported big snake tail from skyrat - - rscadd: ports two dresses from citadel rp and ripped shorts & a half-mask (gaiter) - from skyrat - - rscadd: ports a bunch of underwear pieces from skyrat - - imageadd: added new hair, tail, clothing and paper mask sprites from skyrat and - citadel - - qol: tgui subsystem update - - rscdel: Removed player polls button from lobby UI - - rscadd: 'change: the mutation chance of radiation storms will now only affect - livings on station level' - - rscadd: 'change: the mutation chance of radiation storm will no longer affect - synthetics' - - rscadd: 'change: the mutation chance of radiation storms will respect raidation - suits' - - balance: ERT robot energy sword tail has been buffed to 35 damage, 70 armour - pen to be more in line with other melee energy weapons - - bugfix: synthtongue lick exploit has been fixed, prevents surreal charge gains - from a single cell - - rscadd: 'change: the mutation chance of radiation storms will respect radiation - traits (Minor: 20% lower chance, Major 60% lower chance, Immunity 100 % lower - chance)' + - rscadd: added hairs from Skyrat and Citadel + - qol: updated paper mask sprite from Skyrat + - rscadd: ported big snake tail from skyrat + - rscadd: + ports two dresses from citadel rp and ripped shorts & a half-mask (gaiter) + from skyrat + - rscadd: ports a bunch of underwear pieces from skyrat + - imageadd: + added new hair, tail, clothing and paper mask sprites from skyrat and + citadel + - qol: tgui subsystem update + - rscdel: Removed player polls button from lobby UI + - rscadd: + "change: the mutation chance of radiation storms will now only affect + livings on station level" + - rscadd: + "change: the mutation chance of radiation storm will no longer affect + synthetics" + - rscadd: + "change: the mutation chance of radiation storms will respect raidation + suits" + - balance: + ERT robot energy sword tail has been buffed to 35 damage, 70 armour + pen to be more in line with other melee energy weapons + - bugfix: + synthtongue lick exploit has been fixed, prevents surreal charge gains + from a single cell + - rscadd: + "change: the mutation chance of radiation storms will respect radiation + traits (Minor: 20% lower chance, Major 60% lower chance, Immunity 100 % lower + chance)" Verkister: - - rscadd: Added new belly setting to store nutrition instead of absorbing it. + - rscadd: Added new belly setting to store nutrition instead of absorbing it. 2023-12-07: Kashargul: - - bugfix: remove unnecessary if + - bugfix: remove unnecessary if Upstream: - - rscadd: Added back the info button to recover from the text button + - rscadd: Added back the info button to recover from the text button Verkister: - - bugfix: Fixed food only mode not digesting raw nutrition piles. - - bugfix: Fixed acid reagent digestion not producing raw nutrition in store mode. + - bugfix: Fixed food only mode not digesting raw nutrition piles. + - bugfix: Fixed acid reagent digestion not producing raw nutrition in store mode. 2023-12-08: FluffMedic: - - balance: eclipse are much more killable + - balance: eclipse are much more killable MeepleMuncher: - - rscadd: Adds in blondies, a variant of brownies that don't have the chocolate - allergen. - - imageadd: added boldie sprites + - rscadd: + Adds in blondies, a variant of brownies that don't have the chocolate + allergen. + - imageadd: added boldie sprites TheCaramelion: - - bugfix: Walking in the same tile as a phased entity doesn't show a message anymore + - bugfix: Walking in the same tile as a phased entity doesn't show a message anymore Upstream: - - bugfix: No longer running IP checks on insecure http connections - - rscadd: Robots can now also use melee range weapons, seems that have been overseen - as the reach variable was added to weapons. This allows robots to also attack - on more than 1 field away when a weapon has a higher reach value defined. - - bugfix: runtime in window.dm - - qol: the jaws are now a melee weapon - - qol: the combat borgblade is now a melee weapon - - qol: the combat shocker is now a melee weapon + - bugfix: No longer running IP checks on insecure http connections + - rscadd: + Robots can now also use melee range weapons, seems that have been overseen + as the reach variable was added to weapons. This allows robots to also attack + on more than 1 field away when a weapon has a higher reach value defined. + - bugfix: runtime in window.dm + - qol: the jaws are now a melee weapon + - qol: the combat borgblade is now a melee weapon + - qol: the combat shocker is now a melee weapon 2023-12-09: Kashargul: - - bugfix: tool pathing in mecha_construction_ch + - bugfix: tool pathing in mecha_construction_ch MeepleMuncher: - - bugfix: fixed blondies + - bugfix: fixed blondies Upstream: - - bugfix: No more will slimes, zorren and skrell have their blood reagent overridden - by char setup when they havent even touched that. - - bugfix: fixes jawsoflife not being able to open emergency shutters - - rscadd: added tgchat - - rscdel: removed vchat - - bugfix: most likely fixed some scrolling issues with some of the UIs - - qol: improved color contrast for dark mode - - qol: minor styling improvements of tgchat - - bugfix: 'fixes: robot UI modules not showing on change or robot reset' - - bugfix: 'fixes: robot tools getting stuck on module reset or admin removal on - screen' - - qol: 'change: when new modules are added, the UI is refreshed' - - qol: 'change: when modules are removed or the entire robot is reset, the hud is - hidden beforehand' - - admin: 'change: admin module removing unequips all active modules' - - qol: Adds warning for trying to wrap packages and gifts - - rscdel: Disables debug messages for APC-less ships in electrical storms + - bugfix: + No more will slimes, zorren and skrell have their blood reagent overridden + by char setup when they havent even touched that. + - bugfix: fixes jawsoflife not being able to open emergency shutters + - rscadd: added tgchat + - rscdel: removed vchat + - bugfix: most likely fixed some scrolling issues with some of the UIs + - qol: improved color contrast for dark mode + - qol: minor styling improvements of tgchat + - bugfix: "fixes: robot UI modules not showing on change or robot reset" + - bugfix: + "fixes: robot tools getting stuck on module reset or admin removal on + screen" + - qol: "change: when new modules are added, the UI is refreshed" + - qol: + "change: when modules are removed or the entire robot is reset, the hud is + hidden beforehand" + - admin: "change: admin module removing unequips all active modules" + - qol: Adds warning for trying to wrap packages and gifts + - rscdel: Disables debug messages for APC-less ships in electrical storms 2023-12-10: Kashargul: - - rscadd: 'change: puddles respect the custom liquid color' - - bugfix: overseen merge conflict in skin.dmf + - rscadd: "change: puddles respect the custom liquid color" + - bugfix: overseen merge conflict in skin.dmf Upstream: - - bugfix: fixes statusbar after tgchat update - - rscadd: 'added two new themes to tgchat: vchatlight and vchatdark' + - bugfix: fixes statusbar after tgchat update + - rscadd: "added two new themes to tgchat: vchatlight and vchatdark" 2023-12-11: BlackMajor: - - qol: Expanded event preference selection to include specific vore options + - qol: Expanded event preference selection to include specific vore options Upstream: - - bugfix: custom admin OOC colours - - balance: Robots no longer lose their overcharge when stepping into chargers. - - rscadd: "/\U0001F191" - - rscadd: Filter for NPC emotes to TG chat + - bugfix: custom admin OOC colours + - balance: Robots no longer lose their overcharge when stepping into chargers. + - rscadd: "/\U0001F191" + - rscadd: Filter for NPC emotes to TG chat 2023-12-12: FluffMedic: - - balance: Mob hardstuns have been removed. Except bat and mob vore. - - bugfix: Juggernaught and Behemoth should respect our lower damage values now - - rscdel: Phase Carbine from explohound - - qol: Pounce from emag to default - - balance: explojaws, 40 damage, 25 armour pen, 15 projectile parry on emag (Might - be changed to claws in a further update) - - rscadd: explotailspear, 25 damage, 25 armour pen, 15 projectile parry, 3 fields - range - - rscadd: expirmental shield projector, 35 shield health, 7 fields long, 2 tiles - away and only protects one direction. Follows along, but direction remains static - - rscadd: 'smallmedigun: 4 tile range, heals 3.75 burn and brute per use, 4 uses - per full 2400 charge. Consumes 600 power per use' - - rscadd: 'self-repair-system: Damaged armour can be repaired while stationary, - heals 2.5 burn and brute on plating every 2.5 seconds while stationary, costs - 50 power each tick. This does not apply to internal modules or destroyed plating.' + - balance: Mob hardstuns have been removed. Except bat and mob vore. + - bugfix: Juggernaught and Behemoth should respect our lower damage values now + - rscdel: Phase Carbine from explohound + - qol: Pounce from emag to default + - balance: + explojaws, 40 damage, 25 armour pen, 15 projectile parry on emag (Might + be changed to claws in a further update) + - rscadd: + explotailspear, 25 damage, 25 armour pen, 15 projectile parry, 3 fields + range + - rscadd: + expirmental shield projector, 35 shield health, 7 fields long, 2 tiles + away and only protects one direction. Follows along, but direction remains static + - rscadd: + "smallmedigun: 4 tile range, heals 3.75 burn and brute per use, 4 uses + per full 2400 charge. Consumes 600 power per use" + - rscadd: + "self-repair-system: Damaged armour can be repaired while stationary, + heals 2.5 burn and brute on plating every 2.5 seconds while stationary, costs + 50 power each tick. This does not apply to internal modules or destroyed plating." ItsSelis: - - code_imp: Custom indexeddb store. Tgui related settings like themes might reset. + - code_imp: Custom indexeddb store. Tgui related settings like themes might reset. Verkister: - - bugfix: Fixed AI Swoopie vac spam and neck timing. + - bugfix: Fixed AI Swoopie vac spam and neck timing. 2023-12-13: Upstream: - - rscadd: Adds knees to chest body marking - - imageadd: added knees to chest body marking sprite - - bugfix: some civilian robot sprites - - bugfix: paper printer not showing title - - qol: looping admin borg handling until cancelled - - rscadd: borg admin upgrade install - - rscadd: first service form from Eskra - - rscadd: adds edited sprites of the frontier overalls and variants that only have - the overall piece & adds them to the loadouts - - qol: puts overalls in a selection dropdown to avoid over-cluttering - - bugfix: fixes the sprites of new turtleneck underwears (they covered mob hands) - - imageadd: adds edited sprites of the frontier overalls and variants that only - have the overall piece - - qol: changed the minimizer to improve tgui bundle build time - - code_imp: renamed all .js interface files to .jsx + - rscadd: Adds knees to chest body marking + - imageadd: added knees to chest body marking sprite + - bugfix: some civilian robot sprites + - bugfix: paper printer not showing title + - qol: looping admin borg handling until cancelled + - rscadd: borg admin upgrade install + - rscadd: first service form from Eskra + - rscadd: + adds edited sprites of the frontier overalls and variants that only have + the overall piece & adds them to the loadouts + - qol: puts overalls in a selection dropdown to avoid over-cluttering + - bugfix: fixes the sprites of new turtleneck underwears (they covered mob hands) + - imageadd: + adds edited sprites of the frontier overalls and variants that only + have the overall piece + - qol: changed the minimizer to improve tgui bundle build time + - code_imp: renamed all .js interface files to .jsx 2023-12-14: Upstream: - - rscadd: 'Fix: Vorebelly only option will no longer consider sleeper state for - sprite calculation.' + - rscadd: + "Fix: Vorebelly only option will no longer consider sleeper state for + sprite calculation." 2023-12-15: tacoguy7765093: - - bugfix: Adds an invisible wall to prevent getting lost in space. + - bugfix: Adds an invisible wall to prevent getting lost in space. 2023-12-16: Aroliacue: - - balance: Removed heat protection from all gloves from my last PR, added it to - basic coloured variants and insulated gloves instead. This was the original - intention, but I was lazy. - - balance: Buffed SWAT and Combat Gloves with a tiny amount of damage resistance. - - qol: Made Combat Gloves description more descriptive as an insulated gloves/SWAT - gloves combo. - - imageadd: Updated the Xenomorph Hybrid sprites for the Protean RIGsuit. + - balance: + Removed heat protection from all gloves from my last PR, added it to + basic coloured variants and insulated gloves instead. This was the original + intention, but I was lazy. + - balance: Buffed SWAT and Combat Gloves with a tiny amount of damage resistance. + - qol: + Made Combat Gloves description more descriptive as an insulated gloves/SWAT + gloves combo. + - imageadd: Updated the Xenomorph Hybrid sprites for the Protean RIGsuit. Kashargul: - - rscadd: self recolour verb for simple mobs and robots + - rscadd: self recolour verb for simple mobs and robots Upstream: - - bugfix: removes a forgotten debug message [I really need to tag them better for - myself] - - rscadd: 'Fix: Runtime during module selection' - - rscadd: 'Fix: Crisis Raptor belly up rest sprite' + - bugfix: + removes a forgotten debug message [I really need to tag them better for + myself] + - rscadd: "Fix: Runtime during module selection" + - rscadd: "Fix: Crisis Raptor belly up rest sprite" Verkister: - - bugfix: Fixed turbo mode initialization and swoopie neck speed. + - bugfix: Fixed turbo mode initialization and swoopie neck speed. tacoguy7765093: - - bugfix: Fixing a problematic button on the shuttle which is important for ensuring - the smooth operation of transportation services. + - bugfix: + Fixing a problematic button on the shuttle which is important for ensuring + the smooth operation of transportation services. 2023-12-17: Upstream: - - qol: Enables roller beds to cross redgate - - rscadd: Adds space z level change will respect pulling in the same way as stair - cases - - rscadd: Adds map edge transits will now allow to continue pulling - - bugfix: Fixes map transit portal pulls will now actually continue and no longer - break the pulling + - qol: Enables roller beds to cross redgate + - rscadd: + Adds space z level change will respect pulling in the same way as stair + cases + - rscadd: Adds map edge transits will now allow to continue pulling + - bugfix: + Fixes map transit portal pulls will now actually continue and no longer + break the pulling 2023-12-19: Fracshun: - - rscadd: Added new belly toggle between Loud and Private struggles - - bugfix: Fixed Eating Privacy not being in the Import/Export + - rscadd: Added new belly toggle between Loud and Private struggles + - bugfix: Fixed Eating Privacy not being in the Import/Export TheCaramelion: - - bugfix: Liquid healer recipe works properly + - bugfix: Liquid healer recipe works properly Upstream: - - bugfix: fixed raptor and scel vore capacity - - rscadd: added tgchat setting to enable/disable the red afk/connection lost prompt - - qol: moved export options of tgchat into its own category - - rscadd: added tgchat setting to only export a specific amount of lines (-1 to - make it export everything) - - rscadd: Adds a filter option to blacklist message senders for highlighting + - bugfix: fixed raptor and scel vore capacity + - rscadd: added tgchat setting to enable/disable the red afk/connection lost prompt + - qol: moved export options of tgchat into its own category + - rscadd: + added tgchat setting to only export a specific amount of lines (-1 to + make it export everything) + - rscadd: Adds a filter option to blacklist message senders for highlighting 2023-12-20: Kazzc: - - maptweak: tweaked something in a map + - maptweak: tweaked something in a map Upstream: - - bugfix: Fixes wrong variable used in absorb escape chance - - bugfix: Fixes examine messages showing under radio instead of info - - bugfix: Fixes dominated brain prey dislikes turning into likes in some cases - - bugfix: Fixes users being unable to clear their likes / dislikes if they want - to hide those fields again - - bugfix: '[issue link stripped] TG-Chat custom links in examines' - - qol: TG-Chat filters can be stored empty - - rscadd: Adds chatprint filter for belly / ooc note to chat prints - - rscadd: OOC/LOOC https:// urls are now automatically parsed into links + - bugfix: Fixes wrong variable used in absorb escape chance + - bugfix: Fixes examine messages showing under radio instead of info + - bugfix: Fixes dominated brain prey dislikes turning into likes in some cases + - bugfix: + Fixes users being unable to clear their likes / dislikes if they want + to hide those fields again + - bugfix: "[issue link stripped] TG-Chat custom links in examines" + - qol: TG-Chat filters can be stored empty + - rscadd: Adds chatprint filter for belly / ooc note to chat prints + - rscadd: OOC/LOOC https:// urls are now automatically parsed into links 2023-12-21: Upstream: - - rscadd: 'admins: Admins can now select volume in ''Play Global Sound''' - - qol: Updates some of the cooldown code - - rscadd: Added ability to play internet sounds (URLs) to players (these do still - respect the prefs) - - rscadd: Added new proc to interact with the shell() proc more nicely - - config: Added invoke_youtubedl config options - - rscadd: Added ability to play a sound at the location of a mob - - admin: Added 'Stop Sounds' debug verb - - qol: Enables TG-Chat URL Parsing for player tips and motd - - bugfix: Unicode characters won't break any longer during Say / Whisper - - qol: Changes graphite to use stone table appearance when used to build tables. + - rscadd: "admins: Admins can now select volume in 'Play Global Sound'" + - qol: Updates some of the cooldown code + - rscadd: + Added ability to play internet sounds (URLs) to players (these do still + respect the prefs) + - rscadd: Added new proc to interact with the shell() proc more nicely + - config: Added invoke_youtubedl config options + - rscadd: Added ability to play a sound at the location of a mob + - admin: Added 'Stop Sounds' debug verb + - qol: Enables TG-Chat URL Parsing for player tips and motd + - bugfix: Unicode characters won't break any longer during Say / Whisper + - qol: Changes graphite to use stone table appearance when used to build tables. 2023-12-23: Aroliacue: - - rscadd: Xenomorph Spacesuit/Voidsuit framework. Actual suits coming soon! - - balance: Spacesuit (not voidsuit) slowdown reduced from 1.5 to 1. They're now - twice as slow as voidsuits, instead of three times as slow. - - balance: Strong claws and strong bite unarmed attacks now deal 10 damage, making - them an actual upgrade to regular claws/bite and fists. (Previously 5, which - was the same damage as regular fists) - - balance: Xenomorph Hybrid bleed speed modifier increased from 0.9 to 1 (bleed - at normal speed now, instead of slower) - - balance: Xenomorph Hybrid radiation damage modifier 0.7 to 0.9 (takes more rad - damage) - - balance: Xenomorph Hybrid flash modifier 1.1 to 1.2 (flashes are more effective) - - balance: Xenomorph Hybrid unarmed attack damage increased from 5 to 15. - - balance: Xenomorph Hybrid cold comfort threshold increased from 263.15 kelvin - to 253.15 kelvin (-10 degrees Celsius to -20 Celsius) - - balance: Adjusted order of xenomorph weed healing FROM exterior damage -> interior - damage -> bones TO interior damage -> exterior damage -> bones. (Should prevent - no healing gains due to damaged lungs always ticking oxy damage) + - rscadd: Xenomorph Spacesuit/Voidsuit framework. Actual suits coming soon! + - balance: + Spacesuit (not voidsuit) slowdown reduced from 1.5 to 1. They're now + twice as slow as voidsuits, instead of three times as slow. + - balance: + Strong claws and strong bite unarmed attacks now deal 10 damage, making + them an actual upgrade to regular claws/bite and fists. (Previously 5, which + was the same damage as regular fists) + - balance: + Xenomorph Hybrid bleed speed modifier increased from 0.9 to 1 (bleed + at normal speed now, instead of slower) + - balance: + Xenomorph Hybrid radiation damage modifier 0.7 to 0.9 (takes more rad + damage) + - balance: Xenomorph Hybrid flash modifier 1.1 to 1.2 (flashes are more effective) + - balance: Xenomorph Hybrid unarmed attack damage increased from 5 to 15. + - balance: + Xenomorph Hybrid cold comfort threshold increased from 263.15 kelvin + to 253.15 kelvin (-10 degrees Celsius to -20 Celsius) + - balance: + Adjusted order of xenomorph weed healing FROM exterior damage -> interior + damage -> bones TO interior damage -> exterior damage -> bones. (Should prevent + no healing gains due to damaged lungs always ticking oxy damage) Upstream: - - qol: URL regex adjusted to ignore trailing punctation marks (:.?) - - bugfix: in vorestation wiki links not breaking the url parsing - - rscdel: hotkey input background color for borghotkeymode / borgmarco - - rscadd: welcome menu now displaying current station time and round duration ("Server - Initializing" if round hasn't started yet). + - qol: URL regex adjusted to ignore trailing punctation marks (:.?) + - bugfix: in vorestation wiki links not breaking the url parsing + - rscdel: hotkey input background color for borghotkeymode / borgmarco + - rscadd: + welcome menu now displaying current station time and round duration ("Server + Initializing" if round hasn't started yet). 2023-12-30: Aroliacue: - - qol: Removed transcore automatic notifications for deceased crew. You can still - manually ping transcore for a resleeve from the OOC tab or use the autoresleever - as needed. + - qol: + Removed transcore automatic notifications for deceased crew. You can still + manually ping transcore for a resleeve from the OOC tab or use the autoresleever + as needed. FluffMedic: - - qol: Everyone can be colorblind now, and have auto-hisses. - - qol: Removed vox requirement from Double Phoron tank - - bugfix: improper pathing on winter coat hood loadout - - bugfix: Loot safes not having loot in them. + - qol: Everyone can be colorblind now, and have auto-hisses. + - qol: Removed vox requirement from Double Phoron tank + - bugfix: improper pathing on winter coat hood loadout + - bugfix: Loot safes not having loot in them. Kashargul: - - bugfix: Sprite of the syndicate robot power cell + - bugfix: Sprite of the syndicate robot power cell MeepleMuncher: - - rscadd: added vorebellies and bump vore (safe) to pythons - - imageadd: added new python (Noodle) sprites + - rscadd: added vorebellies and bump vore (safe) to pythons + - imageadd: added new python (Noodle) sprites TheCaramelion: - - rscadd: Meaty ores event - - rscadd: Meaty variants of current meteorites + - rscadd: Meaty ores event + - rscadd: Meaty variants of current meteorites TheGreatKitsune: - - bugfix: all staff should have job whitelists + - bugfix: all staff should have job whitelists Upstream: - - bugfix: Fixes the unusable grill recipes by adding the special ingredients to - the insertable list + - bugfix: + Fixes the unusable grill recipes by adding the special ingredients to + the insertable list diff --git a/html/changelogs_ch/archive/2024-01.yml b/html/changelogs_ch/archive/2024-01.yml index 6736cc2e09..8edd59095e 100644 --- a/html/changelogs_ch/archive/2024-01.yml +++ b/html/changelogs_ch/archive/2024-01.yml @@ -1,286 +1,314 @@ 2024-01-01: Kashargul: - - bugfix: Explohound repair multiproc + - bugfix: Explohound repair multiproc TheCaramelion: - - bugfix: Step messages when stepping over a smaller, phased shadekin - - bugfix: Shadekin catching items when phased - - bugfix: Thrown item displaying messages and harming phased shadekin - - bugfix: Slashing affecting phased shadekins - - bugfix: Listening in, licking and smelling picking phased shadekin as targets - - bugfix: Vines buckling phased shadekin - - bugfix: Rogue vending machines targeting phased shadekin - - bugfix: Mobs attacking phased shadekin - - bugfix: Mobs eating laying down phased shadekin - - bugfix: Thermals exposing phased shadekin - - bugfix: Water and lava affecting phased shadekin - - bugfix: Moving from space to station tile affecting phased shadekin - - bugfix: Shadekin sliping on wet tiles - - bugfix: Targeting a gun to a shadekin doesn't break when they phase out - - bugfix: Phased shadekin squishing cockroaches - - bugfix: Phased shadekin hallucinating if they stare at the SM - - maptweak: Previous sorting office has been split. - - maptweak: Trash Sorting now replaces the Sorting Office. - - maptweak: Delivery Office replaced Construction Zone on Deck 1. + - bugfix: Step messages when stepping over a smaller, phased shadekin + - bugfix: Shadekin catching items when phased + - bugfix: Thrown item displaying messages and harming phased shadekin + - bugfix: Slashing affecting phased shadekins + - bugfix: Listening in, licking and smelling picking phased shadekin as targets + - bugfix: Vines buckling phased shadekin + - bugfix: Rogue vending machines targeting phased shadekin + - bugfix: Mobs attacking phased shadekin + - bugfix: Mobs eating laying down phased shadekin + - bugfix: Thermals exposing phased shadekin + - bugfix: Water and lava affecting phased shadekin + - bugfix: Moving from space to station tile affecting phased shadekin + - bugfix: Shadekin sliping on wet tiles + - bugfix: Targeting a gun to a shadekin doesn't break when they phase out + - bugfix: Phased shadekin squishing cockroaches + - bugfix: Phased shadekin hallucinating if they stare at the SM + - maptweak: Previous sorting office has been split. + - maptweak: Trash Sorting now replaces the Sorting Office. + - maptweak: Delivery Office replaced Construction Zone on Deck 1. Upstream: - - bugfix: adjusts the spawn location of the paper to get picked after the animation - - bugfix: omni key allowing to listening in to merc channels + - bugfix: adjusts the spawn location of the paper to get picked after the animation + - bugfix: omni key allowing to listening in to merc channels tacoguy7765093: - - maptweak: The shuttle docking systems in the carrier docks are now functional. - - maptweak: Nerfs shadekin retreat vending machines. + - maptweak: The shuttle docking systems in the carrier docks are now functional. + - maptweak: Nerfs shadekin retreat vending machines. 2024-01-04: FluffMedic: - - rscadd: New event, and function to some strange mobs + - rscadd: New event, and function to some strange mobs Kashargul: - - rscadd: The soundproof bool to all our dorms - - rscadd: The suit sensor blocking bool to all our dorms - - rscadd: The camera blocking bool to all our dorms - - rscadd: The radshielded flag to all our dorms + - rscadd: The soundproof bool to all our dorms + - rscadd: The suit sensor blocking bool to all our dorms + - rscadd: The camera blocking bool to all our dorms + - rscadd: The radshielded flag to all our dorms TheCaramelion: - - bugfix: Makes glacial lettuce obtainable + - bugfix: Makes glacial lettuce obtainable Upstream: - - qol: Adds privacy for borgs in dorms + - qol: Adds privacy for borgs in dorms 2024-01-06: Missile597: - - rscdel: Removed some excessive pipework causing redundant loops and potential - "stuck" trash - - bugfix: Fixed some disposals junction's orientations so that the trash flows correctly - towards the disposals sorting room - - bugfix: Connected a couple of disposals bins to the loop that were previously - not connected - - maptweak: Added a disposals bin in the gateway prep room, and connected it to - the dead end pipework that was heading in that direction - - rscadd: Added a recharger station for QoL to allow shadekin to recharge cells - at the hideout - - maptweak: Added a missing disposal pipe segment to complete the loop. - - bugfix: Fixed the Large Alien Ship shelter to be spawnable - - bugfix: Fixed the inventories of the Garden and Xenobotany seed storages to have - the correct list of seeds at round start (from seed_storage_vr.dm) - - maptweak: Added a missing air alarm to Chemistry Distillery + - rscdel: + Removed some excessive pipework causing redundant loops and potential + "stuck" trash + - bugfix: + Fixed some disposals junction's orientations so that the trash flows correctly + towards the disposals sorting room + - bugfix: + Connected a couple of disposals bins to the loop that were previously + not connected + - maptweak: + Added a disposals bin in the gateway prep room, and connected it to + the dead end pipework that was heading in that direction + - rscadd: + Added a recharger station for QoL to allow shadekin to recharge cells + at the hideout + - maptweak: Added a missing disposal pipe segment to complete the loop. + - bugfix: Fixed the Large Alien Ship shelter to be spawnable + - bugfix: + Fixed the inventories of the Garden and Xenobotany seed storages to have + the correct list of seeds at round start (from seed_storage_vr.dm) + - maptweak: Added a missing air alarm to Chemistry Distillery tacoguy7765093: - - maptweak: Landing zones have been tweaked to allow landing of Overmap Ships - - imageadd: Southern Cross's overmap icon has their own sprite now. - - maptweak: Space POIs are more functional now + - maptweak: Landing zones have been tweaked to allow landing of Overmap Ships + - imageadd: Southern Cross's overmap icon has their own sprite now. + - maptweak: Space POIs are more functional now 2024-01-07: TheGreatKitsune: - - rscadd: A new set of ears + - rscadd: A new set of ears Upstream: - - qol: Allows to temporarily disable textlimit warnings for the vorepanel belly - texts - - bugfix: the self resize verb now can be used even if resizing through others is - disabled - - qol: Ignore bellied players in the appendicitis events + - qol: + Allows to temporarily disable textlimit warnings for the vorepanel belly + texts + - bugfix: + the self resize verb now can be used even if resizing through others is + disabled + - qol: Ignore bellied players in the appendicitis events tacoguy7765093: - - imageadd: added large snake tail for teshari + - imageadd: added large snake tail for teshari 2024-01-08: tacoguy7765093: - - rscdel: Removed spawn of a pulse rifle - - maptweak: Minor fixes in The Dark + - rscdel: Removed spawn of a pulse rifle + - maptweak: Minor fixes in The Dark 2024-01-10: EtheoBoxxman: - - bugfix: fixes buns/bunbun cooking by fixing chaos cake interference + - bugfix: fixes buns/bunbun cooking by fixing chaos cake interference FluffMedic: - - bugfix: some mob features should now be on the proper type path - - bugfix: solar moths should be less theoretical - - bugfix: Re-enables an accidentally disabled event - - maptweak: MoL has been altered + - bugfix: some mob features should now be on the proper type path + - bugfix: solar moths should be less theoretical + - bugfix: Re-enables an accidentally disabled event + - maptweak: MoL has been altered UniquaSa: - - imageadd: added another new big leggies + - imageadd: added another new big leggies 2024-01-11: Aroliacue: - - maptweak: All major departments now have clothing vendors. - - maptweak: Added roundstart fultons to medical. - - maptweak: Added an extra surgery kit and some resleever circuit boards to the - medical storage room. - - maptweak: Added tools to the science circuit workshop. - - maptweak: Added a prebuilt hidden resleever setup to deck three. + - maptweak: All major departments now have clothing vendors. + - maptweak: Added roundstart fultons to medical. + - maptweak: + Added an extra surgery kit and some resleever circuit boards to the + medical storage room. + - maptweak: Added tools to the science circuit workshop. + - maptweak: Added a prebuilt hidden resleever setup to deck three. FluffMedic: - - rscadd: Two new OM POIs - - rscadd: A hidden area with traders - - rscadd: Some new mobs - - rscadd: Some strange content for engi and xenobio, obtained from the traders - - rscadd: New type of netgun added to cargo + - rscadd: Two new OM POIs + - rscadd: A hidden area with traders + - rscadd: Some new mobs + - rscadd: Some strange content for engi and xenobio, obtained from the traders + - rscadd: New type of netgun added to cargo Kashargul: - - rscadd: robot multibelly support - - bugfix: tgui bundle building skipping jsx files - - balance: increased SM delam explosion range by 50 % (MIN 8 -> 12. MAX 16 -> 24) - - bugfix: fixed a runtime in the alarm system. + - rscadd: robot multibelly support + - bugfix: tgui bundle building skipping jsx files + - balance: increased SM delam explosion range by 50 % (MIN 8 -> 12. MAX 16 -> 24) + - bugfix: fixed a runtime in the alarm system. TheCaramelion: - - maptweak: Bridge blast doors require Command access now + - maptweak: Bridge blast doors require Command access now 2024-01-14: FluffMedic: - - bugfix: starhunter trader code should function now - - bugfix: starhunter's desc isn't default and have names. + - bugfix: starhunter trader code should function now + - bugfix: starhunter's desc isn't default and have names. Fracshun: - - rscadd: Added the Metamorphosis Ray to science's protolathe designs + - rscadd: Added the Metamorphosis Ray to science's protolathe designs Missile597: - - bugfix: Added water as a catalyst to the "nutriment from sap" reaction as a workaround - to prevent black sapbeans from losing their reagents on harvest. Recipe now - requires 5u water before the three saps react. - - rscdel: Buggy camera in the shadekin hideout deleted + - bugfix: + Added water as a catalyst to the "nutriment from sap" reaction as a workaround + to prevent black sapbeans from losing their reagents on harvest. Recipe now + requires 5u water before the three saps react. + - rscdel: Buggy camera in the shadekin hideout deleted TheCaramelion: - - balance: Mailbag capacity changed from 21 to 28 - - bugfix: Mailbag can now pick up envelopes off the tile - - bugfix: Spamming click on an envelope won't trigger opening it multiple times + - balance: Mailbag capacity changed from 21 to 28 + - bugfix: Mailbag can now pick up envelopes off the tile + - bugfix: Spamming click on an envelope won't trigger opening it multiple times Upstream: - - bugfix: nurse spiders no longer spawning unexpectetly (to prevent snowballing) - from random sources - - rscadd: Added emag functionality on SleeveMate + - bugfix: + nurse spiders no longer spawning unexpectetly (to prevent snowballing) + from random sources + - rscadd: Added emag functionality on SleeveMate 2024-01-15: Missile597: - - rscadd: New lost and found bins added to dorms bathrooms, the bathroom near the - qpad, the bathroom near the bar and the bathroom near the gym, to allow for - easier and more discreet item returns. These connect to the lost and found loop - and also clean prey items. - - rscdel: Removed the junk on the shelves in Autoresleeving so you don't have to - go digging through random junk to get your stuff. Removed one shelf to make - room for chute. - - maptweak: Moved the lost and found exit out of the wall, so any players summarily - "tossed" into a bin don't get wall-stuck. Aimed the chute at a wall so that - there's no risk of any window breaking if hit excessively. + - rscadd: + New lost and found bins added to dorms bathrooms, the bathroom near the + qpad, the bathroom near the bar and the bathroom near the gym, to allow for + easier and more discreet item returns. These connect to the lost and found loop + and also clean prey items. + - rscdel: + Removed the junk on the shelves in Autoresleeving so you don't have to + go digging through random junk to get your stuff. Removed one shelf to make + room for chute. + - maptweak: + Moved the lost and found exit out of the wall, so any players summarily + "tossed" into a bin don't get wall-stuck. Aimed the chute at a wall so that + there's no risk of any window breaking if hit excessively. tacoguy7765093: - - bugfix: No more fatal heartburn to organic crew with stronger acids. + - bugfix: No more fatal heartburn to organic crew with stronger acids. zeskorion: - - rscadd: adds new bodymarkings, "ears", and wings. + - rscadd: adds new bodymarkings, "ears", and wings. null: - - bugfix: no more multiproccs on butchering + - bugfix: no more multiproccs on butchering 2024-01-16: Aroliacue: - - maptweak: Made some fixes/improvements to the 'Survival Luxury Home' superpose - capsule, including better lighting, labeled doors, openable curtains, a light - switch and proper floor tiles in spots it was missing. + - maptweak: + Made some fixes/improvements to the 'Survival Luxury Home' superpose + capsule, including better lighting, labeled doors, openable curtains, a light + switch and proper floor tiles in spots it was missing. Raeschen: - - bugfix: Increase default welcome window height to remove scrollbar + - bugfix: Increase default welcome window height to remove scrollbar 2024-01-18: FluffMedic: - - bugfix: slime horde requires dead explorers - - balance: Nerfs the abilities of the Paradox rift gen + - bugfix: slime horde requires dead explorers + - balance: Nerfs the abilities of the Paradox rift gen Fracshun: - - rscadd: VoreFX now applies to those indirectly in a belly. Such as those being - held by someone or in a item inside a belly. + - rscadd: + VoreFX now applies to those indirectly in a belly. Such as those being + held by someone or in a item inside a belly. Kashargul: - - bugfix: donksoft cyborg blaster not working + - bugfix: donksoft cyborg blaster not working TheCaramelion: - - rscadd: Quiet portal and airlock that won't announce leaving over Common. - - maptweak: Photocopier changed to paper shredder in the mail room - - rscadd: Added modern labcoat to the labcoat selection + - rscadd: Quiet portal and airlock that won't announce leaving over Common. + - maptweak: Photocopier changed to paper shredder in the mail room + - rscadd: Added modern labcoat to the labcoat selection Upstream: - - code_imp: Custom indexeddb store. Tgui related settings like themes might reset. - - bugfix: '"Hotkey Toggle" button now respecting the set theme.' - - bugfix: Typo in sprite_accessories.dm - - qol: Adds adjustable visual limits for displayed messages - - qol: Adds the option to modify the combining time and skipped messages in between - - qol: Adds the currently stored message count to the export tab - - qol: Heavily optimized message logging. This should lessen a lot of strain and - delay the OOMs until Selis gets to implementing a maximum round retention setting. - - qol: Allows to reorder chat tabs - - qol: Chat Export will now respect the actively selected tab filters - - qol: Disconnect banner can now be dismissed directly until the next disconnect - / lag - - rscadd: Export verb for the chatlogs - - bugfix: Main tab can no longer be deleted (requires the deletion of all tabs once - for existing chat tabs) - - bugfix: Purge message archive not working in some cases - - bugfix: emotesubtle colour in vchat themes - - bugfix: fixes interference with vore filter on examine + - code_imp: Custom indexeddb store. Tgui related settings like themes might reset. + - bugfix: '"Hotkey Toggle" button now respecting the set theme.' + - bugfix: Typo in sprite_accessories.dm + - qol: Adds adjustable visual limits for displayed messages + - qol: Adds the option to modify the combining time and skipped messages in between + - qol: Adds the currently stored message count to the export tab + - qol: + Heavily optimized message logging. This should lessen a lot of strain and + delay the OOMs until Selis gets to implementing a maximum round retention setting. + - qol: Allows to reorder chat tabs + - qol: Chat Export will now respect the actively selected tab filters + - qol: + Disconnect banner can now be dismissed directly until the next disconnect + / lag + - rscadd: Export verb for the chatlogs + - bugfix: + Main tab can no longer be deleted (requires the deletion of all tabs once + for existing chat tabs) + - bugfix: Purge message archive not working in some cases + - bugfix: emotesubtle colour in vchat themes + - bugfix: fixes interference with vore filter on examine 2024-01-19: HatArchAzel: - - rscadd: Adds new aeromorph wings to character setup. + - rscadd: Adds new aeromorph wings to character setup. Upstream: - - bugfix: fixes runtimes in the laundry basket which led to duplication of the off-hand - - rscadd: "/\U0001F191" - - rscadd: '[issue link stripped]' - - rscadd: Added tanktop and yellow jacket to loadout - - qol: Microwaves are now OOC escapable - - balance: Nerfs foam durasteel greatsword - - bugfix: Fixes memory leak with codexes - - bugfix: Fixes bug which bricks codex "go back" button - - bugfix: Reimplements footstep sounds for rock turfs - - bugfix: Fixes edge-case which sometimes repeatedly spawned POI's on top of each - other - - rscadd: Adds more PDA notes, adds copy and print function to PDA note app - - bugfix: Zombie powder makes hearts appear stopped again - - bugfix: Highlander mode no longer crashes the server, and also doesn't delete - your organs anymore - - bugfix: Conveyor belts no longer move flashlight light cones - - bugfix: Particle accelerator properly applies radiation to bumped mobs again - - rscadd: Adds missing surgery names - - bugfix: Healthy tesh no longer appear hurt on photographs and dogborg sleepers - - bugfix: Organs no longer get stuck to the HUD - - bugfix: Organ butchering works again - - qol: added GPS into Triangulating device design names, so that people find it - when only searching for GPS - - qol: changed the wording on the organ treatment, from dress to treat. Fixed a - typo in Detach. - - rscadd: 'Downstream: Needs manual changes as we somehow never took over the naming - on those steps. DO NOT MERGE right away!' + - bugfix: fixes runtimes in the laundry basket which led to duplication of the off-hand + - rscadd: "/\U0001F191" + - rscadd: "[issue link stripped]" + - rscadd: Added tanktop and yellow jacket to loadout + - qol: Microwaves are now OOC escapable + - balance: Nerfs foam durasteel greatsword + - bugfix: Fixes memory leak with codexes + - bugfix: Fixes bug which bricks codex "go back" button + - bugfix: Reimplements footstep sounds for rock turfs + - bugfix: + Fixes edge-case which sometimes repeatedly spawned POI's on top of each + other + - rscadd: Adds more PDA notes, adds copy and print function to PDA note app + - bugfix: Zombie powder makes hearts appear stopped again + - bugfix: + Highlander mode no longer crashes the server, and also doesn't delete + your organs anymore + - bugfix: Conveyor belts no longer move flashlight light cones + - bugfix: Particle accelerator properly applies radiation to bumped mobs again + - rscadd: Adds missing surgery names + - bugfix: Healthy tesh no longer appear hurt on photographs and dogborg sleepers + - bugfix: Organs no longer get stuck to the HUD + - bugfix: Organ butchering works again + - qol: + added GPS into Triangulating device design names, so that people find it + when only searching for GPS + - qol: + changed the wording on the organ treatment, from dress to treat. Fixed a + typo in Detach. + - rscadd: + "Downstream: Needs manual changes as we somehow never took over the naming + on those steps. DO NOT MERGE right away!" 2024-01-21: Aroliacue: - - rscadd: Fultons can now be used anywhere, making them suitable for medical extraction - and sending objects back to the station. Using them on a living creature will - stun them for a significant amount of time, and combined with their limited - uses and cost, this should discourage using them as an alternative to teleportation. - - rscadd: Added bluespace fultons to the 'Misc' tab and added the Surgical Kit to - the 'medical' tab in cargo. - - soundadd: Increased the volume of bonebreaks. - - imageadd: Added new icons for the bluespace fulton beacon. + - rscadd: + Fultons can now be used anywhere, making them suitable for medical extraction + and sending objects back to the station. Using them on a living creature will + stun them for a significant amount of time, and combined with their limited + uses and cost, this should discourage using them as an alternative to teleportation. + - rscadd: + Added bluespace fultons to the 'Misc' tab and added the Surgical Kit to + the 'medical' tab in cargo. + - soundadd: Increased the volume of bonebreaks. + - imageadd: Added new icons for the bluespace fulton beacon. ItsSelis: - - bugfix: fixed changelog path + - bugfix: fixed changelog path 2024-01-22: EtheoBoxxman: - - rscadd: Bodycams, configurable in hand and attachable to suits - - rscadd: Added a unique monitor for bodycams, constructable like entertainment - monitors. - - rscadd: Adds a bodycam to security lockers, and to SecTech vendors. - - maptweak: 'Adds bodycam monitors to sec desk, hos office, warden office, and security - briefing room. + - rscadd: Bodycams, configurable in hand and attachable to suits + - rscadd: + Added a unique monitor for bodycams, constructable like entertainment + monitors. + - rscadd: Adds a bodycam to security lockers, and to SecTech vendors. + - maptweak: + "Adds bodycam monitors to sec desk, hos office, warden office, and security + briefing room. - :cl: + :cl: - + - ' + " Missile597: - - maptweak: Isolation ward exterior windows made electrochromatic + - maptweak: Isolation ward exterior windows made electrochromatic Raeschen: - - qol: Allows carpets to be painted + - qol: Allows carpets to be painted TheCaramelion: - - bugfix: Ghosts won't delete pAIs if they close the tgui pop-ups anymore + - bugfix: Ghosts won't delete pAIs if they close the tgui pop-ups anymore Upstream: - - rscadd: Added new trait (Bad Swimmer) + - rscadd: Added new trait (Bad Swimmer) 2024-01-26: Darlantanis: - - qol: Adjust turf edges priority - - qol: Tweaks windgrille spawner layer - - bugfix: Makes wingrille spawners work after roundstart + - qol: Adjust turf edges priority + - qol: Tweaks windgrille spawner layer + - bugfix: Makes wingrille spawners work after roundstart EtheoBoxxman: - - rscadd: Adds breathless trait - - rscadd: Adds shadekin bodytype for custom species - - rscadd: Adds marish language + - rscadd: Adds breathless trait + - rscadd: Adds shadekin bodytype for custom species + - rscadd: Adds marish language FluffMedic: - - rscadd: Added Anomaly role, aka new shadekin role - - rscadd: Added an outsider radio - - qol: Shadekin and outsiders are now separate - - bugfix: Anomaly getting mail, and should be announcing - - bugfix: fixed a spawnpoint + - rscadd: Added Anomaly role, aka new shadekin role + - rscadd: Added an outsider radio + - qol: Shadekin and outsiders are now separate + - bugfix: Anomaly getting mail, and should be announcing + - bugfix: fixed a spawnpoint Kashargul: - - bugfix: runtime during belly acid reagent applications on robot robot noms - - bugfix: runtime during acid reagent application on destructible objects + - bugfix: runtime during belly acid reagent applications on robot robot noms + - bugfix: runtime during acid reagent application on destructible objects Missile597: - - maptweak: Replaced the secret console with a working resleever console - - maptweak: Replaced the secret cloning pod with a sleeve growing pod + - maptweak: Replaced the secret console with a working resleever console + - maptweak: Replaced the secret cloning pod with a sleeve growing pod Raeschen: - - rscdel: Removes stripping from jelly blob vore + - rscdel: Removes stripping from jelly blob vore TheCaramelion: - - bugfix: Solar grubs can now evolve - - maptweak: Solar moth re-added to the valley - - bugfix: Only shadekin can pick the Anomaly role + - bugfix: Solar grubs can now evolve + - maptweak: Solar moth re-added to the valley + - bugfix: Only shadekin can pick the Anomaly role TheGreatKitsune: - - rscadd: New ability for shadekin + - rscadd: New ability for shadekin 2024-01-27: FluffMedic: - - bugfix: Outsiders should be silent again + - bugfix: Outsiders should be silent again diff --git a/html/changelogs_ch/archive/2024-02.yml b/html/changelogs_ch/archive/2024-02.yml index 8d82ee8bf8..0d9442286e 100644 --- a/html/changelogs_ch/archive/2024-02.yml +++ b/html/changelogs_ch/archive/2024-02.yml @@ -1,302 +1,330 @@ 2024-02-01: Aroliacue: - - bugfix: Corrected a misplaced chompedit that removed code necessary for cyborgs - to navigate in space. + - bugfix: + Corrected a misplaced chompedit that removed code necessary for cyborgs + to navigate in space. FluffMedic: - - rscadd: A New gateway - - rscadd: Strange random bits to xenobio - - bugfix: teshari rigsuits sprites work for the precursor, and aegis rigsuits - - rscadd: New vault and maintence + - rscadd: A New gateway + - rscadd: Strange random bits to xenobio + - bugfix: teshari rigsuits sprites work for the precursor, and aegis rigsuits + - rscadd: New vault and maintence Kashargul: - - bugfix: '"Transfer to Shell" AI verb' + - bugfix: '"Transfer to Shell" AI verb' Missile597: - - rscadd: Cinnamon seeds added to the seed storages in garden and xenobotany - - rscadd: Added emergency shutters that were missing on the south part of deck 1 - - rscdel: Removed two shutter doors in the dorms corridor that were cutting off - certain areas from a scrubber or a pump when closed due to an alarm - - qol: Moved a space heater that was blocking a trash pile - - bugfix: Fixed the airlock on the Ninja shuttle so the airlock helper doesn't panic - when loading up the round. Also moved the button so that it doesn't get left - behind when the shuttle jumps (not that it gets used) + - rscadd: Cinnamon seeds added to the seed storages in garden and xenobotany + - rscadd: Added emergency shutters that were missing on the south part of deck 1 + - rscdel: + Removed two shutter doors in the dorms corridor that were cutting off + certain areas from a scrubber or a pump when closed due to an alarm + - qol: Moved a space heater that was blocking a trash pile + - bugfix: + Fixed the airlock on the Ninja shuttle so the airlock helper doesn't panic + when loading up the round. Also moved the button so that it doesn't get left + behind when the shuttle jumps (not that it gets used) 2024-02-02: FluffMedic: - - bugfix: adds a missing wire + - bugfix: adds a missing wire Upstream: - - rscadd: Added Vertical Nom, submit to prey and dominate prey verbs to borgs + - rscadd: Added Vertical Nom, submit to prey and dominate prey verbs to borgs 2024-02-03: FluffMedic: - - bugfix: walls in a gateway being the wrong type - - bugfix: Missing sprites for a mob - - bugfix: Adds a default set of sprites for a gun + - bugfix: walls in a gateway being the wrong type + - bugfix: Missing sprites for a mob + - bugfix: Adds a default set of sprites for a gun Fracshun: - - rscadd: Mind Binder can now target gargoyles in their stone form - - rscadd: Renaming a plushie also updates the name of the one turned into it - - bugfix: Auto resleever can now properly be used after being destroyed as an item - - bugfix: Using the Mind Binder on a scooped mob now targets the mob in the holder, - not the holder item - - qol: Digesting as an item now lets you use the belly digested respawn timer + - rscadd: Mind Binder can now target gargoyles in their stone form + - rscadd: Renaming a plushie also updates the name of the one turned into it + - bugfix: Auto resleever can now properly be used after being destroyed as an item + - bugfix: + Using the Mind Binder on a scooped mob now targets the mob in the holder, + not the holder item + - qol: Digesting as an item now lets you use the belly digested respawn timer Kashargul: - - qol: girders now refund a stack of 2 steel sheets + - qol: girders now refund a stack of 2 steel sheets 2024-02-05: FluffMedic: - - bugfix: Eclipse foes should all have some form of remains now - - bugfix: The hades mecha should now be buildable in it's gateway - - bugfix: the elemental gun should properly swap sprites and have the intended burst - for each mode - - bugfix: The crystal rigsuit should be using the proper sprites + - bugfix: Eclipse foes should all have some form of remains now + - bugfix: The hades mecha should now be buildable in it's gateway + - bugfix: + the elemental gun should properly swap sprites and have the intended burst + for each mode + - bugfix: The crystal rigsuit should be using the proper sprites Kashargul: - - rscadd: phasing vore pref - - rscadd: stripping pref for prey - - rscadd: apply liquids pref for prey - - rscadd: temporary/saving auto accept for pred / prey spwan, 0-30 seconds until - accept (requires tgui input framework enabled) - - rscadd: shadekin spont prey, phase into preds if prefs align - - qol: reworked the vorepanel settings page into categories - - qol: reworked the examine mechanical prefs to hide unapplyable subprefs - - qol: selective mode now shows current selection and is colour coded - - qol: reagents are now colour coded, neutral (blue), feedable (teal), beneficial - (green), acids (red), damaging to some livings (orange) - - qol: liquid splash message shows now always when liquids are inside the belly - - qol: liquid settings only apply when the main toggle is on now - - bugfix: heal belly pref will now prevent healing from healing bellies (and beneficial - reagents) - - bugfix: save prefs not showing on belly liquid changes - - bugfix: some prefs in examine mechanical prefs not updating without saving the - preferences - - bugfix: some prefs not saving / transferring properly - - bugfix: spawn as mob with vorebellies proc locking until a belly is selected - - bugfix: space cleaner reagent missing in selection - - bugfix: a runtime on robot liquid generation if no powercell is installed - - balance: simple mobs are no longer vore belly stripable - - balance: adds inaprovaline to the explohound sleeper + - rscadd: phasing vore pref + - rscadd: stripping pref for prey + - rscadd: apply liquids pref for prey + - rscadd: + temporary/saving auto accept for pred / prey spwan, 0-30 seconds until + accept (requires tgui input framework enabled) + - rscadd: shadekin spont prey, phase into preds if prefs align + - qol: reworked the vorepanel settings page into categories + - qol: reworked the examine mechanical prefs to hide unapplyable subprefs + - qol: selective mode now shows current selection and is colour coded + - qol: + reagents are now colour coded, neutral (blue), feedable (teal), beneficial + (green), acids (red), damaging to some livings (orange) + - qol: liquid splash message shows now always when liquids are inside the belly + - qol: liquid settings only apply when the main toggle is on now + - bugfix: + heal belly pref will now prevent healing from healing bellies (and beneficial + reagents) + - bugfix: save prefs not showing on belly liquid changes + - bugfix: + some prefs in examine mechanical prefs not updating without saving the + preferences + - bugfix: some prefs not saving / transferring properly + - bugfix: spawn as mob with vorebellies proc locking until a belly is selected + - bugfix: space cleaner reagent missing in selection + - bugfix: a runtime on robot liquid generation if no powercell is installed + - balance: simple mobs are no longer vore belly stripable + - balance: adds inaprovaline to the explohound sleeper Raeschen: - - rscadd: '''Hide'' neutral trait.' + - rscadd: "'Hide' neutral trait." TheCaramelion: - - bugfix: Virus event will no longer pick immune species + - bugfix: Virus event will no longer pick immune species 2024-02-07: Raeschen: - - balance: global projectile speed increased from 3.0 to 1.5 (Lower is faster) + - balance: global projectile speed increased from 3.0 to 1.5 (Lower is faster) 2024-02-08: HatArchAzel: - - rscadd: Two new markings, though they're just variants of each other to have support - for both plantigrade and digitigrade characters in case a plantigrade character - is using the model's torso/groin. + - rscadd: + Two new markings, though they're just variants of each other to have support + for both plantigrade and digitigrade characters in case a plantigrade character + is using the model's torso/groin. Kashargul: - - bugfix: strip preference should now save properly + - bugfix: strip preference should now save properly Upstream: - - rscadd: Added new 18th century outfit as requested by eldzen - - rscadd: ports fox ears from skyrat - - bugfix: fixes bonnie alt and bonnie alt long (i forgot to upload all their sprites - when i ported them oops) + - rscadd: Added new 18th century outfit as requested by eldzen + - rscadd: ports fox ears from skyrat + - bugfix: + fixes bonnie alt and bonnie alt long (i forgot to upload all their sprites + when i ported them oops) 2024-02-09: Upstream: - - qol: Updated prettier version - - rscdel: Removed Internet Explorer 8 support - - qol: tgui 5.0 update + - qol: Updated prettier version + - rscdel: Removed Internet Explorer 8 support + - qol: tgui 5.0 update 2024-02-10: FluffMedic: - - rscadd: The hidden slimes should be useable and benefical + - rscadd: The hidden slimes should be useable and benefical ItsSelis: - - qol: maps now also properly compile on change with the tool - - rscadd: added icon_cutter tool from tg - - bugfix: fixed some unicode encoding for some descriptions + - qol: maps now also properly compile on change with the tool + - rscadd: added icon_cutter tool from tg + - bugfix: fixed some unicode encoding for some descriptions Missile597: - - bugfix: Removed access levels from buttons and doors on SurvivalSecurity shelter, - allowing outsiders to access their own capsule - - bugfix: Fixed the starting atmos on the skipjack plating parts of the SurvivalSecurity - shelter so that it's breathable and not just Nitrogen. + - bugfix: + Removed access levels from buttons and doors on SurvivalSecurity shelter, + allowing outsiders to access their own capsule + - bugfix: + Fixed the starting atmos on the skipjack plating parts of the SurvivalSecurity + shelter so that it's breathable and not just Nitrogen. Raeschen: - - balance: Shadekin HP nerfs (Per eye color) - - balance: Bluespace crystals dephase shadekin that step on them - - balance: Bluespace crystals will dephase shadekin in a 3 tile radius when thrown. + - balance: Shadekin HP nerfs (Per eye color) + - balance: Bluespace crystals dephase shadekin that step on them + - balance: Bluespace crystals will dephase shadekin in a 3 tile radius when thrown. TheCaramelion: - - rscdel: Removed "Viral Infection" from the rotation. - - rscadd: Added "Infected Room" to the rotation. - - code_imp: event_manager.ch should be easier to read now. - - bugfix: Blood, vomit and mucus containing viruses will now spread it. + - rscdel: Removed "Viral Infection" from the rotation. + - rscadd: Added "Infected Room" to the rotation. + - code_imp: event_manager.ch should be easier to read now. + - bugfix: Blood, vomit and mucus containing viruses will now spread it. WolvesAndOwls: - - rscadd: Mice are now ghostpods + - rscadd: Mice are now ghostpods cadyn: - - bugfix: fixed horrible awful code for mob spawners + - bugfix: fixed horrible awful code for mob spawners 2024-02-11: Kashargul: - - bugfix: chemMaster / ChemSynthesizer, color mate interface and some vorePanel - code style + - bugfix: + chemMaster / ChemSynthesizer, color mate interface and some vorePanel + code style cadyn: - - bugfix: mouse spawners + - bugfix: mouse spawners 2024-02-12: Kashargul: - - bugfix: fixes some crashing chem UIs + - bugfix: fixes some crashing chem UIs Upstream: - - admin: added "Short Stacker" admin item - - rscadd: Added a new variant of the size collar (Created by using wrench to break - crystal => Prevents user from changing the size manually and triggering the - collar with signal flips the wearer back and forth between a random size and - their original size) - - rscadd: Added a new verb "Spin Size Dial" to size guns (random size) - - rscadd: Added alt-click effect to gradual size guns (toggling size-trading mode) - - admin: new eventkit verb that allows eventmanagers/admins to create fake PDA conversations - (or props for them) without actually having to spawn a PDA/PDA Server (including - PDA Identities) + - admin: added "Short Stacker" admin item + - rscadd: + Added a new variant of the size collar (Created by using wrench to break + crystal => Prevents user from changing the size manually and triggering the + collar with signal flips the wearer back and forth between a random size and + their original size) + - rscadd: Added a new verb "Spin Size Dial" to size guns (random size) + - rscadd: Added alt-click effect to gradual size guns (toggling size-trading mode) + - admin: + new eventkit verb that allows eventmanagers/admins to create fake PDA conversations + (or props for them) without actually having to spawn a PDA/PDA Server (including + PDA Identities) 2024-02-13: Raeschen: - - admin: PDA identities 'Eventkit' --> 'fun', tab clutter + - admin: PDA identities 'Eventkit' --> 'fun', tab clutter Upstream: - - bugfix: fixed the user interface for the CharacterDirectory. + - bugfix: fixed the user interface for the CharacterDirectory. tacoguy7765093: - - qol: Makes more neutral traits be able to be taken by non-custom species. + - qol: Makes more neutral traits be able to be taken by non-custom species. 2024-02-14: Fracshun: - - qol: Enabled logging on interactions with the Mind Binder and Body Snatcher - - balance: Increased the time to bind minds into mobs up to 30 seconds - - balance: whitelists only specific mobs - - balance: blacklists key items + - qol: Enabled logging on interactions with the Mind Binder and Body Snatcher + - balance: Increased the time to bind minds into mobs up to 30 seconds + - balance: whitelists only specific mobs + - balance: blacklists key items Raeschen: - - rscadd: Guidelines for shadekin and outsider, linked on spawn. + - rscadd: Guidelines for shadekin and outsider, linked on spawn. 2024-02-15: ItsSelis: - - rscadd: Added round_id + - rscadd: Added round_id 2024-02-16: FluffMedic: - - rscadd: Vending machines in the hidden mountain area + - rscadd: Vending machines in the hidden mountain area Raeschen: - - rscadd: configurable role-request/fax to discord settings. - - rscadd: role request will ping if configured - - admin: Adminsent faxes include the body (if any) - - rscadd: Faxes to discord via TGS discord chatbot config + - rscadd: configurable role-request/fax to discord settings. + - rscadd: role request will ping if configured + - admin: Adminsent faxes include the body (if any) + - rscadd: Faxes to discord via TGS discord chatbot config Sharkmare: - - rscadd: Recorder into loadout - - rscadd: Saxophone into loadout - - bugfix: loadout names for Trombone + - rscadd: Recorder into loadout + - rscadd: Saxophone into loadout + - bugfix: loadout names for Trombone TheCaramelion: - - rscadd: Common diseases for the Infected Room event - - balance: Infected Room is now slightly more common - - code_imp: Added makedisease proc, to build custom viruses. + - rscadd: Common diseases for the Infected Room event + - balance: Infected Room is now slightly more common + - code_imp: Added makedisease proc, to build custom viruses. cadyn: - - bugfix: Fix floating bullets - - refactor: DBCore updated to match TGStation - - server: TGS DMAPI Updated - - server: RUST-G Updated alongwith its DMAPI + - bugfix: Fix floating bullets + - refactor: DBCore updated to match TGStation + - server: TGS DMAPI Updated + - server: RUST-G Updated alongwith its DMAPI 2024-02-17: Aroliacue: - - rscadd: Reenabled doorbells on airlocks and knocking on regular doors. This can - be done by leftalt-clicking on a door. + - rscadd: + Reenabled doorbells on airlocks and knocking on regular doors. This can + be done by leftalt-clicking on a door. FluffMedic: - - rscadd: More traits! + - rscadd: More traits! Missile597: - - rscadd: Added a missing shutter on deck one docking area - - rscadd: Added airlock tanks and station to the broken airlock by the vault and - connected it to distro, so this should function properly now. - - rscadd: Added some missing shutters from airlocks for consistency - - rscdel: Deleted some unnecessary emergency shutters on airlock windows for consistency - - rscdel: Deleted a random extra vent in deck 1 security checkpoint - - rscdel: Deleted unused wiring and scrubber pipework that used to go to the old - vault through maints. The vault now pulls from elsewhere. - - bugfix: Fixed the positioning of the fire alarms on the restaurant and bar outsider - shelter - - bugfix: Fixed the access levels on the trading ship airlock and suit cycler - - bugfix: 'Fixed the airlock on the trading ship so that the buttons and control - panel operate the doors. KNOWN BUG: Trying to cycle the airlock results in one - tick of cycled air before the vents shut down. I''m unsure how to fix this but - the doors can still be overridden and manually cycled. There''s atmos shields - on the doors either way to prevent air loss' - - bugfix: Rotates the pressure regulators on deck one to face the right direction, - no longer cutting off half of deck 1 from distro. This loop is probably in need - of improvements but it works. + - rscadd: Added a missing shutter on deck one docking area + - rscadd: + Added airlock tanks and station to the broken airlock by the vault and + connected it to distro, so this should function properly now. + - rscadd: Added some missing shutters from airlocks for consistency + - rscdel: Deleted some unnecessary emergency shutters on airlock windows for consistency + - rscdel: Deleted a random extra vent in deck 1 security checkpoint + - rscdel: + Deleted unused wiring and scrubber pipework that used to go to the old + vault through maints. The vault now pulls from elsewhere. + - bugfix: + Fixed the positioning of the fire alarms on the restaurant and bar outsider + shelter + - bugfix: Fixed the access levels on the trading ship airlock and suit cycler + - bugfix: + "Fixed the airlock on the trading ship so that the buttons and control + panel operate the doors. KNOWN BUG: Trying to cycle the airlock results in one + tick of cycled air before the vents shut down. I'm unsure how to fix this but + the doors can still be overridden and manually cycled. There's atmos shields + on the doors either way to prevent air loss" + - bugfix: + Rotates the pressure regulators on deck one to face the right direction, + no longer cutting off half of deck 1 from distro. This loop is probably in need + of improvements but it works. TheCaramelion: - - rscadd: Added a quiet gateway to The Dark - - rscadd: Added a quiet gateway to Sif + - rscadd: Added a quiet gateway to The Dark + - rscadd: Added a quiet gateway to Sif 2024-02-18: Kashargul: - - bugfix: fixes the character Directory + - bugfix: fixes the character Directory 2024-02-19: Kashargul: - - rscadd: the item digest blacklist to belly reagents - - rscadd: the drone board to the list to prevent round removing of lost drones in - vore encounters - - bugfix: fixes the runtime in the liquid system hopefully fully this time + - rscadd: the item digest blacklist to belly reagents + - rscadd: + the drone board to the list to prevent round removing of lost drones in + vore encounters + - bugfix: fixes the runtime in the liquid system hopefully fully this time KotetsuRedwood: - - rscadd: Added Welder's Originals as a cookable food. - - rscadd: Added Hot Butter Ice Cream as a cookable food. - - spellcheck: Removed description of cream topping from the butterscotch pie. - - rscadd: Added *gwah and *wawa as sound emotes. - - sound: Added sounds for *gwah and *wawa emotes. + - rscadd: Added Welder's Originals as a cookable food. + - rscadd: Added Hot Butter Ice Cream as a cookable food. + - spellcheck: Removed description of cream topping from the butterscotch pie. + - rscadd: Added *gwah and *wawa as sound emotes. + - sound: Added sounds for *gwah and *wawa emotes. 2024-02-20: ItsSelis: - - qol: developers no longer have to generate a javascript bundle when changing the - user interface - - rscadd: Added CI workflow to test out TGS based changes. + - qol: + developers no longer have to generate a javascript bundle when changing the + user interface + - rscadd: Added CI workflow to test out TGS based changes. Kashargul: - - bugfix: the character directory sorting table for react + - bugfix: the character directory sorting table for react KotetsuRedwood: - - bugfix: Changed the recipe for hot butter ice cream to use ice instead of milk. - - bugfix: Gives Butterscotch and Hot Butter Ice Cream trash items when eaten. You - have to eat the bowls deliberately now. + - bugfix: Changed the recipe for hot butter ice cream to use ice instead of milk. + - bugfix: + Gives Butterscotch and Hot Butter Ice Cream trash items when eaten. You + have to eat the bowls deliberately now. Raeschen: - - bugfix: optimisation on particle accelerator - - bugfix: outdated callback syntax - - bugfix: fixed high CPU usage in turf/simulated/wet_floor - - code_imp: stop qdelling progressbars - - bugfix: Bigdragon noms didn't autotransfer + - bugfix: optimisation on particle accelerator + - bugfix: outdated callback syntax + - bugfix: fixed high CPU usage in turf/simulated/wet_floor + - code_imp: stop qdelling progressbars + - bugfix: Bigdragon noms didn't autotransfer tacoguy7765093: - - bugfix: Fixed a corrupted overmap POI map crashing. + - bugfix: Fixed a corrupted overmap POI map crashing. 2024-02-21: Raeschen: - - rscadd: Emergency closet shelter in the tcomms supplies room - - bugfix: No qdelling hud element and selected_image /images - - rscdel: Remove hallucination 'fake_attacker' + - rscadd: Emergency closet shelter in the tcomms supplies room + - bugfix: No qdelling hud element and selected_image /images + - rscdel: Remove hallucination 'fake_attacker' cadyn: - - bugfix: fix VV number inputs + - bugfix: fix VV number inputs 2024-02-22: FluffMedic: - - bugfix: Several odd materials use the proper numbers + - bugfix: Several odd materials use the proper numbers Kashargul: - - code_imp: editing the chomp specific UIs to be react compliant - - rscadd: miasma for the chem grenade that some mobs spawn on loading + - code_imp: editing the chomp specific UIs to be react compliant + - rscadd: miasma for the chem grenade that some mobs spawn on loading Raeschen: - - rscadd: Wilderness shelter now flattened, thank you Bib bob - - rscdel: sky islands removed - - rscdel: Removed 2x Kara Z layers (Aerostat, Mines) + - rscadd: Wilderness shelter now flattened, thank you Bib bob + - rscdel: sky islands removed + - rscdel: Removed 2x Kara Z layers (Aerostat, Mines) 2024-02-23: Delams-The-SM: - - rscadd: Ability to dominate mob via dominate predator - - rscadd: Ability to dominate body without player's mind (The same way one can - do via mind binder) - - code_imp: Mob whitelist from mind binder became a global list var/global/list/mob_takeover_whitelist + - rscadd: Ability to dominate mob via dominate predator + - rscadd: + Ability to dominate body without player's mind (The same way one can + do via mind binder) + - code_imp: Mob whitelist from mind binder became a global list var/global/list/mob_takeover_whitelist 2024-02-24: Kashargul: - - bugfix: a runtime in the tgs status command - - rscadd: modified AR-Visor for teshari + - bugfix: a runtime in the tgs status command + - rscadd: modified AR-Visor for teshari 2024-02-25: KotetsuRedwood: - - rscadd: Adds a "big nostrils" marking for characters with huge noses. + - rscadd: Adds a "big nostrils" marking for characters with huge noses. Raeschen: - - bugfix: Synths no longer infinitely get a rename prompt on MMI insertion - - code_imp: Atmos scrubbers kill the final trace left behind after their minimum - threshold for scrubbing is passed. + - bugfix: Synths no longer infinitely get a rename prompt on MMI insertion + - code_imp: + Atmos scrubbers kill the final trace left behind after their minimum + threshold for scrubbing is passed. TheCaramelion: - - bugfix: Added an amount of meat to drop to metroids + - bugfix: Added an amount of meat to drop to metroids 2024-02-26: ItsSelis: - - rscadd: Added TGS event handler to notify of updates - - admin: Added TGS event handler to notify/warn for specific server events - - server: Updates DMAPI to version 5.9.0 + - rscadd: Added TGS event handler to notify of updates + - admin: Added TGS event handler to notify/warn for specific server events + - server: Updates DMAPI to version 5.9.0 TheCaramelion: - - qol: Grand piano can be moved around now + - qol: Grand piano can be moved around now 2024-02-28: Raeschen: - - bugfix: fixed datumcomponents - - bugfix: Hiding no longer resets after moving. + - bugfix: fixed datumcomponents + - bugfix: Hiding no longer resets after moving. cadyn: - - refactor: 515 Compatability - - refactor: Nuke observer datums in favor of comsigs - - refactor: GC Update - - refactor: Mob stale references dealt with and set to GC normally - - refactor: bicon and /icon ditched in favor of icon2html - - refactor: Asset delivery redone + - refactor: 515 Compatability + - refactor: Nuke observer datums in favor of comsigs + - refactor: GC Update + - refactor: Mob stale references dealt with and set to GC normally + - refactor: bicon and /icon ditched in favor of icon2html + - refactor: Asset delivery redone 2024-02-29: ItsSelis: - - server: DMAPI updated to version 7.1.1 to solve a very rare infinite hang bug - on world startup. + - server: + DMAPI updated to version 7.1.1 to solve a very rare infinite hang bug + on world startup. Raeschen: - - bugfix: prevents mind-bound items crashing the MC + - bugfix: prevents mind-bound items crashing the MC diff --git a/html/changelogs_ch/archive/2024-03.yml b/html/changelogs_ch/archive/2024-03.yml index bff05c2ddb..031403a956 100644 --- a/html/changelogs_ch/archive/2024-03.yml +++ b/html/changelogs_ch/archive/2024-03.yml @@ -1,321 +1,343 @@ 2024-03-01: TheCaramelion: - - balance: Halved the max time Infected Room event gets announced - - balance: More mucus per trigger of Infected Room event - - bugfix: Infected Room event picking maints as valid area - - bugfix: Incorrect announcement level for Infected Room event + - balance: Halved the max time Infected Room event gets announced + - balance: More mucus per trigger of Infected Room event + - bugfix: Infected Room event picking maints as valid area + - bugfix: Incorrect announcement level for Infected Room event Upstream: - - balance: reduces the loss rate from 35\~45% to 20\~25% of the smart stoage - - balance: increases the sheet maxcap from 250 to ~~400~~ 500 of the smart stoage - - balance: adds a minimum threshold of 20 to sheet culling to the smart stoage + - balance: reduces the loss rate from 35\~45% to 20\~25% of the smart stoage + - balance: increases the sheet maxcap from 250 to ~~400~~ 500 of the smart stoage + - balance: adds a minimum threshold of 20 to sheet culling to the smart stoage 2024-03-02: ItsSelis: - - qol: Updates DCS backend code. + - qol: Updates DCS backend code. Raeschen: - - bugfix: observer_move applied on init (if in a mob) as well as enter and exit + - bugfix: observer_move applied on init (if in a mob) as well as enter and exit SpadesNeil: - - refactor: Improves dev sanity by moving values where they should belong. - - balance: Reverts excessively high digestion damage values. Will use fallback values, - which right now are 0.5 brute 0.5 burn per gurgle tick. - - balance: Allows digestion chance on struggle. - - balance: Tiny nerf to escape chance because I feel like it. - - balance: Allows snakes to bump nom mobs in the same faction. - - balance: Snakes digest by default now, except for Noodle, who will hold instead. - - balance: Snake bellies now digest food items. - - rscadd: Added idle belly emotes. - - rscadd: Added struggle emotes. - - bugfix: Various tweaks and fixes to remove redundant code. + - refactor: Improves dev sanity by moving values where they should belong. + - balance: + Reverts excessively high digestion damage values. Will use fallback values, + which right now are 0.5 brute 0.5 burn per gurgle tick. + - balance: Allows digestion chance on struggle. + - balance: Tiny nerf to escape chance because I feel like it. + - balance: Allows snakes to bump nom mobs in the same faction. + - balance: Snakes digest by default now, except for Noodle, who will hold instead. + - balance: Snake bellies now digest food items. + - rscadd: Added idle belly emotes. + - rscadd: Added struggle emotes. + - bugfix: Various tweaks and fixes to remove redundant code. TheCaramelion: - - rscadd: Dry Agent reagent - - rscadd: Dry galoshes + - rscadd: Dry Agent reagent + - rscadd: Dry galoshes 2024-03-03: FluffMedic: - - bugfix: fix active edges in a few POIS + - bugfix: fix active edges in a few POIS ItsSelis: - - qol: Improved some of the dreaming code including it's strings. - - qol: Timer subsystem update. + - qol: Improved some of the dreaming code including it's strings. + - qol: Timer subsystem update. Raeschen: - - bugfix: Fixes being able to permanently heat up the wilderness/the valley - - bugfix: Gargoyle del runtime - - bugfix: chatmessage runtime - - bugfix: nif runtime - - bugfix: tgui runtimes (status and mob logout) - - bugfix: globals referencing order mistake in SSmachines - - bugfix: Upgrades Timsort - - bugfix: Upgrades machinery SS a little in structure - - bugfix: Expands find_references functionality with a few extra debug modes - - bugfix: A typo in atmos pipes - - bugfix: Some CALLs to LIBCALL - - bugfix: fixed landmine sprites + - bugfix: Fixes being able to permanently heat up the wilderness/the valley + - bugfix: Gargoyle del runtime + - bugfix: chatmessage runtime + - bugfix: nif runtime + - bugfix: tgui runtimes (status and mob logout) + - bugfix: globals referencing order mistake in SSmachines + - bugfix: Upgrades Timsort + - bugfix: Upgrades machinery SS a little in structure + - bugfix: Expands find_references functionality with a few extra debug modes + - bugfix: A typo in atmos pipes + - bugfix: Some CALLs to LIBCALL + - bugfix: fixed landmine sprites TheCaramelion: - - rscadd: Crawling. - - qol: Laying down won't make you drop items in your hands. - - qol: You can now equip/unequip items while laying down. + - rscadd: Crawling. + - qol: Laying down won't make you drop items in your hands. + - qol: You can now equip/unequip items while laying down. Upstream: - - rscadd: Added Cascade mode for resonators. + - rscadd: Added Cascade mode for resonators. 2024-03-04: Darlantanis: - - rscadd: Turfs now support different species footstep sounds - - rscadd: Adds new default step sounds for tesharii + - rscadd: Turfs now support different species footstep sounds + - rscadd: Adds new default step sounds for tesharii Raeschen: - - bugfix: tickets clientlogout null - - bugfix: rig parts severe hard del - - bugfix: protean rig hard dels - - bugfix: fixed a few more tgui runtimes - - bugfix: fixed bigdragon runtime - - bugfix: fixed runechat runtime - - bugfix: explotable info runtime on obj (usually implants) - - bugfix: belly reagent massive runtime - - bugfix: cryopod runtime on mobs without mind datums - - bugfix: TTS runtime - - bugfix: couple of TGUI runtimes (send_full_update, pen - - bugfix: obj/belly runtime on cryo - - refactor: tweaked client Del -> Destroy behavior + - bugfix: tickets clientlogout null + - bugfix: rig parts severe hard del + - bugfix: protean rig hard dels + - bugfix: fixed a few more tgui runtimes + - bugfix: fixed bigdragon runtime + - bugfix: fixed runechat runtime + - bugfix: explotable info runtime on obj (usually implants) + - bugfix: belly reagent massive runtime + - bugfix: cryopod runtime on mobs without mind datums + - bugfix: TTS runtime + - bugfix: couple of TGUI runtimes (send_full_update, pen + - bugfix: obj/belly runtime on cryo + - refactor: tweaked client Del -> Destroy behavior Upstream: - - bugfix: Fixed a few number inputs to allow floats on the sensor-, helm- and engine - console. + - bugfix: + Fixed a few number inputs to allow floats on the sensor-, helm- and engine + console. 2024-03-05: ItsSelis: - - rscdel: Disables some non-essential sounds that would have played on april 1st. + - rscdel: Disables some non-essential sounds that would have played on april 1st. 2024-03-07: Raeschen: - - bugfix: various reversions and touchups + - bugfix: various reversions and touchups Verkister: - - bugfix: Fixed voremobs not eating pounced mobs. + - bugfix: Fixed voremobs not eating pounced mobs. 2024-03-08: Kashargul: - - bugfix: fixed an exploit to reform outside of a belly - - bugfix: ooc panel style button showing for others than oneself + - bugfix: fixed an exploit to reform outside of a belly + - bugfix: ooc panel style button showing for others than oneself cadyn: - - balance: nerf the shit out of cyanide + - balance: nerf the shit out of cyanide 2024-03-09: Raeschen: - - bugfix: fixed shuttles not having roofs - - bugfix: runtimes - - bugfix: fixed ascending through floors + - bugfix: fixed shuttles not having roofs + - bugfix: runtimes + - bugfix: fixed ascending through floors cadyn: - - code_imp: recursive listening now is a component + - code_imp: recursive listening now is a component 2024-03-10: ItsSelis: - - rscadd: VSCode will now show a warning prompt if trying to push a commit to the - master branch. + - rscadd: + VSCode will now show a warning prompt if trying to push a commit to the + master branch. 2024-03-11: ItsSelis: - - code_imp: A warning will now be shown that the byond version is outdated if trying - to compile the 515 code with 514. + - code_imp: + A warning will now be shown that the byond version is outdated if trying + to compile the 515 code with 514. Missile597: - - rscadd: Added a light replacer in the engineering tools area so you don't have - to run all the way to the carrier to fix lights easier anymore - - qol: Swapped the solar crate and radiation crate around in engineering storage - so the lead is easier to get to. Cause let's be honest, the solar crate is less - often used and a pain to move out of the way every round - - qol: Swapped the CO2 and Phoron canister start locations around in the carrier - R-UST, to make the locations closer to where they're supposed to be and so _certain_ - engineers don't go blowing up the R-UST with phoron in the hot loop + - rscadd: + Added a light replacer in the engineering tools area so you don't have + to run all the way to the carrier to fix lights easier anymore + - qol: + Swapped the solar crate and radiation crate around in engineering storage + so the lead is easier to get to. Cause let's be honest, the solar crate is less + often used and a pain to move out of the way every round + - qol: + Swapped the CO2 and Phoron canister start locations around in the carrier + R-UST, to make the locations closer to where they're supposed to be and so _certain_ + engineers don't go blowing up the R-UST with phoron in the hot loop Raeschen: - - bugfix: Organ/limb removal on explosion runtime - - bugfix: infinite EMP mine recursion - - bugfix: holodeck, shootspeed and toggle_active target runtime + - bugfix: Organ/limb removal on explosion runtime + - bugfix: infinite EMP mine recursion + - bugfix: holodeck, shootspeed and toggle_active target runtime 2024-03-12: Aroliacue: - - rscadd: Added Viper Combat Armor, a low-tier fluff armor based on Viper Armor - from XCOM 2. - - rscadd: Added new 'Breasts' markings. Same shape as the standard human ones we - already have, but with minor thickness on the side sprites too. Comes in three - variants - Standard, Smooth and Reptile. - - rscadd: The Naga Alt 3-colour striped taur tail now has a vore sprite. - - bugfix: Repathed Naga Alt 3-colour tailsprites, ensuring they'll work with all - Naga suits. - - image: Added Viper Combat Armor and Breasts sprites. + - rscadd: + Added Viper Combat Armor, a low-tier fluff armor based on Viper Armor + from XCOM 2. + - rscadd: + Added new 'Breasts' markings. Same shape as the standard human ones we + already have, but with minor thickness on the side sprites too. Comes in three + variants - Standard, Smooth and Reptile. + - rscadd: The Naga Alt 3-colour striped taur tail now has a vore sprite. + - bugfix: + Repathed Naga Alt 3-colour tailsprites, ensuring they'll work with all + Naga suits. + - image: Added Viper Combat Armor and Breasts sprites. Kashargul: - - bugfix: icons duplicating in the vorepanel + - bugfix: icons duplicating in the vorepanel Raeschen: - - qol: Blacklist radio channels from ghost-radio (Entertainment, bodycams) - - bugfix: fixed errant red pixels on sergals, visible with digilegs + - qol: Blacklist radio channels from ghost-radio (Entertainment, bodycams) + - bugfix: fixed errant red pixels on sergals, visible with digilegs theXDkidoflol: - - image: New moth wing types + - image: New moth wing types 2024-03-13: Aroliacue: - - image: Fixed Viper Suit sprite being off-center by one pixel. - - image: Fixed a bunch of Snake Alt Suitsprites not being displayed properly. + - image: Fixed Viper Suit sprite being off-center by one pixel. + - image: Fixed a bunch of Snake Alt Suitsprites not being displayed properly. ItsSelis: - - rscadd: Added stack_end_detector to the master controller - - rscadd: Added warning how many times a specific subsystem had slept - - rscadd: Linter will now show an error if the subsystem ignite proc is overridden - - qol: Changed seed generation - - admin: Check Player Attack/Dialog logs, Gib, Resize and Cryo player are now using - tgui_input_list's - - qol: A few global vars are now properly managed - - admin: The loaded whitelists can be now edited in-game (so that players can be - whitelisted before the round has to be restarted) + - rscadd: Added stack_end_detector to the master controller + - rscadd: Added warning how many times a specific subsystem had slept + - rscadd: Linter will now show an error if the subsystem ignite proc is overridden + - qol: Changed seed generation + - admin: + Check Player Attack/Dialog logs, Gib, Resize and Cryo player are now using + tgui_input_list's + - qol: A few global vars are now properly managed + - admin: + The loaded whitelists can be now edited in-game (so that players can be + whitelisted before the round has to be restarted) TheCaramelion: - - bugfix: Stunned effect allowing you to move + - bugfix: Stunned effect allowing you to move cadyn: - - bugfix: fix icons + - bugfix: fix icons 2024-03-14: Aroliacue: - - balance: Field Medics no longer have pilot, chemistry or surgery access by default. + - balance: Field Medics no longer have pilot, chemistry or surgery access by default. 2024-03-15: Kashargul: - - bugfix: readds the updated inputs to the right click verbs again (one limitation, - on self will always open the tgui selection) + - bugfix: + readds the updated inputs to the right click verbs again (one limitation, + on self will always open the tgui selection) Raeschen: - - bugfix: fixed a runtime in soundloop - - bugfix: Fixes a runtime and makes chat tags (OOC, LOOC, ect) use a cache properly. - - bugfix: Job restriction bypass at roundstart - - bugfix: fix a cabling mistake in hangar 2 + - bugfix: fixed a runtime in soundloop + - bugfix: Fixes a runtime and makes chat tags (OOC, LOOC, ect) use a cache properly. + - bugfix: Job restriction bypass at roundstart + - bugfix: fix a cabling mistake in hangar 2 TheCaramelion: - - balance: Modified Ion Storm requirements to be more common + - balance: Modified Ion Storm requirements to be more common cadyn: - - rscadd: Nanomap now renders non-tile objects + - rscadd: Nanomap now renders non-tile objects 2024-03-16: Raeschen: - - rscadd: RLOOC tagging/class + - rscadd: RLOOC tagging/class ReoDaProtovali: - - qol: Makes throw notifications only appear if your pref says yes - - rscadd: Added more emotes to synx - - rscadd: Added wawa to the wawa-ers + - qol: Makes throw notifications only appear if your pref says yes + - rscadd: Added more emotes to synx + - rscadd: Added wawa to the wawa-ers TheCaramelion: - - bugfix: Broken canisters staying attached to the port - - bugfix: Being able to attach broken canisters to ports - - rscadd: Balloon Alerts - - rscadd: Brand Intelligence machines use Ballon Alerts to speak - - rscadd: Balloon Alerts for surgery steps, taste and transferring reagents + - bugfix: Broken canisters staying attached to the port + - bugfix: Being able to attach broken canisters to ports + - rscadd: Balloon Alerts + - rscadd: Brand Intelligence machines use Ballon Alerts to speak + - rscadd: Balloon Alerts for surgery steps, taste and transferring reagents 2024-03-17: Kashargul: - - bugfix: fixes an issue where the vorebelly contents did not collapse to a list - as supposed to for more than 21 ingested items - - bugfix: fixes the assets on the chemSynthesizer being not properly initialized - - bugfix: fixes ntos icon direct loading on crew monitor - - bugfix: finally should resolve all our ntos icon cases + - bugfix: + fixes an issue where the vorebelly contents did not collapse to a list + as supposed to for more than 21 ingested items + - bugfix: fixes the assets on the chemSynthesizer being not properly initialized + - bugfix: fixes ntos icon direct loading on crew monitor + - bugfix: finally should resolve all our ntos icon cases Raeschen: - - rscadd: Allow digitigrade legs for shadekin - - bugfix: nuke bad .procs in callbacks + - rscadd: Allow digitigrade legs for shadekin + - bugfix: nuke bad .procs in callbacks TheCaramelion: - - balance: Adds the taste back to normal chat - - bugfix: Fulton beacons won't be sent to CentCom + - balance: Adds the taste back to normal chat + - bugfix: Fulton beacons won't be sent to CentCom 2024-03-18: Kashargul: - - admin: adds an new verb that allows to use tgui inputs on some existing verbs - - bugfix: fixed and issue that prevents pulling objects through stairs + - admin: adds an new verb that allows to use tgui inputs on some existing verbs + - bugfix: fixed and issue that prevents pulling objects through stairs Raeschen: - - bugfix: fixed a couple runtimes related to bellies - - bugfix: chemmaster runtime + - bugfix: fixed a couple runtimes related to bellies + - bugfix: chemmaster runtime 2024-03-19: Kashargul: - - bugfix: fixes an issue where closing the prompt clears the ooc note section (favs - / maybes) + - bugfix: + fixes an issue where closing the prompt clears the ooc note section (favs + / maybes) Raeschen: - - bugfix: fixed upsidedown cargo console + - bugfix: fixed upsidedown cargo console 2024-03-20: Raeschen: - - refactor: Remove obj/machinery recursivemove placement + signal registration as - a default, instead an optional + - refactor: + Remove obj/machinery recursivemove placement + signal registration as + a default, instead an optional cadyn: - - rscadd: movement smoothing - - config: 40fps time + - rscadd: movement smoothing + - config: 40fps time 2024-03-22: Kashargul: - - code_imp: converts some more bicons into icon2html - - rscdel: tgui_ch + - code_imp: converts some more bicons into icon2html + - rscdel: tgui_ch TheCaramelion: - - rscadd: Use a vial on mucus to take virus samples - - balance: Stepping or interacting with mucus/blood/vomit might infect you, if it - has viruses - - qol: Autoinjectors can now be picked up with the chemistry bag - - bugfix: Runtime when Infected Room event triggered - - bugfix: Phased shadekins being able to be attacked - - bugfix: Bump should ignore phased shadekins now - - bugfix: Smoke won't make creatures without lungs cough + - rscadd: Use a vial on mucus to take virus samples + - balance: + Stepping or interacting with mucus/blood/vomit might infect you, if it + has viruses + - qol: Autoinjectors can now be picked up with the chemistry bag + - bugfix: Runtime when Infected Room event triggered + - bugfix: Phased shadekins being able to be attacked + - bugfix: Bump should ignore phased shadekins now + - bugfix: Smoke won't make creatures without lungs cough tacoguy7765093: - - balance: Non-CE blueprint charges buffed from 10 -> 25 + - balance: Non-CE blueprint charges buffed from 10 -> 25 2024-03-23: Missile597: - - bugfix: fixed stinky invalid direction argument on a wire causing tcomms to not - be connected to the power grid. I love dir :) + - bugfix: + fixed stinky invalid direction argument on a wire causing tcomms to not + be connected to the power grid. I love dir :) ReoDaProtovali: - - rscadd: Teppi speak Teppi again + - rscadd: Teppi speak Teppi again TheCaramelion: - - bugfix: Phased kins won't stop people from moving + - bugfix: Phased kins won't stop people from moving 2024-03-24: ItsSelis: - - qol: Updated styling for admin ooc announcements (Special Verbs > Announce). + - qol: Updated styling for admin ooc announcements (Special Verbs > Announce). Kashargul: - - bugfix: fixes a wrong glass type given out on a quick selection on the RSF - - bugfix: adminjump + - bugfix: fixes a wrong glass type given out on a quick selection on the RSF + - bugfix: adminjump Raeschen: - - bugfix: Black tiles at CC - - rscdel: Revert combat refactor magazine sizes - - rscadd: '''turfpacks'' system for mappers' + - bugfix: Black tiles at CC + - rscdel: Revert combat refactor magazine sizes + - rscadd: "'turfpacks' system for mappers" ReoDaProtovali: - - bugfix: Fixed Micros getting stuck in disposal bins without making every other - object you try to put in disposal bins explode + - bugfix: + Fixed Micros getting stuck in disposal bins without making every other + object you try to put in disposal bins explode TheCaramelion: - - bugfix: Borg pounce changed to stun + - bugfix: Borg pounce changed to stun 2024-03-25: Kashargul: - - code_imp: reduces logging - - bugfix: dark_maws now dispel properly and have their references cleared - - bugfix: dark_maw can no longer be used without costing energy + - code_imp: reduces logging + - bugfix: dark_maws now dispel properly and have their references cleared + - bugfix: dark_maw can no longer be used without costing energy Raeschen: - - rscadd: Ghost-follow glides with the target + - rscadd: Ghost-follow glides with the target cadyn: - - rscadd: TGPanel (cred Selis for port) + - rscadd: TGPanel (cred Selis for port) 2024-03-26: Kashargul: - - bugfix: mecha turret targeting + - bugfix: mecha turret targeting Raeschen: - - bugfix: pulsar runtime - - bugfix: attempt to fix some ref sources in mob/living and mob/observer/eye - - bugfix: broodspiders hard del + - bugfix: pulsar runtime + - bugfix: attempt to fix some ref sources in mob/living and mob/observer/eye + - bugfix: broodspiders hard del cadyn: - - refactor: refactored orbit code to be less horrible - - bugfix: protean powers not showing up when blob form + - refactor: refactored orbit code to be less horrible + - bugfix: protean powers not showing up when blob form 2024-03-28: Kashargul: - - bugfix: a lot of non rendered icons, especially atmos icons. - - bugfix: changing force south to living only due to multiple issues - - bugfix: misc panel updating every tick - - bugfix: shadekin simple_mob button texts not respecting energy - - bugfix: wrong pathing in tgfont, thanks to @cadyn for pointing it out - - bugfix: borg chat icons - - rscdel: dangerous calls inside the statpanel + - bugfix: a lot of non rendered icons, especially atmos icons. + - bugfix: changing force south to living only due to multiple issues + - bugfix: misc panel updating every tick + - bugfix: shadekin simple_mob button texts not respecting energy + - bugfix: wrong pathing in tgfont, thanks to @cadyn for pointing it out + - bugfix: borg chat icons + - rscdel: dangerous calls inside the statpanel TheCaramelion: - - rscadd: Re-Enabled Aurora Caelus and Space Dust event - - rscadd: Two new Ion Laws - - rscdel: Commented out a weird ion law + - rscadd: Re-Enabled Aurora Caelus and Space Dust event + - rscadd: Two new Ion Laws + - rscdel: Commented out a weird ion law TheGreatKitsune: - - rscadd: Catslug is now an option on the basic metamorph raygun + - rscadd: Catslug is now an option on the basic metamorph raygun Virgo113: - - sound: New jukebox song + - sound: New jukebox song cadyn: - - bugfix: asset issues that broke chat tags - - code_imp: play_sound and porta_turret optimizations + - bugfix: asset issues that broke chat tags + - code_imp: play_sound and porta_turret optimizations 2024-03-29: Kashargul: - - bugfix: missing target in a balloon alert - - bugfix: some mecha runtimes - - rscadd: adds the ability to customize the "encase in egg" egg size between 25 - and 200% or keep it at 0 for automatic calculation from 25 to 100% + - bugfix: missing target in a balloon alert + - bugfix: some mecha runtimes + - rscadd: + adds the ability to customize the "encase in egg" egg size between 25 + and 200% or keep it at 0 for automatic calculation from 25 to 100% Raeschen: - - rscadd: Added *clap sound - - rscadd: Added huuuaaaa + - rscadd: Added *clap sound + - rscadd: Added huuuaaaa tacoguy7765093: - - rscadd: Added VR spawnpoint for a VR mall. - - rscdel: Removed space POI section in VR construct + - rscadd: Added VR spawnpoint for a VR mall. + - rscdel: Removed space POI section in VR construct 2024-03-30: ItsSelis: - - qol: Subsystems return a status value after initializing - - rscadd: Added verb manager subsystem - - rscadd: Added speech controller subsystem - - qol: Topics to deleted things get discarded + - qol: Subsystems return a status value after initializing + - rscadd: Added verb manager subsystem + - rscadd: Added speech controller subsystem + - qol: Topics to deleted things get discarded Kashargul: - - bugfix: addition for our code to ensure AI prefs are synced between shells and - bellies loaded on first deploy + - bugfix: + addition for our code to ensure AI prefs are synced between shells and + bellies loaded on first deploy Raeschen: - - bugfix: statpanel runtimes - - bugfix: mob holder runtime + - bugfix: statpanel runtimes + - bugfix: mob holder runtime 2024-03-31: ItsSelis: - - admin: The stats of Verb Manager and Speech Controller now show inside of the - MC tab. + - admin: + The stats of Verb Manager and Speech Controller now show inside of the + MC tab. diff --git a/html/changelogs_ch/archive/2024-04.yml b/html/changelogs_ch/archive/2024-04.yml index a8bf66595e..8d3fe4710b 100644 --- a/html/changelogs_ch/archive/2024-04.yml +++ b/html/changelogs_ch/archive/2024-04.yml @@ -1,355 +1,411 @@ 2024-04-01: Aroliacue: - - rscadd: Pilots and Field Medics now have full explorer access. + - rscadd: Pilots and Field Medics now have full explorer access. Kashargul: - - bugfix: default language selection verb and upgrades it to tgui input list - - bugfix: resetting robot language to galcom should now work properly with the set - default language verb on cancel - - bugfix: newscaster news icons not loading + - bugfix: default language selection verb and upgrades it to tgui input list + - bugfix: + resetting robot language to galcom should now work properly with the set + default language verb on cancel + - bugfix: newscaster news icons not loading cadyn: - - rscadd: humanoid simple mobs now (mostly) have pathfinding - - refactor: port citRP pathfinding for AI - - refactor: various optimizations for AI - - refactor: visible_message now uses component instead of in_view + - rscadd: humanoid simple mobs now (mostly) have pathfinding + - refactor: port citRP pathfinding for AI + - refactor: various optimizations for AI + - refactor: visible_message now uses component instead of in_view tacoguy7765093: - - rscadd: The trash eat verb now gives a more ambiguous message instead of 'swallowing' - regardless of vorgan. + - rscadd: + The trash eat verb now gives a more ambiguous message instead of 'swallowing' + regardless of vorgan. 2024-04-02: ReoDaProtovali: - - rscadd: Added synth emotes to corrupt hounds and subtypes. *roboboop - - rscadd: Added a maw belly to leopardmanders that autotransfers to their gut. Dunno - what made me do that (especially since it ended up being a lot of trouble to - get working properly) - - rscadd: Added a whole new AI to swoopies based on nurse spiders looking for items - to wrap. Right click an AI controlled swoopie and choose the "Change Settings" - verb to tell the swoopie to swoop stuff! - - rscadd: Added wrappers dropping in vorebellies if you eat and digest the whole - food item. - - rscadd: Added bones to merc and other humanoid corpses. (leave remains pref is - now enabled for them!) - - qol: Made vac-packs not ask if you want to set the destination to borg belly if - you're not a borg - - bugfix: Fixed throwing mobs into disposal bins. For some reason it was implemented - but in a very shitty way that only checked for micro holders. It should work - properly. No autoflush :( - - image: added the secondary belly layer to the original set of vore bellies. Somehow - we missed those and virgo had them. Now we should both have them! + - rscadd: Added synth emotes to corrupt hounds and subtypes. *roboboop + - rscadd: + Added a maw belly to leopardmanders that autotransfers to their gut. Dunno + what made me do that (especially since it ended up being a lot of trouble to + get working properly) + - rscadd: + Added a whole new AI to swoopies based on nurse spiders looking for items + to wrap. Right click an AI controlled swoopie and choose the "Change Settings" + verb to tell the swoopie to swoop stuff! + - rscadd: + Added wrappers dropping in vorebellies if you eat and digest the whole + food item. + - rscadd: + Added bones to merc and other humanoid corpses. (leave remains pref is + now enabled for them!) + - qol: + Made vac-packs not ask if you want to set the destination to borg belly if + you're not a borg + - bugfix: + Fixed throwing mobs into disposal bins. For some reason it was implemented + but in a very shitty way that only checked for micro holders. It should work + properly. No autoflush :( + - image: + added the secondary belly layer to the original set of vore bellies. Somehow + we missed those and virgo had them. Now we should both have them! 2024-04-03: Kashargul: - - bugfix: some hairstyles not showing - - bugfix: new meka borg sprite not usable - - code_imp: cleanup some borg code + - bugfix: some hairstyles not showing + - bugfix: new meka borg sprite not usable + - code_imp: cleanup some borg code TheCaramelion: - - bugfix: Shields diffusers will actually work when meteors happen + - bugfix: Shields diffusers will actually work when meteors happen cadyn: - - rscadd: hlscream - - rscadd: hlpain emote + - rscadd: hlscream + - rscadd: hlpain emote 2024-04-04: Kashargul: - - bugfix: fixes pain shouts on max health changes + - bugfix: fixes pain shouts on max health changes Raeschen: - - rscadd: Speech sounds now penetrate walls + - rscadd: Speech sounds now penetrate walls TheCaramelion: - - bugfix: Diffusers on point defenses won't turn off when meteors happen + - bugfix: Diffusers on point defenses won't turn off when meteors happen 2024-04-05: Ace: - - qol: Made Biohazard levels actually tell you what they are. + - qol: Made Biohazard levels actually tell you what they are. Drulikar: - - rscdel: Remove the corrupt lonehome map - - bugfix: UpdatePaths script will now also update maps inside the modular_chomp - folder + - rscdel: Remove the corrupt lonehome map + - bugfix: + UpdatePaths script will now also update maps inside the modular_chomp + folder FluffMedic: - - rscadd: Southern Cross has new maints on floor 3 and 2. Viro, genetics and autorelseeving - are now upon floor 1 - - rscadd: New turf to the valley - - rscadd: Two wands and one staff - - balance: Alters several POIs to have the new staff/wands instead of spellbooks + - rscadd: + Southern Cross has new maints on floor 3 and 2. Viro, genetics and autorelseeving + are now upon floor 1 + - rscadd: New turf to the valley + - rscadd: Two wands and one staff + - balance: Alters several POIs to have the new staff/wands instead of spellbooks Kashargul: - - bugfix: Telecomms filters can be added through the multitool menu - - bugfix: admin maps showing on mapview (overmap is no longer considered for mapview) - - bugfix: omni_filter and omni_mixer showing too high flow values + - bugfix: Telecomms filters can be added through the multitool menu + - bugfix: admin maps showing on mapview (overmap is no longer considered for mapview) + - bugfix: omni_filter and omni_mixer showing too high flow values Raeschen: - - bugfix: fix runtime in grass grass_type/animal_type spawning - - bugfix: fix decl emote check failiure - - bugfix: deck 3, 2.7k tiles + bad solars + - bugfix: fix runtime in grass grass_type/animal_type spawning + - bugfix: fix decl emote check failiure + - bugfix: deck 3, 2.7k tiles + bad solars ReoDaProtovali: - - rscadd: Properly implemented clear gas masks - - rscadd: Readded the original gasmask icon - - rscadd: added both clear and not clear gasmasks to loadout for 3 points. Happy - tiding! - - rscadd: replaced the normal gas masks in biohazard lockers with clear ones - - rscadd: secretly adds on-mob icons for mouth-held grenades for teshari because - I was bored - - rscdel: Removed the `obj/item/clothing/mask/gas/wwii` subtype of the mask since - the base subtype fills it's role. - - qol: Makes greytide AI carbon mobs have a bit more variation. - - image: Added all of the mob_vr_mask.dmi and associated species files to the modularity - folder - - code_imp: Removed the check for base gas masks to remove their face-consealing - abilities because they're no longer clear. Subtypes that are clear can now just - use the /clear subtype since it's properly in now + - rscadd: Properly implemented clear gas masks + - rscadd: Readded the original gasmask icon + - rscadd: + added both clear and not clear gasmasks to loadout for 3 points. Happy + tiding! + - rscadd: replaced the normal gas masks in biohazard lockers with clear ones + - rscadd: + secretly adds on-mob icons for mouth-held grenades for teshari because + I was bored + - rscdel: + Removed the `obj/item/clothing/mask/gas/wwii` subtype of the mask since + the base subtype fills it's role. + - qol: Makes greytide AI carbon mobs have a bit more variation. + - image: + Added all of the mob_vr_mask.dmi and associated species files to the modularity + folder + - code_imp: + Removed the check for base gas masks to remove their face-consealing + abilities because they're no longer clear. Subtypes that are clear can now just + use the /clear subtype since it's properly in now 2024-04-06: FluffMedic: - - bugfix: virolgy door - - bugfix: runtime with new valley grass + - bugfix: virolgy door + - bugfix: runtime with new valley grass Fracshun: - - bugfix: Sentient food items can no longer astral project if they struggle - - bugfix: Sentient items now despawn correctly when leaving through cryo/gateway + - bugfix: Sentient food items can no longer astral project if they struggle + - bugfix: Sentient items now despawn correctly when leaving through cryo/gateway ItsSelis: - - refactor: Replaced the old configuration with the configuration controller. - - admin: Added "Reload Configuration" button to Debug tab (requires DEBUG permission), - to reload config from files. + - refactor: Replaced the old configuration with the configuration controller. + - admin: + Added "Reload Configuration" button to Debug tab (requires DEBUG permission), + to reload config from files. Kashargul: - - bugfix: solarmoth no longer flickers + - bugfix: solarmoth no longer flickers Raeschen: - - bugfix: fix solarpanel maxdist aswell - - bugfix: Increase solar tracker max range to locate a controller + - bugfix: fix solarpanel maxdist aswell + - bugfix: Increase solar tracker max range to locate a controller cadyn: - - refactor: borg access is actually checked for many things that weren't checking - before - - balance: no more drone pod borg full access - - balance: station borgs no longer have centcomm or syndi access - - balance: borgs can be targeted by turrets - - admin: add air_alarm access while ghosting - - server: updated nanomap renderer script. + - refactor: + borg access is actually checked for many things that weren't checking + before + - balance: no more drone pod borg full access + - balance: station borgs no longer have centcomm or syndi access + - balance: borgs can be targeted by turrets + - admin: add air_alarm access while ghosting + - server: updated nanomap renderer script. 2024-04-07: cadyn: - - bugfix: hopefully maybe fixes icon related crashes - - refactor: Overlay subsystem replaced with TG version + - bugfix: hopefully maybe fixes icon related crashes + - refactor: Overlay subsystem replaced with TG version 2024-04-08: FluffMedic: - - rscadd: Added camera and airlock controller to viro + - rscadd: Added camera and airlock controller to viro ItsSelis: - - rscdel: Removed some of the unused hooks. + - rscdel: Removed some of the unused hooks. Raeschen: - - admin: Reload job/alien whitelist buttons in admin tab + - admin: Reload job/alien whitelist buttons in admin tab 2024-04-09: Kashargul: - - bugfix: an issue with charging icons no longer working + - bugfix: an issue with charging icons no longer working Raeschen: - - rscadd: Check for client/key and remove on qdel of a ghost + - rscadd: Check for client/key and remove on qdel of a ghost tacoguy7765093: - - rscdel: Removed items being dropped when in a purple stun, Less butter fingers - when doing EVA! - - balance: '''Weaken'' status now allows you to use items. You still got a second - chance!' + - rscdel: + Removed items being dropped when in a purple stun, Less butter fingers + when doing EVA! + - balance: + "'Weaken' status now allows you to use items. You still got a second + chance!" 2024-04-10: Fracshun: - - bugfix: Mice rays drop on the floor properly when shooting yourself + - bugfix: Mice rays drop on the floor properly when shooting yourself Raeschen: - - bugfix: Alongside say/whisper, emote/narrate voice-sounds now penetrate walls. - - bugfix: Mobkin selection bug in VR - - balance: Reduce dive speed increase - - balance: Aquatic now works the same on deep and shallow water (No speed penalty) + - bugfix: Alongside say/whisper, emote/narrate voice-sounds now penetrate walls. + - bugfix: Mobkin selection bug in VR + - balance: Reduce dive speed increase + - balance: Aquatic now works the same on deep and shallow water (No speed penalty) 2024-04-11: Kashargul: - - bugfix: Crisis W0RM borg being shown as surgical - - bugfix: removes the double definition of the service W0RM borg + - bugfix: Crisis W0RM borg being shown as surgical + - bugfix: removes the double definition of the service W0RM borg cadyn: - - bugfix: visible_messages pass to atoms in contents of other atoms correctly - - bugfix: visible_messages check visibility now - - code_imp: moved hearable.dm to components folder and renamed it to hearer.dm to - avoid conniptions - - refactor: fuck the stupid limb icon cache get out of here + - bugfix: visible_messages pass to atoms in contents of other atoms correctly + - bugfix: visible_messages check visibility now + - code_imp: + moved hearable.dm to components folder and renamed it to hearer.dm to + avoid conniptions + - refactor: fuck the stupid limb icon cache get out of here 2024-04-12: Raeschen: - - bugfix: fixed taj veils being low on layer being hidden by eyes - - bugfix: fixed a couple bad config multipliers - - bugfix: fixed PDA choice not working due to New --> Initialise change + - bugfix: fixed taj veils being low on layer being hidden by eyes + - bugfix: fixed a couple bad config multipliers + - bugfix: fixed PDA choice not working due to New --> Initialise change cadyn: - - bugfix: fixed a couple runtimes that messed with integration tests - - bugfix: fixed sounds not reaching mobs inside of things - - code_imp: more harddel fixes + - bugfix: fixed a couple runtimes that messed with integration tests + - bugfix: fixed sounds not reaching mobs inside of things + - code_imp: more harddel fixes 2024-04-13: Kashargul: - - bugfix: unathi hairs - - rscadd: more unathi and screll hairs + - bugfix: unathi hairs + - rscadd: more unathi and screll hairs 2024-04-14: Kashargul: - - bugfix: broken unicode characters again... + - bugfix: broken unicode characters again... Upstream: - - bugfix: .swcrc now ignored by prettier - - bugfix: Fixed potential tgui dev server issue with windows - - qol: Updated tgui dependencies - - qol: Bumped yarn version to 4.1.1 - - qol: Bumped typescript to version 5.91.0 - - qol: Bumped Node version in dependencies file to (major) 20 + - bugfix: .swcrc now ignored by prettier + - bugfix: Fixed potential tgui dev server issue with windows + - qol: Updated tgui dependencies + - qol: Bumped yarn version to 4.1.1 + - qol: Bumped typescript to version 5.91.0 + - qol: Bumped Node version in dependencies file to (major) 20 2024-04-15: Kashargul: - - bugfix: autochangelog not working for maptweaks + - bugfix: autochangelog not working for maptweaks 2024-04-17: TheCaramelion: - - bugfix: Translocators will make sure everything is cool before sending you into - a stomach + - bugfix: + Translocators will make sure everything is cool before sending you into + a stomach 2024-04-20: CHOMPStation2: - - rscadd: Teshari Face Mask from chompstation - - rscadd: Facial protection to the mask, since it cant be removed - - bugfix: Fixed an old `to_chat` and also added framework for adding more face states - to the mask + - rscadd: Teshari Face Mask from chompstation + - rscadd: Facial protection to the mask, since it cant be removed + - bugfix: + Fixed an old `to_chat` and also added framework for adding more face states + to the mask Kashargul: - - bugfix: scrolling not working on tgui windows - - bugfix: too many chat messages pushed to archive on login mid round after leaving - - bugfix: a rare crash condition on the BodyRecords UI if there were no records - available - - bugfix: borg pounces properly disarm on successful hits again - - bugfix: vore mobs stun at min(weakened, 2) seconds to prevent instant interruptions - of vore attempts - - bugfix: multiple verb usages for speech setting instead of proc calls - - bugfix: mind_bound items can use /me now - - bugfix: trait selection oof hardfeet along with no scan and no defib - - rscadd: mind transfer preference - - code_imp: remove mind transfer whitelist, move to individual subtype allowance - bool + - bugfix: scrolling not working on tgui windows + - bugfix: too many chat messages pushed to archive on login mid round after leaving + - bugfix: + a rare crash condition on the BodyRecords UI if there were no records + available + - bugfix: borg pounces properly disarm on successful hits again + - bugfix: + vore mobs stun at min(weakened, 2) seconds to prevent instant interruptions + of vore attempts + - bugfix: multiple verb usages for speech setting instead of proc calls + - bugfix: mind_bound items can use /me now + - bugfix: trait selection oof hardfeet along with no scan and no defib + - rscadd: mind transfer preference + - code_imp: + remove mind transfer whitelist, move to individual subtype allowance + bool Raeschen: - - bugfix: Icon edit access violation crash fit attempt + - bugfix: Icon edit access violation crash fit attempt TheCaramelion: - - bugfix: Translocator not sending people into belly + - bugfix: Translocator not sending people into belly TheGreatKitsune: - - bugfix: removes a round removal method for drones - - bugfix: reverts an earlier change that prevented kin from being smelled during - phase + - bugfix: removes a round removal method for drones + - bugfix: + reverts an earlier change that prevented kin from being smelled during + phase cadyn: - - bugfix: temporarily disable server exploding submap - - rscadd: Add new marking Full Body Gloss (additive) - - bugfix: fix even more harddels woooo - - refactor: Steal TG's find_references() - - bugfix: Splash screen inconsistency - - maptweak: add splash screen to centcomm Z-level - - rscadd: new planetary lighting system + - bugfix: temporarily disable server exploding submap + - rscadd: Add new marking Full Body Gloss (additive) + - bugfix: fix even more harddels woooo + - refactor: Steal TG's find_references() + - bugfix: Splash screen inconsistency + - maptweak: add splash screen to centcomm Z-level + - rscadd: new planetary lighting system 2024-04-22: Kashargul: - - bugfix: sleevemate not longer usable with pref disabled + - bugfix: sleevemate not longer usable with pref disabled 2024-04-23: FluffMedic: - - maptweak: valley grass sprites are shifted to other sif turf sprites. + - maptweak: valley grass sprites are shifted to other sif turf sprites. Raeschen: - - bugfix: Lockers check for opened when finishing the weld to prevent insta-traps - - bugfix: Another cached icon edit removal + - bugfix: Lockers check for opened when finishing the weld to prevent insta-traps + - bugfix: Another cached icon edit removal TheCaramelion: - - qol: Shadekin Phase In/Out animation now adjusts to the shadekin's size - - bugfix: Thrown objects not passing though phased kins + - qol: Shadekin Phase In/Out animation now adjusts to the shadekin's size + - bugfix: Thrown objects not passing though phased kins Verkister: - - bugfix: Fixed empty hand interactions not working on non-rideable humanmobs with - forced buckling. + - bugfix: + Fixed empty hand interactions not working on non-rideable humanmobs with + forced buckling. cadyn: - - bugfix: lighting runtimes + - bugfix: lighting runtimes tacoguy7765093: - - rscdel: Removed VR respawn time - - bugfix: VR no longer will spawn duplicate PDAs flooding the PDA servers with fake - people. - - maptweak: VR new bar room added. - - bugfix: Adjustments to item staining with 'bloody' hands. + - rscdel: Removed VR respawn time + - bugfix: + VR no longer will spawn duplicate PDAs flooding the PDA servers with fake + people. + - maptweak: VR new bar room added. + - bugfix: Adjustments to item staining with 'bloody' hands. 2024-04-24: TheCaramelion: - - rscadd: Instrument case holster, only for instruments + - rscadd: Instrument case holster, only for instruments cadyn: - - rscadd: VR now uses the new sunlight system - - bugfix: various optimizations and fixes for sunlight + - rscadd: VR now uses the new sunlight system + - bugfix: various optimizations and fixes for sunlight tacoguy7765093: - - qol: Adjusted VR avatar loadouts - - maptweak: The VR stripmall has more decor. + - qol: Adjusted VR avatar loadouts + - maptweak: The VR stripmall has more decor. 2024-04-26: FluffMedic: - - bugfix: Security law of maints 3 overriding the lockdown system I keep forgetting - exists. - - bugfix: solars devouring shield useage by adding platting - - bugfix: fixed the disposals and the lack of antibody scanners - - rscadd: Added ore grubs and lizardmen to the random mining mob spawn pool + - bugfix: + Security law of maints 3 overriding the lockdown system I keep forgetting + exists. + - bugfix: solars devouring shield useage by adding platting + - bugfix: fixed the disposals and the lack of antibody scanners + - rscadd: Added ore grubs and lizardmen to the random mining mob spawn pool Missile597: - - rscadd: Added a reaction to change liquid fire to neo liquid fire (liquid fire, - sulfur and a small amount of phoron + catalyst) - - balance: Changed the reagents in cherry bomb to liquid fire instead of neo liquid - fire + - rscadd: + Added a reaction to change liquid fire to neo liquid fire (liquid fire, + sulfur and a small amount of phoron + catalyst) + - balance: + Changed the reagents in cherry bomb to liquid fire instead of neo liquid + fire Raeschen: - - bugfix: fixed many bad uses of the usr variable + - bugfix: fixed many bad uses of the usr variable TheCaramelion: - - qol: Tagged mail will show it's location. - - bugfix: Fixed tagger not changing the tag of an already tagged envelope - - bugfix: Meatyores shower will have the proper text when ending + - qol: Tagged mail will show it's location. + - bugfix: Fixed tagger not changing the tag of an already tagged envelope + - bugfix: Meatyores shower will have the proper text when ending cadyn: - - bugfix: more GC bullshit + - bugfix: more GC bullshit tacoguy7765093: - - bugfix: Fixed a bug involving making custom areas in VR which can delete you if - made. - - bugfix: Fixed certain firework stars from being able to change Sif's weather + - bugfix: + Fixed a bug involving making custom areas in VR which can delete you if + made. + - bugfix: Fixed certain firework stars from being able to change Sif's weather 2024-04-27: Missile597: - - rscadd: Added a colourmate to the shadekin hideout - - rscadd: Added air alarms to deck three maintenance areas that were missing them, - including drop nom spots - - rscadd: Added antibody scanners to the relocated virology that had previously - been missing - - rscadd: Adds a rusty old breaker to the rage cage for ease of electrifying the - arena. - - rscadd: Added diffusors to some of the deck 0 PD turrets that were missing them - to allow them to fire unobstructed - - rscadd: Added lockdown shutters back to virology - room scrungled a little smaller - to compensate for the space needed - - rscadd: Added lights to drop-nom spots so all consistent and able to see - - rscadd: Adds departmental lockdown shutters to drop nom maints areas for security - - rscadd: Adds another set of doors to medbay corridor to provide a buffer for medbay - in case the sci drop nom spot gets vented. Added an air alarm in the newly separated - area to compensate - - rscdel: Deleted a cable that mistakenly hotwired the command subgrid to mains - - rscdel: Deleted a mistakenly placed dorms sort junction placed near the bridge - in the walls - - bugfix: Fixed some missing atmos pipes on deck 3 - - bugfix: Fixed a disposal junction facing the wrong way in the outpost reactor - area - - bugfix: Fixed the port solars - They now have cable coils placed underneath and - work again - - bugfix: Fixed a broken airlock on deck 0 - - bugfix: Fixed a broken airlock on the trading ship shelter capsule - - bugfix: Fixed two sorting junctions having incorrect sorting tags, causing items - to be missing from the tagger list and causing the CMO tag to be broken - - bugfix: Moved the outpost reactor powernet sensor to be connected to the correct - grid (Was previously connected to an "empty" grid) - - bugfix: Fixed the engine room powernet not being correctly wired to the grid - - bugfix: Fixed the applied tag on partial taggers in cargo to apply the correct - tag - - bugfix: Fixed an unconnected ladder set in medical maints between deck 2 and 3 - - bugfix: Fixes broken cable prefabs being used in rage cage - - maptweak: Changed the wall on deck 0 big bedroom to be false as originally intended - - maptweak: Removed the hallway area status from plating outside deck 1 escape pods - to prevent vines and mucous from spawning there - - maptweak: Tweaked the Fore-Starboard solars to be matching and more in line with - the other new solar arrays, minus the start of shift wiring of course - - maptweak: Renamed the solar arrays to be more appropriately distinct (Aft-Starboard - etc) - - maptweak: Added plating the gaps on the solar arrays so the gaps don't get filled - with power wasting shields - - maptweak: Replaced a few reinforced walls on deck 0 with basic walls to allow - for easier locations for building projects in-round. Hazardous (eg space/elevator) - and secure (eg grav gen) areas remain encased in reinforced walls for obvious - reasons. - - maptweak: Added new areas for deck zero and re-assigned these areas to the deck - zero maints due to areas being doubled up, causing APC issues with some other - maints areas. Removed some excess APCs. - - maptweak: Slightly nudges the xenobotany gas vent to space to the side with its - diffuser, so that the diffuser doesn't leave a vulnerable gap in the shields - by the lab's window for meteors - - maptweak: Extended the viro disposal chute and ended it with an outlet and a diffuser - - to stop shields from blocking the disposal, and to control its direction of - exit. + - rscadd: Added a colourmate to the shadekin hideout + - rscadd: + Added air alarms to deck three maintenance areas that were missing them, + including drop nom spots + - rscadd: + Added antibody scanners to the relocated virology that had previously + been missing + - rscadd: + Adds a rusty old breaker to the rage cage for ease of electrifying the + arena. + - rscadd: + Added diffusors to some of the deck 0 PD turrets that were missing them + to allow them to fire unobstructed + - rscadd: + Added lockdown shutters back to virology - room scrungled a little smaller + to compensate for the space needed + - rscadd: Added lights to drop-nom spots so all consistent and able to see + - rscadd: Adds departmental lockdown shutters to drop nom maints areas for security + - rscadd: + Adds another set of doors to medbay corridor to provide a buffer for medbay + in case the sci drop nom spot gets vented. Added an air alarm in the newly separated + area to compensate + - rscdel: Deleted a cable that mistakenly hotwired the command subgrid to mains + - rscdel: + Deleted a mistakenly placed dorms sort junction placed near the bridge + in the walls + - bugfix: Fixed some missing atmos pipes on deck 3 + - bugfix: + Fixed a disposal junction facing the wrong way in the outpost reactor + area + - bugfix: + Fixed the port solars - They now have cable coils placed underneath and + work again + - bugfix: Fixed a broken airlock on deck 0 + - bugfix: Fixed a broken airlock on the trading ship shelter capsule + - bugfix: + Fixed two sorting junctions having incorrect sorting tags, causing items + to be missing from the tagger list and causing the CMO tag to be broken + - bugfix: + Moved the outpost reactor powernet sensor to be connected to the correct + grid (Was previously connected to an "empty" grid) + - bugfix: Fixed the engine room powernet not being correctly wired to the grid + - bugfix: + Fixed the applied tag on partial taggers in cargo to apply the correct + tag + - bugfix: Fixed an unconnected ladder set in medical maints between deck 2 and 3 + - bugfix: Fixes broken cable prefabs being used in rage cage + - maptweak: Changed the wall on deck 0 big bedroom to be false as originally intended + - maptweak: + Removed the hallway area status from plating outside deck 1 escape pods + to prevent vines and mucous from spawning there + - maptweak: + Tweaked the Fore-Starboard solars to be matching and more in line with + the other new solar arrays, minus the start of shift wiring of course + - maptweak: + Renamed the solar arrays to be more appropriately distinct (Aft-Starboard + etc) + - maptweak: + Added plating the gaps on the solar arrays so the gaps don't get filled + with power wasting shields + - maptweak: + Replaced a few reinforced walls on deck 0 with basic walls to allow + for easier locations for building projects in-round. Hazardous (eg space/elevator) + and secure (eg grav gen) areas remain encased in reinforced walls for obvious + reasons. + - maptweak: + Added new areas for deck zero and re-assigned these areas to the deck + zero maints due to areas being doubled up, causing APC issues with some other + maints areas. Removed some excess APCs. + - maptweak: + Slightly nudges the xenobotany gas vent to space to the side with its + diffuser, so that the diffuser doesn't leave a vulnerable gap in the shields + by the lab's window for meteors + - maptweak: + Extended the viro disposal chute and ended it with an outlet and a diffuser + - to stop shields from blocking the disposal, and to control its direction of + exit. cadyn: - - bugfix: lighting bullshit + - bugfix: lighting bullshit 2024-04-28: tacoguy7765093: - - bugfix: Attempting to fix a rare subsystem crash + - bugfix: Attempting to fix a rare subsystem crash 2024-04-30: FluffMedic: - - rscadd: 'Added admin spawn set of goggles that''s sole purpose is seeing kin (Rae: - commented out the meson/kin hybrid though)' - - balance: Makes it so the large kinetic weapons don't need wielding since that - code is appears broken and I doubt the two very rare items will become broken - if they get the kinetic blast effect. - - rscadd: Added a one life trait. Combination of no resleeve and no defib. + - rscadd: + "Added admin spawn set of goggles that's sole purpose is seeing kin (Rae: + commented out the meson/kin hybrid though)" + - balance: + Makes it so the large kinetic weapons don't need wielding since that + code is appears broken and I doubt the two very rare items will become broken + if they get the kinetic blast effect. + - rscadd: Added a one life trait. Combination of no resleeve and no defib. Verkister: - - bugfix: Belly-linked vac-pack dirt nutrition gain now scales with target vorgan's - gain setting. + - bugfix: + Belly-linked vac-pack dirt nutrition gain now scales with target vorgan's + gain setting. cadyn: - - refactor: memory optimizations for lighting system - - bugfix: gc agony + - refactor: memory optimizations for lighting system + - bugfix: gc agony tacoguy7765093: - - code_imp: '''hud_enabled'' variable for guns actually works now!' + - code_imp: "'hud_enabled' variable for guns actually works now!" diff --git a/html/changelogs_ch/archive/2024-05.yml b/html/changelogs_ch/archive/2024-05.yml index a59dd09de5..dc3b874788 100644 --- a/html/changelogs_ch/archive/2024-05.yml +++ b/html/changelogs_ch/archive/2024-05.yml @@ -1,133 +1,141 @@ 2024-05-02: cadyn: - - refactor: murder the lists + - refactor: murder the lists 2024-05-03: cadyn: - - server: default for rad resistance is back to being divide + - server: default for rad resistance is back to being divide 2024-05-05: cadyn: - - refactor: shandlers do two initial runs during RUNLEVEL_LOBBY - - bugfix: sunlight in VR + - refactor: shandlers do two initial runs during RUNLEVEL_LOBBY + - bugfix: sunlight in VR 2024-05-06: TheCaramelion: - - bugfix: Fixed circuitry detecting phased entities + - bugfix: Fixed circuitry detecting phased entities Upstream: - - admin: added 3 more admin spawn rubber duckies (grey, green and pink). - - admin: added a variable to rubber duckies called "honk text" that allows it to - put an audible message in chat when honked. - - rscadd: Adds drop vore to mob falling objects - - admin: Added new buildmode (DROP). Left click to drop objects safely, rightclick - to drop destructively. Not compatible with turfs. + - admin: added 3 more admin spawn rubber duckies (grey, green and pink). + - admin: + added a variable to rubber duckies called "honk text" that allows it to + put an audible message in chat when honked. + - rscadd: Adds drop vore to mob falling objects + - admin: + Added new buildmode (DROP). Left click to drop objects safely, rightclick + to drop destructively. Not compatible with turfs. Verkister: - - bugfix: Fixed empty hand interactions not working on borgs with forced buckling. + - bugfix: Fixed empty hand interactions not working on borgs with forced buckling. 2024-05-07: tacoguy7765093: - - bugfix: Superpose LoneHome not spawning - - maptweak: Mechfab ship access, plasteel given, 1 of 2 emags removed. - - maptweak: Mechfab ship cryopod now teleports you out of the round - - maptweak: Cultist ship power works now - - maptweak: Space Bar space POI airlock maptweaked - - maptweak: maptweaked the USSP that crashes the server - - bugfix: Downtown gateway slab IDs not opening doors - - maptweak: Thor Junker Shuttle extra engine console removed + - bugfix: Superpose LoneHome not spawning + - maptweak: Mechfab ship access, plasteel given, 1 of 2 emags removed. + - maptweak: Mechfab ship cryopod now teleports you out of the round + - maptweak: Cultist ship power works now + - maptweak: Space Bar space POI airlock maptweaked + - maptweak: maptweaked the USSP that crashes the server + - bugfix: Downtown gateway slab IDs not opening doors + - maptweak: Thor Junker Shuttle extra engine console removed 2024-05-10: Upstream: - - rscadd: Adds inhand sprites for rubber duckies - - rscadd: Added customizable fluff licenses + - rscadd: Adds inhand sprites for rubber duckies + - rscadd: Added customizable fluff licenses 2024-05-11: FluffMedic: - - qol: trash piles can be walked over + - qol: trash piles can be walked over 2024-05-13: FluffMedic: - - qol: Made the rad collectors engi access required instead of Chief engi + - qol: Made the rad collectors engi access required instead of Chief engi Irixue: - - rscadd: Colorable luna moth wings + - rscadd: Colorable luna moth wings MeepleMuncher: - - rscadd: Red, green, and purple dragon plushies. + - rscadd: Red, green, and purple dragon plushies. StrangeWeirdKitten: - - rscadd: Protean's rigsuit control will mimic assimilated rigsuits + - rscadd: Protean's rigsuit control will mimic assimilated rigsuits tacoguy7765093: - - bugfix: Known OM planets show up in helm now. - - maptweak: Stargazer modified for easier fuel canister swapping. - - sound: Planet arrival sound now plays for planets too. - - maptweak: VR ThirdLife bar dorms have bathrooms - - maptweak: Access changes in VR thirdlife bar - - sound: Removed the wailing souls from the Thirdlife bar - - qol: Vac-Pacs are now belt and back equippable. - - bugfix: Vap-Pac is less proper. Same with the generic headset. - - maptweak: Escape pods should actually allow people to enter them now. + - bugfix: Known OM planets show up in helm now. + - maptweak: Stargazer modified for easier fuel canister swapping. + - sound: Planet arrival sound now plays for planets too. + - maptweak: VR ThirdLife bar dorms have bathrooms + - maptweak: Access changes in VR thirdlife bar + - sound: Removed the wailing souls from the Thirdlife bar + - qol: Vac-Pacs are now belt and back equippable. + - bugfix: Vap-Pac is less proper. Same with the generic headset. + - maptweak: Escape pods should actually allow people to enter them now. 2024-05-14: Raeschen: - - balance: Size bracelets capped to 200 when emagging + - balance: Size bracelets capped to 200 when emagging 2024-05-15: FluffMedic: - - bugfix: dream slimes giving radioactive material instead of their intended - - bugfix: Nightmare slimes not killing you - - qol: Made nightmare slimes more forgiving - - bugfix: Removed some lines of obsolete code + - bugfix: dream slimes giving radioactive material instead of their intended + - bugfix: Nightmare slimes not killing you + - qol: Made nightmare slimes more forgiving + - bugfix: Removed some lines of obsolete code Raeschen: - - balance: Buff red-eye kin energy gain in dark from 0.1 to 0.5 - - balance: Buff orange-eye kin energy gain in dark from 0.25 to 0.5 + - balance: Buff red-eye kin energy gain in dark from 0.1 to 0.5 + - balance: Buff orange-eye kin energy gain in dark from 0.25 to 0.5 TheCaramelion: - - rscadd: Churros as a food item - - bugfix: Fixes ZAS debug overlays not properly overlaying over everything they - should - - code_imp: Some minor weirdness fixes to logic. - - qol: Makes gas overlays marginally less laggy by caching icons and using effects - instead of atoms to render - - code_imp: Turns get_zone_neighbors into a define - - rscadd: ATMOS_CANPASS_TURF + - rscadd: Churros as a food item + - bugfix: + Fixes ZAS debug overlays not properly overlaying over everything they + should + - code_imp: Some minor weirdness fixes to logic. + - qol: + Makes gas overlays marginally less laggy by caching icons and using effects + instead of atoms to render + - code_imp: Turns get_zone_neighbors into a define + - rscadd: ATMOS_CANPASS_TURF 2024-05-16: Kashargul: - - rscadd: cdn testserver script from tg - - qol: sorts our verbs - - bugfix: fixes ghostjump - - bugfix: fixes runtime in cmd_admin_z_narrate - - code_imp: Porting server maint subsystem from TG to remove nulls from important - lists - - rscadd: Ping to the panel + - rscadd: cdn testserver script from tg + - qol: sorts our verbs + - bugfix: fixes ghostjump + - bugfix: fixes runtime in cmd_admin_z_narrate + - code_imp: + Porting server maint subsystem from TG to remove nulls from important + lists + - rscadd: Ping to the panel ReoDaProtovali: - - rscadd: Unlock succubus bite + - rscadd: Unlock succubus bite TheCaramelion: - - bugfix: Gas overlays get removed when there's not enough gas - - bugfix: ZAS zones not separating properly when airlocks open/close + - bugfix: Gas overlays get removed when there's not enough gas + - bugfix: ZAS zones not separating properly when airlocks open/close cadyn: - - code_imp: adds proc profile_memory to be able to diagnose where memory is being - used - - bugfix: several memory optimizations - - bugfix: try to fix planetary lighting issues again + - code_imp: + adds proc profile_memory to be able to diagnose where memory is being + used + - bugfix: several memory optimizations + - bugfix: try to fix planetary lighting issues again 2024-05-17: FluffMedic: - - rscadd: The asteroid gateway now has a different and functioning portal puzzle. - Filled in some blank spaces a smidge. - - bugfix: Two eclipse sprites no longer go invisible in one direction. + - rscadd: + The asteroid gateway now has a different and functioning portal puzzle. + Filled in some blank spaces a smidge. + - bugfix: Two eclipse sprites no longer go invisible in one direction. SlaysInCode: - - rscadd: One SP-Pod. + - rscadd: One SP-Pod. Verkister: - - bugfix: Fixed reclaimed nutrition pile gains not scaling with absorbing vorgan's - nutrition percent settings. + - bugfix: + Fixed reclaimed nutrition pile gains not scaling with absorbing vorgan's + nutrition percent settings. 2024-05-18: Kashargul: - - bugfix: fixed an exploit to freely gain infinite supermatter sheets + - bugfix: fixed an exploit to freely gain infinite supermatter sheets 2024-05-19: MeepleMuncher: - - rscadd: 4 eastern dragon plushies - - rscadd: Dragon plushies to the vendor + - rscadd: 4 eastern dragon plushies + - rscadd: Dragon plushies to the vendor 2024-05-21: tacoguy7765093: - - maptweak: Crash fix in the DJ inn + - maptweak: Crash fix in the DJ inn 2024-05-22: FluffMedic: - - bugfix: laser staff used the wrong projectile path + - bugfix: laser staff used the wrong projectile path 2024-05-24: FluffMedic: - - bugfix: fixed medi-sci maints - - maptweak: some valley POIs are a smidge diffrent + - bugfix: fixed medi-sci maints + - maptweak: some valley POIs are a smidge diffrent tacoguy7765093: - - rscadd: Added a new latex marking for digi paws + - rscadd: Added a new latex marking for digi paws 2024-05-28: Verkister: - - bugfix: Fixed unathi size 1 bellysprites not working. + - bugfix: Fixed unathi size 1 bellysprites not working. 2024-05-30: TheCaramelion: - - bugfix: Fixed slug glue breaking agresive mobs AI + - bugfix: Fixed slug glue breaking agresive mobs AI diff --git a/html/changelogs_ch/archive/2024-06.yml b/html/changelogs_ch/archive/2024-06.yml index 4e31171508..f739532323 100644 --- a/html/changelogs_ch/archive/2024-06.yml +++ b/html/changelogs_ch/archive/2024-06.yml @@ -1,152 +1,166 @@ 2024-06-04: MeepleMuncher: - - rscadd: Added new bug bums + - rscadd: Added new bug bums SilencedMP5A5: - - rscadd: + marking (mole whiskers) - - rscadd: + marking (vulp lips) - - rscadd: + ears (protegen but with horns) ((horny protogen)) + - rscadd: + marking (mole whiskers) + - rscadd: + marking (vulp lips) + - rscadd: + ears (protegen but with horns) ((horny protogen)) TheCaramelion: - - rscadd: Infected room may pick blood or vomit as well - - balance: More species may get infected - - balance: Medical stays clean of viruses, as well as the engine room monitoring, - construction, gravgen and toxins test area - - rscadd: Holo-med projectors - - maptweak: Holo-med projectors in Medical/Virology + - rscadd: Infected room may pick blood or vomit as well + - balance: More species may get infected + - balance: + Medical stays clean of viruses, as well as the engine room monitoring, + construction, gravgen and toxins test area + - rscadd: Holo-med projectors + - maptweak: Holo-med projectors in Medical/Virology tacoguy7765093: - - maptweak: Sif shuttle landmarks will now never have POIs spawn on them. - - bugfix: Fixed a bug that didn't allow asteroid 1-3 to spawn in the OM - - maptweak: Swaps some airlocks in certain space POIs - - maptweak: Deck 3 escape pod access fixes + - maptweak: Sif shuttle landmarks will now never have POIs spawn on them. + - bugfix: Fixed a bug that didn't allow asteroid 1-3 to spawn in the OM + - maptweak: Swaps some airlocks in certain space POIs + - maptweak: Deck 3 escape pod access fixes 2024-06-05: Kashargul: - - bugfix: tf pref for transformite - - balance: lace masks are now small and allow drinking - - bugfix: an issue with charges not being correct - - rscadd: preference to select a belly rub target - - balance: lost and gravekeeper drones now have a small chance to unlock the scrambled - module by digesting mobs - - balance: lost and gravekeeper get access to an advanced self repair module when - digesting 5 mobs (stats are experimental and could change in the future) - - rscadd: advanced self repair module which can repair all modules, but only one - after another - - bugfix: autotransfer messages not showing on our auto transfer + - bugfix: tf pref for transformite + - balance: lace masks are now small and allow drinking + - bugfix: an issue with charges not being correct + - rscadd: preference to select a belly rub target + - balance: + lost and gravekeeper drones now have a small chance to unlock the scrambled + module by digesting mobs + - balance: + lost and gravekeeper get access to an advanced self repair module when + digesting 5 mobs (stats are experimental and could change in the future) + - rscadd: + advanced self repair module which can repair all modules, but only one + after another + - bugfix: autotransfer messages not showing on our auto transfer SilencedMP5A5: - - bugfix: smol modification to the extended draketaur halves, so now their hindpawbs - are visible + - bugfix: + smol modification to the extended draketaur halves, so now their hindpawbs + are visible SpringSkipper: - - balance: Dark Respite antibio improved - - bugfix: Infections no longer deathlock shadekin + - balance: Dark Respite antibio improved + - bugfix: Infections no longer deathlock shadekin 2024-06-07: Kashargul: - - rscadd: re-adds the station date and season to the Panel - - rscdel: nano ui - - code_imp: merge the casino code into upstream's enhanced version - - code_imp: casino_chip_exchanger -> chipmachine - - code_imp: casinoslave_handler -> casinosentientprize_handler + - rscadd: re-adds the station date and season to the Panel + - rscdel: nano ui + - code_imp: merge the casino code into upstream's enhanced version + - code_imp: casino_chip_exchanger -> chipmachine + - code_imp: casinoslave_handler -> casinosentientprize_handler tacoguy7765093: - - maptweak: The chapel POI for lost borgs now have lost borg access + - maptweak: The chapel POI for lost borgs now have lost borg access 2024-06-10: Fracshun: - - rscadd: Separated messages for auto-transfers versus struggle transfers - - qol: Disabling Entrance Logs also stops the pred from seeing auto-transfer messages - - bugfix: Fixed tasting things not directly entering a belly, such as in boxes or - held by others + - rscadd: Separated messages for auto-transfers versus struggle transfers + - qol: Disabling Entrance Logs also stops the pred from seeing auto-transfer messages + - bugfix: + Fixed tasting things not directly entering a belly, such as in boxes or + held by others Kashargul: - - bugfix: hides some verbs which shouldn't show on the panel - - code_imp: move the update_icon in xenoarch to Initialize as well + - bugfix: hides some verbs which shouldn't show on the panel + - code_imp: move the update_icon in xenoarch to Initialize as well 2024-06-12: FluffMedic: - - bugfix: snowfield's armory is no longer magically linked to SC's + - bugfix: snowfield's armory is no longer magically linked to SC's Kashargul: - - bugfix: belly reagent examine messaged relying to direct volume instead of percentage + - bugfix: belly reagent examine messaged relying to direct volume instead of percentage 2024-06-14: tacoguy7765093: - - bugfix: Reconstituting as a teshari xeno chimera should no longer break vore sprites. + - bugfix: Reconstituting as a teshari xeno chimera should no longer break vore sprites. 2024-06-15: FluffMedic: - - rscadd: Strange weather - - balance: Nif vendors have logs now. Sec can check them - - balance: Paradox gen requires to be wired like an emitter - - balance: Paradox gen requires 1/20th of the power now. Loot pool is adjusted + - rscadd: Strange weather + - balance: Nif vendors have logs now. Sec can check them + - balance: Paradox gen requires to be wired like an emitter + - balance: Paradox gen requires 1/20th of the power now. Loot pool is adjusted Kashargul: - - balance: Shadekin now drop all shrapnels, NIFs and most implants on phase shifting. - Size and Compliance implants are whitelisted from this. - - qol: linearizes the anomaly limit + - balance: + Shadekin now drop all shrapnels, NIFs and most implants on phase shifting. + Size and Compliance implants are whitelisted from this. + - qol: linearizes the anomaly limit Verkister: - - bugfix: Fixed synths not getting the verb to change eye color. + - bugfix: Fixed synths not getting the verb to change eye color. tacoguy7765093: - - balance: 75% reduction in blood loss from burns + - balance: 75% reduction in blood loss from burns theXDkidoflol: - - rscadd: Certain medications are now available as loadout items + - rscadd: Certain medications are now available as loadout items 2024-06-17: tacoguy7765093: - - bugfix: fixes blood cleaning on objects. + - bugfix: fixes blood cleaning on objects. 2024-06-18: MeepleMuncher: - - rscadd: plug tail big leggies + - rscadd: plug tail big leggies 2024-06-19: Missile597: - - maptweak: Moved and removed some vending machines in the dark which were unnecessary - or gave shadekin loot they shouldn't be using + - maptweak: + Moved and removed some vending machines in the dark which were unnecessary + or gave shadekin loot they shouldn't be using 2024-06-20: Kashargul: - - server: move the asset cache dir in the same way TG did + - server: move the asset cache dir in the same way TG did 2024-06-26: cadyn: - - rscadd: you can now transfer ammo between magazines and boxes of ammo - - rscadd: guns now tell you what magazines they accept - - refactor: ammo simplified drastically + - rscadd: you can now transfer ammo between magazines and boxes of ammo + - rscadd: guns now tell you what magazines they accept + - refactor: ammo simplified drastically 2024-06-28: CHOMPStation2: - - qol: made patches transfer their reagents straight into blood, so you can use - them for anything - - qol: refactored alcohol traits - - qol: expanded feedback when you drink from a glass + - qol: + made patches transfer their reagents straight into blood, so you can use + them for anything + - qol: refactored alcohol traits + - qol: expanded feedback when you drink from a glass FluffMedic: - - qol: Weaver is useable by all species - - qol: anom weathers are a smidge less spicy - - bugfix: missing weather names - - qol: ' Diona ar now the speed of lizards.' - - balance: Diona now have a value of 0.5 slowdown compared to their previous 5 + - qol: Weaver is useable by all species + - qol: anom weathers are a smidge less spicy + - bugfix: missing weather names + - qol: " Diona ar now the speed of lizards." + - balance: Diona now have a value of 0.5 slowdown compared to their previous 5 Kashargul: - - balance: halves pink slime brute / burn heal + - balance: halves pink slime brute / burn heal Raeschen: - - bugfix: Drop Overmap dynamic Z levels from 3 to 2 + - bugfix: Drop Overmap dynamic Z levels from 3 to 2 SpringSkipper: - - qol: digestion damage types can be set higher; the max total damage is still the - same. + - qol: + digestion damage types can be set higher; the max total damage is still the + same. chizzy376: - - rscadd: Added a new outsider pod "Dragon Cave" + - rscadd: Added a new outsider pod "Dragon Cave" tacoguy7765093: - - rscadd: Added a new gateway map called Diescraper. Dont fall! - - rscadd: Added single use for mapping purposes. - - maptweak: Fixes slab IDs in Downtown city + - rscadd: Added a new gateway map called Diescraper. Dont fall! + - rscadd: Added single use for mapping purposes. + - maptweak: Fixes slab IDs in Downtown city 2024-06-29: FluffMedic: - - qol: New snowish looking bushes have been added to sif grass spawn pool. They - can give six fiber used in primal stuff - - qol: Sandstone and marble bricks can be manually created at a cost of 4 to 1, - and 10 seconds. + - qol: + New snowish looking bushes have been added to sif grass spawn pool. They + can give six fiber used in primal stuff + - qol: + Sandstone and marble bricks can be manually created at a cost of 4 to 1, + and 10 seconds. Hunter-Dovetail: - - rscadd: VBOanim_synthbelly1 - - rscadd: VBOanim_taurbelly1 - - rscadd: VBOanim_belly4 - - rscadd: VBOanim_belly5 - - rscadd: VBOanim_belly6 - - rscadd: VBOanim_belly7 - - rscadd: VBO_maw18 - - rscadd: Kasssc's VBOanim_belly1 - - rscadd: VBOanim_intestine2 - - rscadd: Cleans up some of the previous maw visuals by erasing cutout scratches - (well not really this PR... but, I'm working on it!) + - rscadd: VBOanim_synthbelly1 + - rscadd: VBOanim_taurbelly1 + - rscadd: VBOanim_belly4 + - rscadd: VBOanim_belly5 + - rscadd: VBOanim_belly6 + - rscadd: VBOanim_belly7 + - rscadd: VBO_maw18 + - rscadd: Kasssc's VBOanim_belly1 + - rscadd: VBOanim_intestine2 + - rscadd: + Cleans up some of the previous maw visuals by erasing cutout scratches + (well not really this PR... but, I'm working on it!) Raeschen: - - bugfix: Increase the main menu window height to kill the scrollbar on default - load + - bugfix: + Increase the main menu window height to kill the scrollbar on default + load TheCaramelion: - - rscadd: Footstep and slosh elements - - code_imp: No more lists in every single turf in existance with footstep sounds + - rscadd: Footstep and slosh elements + - code_imp: No more lists in every single turf in existance with footstep sounds 2024-06-30: TheCaramelion: - - code_imp: Deleted some now unused files - - code_imp: Slosh sounds moved to global_lists_ch - - code_imp: Exterminated the last list from all the turfs + - code_imp: Deleted some now unused files + - code_imp: Slosh sounds moved to global_lists_ch + - code_imp: Exterminated the last list from all the turfs diff --git a/html/changelogs_ch/archive/2024-07.yml b/html/changelogs_ch/archive/2024-07.yml index 150a5c059f..6cadeab385 100644 --- a/html/changelogs_ch/archive/2024-07.yml +++ b/html/changelogs_ch/archive/2024-07.yml @@ -1,142 +1,157 @@ 2024-07-01: Hunter-Dovetail: - - rscadd: VBOanim_gullet1 - - rscadd: VBO_maw19 - - bugfix: other VBOs quality and brightness - - bugfix: increased brightness to some layers of VBO_maw18 + - rscadd: VBOanim_gullet1 + - rscadd: VBO_maw19 + - bugfix: other VBOs quality and brightness + - bugfix: increased brightness to some layers of VBO_maw18 TheCaramelion: - - bugfix: fixed random slosh sounds happening with 0 liquids + - bugfix: fixed random slosh sounds happening with 0 liquids tacoguy7765093: - - bugfix: Fixed the Venom Injection trait to work for CHOMP/. + - bugfix: Fixed the Venom Injection trait to work for CHOMP/. 2024-07-04: TheCaramelion: - - qol: Reduced the footstep volume - - bugfix: Footstep and slosh elements making sounds when transfering through bellies/storages - - bugfix: Footstep and slosh elements not applying on resleeve/cloning/in-belly - spawns + - qol: Reduced the footstep volume + - bugfix: Footstep and slosh elements making sounds when transfering through bellies/storages + - bugfix: + Footstep and slosh elements not applying on resleeve/cloning/in-belly + spawns tacoguy7765093: - - maptweak: Diescraper's turfs should be properly indoors now - - maptweak: Fixed secret button not proccing. - - rscadd: 5 New superposed pods have been added. + - maptweak: Diescraper's turfs should be properly indoors now + - maptweak: Fixed secret button not proccing. + - rscadd: 5 New superposed pods have been added. 2024-07-05: Razgriz1032: - - rscadd: Base Shadekin spawns from 3 to 5 + - rscadd: Base Shadekin spawns from 3 to 5 2024-07-06: TheCaramelion: - - bugfix: Fixed slosh sounds playing while phased + - bugfix: Fixed slosh sounds playing while phased 2024-07-16: TheCaramelion: - - code_imp: HasProximity is now garbage collected - - qol: Xenochimeras now get stunned instead of weakened when reconstituting + - code_imp: HasProximity is now garbage collected + - qol: Xenochimeras now get stunned instead of weakened when reconstituting 2024-07-18: TheCaramelion: - - bugfix: Xenochimeras not being able to revive properly + - bugfix: Xenochimeras not being able to revive properly 2024-07-19: Asher-42: - - rscadd: 'added in new borg sprites (dullahan) for the following modules: medical, - cargo, sec, service, mining, exploration, engineering, janitor, science + - rscadd: + "added in new borg sprites (dullahan) for the following modules: medical, + cargo, sec, service, mining, exploration, engineering, janitor, science - :cl:' + :cl:" FluffMedic: - - rscadd: Some new boss esque mobs that can be accessed by messing with a strange - machine during an anomalous weather + - rscadd: + Some new boss esque mobs that can be accessed by messing with a strange + machine during an anomalous weather Fracshun: - - rscadd: Auto-transfer locations can now have extra destinations beyond the main - location. + - rscadd: + Auto-transfer locations can now have extra destinations beyond the main + location. Hunter-Dovetail: - - rscadd: VBO_maw20 (canine) - - rscadd: VBO_maw21 (draconic) - - rscadd: VBO_maw22 (crocodile/alligator) - - bugfix: FINALLY clears up (some) background smudges, tidying up maw_16,17,18 and - 19 (including the stray tongue dot, on maw_18's throat) + - rscadd: VBO_maw20 (canine) + - rscadd: VBO_maw21 (draconic) + - rscadd: VBO_maw22 (crocodile/alligator) + - bugfix: + FINALLY clears up (some) background smudges, tidying up maw_16,17,18 and + 19 (including the stray tongue dot, on maw_18's throat) Kashargul: - - rscadd: vore soulcatcher - - rscadd: experimental resize, costing 125 Nutrition - - code_imp: changes all our UI files to typescript + - rscadd: vore soulcatcher + - rscadd: experimental resize, costing 125 Nutrition + - code_imp: changes all our UI files to typescript TheCaramelion: - - rscadd: Added "Blank Mail Envelope" - - rscadd: Added Spawn-Mail proc, staff only. - - rscadd: Added Postal Services supply crate - - rscadd: Added Blank Mail Envelopes in some points of the station + - rscadd: Added "Blank Mail Envelope" + - rscadd: Added Spawn-Mail proc, staff only. + - rscadd: Added Postal Services supply crate + - rscadd: Added Blank Mail Envelopes in some points of the station tacoguy7765093: - - rscadd: Re-Adds deadman interaction with signalers again. - - rscadd: Added anti-job-camping to Anomalys - - qol: Bone breaks inside guts are now only audible to people in whisper range, - have fun blendering. - - image: Zorgoia taur tail sprites have been adjusted. + - rscadd: Re-Adds deadman interaction with signalers again. + - rscadd: Added anti-job-camping to Anomalys + - qol: + Bone breaks inside guts are now only audible to people in whisper range, + have fun blendering. + - image: Zorgoia taur tail sprites have been adjusted. 2024-07-20: Kashargul: - - code_imp: small typescript cleanup and oversighted chomp UI + - code_imp: small typescript cleanup and oversighted chomp UI MeepleMuncher: - - rscadd: Mushroom head markings + - rscadd: Mushroom head markings TheCaramelion: - - maptweak: Adds a coffee machine to the sci break room - - maptweak: Moved the copy machine to R&D - - maptweak: Removed the medkit and added a nanomed in the sci break room - - maptweak: Sci break room gets cups too + - maptweak: Adds a coffee machine to the sci break room + - maptweak: Moved the copy machine to R&D + - maptweak: Removed the medkit and added a nanomed in the sci break room + - maptweak: Sci break room gets cups too TheGreatKitsune: - - balance: rebalanced how locus difficulty of transport is handled. In the process - makes it much harder to accidentally destroy the station with loci + - balance: + rebalanced how locus difficulty of transport is handled. In the process + makes it much harder to accidentally destroy the station with loci purplefoxy27: - - rscadd: Adds "Spawn in Belly" verb for ghosts + - rscadd: Adds "Spawn in Belly" verb for ghosts tacoguy7765093: - - rscdel: Removes overpowered mecha weapon from MechFabStorage pod - - rscdel: Removes the protolathe from MechFabShip pod and replaces it with mecha - parts and prebuilt mechs. - - rscdel: Removes Locus spawner in Oldhotel. - - rscdel: Removed the SciencePod, Sciencepodv2 and Science ship from the superpose - pod spawn list. - - maptweak: Science PA has been removed from round start. - - maptweak: Ore Storage is now in the Cargo Warehouse. + - rscdel: Removes overpowered mecha weapon from MechFabStorage pod + - rscdel: + Removes the protolathe from MechFabShip pod and replaces it with mecha + parts and prebuilt mechs. + - rscdel: Removes Locus spawner in Oldhotel. + - rscdel: + Removed the SciencePod, Sciencepodv2 and Science ship from the superpose + pod spawn list. + - maptweak: Science PA has been removed from round start. + - maptweak: Ore Storage is now in the Cargo Warehouse. 2024-07-23: Kashargul: - - bugfix: Anorole camp message - - bugfix: caught souls being able to take over the pred's body + - bugfix: Anorole camp message + - bugfix: caught souls being able to take over the pred's body tacoguy7765093: - - maptweak: Moved a couple machines in mechfabship and also has the shutters open - by default to prevent lockouts. + - maptweak: + Moved a couple machines in mechfabship and also has the shutters open + by default to prevent lockouts. 2024-07-26: CHOMPStation2: - - rscadd: loadout items now show what jobs they're restricted to/enabled by - - bugfix: fixed a couple of teshi belted cloaks being under general outerwear rather - than in xenowear + - rscadd: loadout items now show what jobs they're restricted to/enabled by + - bugfix: + fixed a couple of teshi belted cloaks being under general outerwear rather + than in xenowear FluffMedic: - - bugfix: properly implents marble/sandstone crafting - - bugfix: re-adds missing cost to items that were missing it + - bugfix: properly implents marble/sandstone crafting + - bugfix: re-adds missing cost to items that were missing it Kashargul: - - balance: removes some boards from outsider circuit printer + - balance: removes some boards from outsider circuit printer tacoguy7765093: - - maptweak: Adds cargo access to the lossy sheet storage in the cargo warehouse. - - maptweak: External cargo walls are reinforced - - rscadd: Added a way for staff to spawn in overmap ships mid round via the Map-Template-Place-NewZ - verb. + - maptweak: Adds cargo access to the lossy sheet storage in the cargo warehouse. + - maptweak: External cargo walls are reinforced + - rscadd: + Added a way for staff to spawn in overmap ships mid round via the Map-Template-Place-NewZ + verb. 2024-07-27: Kashargul: - - rscadd: An option to give body control to any stored soul within the vore soulcatcher - as long as prefs align - - rscadd: succubus drain (lethal) can soulcatch - - rscadd: ghost join for vore soulcatcher - - bugfix: priority issues for vore soulcatcher overlays when blind and vorefx were - enabled causing toggling effects (blind can now blind on vorefx) - - bugfix: applying vore soulcatcher preference settings right away not working - - bugfix: transfer to MMIs from vore soulcatcher - - bugfix: captured simple_mobs and silicons not always showing their custom name - in vore soulscatchers + - rscadd: + An option to give body control to any stored soul within the vore soulcatcher + as long as prefs align + - rscadd: succubus drain (lethal) can soulcatch + - rscadd: ghost join for vore soulcatcher + - bugfix: + priority issues for vore soulcatcher overlays when blind and vorefx were + enabled causing toggling effects (blind can now blind on vorefx) + - bugfix: applying vore soulcatcher preference settings right away not working + - bugfix: transfer to MMIs from vore soulcatcher + - bugfix: + captured simple_mobs and silicons not always showing their custom name + in vore soulscatchers 2024-07-28: TheCaramelion: - - rscadd: You can now place reagents inside chewables + - rscadd: You can now place reagents inside chewables Verkister: - - balance: Adjusted diver visibility in shallow water. - - balance: Simplemob targeting ai invisibility threshold changed from 50% to 25%. + - balance: Adjusted diver visibility in shallow water. + - balance: Simplemob targeting ai invisibility threshold changed from 50% to 25%. 2024-07-30: TheCaramelion: - - rscadd: Added an option for players to choose their footstep sound - - qol: Reduced footstep volume - - code_imp: Less procs, more signals - - admin: Adds a new option to the smites + - rscadd: Added an option for players to choose their footstep sound + - qol: Reduced footstep volume + - code_imp: Less procs, more signals + - admin: Adds a new option to the smites tacoguy7765093: - - rscadd: Added a new extreme weather for admins called "extreme monsoon" - - bugfix: Weather defines updated + - rscadd: Added a new extreme weather for admins called "extreme monsoon" + - bugfix: Weather defines updated 2024-07-31: TheCaramelion: - - bugfix: Fixes a small oversight that made foostep element throw constant runtimes + - bugfix: Fixes a small oversight that made foostep element throw constant runtimes diff --git a/html/changelogs_ch/archive/2024-08.yml b/html/changelogs_ch/archive/2024-08.yml index f5860e21eb..635d4e2008 100644 --- a/html/changelogs_ch/archive/2024-08.yml +++ b/html/changelogs_ch/archive/2024-08.yml @@ -1,261 +1,294 @@ 2024-08-02: Asher-42: - - bugfix: dullahancargomodule class - - bugfix: second dullahan miner name -> v2 + - bugfix: dullahancargomodule class + - bugfix: second dullahan miner name -> v2 Fracshun: - - qol: Vorespawns with auto-accept on aren't affected by inactivity - - rscadd: Vorespawns into a belly with entrance logs disabled don't announce the - entrance to the pred + - qol: Vorespawns with auto-accept on aren't affected by inactivity + - rscadd: + Vorespawns into a belly with entrance logs disabled don't announce the + entrance to the pred Kashargul: - - bugfix: Fixed a case in which belly signals could trigger too many soulcatcher - messages + - bugfix: + Fixed a case in which belly signals could trigger too many soulcatcher + messages TheCaramelion: - - qol: Added the ability to point at items in your inventory - - code_imp: Added COMSIG_MOB_POINTED - - refactor: Everything point related moved to the modular folder + - qol: Added the ability to point at items in your inventory + - code_imp: Added COMSIG_MOB_POINTED + - refactor: Everything point related moved to the modular folder 2024-08-04: CHOMPStation2: - - rscadd: New wings, "Large speckled leather wings, tricolor" + - rscadd: New wings, "Large speckled leather wings, tricolor" 2024-08-06: CHOMPStation2: - - qol: most ships start as known, except for wrecks and the mercenary manta + - qol: most ships start as known, except for wrecks and the mercenary manta Fracshun: - - rscadd: Two new belly options for vorespawn. Whitelisting ckeys and whether the - belly absorbs prey on spawn. - - rscadd: Added a prompt for vorespawn preds to instantly absorb their chosen prey. + - rscadd: + Two new belly options for vorespawn. Whitelisting ckeys and whether the + belly absorbs prey on spawn. + - rscadd: Added a prompt for vorespawn preds to instantly absorb their chosen prey. Kashargul: - - bugfix: showing borg name on the fax instead of just 1 + - bugfix: showing borg name on the fax instead of just 1 tacoguy7765093: - - rscadd: Adds a new shadekin tail, Shadekin Fat Tail + - rscadd: Adds a new shadekin tail, Shadekin Fat Tail 2024-08-07: CHOMPStation2: - - bugfix: fixed missing 'vest' in 'cowboy selector' accessory - - bugfix: fixed corp press badge overwritten by freelance press badge - - qol: cowboy boots now use a selector because there's almost a dozen of them - - qol: added tan and green utility uniforms to General Jump vendors, and the entire - range of military jackets to Big D's Best - - qol: added black holsters to the holster selector and sec wardrobe vendor - - qol: removed KA holster, machete sheath, and sword sheathes from the holster selector - - qol: consolidated all the 5-slot item accessories into a webbing selector that - anyone can use, since it was already available to damn near half the jobs anyway - and I feel there's no real reason to restrict the vests/pouches by role so much - any more - - rscdel: removed accessories_vr.dm entirely, merging the files where appropriate - - shouldn't cause any lost items - - rscdel: purged some tracks from the jukebox that were no longer playing because - they relied on invalidated discord links + - bugfix: fixed missing 'vest' in 'cowboy selector' accessory + - bugfix: fixed corp press badge overwritten by freelance press badge + - qol: cowboy boots now use a selector because there's almost a dozen of them + - qol: + added tan and green utility uniforms to General Jump vendors, and the entire + range of military jackets to Big D's Best + - qol: added black holsters to the holster selector and sec wardrobe vendor + - qol: removed KA holster, machete sheath, and sword sheathes from the holster selector + - qol: + consolidated all the 5-slot item accessories into a webbing selector that + anyone can use, since it was already available to damn near half the jobs anyway + and I feel there's no real reason to restrict the vests/pouches by role so much + any more + - rscdel: + removed accessories_vr.dm entirely, merging the files where appropriate + - shouldn't cause any lost items + - rscdel: + purged some tracks from the jukebox that were no longer playing because + they relied on invalidated discord links TheCaramelion: - - bugfix: Fixed not facing pointed atoms. + - bugfix: Fixed not facing pointed atoms. 2024-08-09: Kashargul: - - bugfix: self transfer to mmis not working + - bugfix: self transfer to mmis not working 2024-08-10: TheCaramelion: - - qol: 3 more slots for the mailbag - - bugfix: Fixed mailbag not able to pick up mail off the ground + - qol: 3 more slots for the mailbag + - bugfix: Fixed mailbag not able to pick up mail off the ground Verkister: - - bugfix: Fixed bigdragon scaling issues. + - bugfix: Fixed bigdragon scaling issues. 2024-08-11: TheCaramelion: - - bugfix: Fixed various runtimes regarding balloon alerts + - bugfix: Fixed various runtimes regarding balloon alerts 2024-08-12: CHOMPStation2: - - qol: an unarmoured version of the martian miner coat is now available in loadouts - - qol: electrical storms have a high chance to flicker the lights instead of obliterating - them - - rscdel: removed text notifs when prepping to throw/catch stuff - - bugfix: accidentally had patches on patchless tan jacket's inventory sprite - - rscadd: two variant landing markers on the space whale, to make landing at the - existing landing zones easier - - qol: emergency beacon behaviour tweaks; shorter activation, fixed deployment location, - and integrated micro-gps - - qol: added emergency beacons to pilot lockers - - qol: deployed emergency beacons can be disassembled with a wrench - - rscadd: added `isopenturf` helper, returns true if the checked turf is `space` - or `simulated/open` - - rscadd: added `isnonsolidturf` helper, returns true if the checked turf is `space`, - `simulated/open`, `simulated/floor/water`, or `simulated/floor/lava` - - bugfix: techmaint tiles are no longer destroyed when crowbarred up, and replacements - can be made using steel sheets - - bugfix: techfloor, steel hi-grip floor, and techgrid floor tiles can all be made - using steel as well - - rscadd: talon miners now have a job icon for AR HUDs + - qol: an unarmoured version of the martian miner coat is now available in loadouts + - qol: + electrical storms have a high chance to flicker the lights instead of obliterating + them + - rscdel: removed text notifs when prepping to throw/catch stuff + - bugfix: accidentally had patches on patchless tan jacket's inventory sprite + - rscadd: + two variant landing markers on the space whale, to make landing at the + existing landing zones easier + - qol: + emergency beacon behaviour tweaks; shorter activation, fixed deployment location, + and integrated micro-gps + - qol: added emergency beacons to pilot lockers + - qol: deployed emergency beacons can be disassembled with a wrench + - rscadd: + added `isopenturf` helper, returns true if the checked turf is `space` + or `simulated/open` + - rscadd: + added `isnonsolidturf` helper, returns true if the checked turf is `space`, + `simulated/open`, `simulated/floor/water`, or `simulated/floor/lava` + - bugfix: + techmaint tiles are no longer destroyed when crowbarred up, and replacements + can be made using steel sheets + - bugfix: + techfloor, steel hi-grip floor, and techgrid floor tiles can all be made + using steel as well + - rscadd: talon miners now have a job icon for AR HUDs TheCaramelion: - - qol: Shorter autoresleeve time after steps mechanics are applied - - qol: Shoes muffle the death message + - qol: Shorter autoresleeve time after steps mechanics are applied + - qol: Shoes muffle the death message 2024-08-13: RandoGuy999: - - bugfix: Souls caught in the vore soulcatcher will now actually have their prefs. + - bugfix: Souls caught in the vore soulcatcher will now actually have their prefs. 2024-08-14: Asher-42: - - rscadd: Added in smol raptor borgs from bubber station! + - rscadd: Added in smol raptor borgs from bubber station! CHOMPStation2: - - bugfix: fixed tails layering weirdly under the character on character setup - - bugfix: Species blood color is used again - - qol: Blood color reset button now uses the species' default - - qol: Blood color button now has a colored dot - - rscadd: Reagent Dispensers now allow you to save a series of button presses as - a recipe/macro and replay it. This is per-dispenser per-shift. - - bugfix: random loot spawners delete properly - - qol: adds counter-clockwise rotation to pipes, grave markers, windoors, infrared - assemblies, vending machines, drill braces, floor tubes, chemical dispensers, - water coolers, disposal pipes, shield capacitors, and micro roads - - bugfix: prevents cortical borers from crashing VR pods - - qol: removes 0 tick blood dry timers from maploaded blood - - bugfix: prevents storing grabs in crates - - bugfix: fixes look-up verb when outdoors - - rscadd: vehicles obey gravity - - rscadd: cargo tug can dangerously traverse stairs - - bugfix: fixes incorrect "TECH_MAGNETS" defines - - bugfix: fixes med/sec bot runtimes - - bugfix: fixes injury/stumblevore proccing every step when buckled to borgs or - taurs - - bugfix: fixes item interactions with virus dishes + - bugfix: fixed tails layering weirdly under the character on character setup + - bugfix: Species blood color is used again + - qol: Blood color reset button now uses the species' default + - qol: Blood color button now has a colored dot + - rscadd: + Reagent Dispensers now allow you to save a series of button presses as + a recipe/macro and replay it. This is per-dispenser per-shift. + - bugfix: random loot spawners delete properly + - qol: + adds counter-clockwise rotation to pipes, grave markers, windoors, infrared + assemblies, vending machines, drill braces, floor tubes, chemical dispensers, + water coolers, disposal pipes, shield capacitors, and micro roads + - bugfix: prevents cortical borers from crashing VR pods + - qol: removes 0 tick blood dry timers from maploaded blood + - bugfix: prevents storing grabs in crates + - bugfix: fixes look-up verb when outdoors + - rscadd: vehicles obey gravity + - rscadd: cargo tug can dangerously traverse stairs + - bugfix: fixes incorrect "TECH_MAGNETS" defines + - bugfix: fixes med/sec bot runtimes + - bugfix: + fixes injury/stumblevore proccing every step when buckled to borgs or + taurs + - bugfix: fixes item interactions with virus dishes Kashargul: - - qol: reduces nutrition gain of trash for sleepers from 5 to 1, there's enough - ways to get nutrition and some units, like janitors can collect a lot of trash - into their sleeper + - qol: + reduces nutrition gain of trash for sleepers from 5 to 1, there's enough + ways to get nutrition and some units, like janitors can collect a lot of trash + into their sleeper MeepleMuncher: - - rscadd: More emotes for mind-binded individuals + - rscadd: More emotes for mind-binded individuals TheCaramelion: - - rscadd: Mail Scanner, a tool for mail carriers to verify mail delivery - - qol: Mailman > Mail Carrier - - qol: Mail Carriers start with their job stuff in their backpack now + - rscadd: Mail Scanner, a tool for mail carriers to verify mail delivery + - qol: Mailman > Mail Carrier + - qol: Mail Carriers start with their job stuff in their backpack now tacoguy7765093: - - balance: Mob HP has been buffed back to normal values, mostly double the HP - - balance: Projectiles are notably more lethal now. Double the amount, damage breakpoints - are now 20/40/60 instead of 10/20/40, - - bugfix: Fixes revolvers using the wrong projectile path. - - balance: Laser weaponry now has less shots to compensate for higher damage. - - balance: 14.5mm ammo is now separate from big ammo. - - balance: Foam and riot foam darts are now printable - - balance: increased cost of 14.5mm ammo - - bugfix: Fixed autolathes printing the wrong bullet paths involving 14.5 - - balance: Foam Riot Darts 50->20 - - qol: Foam riot darts are now printable - - bugfix: Fixed weapons that fire medium/large bullets firing the wrong projectile. - - bugfix: Fixed rubbershot being as lethal as the real thing. - - sound: Added better sounds for the sniper rifles. - - balance: Rubbershot doesn't cause bleeding anymore. - - balance: Player controled zorgoia now can inject prey. - - image: Modified the zorgoia simplemob sprite majorly now with customisation. - - image: Removed Herobrine + - balance: Mob HP has been buffed back to normal values, mostly double the HP + - balance: + Projectiles are notably more lethal now. Double the amount, damage breakpoints + are now 20/40/60 instead of 10/20/40, + - bugfix: Fixes revolvers using the wrong projectile path. + - balance: Laser weaponry now has less shots to compensate for higher damage. + - balance: 14.5mm ammo is now separate from big ammo. + - balance: Foam and riot foam darts are now printable + - balance: increased cost of 14.5mm ammo + - bugfix: Fixed autolathes printing the wrong bullet paths involving 14.5 + - balance: Foam Riot Darts 50->20 + - qol: Foam riot darts are now printable + - bugfix: Fixed weapons that fire medium/large bullets firing the wrong projectile. + - bugfix: Fixed rubbershot being as lethal as the real thing. + - sound: Added better sounds for the sniper rifles. + - balance: Rubbershot doesn't cause bleeding anymore. + - balance: Player controled zorgoia now can inject prey. + - image: Modified the zorgoia simplemob sprite majorly now with customisation. + - image: Removed Herobrine 2024-08-15: tacoguy7765093: - - balance: Fixed a bug that made phase weapons do improper amounts of damage. - - balance: Colt-Single-Action 25 -> 35 - - balance: Most small caliber revolvers 10 -> 25 - - bugfix: Fixed a bug that made half of the lower caliber revolvers doing the improper - amount of damage. + - balance: Fixed a bug that made phase weapons do improper amounts of damage. + - balance: Colt-Single-Action 25 -> 35 + - balance: Most small caliber revolvers 10 -> 25 + - bugfix: + Fixed a bug that made half of the lower caliber revolvers doing the improper + amount of damage. 2024-08-16: Asher-42: - - rscadd: Dullahan Clownborg - - rscadd: panel covers to dullahan and smol raptors - - rscadd: dullahan syndicate sprite to only medic + - rscadd: Dullahan Clownborg + - rscadd: panel covers to dullahan and smol raptors + - rscadd: dullahan syndicate sprite to only medic tacoguy7765093: - - rscadd: Zorgoia now have the full poison catalog to inject people with. - - rscadd: Zorgoia are properly ridable. - - rscdel: Removed the otie subtype for zorgoia - - image: Sprite tweak with the zorgoia sprite + - rscadd: Zorgoia now have the full poison catalog to inject people with. + - rscadd: Zorgoia are properly ridable. + - rscdel: Removed the otie subtype for zorgoia + - image: Sprite tweak with the zorgoia sprite 2024-08-21: TheCaramelion: - - bugfix: Fixed various proximity related runtimes + - bugfix: Fixed various proximity related runtimes tacoguy7765093: - - bugfix: Fixed a oversight that prevents zorgoia from being grabbed. + - bugfix: Fixed a oversight that prevents zorgoia from being grabbed. 2024-08-23: Asher-42: - - bugfix: dullahan syndies now show up in the drop down + - bugfix: dullahan syndies now show up in the drop down CHOMPStation2: - - rscadd: Advanced TGUI Say modal - - qol: Verb panel say/me/whisper/subtle have been renamed to "Say verb"/etc - and - pop open the tgui say panel/tgui input/normal input instead of always using - the native dialog. - - rscadd: Every speech bubble now has an extra spinning/"thinking" state. - - qol: Added /tg/'s trait system, currently just used for indicating that you're - in the typing state. - - bugfix: TGUI dev server works again (keep_local_name = TRUE is really important, - both for that and reliability) - - qol: Subtle/Whisper now has typing indicators by default - you can turn indicators - off for these channels specifically with a new pref. - - qol: Typing indicators switched fully to /tg/'s system for them with traits and - client integration and... stuff. + - rscadd: Advanced TGUI Say modal + - qol: + Verb panel say/me/whisper/subtle have been renamed to "Say verb"/etc - and + pop open the tgui say panel/tgui input/normal input instead of always using + the native dialog. + - rscadd: Every speech bubble now has an extra spinning/"thinking" state. + - qol: + Added /tg/'s trait system, currently just used for indicating that you're + in the typing state. + - bugfix: + TGUI dev server works again (keep_local_name = TRUE is really important, + both for that and reliability) + - qol: + Subtle/Whisper now has typing indicators by default - you can turn indicators + off for these channels specifically with a new pref. + - qol: + Typing indicators switched fully to /tg/'s system for them with traits and + client integration and... stuff. Kashargul: - - bugfix: all objects picking up ALL visible messages, even those they shouldn't - - balance: limits item size of suitable vacuumable items to everything smaller than - huge size + - bugfix: all objects picking up ALL visible messages, even those they shouldn't + - balance: + limits item size of suitable vacuumable items to everything smaller than + huge size TheCaramelion: - - rscadd: Teppi plushie + - rscadd: Teppi plushie tacoguy7765093: - - balance: All AK type weapons 25 -> 35 (7.62 supreme) - - balance: AK-74s damage 25 -> 30 (They use 5.56) - - balance: SKS damage 25 -> 35 + hitscan - - balance: CR-20 damage 25 -> 20 - - balance: SMG mercs damage 25 -> 20 - - balance: Phase weapon capacity halved. 30 -> 15 - - qol: Floragun capacity 10 -> 30 - - bugfix: LMG projectile shoots properly, 30 damage now. - - bugfix: 7.62 weapons now point to the right projectile path. - - bugfix: The detectives .45 revolver now wont TF real bullets to rubber bullets - if loaded with such. + - balance: All AK type weapons 25 -> 35 (7.62 supreme) + - balance: AK-74s damage 25 -> 30 (They use 5.56) + - balance: SKS damage 25 -> 35 + hitscan + - balance: CR-20 damage 25 -> 20 + - balance: SMG mercs damage 25 -> 20 + - balance: Phase weapon capacity halved. 30 -> 15 + - qol: Floragun capacity 10 -> 30 + - bugfix: LMG projectile shoots properly, 30 damage now. + - bugfix: 7.62 weapons now point to the right projectile path. + - bugfix: + The detectives .45 revolver now wont TF real bullets to rubber bullets + if loaded with such. 2024-08-24: FluffMedic: - - bugfix: Weather beasts have their stats adjusted - - qol: The heavy fog weather beast has more of a tell to their attacks. + - bugfix: Weather beasts have their stats adjusted + - qol: The heavy fog weather beast has more of a tell to their attacks. TheCaramelion: - - rscadd: Teppi plushies are obtainable in the vending machines now + - rscadd: Teppi plushies are obtainable in the vending machines now tacoguy7765093: - - bugfix: Fixed in-hand sprites for the m4 and m6 - - sound: Modified all of the gun sounds. - - balance: Mech armor has been nerfed. + - bugfix: Fixed in-hand sprites for the m4 and m6 + - sound: Modified all of the gun sounds. + - balance: Mech armor has been nerfed. 2024-08-27: CHOMPStation2: - - rscadd: added research samples, for research. collect them using special sample - containers, then analyze them or reduce them into useful resources! or just - put them on a table and use them as a conversation piece. + - rscadd: + added research samples, for research. collect them using special sample + containers, then analyze them or reduce them into useful resources! or just + put them on a table and use them as a conversation piece. MeepleMuncher: - - rscadd: Alternate teppi plushie + - rscadd: Alternate teppi plushie TheCaramelion: - - rscadd: Departamental Lathes for each department - - rscdel: Removed night shift voice lines - - config: Night shift depends now on Sif - - bugfix: Fixed Protolathe consoles not syncing with the research server - - rscadd: Designs for all the departmental protolathes - - bugfix: Fixed departmental lathes changing to omni lathes - - bugfix: Engineering console has the right name now - - bugfix: Departamental lathes can sync with R&D's server. + - rscadd: Departamental Lathes for each department + - rscdel: Removed night shift voice lines + - config: Night shift depends now on Sif + - bugfix: Fixed Protolathe consoles not syncing with the research server + - rscadd: Designs for all the departmental protolathes + - bugfix: Fixed departmental lathes changing to omni lathes + - bugfix: Engineering console has the right name now + - bugfix: Departamental lathes can sync with R&D's server. 2024-08-28: FluffMedic: - - rscadd: Frontier shotgun is added to the game, and exploration vendor. - - bugfix: Frontier Marksmen Rifle not starting with the correct firing speed - - bugfix: overide left on a projectile has been switched off. - - bugfix: Needing extra pumps on full power frontier shotgun mode to end the sequence. - - rscadd: Lesser lightweight + - rscadd: Frontier shotgun is added to the game, and exploration vendor. + - bugfix: Frontier Marksmen Rifle not starting with the correct firing speed + - bugfix: overide left on a projectile has been switched off. + - bugfix: Needing extra pumps on full power frontier shotgun mode to end the sequence. + - rscadd: Lesser lightweight Kashargul: - - bugfix: security console not being linked to the RD server + - bugfix: security console not being linked to the RD server 2024-08-29: CHOMPStation2: - - rscadd: added "random corporate supply" and contraband "special corporate supply" - crates to cargo terminals; the former mostly has harmless stuff, whilst the - latter can spawn all sorts of stuff from the random pool but can also include - weapons (rarely). - - qol: refactored the supply spawning behaviour slightly, so crates are no longer - mandatory. imagine the manifest comes stickytaped to the item, or whatever - - qol: supply consoles start tracking orders at 0 (so the first order is order 1, - etc.) rather than a random number between 1 and 9000 - - bugfix: the random pizza pack crate now comes with the pizza delivery outfit and - visor, deleting a duplicate pizza supply pack that was inaccessible anyway due - to not having a defined name or container - - rscdel: merged all _vr supplypacks into the main supplypack files - - rscadd: new "full lid" 'decal' option for crates - - qol: added desatti catering, nukies energy drinks, and coyote salvage corp suit - crates to random spawners + - rscadd: + added "random corporate supply" and contraband "special corporate supply" + crates to cargo terminals; the former mostly has harmless stuff, whilst the + latter can spawn all sorts of stuff from the random pool but can also include + weapons (rarely). + - qol: + refactored the supply spawning behaviour slightly, so crates are no longer + mandatory. imagine the manifest comes stickytaped to the item, or whatever + - qol: + supply consoles start tracking orders at 0 (so the first order is order 1, + etc.) rather than a random number between 1 and 9000 + - bugfix: + the random pizza pack crate now comes with the pizza delivery outfit and + visor, deleting a duplicate pizza supply pack that was inaccessible anyway due + to not having a defined name or container + - rscdel: merged all _vr supplypacks into the main supplypack files + - rscadd: new "full lid" 'decal' option for crates + - qol: + added desatti catering, nukies energy drinks, and coyote salvage corp suit + crates to random spawners TheCaramelion: - - rscadd: You can now stick micros to lollipops + - rscadd: You can now stick micros to lollipops tacoguy7765093: - - rscadd: 'New outsider alt-title, space farer: Currently only 2 shuttles' - - maptweak: Added outsider shuttles, the pizzashuttle, and the cyber shuttle. + - rscadd: "New outsider alt-title, space farer: Currently only 2 shuttles" + - maptweak: Added outsider shuttles, the pizzashuttle, and the cyber shuttle. 2024-08-30: Kashargul: - - code_imp: fix some dullahan borg sprites not showing - - bugfix: self transfer not allowing to jump into nearby soulcatchers - - bugfix: macro inputs not working for the SC's chat verbs + - code_imp: fix some dullahan borg sprites not showing + - bugfix: self transfer not allowing to jump into nearby soulcatchers + - bugfix: macro inputs not working for the SC's chat verbs diff --git a/html/changelogs_ch/archive/2024-09.yml b/html/changelogs_ch/archive/2024-09.yml index 004611c38c..21ba8a86f7 100644 --- a/html/changelogs_ch/archive/2024-09.yml +++ b/html/changelogs_ch/archive/2024-09.yml @@ -1,281 +1,324 @@ 2024-09-01: Hunter-Dovetail: - - rscadd: VBO_22 + - rscadd: VBO_22 2024-09-02: Kashargul: - - bugfix: pred spawn leading to a null as selected belly + - bugfix: pred spawn leading to a null as selected belly tacoguy7765093: - - rscadd: Adds a new spawnpoint for outsiders to spawn in the fuel depot. Spacefarer - subjob highly recommended. - - maptweak: Fixed docking the whiteship II - - maptweak: Overhauled the fuel depot and made it spawn randomly in the OM - - maptweak: Fixed broken door bolts on whiteship II, removed stray door. - - maptweak: Cybershuttle access fix + - rscadd: + Adds a new spawnpoint for outsiders to spawn in the fuel depot. Spacefarer + subjob highly recommended. + - maptweak: Fixed docking the whiteship II + - maptweak: Overhauled the fuel depot and made it spawn randomly in the OM + - maptweak: Fixed broken door bolts on whiteship II, removed stray door. + - maptweak: Cybershuttle access fix 2024-09-03: CHOMPStation2: - - qol: hacktools can now be found in a new NULL contraband crate set - - qol: hacktools can now hack secure crates and lockers open (but not relock them) - - rscadd: added two spice smites; one harmless, one extra spicy + - qol: hacktools can now be found in a new NULL contraband crate set + - qol: hacktools can now hack secure crates and lockers open (but not relock them) + - rscadd: added two spice smites; one harmless, one extra spicy FluffMedic: - - balance: culling of materials happens at 2500 instead of the previous 500 - - balance: material loss is 50% instead of the roughly 22% average of before. - - balance: material loss can happen until a single material remains. - - balance: Illell have normal pain and burn mods + - balance: culling of materials happens at 2500 instead of the previous 500 + - balance: material loss is 50% instead of the roughly 22% average of before. + - balance: material loss can happen until a single material remains. + - balance: Illell have normal pain and burn mods TheCaramelion: - - rscadd: Re-Enabled wormhole event - - rscadd: Wormholes have a chance to pick a belly as an exit - - qol: Wormholes won't throw you into Sif anymore - - rscadd: Phobia traits actually make you fear + - rscadd: Re-Enabled wormhole event + - rscadd: Wormholes have a chance to pick a belly as an exit + - qol: Wormholes won't throw you into Sif anymore + - rscadd: Phobia traits actually make you fear 2024-09-04: CHOMPStation2: - - qol: filled in the public teleporter sprite with an alpha layer to make it easier - to use them - - qol: samples have a more useful description, and are now safer to handle (container - still advised) with voidsuits but can have other effects besides just burning - your hands + - qol: + filled in the public teleporter sprite with an alpha layer to make it easier + to use them + - qol: + samples have a more useful description, and are now safer to handle (container + still advised) with voidsuits but can have other effects besides just burning + your hands 2024-09-05: Kashargul: - - bugfix: description label of the bellyrub target in examine + - bugfix: description label of the bellyrub target in examine 2024-09-06: tacoguy7765093: - - qol: Superposed pods can be rightclicked to be reset now instead of needing a - pen - - balance: Buffed the metawhiteship's generator to be a superpacman - - balance: Added a fuel cost to the superposed ship's short jumps - - maptweak: Fixed a wiring issue in the fuel depot + - qol: + Superposed pods can be rightclicked to be reset now instead of needing a + pen + - balance: Buffed the metawhiteship's generator to be a superpacman + - balance: Added a fuel cost to the superposed ship's short jumps + - maptweak: Fixed a wiring issue in the fuel depot 2024-09-08: CHOMPStation2: - - rscadd: New pAI chassis - - bugfix: Vox can take shaved beards - - rscadd: Vox dino muzzle - - rscadd: Allows prometheans to use teshari and vox icon bases - - bugfix: AI default laws use the mapset default laws - - qol: You can't run yourself over by pulling a vehicle - - qol: Buffs space cleaner to match other cleaning methods - - bugfix: Formats greatwolf mode_flags correctly - - rscadd: Allows more medical equipment to be stored in the medical toolbelt - - qol: Climb crates with mouse drag - - qol: Check airlock electrification with the doorbell - - qol: Med scanners can detect husking - - rscadd: Players can spawn with a one-time mindscan + - rscadd: New pAI chassis + - bugfix: Vox can take shaved beards + - rscadd: Vox dino muzzle + - rscadd: Allows prometheans to use teshari and vox icon bases + - bugfix: AI default laws use the mapset default laws + - qol: You can't run yourself over by pulling a vehicle + - qol: Buffs space cleaner to match other cleaning methods + - bugfix: Formats greatwolf mode_flags correctly + - rscadd: Allows more medical equipment to be stored in the medical toolbelt + - qol: Climb crates with mouse drag + - qol: Check airlock electrification with the doorbell + - qol: Med scanners can detect husking + - rscadd: Players can spawn with a one-time mindscan tacoguy7765093: - - image: Added a new tail, the feathered raptor tail - - maptweak: Whiteship mk2 rewiring plus duplicate fax removal - - code_imp: Fax machine inits instead of new now, fixes superposed pod fax machines - not updating the list. + - image: Added a new tail, the feathered raptor tail + - maptweak: Whiteship mk2 rewiring plus duplicate fax removal + - code_imp: + Fax machine inits instead of new now, fixes superposed pod fax machines + not updating the list. 2024-09-12: CHOMPStation2: - - rscadd: You can now hold spacebar to throw items. + - rscadd: You can now hold spacebar to throw items. Kashargul: - - rscadd: Id card to exploration borg to transfer points from the cataloguer and - use on the vendor + - rscadd: + Id card to exploration borg to transfer points from the cataloguer and + use on the vendor 2024-09-14: CHOMPStation2: - - rscadd: Examining a mob now puts their description in a box. It's pretty. + - rscadd: Examining a mob now puts their description in a box. It's pretty. 2024-09-15: CHOMPStation2: - - rscadd: Fit Viewport verb to automatically remove letterboxing around the map - - rscadd: Auto fit viewport preference to do Fit Viewport on login/when view size - changes + - rscadd: Fit Viewport verb to automatically remove letterboxing around the map + - rscadd: + Auto fit viewport preference to do Fit Viewport on login/when view size + changes FluffMedic: - - qol: ' Broke Cocoon Spinner out of prison, aka everyone acce' - - qol: spacebar no longers triggers throw - - qol: lets proteans do weaver things again - - qol: ' A non-existent list and a non-existent list are apparently two different - things. Anyway, reverted to Weaver to how it was before upstream changes, aka - open to all species.' + - qol: " Broke Cocoon Spinner out of prison, aka everyone acce" + - qol: spacebar no longers triggers throw + - qol: lets proteans do weaver things again + - qol: + " A non-existent list and a non-existent list are apparently two different + things. Anyway, reverted to Weaver to how it was before upstream changes, aka + open to all species." Kashargul: - - bugfix: liquid belly examine setting not saving + - bugfix: liquid belly examine setting not saving 2024-09-16: Asher-42: - - rscadd: Two abilities for protean that makes either their entire body transparent - or just the chest. + - rscadd: + Two abilities for protean that makes either their entire body transparent + or just the chest. Kashargul: - - balance: energy shield life 35 -> 90 - - balance: energy shield regen 10 -> 25 - - balance: combat spear damage 25 -> 45 damage - - balance: 'explo jaws: 40 -> 60 damage' - - bugfix: cleanbot not reaching dirty turfs + - balance: energy shield life 35 -> 90 + - balance: energy shield regen 10 -> 25 + - balance: combat spear damage 25 -> 45 damage + - balance: "explo jaws: 40 -> 60 damage" + - bugfix: cleanbot not reaching dirty turfs Missile597: - - bugfix: Fixed the broken chain of scrubber pipes near the elevator to be connected - now as intended - - maptweak: Replaced the cursed unsimulated carpet tiles with proper carpet that - can actually be removed + - bugfix: + Fixed the broken chain of scrubber pipes near the elevator to be connected + now as intended + - maptweak: + Replaced the cursed unsimulated carpet tiles with proper carpet that + can actually be removed tacoguy7765093: - - rscadd: Added more shuttles for spacefarers - - code_imp: Added documentation to generic_shuttle.dm on how to make your own OM - ship - - rscadd: SDF Corvette adjustments - - rscadd: Daedelus adjustments. - - rscadd: Fixes the shockmaul being a missing texture. + - rscadd: Added more shuttles for spacefarers + - code_imp: + Added documentation to generic_shuttle.dm on how to make your own OM + ship + - rscadd: SDF Corvette adjustments + - rscadd: Daedelus adjustments. + - rscadd: Fixes the shockmaul being a missing texture. 2024-09-17: CHOMPStation2: - - rscadd: PDAs will now display image embeds for cdn.discordapp.com and i.imgur.com - links. - - rscadd: Preference to turn off image embedding completely. + - rscadd: + PDAs will now display image embeds for cdn.discordapp.com and i.imgur.com + links. + - rscadd: Preference to turn off image embedding completely. TheCaramelion: - - balance: 'Osteo/Milk effect: Weakened to Stun' - - code_imp: custom_pain proc actually hurts you now - - bugfix: Only osteodaxon/milk makes you be in pain now + - balance: "Osteo/Milk effect: Weakened to Stun" + - code_imp: custom_pain proc actually hurts you now + - bugfix: Only osteodaxon/milk makes you be in pain now 2024-09-18: Kashargul: - - balance: patches will apply touch again + - balance: patches will apply touch again tacoguy7765093: - - maptweak: SDF Corvette not cycling airlocks properly - - bugfix: SurvivalDIY11x11 lite works now + - maptweak: SDF Corvette not cycling airlocks properly + - bugfix: SurvivalDIY11x11 lite works now 2024-09-19: TheCaramelion: - - rscadd: Brig Physician role - - bugfix: Geneticists start with their right headset now + - rscadd: Brig Physician role + - bugfix: Geneticists start with their right headset now 2024-09-21: TheCaramelion: - - bugfix: Brig Physician is now selectable - - bugfix: Fixed onelife trait runtimes + - bugfix: Brig Physician is now selectable + - bugfix: Fixed onelife trait runtimes 2024-09-22: CHOMPStation2: - - rscadd: added HYPER binder underwear - - bugfix: tweaks mouse holes to not iterate over world contents - - bugfix: prevents micros from teleporting out of your hand if removed from a mouse - hole - - rscadd: Line tool and paint bucket tool to Canvases. - - rscadd: Click-and-drag brush in Canvas. - - rscadd: You can now select 1 of 47 different plushies to bring with you from loadout - accessories~! + - rscadd: added HYPER binder underwear + - bugfix: tweaks mouse holes to not iterate over world contents + - bugfix: + prevents micros from teleporting out of your hand if removed from a mouse + hole + - rscadd: Line tool and paint bucket tool to Canvases. + - rscadd: Click-and-drag brush in Canvas. + - rscadd: + You can now select 1 of 47 different plushies to bring with you from loadout + accessories~! 2024-09-23: CHOMPStation2: - - rscadd: PDAs now show a little animation when opening apps. - - rscadd: The PDA flashlight button is now highlighted. - - qol: med/sec records and ids no longer out you as a hanner (useful for characters - who are unaware of their own status) - - rscadd: Closing a beaker and clicking on venomous animals/people with it will - allow you to express their venom into the beaker once every 30 seconds. + - rscadd: PDAs now show a little animation when opening apps. + - rscadd: The PDA flashlight button is now highlighted. + - qol: + med/sec records and ids no longer out you as a hanner (useful for characters + who are unaware of their own status) + - rscadd: + Closing a beaker and clicking on venomous animals/people with it will + allow you to express their venom into the beaker once every 30 seconds. Kashargul: - - bugfix: turrets properly target simple mobs and xenos/aliens again + - bugfix: turrets properly target simple mobs and xenos/aliens again tacoguy7765093: - - qol: Zorgoia simplemobs now can have their style exported and imported for later! - - qol: Zorgoia simplemobs now spawn with random colors and markings. + - qol: Zorgoia simplemobs now can have their style exported and imported for later! + - qol: Zorgoia simplemobs now spawn with random colors and markings. 2024-09-24: Missile597: - - rscadd: Added railings to many areas in maintenance which were missing them causing - easy fall risk, especially around ladders. Maints is now 90% more Space OSHA - approved! - - rscadd: Added lattices above the dock areas where maints trash exists. Hopefully - this should keep the mice and raccoons safe. - - rscadd: Gave the AI a light switch so they don't have to live in a dark basement - - rscdel: Deleted the signs on deck 3 for a transit tube that did not exist, and - filled in the missing emergency shutter - - rscdel: Deleted the APC in the abandoned chapel. Area doesn't need power anyway - and if someone wants to power it they can build their own APC. It wasn't wired - up anyway. - - rscdel: Removed the AI entertainment monitors. AI doesn't like TV anyway and they - were blocking intercoms - - rscdel: Removed the nitrous anaesthetic from Robotics - - qol: The command office request consoles are now allowed to make station announcements - - qol: Gave the kitchen their booze back - - qol: Gives engineering a light replacer tool - - qol: Added plating under the catwalks on the tesla platform so borgs can go for - a space walk - - bugfix: Fixed a couple of bypass breakers with wires underneath still, bypassing - the bypass. - - bugfix: Fixed a disposals bin above the botanical kitchen that wasn't connected - to the network - - bugfix: Added a missing connector for the airlock tanks on the secondary engine - airlock - - bugfix: Replaced airless plating in toxins lab with some breathable air. - - bugfix: Fixed the air alarm naming conventions - - bugfix: Hopefully fixed persistent storages (though can't test this). Locations - of storages are up for debate but given the location of the qpad, I think cargo - could benefit from a transit tube in future updates - - bugfix: 'Fixed the terrain below medical that was having shields generated on - it (lost the Sif look for now) + - rscadd: + Added railings to many areas in maintenance which were missing them causing + easy fall risk, especially around ladders. Maints is now 90% more Space OSHA + approved! + - rscadd: + Added lattices above the dock areas where maints trash exists. Hopefully + this should keep the mice and raccoons safe. + - rscadd: Gave the AI a light switch so they don't have to live in a dark basement + - rscdel: + Deleted the signs on deck 3 for a transit tube that did not exist, and + filled in the missing emergency shutter + - rscdel: + Deleted the APC in the abandoned chapel. Area doesn't need power anyway + and if someone wants to power it they can build their own APC. It wasn't wired + up anyway. + - rscdel: + Removed the AI entertainment monitors. AI doesn't like TV anyway and they + were blocking intercoms + - rscdel: Removed the nitrous anaesthetic from Robotics + - qol: The command office request consoles are now allowed to make station announcements + - qol: Gave the kitchen their booze back + - qol: Gives engineering a light replacer tool + - qol: + Added plating under the catwalks on the tesla platform so borgs can go for + a space walk + - bugfix: + Fixed a couple of bypass breakers with wires underneath still, bypassing + the bypass. + - bugfix: + Fixed a disposals bin above the botanical kitchen that wasn't connected + to the network + - bugfix: + Added a missing connector for the airlock tanks on the secondary engine + airlock + - bugfix: Replaced airless plating in toxins lab with some breathable air. + - bugfix: Fixed the air alarm naming conventions + - bugfix: + Hopefully fixed persistent storages (though can't test this). Locations + of storages are up for debate but given the location of the qpad, I think cargo + could benefit from a transit tube in future updates + - bugfix: + "Fixed the terrain below medical that was having shields generated on + it (lost the Sif look for now) - fix; Fixed the AI chamber wiring being back to front and causing the AI to die - at round start' - - bugfix: Fixed some powernet sensors that weren't connected to the subgrids properly - and added a distinction for outpost R-UST Input and Output grids. Deleted a - doubled up engineering sensor. - - maptweak: Remapped the supermatter cold loop to be a bit more beginner-friendly - for modifications as well as making it flow better normally. Feel free to play - with the setup in-round though! - - maptweak: Replaced two Nitrogen canisters with phoron canisters in the supermatter - gas storage (4 nitrogen 4 phoron to 2 nitrogen 6 phoron). Nitrogen gets used - a lot more rarely and surprisingly few phoron canisters about. This should be - a better QoL change for SM engines. - - maptweak: Replaced engineering's advanced shield equipment with basic ones, so - cargo still had one more reason to exist. - - maptweak: Recoloured the secondary engine output wires from pink to yellow to - differentiate it from the primary engine. This will be particularly useful later - with plans I have for shield gens at some point-. Also recoloured the coils - left for setup to cyan and yellow to match the wires in use in that area. - - maptweak: Closed off a few drop vore spots that allowed too easy access to restricted - areas with glass. You can still see and break in to eat people but no easy dropping - in and printing whatever you want off the protolathe. Some less secure spots - are left unprotected and have some lattices to allow escape, and I did the same - with the public area spots as well. - - maptweak: Rewired the solar APCs to run off mains so they don't shut down the - airlocks when solars aren't working. Added an extra coil to the Eastern SMES - to allow them to cope with the additional load from the extra arrays. - - maptweak: Gave the bar pretty see-through shutters so it looks less industrial - while closed - - maptweak: Replaced the SM doors and blast doors with ones that shouldn't melt - so easy this time. Also the doors should be obvious that they're bolted now. - - maptweak: Set the secondary engine power supply SMES output to off at round start - so it doesn't drain all it's power before the second engine can be set up. + fix; Fixed the AI chamber wiring being back to front and causing the AI to die + at round start" + - bugfix: + Fixed some powernet sensors that weren't connected to the subgrids properly + and added a distinction for outpost R-UST Input and Output grids. Deleted a + doubled up engineering sensor. + - maptweak: + Remapped the supermatter cold loop to be a bit more beginner-friendly + for modifications as well as making it flow better normally. Feel free to play + with the setup in-round though! + - maptweak: + Replaced two Nitrogen canisters with phoron canisters in the supermatter + gas storage (4 nitrogen 4 phoron to 2 nitrogen 6 phoron). Nitrogen gets used + a lot more rarely and surprisingly few phoron canisters about. This should be + a better QoL change for SM engines. + - maptweak: + Replaced engineering's advanced shield equipment with basic ones, so + cargo still had one more reason to exist. + - maptweak: + Recoloured the secondary engine output wires from pink to yellow to + differentiate it from the primary engine. This will be particularly useful later + with plans I have for shield gens at some point-. Also recoloured the coils + left for setup to cyan and yellow to match the wires in use in that area. + - maptweak: + Closed off a few drop vore spots that allowed too easy access to restricted + areas with glass. You can still see and break in to eat people but no easy dropping + in and printing whatever you want off the protolathe. Some less secure spots + are left unprotected and have some lattices to allow escape, and I did the same + with the public area spots as well. + - maptweak: + Rewired the solar APCs to run off mains so they don't shut down the + airlocks when solars aren't working. Added an extra coil to the Eastern SMES + to allow them to cope with the additional load from the extra arrays. + - maptweak: + Gave the bar pretty see-through shutters so it looks less industrial + while closed + - maptweak: + Replaced the SM doors and blast doors with ones that shouldn't melt + so easy this time. Also the doors should be obvious that they're bolted now. + - maptweak: + Set the secondary engine power supply SMES output to off at round start + so it doesn't drain all it's power before the second engine can be set up. TheCaramelion: - - rscadd: Food replicator machine - - qol: Graffitis will take your mouse position now + - rscadd: Food replicator machine + - qol: Graffitis will take your mouse position now Verkister: - - qol: Disabled bellysprite vis plane separation until a less destructive method - for hiding other people's bellysprites is available. + - qol: + Disabled bellysprite vis plane separation until a less destructive method + for hiding other people's bellysprites is available. tacoguy7765093: - - maptweak: Removed floating button in medbay maints - - maptweak: Reduced steel/glass in all 4 tool staroages having more material then - engineering - - maptweak: Replaced chemistry roof catwalks with plating, as players could 'climb - down through' catwalks - - maptweak: Removed ERT level hardsuits for janitors (Why do janitors have hardsuits - in the first place??) - - maptweak: Replaces SPACE STON 13 with generic NT logo for now - - maptweak: Makes 'public suit cyclers' actually public - - maptweak: Makes medbay less G R E E N - - maptweak: Removed floating medbay chunk - - maptweak: Xenobio airlocks work now - - bugfix: Fixes radio being broadcasted twice + - maptweak: Removed floating button in medbay maints + - maptweak: + Reduced steel/glass in all 4 tool staroages having more material then + engineering + - maptweak: + Replaced chemistry roof catwalks with plating, as players could 'climb + down through' catwalks + - maptweak: + Removed ERT level hardsuits for janitors (Why do janitors have hardsuits + in the first place??) + - maptweak: Replaces SPACE STON 13 with generic NT logo for now + - maptweak: Makes 'public suit cyclers' actually public + - maptweak: Makes medbay less G R E E N + - maptweak: Removed floating medbay chunk + - maptweak: Xenobio airlocks work now + - bugfix: Fixes radio being broadcasted twice 2024-09-26: Kashargul: - - bugfix: some runtimes + - bugfix: some runtimes 2024-09-27: TheCaramelion: - - bugfix: Food replicator will use the right amount of nutriment + - bugfix: Food replicator will use the right amount of nutriment 2024-09-28: CHOMPStation2: - - bugfix: Conveyors no longer move jan hud objects - - rscadd: You can now dissipate AI holograms by attacking them. - - qol: laserdome now has holoprojectors to provide some info about the location - and the two arenas, also added floor markings and touched up the stores and - restaurant, plus some other touchups + - bugfix: Conveyors no longer move jan hud objects + - rscadd: You can now dissipate AI holograms by attacking them. + - qol: + laserdome now has holoprojectors to provide some info about the location + and the two arenas, also added floor markings and touched up the stores and + restaurant, plus some other touchups Kashargul: - - bugfix: PA crates will only check for either CE or science access + - bugfix: PA crates will only check for either CE or science access TheCaramelion: - - code_imp: Graffitis make sure there's an icon before attempting to Blend() + - code_imp: Graffitis make sure there's an icon before attempting to Blend() 2024-09-29: Kashargul: - - qol: moves captured soul projections to a new plane - - bugfix: soulcatcher SR vision - - rscadd: ATMOS holo-combifan projector to engiborgs - - rscadd: PENLITE barrier projector to crisisborgs + - qol: moves captured soul projections to a new plane + - bugfix: soulcatcher SR vision + - rscadd: ATMOS holo-combifan projector to engiborgs + - rscadd: PENLITE barrier projector to crisisborgs 2024-09-30: CHOMPStation2: - - rscadd: You can now choose your own runechat color. - - rscadd: You can now turn on automatic punctuation for say messages. + - rscadd: You can now choose your own runechat color. + - rscadd: You can now turn on automatic punctuation for say messages. Kashargul: - - bugfix: naming of the pme ch and player narrate ch input windows + - bugfix: naming of the pme ch and player narrate ch input windows TheCaramelion: - - rscadd: New junk mail in the mail - - balance: Severely reduced the chance of receveing non-job goodies - - balance: Slightly raised the mail per minute - - rscadd: Slightly raised the chance of special goodies - - qol: Mail bags can hold contraband packages now + - rscadd: New junk mail in the mail + - balance: Severely reduced the chance of receveing non-job goodies + - balance: Slightly raised the mail per minute + - rscadd: Slightly raised the chance of special goodies + - qol: Mail bags can hold contraband packages now tacoguy7765093: - - code_imp: Modularizes the VR map. - - maptweak: VR map is latest. + - code_imp: Modularizes the VR map. + - maptweak: VR map is latest. diff --git a/html/changelogs_ch/archive/2024-10.yml b/html/changelogs_ch/archive/2024-10.yml index e5ca7c26c6..f49da19c95 100644 --- a/html/changelogs_ch/archive/2024-10.yml +++ b/html/changelogs_ch/archive/2024-10.yml @@ -1,300 +1,335 @@ 2024-10-01: Missile597: - - rscadd: Added shield diffusers to airlocks at the docks - - rscadd: Added shield diffusers around a few point defence turrets so that their - diagonal angles don't get blocked off by shields. - - rscadd: Added a powernet sensor for the mains (master) grid and tweaked the names - of a few others. - - rscadd: Added a few meters onto pipes in the supermatter engine that could be - useful, and I forgot to add some before - - rscdel: Trimmed some redundant wires around shield gens - - qol: Increased the amount of signs around shield gen rooms to make them more obvious - and easier to find - - balance: Closed the hole above misc science with glass for the meantime to prevent - easy break-ins - - bugfix: Added terminals to the cell rack PSU's in engineering so they can actually - recharge now. Removed a few of them though cause they had way too many. - - bugfix: Fixed the shutters in Xenobio to be solid and opaque instead of see through - at round start. - - bugfix: Fixed the oxygen tank in atmos that had the vent and injector the wrong - way around - - bugfix: Fixed a valve and adaptor that were the wrong way around in the command - emergency atmos station - - maptweak: Remapped the centre shield gen spot to be ready to hook up to mains - - maptweak: Remapped the secondary engine airlock to be a bit more effective at - cycling in AND out without wasting air (hopefully). - - maptweak: Properly isolated the dorms area with it's own private distro and returned - the southern side of the map to the distro loop which had been previously disconnected - (previously dorms were still connected to the southern station parts including - parts of medical, but the whole of these rooms were cut off from distro. Now - it's all reconnected except specifically deck 3's dorm rooms which feed from - their own atmos tank) - - maptweak: Replaced the air tank in engineering's suit storage with an oxygen tank - so it can be used for internals refill - - spellcheck: Fixed a typo in the CE office, RIP emergecny bag of holding + - rscadd: Added shield diffusers to airlocks at the docks + - rscadd: + Added shield diffusers around a few point defence turrets so that their + diagonal angles don't get blocked off by shields. + - rscadd: + Added a powernet sensor for the mains (master) grid and tweaked the names + of a few others. + - rscadd: + Added a few meters onto pipes in the supermatter engine that could be + useful, and I forgot to add some before + - rscdel: Trimmed some redundant wires around shield gens + - qol: + Increased the amount of signs around shield gen rooms to make them more obvious + and easier to find + - balance: + Closed the hole above misc science with glass for the meantime to prevent + easy break-ins + - bugfix: + Added terminals to the cell rack PSU's in engineering so they can actually + recharge now. Removed a few of them though cause they had way too many. + - bugfix: + Fixed the shutters in Xenobio to be solid and opaque instead of see through + at round start. + - bugfix: + Fixed the oxygen tank in atmos that had the vent and injector the wrong + way around + - bugfix: + Fixed a valve and adaptor that were the wrong way around in the command + emergency atmos station + - maptweak: Remapped the centre shield gen spot to be ready to hook up to mains + - maptweak: + Remapped the secondary engine airlock to be a bit more effective at + cycling in AND out without wasting air (hopefully). + - maptweak: + Properly isolated the dorms area with it's own private distro and returned + the southern side of the map to the distro loop which had been previously disconnected + (previously dorms were still connected to the southern station parts including + parts of medical, but the whole of these rooms were cut off from distro. Now + it's all reconnected except specifically deck 3's dorm rooms which feed from + their own atmos tank) + - maptweak: + Replaced the air tank in engineering's suit storage with an oxygen tank + so it can be used for internals refill + - spellcheck: Fixed a typo in the CE office, RIP emergecny bag of holding 2024-10-02: CHOMPStation2: - - balance: Hanner no longer have NO_SCAN. - - qol: face of glamour uses a new pref, allow_mimicry - - qol: domination no longer checks resleeve lock - - qol: morph uses new pref, allow _mimicry, - - rscadd: The Grower Pod now shows progress bars when you examine it. + - balance: Hanner no longer have NO_SCAN. + - qol: face of glamour uses a new pref, allow_mimicry + - qol: domination no longer checks resleeve lock + - qol: morph uses new pref, allow _mimicry, + - rscadd: The Grower Pod now shows progress bars when you examine it. Darlantanis: - - bugfix: adds missing vore init check to kelpie + - bugfix: adds missing vore init check to kelpie 2024-10-03: CHOMPStation2: - - qol: fixed a stray pixel on the inner thighs marking - - rscadd: new inner thighs marking + - qol: fixed a stray pixel on the inner thighs marking + - rscadd: new inner thighs marking Darlantanis: - - bugfix: fixes kelpie init again + - bugfix: fixes kelpie init again FluffMedic: - - bugfix: fixes some null messaging + - bugfix: fixes some null messaging NickBelmont: - - rscadd: Belch chance parameter to the interactions tab of the vorepanel - - rscadd: Prey resisting can trigger a belch emote if interactions are set up to - allow it. + - rscadd: Belch chance parameter to the interactions tab of the vorepanel + - rscadd: + Prey resisting can trigger a belch emote if interactions are set up to + allow it. TheCaramelion: - - maptweak: Fixes tape spawning in place of recording tape + - maptweak: Fixes tape spawning in place of recording tape 2024-10-04: Asher-42: - - qol: swapped chest transparency toggle for proteans to make everything but their - head stransparent to allow for a metal shell. + - qol: + swapped chest transparency toggle for proteans to make everything but their + head stransparent to allow for a metal shell. CHOMPStation2: - - bugfix: Tooltips in the body scanner now work again. - - bugfix: The patient monitor/OR console has a scrollbar that works now. - - bugfix: Resleeving console OOC notes no longer overflow and a bunch of other random - little things - - bugfix: Medical records console has a proper scroller now. + - bugfix: Tooltips in the body scanner now work again. + - bugfix: The patient monitor/OR console has a scrollbar that works now. + - bugfix: + Resleeving console OOC notes no longer overflow and a bunch of other random + little things + - bugfix: Medical records console has a proper scroller now. Kashargul: - - bugfix: runtime flood from graffiti and makes them persist properly - - bugfix: pitcher plant vore excludes - - bugfix: mails have colours again - - bugfix: icon overflow on mail - - bugfix: nulls being passable after the tgui input selection + - bugfix: runtime flood from graffiti and makes them persist properly + - bugfix: pitcher plant vore excludes + - bugfix: mails have colours again + - bugfix: icon overflow on mail + - bugfix: nulls being passable after the tgui input selection TheGreatKitsune: - - bugfix: Removed ability for ghosts to make sound with bags. + - bugfix: Removed ability for ghosts to make sound with bags. 2024-10-05: CHOMPStation2: - - refactor: Belly message formatting has been unified into one proc. - - rscadd: 'All formatted belly messages can now use a number of new %replacements, - which choose from a list of preset words. You can see all of the words that - will be used in a new help menu next to the belly description, but this PR adds - the following: %goo, %happybelly, %fat, %dick, %boob, %pussy, %grip, %cozy, - %angry, %acid, %snack, %hot' - - rscadd: For example, %goo will be replaced randomly with "muck", or "goo", or - "sludge", or "slime", or another 10 different options - this random replacement - happens every time a message is printed, so it's really helpful for idle messages! - - bugfix: NanoMap components (air alarm computer, crew monitor) have been much improved. - - bugfix: You can now use W/S and Up Arrow/Down Arrow to zoom on a NanoMap. - - bugfix: NanoMap zooming should be centered more correctly. - - bugfix: Tooltips show up when hovering over icons in a NanoMap. - - bugfix: The Atmospherics Control interface occasionally started to scroll weirdly - in map ivew. - - qol: The R&D Console has had a major facelift! - - bugfix: The R&D Console will no longer automatically pop open it's UI against - your will when it's done building stuff. + - refactor: Belly message formatting has been unified into one proc. + - rscadd: + "All formatted belly messages can now use a number of new %replacements, + which choose from a list of preset words. You can see all of the words that + will be used in a new help menu next to the belly description, but this PR adds + the following: %goo, %happybelly, %fat, %dick, %boob, %pussy, %grip, %cozy, + %angry, %acid, %snack, %hot" + - rscadd: + For example, %goo will be replaced randomly with "muck", or "goo", or + "sludge", or "slime", or another 10 different options - this random replacement + happens every time a message is printed, so it's really helpful for idle messages! + - bugfix: NanoMap components (air alarm computer, crew monitor) have been much improved. + - bugfix: You can now use W/S and Up Arrow/Down Arrow to zoom on a NanoMap. + - bugfix: NanoMap zooming should be centered more correctly. + - bugfix: Tooltips show up when hovering over icons in a NanoMap. + - bugfix: + The Atmospherics Control interface occasionally started to scroll weirdly + in map ivew. + - qol: The R&D Console has had a major facelift! + - bugfix: + The R&D Console will no longer automatically pop open it's UI against + your will when it's done building stuff. Kashargul: - - rscadd: bluespace disruptor for admin event use - - bugfix: AI shells getting out of sync with the AI during ion storms - - qol: better styling of the vorepanel - - bugfix: a rare crash condition after reloading bellies - - bugfix: Bodycam screen view now updates on move + - rscadd: bluespace disruptor for admin event use + - bugfix: AI shells getting out of sync with the AI during ion storms + - qol: better styling of the vorepanel + - bugfix: a rare crash condition after reloading bellies + - bugfix: Bodycam screen view now updates on move TheCaramelion: - - bugfix: Removed a default object from the junk mail - - bugfix: Verb vote placed in the correct verb panel location + - bugfix: Removed a default object from the junk mail + - bugfix: Verb vote placed in the correct verb panel location 2024-10-06: Hunter-Dovetail: - - rscadd: hippo_head body marking! + - rscadd: hippo_head body marking! Kashargul: - - bugfix: chomp specific auto transfer dest placeholder + - bugfix: chomp specific auto transfer dest placeholder TheCaramelion: - - bugfix: Geneticist now gain PTO + - bugfix: Geneticist now gain PTO 2024-10-07: CHOMPStation2: - - rscadd: Circuit assemblies now use a visual coding system. + - rscadd: Circuit assemblies now use a visual coding system. FluffMedic: - - rscadd: The planet of Tyr, an anomalous valley landing spot. Replacement for valley. - Beta stage + - rscadd: + The planet of Tyr, an anomalous valley landing spot. Replacement for valley. + Beta stage TheCaramelion: - - qol: Heads of staff now use time instead of whitelists + - qol: Heads of staff now use time instead of whitelists 2024-10-08: FluffMedic: - - bugfix: fixes a tyr softlock, and planetary turf things + - bugfix: fixes a tyr softlock, and planetary turf things Kashargul: - - code_imp: converts our spans - - qol: phased kin can now be clicked + - code_imp: converts our spans + - qol: phased kin can now be clicked 2024-10-09: tacoguy7765093: - - rscadd: Head positions have anti job camping now + - rscadd: Head positions have anti job camping now 2024-10-10: Kashargul: - - bugfix: missing subcategory in tyr crafting leading to crafting UI crashes + - bugfix: missing subcategory in tyr crafting leading to crafting UI crashes 2024-10-11: FluffMedic: - - rscadd: A new hidden boss has been added to Tyr, - - balance: Some Tyr items and creatures have been altered + - rscadd: A new hidden boss has been added to Tyr, + - balance: Some Tyr items and creatures have been altered Kashargul: - - code_imp: database query deletion fix + - code_imp: database query deletion fix Missile597: - - rscadd: Added reaction for Paralysing Fluid - - rscadd: Added reaction for Numbing Enzyme - - rscadd: Added reaction for Deuterium solidification - - balance: Reduced the cost of the SMES coil crates. Standard coils are changed - 75 -> 20. Upgraded coils are changed 90 -> 35 + - rscadd: Added reaction for Paralysing Fluid + - rscadd: Added reaction for Numbing Enzyme + - rscadd: Added reaction for Deuterium solidification + - balance: + Reduced the cost of the SMES coil crates. Standard coils are changed + 75 -> 20. Upgraded coils are changed 90 -> 35 2024-10-12: Hunter-Dovetail: - - rscadd: VBO_maw23 - - rscadd: VBOanim_belly8 - - rscadd: VBOanim_belly9 - - rscadd: VBOanim_belly10 + - rscadd: VBO_maw23 + - rscadd: VBOanim_belly8 + - rscadd: VBOanim_belly9 + - rscadd: VBOanim_belly10 TheCaramelion: - - balance: Adjusted the time needed for various job positions + - balance: Adjusted the time needed for various job positions 2024-10-13: CHOMPStation2: - - rscadd: '%digestedprey in a belly message will give the number of prey digested - in that specific belly in the same shift.' - - rscadd: The mechanical vore preferences UI is now in dark mode and is color coded - to easily distinguish yes and no - - rscadd: Crew Manifest now uses pretty TGUI in lobby and for ghosts. - - rscadd: 'The latest and greatest from the hit studio TotallyNotMalware:tm:, Fishy - Fishy 905:tm: has been brought to a local NtOS:tm: software repository near - you. (It''s a stardew valley fishing minigame!)' - - bugfix: Just clicking on a port will no longer crash the circuit UI - - qol: Removed broken click to connect ports, UI now expects you to always hold - down the mouse button while connecting ports - - rscadd: ATMs now use a fancy new UI + - rscadd: + "%digestedprey in a belly message will give the number of prey digested + in that specific belly in the same shift." + - rscadd: + The mechanical vore preferences UI is now in dark mode and is color coded + to easily distinguish yes and no + - rscadd: Crew Manifest now uses pretty TGUI in lobby and for ghosts. + - rscadd: + "The latest and greatest from the hit studio TotallyNotMalware:tm:, Fishy + Fishy 905:tm: has been brought to a local NtOS:tm: software repository near + you. (It's a stardew valley fishing minigame!)" + - bugfix: Just clicking on a port will no longer crash the circuit UI + - qol: + Removed broken click to connect ports, UI now expects you to always hold + down the mouse button while connecting ports + - rscadd: ATMs now use a fancy new UI Kashargul: - - qol: moves all belly dmis to datums to get the icon cache path from + - qol: moves all belly dmis to datums to get the icon cache path from 2024-10-14: CHOMPStation2: - - rscadd: You can now modify internal tank settings from the RIG UI. - - qol: RIG UI top buttons shifted about and minimized. + - rscadd: You can now modify internal tank settings from the RIG UI. + - qol: RIG UI top buttons shifted about and minimized. tacoguy7765093: - - maptweak: Fixed area issues and maphelpers in the lone home shuttle + - maptweak: Fixed area issues and maphelpers in the lone home shuttle 2024-10-15: AzulKitsune: - - bugfix: 'fixed the size implant not supporting larger/smaller sizes in dorms. + - bugfix: + "fixed the size implant not supporting larger/smaller sizes in dorms. - :cl:' + :cl:" CHOMPStation2: - - rscadd: TGUI Say now has a slider for how tall you want the window to be by default. - - rscadd: TGUI Say can now be disabled just for me/subtle. + - rscadd: TGUI Say now has a slider for how tall you want the window to be by default. + - rscadd: TGUI Say can now be disabled just for me/subtle. FluffMedic: - - qol: made tyr caverns caverns + - qol: made tyr caverns caverns Kashargul: - - rscdel: old assembly UI + - rscdel: old assembly UI TheCaramelion: - - maptweak: Revamped Chemistry - - maptweak: Revamped Patient rooms - - maptweak: Revamped Destillery room - - maptweak: Revamped Medical storage - - maptweak: Virology is now on Deck 2 - - maptweak: Genetics is now on Deck 2 - - maptweak: Morgue is now on Deck 1 - - maptweak: Cryo has been expanded - - maptweak: Medical has now two scanners and two sleepers - - rscadd: Added "salvage items" that can be found with mobs or in specific PoIs - - balance: Reduced the amount of guns and weapons found in exploration Pois + - maptweak: Revamped Chemistry + - maptweak: Revamped Patient rooms + - maptweak: Revamped Destillery room + - maptweak: Revamped Medical storage + - maptweak: Virology is now on Deck 2 + - maptweak: Genetics is now on Deck 2 + - maptweak: Morgue is now on Deck 1 + - maptweak: Cryo has been expanded + - maptweak: Medical has now two scanners and two sleepers + - rscadd: Added "salvage items" that can be found with mobs or in specific PoIs + - balance: Reduced the amount of guns and weapons found in exploration Pois 2024-10-17: Etheo: - - bugfix: Fixed Marish to be better and more lore accurate. + - bugfix: Fixed Marish to be better and more lore accurate. tacoguy7765093: - - rscadd: Added a new outsider pod called SecondLifeBar with nearly every scene - tool. + - rscadd: + Added a new outsider pod called SecondLifeBar with nearly every scene + tool. 2024-10-18: CHOMPStation2: - - rscadd: The entire upper right quadrant of the game window has been replaced with - a new stat/verb panel that doesn't lag the client to death. - - rscadd: Verdigris, an in-tree rust module - responsible for cellular automata - currently, and more soon! - - rscadd: Server starts faster thanks to Verdigris generating ore turfs much faster. + - rscadd: + The entire upper right quadrant of the game window has been replaced with + a new stat/verb panel that doesn't lag the client to death. + - rscadd: + Verdigris, an in-tree rust module - responsible for cellular automata + currently, and more soon! + - rscadd: Server starts faster thanks to Verdigris generating ore turfs much faster. 2024-10-19: CHOMPStation2: - - rscadd: Action buttons now have a mouse cursor override when being dragged to - show where you will drop them. - - bugfix: You can actually move action buttons around again and they'll stay there, - until you shift-click on them. + - rscadd: + Action buttons now have a mouse cursor override when being dragged to + show where you will drop them. + - bugfix: + You can actually move action buttons around again and they'll stay there, + until you shift-click on them. Kashargul: - - bugfix: prussian blue in the chomp override + - bugfix: prussian blue in the chomp override TheCaramelion: - - maptweak: Places lights on Distillery, Chemistry and Cryo - - maptweak: Genetics receiving all items throw into disposals - - maptweak: Replaced roller beds next to the scanners - - maptweak: Fixed virology door buttons - - maptweak: Changed wrong tables in Genetics and Chemistry - - maptweak: Manifold in Distillery is now hidden + - maptweak: Places lights on Distillery, Chemistry and Cryo + - maptweak: Genetics receiving all items throw into disposals + - maptweak: Replaced roller beds next to the scanners + - maptweak: Fixed virology door buttons + - maptweak: Changed wrong tables in Genetics and Chemistry + - maptweak: Manifold in Distillery is now hidden 2024-10-21: BigBadE: - - rscadd: Gryphon simplemob with sprites, bellies, and a custom AI - - bugfix: Properly made check_vore work for lazily loaded bellies - - bugfix: Fixed the double exclamation mark in the bump text - - image: Added the gryphon, belly, and throat sprites - - code_imp: Added a custom AI for the gryphon + - rscadd: Gryphon simplemob with sprites, bellies, and a custom AI + - bugfix: Properly made check_vore work for lazily loaded bellies + - bugfix: Fixed the double exclamation mark in the bump text + - image: Added the gryphon, belly, and throat sprites + - code_imp: Added a custom AI for the gryphon CHOMPStation2: - - bugfix: Runtime in rig/dropped - - rscadd: Overmap helm controls now show the ship in a little map element - - qol: Action buttons are slowly getting better. - - rscadd: Latejoin UI is now fancy TGUI + - bugfix: Runtime in rig/dropped + - rscadd: Overmap helm controls now show the ship in a little map element + - qol: Action buttons are slowly getting better. + - rscadd: Latejoin UI is now fancy TGUI ShadowLarkens: - - qol: Add bapi-dmm, a rust maploader, to reduce init time by 90 seconds. - - qol: Moved tracy init to before-world-New. - - rscdel: No more pretending to support map rotation + - qol: Add bapi-dmm, a rust maploader, to reduce init time by 90 seconds. + - qol: Moved tracy init to before-world-New. + - rscdel: No more pretending to support map rotation 2024-10-22: Darlantanis: - - bugfix: makes leopardmander maw autotransfer functional + - bugfix: makes leopardmander maw autotransfer functional 2024-10-23: CHOMPStation2: - - bugfix: Crew manifest not showing up + - bugfix: Crew manifest not showing up Darlantanis: - - bugfix: fixes slug death state + - bugfix: fixes slug death state 2024-10-24: ShadowLarkens: - - bugfix: Better error handling in bapi-dmm + - bugfix: Better error handling in bapi-dmm 2024-10-26: Kashargul: - - qol: marish language back to pink + - qol: marish language back to pink 2024-10-27: CHOMPStation2StaffMirrorBot: - - qol: The autolathe UI has been redesigned and optimized. - - rscadd: Legacy robot UIs replaced with Robotact, a new all-in-one UI for all things - robot. - - qol: Statpanel now uses /tg/'s latest styles and can have it's font size adjusted. - - rscadd: Action buttons are now able to be grouped and sorted under the new Action - Palette. + - qol: The autolathe UI has been redesigned and optimized. + - rscadd: + Legacy robot UIs replaced with Robotact, a new all-in-one UI for all things + robot. + - qol: Statpanel now uses /tg/'s latest styles and can have it's font size adjusted. + - rscadd: + Action buttons are now able to be grouped and sorted under the new Action + Palette. TheCaramelion: - - rscadd: Ghost costume - - rscadd: Candy bowls - - rscadd: THE costume box pile - - rscadd: Costume boxes - - rscadd: Candy bags - - maptweak: Candles, cobwebs, spiders, and candy all over the map. + - rscadd: Ghost costume + - rscadd: Candy bowls + - rscadd: THE costume box pile + - rscadd: Costume boxes + - rscadd: Candy bags + - maptweak: Candles, cobwebs, spiders, and candy all over the map. tacoguy7765093: - - maptweak: Fixes viro airlock and genetics disposals. + - maptweak: Fixes viro airlock and genetics disposals. 2024-10-28: CHOMPStation2StaffMirrorBot: - - rscadd: You can now deploy hardsuit helms over top of your normal headwear, the - same as magboots. + - rscadd: + You can now deploy hardsuit helms over top of your normal headwear, the + same as magboots. Kashargul: - - bugfix: xenoarch init ordern + - bugfix: xenoarch init ordern TheCaramelion: - - bugfix: Fixed halloween candy bowls becoming stuck + - bugfix: Fixed halloween candy bowls becoming stuck 2024-10-29: CHOMPStation2StaffMirrorBot: - - bugfix: Alt-click menu is visually correct again - - bugfix: Clicking on an embedded controller in the alt click menu no longer runtimes - - bugfix: Clicking on a mob in the alt click menu now works + - bugfix: Alt-click menu is visually correct again + - bugfix: Clicking on an embedded controller in the alt click menu no longer runtimes + - bugfix: Clicking on a mob in the alt click menu now works 2024-10-31: Hunter-Dovetail: - - rscadd: VBO_maw24 - - rscadd: VBO_maw25 - - rscadd: '"trex_upperjaw"' - - rscadd: '"trex_lowerjaw"' - - bugfix: VBOanim_belly9 - - bugfix: VBOanim_belly10 - - bugfix: full_hippohead (sprite) + - rscadd: VBO_maw24 + - rscadd: VBO_maw25 + - rscadd: '"trex_upperjaw"' + - rscadd: '"trex_lowerjaw"' + - bugfix: VBOanim_belly9 + - bugfix: VBOanim_belly10 + - bugfix: full_hippohead (sprite) Kazzc: - - code_imp: adds relic base for unit tests with some fixed issues on that map to - make it pass - - code_imp: fix pirate gun using a global local list... - - bugfix: multiple init_vore procs not being sane - - bugfix: seasonal autumn flora using the wrong name + - code_imp: + adds relic base for unit tests with some fixed issues on that map to + make it pass + - code_imp: fix pirate gun using a global local list... + - bugfix: multiple init_vore procs not being sane + - bugfix: seasonal autumn flora using the wrong name diff --git a/html/changelogs_ch/archive/2024-11.yml b/html/changelogs_ch/archive/2024-11.yml index 647f882515..39fb435dc8 100644 --- a/html/changelogs_ch/archive/2024-11.yml +++ b/html/changelogs_ch/archive/2024-11.yml @@ -1,171 +1,195 @@ 2024-11-01: Hunter-Dovetail: - - bugfix: trex_upper/lowerjaw + - bugfix: trex_upper/lowerjaw Kashargul: - - bugfix: baby teppies can no longer be taken over, due to how growing self deletes - them - - bugfix: several MC crashes - - bugfix: runtimes in blob ids + - bugfix: + baby teppies can no longer be taken over, due to how growing self deletes + them + - bugfix: several MC crashes + - bugfix: runtimes in blob ids 2024-11-02: Kashargul: - - bugfix: command nika will no longer be invisible + - bugfix: command nika will no longer be invisible Raeschen: - - bugfix: Unathi min age increased to 40 for lore reasons + - bugfix: Unathi min age increased to 40 for lore reasons 2024-11-03: CHOMPStation2StaffMirrorBot: - - qol: fixed water cooler bottles being terrible and bad (they're now made out of - plastic and hold a lot more water) - - code_imp: Codebase is now capable of running under 516. - - qol: Atmospherics now uses /Initialize instead of /New. - - rscadd: 'Roboticist has a new alt title: Software Engineer - "A Software Engineer - specializes in working with software and firmware. They also often deal with - integrated circuits."' - - rscadd: 'Engineer has a new alt title: Computer Technician - "A Computer Technician - fulfills similar duties to other engineers, but specializes in working with - software and computers. They also often deal with integrated circuits."' - - bugfix: In-repo StrongDMM updated + - qol: + fixed water cooler bottles being terrible and bad (they're now made out of + plastic and hold a lot more water) + - code_imp: Codebase is now capable of running under 516. + - qol: Atmospherics now uses /Initialize instead of /New. + - rscadd: + 'Roboticist has a new alt title: Software Engineer - "A Software Engineer + specializes in working with software and firmware. They also often deal with + integrated circuits."' + - rscadd: + 'Engineer has a new alt title: Computer Technician - "A Computer Technician + fulfills similar duties to other engineers, but specializes in working with + software and computers. They also often deal with integrated circuits."' + - bugfix: In-repo StrongDMM updated Kashargul: - - bugfix: blob / protean ooc notes not properly transferring + - bugfix: blob / protean ooc notes not properly transferring Raeschen: - - bugfix: Increase Skrell min age to 19 + - bugfix: Increase Skrell min age to 19 2024-11-04: Kashargul: - - admin: fix shadekin vore smite + - admin: fix shadekin vore smite 2024-11-05: CHOMPStation2StaffMirrorBot: - - bugfix: Vore panel no longer overflows when inside panel description is really - long. - - bugfix: Smartfridge overflowing it's table with long names + - bugfix: + Vore panel no longer overflows when inside panel description is really + long. + - bugfix: Smartfridge overflowing it's table with long names Darlantanis: - - bugfix: rotten egg init no longer applies to unrotten eggs + - bugfix: rotten egg init no longer applies to unrotten eggs Kashargul: - - bugfix: playtime db writes + - bugfix: playtime db writes tesseracting: - - rscadd: Added two neutral traits for slower eating, standard and lesser. + - rscadd: Added two neutral traits for slower eating, standard and lesser. 2024-11-07: CHOMPStation2StaffMirrorBot: - - qol: makes ashtrays visible in map editors - - rscadd: added "modified" and "non-standard" variants of the hacktool, which have - different sprites to make them more obvious. the non-standard also starts in - hackmode - - qol: the hacker contraband set comes with the modified multitool - - qol: the modified multitool variant can spawn in abandoned crates slightly more - often at a slightly lower cost, as it's more obvious as contraband + - qol: makes ashtrays visible in map editors + - rscadd: + added "modified" and "non-standard" variants of the hacktool, which have + different sprites to make them more obvious. the non-standard also starts in + hackmode + - qol: the hacker contraband set comes with the modified multitool + - qol: + the modified multitool variant can spawn in abandoned crates slightly more + often at a slightly lower cost, as it's more obvious as contraband Darlantanis: - - qol: bliss no longer forces crawling + - qol: bliss no longer forces crawling FluffMedic: - - balance: nerfs airlock and closest mimics + - balance: nerfs airlock and closest mimics Kashargul: - - bugfix: fixes 2 missing vbo asset datums - - bugfix: blobs deleting their IDs + - bugfix: fixes 2 missing vbo asset datums + - bugfix: blobs deleting their IDs tacoguy7765093: - - maptweak: Door bolts should bolt instead of open doors now. - - maptweak: Fuel Depot is a valid spawn again - - maptweak: Overmap ships can dock on the station again - - maptweak: Replaced ERT level hardsuits in armory with security voidsuits, armory - rebalance coming soon. - - maptweak: Robotics can access tech storage again - - maptweak: Doubled the amount of vents at the large airlocks - - balance: 'red crowbar: 6 -> 10 damage' + - maptweak: Door bolts should bolt instead of open doors now. + - maptweak: Fuel Depot is a valid spawn again + - maptweak: Overmap ships can dock on the station again + - maptweak: + Replaced ERT level hardsuits in armory with security voidsuits, armory + rebalance coming soon. + - maptweak: Robotics can access tech storage again + - maptweak: Doubled the amount of vents at the large airlocks + - balance: "red crowbar: 6 -> 10 damage" 2024-11-08: CHOMPStation2StaffMirrorBot: - - qol: refactored headset IDs and misc. details, shouldn't be player-visible - - rscadd: added "earbud" headsets, which are the same as normal ones but invisible - on-mob + - qol: refactored headset IDs and misc. details, shouldn't be player-visible + - rscadd: + added "earbud" headsets, which are the same as normal ones but invisible + on-mob 2024-11-09: Kashargul: - - code_imp: finishes up the cell cleanup - - rscadd: fixed a wrong sprite state in the cjhound fullness 1 icon + - code_imp: finishes up the cell cleanup + - rscadd: fixed a wrong sprite state in the cjhound fullness 1 icon TheGreatKitsune: - - bugfix: Fixes a typo in text people will probably never see + - bugfix: Fixes a typo in text people will probably never see 2024-11-10: CHOMPStation2StaffMirrorBot: - - qol: restored syndie headset sprites + - qol: restored syndie headset sprites 2024-11-11: CHOMPStation2StaffMirrorBot: - - rscadd: added lockpicks, for opening simple_doors - - rscadd: added contraband scanner machine, which can sound an alarm if you walk - over it whilst carrying an illegal item - - qol: removed the redundant name/desc customize proc from the plain choker (just - use name/desc gear tweaks instead) + - rscadd: added lockpicks, for opening simple_doors + - rscadd: + added contraband scanner machine, which can sound an alarm if you walk + over it whilst carrying an illegal item + - qol: + removed the redundant name/desc customize proc from the plain choker (just + use name/desc gear tweaks instead) 2024-11-12: Kashargul: - - maptweak: fixes the sleep areas on SN to use the global defines + - maptweak: fixes the sleep areas on SN to use the global defines TomTyph: - - rscadd: Angel Halo hat in headgear loadout + - rscadd: Angel Halo hat in headgear loadout 2024-11-15: CHOMPStation2StaffMirrorBot: - - bugfix: adds missing arguments to recursive_content_check() + - bugfix: adds missing arguments to recursive_content_check() 2024-11-16: FluffMedic: - - rscadd: Added and altered some things on Tyr + - rscadd: Added and altered some things on Tyr tacoguy7765093: - - maptweak: Switched maps from Soluna Nexus to Southern Cross + - maptweak: Switched maps from Soluna Nexus to Southern Cross 2024-11-18: CHOMPStation2StaffMirrorBot: - - rscadd: added "salvage technician" alt title for engineer + - rscadd: added "salvage technician" alt title for engineer 2024-11-20: CHOMPStation2StaffMirrorBot: - - qol: climbing and swimming traits can now modify your speed of climbing and swimming - between z-levels, in addition to their standard functions - - rscadd: added "pro swimmer" trait, which increases your movespeed in water and - reduces time to traverse between water z-levels when swimming - - qol: akula now have 50% reduced z-swim time, as if they had the pro-swimmer trait - - qol: tajara and vasilissans now have 25% reduced ladder/climbing time, as if they - had the amateur climber trait - - qol: refactored rings, knuckledusters, bracelets, and watches into glove-attached - accessories (they can still be worn by themselves!) - - qol: bracelets are now worn on your hands/wrists rather than being in the neck - slot + - qol: + climbing and swimming traits can now modify your speed of climbing and swimming + between z-levels, in addition to their standard functions + - rscadd: + added "pro swimmer" trait, which increases your movespeed in water and + reduces time to traverse between water z-levels when swimming + - qol: akula now have 50% reduced z-swim time, as if they had the pro-swimmer trait + - qol: + tajara and vasilissans now have 25% reduced ladder/climbing time, as if they + had the amateur climber trait + - qol: + refactored rings, knuckledusters, bracelets, and watches into glove-attached + accessories (they can still be worn by themselves!) + - qol: + bracelets are now worn on your hands/wrists rather than being in the neck + slot Fracshun: - - qol: OOC Escape now works for most Mind Binder and Body Snatcher interactions + - qol: OOC Escape now works for most Mind Binder and Body Snatcher interactions 2024-11-21: Fracshun: - - rscadd: Mind binded monkey/mob cubes gain control of the rehydrated mob - - rscadd: Monkey/mob cubes when eaten can vore the rehydrated mob if spont pred - and food vore are enabled - - rscadd: Mind binded cigs/cigars correctly turn into cig butts when burnt out or - used in an ashtray + - rscadd: Mind binded monkey/mob cubes gain control of the rehydrated mob + - rscadd: + Monkey/mob cubes when eaten can vore the rehydrated mob if spont pred + and food vore are enabled + - rscadd: + Mind binded cigs/cigars correctly turn into cig butts when burnt out or + used in an ashtray 2024-11-22: CHOMPStation2: - - bugfix: Lighting is slightly faster to calculate + - bugfix: Lighting is slightly faster to calculate Hunter-Dovetail: - - rscadd: crocodile_upperjaw-head - - rscadd: VBO_maw26 - - bugfix: hippo_head-head - - bugfix: trex_upperjaw-head + - rscadd: crocodile_upperjaw-head + - rscadd: VBO_maw26 + - bugfix: hippo_head-head + - bugfix: trex_upperjaw-head 2024-11-23: Raeschen: - - refactor: min account age for head roles --> 31 days + - refactor: min account age for head roles --> 31 days 2024-11-26: Birdiest-Bird: - - bugfix: VR avatars no longer get mail from cargo + - bugfix: VR avatars no longer get mail from cargo FluffMedic: - - bugfix: fixed a floating APC on spider chapel + - bugfix: fixed a floating APC on spider chapel 2024-11-27: Fracshun: - - rscadd: Eating someone bound to a food item can spont pred them as nutrition with - food vore enabled - - rscadd: Eating someone bound to a food item will retain them as the trash item - if eaten with spont pred/food vore disabled - - bugfix: Eating someone bound to a food item no longer makes them astral project - as a ghost in the world + - rscadd: + Eating someone bound to a food item can spont pred them as nutrition with + food vore enabled + - rscadd: + Eating someone bound to a food item will retain them as the trash item + if eaten with spont pred/food vore disabled + - bugfix: + Eating someone bound to a food item no longer makes them astral project + as a ghost in the world 2024-11-28: Birdiest-Bird: - - rscadd: '*caw' - - sound: sound/voice/caw.ogg + - rscadd: "*caw" + - sound: sound/voice/caw.ogg 2024-11-29: CHOMPStation2StaffMirrorBot: - - rscadd: added recolourable fingerless gloves without the cutout - - maptweak: added shutters to SD and Tether cargo bay desks - - maptweak: reorganized the SD cargo office a little bit, for more shelf space up - front - - maptweak: Leggy has been relocated to the relative safety of the mining equipment - room, to reduce incidents of unscheduled spacewalks and to stop supply shuttles - engaging in leggybraking - - rscdel: The skill system is OUTTA HERE + - rscadd: added recolourable fingerless gloves without the cutout + - maptweak: added shutters to SD and Tether cargo bay desks + - maptweak: + reorganized the SD cargo office a little bit, for more shelf space up + front + - maptweak: + Leggy has been relocated to the relative safety of the mining equipment + room, to reduce incidents of unscheduled spacewalks and to stop supply shuttles + engaging in leggybraking + - rscdel: The skill system is OUTTA HERE 2024-11-30: CHOMPStation2StaffMirrorBot: - - bugfix: fixed talon headset options, and headset options for a bunch of event - outfits - - qol: cleaned up _vr files for jobs, moved cargo jobs into their own base dm. + - bugfix: + fixed talon headset options, and headset options for a bunch of event + outfits + - qol: cleaned up _vr files for jobs, moved cargo jobs into their own base dm. diff --git a/html/changelogs_ch/archive/2024-12.yml b/html/changelogs_ch/archive/2024-12.yml index 702f203b20..a4829199f7 100644 --- a/html/changelogs_ch/archive/2024-12.yml +++ b/html/changelogs_ch/archive/2024-12.yml @@ -1,176 +1,198 @@ 2024-12-01: CHOMPStation2StaffMirrorBot: - - qol: Strange Rocks can now generate Research Samples when broken apart. - - qol: Blender UI opens even when there's only one choice - - rscadd: Basic appliances (the mixer only I think?) now has a radial menu - - rscadd: Power/safety/change output buttons for cookers - - bugfix: Radial menus now layer properly - - refactor: Radial menus updated to /tg/ latest - - rscadd: Microwave UI now tells you what it's going to make... or at least try - to make - - rscadd: pAI cards put into a machine are allowed to attack_ai() their machine - - qol: capped the max hallucinations space ghosts can inflict with their attacks, - and reduced the amount applied - - qol: adjusted mining spawns on SD asteroids + - qol: Strange Rocks can now generate Research Samples when broken apart. + - qol: Blender UI opens even when there's only one choice + - rscadd: Basic appliances (the mixer only I think?) now has a radial menu + - rscadd: Power/safety/change output buttons for cookers + - bugfix: Radial menus now layer properly + - refactor: Radial menus updated to /tg/ latest + - rscadd: + Microwave UI now tells you what it's going to make... or at least try + to make + - rscadd: pAI cards put into a machine are allowed to attack_ai() their machine + - qol: + capped the max hallucinations space ghosts can inflict with their attacks, + and reduced the amount applied + - qol: adjusted mining spawns on SD asteroids 2024-12-02: CHOMPStation2StaffMirrorBot: - - qol: ZAS refactored a bit. + - qol: ZAS refactored a bit. 2024-12-04: Hunter-Dovetail: - - rscadd: dragon_upperjaw - - rscadd: dragon_lowerjaw - - rscadd: hippo_upperjaw - - rscadd: hippo_lowerjaw - - bugfix: VBO_maw26.dmi + - rscadd: dragon_upperjaw + - rscadd: dragon_lowerjaw + - rscadd: hippo_upperjaw + - rscadd: hippo_lowerjaw + - bugfix: VBO_maw26.dmi Kashargul: - - bugfix: some headset code from the refactor + - bugfix: some headset code from the refactor Missile597: - - maptweak: Added some lights in darker areas of medical - - maptweak: Fixed the genetics sorter so the lab is no longer a dumping ground and - deliveries will now work - - maptweak: Added a bottle of Adranol pills and a bottle of Mutagen to give some - starting chems and hints for viro. Also added some phoron and a grinder for - same reason. - - maptweak: Added the sign by viro disposals reminding people that it goes into - space - - maptweak: Added the viro requests console back into viro - - maptweak: Fixed the chemistry tables - - maptweak: Finally moved Erik's Lungs out of the way - - maptweak: Added a flu culture to the maints loot with the cold culture - - maptweak: Adds droppers to viro - - maptweak: Replaced the chem dispenser in xenobotany with 2 bottles of Diethylamine - and 2 bottles of Mutagen - - maptweak: Removed xenobiology's chem dispenser and halved the starting phoron - stacks - - maptweak: Removed the chem master and dispenser from the science ship and replaced - it with an RnD console and Destructive analyser - - maptweak: Removed the chemistry lab in xenoarch - the lab already has a massive - coolant supply. Added a sulphuric acid dispenser in its place - - maptweak: Removes the crew monitor from xenoarch + - maptweak: Added some lights in darker areas of medical + - maptweak: + Fixed the genetics sorter so the lab is no longer a dumping ground and + deliveries will now work + - maptweak: + Added a bottle of Adranol pills and a bottle of Mutagen to give some + starting chems and hints for viro. Also added some phoron and a grinder for + same reason. + - maptweak: + Added the sign by viro disposals reminding people that it goes into + space + - maptweak: Added the viro requests console back into viro + - maptweak: Fixed the chemistry tables + - maptweak: Finally moved Erik's Lungs out of the way + - maptweak: Added a flu culture to the maints loot with the cold culture + - maptweak: Adds droppers to viro + - maptweak: + Replaced the chem dispenser in xenobotany with 2 bottles of Diethylamine + and 2 bottles of Mutagen + - maptweak: + Removed xenobiology's chem dispenser and halved the starting phoron + stacks + - maptweak: + Removed the chem master and dispenser from the science ship and replaced + it with an RnD console and Destructive analyser + - maptweak: + Removed the chemistry lab in xenoarch - the lab already has a massive + coolant supply. Added a sulphuric acid dispenser in its place + - maptweak: Removes the crew monitor from xenoarch 2024-12-05: Kashargul: - - bugfix: ai robot module list + - bugfix: ai robot module list 2024-12-06: CHOMPStation2StaffMirrorBot: - - rscadd: You can now de and reconstruct all parts of an airlock. - - rscadd: Ability to set tags on different airlock parts (button, sensor, vent pumps) - with a multitool. + - rscadd: You can now de and reconstruct all parts of an airlock. + - rscadd: + Ability to set tags on different airlock parts (button, sensor, vent pumps) + with a multitool. 2024-12-07: Kashargul: - - bugfix: liquid transfer not working when the partner's vorgan had no reagent datum - before - - bugfix: 'limit check respecting the belly reagent limit, not the character limit + - bugfix: + liquid transfer not working when the partner's vorgan had no reagent datum + before + - bugfix: + "limit check respecting the belly reagent limit, not the character limit - fix reagent transfer between borgs and simple mobs' + fix reagent transfer between borgs and simple mobs" 2024-12-08: CHOMPStation2StaffMirrorBot: - - bugfix: pilot, explorer and centcomm headset types having different functions + - bugfix: pilot, explorer and centcomm headset types having different functions 2024-12-09: CHOMPStation2StaffMirrorBot: - - bugfix: appearance changer sub windows showing for the wrong player - - bugfix: appearance changer not able to edit tail colour 3 and wing colour 3 - - bugfix: unusable sprite prototypes showing - - bugfix: trademark sign not working - - bugfix: multiple issues with the secondary ear slot - - bugfix: vore transform now checks the spont tf pref - - qol: borgs can easily toggle fake walls, curtains and take a look into others - mirrors - - qol: adjusted a slew of traffic events and added an assload of new generic ship - names, with most corps now using the generic names on top of their standard - lists - - rscdel: removed the ue-katish and vox marauders from events - - qol: removed widespread references to KHI, adjusting them to various appropriate - companies - - rscdel: purged the old busyspace module and replaced its contents entirely + - bugfix: appearance changer sub windows showing for the wrong player + - bugfix: appearance changer not able to edit tail colour 3 and wing colour 3 + - bugfix: unusable sprite prototypes showing + - bugfix: trademark sign not working + - bugfix: multiple issues with the secondary ear slot + - bugfix: vore transform now checks the spont tf pref + - qol: + borgs can easily toggle fake walls, curtains and take a look into others + mirrors + - qol: + adjusted a slew of traffic events and added an assload of new generic ship + names, with most corps now using the generic names on top of their standard + lists + - rscdel: removed the ue-katish and vox marauders from events + - qol: + removed widespread references to KHI, adjusting them to various appropriate + companies + - rscdel: purged the old busyspace module and replaced its contents entirely FluffMedic: - - rscadd: More things to Tyr + - rscadd: More things to Tyr 2024-12-10: CHOMPStation2StaffMirrorBot: - - rscadd: adds "Stowaway" hole, a spin on the classic maint pred that lets you spawn - as your current character slot + - rscadd: + adds "Stowaway" hole, a spin on the classic maint pred that lets you spawn + as your current character slot Kashargul: - - code_imp: converts the remaining old spans to defines + - code_imp: converts the remaining old spans to defines TheCaramelion: - - bugfix: Fixed wormholes spawning in dorms - - bugfix: Fixed Infected Room event not happening - - code_imp: Moved hoarde events into the modular folder - - balance: Removed 25% chance of hoarde event failing + - bugfix: Fixed wormholes spawning in dorms + - bugfix: Fixed Infected Room event not happening + - code_imp: Moved hoarde events into the modular folder + - balance: Removed 25% chance of hoarde event failing 2024-12-11: CHOMPStation2StaffMirrorBot: - - bugfix: lurkers can now spawn with a backpack (inc. their rig module, for protean - lurkers) - - qol: lurkers now spawn with 200 thalers + - bugfix: + lurkers can now spawn with a backpack (inc. their rig module, for protean + lurkers) + - qol: lurkers now spawn with 200 thalers 2024-12-12: CHOMPStation2StaffMirrorBot: - - bugfix: rig host assimilation - - rscadd: maint lurkers, pAIs, and simplemobs now show in the chardir - - bugfix: Alt click menu now works under 516 - - bugfix: Statbrowser scrollbar is colored correctly under 516 + - bugfix: rig host assimilation + - rscadd: maint lurkers, pAIs, and simplemobs now show in the chardir + - bugfix: Alt click menu now works under 516 + - bugfix: Statbrowser scrollbar is colored correctly under 516 2024-12-14: Kashargul: - - bugfix: pitchblende using the wrong name + - bugfix: pitchblende using the wrong name 2024-12-16: Asher-42: - - rscadd: Dullahan engineer chassis code and scaling issue. + - rscadd: Dullahan engineer chassis code and scaling issue. CHOMPStation2StaffMirrorBot: - - bugfix: proteans can no longer hide and rest. You only can do one or the other + - bugfix: proteans can no longer hide and rest. You only can do one or the other 2024-12-17: CHOMPStation2StaffMirrorBot: - - rscadd: adds descriptions to supply packs that are visible in the terminal when - viewing the pack info - - qol: changes the 'C' icon in the terminal to show "Info" - - qol: fixes a few stray crate access restrictions that were wrongly assigned compared - to others - - qol: cleans up some duplicate supply pack defs - - bugfix: Export chatlog works under 516 + - rscadd: + adds descriptions to supply packs that are visible in the terminal when + viewing the pack info + - qol: changes the 'C' icon in the terminal to show "Info" + - qol: + fixes a few stray crate access restrictions that were wrongly assigned compared + to others + - qol: cleans up some duplicate supply pack defs + - bugfix: Export chatlog works under 516 2024-12-21: CHOMPStation2StaffMirrorBot: - - bugfix: 516 chat flickering + - bugfix: 516 chat flickering 2024-12-23: Asher-42: - - rscadd: Added sloog ears - - rscadd: Added sloog shell - - rscadd: Added sloog taur body - - rscadd: Added sloog head + - rscadd: Added sloog ears + - rscadd: Added sloog shell + - rscadd: Added sloog taur body + - rscadd: Added sloog head CHOMPStation2StaffMirrorBot: - - qol: 516 clients are served an Edge-optimized bundle. + - qol: 516 clients are served an Edge-optimized bundle. Colfer1: - - bugfix: fixed exploit allowing vr users to escape into the real world + - bugfix: fixed exploit allowing vr users to escape into the real world Kashargul: - - admin: fix admin resize + - admin: fix admin resize tacoguy7765093: - - bugfix: paralysis toxin now commits paralysis. + - bugfix: paralysis toxin now commits paralysis. 2024-12-24: tacoguy7765093: - - maptweak: Fixed the SDF corvettes docking issues, + - maptweak: Fixed the SDF corvettes docking issues, 2024-12-27: Fracshun: - - qol: Death messages of the original body during Mob TF are now muffled - - bugfix: Body swapping no longer links life state + - qol: Death messages of the original body during Mob TF are now muffled + - bugfix: Body swapping no longer links life state 2024-12-28: CHOMPStation2StaffMirrorBot: - - rscadd: '"Launch" button to vore panel, ejects occupant and throws them three - tiles in the direction you''re facing.' + - rscadd: + '"Launch" button to vore panel, ejects occupant and throws them three + tiles in the direction you''re facing.' 2024-12-29: TheCaramelion: - - bugfix: fixed medical holo-barriers throwing false positives + - bugfix: fixed medical holo-barriers throwing false positives 2024-12-30: CHOMPStation2StaffMirrorBot: - - bugfix: 516 webroot css assets not working - - refactor: Sorted assets into their own files for cleanliness. + - bugfix: 516 webroot css assets not working + - refactor: Sorted assets into their own files for cleanliness. NickBelmont: - - rscadd: Timeclock app to the set of default PDA applications - - rscadd: AREA_ALLOW_CLOCKOUT flag for setting which areas allow players to clock - out using the pda timeclock + - rscadd: Timeclock app to the set of default PDA applications + - rscadd: + AREA_ALLOW_CLOCKOUT flag for setting which areas allow players to clock + out using the pda timeclock Scarlet-Oduko: - - rscadd: colorable no-antennae moth wings - - bugfix: Deathhead moth wings no longer visually clip in and out due to random - frame + - rscadd: colorable no-antennae moth wings + - bugfix: + Deathhead moth wings no longer visually clip in and out due to random + frame 2024-12-31: Kashargul: - - bugfix: apparently some fire issues + - bugfix: apparently some fire issues TheCaramelion: - - qol: Fire is a proper danger now - - rscadd: Electrical Fire event + - qol: Fire is a proper danger now + - rscadd: Electrical Fire event tacoguy7765093: - - rscadd: Added /effect/instantboom and subtypes for eventmins. + - rscadd: Added /effect/instantboom and subtypes for eventmins. diff --git a/html/changelogs_ch/archive/2025-01.yml b/html/changelogs_ch/archive/2025-01.yml index 64cbd5c0a0..a8a190e067 100644 --- a/html/changelogs_ch/archive/2025-01.yml +++ b/html/changelogs_ch/archive/2025-01.yml @@ -1,414 +1,488 @@ 2025-01-01: CHOMPStation2StaffMirrorBot: - - bugfix: record updates being applied without consent on ui close + - bugfix: record updates being applied without consent on ui close Missile597: - - rscadd: 'Added new materials to the biogenerator list: Diethylamine, Unstable - Mutagen, Plant-B-Gone, Table Salt, Soy Sauce, Flora Disk, Floral Somatoray, - Kudzu Seeds, Random Exotic Seeds' - - balance: Lowered the costs of the fertilisers and botany materials to make them - easier to obtain. After all, the department uses these a lot. + - rscadd: + "Added new materials to the biogenerator list: Diethylamine, Unstable + Mutagen, Plant-B-Gone, Table Salt, Soy Sauce, Flora Disk, Floral Somatoray, + Kudzu Seeds, Random Exotic Seeds" + - balance: + Lowered the costs of the fertilisers and botany materials to make them + easier to obtain. After all, the department uses these a lot. whooshboom: - - rscadd: 'Added keybinds from TGstation to engineering (Ctrl-click: Toggle, Alt-click: - Max)' + - rscadd: + "Added keybinds from TGstation to engineering (Ctrl-click: Toggle, Alt-click: + Max)" 2025-01-02: Asher-42: - - bugfix: adds modules to med solgov hardsuit, due to it using the wrong obj path. + - bugfix: adds modules to med solgov hardsuit, due to it using the wrong obj path. 2025-01-03: Aroliacue: - - maptweak: Patient rooms in medbay now have rad-shielding. + - maptweak: Patient rooms in medbay now have rad-shielding. Asher-42: - - bugfix: fixed small rpator miner/cargo sprites. + - bugfix: fixed small rpator miner/cargo sprites. CHOMPStation2StaffMirrorBot: - - bugfix: fixed sample containers being able to hold more samples if you use the - scoop functions + - bugfix: + fixed sample containers being able to hold more samples if you use the + scoop functions FluffMedic: - - rscadd: Added more stuff to Tyr - - rscadd: Some bonu stuff for wilderness + - rscadd: Added more stuff to Tyr + - rscadd: Some bonu stuff for wilderness SilencedMP5A5: - - rscadd: Assorted Event mobs - - rscadd: Some Event related turfs - - rscadd: Event mob related sounds - - rscadd: A bunch of related icons + - rscadd: Assorted Event mobs + - rscadd: Some Event related turfs + - rscadd: Event mob related sounds + - rscadd: A bunch of related icons 2025-01-04: CHOMPStation2StaffMirrorBot: - - qol: added consolidated versions of the campbell tattoos and modular longsock - markings - - rscadd: icon states for the black half-mask on vulp-base icons + - qol: + added consolidated versions of the campbell tattoos and modular longsock + markings + - rscadd: icon states for the black half-mask on vulp-base icons FluffMedic: - - bugfix: fixed t-12 and SR-25 Carbine ammo + - bugfix: fixed t-12 and SR-25 Carbine ammo Kashargul: - - bugfix: bonfire examine + - bugfix: bonfire examine whooshboom: - - qol: Reverts marish to audible condition. Happy marring! + - qol: Reverts marish to audible condition. Happy marring! 2025-01-05: CHOMPStation2StaffMirrorBot: - - bugfix: Drones now use robotact - - bugfix: A few byond:// hrefs for 516 + - bugfix: Drones now use robotact + - bugfix: A few byond:// hrefs for 516 FluffMedic: - - bugfix: Vepr Cell fix + - bugfix: Vepr Cell fix whooshboom: - - rscadd: Similar keybinds to the recent pump additions are now on most atmospheric - devices. - - bugfix: Fixes issue where using the keybind on a pump would not update the icon. + - rscadd: + Similar keybinds to the recent pump additions are now on most atmospheric + devices. + - bugfix: Fixes issue where using the keybind on a pump would not update the icon. 2025-01-06: CHOMPStation2StaffMirrorBot: - - qol: Tgui-say colors adjusted for better contrast - - qol: renamed antagonism tag and hid most of the options there as they're not relevant - for our purposes - - qol: adds mirrors to all resleeving and autoresleeving rooms - - rscadd: Fighter Exosuits now have landing gear. - - rscadd: Science can now build and assemble the Pinnace and Baron Fighter Exosuits. + - qol: Tgui-say colors adjusted for better contrast + - qol: + renamed antagonism tag and hid most of the options there as they're not relevant + for our purposes + - qol: adds mirrors to all resleeving and autoresleeving rooms + - rscadd: Fighter Exosuits now have landing gear. + - rscadd: Science can now build and assemble the Pinnace and Baron Fighter Exosuits. Kashargul: - - bugfix: over 10 known shadekin exploits... + - bugfix: over 10 known shadekin exploits... 2025-01-07: Kashargul: - - bugfix: arc vial projectiles not working + - bugfix: arc vial projectiles not working 2025-01-08: Aroliacue: - - bugfix: Fixed exosuit fighters having an additional 'stomp' stepsound. + - bugfix: Fixed exosuit fighters having an additional 'stomp' stepsound. Asher-42: - - rscadd: protean borg (dullahan) - - rscadd: dullahan command sprite thats job locked to protean / command only. + - rscadd: protean borg (dullahan) + - rscadd: dullahan command sprite thats job locked to protean / command only. Kashargul: - - bugfix: lingering fire now caps out at the fire max temp + - bugfix: lingering fire now caps out at the fire max temp aKromatopzia: - - image: smolraptors can curl up when resting; and miner lost its purple collar. + - image: smolraptors can curl up when resting; and miner lost its purple collar. whooshboom: - - rscadd: CO2 Breather trait, CO2 tanks, and loadout double-tanks. + - rscadd: CO2 Breather trait, CO2 tanks, and loadout double-tanks. 2025-01-09: FluffMedic: - - rscadd: Remove alien vests from tyr and added tyr version. Sprites WIP - - rscadd: Event BH mecha that spams random fire. - - balance: Tyr alien weapons are a smidhe better - - bugfix: Janus uses the right projectiles for phase 3 now - - bugfix: tyr spawn not being protected + - rscadd: Remove alien vests from tyr and added tyr version. Sprites WIP + - rscadd: Event BH mecha that spams random fire. + - balance: Tyr alien weapons are a smidhe better + - bugfix: Janus uses the right projectiles for phase 3 now + - bugfix: tyr spawn not being protected Kashargul: - - bugfix: reagents effects applying to the wrong mob types + - bugfix: reagents effects applying to the wrong mob types tacoguy7765093: - - rscadd: Added malignant organs, dangerous organs gotten through radiation and - random events needing surgery to remove. - - rscadd: Added engineered organs, applying organ lattices in mobs to be mutated - once fully grown. - - rscadd: Exotic organs can be sold via cargo. Freezer crate recommended. - - rscadd: Freezer crate for cargo has been added under the supply tab. + - rscadd: + Added malignant organs, dangerous organs gotten through radiation and + random events needing surgery to remove. + - rscadd: + Added engineered organs, applying organ lattices in mobs to be mutated + once fully grown. + - rscadd: Exotic organs can be sold via cargo. Freezer crate recommended. + - rscadd: Freezer crate for cargo has been added under the supply tab. 2025-01-10: Asher-42: - - bugfix: fixed the protean dullahan rest sprite for boob plate version + - bugfix: fixed the protean dullahan rest sprite for boob plate version CHOMPStation2StaffMirrorBot: - - code_imp: Massive overhaul to the backend of character creation. Any visible changes - are considered bugs. + - code_imp: + Massive overhaul to the backend of character creation. Any visible changes + are considered bugs. Kashargul: - - code_imp: cleans up event defines + - code_imp: cleans up event defines 2025-01-11: Asher-42: - - bugfix: fixed sloog head not coloring right. + - bugfix: fixed sloog head not coloring right. FluffMedic: - - rscadd: Removed Starhunter Challenge, put functional eclipse boss thing in its - place + - rscadd: + Removed Starhunter Challenge, put functional eclipse boss thing in its + place 2025-01-13: CHOMPStation2StaffMirrorBot: - - rscdel: removed vestigial Global tab in Character Setup, merged remaining pAI - setup functionality into Special Roles tab - - rscadd: added full chest fluff (vulp) and inner arms markings - - rscadd: Exosuit Fighters now have exclusive hull and armor types, with a faster - top speed at the cost of reduced durability. - - rscadd: Exosuit Fighters now have collision mechanics. Fly responsibly. - - rscadd: Exosuit Fighters have new enter sound effects and a special collision - effect. - - rscadd: Pinnace has been rebalanced into a weak, entry-level fighter. Has reduced - health compared to other fighters, but can mount weapons and fly in atmosphere. - - qol: altered gorka uniforms for less icon states and easier adding of new types, - added plain, service, and janitor subtypes - - rscadd: added 'can_remove' bool to accessories, which defaults to TRUE and does - exactly what it sounds like + - rscdel: + removed vestigial Global tab in Character Setup, merged remaining pAI + setup functionality into Special Roles tab + - rscadd: added full chest fluff (vulp) and inner arms markings + - rscadd: + Exosuit Fighters now have exclusive hull and armor types, with a faster + top speed at the cost of reduced durability. + - rscadd: Exosuit Fighters now have collision mechanics. Fly responsibly. + - rscadd: + Exosuit Fighters have new enter sound effects and a special collision + effect. + - rscadd: + Pinnace has been rebalanced into a weak, entry-level fighter. Has reduced + health compared to other fighters, but can mount weapons and fly in atmosphere. + - qol: + altered gorka uniforms for less icon states and easier adding of new types, + added plain, service, and janitor subtypes + - rscadd: + added 'can_remove' bool to accessories, which defaults to TRUE and does + exactly what it sounds like TheGreatKitsune: - - rscadd: Toggle verbs for growing/shrinking traits + - rscadd: Toggle verbs for growing/shrinking traits 2025-01-14: Kashargul: - - bugfix: catslugs can now actually use wawa + - bugfix: catslugs can now actually use wawa tacoguy7765093: - - rscadd: Added new sprite option for zorgoia simplemob. + - rscadd: Added new sprite option for zorgoia simplemob. 2025-01-15: CHOMPStation2StaffMirrorBot: - - bugfix: sheet snatcher being able to have larger than the capacity would allow - stacks inserted when being close to full and getting a new type - - bugfix: missing overrides in some robot guns + - bugfix: + sheet snatcher being able to have larger than the capacity would allow + stacks inserted when being close to full and getting a new type + - bugfix: missing overrides in some robot guns 2025-01-16: CHOMPStation2StaffMirrorBot: - - bugfix: runtimes when spam upgrading griders - - rscadd: Added Blob Spores symptom - - rscadd: Added vaccine bottles, sellable to CentCom in a freezer, made in the PanDEMIC - - rscadd: Added supply packs with normal and minor experimental diseases - - qol: PanDEMIC now takes syringes as well - - qol: Mobs may be picked as targets with Bluespace Sneeze - - qol: Many symptoms that affected carbon now affect mobs too - - balance: All diseases will cure themselves eventually, as the body works up immunity - - balance: Shuffled the list of cures for advanced diseases - - balance: PanDEMIC consumes 5 blood when making vaccines now - - balance: Reduced the health and damage of macrophages, adding more depending on - the disease they're based on - - balance: Macrophages now shrivel up when killed, leaving behind some of their - bits on the ground, or in someone's stomach if eaten. - - balance: Macrophages would rather go after non-infected people - - balance: Macrophages will take a lot of damage if splashed with Space Cleaner - - bugfix: Fixed equipment permeability not being taken into account when attempting - to resist viruses - - bugfix: Fixed overactive Adrenal Gland syndrome not adding Hyperzine - - bugfix: Fixed fake GBS not showing some of the messages - - admin: Added various spawneable culture bottles - - code_imp: Added onDeath() to viruses and symptoms - - code_imp: Added random experimental disease and minor random experimental disease - datum - - code_imp: Added random macrophage disease datum and random blob spores datum - - code_imp: Added CAN_NOT_POPULATE for diseases to be avoided in random events - - code_imp: Sanitized many of the symptoms when affecting carbon mobs - - code_imp: Disease outbreak now uses disease flags instead of a list - - bugfix: micros stuck to bare feet breaking magboots - - rscadd: Added the ability to disable spawning with a jacket slot item. - - bugfix: Rejuvenante not updating a destroyed robot sprite - - rscadd: Added ACE Security outfit (undersuit + armour) for security; undersuit - is available in loadout uniform selector, full outfit available in officer and - warden lockers - - bugfix: an issue where the crafting ui could get stuck in a busy state if closed - during crafting + - bugfix: runtimes when spam upgrading griders + - rscadd: Added Blob Spores symptom + - rscadd: Added vaccine bottles, sellable to CentCom in a freezer, made in the PanDEMIC + - rscadd: Added supply packs with normal and minor experimental diseases + - qol: PanDEMIC now takes syringes as well + - qol: Mobs may be picked as targets with Bluespace Sneeze + - qol: Many symptoms that affected carbon now affect mobs too + - balance: All diseases will cure themselves eventually, as the body works up immunity + - balance: Shuffled the list of cures for advanced diseases + - balance: PanDEMIC consumes 5 blood when making vaccines now + - balance: + Reduced the health and damage of macrophages, adding more depending on + the disease they're based on + - balance: + Macrophages now shrivel up when killed, leaving behind some of their + bits on the ground, or in someone's stomach if eaten. + - balance: Macrophages would rather go after non-infected people + - balance: Macrophages will take a lot of damage if splashed with Space Cleaner + - bugfix: + Fixed equipment permeability not being taken into account when attempting + to resist viruses + - bugfix: Fixed overactive Adrenal Gland syndrome not adding Hyperzine + - bugfix: Fixed fake GBS not showing some of the messages + - admin: Added various spawneable culture bottles + - code_imp: Added onDeath() to viruses and symptoms + - code_imp: + Added random experimental disease and minor random experimental disease + datum + - code_imp: Added random macrophage disease datum and random blob spores datum + - code_imp: Added CAN_NOT_POPULATE for diseases to be avoided in random events + - code_imp: Sanitized many of the symptoms when affecting carbon mobs + - code_imp: Disease outbreak now uses disease flags instead of a list + - bugfix: micros stuck to bare feet breaking magboots + - rscadd: Added the ability to disable spawning with a jacket slot item. + - bugfix: Rejuvenante not updating a destroyed robot sprite + - rscadd: + Added ACE Security outfit (undersuit + armour) for security; undersuit + is available in loadout uniform selector, full outfit available in officer and + warden lockers + - bugfix: + an issue where the crafting ui could get stuck in a busy state if closed + during crafting Kashargul: - - bugfix: an issue where crawling could reset table passing continuously + - bugfix: an issue where crawling could reset table passing continuously tacoguy7765093: - - rscdel: Lots of bloat worth of bullet chambers have been removed - - rscdel: Ammo simplification, back to calibers. - - qol: Caliber simplification. + - rscdel: Lots of bloat worth of bullet chambers have been removed + - rscdel: Ammo simplification, back to calibers. + - qol: Caliber simplification. 2025-01-17: CHOMPStation2StaffMirrorBot: - - bugfix: runtime flood + - bugfix: runtime flood 2025-01-18: Asher-42: - - rscadd: adds import export button to radial hud for colors and part selection. - - bugfix: code rehaul + - rscadd: adds import export button to radial hud for colors and part selection. + - bugfix: code rehaul CHOMPStation2StaffMirrorBot: - - bugfix: Makes robot decals show up properly - - bugfix: Fixes advanced diseases being uncurable - - qol: Changed the name of advanced Cold and Flu to Engineered Cold and Engineered - Flu - - qol: Improves screen shake effect - - balance: Changed fitness machines to drain your weight ten times faster. - - balance: Changed fitness structures to drain your weight. - - rscadd: Added a craftable variant of the leash, made from a stack of cable coils - (at least 3 cables in it). - - rscadd: Added silver and white jackboots to loadouts - - bugfix: Fixed the traditional kimono being unselectable - - refactor: Cleaned up _vr files for loadouts + - bugfix: Makes robot decals show up properly + - bugfix: Fixes advanced diseases being uncurable + - qol: + Changed the name of advanced Cold and Flu to Engineered Cold and Engineered + Flu + - qol: Improves screen shake effect + - balance: Changed fitness machines to drain your weight ten times faster. + - balance: Changed fitness structures to drain your weight. + - rscadd: + Added a craftable variant of the leash, made from a stack of cable coils + (at least 3 cables in it). + - rscadd: Added silver and white jackboots to loadouts + - bugfix: Fixed the traditional kimono being unselectable + - refactor: Cleaned up _vr files for loadouts Hunter-Dovetail: - - rscadd: cow_head-head - - rscadd: 'cow_nose-head + - rscadd: cow_head-head + - rscadd: "cow_nose-head - add smallchubbybelly-torso' + add smallchubbybelly-torso" Kashargul: - - bugfix: light handling going missing after area changes - - bugfix: disable long vore while incorporeal + - bugfix: light handling going missing after area changes + - bugfix: disable long vore while incorporeal Mitryll: - - rscadd: Added yip, squeal and tailthump emotes + - rscadd: Added yip, squeal and tailthump emotes 2025-01-19: CHOMPStation2StaffMirrorBot: - - code_imp: cleans up some unhandled references - - bugfix: some more 516 windows + - code_imp: cleans up some unhandled references + - bugfix: some more 516 windows Kashargul: - - bugfix: a bug that could cause runtimes if a non human tried to enter VR + - bugfix: a bug that could cause runtimes if a non human tried to enter VR NickBelmont: - - maptweak: Added a box of gene disks to the XenobotanySetup outsider shelter. + - maptweak: Added a box of gene disks to the XenobotanySetup outsider shelter. 2025-01-20: Hunter-Dovetail: - - code_imp: '"cow_head-head", and "cow_nose-head" changed to "bovine_snout-head" - and "bovine_nose-head", to avoid confusion and overwriting existing "cow nose" - body marking.' - - bugfix: '"chubby belly, small" by separating the sprite via "torso" and groin", - and improved its look and greyscaling,' - - code_imp: altered the dmi for smallchubbybelly for visual improvement, and to - hide protruding hand sprites when facing sideways. - - image: visual and greyscaling improvements to bovine_snout and bovine_nose + - code_imp: + '"cow_head-head", and "cow_nose-head" changed to "bovine_snout-head" + and "bovine_nose-head", to avoid confusion and overwriting existing "cow nose" + body marking.' + - bugfix: + '"chubby belly, small" by separating the sprite via "torso" and groin", + and improved its look and greyscaling,' + - code_imp: + altered the dmi for smallchubbybelly for visual improvement, and to + hide protruding hand sprites when facing sideways. + - image: visual and greyscaling improvements to bovine_snout and bovine_nose Kashargul: - - bugfix: honkhounds losing EAL on module selection after a reset + - bugfix: honkhounds losing EAL on module selection after a reset 2025-01-21: CHOMPStation2StaffMirrorBot: - - bugfix: more 516 browser windows + - bugfix: more 516 browser windows Drathek: - - bugfix: Fixed escape pod UI saying ERROR instead of CLOSED for its hatch + - bugfix: Fixed escape pod UI saying ERROR instead of CLOSED for its hatch Kashargul: - - bugfix: some invisible icons + - bugfix: some invisible icons 2025-01-22: Hunter-Dovetail: - - rscadd: smallchubbybelly-l_hand and -r_hand - - image: improvements to hippo_upperjaw-head, hippo_lowerjaw-head, bovine_snout-head, - bovine_nose-head + - rscadd: smallchubbybelly-l_hand and -r_hand + - image: + improvements to hippo_upperjaw-head, hippo_lowerjaw-head, bovine_snout-head, + bovine_nose-head 2025-01-24: CHOMPStation2StaffMirrorBot: - - rscadd: tgui color picker for anyone using 516 or later - - bugfix: more missing html tags - - balance: adjusted the concussion maul for better power efficiency and slightly - faster attack cooldown, and added a detailed info-desc - - bugfix: an issue where the supermatter was not announcing safe operation conditions - after going critical + - rscadd: tgui color picker for anyone using 516 or later + - bugfix: more missing html tags + - balance: + adjusted the concussion maul for better power efficiency and slightly + faster attack cooldown, and added a detailed info-desc + - bugfix: + an issue where the supermatter was not announcing safe operation conditions + after going critical FluffMedic: - - balance: tyr things rebalanced + - balance: tyr things rebalanced NickBelmont: - - code_imp: Changes tgui/components and tgui/format to their tgui-core equivalents, - and replaces a Flex element with Stack + - code_imp: + Changes tgui/components and tgui/format to their tgui-core equivalents, + and replaces a Flex element with Stack TheGreatKitsune: - - qol: doorbell functionality moved to ctrl-click. + - qol: doorbell functionality moved to ctrl-click. 2025-01-25: Kashargul: - - code_imp: migrates our chomp UIs to tgui-core + - code_imp: migrates our chomp UIs to tgui-core 2025-01-26: Kashargul: - - admin: heavily improves the ticket panel + - admin: heavily improves the ticket panel Verkister: - - rscadd: Added large shark tails. + - rscadd: Added large shark tails. 2025-01-27: CHOMPStation2StaffMirrorBot: - - code_imp: cleans up some destroy and new - - rscadd: option to test robot dmis without recompiling the game - - bugfix: camera qdel failures on disassembling - - image: added top surgery, body tonage and gradient markings - - image: fixed stray pixel on blue singer outfit - - bugfix: partially fixes hardsuits eating gloves - - bugfix: egg plants not mutating to the right type - - rscadd: added new variants of all three vulp earsets with colourable eartips - - rscadd: added satin's tiger taur parts (normal, fat, and vwag-toggleable) - - refactor: de-kaleidoscope'd tails/ears/etc. - - refactor: Changes how xenoarch generation works to make it take up less memory. - Leaves an EXTREME amount of comments to help future maintainers dig through - the mess that is xenoarch code. - - qol: Makes the Artifact Analyzer give you actually accurate data that isn't completely - cluttered. Tells you what the artifact does (vaguely), its activation requirements, - and what range it does it in. - - bugfix: Fixes the Artifact Harvester so it actually works for ALL artifacts and - can harvest object artifacts properly. - - bugfix: Fixes the Artifact Harvester and makes it able to harvest artifacts that - have more than 1 effect - - code_imp: Added a debug proc to the game to allow spawning minor artifacts for - easy testing & admin events. - - code_imp: ' Changes /obj/item/New() to /obj/item/Initialize(mapload)' - - rscdel: Removes 'anomaly depth' and 'anomaly dispersion', meaning the depth of - the artifact is how deep you need to dig. No longer has a range. - - qol: Removes the Suspension Generator requirement for artifacts. Can now be excavated - without it. - - qol: Makes the excavation drill faster and able to go down to 60 depth - - qol: Gives the xenoarcheology closet the excavation drill at spawn. - - qol: Expands the list of reagents that can be used to activate chemical requirements - for artifacts. - - qol: Rocky Debris no longer spawns randomly. - - qol: Rocky Debris only spawns when an artifact is held within the rock. - - qol: LARGE artifacts can no longer be accidentally destroyed. This means miners - will no longer eat rads to the face and upset science at the same time. - - qol: Strange Rocks no longer require a brush/welder to be used. Any pick will - work. - - qol: Makes plant artifacts give a description to say that they should be given - to xenoflora - - qol: Massively lowers the rate of fossils and bones spawning. - - qol: Removes a lot of random RNG that made no sense, like touching having a 75% - chance to not activate a touch artifact. - - qol: Makes it so you can touch artifacts with gloves to activate them, but not - bump them if you have gloves. - - refactor: Condenses all the gas artifacts into one artifact type & file. - - refactor: Condenses good/bad/cannible feel, hot/cold atmos, heal/harm, and synth - heal/harm into singular types instead of duplicated files. - - code_imp: Changes all istype to ishuman, isrobot, ismob where appropriate in the - xenoarch code. - - code_imp: Changes Bold to span_bold() where appropriate in the xenoarch code. - - rscadd: Adds a wrench to the xenoarch supply pack - - rscadd: Adds the xenoarcheology depth scanner to mining vendor. (Allows miners - to excavate, but not locate artifacts to prevent jobstealing.) - - bugfix: Makes the xenoarch syringe find no longer go invisible - - bugfix: Fixes a bug where sometimes, nothing would spawn when an artifact was - excavated. - - bugfix: Fixes a bug where sometimes a large artifact would have the 'datum/artifact_effect/extreme' - effect which did nothing. - - bugfix: Fixes a server crashing bug where - very rarely - a gravity anomaly would - be triggered by touch, resulting in an infinite loop. Added comments to tell - you not to touch it. - - rscadd: Sets of artifacts can now spawn. Primarily used for xeno organs and cult - armor. - - rscadd: Makes it so Human Remains finds will spawn with a random organ - - rscadd: Makes it so Alien Remains finds will spawn with a xenomorph plasma vessel - + xenomorph organ - - rscadd: Makes it so Robot Remains finds will spawn a robot drone pod (Allowing - for ghosts to take control of it and become a vore robot) - - rscadd: Makes it so Gun Finds (energy and projectile) will spawn with randomized - projectiles. - - rscadd: Makes it so xenoarch syringe find will spawn with random reagents - - rscadd: Makes it so xenoarch bowls/urns will generate random reagents - - rscadd: Swaps the Cult Blade spawn with an Artifact Blade that has a collection - of unique upsides and downsides. Just don't try to hit your fellow crew with - it! - - rscadd: Makes the anomaly scanner do a 'wavelength change' if the Z level runs - out of small/large artifacts. This creates more digsites around the user. - - rscadd: Adds a new 'power generator' artifact. Commented out until some good sounds - can be procured. - - rscdel: Deletes a lot of useless junk from the spawnpool, like cutlery, rods, - and shards. - - rscadd: Makes 'material stack' drops found via xenoarch select a random material - from the game (with a blacklist) instead of a few select ones. - - rscadd: Expanded the alien tool drops and also allows them to spawn with an alien - equipment piece as well. - - rscadd: Allows tomes to be unearthed in xenoarch. (No functionality, just fluff) - - rscadd: Makes any objects that have subtypes have a chance of having the subtype - spawn in. - - balance: Makes it so the gasmask actually spawns a unique one (poltergeist or - voice) instead of just a normal, mundane gasmask. - - bugfix: Makes it so the 'cult armor' artifact actually spawns armor - - bugfix: Makes the shock maul play a different sound when powered down and used - on a rock. - - bugfix: Makes Shadow wrights not sit in nullspace forever after activating - - rscadd: Makes shadow wrights give you some text when they KO you instead of just - disappearing - - balance: Adjusted xenoarch large artifact spawnrates. - - balance: More xenoarch large artifacts spawn in the universe now. - - balance: Makes the vampiric artifact and vampiric statue give you rewards for - feeding them instead of giving you pain and suffering through spawning mobs - on top of you. - - rscadd: Adds Catborgs - - rscadd: Adds Kittyborgs - - rscadd: Adds a Gryphonborg - - code_imp: change the logout check lists to only use the smaller ones - - bugfix: Fixed hanner beast form and reverting spawning on turf rather than in - the same location as the hanner. - - rscadd: Added a new "signpost_fake" structure that looks like other sign posts, - but without the teleporting functionality. - - maptweak: Fixed signposts that would break your character in the fantasy redgate - map. - - rscadd: topic and click limits - - qol: adds filters and sorting to the crew monitor - - rscadd: Added a new "Private Notes" option to character setup. - - rscadd: Added a new "Private Notes" verb to the IC tab. - - qol: Moved memory "Note" verbs to a new Notes sub category in the IC tab alongside - the new Private Notes function. - - bugfix: more icon and map issues + - code_imp: cleans up some destroy and new + - rscadd: option to test robot dmis without recompiling the game + - bugfix: camera qdel failures on disassembling + - image: added top surgery, body tonage and gradient markings + - image: fixed stray pixel on blue singer outfit + - bugfix: partially fixes hardsuits eating gloves + - bugfix: egg plants not mutating to the right type + - rscadd: added new variants of all three vulp earsets with colourable eartips + - rscadd: added satin's tiger taur parts (normal, fat, and vwag-toggleable) + - refactor: de-kaleidoscope'd tails/ears/etc. + - refactor: + Changes how xenoarch generation works to make it take up less memory. + Leaves an EXTREME amount of comments to help future maintainers dig through + the mess that is xenoarch code. + - qol: + Makes the Artifact Analyzer give you actually accurate data that isn't completely + cluttered. Tells you what the artifact does (vaguely), its activation requirements, + and what range it does it in. + - bugfix: + Fixes the Artifact Harvester so it actually works for ALL artifacts and + can harvest object artifacts properly. + - bugfix: + Fixes the Artifact Harvester and makes it able to harvest artifacts that + have more than 1 effect + - code_imp: + Added a debug proc to the game to allow spawning minor artifacts for + easy testing & admin events. + - code_imp: " Changes /obj/item/New() to /obj/item/Initialize(mapload)" + - rscdel: + Removes 'anomaly depth' and 'anomaly dispersion', meaning the depth of + the artifact is how deep you need to dig. No longer has a range. + - qol: + Removes the Suspension Generator requirement for artifacts. Can now be excavated + without it. + - qol: Makes the excavation drill faster and able to go down to 60 depth + - qol: Gives the xenoarcheology closet the excavation drill at spawn. + - qol: + Expands the list of reagents that can be used to activate chemical requirements + for artifacts. + - qol: Rocky Debris no longer spawns randomly. + - qol: Rocky Debris only spawns when an artifact is held within the rock. + - qol: + LARGE artifacts can no longer be accidentally destroyed. This means miners + will no longer eat rads to the face and upset science at the same time. + - qol: + Strange Rocks no longer require a brush/welder to be used. Any pick will + work. + - qol: + Makes plant artifacts give a description to say that they should be given + to xenoflora + - qol: Massively lowers the rate of fossils and bones spawning. + - qol: + Removes a lot of random RNG that made no sense, like touching having a 75% + chance to not activate a touch artifact. + - qol: + Makes it so you can touch artifacts with gloves to activate them, but not + bump them if you have gloves. + - refactor: Condenses all the gas artifacts into one artifact type & file. + - refactor: + Condenses good/bad/cannible feel, hot/cold atmos, heal/harm, and synth + heal/harm into singular types instead of duplicated files. + - code_imp: + Changes all istype to ishuman, isrobot, ismob where appropriate in the + xenoarch code. + - code_imp: Changes Bold to span_bold() where appropriate in the xenoarch code. + - rscadd: Adds a wrench to the xenoarch supply pack + - rscadd: + Adds the xenoarcheology depth scanner to mining vendor. (Allows miners + to excavate, but not locate artifacts to prevent jobstealing.) + - bugfix: Makes the xenoarch syringe find no longer go invisible + - bugfix: + Fixes a bug where sometimes, nothing would spawn when an artifact was + excavated. + - bugfix: + Fixes a bug where sometimes a large artifact would have the 'datum/artifact_effect/extreme' + effect which did nothing. + - bugfix: + Fixes a server crashing bug where - very rarely - a gravity anomaly would + be triggered by touch, resulting in an infinite loop. Added comments to tell + you not to touch it. + - rscadd: + Sets of artifacts can now spawn. Primarily used for xeno organs and cult + armor. + - rscadd: Makes it so Human Remains finds will spawn with a random organ + - rscadd: + Makes it so Alien Remains finds will spawn with a xenomorph plasma vessel + + xenomorph organ + - rscadd: + Makes it so Robot Remains finds will spawn a robot drone pod (Allowing + for ghosts to take control of it and become a vore robot) + - rscadd: + Makes it so Gun Finds (energy and projectile) will spawn with randomized + projectiles. + - rscadd: Makes it so xenoarch syringe find will spawn with random reagents + - rscadd: Makes it so xenoarch bowls/urns will generate random reagents + - rscadd: + Swaps the Cult Blade spawn with an Artifact Blade that has a collection + of unique upsides and downsides. Just don't try to hit your fellow crew with + it! + - rscadd: + Makes the anomaly scanner do a 'wavelength change' if the Z level runs + out of small/large artifacts. This creates more digsites around the user. + - rscadd: + Adds a new 'power generator' artifact. Commented out until some good sounds + can be procured. + - rscdel: + Deletes a lot of useless junk from the spawnpool, like cutlery, rods, + and shards. + - rscadd: + Makes 'material stack' drops found via xenoarch select a random material + from the game (with a blacklist) instead of a few select ones. + - rscadd: + Expanded the alien tool drops and also allows them to spawn with an alien + equipment piece as well. + - rscadd: Allows tomes to be unearthed in xenoarch. (No functionality, just fluff) + - rscadd: + Makes any objects that have subtypes have a chance of having the subtype + spawn in. + - balance: + Makes it so the gasmask actually spawns a unique one (poltergeist or + voice) instead of just a normal, mundane gasmask. + - bugfix: Makes it so the 'cult armor' artifact actually spawns armor + - bugfix: + Makes the shock maul play a different sound when powered down and used + on a rock. + - bugfix: Makes Shadow wrights not sit in nullspace forever after activating + - rscadd: + Makes shadow wrights give you some text when they KO you instead of just + disappearing + - balance: Adjusted xenoarch large artifact spawnrates. + - balance: More xenoarch large artifacts spawn in the universe now. + - balance: + Makes the vampiric artifact and vampiric statue give you rewards for + feeding them instead of giving you pain and suffering through spawning mobs + on top of you. + - rscadd: Adds Catborgs + - rscadd: Adds Kittyborgs + - rscadd: Adds a Gryphonborg + - code_imp: change the logout check lists to only use the smaller ones + - bugfix: + Fixed hanner beast form and reverting spawning on turf rather than in + the same location as the hanner. + - rscadd: + Added a new "signpost_fake" structure that looks like other sign posts, + but without the teleporting functionality. + - maptweak: + Fixed signposts that would break your character in the fantasy redgate + map. + - rscadd: topic and click limits + - qol: adds filters and sorting to the crew monitor + - rscadd: Added a new "Private Notes" option to character setup. + - rscadd: Added a new "Private Notes" verb to the IC tab. + - qol: + Moved memory "Note" verbs to a new Notes sub category in the IC tab alongside + the new Private Notes function. + - bugfix: more icon and map issues Drathek Rykka-Stormheart: - - rscadd: Added auxtools support for debugging in VSC (currently only 515) + - rscadd: Added auxtools support for debugging in VSC (currently only 515) 2025-01-28: CHOMPStation2StaffMirrorBot: - - bugfix: A few misc xenoarch fixes. Enables the dnaswitch artifact - - bugfix: crewMonitor - - bugfix: Teshari underfluff colors properly now - - bugfix: Altevian ears among other wings, tails, and tuar halves show properly - - code_imp: Xenoarch stuff spawns better - - qol: Syringe guns can be put in holsters + - bugfix: A few misc xenoarch fixes. Enables the dnaswitch artifact + - bugfix: crewMonitor + - bugfix: Teshari underfluff colors properly now + - bugfix: Altevian ears among other wings, tails, and tuar halves show properly + - code_imp: Xenoarch stuff spawns better + - qol: Syringe guns can be put in holsters 2025-01-29: CHOMPStation2StaffMirrorBot: - - code_imp: properly enables dnaswitch artifact - - bugfix: fixes a to_world - - bugfix: Fixed resting sprites for medical and security catborgs. + - code_imp: properly enables dnaswitch artifact + - bugfix: fixes a to_world + - bugfix: Fixed resting sprites for medical and security catborgs. ShadowLarkens Kashargul: - - code_imp: moves our UIs to tgui core + - code_imp: moves our UIs to tgui core 2025-01-30: Kashargul: - - code_imp: malignant organs -> adjust_nutrition + - code_imp: malignant organs -> adjust_nutrition 2025-01-31: CHOMPStation2StaffMirrorBot: - - rscadd: Added a warning message if clients are older than 516, warning them that - the game will soon update to version 516 and that they will experience issues - in the meantime, and eventually not be able to connect at all. - - rscadd: 'adds the angler bulb to the sprite DM whose name i immediately forgor + - rscadd: + Added a warning message if clients are older than 516, warning them that + the game will soon update to version 516 and that they will experience issues + in the meantime, and eventually not be able to connect at all. + - rscadd: + "adds the angler bulb to the sprite DM whose name i immediately forgor - image:adds angler icon states from caustic cove to ears.dmi' - - rscadd: Added a simple recolourable wrestling mask to the loadout for the upcoming - event. + image:adds angler icon states from caustic cove to ears.dmi" + - rscadd: + Added a simple recolourable wrestling mask to the loadout for the upcoming + event. diff --git a/html/changelogs_ch/archive/2025-02.yml b/html/changelogs_ch/archive/2025-02.yml index ba0959fe17..596345c1c7 100644 --- a/html/changelogs_ch/archive/2025-02.yml +++ b/html/changelogs_ch/archive/2025-02.yml @@ -1,490 +1,576 @@ 2025-02-01: CHOMPStation2StaffMirrorBot: - - rscadd: Bodybags now show a visible tag when written on - - bugfix: Bodybags show properly again - - bugfix: Crew monitor now filters and shows vitals properly - - code_imp: converts more usr to user / src - - bugfix: Tritium no longer acts as slime jelly + - rscadd: Bodybags now show a visible tag when written on + - bugfix: Bodybags show properly again + - bugfix: Crew monitor now filters and shows vitals properly + - code_imp: converts more usr to user / src + - bugfix: Tritium no longer acts as slime jelly 2025-02-02: CHOMPStation2StaffMirrorBot: - - rscadd: Adds a new sneptail from Skyrat - - bugfix: Fixed inventory missing sprites for some overcoats - - bugfix: Fixed missing longsword and sabre sprites. - - rscadd: Adds some currently unused weather effects (starry_night, midnight, sandstorm, - toxic_rain, downpour, downpourfatal, and acidfog) - - rscadd: Added a new stable glamour crafting material that can be used to craft - various items. - - rscadd: Added a new unstable glamour item, that has a few risky effects when used - and picked up without protection. - - rscadd: Added a new particle smasher recipe to turn unstable glamour into stable - glamour. - - rscadd: Added new items to the lleill transmute ability. - - rscadd: Added new glamour bow and arrow items. - - rscadd: Added a variable for particle smasher recipes to have a chance not to - consume an item. - - rscadd: Added new glamour turfs for whitespace maps. - - code_imp: Changed TF procs to be called from one centralised location, rather - than repeated across the code multiple times. - - rscadd: Added warnings for people on clients 516.1652 to 1654 that they should - use another version. - - bugfix: Fixes compact shotguns not being able to rack the gun - - bugfix: Fixes computers not facing the right way - - bugfix: Fixes a bunch of taur sprites. They no longer make all your items go invisible. - - bugfix: Fixed taurs being unable to be ridden. - - qol: Robots can now use their mining points to upgrade their scanner - - bugfix: All the numerous zaddat players can now rejoice as they can now choose - sprite accessories! - - code_imp: add cable dir maptest - - bugfix: Fixes spontaneous rupture of lungs when breathing otherwise adequate amounts - of air - - bugfix: The proper alert will now show up when you're suffocating in space. - - balance: Massively lowers chance of the virgo beacon spawning - - balance: Massively lowers chance of both guns and laser guns spawning in war digsites - (The chances you would find a fully functioning gun is pretty low, honestly. - This reflects that.) - - balance: Lowers chance of finding the cult blade - - balance: Adds human corpses to temple digsites, war digsites, and garden digsites - - balance: Adds alien corpses to garden digsites and war digsites - - balance: Adds robot corpses to war digsites and technical digsites - - bugfix: Xenoarch guns can no longer erroneously choose a firemode and swap their - projectile type - - bugfix: Xenoarch guns no longer become laser rifles when battery is swapped - - bugfix: Xenoarch guns have proper names now - - balance: Xenoarch guns can no longer have pulse destroyer beams - - balance: You can no longer accidentally nuke yourself with the cult sword - - balance: The electric field artifact can no longer be rapidly turned on and off - to nuke people - - bugfix: The cult sword checks to make sure it has the proper lifeforce - - balance: Actually properly gets rid of radiation+damage when you destroy an artifact. - You instead now become jittery. - - bugfix: nearby computers merge their icons - - code_imp: crash on guns with 0 fire delay, let us find out what guntype is doing - this - - bugfix: Fixed Teshari pattern ears being missing from the ears selection. - - rscadd: Adds a Deluxe bluespace bracelet that allows a variable toggle. - - balance: Lowered cost of base bluespace bracelet to 1 loadout point - - bugfix: another case where alarms could get stuck - - bugfix: fixes some runtimes pertaining to guns dividing by 0 + - rscadd: Adds a new sneptail from Skyrat + - bugfix: Fixed inventory missing sprites for some overcoats + - bugfix: Fixed missing longsword and sabre sprites. + - rscadd: + Adds some currently unused weather effects (starry_night, midnight, sandstorm, + toxic_rain, downpour, downpourfatal, and acidfog) + - rscadd: + Added a new stable glamour crafting material that can be used to craft + various items. + - rscadd: + Added a new unstable glamour item, that has a few risky effects when used + and picked up without protection. + - rscadd: + Added a new particle smasher recipe to turn unstable glamour into stable + glamour. + - rscadd: Added new items to the lleill transmute ability. + - rscadd: Added new glamour bow and arrow items. + - rscadd: + Added a variable for particle smasher recipes to have a chance not to + consume an item. + - rscadd: Added new glamour turfs for whitespace maps. + - code_imp: + Changed TF procs to be called from one centralised location, rather + than repeated across the code multiple times. + - rscadd: + Added warnings for people on clients 516.1652 to 1654 that they should + use another version. + - bugfix: Fixes compact shotguns not being able to rack the gun + - bugfix: Fixes computers not facing the right way + - bugfix: Fixes a bunch of taur sprites. They no longer make all your items go invisible. + - bugfix: Fixed taurs being unable to be ridden. + - qol: Robots can now use their mining points to upgrade their scanner + - bugfix: + All the numerous zaddat players can now rejoice as they can now choose + sprite accessories! + - code_imp: add cable dir maptest + - bugfix: + Fixes spontaneous rupture of lungs when breathing otherwise adequate amounts + of air + - bugfix: The proper alert will now show up when you're suffocating in space. + - balance: Massively lowers chance of the virgo beacon spawning + - balance: + Massively lowers chance of both guns and laser guns spawning in war digsites + (The chances you would find a fully functioning gun is pretty low, honestly. + This reflects that.) + - balance: Lowers chance of finding the cult blade + - balance: Adds human corpses to temple digsites, war digsites, and garden digsites + - balance: Adds alien corpses to garden digsites and war digsites + - balance: Adds robot corpses to war digsites and technical digsites + - bugfix: + Xenoarch guns can no longer erroneously choose a firemode and swap their + projectile type + - bugfix: Xenoarch guns no longer become laser rifles when battery is swapped + - bugfix: Xenoarch guns have proper names now + - balance: Xenoarch guns can no longer have pulse destroyer beams + - balance: You can no longer accidentally nuke yourself with the cult sword + - balance: + The electric field artifact can no longer be rapidly turned on and off + to nuke people + - bugfix: The cult sword checks to make sure it has the proper lifeforce + - balance: + Actually properly gets rid of radiation+damage when you destroy an artifact. + You instead now become jittery. + - bugfix: nearby computers merge their icons + - code_imp: + crash on guns with 0 fire delay, let us find out what guntype is doing + this + - bugfix: Fixed Teshari pattern ears being missing from the ears selection. + - rscadd: Adds a Deluxe bluespace bracelet that allows a variable toggle. + - balance: Lowered cost of base bluespace bracelet to 1 loadout point + - bugfix: another case where alarms could get stuck + - bugfix: fixes some runtimes pertaining to guns dividing by 0 Cameron-The-Raven: - - bugfix: _yw taur sprites properly show now - - bugfix: low blood sugar will no longer give you infinitely stacking drowsyness + - bugfix: _yw taur sprites properly show now + - bugfix: low blood sugar will no longer give you infinitely stacking drowsyness 2025-02-03: CHOMPStation2StaffMirrorBot: - - qol: removes all old inputs - - rscadd: Additional checks added to mob tf - - code_imp: Makes deluxe bluespace bracelets and hyper jumpsuit code not as bad - - bugfix: Fixes a bug where projectiles could go into nullspace and runtime - - bugfix: Fixes a bug where tcomms would runtime trying to get their temperature - after being destroyed - - bugfix: Fixes a bug where circuit boards would not del their datums properly - - rscadd: Deluxe bluespace bracelets respect dorms - - code_imp: removes old alert - - bugfix: building camera consoles runtiming + - qol: removes all old inputs + - rscadd: Additional checks added to mob tf + - code_imp: Makes deluxe bluespace bracelets and hyper jumpsuit code not as bad + - bugfix: Fixes a bug where projectiles could go into nullspace and runtime + - bugfix: + Fixes a bug where tcomms would runtime trying to get their temperature + after being destroyed + - bugfix: Fixes a bug where circuit boards would not del their datums properly + - rscadd: Deluxe bluespace bracelets respect dorms + - code_imp: removes old alert + - bugfix: building camera consoles runtiming Hunter-Dovetail: - - rscadd: crocodile_neck-head - - code_imp: hide_body_parts to scaled_belly-torso, six_pack-torso - - image: modified and improved horse_head-head, horse_fringe-head, dragon_upperjaw-head, - dragon_lowerjaw-head, six_pack-torso, scaled_belly-torso + - rscadd: crocodile_neck-head + - code_imp: hide_body_parts to scaled_belly-torso, six_pack-torso + - image: + modified and improved horse_head-head, horse_fringe-head, dragon_upperjaw-head, + dragon_lowerjaw-head, six_pack-torso, scaled_belly-torso 2025-02-04: CHOMPStation2StaffMirrorBot: - - code_imp: removes sleeps in robot module selection - - refactor: TGUI collections usage reduced - - bugfix: fixed the teshari foot sprites - - bugfix: fixed teshi_fluff - - image: added foot states for teshi_fluff to make the fix actually work. It's just - the leg sprites but I chopped em to fit + - code_imp: removes sleeps in robot module selection + - refactor: TGUI collections usage reduced + - bugfix: fixed the teshari foot sprites + - bugfix: fixed teshi_fluff + - image: + added foot states for teshi_fluff to make the fix actually work. It's just + the leg sprites but I chopped em to fit 2025-02-05: CHOMPStation2StaffMirrorBot: - - qol: robot gun sprites will only show if any of the guns is actually in the activated - slot - - bugfix: rdconsole static data updates for all users again + - qol: + robot gun sprites will only show if any of the guns is actually in the activated + slot + - bugfix: rdconsole static data updates for all users again Cameron-The-Raven: - - image: adjusts some icons to equal their virgo equivalent. Nothing front-facing, - all backend. + - image: + adjusts some icons to equal their virgo equivalent. Nothing front-facing, + all backend. 2025-02-06: Kashargul: - - bugfix: buttons not properly aligned in the vorepanel settings + - bugfix: buttons not properly aligned in the vorepanel settings 2025-02-07: Diana: - - code_imp: fixes taur sprites from breaking. Made from _vr and _ch files into just - normal .dmi files - - code_imp: Clears some duplicate code up + - code_imp: + fixes taur sprites from breaking. Made from _vr and _ch files into just + normal .dmi files + - code_imp: Clears some duplicate code up Missile597: - - maptweak: Moves the xenobotany hydroponics crate so it doesn't block the fridge - at round start - - maptweak: Adds an air alarm to the distillery room which was either missed or - got lost again - - maptweak: Deleted some redundant supply piping that had been accidentally placed - in medical at some point - - maptweak: Fixed the wires for the electrified grilles in the HoP's office + - maptweak: + Moves the xenobotany hydroponics crate so it doesn't block the fridge + at round start + - maptweak: + Adds an air alarm to the distillery room which was either missed or + got lost again + - maptweak: + Deleted some redundant supply piping that had been accidentally placed + in medical at some point + - maptweak: Fixed the wires for the electrified grilles in the HoP's office tacoguy7765093: - - bugfix: Oversight research datum added to outsider console to prevent core RND - being printed from it. + - bugfix: + Oversight research datum added to outsider console to prevent core RND + being printed from it. 2025-02-08: CHOMPStation2StaffMirrorBot: - - rscdel: Removed old things that should have been removed a long time ago - - code_imp: Non-Contagious GBS now has CAN_NOT_SPREAD - - rscadd: Adds a new spont vore interaction to buckling to an already occupied seat - - code_imp: repalces center of mass list with x and y vars - - code_imp: fixes a general destroy issue and some init hints - - code_imp: Adjusts the way guns fire on the backend - - bugfix: Fixes a massive memory leak. - - bugfix: Deadringer now properly does deathgasp on the right mob - - bugfix: Wounds now properly delete when limbs are Destroy()'d - - rscadd: Mining vendor now contains the Kinetic Gauntlets - - rscadd: Mining vendor now contains the Diamond Pickaxe - - rscadd: Radio code is now more efficient on the backend. - - code_imp: Doors are less resource intensive - - code_imp: Robots will now scream if you touch them wrong in the code - - rscadd: Doors close faster if it's freezing or a raging fire is on the other side. - (Less fire spreading and less heat lost) - - code_imp: Makes the artifact gas trigger, artifact heat, and artifact cold activation - temps defines - - code_imp: Artifacts now properly remove their signals. - - balance: Artifacts now take more moles in the air to activate - - balance: Artifacts break if they get WAY too hot. - - bugfix: Fixes an error where it said % to activate artifacts. Now properly tells - you it is in moles. - - balance: Telecubes no longer start mated in xenoarch. This means you'll have to - find two of them (and be sad the game won't let you pair them). This means you - will no longer get gibbed if you're unlucky - - bugfix: Fixes a bug where augments could not be inserted into robotic limbs. The - step is now screwdriver->multitool to insert them - - bugfix: Melee augments can no longer embed inside someone - - rscadd: A lot of the augments are now craftable in science, requiring high tech - levels and lots of resources for them. + - rscdel: Removed old things that should have been removed a long time ago + - code_imp: Non-Contagious GBS now has CAN_NOT_SPREAD + - rscadd: Adds a new spont vore interaction to buckling to an already occupied seat + - code_imp: repalces center of mass list with x and y vars + - code_imp: fixes a general destroy issue and some init hints + - code_imp: Adjusts the way guns fire on the backend + - bugfix: Fixes a massive memory leak. + - bugfix: Deadringer now properly does deathgasp on the right mob + - bugfix: Wounds now properly delete when limbs are Destroy()'d + - rscadd: Mining vendor now contains the Kinetic Gauntlets + - rscadd: Mining vendor now contains the Diamond Pickaxe + - rscadd: Radio code is now more efficient on the backend. + - code_imp: Doors are less resource intensive + - code_imp: Robots will now scream if you touch them wrong in the code + - rscadd: + Doors close faster if it's freezing or a raging fire is on the other side. + (Less fire spreading and less heat lost) + - code_imp: + Makes the artifact gas trigger, artifact heat, and artifact cold activation + temps defines + - code_imp: Artifacts now properly remove their signals. + - balance: Artifacts now take more moles in the air to activate + - balance: Artifacts break if they get WAY too hot. + - bugfix: + Fixes an error where it said % to activate artifacts. Now properly tells + you it is in moles. + - balance: + Telecubes no longer start mated in xenoarch. This means you'll have to + find two of them (and be sad the game won't let you pair them). This means you + will no longer get gibbed if you're unlucky + - bugfix: + Fixes a bug where augments could not be inserted into robotic limbs. The + step is now screwdriver->multitool to insert them + - bugfix: Melee augments can no longer embed inside someone + - rscadd: + A lot of the augments are now craftable in science, requiring high tech + levels and lots of resources for them. Diana: - - rscadd: 'Adds a bunch of new taur sprites that were in the icon files but never - had the code written for them. + - rscadd: + "Adds a bunch of new taur sprites that were in the icon files but never + had the code written for them. - code; Gets the _ch and _vr files in sync' + code; Gets the _ch and _vr files in sync" 2025-02-09: CHOMPStation2StaffMirrorBot: - - rscadd: Adds 'Dirtking' a trait that lets you dirty tiles up quicker (Sorry janitors!) - - rscadd: Adds 'Mudslip' a trait that makes you slip over dirt tiles (Blame the - dirtkings!) - - code_imp: more backend stuff - - code_imp: forwards usr refs from topic for usrDialog - - qol: atmos alarms can now be scrolled through - - rscadd: Makes medical kiosks now detect viruses and infections - - qol: Makes medical kiosks have varying text severity's depending on how bad the - thing is - - qol: Makes medical kiosks tell you to put pressure on the wound - - rscadd: Makes medical kiosks detect chronic radiation (but only if done with the - acute phase) - - code_imp: moves organs from new to init - - bugfix: rhubarb using the wrong define + - rscadd: Adds 'Dirtking' a trait that lets you dirty tiles up quicker (Sorry janitors!) + - rscadd: + Adds 'Mudslip' a trait that makes you slip over dirt tiles (Blame the + dirtkings!) + - code_imp: more backend stuff + - code_imp: forwards usr refs from topic for usrDialog + - qol: atmos alarms can now be scrolled through + - rscadd: Makes medical kiosks now detect viruses and infections + - qol: + Makes medical kiosks have varying text severity's depending on how bad the + thing is + - qol: Makes medical kiosks tell you to put pressure on the wound + - rscadd: + Makes medical kiosks detect chronic radiation (but only if done with the + acute phase) + - code_imp: moves organs from new to init + - bugfix: rhubarb using the wrong define Diana: - - bugfix: You are prevented from stomping while buckled now. - - bugfix: You are prevented from kicking while buckled now. - - bugfix: You are prevented from biting while buckled now. - - bugfix: Fixes gloves increasing damage on anything other than punches. - - bugfix: Fixes it so the click code can properly get to unarmed attack code now, - allowing it to run it's proper checks to see if you can attack or not instead - of just always returning false. - - code_imp: Changes some vars from 0 to FALSE where indicated. - - code_imp: Gets rid of some needless = FALSE when it was already on the parent - - bugfix: Artifacts will no longer activate via touch if their effect(strength) - is set to 'touch strength' but their trigger(method of activation) is set to - anything but 'touch' - - bugfix: Touching a touch artifact to turn it off will no longer hit you with the - activation effects - - bugfix: Touching a touch artifact will now properly make it turn on - - qol: Gets rid of anomalies that require gas to activate - - qol: The analyzer now tells you you can dump lead (among others) to activate an - artifact - - qol: Artifacts will not longer activate through gloves. Small artifacts are safe - to pick up now! - - rscadd: Adds more anomaly battery types craftable in science - - rscadd: Artifact harvesters and its scanpad can now be crafted and deconstructed - - rscadd: Harvester can now be upgraded, giving increased charge rate. - - bugfix: your sponge will no longer look for its nonexistent species when emp'd - when outside your body - - bugfix: NPCs are no longer opportunistic and will not maul their sleeping allies + - bugfix: You are prevented from stomping while buckled now. + - bugfix: You are prevented from kicking while buckled now. + - bugfix: You are prevented from biting while buckled now. + - bugfix: Fixes gloves increasing damage on anything other than punches. + - bugfix: + Fixes it so the click code can properly get to unarmed attack code now, + allowing it to run it's proper checks to see if you can attack or not instead + of just always returning false. + - code_imp: Changes some vars from 0 to FALSE where indicated. + - code_imp: Gets rid of some needless = FALSE when it was already on the parent + - bugfix: + Artifacts will no longer activate via touch if their effect(strength) + is set to 'touch strength' but their trigger(method of activation) is set to + anything but 'touch' + - bugfix: + Touching a touch artifact to turn it off will no longer hit you with the + activation effects + - bugfix: Touching a touch artifact will now properly make it turn on + - qol: Gets rid of anomalies that require gas to activate + - qol: + The analyzer now tells you you can dump lead (among others) to activate an + artifact + - qol: + Artifacts will not longer activate through gloves. Small artifacts are safe + to pick up now! + - rscadd: Adds more anomaly battery types craftable in science + - rscadd: Artifact harvesters and its scanpad can now be crafted and deconstructed + - rscadd: Harvester can now be upgraded, giving increased charge rate. + - bugfix: + your sponge will no longer look for its nonexistent species when emp'd + when outside your body + - bugfix: NPCs are no longer opportunistic and will not maul their sleeping allies Diana, Kash, Will: - - bugfix: Fixes the body designer and changes it to use appearance changer - - code_imp: Adds a unit test that will POLITELY tell you to to FIX YOUR DUPLICATE - / UNNAMED / UN-ICONED sprite_accessory in the code. It's for your own good. - Promise. - - code_imp: Adds another unit test that will POLITELY check your markings in the - FILE to let you know you if you add a marking without a proper sprite. (This - is for your own good.) - - bugfix: Fixes a bug with the color picker would let you upload photos to it and - accept that as a color input - - bugfix: Fixes some things having duplicate names / duplicate paths meaning they - could never be selected - - bugfix: Fixes a LOT of broken sprites - - bugfix: Fixes Shadekin Snoot marking - - bugfix: Adds Double Unathi Horns - - bugfix: Skrell Very Short Tentacles never existed. - - bugfix: Wrist Fluff not having the correct body_parts - - bugfix: Replikant Paneling - SynthFlesh (body) now shows up properly - - bugfix: Rosette's Groin now shows up properly when viewed. - - bugfix: Augment (Backside Left, Head) now shows up properly - - bugfix: Augment (Backside Left Diode, Head) now shows up properly - - bugfix: Hands,Feet,Belly Color (Major, Female) now shows their groin properly. + - bugfix: Fixes the body designer and changes it to use appearance changer + - code_imp: + Adds a unit test that will POLITELY tell you to to FIX YOUR DUPLICATE + / UNNAMED / UN-ICONED sprite_accessory in the code. It's for your own good. + Promise. + - code_imp: + Adds another unit test that will POLITELY check your markings in the + FILE to let you know you if you add a marking without a proper sprite. (This + is for your own good.) + - bugfix: + Fixes a bug with the color picker would let you upload photos to it and + accept that as a color input + - bugfix: + Fixes some things having duplicate names / duplicate paths meaning they + could never be selected + - bugfix: Fixes a LOT of broken sprites + - bugfix: Fixes Shadekin Snoot marking + - bugfix: Adds Double Unathi Horns + - bugfix: Skrell Very Short Tentacles never existed. + - bugfix: Wrist Fluff not having the correct body_parts + - bugfix: Replikant Paneling - SynthFlesh (body) now shows up properly + - bugfix: Rosette's Groin now shows up properly when viewed. + - bugfix: Augment (Backside Left, Head) now shows up properly + - bugfix: Augment (Backside Left Diode, Head) now shows up properly + - bugfix: Hands,Feet,Belly Color (Major, Female) now shows their groin properly. ItsSelis: - - bugfix: makes the dialog/attacklog tables clear again after each round + - bugfix: makes the dialog/attacklog tables clear again after each round UPPORT: - - qol: Doorbells can now be used on doors via ctrl-click instead of alt-click, allowing - you to examine doors properly. + - qol: + Doorbells can now be used on doors via ctrl-click instead of alt-click, allowing + you to examine doors properly. gameaddict07: - - bugfix: The food replicator now costs nutriment based on how many units of reagents - are in the replicated dish. + - bugfix: + The food replicator now costs nutriment based on how many units of reagents + are in the replicated dish. 2025-02-10: CHOMPStation2StaffMirrorBot: - - bugfix: firedoors checking the processing before being closed - - rscadd: Footstep Element - - code_imp: Upated DCS + - bugfix: firedoors checking the processing before being closed + - rscadd: Footstep Element + - code_imp: Upated DCS 2025-02-11: Diana: - - bugfix: signalers will now signal + - bugfix: signalers will now signal TheCaramelion: - - balance: Disabled Random virus event + - balance: Disabled Random virus event 2025-02-12: CHOMPStation2StaffMirrorBot: - - bugfix: some ui issues on shield gen, gyro control and rust control - - bugfix: a 6 year old issue where any modifier could set your pulse to 0 - - bugfix: door tag id inputs being too short - - bugfix: removed an extra overlay that shouldn't have been on the dual-colour thin - vulp ears - - code_imp: You can no longer place markings on your lungs (Unit test checks for - improper bodypart areas) + - bugfix: some ui issues on shield gen, gyro control and rust control + - bugfix: a 6 year old issue where any modifier could set your pulse to 0 + - bugfix: door tag id inputs being too short + - bugfix: + removed an extra overlay that shouldn't have been on the dual-colour thin + vulp ears + - code_imp: + You can no longer place markings on your lungs (Unit test checks for + improper bodypart areas) Diana: - - bugfix: Xenoarch gas effects will no longer have a 1/3 chance of not working when - spawned in. - - bugfix: Gas artifacts no longer overpopulate the artifact pool - - qol: Gas artifacts and temperature artifacts can no longer be 'spam-toggled' and - will instead only be aura artifacts. - - code_imp: Made a global blacklist for artifacts that should not spawn in global_lists.dm + - bugfix: + Xenoarch gas effects will no longer have a 1/3 chance of not working when + spawned in. + - bugfix: Gas artifacts no longer overpopulate the artifact pool + - qol: + Gas artifacts and temperature artifacts can no longer be 'spam-toggled' and + will instead only be aura artifacts. + - code_imp: Made a global blacklist for artifacts that should not spawn in global_lists.dm Kashargul: - - bugfix: swoopies being unable to use the soulcatcher + - bugfix: swoopies being unable to use the soulcatcher 2025-02-13: tacoguy7765093: - - maptweak: Map stability fixes. + - maptweak: Map stability fixes. 2025-02-14: CHOMPStation2StaffMirrorBot: - - bugfix: You can no longer choose multiple autohisses at once - - rscadd: dynamic light system for planets - - qol: updates diagonal movement calculations - - bugfix: belly sprites not properly working in some cases - - bugfix: Micro cameras will now properly reset when micros are dropped + - bugfix: You can no longer choose multiple autohisses at once + - rscadd: dynamic light system for planets + - qol: updates diagonal movement calculations + - bugfix: belly sprites not properly working in some cases + - bugfix: Micro cameras will now properly reset when micros are dropped Will: - - bugfix: Injectors can now properly spawn on maps now. - - bugfix: Some issues with blood were fixed - - bugfix: Fixes various issues with genetics - - rscadd: The resleever will now talk to you with a cute medical speech bubble when - it makes a dna resequencer. + - bugfix: Injectors can now properly spawn on maps now. + - bugfix: Some issues with blood were fixed + - bugfix: Fixes various issues with genetics + - rscadd: + The resleever will now talk to you with a cute medical speech bubble when + it makes a dna resequencer. Will, Kash, Diana: - - bugfix: Fixes a server crashing issue with flip emote - - bugfix: Fixes Genetics and all the powers that came with it - - rscadd: Adds Trait Genetics to the game. (Genetics can activate/deactivate traits) - - rscadd: Various new traits up-ported (drippy, rad-resistance/immunity, Photosynthesis, - Rotting Genetics, Incomprehensible, Less blood volume, slowdown EXTREME, low - blood sugar, Agoraphobia, Loneliness, Glass Endurance, reduced biocompat, photosensitivity, - haemophillia, pain intolerance, sensitive biochem, table passer,) - - rscadd: Health analyzers tell you if someone is suffering from a genetic side - effect and what to give to cure them. - - rscadd: Allows cocoon weaver to change eye and skin color - - bugfix: Various small bugfixes up-ported from Chomp - - sound: Added some founds from Chomp for space inhale/exhale sounds - - refactor: Refactors how radiation code works to work with rad resistance/immunity. - - refactor: Genetic side effects edited NOT to be shitcode with spawns & sleeps. - Made to use timers instead. - - code_imp: Updated a LOT of files to be equivalent to their chomp versions. - - balance: Adjusted laser eyes to do 10 damage instead of 40 per shot, due to - being spammable and nutrition being extremely high. - - balance: Chems that formerly fixed genetic damage now heal cloneloss instead of - genetics, since the new system is incomparable with old genetic healing. - - rscadd: People can be reset to their default with the resleever console, as it - can print out a genetic injector that does NO radiation or genetic damage, just - purely fixing them back to their default. - - code_imp: A lot of the below were added because while updating the files to be - 1:1 where traitgene changes occured, there were massive changes codewise. - - code_imp: Autostrip steptriggers added - - code_imp: Flare box now contains 14 instead of just 4 flares. - - code_imp: Mind secure closets added - - code_imp: Persistence doesn't do to_world anymore - - code_imp: Removes a LOT OF VORESTATION EDIT COMMENTS as we are no longer a downstream. - - code_imp: '''DO NOT USE'' sprite_accessories will no longer appear.' - - code_imp: disk/data was removed and replaced with disk/body_record. Fluff item - fixed with this in mind. - - code_imp: Gets rid of RS comments that slipped into our code somehow. - - code_imp: Save_character will now tell you you saved your character. - - code_imp: Abandoned crates given dna injectors as possible loot. Teppi ray added. - Alien junk prop added. - - bugfix: When an observer/dead is destroyed, it now properly gets rid of the visualnet - blocked turfs. - - bugfix: choosing high blood volume no longer kills you on spawn - - bugfix: AI eye no longer hard deletes - - rscadd: Last_breath_sounds added from CS. Touched human/human.dm - - bugfix: Rest-left Rest-right works properly - - code_imp: Moving with broken limbs checks to see if you can feel pain before doing - a pain emote - - code_imp: Radiation cap increased to 5000 to account for rad resistant peoples. - - code_imp: Radiation now is decreased by a rad_removal_mod. - - code_imp: Shrinks & grows vars added. Not used here, but used downstream. Crit_mod - as well. - - code_imp: Monkeys no longer process if there is nobody on their Z level - - bugfix: Protean rig no longer hard deletes - - bugfix: PAI no longer gets stuck outside disposals - - code_imp: new censor_swears proc. - - code_imp: Polls now have the 'NEW' under them instead of next to them - - code_imp: Brain moved from /new to /init - - code_imp: Droplimb acid added - - balance: Immunorejection chems last much longer - - code_imp: Adds a debug log if someone spawns with no DNA - - code_imp: Resleeve designer can now add flavortext per limb - - bugfix: Resleever properly applys digi legs now. - - balance: Resleeve sickness is no longer a thing (you also do not get genetic mutations - from the sleever) - - code_imp: Psionic and wingdings fonts added - - code_imp: 'Makes the SD MAP_OVERRIDE warning note that it is the SD not the tether + - bugfix: Fixes a server crashing issue with flip emote + - bugfix: Fixes Genetics and all the powers that came with it + - rscadd: Adds Trait Genetics to the game. (Genetics can activate/deactivate traits) + - rscadd: + Various new traits up-ported (drippy, rad-resistance/immunity, Photosynthesis, + Rotting Genetics, Incomprehensible, Less blood volume, slowdown EXTREME, low + blood sugar, Agoraphobia, Loneliness, Glass Endurance, reduced biocompat, photosensitivity, + haemophillia, pain intolerance, sensitive biochem, table passer,) + - rscadd: + Health analyzers tell you if someone is suffering from a genetic side + effect and what to give to cure them. + - rscadd: Allows cocoon weaver to change eye and skin color + - bugfix: Various small bugfixes up-ported from Chomp + - sound: Added some founds from Chomp for space inhale/exhale sounds + - refactor: Refactors how radiation code works to work with rad resistance/immunity. + - refactor: + Genetic side effects edited NOT to be shitcode with spawns & sleeps. + Made to use timers instead. + - code_imp: Updated a LOT of files to be equivalent to their chomp versions. + - balance: + Adjusted laser eyes to do 10 damage instead of 40 per shot, due to + being spammable and nutrition being extremely high. + - balance: + Chems that formerly fixed genetic damage now heal cloneloss instead of + genetics, since the new system is incomparable with old genetic healing. + - rscadd: + People can be reset to their default with the resleever console, as it + can print out a genetic injector that does NO radiation or genetic damage, just + purely fixing them back to their default. + - code_imp: + A lot of the below were added because while updating the files to be + 1:1 where traitgene changes occured, there were massive changes codewise. + - code_imp: Autostrip steptriggers added + - code_imp: Flare box now contains 14 instead of just 4 flares. + - code_imp: Mind secure closets added + - code_imp: Persistence doesn't do to_world anymore + - code_imp: Removes a LOT OF VORESTATION EDIT COMMENTS as we are no longer a downstream. + - code_imp: "'DO NOT USE' sprite_accessories will no longer appear." + - code_imp: + disk/data was removed and replaced with disk/body_record. Fluff item + fixed with this in mind. + - code_imp: Gets rid of RS comments that slipped into our code somehow. + - code_imp: Save_character will now tell you you saved your character. + - code_imp: + Abandoned crates given dna injectors as possible loot. Teppi ray added. + Alien junk prop added. + - bugfix: + When an observer/dead is destroyed, it now properly gets rid of the visualnet + blocked turfs. + - bugfix: choosing high blood volume no longer kills you on spawn + - bugfix: AI eye no longer hard deletes + - rscadd: Last_breath_sounds added from CS. Touched human/human.dm + - bugfix: Rest-left Rest-right works properly + - code_imp: + Moving with broken limbs checks to see if you can feel pain before doing + a pain emote + - code_imp: Radiation cap increased to 5000 to account for rad resistant peoples. + - code_imp: Radiation now is decreased by a rad_removal_mod. + - code_imp: + Shrinks & grows vars added. Not used here, but used downstream. Crit_mod + as well. + - code_imp: Monkeys no longer process if there is nobody on their Z level + - bugfix: Protean rig no longer hard deletes + - bugfix: PAI no longer gets stuck outside disposals + - code_imp: new censor_swears proc. + - code_imp: Polls now have the 'NEW' under them instead of next to them + - code_imp: Brain moved from /new to /init + - code_imp: Droplimb acid added + - balance: Immunorejection chems last much longer + - code_imp: Adds a debug log if someone spawns with no DNA + - code_imp: Resleeve designer can now add flavortext per limb + - bugfix: Resleever properly applys digi legs now. + - balance: + Resleeve sickness is no longer a thing (you also do not get genetic mutations + from the sleever) + - code_imp: Psionic and wingdings fonts added + - code_imp: + "Makes the SD MAP_OVERRIDE warning note that it is the SD not the tether - code:' - - code_imp: Xenomorph references changed to Genaprawn like downstream, was included - in a few files that were being changed. - - code_imp: span_major_announcement, ooc_announcement and subheader_announcement - addeed - - code_imp: send_ooc_announcement proc added - - code_imp: Gets rid of a spawn(0) in species generation + code:" + - code_imp: + Xenomorph references changed to Genaprawn like downstream, was included + in a few files that were being changed. + - code_imp: + span_major_announcement, ooc_announcement and subheader_announcement + addeed + - code_imp: send_ooc_announcement proc added + - code_imp: Gets rid of a spawn(0) in species generation 2025-02-15: CHOMPStation2StaffMirrorBot: - - code_imp: moves the dependencies to 516.1655 - - code_imp: tgui 516 + - code_imp: moves the dependencies to 516.1655 + - code_imp: tgui 516 2025-02-16: CHOMPStation2StaffMirrorBot: - - code_imp: cleans up a lot of badly converted News - - bugfix: The chemmaster will no longer have ethanol turn into wine like Jesus touched - it - - bugfix: fixes picking a hair style properly instead of just a simple null check - (passing the user properly) - - code_imp: Adjusts the temp cap to be higher for engineers trying to make hellmixes. - - bugfix: Gases will no longer linger as microscopic values in pipes. - - bugfix: IRC comms are disabled without a password set - - refactor: up-ports ghost orbiting refactor - - bugfix: runechat size multiplier offset - - code_imp: Anything in the /mob to /human pathline qdels properly - - code_imp: There is now a Unit Test to make sure reagents are valid. - - bugfix: Tequila is no longer spelt TequiLLa. Update your maps if they have it - placed there manually! - - code_imp: removes no longer needed spawns - - bugfix: meteor gone projectile - - bugfix: muzzle flash lasting forever - - bugfix: body record disks being spawned in every box - - code_imp: move runechat to a subsystem + - code_imp: cleans up a lot of badly converted News + - bugfix: + The chemmaster will no longer have ethanol turn into wine like Jesus touched + it + - bugfix: + fixes picking a hair style properly instead of just a simple null check + (passing the user properly) + - code_imp: Adjusts the temp cap to be higher for engineers trying to make hellmixes. + - bugfix: Gases will no longer linger as microscopic values in pipes. + - bugfix: IRC comms are disabled without a password set + - refactor: up-ports ghost orbiting refactor + - bugfix: runechat size multiplier offset + - code_imp: Anything in the /mob to /human pathline qdels properly + - code_imp: There is now a Unit Test to make sure reagents are valid. + - bugfix: + Tequila is no longer spelt TequiLLa. Update your maps if they have it + placed there manually! + - code_imp: removes no longer needed spawns + - bugfix: meteor gone projectile + - bugfix: muzzle flash lasting forever + - bugfix: body record disks being spawned in every box + - code_imp: move runechat to a subsystem Diana: - - rscadd: Adds a bunch of wings to the server from Chompstation - - code_imp: Radiation now works differently on the backend. - - bugfix: Enabling and disabling the radiation immunity trait no longer breaks things. - - bugfix: Fixes a 10 year bug where you wouldn't get your cult spells when turned - into a construct. - - code_imp: Makes spells less garbage. + - rscadd: Adds a bunch of wings to the server from Chompstation + - code_imp: Radiation now works differently on the backend. + - bugfix: Enabling and disabling the radiation immunity trait no longer breaks things. + - bugfix: + Fixes a 10 year bug where you wouldn't get your cult spells when turned + into a construct. + - code_imp: Makes spells less garbage. Guti: - - image: Added a few icon effects + - image: Added a few icon effects TheGreatKitsune: - - bugfix: removes an unintended way to break into/out of VR + - bugfix: removes an unintended way to break into/out of VR Will: - - bugfix: Vents now properly hibernate instead of running 24/7 - - code_imp: Gets rid of more sleeps - - code_imp: Showers are more efficient on the backend + - bugfix: Vents now properly hibernate instead of running 24/7 + - code_imp: Gets rid of more sleeps + - code_imp: Showers are more efficient on the backend 2025-02-17: CHOMPStation2StaffMirrorBot: - - code_imp: next part of the new to init - - bugfix: tgui say boarder color not updating on larger sizes - - bugfix: tgui say not reverting to say channel on radio channel prefix - - bugfix: channel swap on button click drag - - bugfix: cyborg mats will never show up now - - rscadd: You can now use storage containers that is in another storage container + - code_imp: next part of the new to init + - bugfix: tgui say boarder color not updating on larger sizes + - bugfix: tgui say not reverting to say channel on radio channel prefix + - bugfix: channel swap on button click drag + - bugfix: cyborg mats will never show up now + - rscadd: You can now use storage containers that is in another storage container tacoguy7765093: - - bugfix: Map fixes + - bugfix: Map fixes 2025-02-19: ItsSelis: - - code_imp: changelog hash is now a global var - - code_imp: last viewed changelog is now a tg pref + - code_imp: changelog hash is now a global var + - code_imp: last viewed changelog is now a tg pref TheCaramelion: - - qol: Engineering will get an alarm whenever a fire alarm triggers - - balance: Makes fire less spreadable + - qol: Engineering will get an alarm whenever a fire alarm triggers + - balance: Makes fire less spreadable 2025-02-21: CHOMPStation2StaffMirrorBot: - - bugfix: build mode dropped items will no longer always gib - - rscadd: lockpick sets can now be found as part of the contraband pool in maint - items (useless on station though) - - rscadd: lockpick sets can now be used to pick fence gates as well - - image: resprited the basic lockpick set + - bugfix: build mode dropped items will no longer always gib + - rscadd: + lockpick sets can now be found as part of the contraband pool in maint + items (useless on station though) + - rscadd: lockpick sets can now be used to pick fence gates as well + - image: resprited the basic lockpick set Kashargul: - - qol: prevents too long messages from being sent in tgui say + - qol: prevents too long messages from being sent in tgui say tacoguy7765093: - - bugfix: Mapping errors on relic_base and NS_mines + - bugfix: Mapping errors on relic_base and NS_mines 2025-02-22: Cameron-The-Raven: - - bugfix: Shooting a ghost with firefighting foam will no longer make the server - explode - - bugfix: Proteans will no longer runtime under certain circumstances - - image: The splash screen now is more vibrant and higher quality! + - bugfix: + Shooting a ghost with firefighting foam will no longer make the server + explode + - bugfix: Proteans will no longer runtime under certain circumstances + - image: The splash screen now is more vibrant and higher quality! Drulikar: - - maptweak: Corrections in most chomp maps for the new lints - - code_imp: Ported maplints - - code_imp: Enabled dmi testing lint - - code_imp: DMM test now lints against maps not in TGM format (in modular_chomp/maps) - and lints against maps pending a mapmerge - - code_imp: Updated pillow dependency (Reinstall hooks to update bootstrap) - - code_imp: /turf/simulated/shuttle will now perform an underlay_update if it takes_underlays - (instead of only walls doing this) - - rscdel: Removed a corrupt dmi file - - rscdel: Removed duplicate dreamchecker lint in CI - - rscdel: Removed relic base map backups (just use github history) + - maptweak: Corrections in most chomp maps for the new lints + - code_imp: Ported maplints + - code_imp: Enabled dmi testing lint + - code_imp: + DMM test now lints against maps not in TGM format (in modular_chomp/maps) + and lints against maps pending a mapmerge + - code_imp: Updated pillow dependency (Reinstall hooks to update bootstrap) + - code_imp: + /turf/simulated/shuttle will now perform an underlay_update if it takes_underlays + (instead of only walls doing this) + - rscdel: Removed a corrupt dmi file + - rscdel: Removed duplicate dreamchecker lint in CI + - rscdel: Removed relic base map backups (just use github history) Hunter-Dovetail: - - rscadd: scaled_belly-torso - - code_imp: adjusted code for scaled_belly to allow for digi-legs + - rscadd: scaled_belly-torso + - code_imp: adjusted code for scaled_belly to allow for digi-legs 2025-02-23: CHOMPStation2StaffMirrorBot: - - rscadd: Reagent-removing 'Pruning mode' to the floral somatoray - - bugfix: no more crashing as a ghost + - rscadd: Reagent-removing 'Pruning mode' to the floral somatoray + - bugfix: no more crashing as a ghost Drathek: - - code_imp: Cleanup CI and add chomp edit comments to tooling edits + - code_imp: Cleanup CI and add chomp edit comments to tooling edits Tost: - - qol: Changed nail polish's size to small - - code_imp: Added w_class = ITEMSIZE_SMALL to nail polish, which was missing originally. + - qol: Changed nail polish's size to small + - code_imp: Added w_class = ITEMSIZE_SMALL to nail polish, which was missing originally. 2025-02-24: CHOMPStation2StaffMirrorBot: - - refactor: moved one global var to a managed global (to test the workflow change) - - bugfix: Snake tail no longer has a stray white void pixel following you 24/7 when - facing south - - bugfix: pizza vouchers will no longer land with such speed that they gib any user, - even if not emagged. + - refactor: moved one global var to a managed global (to test the workflow change) + - bugfix: + Snake tail no longer has a stray white void pixel following you 24/7 when + facing south + - bugfix: + pizza vouchers will no longer land with such speed that they gib any user, + even if not emagged. 2025-02-25: CHOMPStation2StaffMirrorBot: - - rscadd: Add a button to set gender of simplemobs - - qol: Adds text to art canvas descriptions indicating their size + - rscadd: Add a button to set gender of simplemobs + - qol: Adds text to art canvas descriptions indicating their size Kashargul: - - bugfix: ooc style not being toggle able in character editor + - bugfix: ooc style not being toggle able in character editor Missile597: - - maptweak: Removed access requirement to main part of space disposals to muffin - monster can be accessed without ID to enable retrieval of flushed items - - maptweak: Chemical dispensers returned to xenobotany and to xenoarchaeology - - maptweak: Sif outpost and xenoarchaology outpost scrubber loops updated to filter - properly and also filter volatile fuel - - maptweak: Removed access requirement to the central maints tunnel. Any secure - exits to this tunnel are still access protected - - maptweak: Fixed medical bathrooms not being attached to station atmos. Removed - some excess piping and wiring going to no destination in maints - - maptweak: Added a bit more power and some lights to the starhunter base. The vending - machines should hopefully have enough power now - - maptweak: Fixes the heavy duty wire by the outpost R-UST that wasn't properly - oriented. Power should flow now - - maptweak: Tweaked security doors to have correct access levels. Main areas will - now be Security instead of Security equipment. + - maptweak: + Removed access requirement to main part of space disposals to muffin + monster can be accessed without ID to enable retrieval of flushed items + - maptweak: Chemical dispensers returned to xenobotany and to xenoarchaeology + - maptweak: + Sif outpost and xenoarchaology outpost scrubber loops updated to filter + properly and also filter volatile fuel + - maptweak: + Removed access requirement to the central maints tunnel. Any secure + exits to this tunnel are still access protected + - maptweak: + Fixed medical bathrooms not being attached to station atmos. Removed + some excess piping and wiring going to no destination in maints + - maptweak: + Added a bit more power and some lights to the starhunter base. The vending + machines should hopefully have enough power now + - maptweak: + Fixes the heavy duty wire by the outpost R-UST that wasn't properly + oriented. Power should flow now + - maptweak: + Tweaked security doors to have correct access levels. Main areas will + now be Security instead of Security equipment. 2025-02-26: CHOMPStation2StaffMirrorBot: - - code_imp: disabled some testing logs by default (now require -DTESTING to be set - while compiling) - - rscadd: Vampiric crew now have a source of nutrition in the loadout under the - Utility tab! + - code_imp: + disabled some testing logs by default (now require -DTESTING to be set + while compiling) + - rscadd: + Vampiric crew now have a source of nutrition in the loadout under the + Utility tab! 2025-02-27: CHOMPStation2StaffMirrorBot: - - bugfix: fixed a few lines of code so that the code is compileable in OpenDream + - bugfix: fixed a few lines of code so that the code is compileable in OpenDream FluffMedic: - - maptweak: portal puzzle is a bit better, wierd plants are back, other minor things + - maptweak: portal puzzle is a bit better, wierd plants are back, other minor things Kashargul: - - bugfix: soul captured mobs can now use subtle and whisper + - bugfix: soul captured mobs can now use subtle and whisper diff --git a/html/changelogs_ch/archive/2025-03.yml b/html/changelogs_ch/archive/2025-03.yml index 88cdcb4f68..8f3f6119f9 100644 --- a/html/changelogs_ch/archive/2025-03.yml +++ b/html/changelogs_ch/archive/2025-03.yml @@ -1,630 +1,729 @@ 2025-03-01: CHOMPStation2StaffMirrorBot: - - bugfix: Fixed mantraps eating the same person instantly on escape, they now do - not eat someone who has escaped them previously. - - bugfix: Fixed a few mob names being capitalised. - - code_imp: removes sleep from light flicker - - code_imp: enables the block spawn on runechat now where flicker is fixed - - rscadd: Added privacy switches to all dorm rooms, these buttons make an overlay - appear on the room for ghosts preventing them seeing inside. This does not currently - prevent them hearing emotes from inside the room, it's purely a visual block. - - bugfix: Fixed station maps for the map linter PR. - - bugfix: Fixed a missing air alarm in the tether atmos break room. - - bugfix: door controllers being instant triggerable + - bugfix: + Fixed mantraps eating the same person instantly on escape, they now do + not eat someone who has escaped them previously. + - bugfix: Fixed a few mob names being capitalised. + - code_imp: removes sleep from light flicker + - code_imp: enables the block spawn on runechat now where flicker is fixed + - rscadd: + Added privacy switches to all dorm rooms, these buttons make an overlay + appear on the room for ghosts preventing them seeing inside. This does not currently + prevent them hearing emotes from inside the room, it's purely a visual block. + - bugfix: Fixed station maps for the map linter PR. + - bugfix: Fixed a missing air alarm in the tether atmos break room. + - bugfix: door controllers being instant triggerable Diana: - - bugfix: Makes it so you can attack without hands - - bugfix: Fixes grabbing a buckled entity to cause you to be perma-slowed - - bugfix: You will no longer bleed to death from a headbutt - - code_imp: Removes attack_paw - - code_imp: Makes the attack_hand code less garbage + - bugfix: Makes it so you can attack without hands + - bugfix: Fixes grabbing a buckled entity to cause you to be perma-slowed + - bugfix: You will no longer bleed to death from a headbutt + - code_imp: Removes attack_paw + - code_imp: Makes the attack_hand code less garbage Hunter-Dovetail: - - rscadd: scaled_belly-l_leg, scaled_belly-r_leg, scaled_belly-groin - - bugfix: dragon_upperjaw-head + - rscadd: scaled_belly-l_leg, scaled_belly-r_leg, scaled_belly-groin + - bugfix: dragon_upperjaw-head Will: - - code_imp: Trasheater is no longer an abomination to look at in the code - - rscadd: Adds a new motion tracker subsystem to the game to allow for tracking - entities through walls! - - rscadd: Adds a motion tracker item to R&D - - rscadd: Adds a vibration sense trait that allows users to hear entities moving - through walls - - qol: Teshari's and Xenochimera's 'listen in' verb has been upgraded to the new - listen-in trait + - code_imp: Trasheater is no longer an abomination to look at in the code + - rscadd: + Adds a new motion tracker subsystem to the game to allow for tracking + entities through walls! + - rscadd: Adds a motion tracker item to R&D + - rscadd: + Adds a vibration sense trait that allows users to hear entities moving + through walls + - qol: + Teshari's and Xenochimera's 'listen in' verb has been upgraded to the new + listen-in trait 2025-03-02: CHOMPStation2StaffMirrorBot: - - admin: fix internet audio player - - qol: people can now hide entertainment radio messages separately + - admin: fix internet audio player + - qol: people can now hide entertainment radio messages separately Diana: - - bugfix: You no longer check if you can remove your internal organs to throw them - at people - - bugfix: You can no longer become immortal via cocoon weaver - - bugfix: Cocoon weaver now properly makes a TGUI window and keeps it. - - qol: Replaces face-left and face-right with a 'change facing' verb from Chomp - for when you're laying down. - - bugfix: You can no longer change facing direction, toggle glow, - - bugfix: Spin cocoon can no longer be used while buckled which caused space time - reality to break - - code_imp: Upgrades update_icons to work better and support change-facing - - bugfix: You can no longer cause telecrystal inflation - - code_imp: Gets a few things standardized by having the base /proc/ have /var and - its children being normal. + - bugfix: + You no longer check if you can remove your internal organs to throw them + at people + - bugfix: You can no longer become immortal via cocoon weaver + - bugfix: Cocoon weaver now properly makes a TGUI window and keeps it. + - qol: + Replaces face-left and face-right with a 'change facing' verb from Chomp + for when you're laying down. + - bugfix: You can no longer change facing direction, toggle glow, + - bugfix: + Spin cocoon can no longer be used while buckled which caused space time + reality to break + - code_imp: Upgrades update_icons to work better and support change-facing + - bugfix: You can no longer cause telecrystal inflation + - code_imp: + Gets a few things standardized by having the base /proc/ have /var and + its children being normal. Drathek: - - rscadd: Added OD pragma lints - - bugfix: Fixed various issues caught by errors e.g. icon_forge's apply method, - VV on a list, etc. - - bugfix: Fixed various issues with apply_damage where arguments were incorrect - for used_weapon + - rscadd: Added OD pragma lints + - bugfix: + Fixed various issues caught by errors e.g. icon_forge's apply method, + VV on a list, etc. + - bugfix: + Fixed various issues with apply_damage where arguments were incorrect + for used_weapon Kashargul, Nadyr: - - code_imp: replaces more font tags + - code_imp: replaces more font tags Will: - - bugfix: motion tracking ability now lets you properly motion track - - qol: Motion tracker subsystem can be toggled off for hide and seek modes - - bugfix: Potentially fixes your organs exploding when you spawn in - - bugfix: no more randomly invisible marker beacons + - bugfix: motion tracking ability now lets you properly motion track + - qol: Motion tracker subsystem can be toggled off for hide and seek modes + - bugfix: Potentially fixes your organs exploding when you spawn in + - bugfix: no more randomly invisible marker beacons Will, Diana, Kash.: - - code_imp: There is now a unit test that will ENSURE every borg sprite from this - point forwards in time will have proper sprites. - Will - - bugfix: Fixes a LOT of broken sprites. - Diana - - rscadd: Adds variant catborgs (old variant), Dullahan variants - - rscadd: A BUNCH of sprites - - rscadd: Up-ports the Stoat and Possum from Outpost - - rscadd: Worm Borgs now have better sprites - - rscadd: More than one decal can be added to borgs - - qol: Surgery and crisis combined + - code_imp: + There is now a unit test that will ENSURE every borg sprite from this + point forwards in time will have proper sprites. - Will + - bugfix: Fixes a LOT of broken sprites. - Diana + - rscadd: Adds variant catborgs (old variant), Dullahan variants + - rscadd: A BUNCH of sprites + - rscadd: Up-ports the Stoat and Possum from Outpost + - rscadd: Worm Borgs now have better sprites + - rscadd: More than one decal can be added to borgs + - qol: Surgery and crisis combined tacoguy7765093: - - rscadd: Simplemob zorgoia markings added. Stars, full head, tail fade + - rscadd: Simplemob zorgoia markings added. Stars, full head, tail fade 2025-03-03: CHOMPStation2StaffMirrorBot: - - qol: using a database to store the round logs to reduce client-side lag - - qol: using same database to load the most recent messages into the chat (instead - of having to fetch from client browser) - - code_imp: refactors more new to init - - spellcheck: Adjusted the OOC escape text. Instead of starting strong with 'don't - use this', let's be more passive tone. - - spellcheck: Weight selection is less aggressive as well. - - bugfix: dogborg id properly deletes - - rscadd: ctrl u, i, b markups for text inputs - - code_imp: some more 516 things + - qol: using a database to store the round logs to reduce client-side lag + - qol: + using same database to load the most recent messages into the chat (instead + of having to fetch from client browser) + - code_imp: refactors more new to init + - spellcheck: + Adjusted the OOC escape text. Instead of starting strong with 'don't + use this', let's be more passive tone. + - spellcheck: Weight selection is less aggressive as well. + - bugfix: dogborg id properly deletes + - rscadd: ctrl u, i, b markups for text inputs + - code_imp: some more 516 things Diana, Will: - - bugfix: Protean rigs actually have a proper sprite and aren't just invisible. - - bugfix: Fixes RIG gear to not drop your equipped items - - bugfix: If a suit tells you it 'protects you between X any Y temperatures' it - actually does, now! - - code_imp: There is now a unit test that will tell you if your icons are broken! - - bugfix: Over a 100+ uniforms, accessories, gloves, boots, suits, etc have been - fixed spritewise. - - code_imp: over 3600 missing sprite icons have been identified... + - bugfix: Protean rigs actually have a proper sprite and aren't just invisible. + - bugfix: Fixes RIG gear to not drop your equipped items + - bugfix: + If a suit tells you it 'protects you between X any Y temperatures' it + actually does, now! + - code_imp: There is now a unit test that will tell you if your icons are broken! + - bugfix: + Over a 100+ uniforms, accessories, gloves, boots, suits, etc have been + fixed spritewise. + - code_imp: over 3600 missing sprite icons have been identified... tacoguy7765093: - - admin: /proc/toggle_selfsurgery() works now. + - admin: /proc/toggle_selfsurgery() works now. 2025-03-05: CHOMPStation2StaffMirrorBot: - - rscadd: Atmos and Medical holosigns - - rscadd: Super Matter lighters - - rscadd: Light painters - - rscadd: Mail System, blank envelopes, and mail scanner. - - rscadd: Blank envelopes - - rscadd: Mail scanner - - bugfix: changeTurf will no longer create outdoor turfs in turbolifts or shuttles - - rscadd: Adds Purple Robes and Tiara to loadout - - qol: lowers cost of suit clothing fluff (This helps you identify which ones have - armor and which ones don't, as some things are naturally priced higher due to - their innate armor) - - qol: Brings some loadout items to normal prices (increased is reserved for ones - that give armor) - - bugfix: Fixes neural implant always having 2 cost due to implant/language existing - and taking priority. - - qol: Neural implant only costs one loadout point, now. - - rscadd: Adds pirate coat and pirate hat to loadout. Yarr! - - qol: veymed autoadaptive suits can now handle teshari - - balance: veymed tesh suits changed to generic nonadaptive suits - - qol: '"streamlined" changed to "lightweight" in veymed suit names' + - rscadd: Atmos and Medical holosigns + - rscadd: Super Matter lighters + - rscadd: Light painters + - rscadd: Mail System, blank envelopes, and mail scanner. + - rscadd: Blank envelopes + - rscadd: Mail scanner + - bugfix: changeTurf will no longer create outdoor turfs in turbolifts or shuttles + - rscadd: Adds Purple Robes and Tiara to loadout + - qol: + lowers cost of suit clothing fluff (This helps you identify which ones have + armor and which ones don't, as some things are naturally priced higher due to + their innate armor) + - qol: + Brings some loadout items to normal prices (increased is reserved for ones + that give armor) + - bugfix: + Fixes neural implant always having 2 cost due to implant/language existing + and taking priority. + - qol: Neural implant only costs one loadout point, now. + - rscadd: Adds pirate coat and pirate hat to loadout. Yarr! + - qol: veymed autoadaptive suits can now handle teshari + - balance: veymed tesh suits changed to generic nonadaptive suits + - qol: '"streamlined" changed to "lightweight" in veymed suit names' Diana. Tacoguy, Kash: - - rscadd: Tacoguy - Adds Combat Medic Catborg sprite. - - code_imp: Kash - Robot linter will now properly detect stomach states. - - code_imp: Diana - Fixes invisible robot sprites. + - rscadd: Tacoguy - Adds Combat Medic Catborg sprite. + - code_imp: Kash - Robot linter will now properly detect stomach states. + - code_imp: Diana - Fixes invisible robot sprites. Will: - - code_imp: Vents work better + - code_imp: Vents work better 2025-03-07: CHOMPStation2StaffMirrorBot: - - code_imp: updated the minimum compiler version of the project - - bugfix: Fixed duplicate APCs in the same area on station maps. - - bugfix: Fixed redgate ladders that allowed upwards movement without having a z-level - above. - - bugfix: More maps fixed for the linter. - - qol: allows chat settings to be ex / imported - - qol: allows to prune history of specific tabs - - bugfix: some rare scaling issues - - qol: adds close button - - qol: resizes button - - rscadd: added fake coins to loadouts, can be flipped, can't be put in vendors - - rscadd: 'added seven new coin types (plus fakes): steel, titanium, copper, durasteel, - plasteel, graphite, and lead. some of these are in the random coin spawner.' - - image: moved coin icons into their own dmi - - refactor: a sheet's coin type is now set on the stack obj definition, tidied up - the mint code to not be a string of if/else if, and to not require a list of - valid materials on the machine, so now it's easier to add new coin types. coin - names also use material def names now. - - code_imp: resolves some more init and destroy issues + - code_imp: updated the minimum compiler version of the project + - bugfix: Fixed duplicate APCs in the same area on station maps. + - bugfix: + Fixed redgate ladders that allowed upwards movement without having a z-level + above. + - bugfix: More maps fixed for the linter. + - qol: allows chat settings to be ex / imported + - qol: allows to prune history of specific tabs + - bugfix: some rare scaling issues + - qol: adds close button + - qol: resizes button + - rscadd: added fake coins to loadouts, can be flipped, can't be put in vendors + - rscadd: + "added seven new coin types (plus fakes): steel, titanium, copper, durasteel, + plasteel, graphite, and lead. some of these are in the random coin spawner." + - image: moved coin icons into their own dmi + - refactor: + a sheet's coin type is now set on the stack obj definition, tidied up + the mint code to not be a string of if/else if, and to not require a list of + valid materials on the machine, so now it's easier to add new coin types. coin + names also use material def names now. + - code_imp: resolves some more init and destroy issues Diana: - - rscadd: You no longer hallucinate while absorbed with low blood sugar - - bugfix: Teshari can now use small wheelchairs (and so can others) - - qol: Reworks the medical kiosk to have use. It now dispenses small amounts of - painpills and medications to help stabilize you to get you to medical before - you croak. - - qol: Lungs no longer IMMEDIATELY risk popping if you forget internals for one - second. You now have gradually accumulate damage over time. Get those internals - on quick! - - qol: Infections now give you a better alert that it's an INFECTION you have instead - of just a random 'you feel itchy' so players are less blindsided by infections. - - qol: Adjusts the text that you get when you suffer internal bleeding. Now it sticks - out more during fights so you can know you have IB and get to medical quicker. - - rscadd: Makes the medical kiosk actually DETECT more issues than before. Now it - actually does a full body scan on you to see what's wrong with you! - - qol: Crayons and markers are no longer the strongest poison in the game. One crayon - won't OD you anymore, but two will. One marker can still OD you with disaster - effects if you eat it entirely. OORAH - - bugfix: Crayons and markers get properly added to your stomach - - bugfix: inaprovaline PROPERLY affects internal bleeding now. - - qol: Putting pressure on an external wound will put some pressure on arterial - bleeds as well, helping decrease (but not entirely stop) bloodloss. - - qol: Vox can be defibbed. - - code_imp: Changes a few sections in the code to use REAGENTS_OVERDOSE instead - of just a plain number. - - code_imp: Gets rid of a few //EDIT comments for better code quality. - - code_imp: Moved internal wound handling to handle_blood() - - rscadd: You can now unwrench pipes that are over-pressurized, at the cost of being - flung back. - - bugfix: Atmos analyzers will no longer fail on portable connectors - - bugfix: No more attempting to blendRGB if we have nothing to blend. - - bugfix: Diseases will not try to copy non-existent vars over. - - bugfix: Recursive explosions no longer runtime if the turf it tries to step into - is invalid. - - qol: Health analyzer guide now tells users what to do, no longer requiring medical - access. Also some wording changes. - - bugfix: Health analyzer guide no longer runtimes if someone has no viruses. - - bugfix: Cards no longer runtime if you try to pull a card without being a human. - - bugfix: Anything-turned-protean will alert you if it has no humanform - - bugfix: Tunneler spiders will no longer runtime if the turf they try to tunnel - into doesn't exist - - bugfix: Mannequins now properly get deleted when you observe. - - bugfix: When placing a pipe on a pipeline, the pipeline will no longer lose all - the gas within the pipeline. This occurred when you placed a new pipe on a pipeline - that had not had not previously had a pipe unwrenched on the pipeline, resulting - in the pipes on the pipeline not saving the gas, resulting in all the gas within - the pipes on that pipeline being voided. + - rscadd: You no longer hallucinate while absorbed with low blood sugar + - bugfix: Teshari can now use small wheelchairs (and so can others) + - qol: + Reworks the medical kiosk to have use. It now dispenses small amounts of + painpills and medications to help stabilize you to get you to medical before + you croak. + - qol: + Lungs no longer IMMEDIATELY risk popping if you forget internals for one + second. You now have gradually accumulate damage over time. Get those internals + on quick! + - qol: + Infections now give you a better alert that it's an INFECTION you have instead + of just a random 'you feel itchy' so players are less blindsided by infections. + - qol: + Adjusts the text that you get when you suffer internal bleeding. Now it sticks + out more during fights so you can know you have IB and get to medical quicker. + - rscadd: + Makes the medical kiosk actually DETECT more issues than before. Now it + actually does a full body scan on you to see what's wrong with you! + - qol: + Crayons and markers are no longer the strongest poison in the game. One crayon + won't OD you anymore, but two will. One marker can still OD you with disaster + effects if you eat it entirely. OORAH + - bugfix: Crayons and markers get properly added to your stomach + - bugfix: inaprovaline PROPERLY affects internal bleeding now. + - qol: + Putting pressure on an external wound will put some pressure on arterial + bleeds as well, helping decrease (but not entirely stop) bloodloss. + - qol: Vox can be defibbed. + - code_imp: + Changes a few sections in the code to use REAGENTS_OVERDOSE instead + of just a plain number. + - code_imp: Gets rid of a few //EDIT comments for better code quality. + - code_imp: Moved internal wound handling to handle_blood() + - rscadd: + You can now unwrench pipes that are over-pressurized, at the cost of being + flung back. + - bugfix: Atmos analyzers will no longer fail on portable connectors + - bugfix: No more attempting to blendRGB if we have nothing to blend. + - bugfix: Diseases will not try to copy non-existent vars over. + - bugfix: + Recursive explosions no longer runtime if the turf it tries to step into + is invalid. + - qol: + Health analyzer guide now tells users what to do, no longer requiring medical + access. Also some wording changes. + - bugfix: Health analyzer guide no longer runtimes if someone has no viruses. + - bugfix: Cards no longer runtime if you try to pull a card without being a human. + - bugfix: Anything-turned-protean will alert you if it has no humanform + - bugfix: + Tunneler spiders will no longer runtime if the turf they try to tunnel + into doesn't exist + - bugfix: Mannequins now properly get deleted when you observe. + - bugfix: + When placing a pipe on a pipeline, the pipeline will no longer lose all + the gas within the pipeline. This occurred when you placed a new pipe on a pipeline + that had not had not previously had a pipe unwrenched on the pipeline, resulting + in the pipes on the pipeline not saving the gas, resulting in all the gas within + the pipes on that pipeline being voided. Kashargul: - - code_imp: cleans up some old code and moves the useful one to modular + - code_imp: cleans up some old code and moves the useful one to modular 2025-03-08: CHOMPStation2StaffMirrorBot: - - image: added missing sidewalk turf edge overlays - - bugfix: hair gradient selection arrows - - bugfix: wrong blood volumes on apply prefs - - bugfix: early spawns in nullspace - - rscadd: Strong rat variant + - image: added missing sidewalk turf edge overlays + - bugfix: hair gradient selection arrows + - bugfix: wrong blood volumes on apply prefs + - bugfix: early spawns in nullspace + - rscadd: Strong rat variant Kashargul: - - code_imp: cleans up some ini issues + - code_imp: cleans up some ini issues 2025-03-09: CHOMPStation2StaffMirrorBot: - - code_imp: fix initialize for grep checks - - qol: Synthfabs no longer apply massive damage when unupgraded. + - code_imp: fix initialize for grep checks + - qol: Synthfabs no longer apply massive damage when unupgraded. zeskorion: - - rscadd: YR3 Enviroshell prosthetic, which is usable for xenochimerae. a colorable - version is also added. + - rscadd: + YR3 Enviroshell prosthetic, which is usable for xenochimerae. a colorable + version is also added. 2025-03-10: CHOMPStation2StaffMirrorBot: - - code_imp: finishes up typescript - - bugfix: Shield capacitors now only take power from wires when anchored to the - ground. + - code_imp: finishes up typescript + - bugfix: + Shield capacitors now only take power from wires when anchored to the + ground. Caramelion: - - rscadd: Different colourations for carps - - bugfix: Fixed attacking resetting pixelshift position to 0, 0 after the animation - - qol: Allows various mobs to create swarms - - code_imp: Added Swarm component - - code_imp: Added connect_loc_behalf component + - rscadd: Different colourations for carps + - bugfix: Fixed attacking resetting pixelshift position to 0, 0 after the animation + - qol: Allows various mobs to create swarms + - code_imp: Added Swarm component + - code_imp: Added connect_loc_behalf component Diana: - - bugfix: Guns now have their fire_delays fixed. No more rapidfire RPGs. - - qol: Phoron bore gets to keep it's unintentional attack-speed buff. (Mining is - in need of QoL changes, so let this be at least one of them.) + - bugfix: Guns now have their fire_delays fixed. No more rapidfire RPGs. + - qol: + Phoron bore gets to keep it's unintentional attack-speed buff. (Mining is + in need of QoL changes, so let this be at least one of them.) Will: - - rscadd: Adds a new trait 'Lumbar Impairment' which makes you incapable of utilizing - your legs. + - rscadd: + Adds a new trait 'Lumbar Impairment' which makes you incapable of utilizing + your legs. 2025-03-11: CHOMPStation2StaffMirrorBot: - - bugfix: Fixed jungle and fantasy redgates having cave walls generate where they - shouldn't. + - bugfix: + Fixed jungle and fantasy redgates having cave walls generate where they + shouldn't. Diana: - - bugfix: myelamine properly clots your external wounds - - balance: myelamine now applies an up-front heal for bleeding wounds when clotting - them. - - qol: myelamine now ACTUALLY heals internal wounds if you take a 10u dose of it. - No more 'I took 10u and it had 0.1 damage remaining and I bled out 10 minutes - later' - - spellcheck: myelamine has an updated description, informing you that it doesn't - heal JUST internal wounds, but it also heals external wounds. - - spellcheck: myelamine now accurately tells you via the chemmaster that it clots - MORE than just internal hemorrhages. It additionally tells you the ideal dose - for wound healing. + - bugfix: myelamine properly clots your external wounds + - balance: + myelamine now applies an up-front heal for bleeding wounds when clotting + them. + - qol: + myelamine now ACTUALLY heals internal wounds if you take a 10u dose of it. + No more 'I took 10u and it had 0.1 damage remaining and I bled out 10 minutes + later' + - spellcheck: + myelamine has an updated description, informing you that it doesn't + heal JUST internal wounds, but it also heals external wounds. + - spellcheck: + myelamine now accurately tells you via the chemmaster that it clots + MORE than just internal hemorrhages. It additionally tells you the ideal dose + for wound healing. Kashargul: - - bugfix: blood issues in VR + - bugfix: blood issues in VR 2025-03-12: CHOMPStation2StaffMirrorBot: - - qol: admin ranks are now datums - - admin: admin ranks can be now made out of multiple ranks - - server: updates to the database schema and configuration examples - - code_imp: end of file new line fix for grep + - qol: admin ranks are now datums + - admin: admin ranks can be now made out of multiple ranks + - server: updates to the database schema and configuration examples + - code_imp: end of file new line fix for grep Guti: - - bugfix: Fixed swarm mobs becoming walls on death - - code_imp: Slightly changed projectile code to check for lying down mobs instead - of their density + - bugfix: Fixed swarm mobs becoming walls on death + - code_imp: + Slightly changed projectile code to check for lying down mobs instead + of their density Kashargul: - - code_imp: fixes some issues in the random poi init + - code_imp: fixes some issues in the random poi init Will & Diana: - - rscadd: Adds a nevrean plush with two variants, normal and security. - - qol: Goes through and gives plushies speech bubbles pertaining to what they are. - - bugfix: Fixes it so plushies now properly speak. - - qol: Makes it so any interaction with plushies will play their phrase, NOT just - disarm-intenting them (This was never made clear that disarm intent makes them - speak.) - - code_imp: Gets rid of a few non-existent base paths by converting one of the paths - into the base one. (plushy/therapy & plushies/squid) - - bugfix: Fixes the toaster from having the sus plushie sound. - - code_imp: Changed some timers that were calling a proc that just set a var to - false. Instead, we now use a varset_callback timer there. + - rscadd: Adds a nevrean plush with two variants, normal and security. + - qol: Goes through and gives plushies speech bubbles pertaining to what they are. + - bugfix: Fixes it so plushies now properly speak. + - qol: + Makes it so any interaction with plushies will play their phrase, NOT just + disarm-intenting them (This was never made clear that disarm intent makes them + speak.) + - code_imp: + Gets rid of a few non-existent base paths by converting one of the paths + into the base one. (plushy/therapy & plushies/squid) + - bugfix: Fixes the toaster from having the sus plushie sound. + - code_imp: + Changed some timers that were calling a proc that just set a var to + false. Instead, we now use a varset_callback timer there. 2025-03-13: Ace: - - maptweak: Thor map updated - - config: Thor terrain is now configured to spawn appropriate mobs instead of just - placeholder tindalos. + - maptweak: Thor map updated + - config: + Thor terrain is now configured to spawn appropriate mobs instead of just + placeholder tindalos. CHOMPStation2StaffMirrorBot: - - bugfix: Fixed dullahans being in between two tiles - - code_imp: changes the falling turf effect to turfs directly + - bugfix: Fixed dullahans being in between two tiles + - code_imp: changes the falling turf effect to turfs directly Hunter-Dovetail: - - rscadd: scaled_belly-r_leg, scaled_belly-l_leg, chubbybelly_small-r_leg, chubbybelly_small-l_leg - - bugfix: hippo_upperjaw-head, hippo_lowerjaw-head, scaled_belly-groin + - rscadd: scaled_belly-r_leg, scaled_belly-l_leg, chubbybelly_small-r_leg, chubbybelly_small-l_leg + - bugfix: hippo_upperjaw-head, hippo_lowerjaw-head, scaled_belly-groin 2025-03-14: Ace: - - maptweak: Temporarily deletes the security taurs from Thor. - - bugfix: Thor terrains did not actually use the randomized fauna made for it. - - rscadd: Added cave lamias - - rscadd: Added cave spiders to replace space bees in the mines - - balance: Changed the list of what mobs appear in caves + - maptweak: Temporarily deletes the security taurs from Thor. + - bugfix: Thor terrains did not actually use the randomized fauna made for it. + - rscadd: Added cave lamias + - rscadd: Added cave spiders to replace space bees in the mines + - balance: Changed the list of what mobs appear in caves CHOMPStation2StaffMirrorBot: - - code_imp: tgui core to 1.8.2 - - config: the example now has the correct flags for the BUILD and SOUND permissions - - bugfix: Fixed mantraps voring people who step on them when they're dead. - - image: modified the head states of DSI nevreans - - image: modified the torso states of DSI tesh and regular tesh - - rscadd: AI law modules will show the laws they apply when examined - - code_imp: fixes some runtimes + - code_imp: tgui core to 1.8.2 + - config: the example now has the correct flags for the BUILD and SOUND permissions + - bugfix: Fixed mantraps voring people who step on them when they're dead. + - image: modified the head states of DSI nevreans + - image: modified the torso states of DSI tesh and regular tesh + - rscadd: AI law modules will show the laws they apply when examined + - code_imp: fixes some runtimes Diana: - - rscadd: Medical kiosk now informs you how to cure Dizziness and Jitteryness + - rscadd: Medical kiosk now informs you how to cure Dizziness and Jitteryness Guti: - - image: Fixed mailman's hat - - maptweak: Added a couple of mail scanners and mail bags to all the maps + - image: Fixed mailman's hat + - maptweak: Added a couple of mail scanners and mail bags to all the maps Kashargul: - - code_imp: more banned map types + - code_imp: more banned map types Will: - - code_imp: adds some more map tests + - code_imp: adds some more map tests tacoguy7765093: - - maptweak: Removed pointless ladder in explo shelter. - - maptweak: Soluna Nexus duplicate APCs removed. + - maptweak: Removed pointless ladder in explo shelter. + - maptweak: Soluna Nexus duplicate APCs removed. 2025-03-15: Ace: - - rscadd: Gryphons can now rarely appear in the caves. - - rscdel: Sonadile removed from caves at least until the sprite animation looping - bug is fixed. - - bugfix: A cobra lamia was incorrectly used as the base of a cave lamia variant. - It should have been a copper lamia. - - code_imp: Adjusted a few spawn weights for cave mobs. - - balance: Altered Thor animal spawn weights. - - maptweak: Various small changes to Thor + - rscadd: Gryphons can now rarely appear in the caves. + - rscdel: + Sonadile removed from caves at least until the sprite animation looping + bug is fixed. + - bugfix: + A cobra lamia was incorrectly used as the base of a cave lamia variant. + It should have been a copper lamia. + - code_imp: Adjusted a few spawn weights for cave mobs. + - balance: Altered Thor animal spawn weights. + - maptweak: Various small changes to Thor CHOMPStation2StaffMirrorBot: - - code_imp: some more grep checks - - bugfix: Fixed a number of duplicate structures and cleanables on maps for the - map linter PR. + - code_imp: some more grep checks + - bugfix: + Fixed a number of duplicate structures and cleanables on maps for the + map linter PR. Cameron-The-Raven: - - rscadd: Riftwalkers will now be able to swap their sprite appearances on demand. - (This means you have much more riftwalker sprites to choose from!) - - rscadd: Riftwalkers now have two new LARGE sprites (brutola and ignia) which have - 2 stomach sprites each + - rscadd: + Riftwalkers will now be able to swap their sprite appearances on demand. + (This means you have much more riftwalker sprites to choose from!) + - rscadd: + Riftwalkers now have two new LARGE sprites (brutola and ignia) which have + 2 stomach sprites each Diana: - - rscadd: Adds gooborgs! Sprites by Toriate - - rscadd: You can now TOGGLE STOMACH GLOWING on borgs! If toggled on, your tummy - will GLOW IN THE DARK! - - rscadd: Catborgs now have passive glowing parts if they are toggled on - - code_imp: Robotic eswords and batons now count as robotic weapons and trigger - appropriate sprites. - - bugfix: Borg batons will no longer start looking like it has no cell. - - qol: Moves 'toggle extras' to a more conspicuous spot in the Abilities tab. (Dullahans - and Gryphonborg have alternative sprites if used) - - maptweak: touches every map and smashes it with a plasteel hammer to make it comply + - rscadd: Adds gooborgs! Sprites by Toriate + - rscadd: + You can now TOGGLE STOMACH GLOWING on borgs! If toggled on, your tummy + will GLOW IN THE DARK! + - rscadd: Catborgs now have passive glowing parts if they are toggled on + - code_imp: + Robotic eswords and batons now count as robotic weapons and trigger + appropriate sprites. + - bugfix: Borg batons will no longer start looking like it has no cell. + - qol: + Moves 'toggle extras' to a more conspicuous spot in the Abilities tab. (Dullahans + and Gryphonborg have alternative sprites if used) + - maptweak: touches every map and smashes it with a plasteel hammer to make it comply SpadesNeil: - - bugfix: Makes giant cave spiders no longer giant + - bugfix: Makes giant cave spiders no longer giant Will: - - qol: Clothing pockets now have better lists that allow you to carry a wider list - of items inside of them. No longer will winter jacket allow you to hold pens, - but winter coat won't. - - code_imp: Pockets have been completely reworked to not use randomly defined lists - everywhere. They are now consolidated. + - qol: + Clothing pockets now have better lists that allow you to carry a wider list + of items inside of them. No longer will winter jacket allow you to hold pens, + but winter coat won't. + - code_imp: + Pockets have been completely reworked to not use randomly defined lists + everywhere. They are now consolidated. 2025-03-16: CHOMPStation2StaffMirrorBot: - - bugfix: All suits no longer have a 'toggle hood' button even if they have no hood - to toggle. - - bugfix: robot sprites broken by goo borgs + - bugfix: + All suits no longer have a 'toggle hood' button even if they have no hood + to toggle. + - bugfix: robot sprites broken by goo borgs Diana: - - bugfix: Plushies will no longer lose their loadout name - - bugfix: Plushies will speak in their given name in the chat properly. - - bugfix: Xenoarch organs no longer have the possibility of being rejected. + - bugfix: Plushies will no longer lose their loadout name + - bugfix: Plushies will speak in their given name in the chat properly. + - bugfix: Xenoarch organs no longer have the possibility of being rejected. Will: - - rscadd: Adds a positive trait that allows you to have your genetics unable to - be scrambled. - - rscadd: 'Adds three new negative traits: One Life, Unsleeveable, and Unreviveable.' - - rscadd: If you have NO_DNA or NO_RESLEEVE(your genetics is trashed), slimes find - you unappealing! - - code_imp: NO_DNA and NO_RESLEEVE are now separated. - - bugfix: Traits will no longer wipe innate species traits - - code_imp: ATC is now a subsystem + - rscadd: + Adds a positive trait that allows you to have your genetics unable to + be scrambled. + - rscadd: "Adds three new negative traits: One Life, Unsleeveable, and Unreviveable." + - rscadd: + If you have NO_DNA or NO_RESLEEVE(your genetics is trashed), slimes find + you unappealing! + - code_imp: NO_DNA and NO_RESLEEVE are now separated. + - bugfix: Traits will no longer wipe innate species traits + - code_imp: ATC is now a subsystem Will & Diana: - - bugfix: Dullahans (among others) have proper offsets now - - code_imp: Unit test forces coders to comply with proper offsetting of borg sprites + - bugfix: Dullahans (among others) have proper offsets now + - code_imp: Unit test forces coders to comply with proper offsetting of borg sprites 2025-03-17: CHOMPStation2StaffMirrorBot: - - rscadd: Added a new bluespace sheet snatcher of holding that can be created by - science (cheaper and easier than other "of holding" items). This allows it to - carry up to 5000 sheets. It can also be bought from the mining vendor for 1000 - points. - - balance: Changed the normal sheet snatcher to hold 500 (previously 300), and the - borg version to hold 700 (previously 500). - - rscadd: You can now adjust the transparency of your wings in the character editor - and related. - - code_imp: finishes machines new to init - - bugfix: The various character transparency additions are properly added to character - DNA now. - - code_imp: fix admin vote - - rscadd: liquid bellies - - rscadd: all chomp belly overlays - - rscadd: soul catcher for generic usage by every mob - - rscadd: more transfer, processing and other belly options - - bugfix: bellies no longer update every life tick - - qol: reworked the entire vore panel preference section - - qol: rework vorespwan to also be autoamted / used as direct spawn point + - rscadd: + Added a new bluespace sheet snatcher of holding that can be created by + science (cheaper and easier than other "of holding" items). This allows it to + carry up to 5000 sheets. It can also be bought from the mining vendor for 1000 + points. + - balance: + Changed the normal sheet snatcher to hold 500 (previously 300), and the + borg version to hold 700 (previously 500). + - rscadd: + You can now adjust the transparency of your wings in the character editor + and related. + - code_imp: finishes machines new to init + - bugfix: + The various character transparency additions are properly added to character + DNA now. + - code_imp: fix admin vote + - rscadd: liquid bellies + - rscadd: all chomp belly overlays + - rscadd: soul catcher for generic usage by every mob + - rscadd: more transfer, processing and other belly options + - bugfix: bellies no longer update every life tick + - qol: reworked the entire vore panel preference section + - qol: rework vorespwan to also be autoamted / used as direct spawn point Diana: - - code_imp: Emotes work a bit differently on the backend. - - bugfix: immunosuprizine is no longer the strongest poison in the game. It will - no longer do 1245 damage per unit to people you hit with it. + - code_imp: Emotes work a bit differently on the backend. + - bugfix: + immunosuprizine is no longer the strongest poison in the game. It will + no longer do 1245 damage per unit to people you hit with it. 2025-03-19: CHOMPStation2StaffMirrorBot: - - rscadd: Added a new trait called "Reflexive biting" that causes you to bite the - hand of anyone who either pats you on the head or boops you on the nose. This - deals one point of damage to the hand committing said offense. This also includes - a verb in Abilities to toggle this off and on. - - rscadd: Added a personal space bubble trait that takes of priority over the biting - trait, which dodges all attempts at hugging, booping, patting, licking, sniffing - or hand shaking. This can also be toggled on and off. + - rscadd: + Added a new trait called "Reflexive biting" that causes you to bite the + hand of anyone who either pats you on the head or boops you on the nose. This + deals one point of damage to the hand committing said offense. This also includes + a verb in Abilities to toggle this off and on. + - rscadd: + Added a personal space bubble trait that takes of priority over the biting + trait, which dodges all attempts at hugging, booping, patting, licking, sniffing + or hand shaking. This can also be toggled on and off. Kashargul: - - bugfix: reverts the emote sounds to the chomp ones - - code_imp: enable grep on modular chomp + - bugfix: reverts the emote sounds to the chomp ones + - code_imp: enable grep on modular chomp 2025-03-20: Ace: - - rscadd: Lamias now have unique belly text! + - rscadd: Lamias now have unique belly text! CHOMPStation2StaffMirrorBot: - - bugfix: Fixed personal space trait applying nothing and reactive biting applying - both effects. - - code_imp: enables more grep checks - - bugfix: an exploit to detect invisible entities - - rscadd: The belly visibility pref is now a client one, so you don't need to adjust - it on a per-character basis anymore. + - bugfix: + Fixed personal space trait applying nothing and reactive biting applying + both effects. + - code_imp: enables more grep checks + - bugfix: an exploit to detect invisible entities + - rscadd: + The belly visibility pref is now a client one, so you don't need to adjust + it on a per-character basis anymore. Cerami: - - rscadd: reindeer mob, with festive variant - - rscadd: Lion mob, with toggle for lioness sprite + - rscadd: reindeer mob, with festive variant + - rscadd: Lion mob, with toggle for lioness sprite Diana: - - rscadd: Artifacts now have a coinflip's chance of spawning active when unearthed - (EXCLUDING gas artifacts) - - qol: Artifacts are always visible at any depth now. - - qol: Artifacts no longer apply a Z wide spawn, it will only apply effects for - those within a small range. - - bugfix: Artifacts that have a TOUCH EFFECT but not a TOUCH TRIGGER can now be - ACTIVATED and you can have the effect happen to you by bumping into it, having - it bump into you, or touching it without gloves + - rscadd: + Artifacts now have a coinflip's chance of spawning active when unearthed + (EXCLUDING gas artifacts) + - qol: Artifacts are always visible at any depth now. + - qol: + Artifacts no longer apply a Z wide spawn, it will only apply effects for + those within a small range. + - bugfix: + Artifacts that have a TOUCH EFFECT but not a TOUCH TRIGGER can now be + ACTIVATED and you can have the effect happen to you by bumping into it, having + it bump into you, or touching it without gloves Drathek: - - code_imp: Added multivar support to hook installers - - maptweak: Synchronized maps folder with virgo - - rscdel: Archived a few maps that are not present on virgo + - code_imp: Added multivar support to hook installers + - maptweak: Synchronized maps folder with virgo + - rscdel: Archived a few maps that are not present on virgo Kash, Diana: - - bugfix: some protean rig issues - - bugfix: Your DNA will no longer randomly eat itself under certain circumstances - - bugfix: Protean rigs no longer delete theirselves - - bugfix: Protean rigs no longer delete clothing blocking their deployment + - bugfix: some protean rig issues + - bugfix: Your DNA will no longer randomly eat itself under certain circumstances + - bugfix: Protean rigs no longer delete theirselves + - bugfix: Protean rigs no longer delete clothing blocking their deployment 2025-03-21: CHOMPStation2StaffMirrorBot: - - bugfix: belly liquids - - rscadd: item muffling in bellies - - bugfix: hiding layer properly set after movement - - bugfix: incorp pushing - - bugfix: changeling extract dna proc - - rscadd: Added a new subtype of maint lurker spawns to each redgate map. These - ghost pods spawn you in a similar way, but because they are guaranteed spawns, - they do not allow you to use the redgate to leave. Any person with redgate access - can give permission to these people simply by clicking on the redgate with an - empty hand when they are nearby. This is explained to the redgate inhabitant - on spawn and when they try to use the redgate. - - rscadd: Added human compatible tesh ears and tail - - image: added new sprite states to tails.dmi and ears.dmi - - bugfix: tgui asset loading retries - - rscadd: Added Antimatter core RTG for POIs - - code_imp: Removes accidental glass endurance duplicate - - bugfix: Makes toxins no longer infinitely multiply in strength - - bugfix: Makes Sensitive Biochemistry make you WEAKER to stoxin and chloralhydrate - instead of making you STRONGER against it, like it was intended to do. - - rscadd: Adds a moderate and major version of sensitive biochemistry. - - rscadd: Makes some drugs like ambrosia extract have stronger negative effects - if you have sensitive biochemistry. - - qol: Clamps the strength of mindbreaker. No more infinite hallucinations. + - bugfix: belly liquids + - rscadd: item muffling in bellies + - bugfix: hiding layer properly set after movement + - bugfix: incorp pushing + - bugfix: changeling extract dna proc + - rscadd: + Added a new subtype of maint lurker spawns to each redgate map. These + ghost pods spawn you in a similar way, but because they are guaranteed spawns, + they do not allow you to use the redgate to leave. Any person with redgate access + can give permission to these people simply by clicking on the redgate with an + empty hand when they are nearby. This is explained to the redgate inhabitant + on spawn and when they try to use the redgate. + - rscadd: Added human compatible tesh ears and tail + - image: added new sprite states to tails.dmi and ears.dmi + - bugfix: tgui asset loading retries + - rscadd: Added Antimatter core RTG for POIs + - code_imp: Removes accidental glass endurance duplicate + - bugfix: Makes toxins no longer infinitely multiply in strength + - bugfix: + Makes Sensitive Biochemistry make you WEAKER to stoxin and chloralhydrate + instead of making you STRONGER against it, like it was intended to do. + - rscadd: Adds a moderate and major version of sensitive biochemistry. + - rscadd: + Makes some drugs like ambrosia extract have stronger negative effects + if you have sensitive biochemistry. + - qol: Clamps the strength of mindbreaker. No more infinite hallucinations. Diana: - - bugfix: Voidsuits can now properly integrate oxygen tanks into them - - qol: Voidsuit oxygentanks now no longer deploy into your suit storage slot, but - are integrated. - - qol: Vox can put phoron tanks into voidsuits - - bugfix: Sci borg baton no longer looks like a normal baton - - bugfix: Peacekeeper borgs have their shield sprite enabled now - - balance: sci borg baton now does ONE EXTRA DAMAGE. 9->10 + - bugfix: Voidsuits can now properly integrate oxygen tanks into them + - qol: + Voidsuit oxygentanks now no longer deploy into your suit storage slot, but + are integrated. + - qol: Vox can put phoron tanks into voidsuits + - bugfix: Sci borg baton no longer looks like a normal baton + - bugfix: Peacekeeper borgs have their shield sprite enabled now + - balance: sci borg baton now does ONE EXTRA DAMAGE. 9->10 Will: - - bugfix: The flamethrower UI now works properly. - - rscadd: Flamethrower now is more useful than spawning a few fire tiles. It's now - an actual threat! + - bugfix: The flamethrower UI now works properly. + - rscadd: + Flamethrower now is more useful than spawning a few fire tiles. It's now + an actual threat! 2025-03-22: CHOMPStation2StaffMirrorBot: - - qol: updates server logs verbs - - rscadd: animation flick support to robot sprites + - qol: updates server logs verbs + - rscadd: animation flick support to robot sprites Diana: - - bugfix: Replicant pods now let you be NOT just a human! You can be yourself! - - bugfix: Replicant pods will no longer break movement related things. - - code_imp: VR pods and Replicant pods work a bit better on the backend - - spellcheck: Adjusts the fluff text you get when pushing someone onto the floor - while you're on the floor. - - bugfix: You can no longer grab/disarm/do cpr while restrained (or pinned) - - rscdel: Removes vore. (The old, unused version.) - - balance: You can no longer buckle/have someone buckle you to break free from grabs. - - balance: You can no longer crawl while grabbed - - rscadd: Zaddat now have security and Engineering specific subtypes they can choose - in the xenowear loadout...We have Zaddat players...Right? + - bugfix: Replicant pods now let you be NOT just a human! You can be yourself! + - bugfix: Replicant pods will no longer break movement related things. + - code_imp: VR pods and Replicant pods work a bit better on the backend + - spellcheck: + Adjusts the fluff text you get when pushing someone onto the floor + while you're on the floor. + - bugfix: You can no longer grab/disarm/do cpr while restrained (or pinned) + - rscdel: Removes vore. (The old, unused version.) + - balance: You can no longer buckle/have someone buckle you to break free from grabs. + - balance: You can no longer crawl while grabbed + - rscadd: + Zaddat now have security and Engineering specific subtypes they can choose + in the xenowear loadout...We have Zaddat players...Right? zeskorion: - - rscadd: 'cracked and broken YR3 monitor icons + - rscadd: "cracked and broken YR3 monitor icons - fix:fixes legs on YR3 enviroshell being the wrong way around on side sprites' + fix:fixes legs on YR3 enviroshell being the wrong way around on side sprites" 2025-03-23: CHOMPStation2StaffMirrorBot: - - qol: changing your scale under the VORE tab will autofill your *current* scale - instead of defaulting to the minimum of 25 - - balance: Adjusted cost and wear of Mass Alteration - - bugfix: Liquid bellies won't create nonexistent chems - - code_imp: fixed various issues related to placing and cutting heavy cables - - code_imp: added option in code to allow players to cut heavy cables with a welder - - qol: Teshari no longer have double slowdown from radsuits - - bugfix: Missing internal overlays on grubs and jelly blobs are restored. - - code_imp: Fleshed out grubs and jelly blobs. + - qol: + changing your scale under the VORE tab will autofill your *current* scale + instead of defaulting to the minimum of 25 + - balance: Adjusted cost and wear of Mass Alteration + - bugfix: Liquid bellies won't create nonexistent chems + - code_imp: fixed various issues related to placing and cutting heavy cables + - code_imp: added option in code to allow players to cut heavy cables with a welder + - qol: Teshari no longer have double slowdown from radsuits + - bugfix: Missing internal overlays on grubs and jelly blobs are restored. + - code_imp: Fleshed out grubs and jelly blobs. Diana: - - bugfix: Internals will now not randomly turn off + - bugfix: Internals will now not randomly turn off TheGreatKitsune: - - rscadd: Adds radiation suits for teshari to some lockers in Southern Cross - - bugfix: Fixes sprite used for teshari radiation hood + - rscadd: Adds radiation suits for teshari to some lockers in Southern Cross + - bugfix: Fixes sprite used for teshari radiation hood Will: - - rscadd: The CHEM ANALYZER has been COMPLETELY reworked. Give it a look! - - qol: Chem analyzer will give you MUCH more information now. - - bugfix: frostoil reaction for steel+plasteel now works properly - - bugfix: vaccine -> antibody reaction fixed - - code_imp: Backend stuff to ensure broken chemical reactions will never happen - again. + - rscadd: The CHEM ANALYZER has been COMPLETELY reworked. Give it a look! + - qol: Chem analyzer will give you MUCH more information now. + - bugfix: frostoil reaction for steel+plasteel now works properly + - bugfix: vaccine -> antibody reaction fixed + - code_imp: + Backend stuff to ensure broken chemical reactions will never happen + again. crabcube: - - balance: tesh health and damage + - balance: tesh health and damage 2025-03-24: CHOMPStation2StaffMirrorBot: - - code_imp: enables tab only indentation test - - rscadd: option to export and import the soulcatcher settings - - code_imp: adjust the im and export for the new additions VRDB 0.1 -> VRDB 0.2 - - bugfix: Fixes demuxer output not pushing to other circuits. - - bugfix: Fixed train redgate top layer using updown ladders rather than just down - ladders. - - bugfix: Fixed a bug with the private notes panel that showed it in right click - menus of other mobs (forcing them to see your notes). - - rscadd: text surrounded by || text || will now be spoilered in the statpanel - - bugfix: examine will be auto focussed again if the setting is enabled - - maptweak: added xenoarch storage to the stellar delight + - code_imp: enables tab only indentation test + - rscadd: option to export and import the soulcatcher settings + - code_imp: adjust the im and export for the new additions VRDB 0.1 -> VRDB 0.2 + - bugfix: Fixes demuxer output not pushing to other circuits. + - bugfix: + Fixed train redgate top layer using updown ladders rather than just down + ladders. + - bugfix: + Fixed a bug with the private notes panel that showed it in right click + menus of other mobs (forcing them to see your notes). + - rscadd: text surrounded by || text || will now be spoilered in the statpanel + - bugfix: examine will be auto focussed again if the setting is enabled + - maptweak: added xenoarch storage to the stellar delight 2025-03-25: CHOMPStation2StaffMirrorBot: - - code_imp: next set of NEW to INIT + - code_imp: next set of NEW to INIT Diana: - - balance: sec fed uniform no longer gives 50% melee armor. Gives same as Cyberpunk - vest and also costs 2 points. - - balance: 'Fed uniforms now give resistances based on other common loadout items. - (Ex: Hazard vest, labcoat)' - - balance: Hazard vests now give 20% rad resistance - - qol: Temperature artifacts can no longer randomly spawn active. - - balance: Laser gun artifacts can spawn with pulse beams if you are lucky. + - balance: + sec fed uniform no longer gives 50% melee armor. Gives same as Cyberpunk + vest and also costs 2 points. + - balance: + "Fed uniforms now give resistances based on other common loadout items. + (Ex: Hazard vest, labcoat)" + - balance: Hazard vests now give 20% rad resistance + - qol: Temperature artifacts can no longer randomly spawn active. + - balance: Laser gun artifacts can spawn with pulse beams if you are lucky. SpadesNeil: - - bugfix: Albino cave lamia no longer run away. - - bugfix: Cave lamia tails are now set to digest by default, but only the tail. + - bugfix: Albino cave lamia no longer run away. + - bugfix: Cave lamia tails are now set to digest by default, but only the tail. Vorestation Staff Consensus (VORESTATION ONLY): - - rscdel: Tourettes disabled - - rscdel: Rotting Genetics Disabled - - rscdel: Xray disabled - - spellcheck: Anxiety Disorder name changed to Nervousness - - balance: Censored move to Neutral (RP trait) - - balance: Nervousness moved to Neutral (RP Trait) - - bugfix: FBP dionas will no longer explode + - rscdel: Tourettes disabled + - rscdel: Rotting Genetics Disabled + - rscdel: Xray disabled + - spellcheck: Anxiety Disorder name changed to Nervousness + - balance: Censored move to Neutral (RP trait) + - balance: Nervousness moved to Neutral (RP Trait) + - bugfix: FBP dionas will no longer explode 2025-03-27: CHOMPStation2StaffMirrorBot: - - rscadd: Added mail options for entrepreneurs. + - rscadd: Added mail options for entrepreneurs. Diana: - - code_imp: Consolidates a bunch of species files for backend cleanup. - - bugfix: Gets rid of an override that overrode tajaran being able to lick wounds - - bugfix: Xenochimera brains will no longer runtime under certain circumstances. + - code_imp: Consolidates a bunch of species files for backend cleanup. + - bugfix: Gets rid of an override that overrode tajaran being able to lick wounds + - bugfix: Xenochimera brains will no longer runtime under certain circumstances. FluffMedic: - - rscadd: Something for event coming up. + - rscadd: Something for event coming up. 2025-03-28: CHOMPStation2StaffMirrorBot: - - bugfix: recycling in bellies + - bugfix: recycling in bellies Diana: - - bugfix: Environmental traits now work properly - - bugfix: Lightning strikes will no longer strike people in nullspace - - bugfix: Humans now have their proper skin color selection back + - bugfix: Environmental traits now work properly + - bugfix: Lightning strikes will no longer strike people in nullspace + - bugfix: Humans now have their proper skin color selection back 2025-03-29: Ace: - - rscadd: Pitcher plants now have struggle emotes that TELL YOU that you need outside - help to be rescued. - - rscadd: Pitcher plant fruits now have a new reagent. - - bugfix: Pitcher plants would not be anchored after being killed and revived, or - sometimes in other circumstances just wouldn't be anchored correctly. - - bugfix: Pitcher plants did not effectively communicate that you can rescue players - with wire and that a newspaper roll won't work. - - code_imp: Removed OOC bracketed text about having to use OOC escape. Most players - are smart enough to understand without bashing their heads with it. - - code_imp: Changed damage values of pitcher plant for a much slower digestion. + - rscadd: + Pitcher plants now have struggle emotes that TELL YOU that you need outside + help to be rescued. + - rscadd: Pitcher plant fruits now have a new reagent. + - bugfix: + Pitcher plants would not be anchored after being killed and revived, or + sometimes in other circumstances just wouldn't be anchored correctly. + - bugfix: + Pitcher plants did not effectively communicate that you can rescue players + with wire and that a newspaper roll won't work. + - code_imp: + Removed OOC bracketed text about having to use OOC escape. Most players + are smart enough to understand without bashing their heads with it. + - code_imp: Changed damage values of pitcher plant for a much slower digestion. CHOMPStation2StaffMirrorBot: - - rscadd: Unusual gait positive trait for 2 points. This trait makes you move faster - when your hands are empty. + - rscadd: + Unusual gait positive trait for 2 points. This trait makes you move faster + when your hands are empty. Cerami: - - rscadd: Adds a vore belly to kururak + - rscadd: Adds a vore belly to kururak Kashargul: - - bugfix: dark tiles keeping refs in some cases + - bugfix: dark tiles keeping refs in some cases Tost: - - bugfix: You can now see what pronouns you are choosing for your character on setup. + - bugfix: You can now see what pronouns you are choosing for your character on setup. 2025-03-30: CHOMPStation2StaffMirrorBot: - - rscadd: next grep check to ensure space / tab sanity - - rscadd: Added a new system for announcing horribly corporate appreciation days. - - rscadd: Added a bingle computer to each library and command briefing room. + - rscadd: next grep check to ensure space / tab sanity + - rscadd: Added a new system for announcing horribly corporate appreciation days. + - rscadd: Added a bingle computer to each library and command briefing room. Diana: - - bugfix: Mounted rigsuit guns now properly work - - bugfix: Protean rigs can no longer be removed by proteans - - bugfix: Protean rigs can no longer be removed if one is on your back and the protean - is dead - - bugfix: Protean rigs no longer be in a 'limbo state' of being enabled but not - enabled. + - bugfix: Mounted rigsuit guns now properly work + - bugfix: Protean rigs can no longer be removed by proteans + - bugfix: + Protean rigs can no longer be removed if one is on your back and the protean + is dead + - bugfix: + Protean rigs no longer be in a 'limbo state' of being enabled but not + enabled. TheCaramelion: - - maptweak: The library now houses a wiki-computer. Go bingle stuff. + - maptweak: The library now houses a wiki-computer. Go bingle stuff. Will, Kash: - - rscadd: Bingle - - qol: ChemAnalyser Pro now uses tgui - - bugfix: chat scroll tracking failing on large displayed count when huge messages - blocks were sent + - rscadd: Bingle + - qol: ChemAnalyser Pro now uses tgui + - bugfix: + chat scroll tracking failing on large displayed count when huge messages + blocks were sent 2025-03-31: CHOMPStation2StaffMirrorBot: - - qol: Changed the default setting for Save Organs and Save Markings to No in character - setup - - admin: 'fix spawn at arrivals will not either pick from the secondary list or - sanely fail + - qol: + Changed the default setting for Save Organs and Save Markings to No in character + setup + - admin: + "fix spawn at arrivals will not either pick from the secondary list or + sanely fail - fix latespawn loc code' - - rscadd: Added a treadmill fitness machine. - - rscadd: Added a non-alcohol version of the booze-o-mat, the virgin-o-mat! - - maptweak: Major changes to the pool area to include a poolside bar, new gym, locker - room, sauna and massage room. - - maptweak: Added a designated smoking area to the stellar delight. - - bugfix: useless light recalcs, which might even have caused darker than supposed - areas - - bugfix: multiple bugs in outdoor and turf open / space handling + fix latespawn loc code" + - rscadd: Added a treadmill fitness machine. + - rscadd: Added a non-alcohol version of the booze-o-mat, the virgin-o-mat! + - maptweak: + Major changes to the pool area to include a poolside bar, new gym, locker + room, sauna and massage room. + - maptweak: Added a designated smoking area to the stellar delight. + - bugfix: + useless light recalcs, which might even have caused darker than supposed + areas + - bugfix: multiple bugs in outdoor and turf open / space handling Kashargul: - - bugfix: deck 0 crashing the server + - bugfix: deck 0 crashing the server Tost: - - rscadd: Adds modern labcoat to loadout, under the public labcoat selector. - - rscadd: Adds 3 different leg warmers accessories. + - rscadd: Adds modern labcoat to loadout, under the public labcoat selector. + - rscadd: Adds 3 different leg warmers accessories. diff --git a/html/changelogs_ch/archive/2025-04.yml b/html/changelogs_ch/archive/2025-04.yml index 6f05a7d75f..d9e8b7cad2 100644 --- a/html/changelogs_ch/archive/2025-04.yml +++ b/html/changelogs_ch/archive/2025-04.yml @@ -1,386 +1,438 @@ 2025-04-01: CHOMPStation2StaffMirrorBot: - - bugfix: xenoarch organ spawn + - bugfix: xenoarch organ spawn Diana: - - bugfix: Removes the yawn edit that removed Fennec's ability to use rig gauntlets - or helmet (This made fennecs unable to use any rigsuits) + - bugfix: + Removes the yawn edit that removed Fennec's ability to use rig gauntlets + or helmet (This made fennecs unable to use any rigsuits) Kashargul: - - bugfix: more dark turf stuff + - bugfix: more dark turf stuff 2025-04-02: FluffMedic: - - rscadd: more event things + - rscadd: more event things 2025-04-03: CHOMPStation2StaffMirrorBot: - - rscadd: admin verb to modify the shift end + - rscadd: admin verb to modify the shift end Kashargul: - - rscadd: The dark spawnpoint + - rscadd: The dark spawnpoint 2025-04-04: CHOMPStation2StaffMirrorBot: - - qol: spawning carbon mobs is less laggy - - refactor: dna datum cloning per organ removed in favor of a organ_data datum - - bugfix: Proteans can select icon base again - - code_imp: tgui core to 1.8.4 - - rscdel: vchat + - qol: spawning carbon mobs is less laggy + - refactor: dna datum cloning per organ removed in favor of a organ_data datum + - bugfix: Proteans can select icon base again + - code_imp: tgui core to 1.8.4 + - rscdel: vchat 2025-04-05: CHOMPStation2StaffMirrorBot: - - code_imp: update dependencies + - code_imp: update dependencies Diana & Kash: - - balance: Monkey gun adjusted to be mid-tier material cost. - - bugfix: Blood runtime fix - - bugfix: Deadringer runtime fix - - bugfix: Deadringer duplication fix - - bugfix: Deadringer now properly deathgasps at the right time - - balance: Deadringer slightly more invisible\ - - bugfix: 'Spawn: Arrivals will no longer make you spawn inside the landmark itself. - (Removes landmark vore)' - - bugfix: Transit tubes properly spawn with air in them. - - bugfix: Bingle properly shows the Ore Page now - - bugfix: Talon spawn no longer runtimes + - balance: Monkey gun adjusted to be mid-tier material cost. + - bugfix: Blood runtime fix + - bugfix: Deadringer runtime fix + - bugfix: Deadringer duplication fix + - bugfix: Deadringer now properly deathgasps at the right time + - balance: Deadringer slightly more invisible\ + - bugfix: + "Spawn: Arrivals will no longer make you spawn inside the landmark itself. + (Removes landmark vore)" + - bugfix: Transit tubes properly spawn with air in them. + - bugfix: Bingle properly shows the Ore Page now + - bugfix: Talon spawn no longer runtimes FluffMedic: - - rscadd: New tyr layout, WIP due to active edge issues - - qol: stargazer eclipse space boss glows in a large area + - rscadd: New tyr layout, WIP due to active edge issues + - qol: stargazer eclipse space boss glows in a large area 2025-04-07: CHOMPStation2StaffMirrorBot: - - rscadd: explo chassis 'bulwark' - - bugfix: phased entities are no longer effected by weather effects - - bugfix: planetary weather effects - - bugfix: examine on admin spawned mobs - - bugfix: liquid examine - - bugfix: Fixed mail thinking you're a different person after resleeving - - bugfix: Fixed mail being sent to various crewmember's bodyparts - - bugfix: Fixed mail containing power tools disguised as common tools - - refactor: Refactored some of the mail code, using mind instead of mob - - bugfix: added vox to the unusual gait species exclude list (they were supposed - to be there but I forgor) + - rscadd: explo chassis 'bulwark' + - bugfix: phased entities are no longer effected by weather effects + - bugfix: planetary weather effects + - bugfix: examine on admin spawned mobs + - bugfix: liquid examine + - bugfix: Fixed mail thinking you're a different person after resleeving + - bugfix: Fixed mail being sent to various crewmember's bodyparts + - bugfix: Fixed mail containing power tools disguised as common tools + - refactor: Refactored some of the mail code, using mind instead of mob + - bugfix: + added vox to the unusual gait species exclude list (they were supposed + to be there but I forgor) tacoguy7765093: - - maptweak: Atmospherics tweaks for active edges. + - maptweak: Atmospherics tweaks for active edges. 2025-04-08: CHOMPStation2StaffMirrorBot: - - rscadd: teshari alternative tail (the fluffy one) has been converted to be used - with demi-teshari or really anyone human shaped - - image: added the demitesh flufftail sprite states to taurs.dmi - - code_imp: update browser window - - code_imp: migrate vendor icons to icon forge - - code_imp: Sprites no longer break the resize cap when resized, unless uncapped - is set to TRUE - - code_imp: Robot sprite_decals are now generated before stomachs - - bugfix: Runechat will properly appear above sprites. + - rscadd: + teshari alternative tail (the fluffy one) has been converted to be used + with demi-teshari or really anyone human shaped + - image: added the demitesh flufftail sprite states to taurs.dmi + - code_imp: update browser window + - code_imp: migrate vendor icons to icon forge + - code_imp: + Sprites no longer break the resize cap when resized, unless uncapped + is set to TRUE + - code_imp: Robot sprite_decals are now generated before stomachs + - bugfix: Runechat will properly appear above sprites. Diana: - - qol: Defib now informs you WHY it's failing, so you can properly fix the problem. - - balance: CPR can now REVIVE people if their HP is above a threshold with a 10% - chance per CPR usage. - - balance: CPR will cause the recipient to metabolize reagents. - - balance: CPR now has a small chance of causing brute damage and rib fractures - to the chest. - - balance: Patient Stabilizer will cause the patient to metabolize reagents if dead. - - bugfix: Breaking a bone now has its random chance to jostle when broken for the - first time. - - bugfix: Shadekin no longer runtime if created (mannequins) during pre-init. - - bugfix: ore bag can fit on the mining satchel - - bugfix: You can no longer double-leave on the tram - - bugfix: Vital organs now properly calculate drop chance. Chance goes UP the more - damaged you are, not DOWN + - qol: Defib now informs you WHY it's failing, so you can properly fix the problem. + - balance: + CPR can now REVIVE people if their HP is above a threshold with a 10% + chance per CPR usage. + - balance: CPR will cause the recipient to metabolize reagents. + - balance: + CPR now has a small chance of causing brute damage and rib fractures + to the chest. + - balance: Patient Stabilizer will cause the patient to metabolize reagents if dead. + - bugfix: + Breaking a bone now has its random chance to jostle when broken for the + first time. + - bugfix: Shadekin no longer runtime if created (mannequins) during pre-init. + - bugfix: ore bag can fit on the mining satchel + - bugfix: You can no longer double-leave on the tram + - bugfix: + Vital organs now properly calculate drop chance. Chance goes UP the more + damaged you are, not DOWN 2025-04-09: CHOMPStation2StaffMirrorBot: - - bugfix: You will no longer pick up burning micros, or try to do CPR on someone - that is on fire + - bugfix: + You will no longer pick up burning micros, or try to do CPR on someone + that is on fire Diana: - - rscdel: missing every other shot you made against mobs - - rscadd: hitting every shot you make against mobs - - bugfix: Evasion now properly is calculated and doesn't have a 30% chance of being - nullified. - - bugfix: Scoped weapons now have their accuracy stat properly applied. - - balance: Bad Shot/Eagle Eye work by increasing/decreasing the target's evasion. - Only applies if the target HAS evasion in the first place. - - balance: Evasion now works in PvP melee. (Blue-Grabbing or making a high evasion - target prone nullifies their evasion) - - balance: Mobs now have chances to randomize/miss the zone they were shooting for - on Player Characters - - balance: Point blank shots will still always 100% hit Player Characters no matter - your evasion. Just a reminder! + - rscdel: missing every other shot you made against mobs + - rscadd: hitting every shot you make against mobs + - bugfix: + Evasion now properly is calculated and doesn't have a 30% chance of being + nullified. + - bugfix: Scoped weapons now have their accuracy stat properly applied. + - balance: + Bad Shot/Eagle Eye work by increasing/decreasing the target's evasion. + Only applies if the target HAS evasion in the first place. + - balance: + Evasion now works in PvP melee. (Blue-Grabbing or making a high evasion + target prone nullifies their evasion) + - balance: + Mobs now have chances to randomize/miss the zone they were shooting for + on Player Characters + - balance: + Point blank shots will still always 100% hit Player Characters no matter + your evasion. Just a reminder! 2025-04-10: CHOMPStation2StaffMirrorBot: - - code_imp: tgui core 2.0 - - bugfix: Fixed mail scanner not working + - code_imp: tgui core 2.0 + - bugfix: Fixed mail scanner not working Diana: - - rscdel: bad code - - rscadd: good code (questionable) - - bugfix: VR Sleepers properly exit you if EMP'd, depowered, or someone tries to - pull you out of it - - bugfix: Ghostspawns no longer multiply SECONDS by SECONDS + - rscdel: bad code + - rscadd: good code (questionable) + - bugfix: + VR Sleepers properly exit you if EMP'd, depowered, or someone tries to + pull you out of it + - bugfix: Ghostspawns no longer multiply SECONDS by SECONDS Tost: - - rscadd: Adds a variant of the roboticist labcoat to Suits and Overwear - - rscadd: Adds "traffic officer's jacket" to Suits and Overwear - - rscadd: Adds the option to bring a rubber ducky with you to the loadout on General - - rscadd: Adds the waiter's outfit to the loadout on Casual Dress + - rscadd: Adds a variant of the roboticist labcoat to Suits and Overwear + - rscadd: Adds "traffic officer's jacket" to Suits and Overwear + - rscadd: Adds the option to bring a rubber ducky with you to the loadout on General + - rscadd: Adds the waiter's outfit to the loadout on Casual Dress 2025-04-11: CHOMPStation2StaffMirrorBot: - - qol: Added an animation when dropping items on tables + - qol: Added an animation when dropping items on tables Cerami: - - balance: Venom bite now warns players that it is being used. + - balance: Venom bite now warns players that it is being used. 2025-04-12: CHOMPStation2StaffMirrorBot: - - rscadd: Space heaters can now be crafted - - rscadd: Space heaters can now be upgraded to cool/heat faster (Uses micro_laser, - manipulator, and capacitor to upgrade various parts) - - maptweak: Moved the medical kiosk from the west side of the medbay lobby over - to the east corner, near chemistry. - - rscadd: moves eye layer under bellies for borgs + - rscadd: Space heaters can now be crafted + - rscadd: + Space heaters can now be upgraded to cool/heat faster (Uses micro_laser, + manipulator, and capacitor to upgrade various parts) + - maptweak: + Moved the medical kiosk from the west side of the medbay lobby over + to the east corner, near chemistry. + - rscadd: moves eye layer under bellies for borgs Cameron-The-Raven: - - bugfix: guitar loadout now properly gives you a guitar + - bugfix: guitar loadout now properly gives you a guitar Drathek: - - code_imp: DMI merge hook will now try to retain positioning of sprites when handling - some conflicts + - code_imp: + DMI merge hook will now try to retain positioning of sprites when handling + some conflicts 2025-04-13: CHOMPStation2StaffMirrorBot: - - rscadd: Silicon are now able to be picked up, with a toggle in their abilities - section to preserve petting. - - bugfix: Fixes some bad destroys - - bugfix: RPD interface - - code_imp: tgui-core to 3.0.4 - - rscadd: Added IDs to the list of edible trash eater items. Just like PDA's they - require the owner to be watching when they're eaten. - - bugfix: Fixed PDA eating warning messages not being visible. - - bugfix: runechat offset delta being applied twice in some cases - - rscadd: Added the recolour ability to beast form transformations, allowing them - to recolour themselves once per transformation. + - rscadd: + Silicon are now able to be picked up, with a toggle in their abilities + section to preserve petting. + - bugfix: Fixes some bad destroys + - bugfix: RPD interface + - code_imp: tgui-core to 3.0.4 + - rscadd: + Added IDs to the list of edible trash eater items. Just like PDA's they + require the owner to be watching when they're eaten. + - bugfix: Fixed PDA eating warning messages not being visible. + - bugfix: runechat offset delta being applied twice in some cases + - rscadd: + Added the recolour ability to beast form transformations, allowing them + to recolour themselves once per transformation. Diana: - - bugfix: Exit VR now properly lets you exit vr + - bugfix: Exit VR now properly lets you exit vr 2025-04-14: CHOMPStation2StaffMirrorBot: - - bugfix: chat messages not querying - - bugfix: color picker layout - - qol: we no longer reset the value on blur, we only validate input or onEnter - - rscadd: marker beacon to mining robots - - bugfix: modal inputs - - rscadd: Added Special teleporter vorebellies. - - code_imp: Added support for vorebellies to be marked as unsavable, preventing - them from being saved to characters. + - bugfix: chat messages not querying + - bugfix: color picker layout + - qol: we no longer reset the value on blur, we only validate input or onEnter + - rscadd: marker beacon to mining robots + - bugfix: modal inputs + - rscadd: Added Special teleporter vorebellies. + - code_imp: + Added support for vorebellies to be marked as unsavable, preventing + them from being saved to characters. Diana: - - bugfix: Stumblevore and flight vore should now work properly. + - bugfix: Stumblevore and flight vore should now work properly. tacoguy7765093: - - maptweak: Ore-Rich-Geyser POI active edge fix. - - rscadd: Thor turfpack for mappers - - maptweak: Operating Rooms contain patient stabilizers for post mortem blood pumping! + - maptweak: Ore-Rich-Geyser POI active edge fix. + - rscadd: Thor turfpack for mappers + - maptweak: Operating Rooms contain patient stabilizers for post mortem blood pumping! 2025-04-15: Diana: - - bugfix: Shoulder augments can now be installed the first time without having to - screwdriver them twice + - bugfix: + Shoulder augments can now be installed the first time without having to + screwdriver them twice 2025-04-18: CHOMPStation2StaffMirrorBot: - - rscadd: NIF commlinks auto-initialize if the relevant preference is set in character - creation - - refactor: converts a bunch of global variables/lists to managed global variables/lists - - bugfix: samples no longer generate infinite tech level lists - - code_imp: finishes new to init + - rscadd: + NIF commlinks auto-initialize if the relevant preference is set in character + creation + - refactor: converts a bunch of global variables/lists to managed global variables/lists + - bugfix: samples no longer generate infinite tech level lists + - code_imp: finishes new to init MeepleMuncher: - - rscadd: Customizable dragon plushies + - rscadd: Customizable dragon plushies sunofang: - - rscadd: NanoTrasen shipwrights have now made the carrier actually capable of interplanetary - travel - - maptweak: New bridge for the carrier + - rscadd: + NanoTrasen shipwrights have now made the carrier actually capable of interplanetary + travel + - maptweak: New bridge for the carrier 2025-04-19: CHOMPStation2StaffMirrorBot: - - bugfix: highlight input size + - bugfix: highlight input size 2025-04-20: sunofang: - - maptweak: Carrier engines fixed, and access reworked + - maptweak: Carrier engines fixed, and access reworked 2025-04-22: CHOMPStation2StaffMirrorBot: - - code_imp: tgui core 3.1.2 - - qol: Xenobio monkey gun (bio6 bluespace5) now only requires gold and silver. - - qol: Portable slime processor (magnet 4 bio 5) now only requires silver and gold. - - sound: Surgery tools now make proper melee attack noises. - - qol: Changed blood splatters and subtypes such as oil to no longer interact with - someone flying, hovering or floating over them. - - rscadd: Added sleeveless variant of the colourable duster. - - bugfix: tgui say focus - - bugfix: Rings and Bracelets won't slow you down anymore - - rscadd: breastplate, eye cover, and loincloth overlays to the 'decal' menu on - borgs for dullahans - - rscadd: ability to use overlays on resting borgs(lights etc.). - - rscadd: dullahan v1/2 -> dullahan - - rscadd: condensed dullahan versions into one single unit, v3 is still seperate - due to being a different size and coloration. - - rscadd: You can now configure the messages used by the trash eater perk on a per - vorebelly basis. - - bugfix: several prefs could not be cleared - - refactor: Moved all global vars from the code/global.dm to code/_global_vars/ - - code_imp: fix multiple runtimes - - qol: FBPs will no longer go blind when a welder is used. + - code_imp: tgui core 3.1.2 + - qol: Xenobio monkey gun (bio6 bluespace5) now only requires gold and silver. + - qol: Portable slime processor (magnet 4 bio 5) now only requires silver and gold. + - sound: Surgery tools now make proper melee attack noises. + - qol: + Changed blood splatters and subtypes such as oil to no longer interact with + someone flying, hovering or floating over them. + - rscadd: Added sleeveless variant of the colourable duster. + - bugfix: tgui say focus + - bugfix: Rings and Bracelets won't slow you down anymore + - rscadd: + breastplate, eye cover, and loincloth overlays to the 'decal' menu on + borgs for dullahans + - rscadd: ability to use overlays on resting borgs(lights etc.). + - rscadd: dullahan v1/2 -> dullahan + - rscadd: + condensed dullahan versions into one single unit, v3 is still seperate + due to being a different size and coloration. + - rscadd: + You can now configure the messages used by the trash eater perk on a per + vorebelly basis. + - bugfix: several prefs could not be cleared + - refactor: Moved all global vars from the code/global.dm to code/_global_vars/ + - code_imp: fix multiple runtimes + - qol: FBPs will no longer go blind when a welder is used. Diana: - - bugfix: turrets no longer have 100% baymiss chance - - bugfix: Fragmines will no longer do 400 damage when you step on them. - - qol: The Rapid Material Synthesizer (RMS) has been MASSIVELY buffed and reworked. - Check it out! - - qol: RMS prices MASSIVELY decreased. - - qol: RMS randomize mode can now randomize ANY MATERIAL in the game. Feeling lucky? - - bugfix: RMS will no longer drain any battery you use it on to 0 - - bugfix: RMS will now properly detonate rigged batteries - - rscdel: RMS no longer has any emag interactions - - rscadd: Added a secret 1 in a million interaction with the RMS :) - - bugfix: Spaceacillin and other ABX will work with the patient stabilizer - - rscadd: The patient stabilizer now plays sound to the deceased individual - - qol: Bodyscanner now tells you when someone is missing an organ instead of omitting - it entirely - - rscadd: Adds a LOT of tails and taur tails from downstream. Large shark, Husky - taur, orca tail, more bug abdomens, leopard tail, tyranid, among others! - - rscadd: Adds a new melee focused PSG that prevents the usage of guns while giving - buffs for melee combat - - qol: Makes PSGs more acquirable - - spellcheck: Standardizes the PSG names (PSG Variant-XXX) - - rscadd: Adds the PSG-BIO to the CMO's locker and CMO supply crate(Just reduces - toxin/oxygen/clone attack damage taken) - - rscadd: Adds the PSG-Melee to the Pathfinder locker (And pathfinder supply crate) - - rscadd: Adds the PSG-BIO to the Pathfinder Medic locker - - rscadd: Adds the PSG-S to HoS locker (and HoS supply pack) - - rscadd: Makes it so the Exploration shield cargo pack has a melee and upgraded - mining (mob combat) PSG - - rscadd: Mining vendor will now happily sell you a holster for your machete + - bugfix: turrets no longer have 100% baymiss chance + - bugfix: Fragmines will no longer do 400 damage when you step on them. + - qol: + The Rapid Material Synthesizer (RMS) has been MASSIVELY buffed and reworked. + Check it out! + - qol: RMS prices MASSIVELY decreased. + - qol: RMS randomize mode can now randomize ANY MATERIAL in the game. Feeling lucky? + - bugfix: RMS will no longer drain any battery you use it on to 0 + - bugfix: RMS will now properly detonate rigged batteries + - rscdel: RMS no longer has any emag interactions + - rscadd: Added a secret 1 in a million interaction with the RMS :) + - bugfix: Spaceacillin and other ABX will work with the patient stabilizer + - rscadd: The patient stabilizer now plays sound to the deceased individual + - qol: + Bodyscanner now tells you when someone is missing an organ instead of omitting + it entirely + - rscadd: + Adds a LOT of tails and taur tails from downstream. Large shark, Husky + taur, orca tail, more bug abdomens, leopard tail, tyranid, among others! + - rscadd: + Adds a new melee focused PSG that prevents the usage of guns while giving + buffs for melee combat + - qol: Makes PSGs more acquirable + - spellcheck: Standardizes the PSG names (PSG Variant-XXX) + - rscadd: + Adds the PSG-BIO to the CMO's locker and CMO supply crate(Just reduces + toxin/oxygen/clone attack damage taken) + - rscadd: Adds the PSG-Melee to the Pathfinder locker (And pathfinder supply crate) + - rscadd: Adds the PSG-BIO to the Pathfinder Medic locker + - rscadd: Adds the PSG-S to HoS locker (and HoS supply pack) + - rscadd: + Makes it so the Exploration shield cargo pack has a melee and upgraded + mining (mob combat) PSG + - rscadd: Mining vendor will now happily sell you a holster for your machete Guti: - - rscadd: Extrapolator, to allow virologists to extract diseases from plenty of - sources. - - rscadd: Virus thresholds, allowing viruses to do more when one of these thresholds - is reached. - - rscadd: SBG Syndrome - - rscadd: Mice, old vomit, blood, and other crewmembers may contain diseases now, - allowing virologists to scan and take them. - - rscadd: Added Fleming to all Virology areas - - rscadd: Added an extrapolator to all Virology areas - - balance: Symptoms are now slower, with different times to activate between them. - - balance: Reduced the base infectivity chance - - balance: Spread can now be by blood, fluids, or contact. Airborne diseases can - be achieved with some thresholds. - - qol: Refactored the PanDEMIC's interface - - refactor: Refactored how diseases spread, now needing airborne specific symptoms - to allow the to be airborne. - - refactor: Refactored ContractDisease proc to check body zones more clearly - - refactor: Refactored CanContractDisease proc to check better for organs - - refactor: Added various getters and setters for viruses, some of their vars were - changed to private. - - refactor: Refactored the various viruses flag names - - refactor: Refactored advanced diseases - - refactor: Refactored symptoms into the new advanced diseases - - refactor: Refactored vomit code - - code_imp: Added AirborneContractDisease for airborne diseases - - code_imp: Added extrapolator_act - - code_imp: Added is_mouth_covered proc + - rscadd: + Extrapolator, to allow virologists to extract diseases from plenty of + sources. + - rscadd: + Virus thresholds, allowing viruses to do more when one of these thresholds + is reached. + - rscadd: SBG Syndrome + - rscadd: + Mice, old vomit, blood, and other crewmembers may contain diseases now, + allowing virologists to scan and take them. + - rscadd: Added Fleming to all Virology areas + - rscadd: Added an extrapolator to all Virology areas + - balance: Symptoms are now slower, with different times to activate between them. + - balance: Reduced the base infectivity chance + - balance: + Spread can now be by blood, fluids, or contact. Airborne diseases can + be achieved with some thresholds. + - qol: Refactored the PanDEMIC's interface + - refactor: + Refactored how diseases spread, now needing airborne specific symptoms + to allow the to be airborne. + - refactor: Refactored ContractDisease proc to check body zones more clearly + - refactor: Refactored CanContractDisease proc to check better for organs + - refactor: + Added various getters and setters for viruses, some of their vars were + changed to private. + - refactor: Refactored the various viruses flag names + - refactor: Refactored advanced diseases + - refactor: Refactored symptoms into the new advanced diseases + - refactor: Refactored vomit code + - code_imp: Added AirborneContractDisease for airborne diseases + - code_imp: Added extrapolator_act + - code_imp: Added is_mouth_covered proc sunofang: - - maptweak: Carrier starts on now. + - maptweak: Carrier starts on now. 2025-04-23: CHOMPStation2StaffMirrorBot: - - rscadd: Added a new AllergyPen autoinjector, available via the loadout (1 point) - and medical vendors. - - balance: Reduced the plastic cost of large autoinjectors in the injector maker - from 1500 to 250, and smaller ones from 30 to 25. + - rscadd: + Added a new AllergyPen autoinjector, available via the loadout (1 point) + and medical vendors. + - balance: + Reduced the plastic cost of large autoinjectors in the injector maker + from 1500 to 250, and smaller ones from 30 to 25. Cerami: - - bugfix: Change how Dark Respite chooses locations to send kin. - - bugfix: Your loadout items won't poof + - bugfix: Change how Dark Respite chooses locations to send kin. + - bugfix: Your loadout items won't poof Kashargul: - - bugfix: title showing too late + - bugfix: title showing too late 2025-04-24: tacoguy7765093: - - balance: Mercenary firerate nerfed, some magazine sizes reduced on them, - - balance: Sniper merc fires 1 second faster - - balance: Spider HP massively nerfed. + - balance: Mercenary firerate nerfed, some magazine sizes reduced on them, + - balance: Sniper merc fires 1 second faster + - balance: Spider HP massively nerfed. 2025-04-25: CHOMPStation2StaffMirrorBot: - - bugfix: resting causing an error - - code_imp: some less usr + - bugfix: resting causing an error + - code_imp: some less usr 2025-04-26: CHOMPStation2StaffMirrorBot: - - bugfix: name loading for robot module selection - - bugfix: tgui say unsupported channels are no longer black on black in dark mode - - qol: Virus extrapolator can now identify stealthy viruses - - rscdel: Removed "old vomit" spreading viruses - - bugfix: Makes vaccines work again + - bugfix: name loading for robot module selection + - bugfix: tgui say unsupported channels are no longer black on black in dark mode + - qol: Virus extrapolator can now identify stealthy viruses + - rscdel: Removed "old vomit" spreading viruses + - bugfix: Makes vaccines work again 2025-04-27: CHOMPStation2StaffMirrorBot: - - rscadd: Added old blood - - qol: Extrapolator can isolate symptoms now - - bugfix: Fixed Pandemic not saving the name of named diseases - - bugfix: Fixed Pandemic not printing the "virus release" notice - - rscadd: Microwave UI is prettier now~ - - rscadd: Added some new machines in maint, go find them! - - rscadd: Added some remote scene tools - bluespace stickers, and the voodoo kit. - They let you ahr pea - but remotely. - - rscdel: Removed some maint-trader spawn locations - - maptweak: Maint Recyclers and Maint Vendors both have several spawn locations - in maint - - refactor: fixed the logout commsig never getting sent - - rscadd: Slightly prettier Canister UI. - - qol: RIGSuit UI made prettier and more usable! - - rscadd: adds dullahan taurs - - rscadd: /tg/'s fonts added, maptext now uses Grand9K Pixel. - - rscadd: You can now crawl while down! - - rscadd: Species now have specific sounds and gendered sounds. - - qol: Weather can now be turned up/down in the character preferences - - balance: Xenochimera have licking wounds - - qol: Bellyrubbing is now an emote - - rscadd: Wolves now have vore stomachs - - qol: Staff can see when each other log out - - bugfix: runtime on bad runes in persistent files - - bugfix: Fixed Resistance not being calculated properly - - rscadd: naga wings - - rscadd: naga ears - - bugfix: Fixed an old programming error that caused hell ramen and soemmerfire - to continuously increase the body temperature of the mob that ingested it. - - rscadd: More immersive photocopier - - rscadd: Pretty UI for the algae farm - - rscadd: vassilian autohiss - - rscadd: yingish autohiss - - code_imp: autohiss unit testing - - rscadd: You can now set your Favorite and Maybe OOC prefs. - - rscadd: You can now set your Sexuality and Gender in the Character Directory - - rscadd: Even more RIG startup screens - - rscadd: Adds Xenoarch access to the SD's EVA shuttle - - code_imp: Added missing SIGNAL_HANDLER lines to many RegisterSignal() proc refs. - - bugfix: a crash when an empty regular expression was used in highlight blacklists - - rscadd: TEG has pretty spinning fans - - rscadd: Disposal bin UI overhauled to be more skeuomorphic + - rscadd: Added old blood + - qol: Extrapolator can isolate symptoms now + - bugfix: Fixed Pandemic not saving the name of named diseases + - bugfix: Fixed Pandemic not printing the "virus release" notice + - rscadd: Microwave UI is prettier now~ + - rscadd: Added some new machines in maint, go find them! + - rscadd: + Added some remote scene tools - bluespace stickers, and the voodoo kit. + They let you ahr pea - but remotely. + - rscdel: Removed some maint-trader spawn locations + - maptweak: + Maint Recyclers and Maint Vendors both have several spawn locations + in maint + - refactor: fixed the logout commsig never getting sent + - rscadd: Slightly prettier Canister UI. + - qol: RIGSuit UI made prettier and more usable! + - rscadd: adds dullahan taurs + - rscadd: /tg/'s fonts added, maptext now uses Grand9K Pixel. + - rscadd: You can now crawl while down! + - rscadd: Species now have specific sounds and gendered sounds. + - qol: Weather can now be turned up/down in the character preferences + - balance: Xenochimera have licking wounds + - qol: Bellyrubbing is now an emote + - rscadd: Wolves now have vore stomachs + - qol: Staff can see when each other log out + - bugfix: runtime on bad runes in persistent files + - bugfix: Fixed Resistance not being calculated properly + - rscadd: naga wings + - rscadd: naga ears + - bugfix: + Fixed an old programming error that caused hell ramen and soemmerfire + to continuously increase the body temperature of the mob that ingested it. + - rscadd: More immersive photocopier + - rscadd: Pretty UI for the algae farm + - rscadd: vassilian autohiss + - rscadd: yingish autohiss + - code_imp: autohiss unit testing + - rscadd: You can now set your Favorite and Maybe OOC prefs. + - rscadd: You can now set your Sexuality and Gender in the Character Directory + - rscadd: Even more RIG startup screens + - rscadd: Adds Xenoarch access to the SD's EVA shuttle + - code_imp: Added missing SIGNAL_HANDLER lines to many RegisterSignal() proc refs. + - bugfix: a crash when an empty regular expression was used in highlight blacklists + - rscadd: TEG has pretty spinning fans + - rscadd: Disposal bin UI overhauled to be more skeuomorphic Kash: - - bugfix: Fixes a bug where reagents would show up twice in the chem dispenser + - bugfix: Fixes a bug where reagents would show up twice in the chem dispenser Tost: - - rscadd: Adds colour selection to earrings + - rscadd: Adds colour selection to earrings tacoguy7765093: - - maptweak: Use the correct protolathes this time for science. - - qol: Supply console, Robotics Fabs, and Pilot consoles no longer have hard access - locks. + - maptweak: Use the correct protolathes this time for science. + - qol: + Supply console, Robotics Fabs, and Pilot consoles no longer have hard access + locks. 2025-04-28: CHOMPStation2StaffMirrorBot: - - bugfix: muffle items not always working - - bugfix: matrix recolor not usable in char setup - - bugfix: item tf spawn points not assignable - - code_imp: move invisibility to defines - - admin: invisimin can no longer be used if your invis level is above the observer - level - - bugfix: RIGs no longer get stuck loading - - qol: Air alarms show if they are controlled by an area's main alarm, or are the - main alarm themselves. So you can tell when all air alarms in an area are deconstructed - - bugfix: Air alarm settings now propagate to all other air alarms in an area - - rscadd: Air alarms do nothing if the main air alarm in an area is shorted - - qol: PAI may now climb up and down ladders, lattices, and move freely up and down - in zeroG + - bugfix: muffle items not always working + - bugfix: matrix recolor not usable in char setup + - bugfix: item tf spawn points not assignable + - code_imp: move invisibility to defines + - admin: + invisimin can no longer be used if your invis level is above the observer + level + - bugfix: RIGs no longer get stuck loading + - qol: + Air alarms show if they are controlled by an area's main alarm, or are the + main alarm themselves. So you can tell when all air alarms in an area are deconstructed + - bugfix: Air alarm settings now propagate to all other air alarms in an area + - rscadd: Air alarms do nothing if the main air alarm in an area is shorted + - qol: + PAI may now climb up and down ladders, lattices, and move freely up and down + in zeroG FluffMedic: - - rscadd: A few lore discs, new mobs to battle - - balance: Some Eclipse mobs nerfed, Janus boss reworked - - maptweak: Tyr Precursor ruins is altered, and a new + - rscadd: A few lore discs, new mobs to battle + - balance: Some Eclipse mobs nerfed, Janus boss reworked + - maptweak: Tyr Precursor ruins is altered, and a new tacoguy7765093: - - bugfix: Fixes science protolathe being too restricted. + - bugfix: Fixes science protolathe being too restricted. 2025-04-29: CHOMPStation2StaffMirrorBot: - - rscadd: Added new lobby screen and new player experience. - - bugfix: Title screens work better + - rscadd: Added new lobby screen and new player experience. + - bugfix: Title screens work better Kashargul: - - bugfix: fast eater not being custom + - bugfix: fast eater not being custom tacoguy7765093: - - rscadd: Added a new outsider pod called the RipperDocPod for all your cyberpunk - needs. + - rscadd: + Added a new outsider pod called the RipperDocPod for all your cyberpunk + needs. 2025-04-30: CHOMPStation2StaffMirrorBot: - - bugfix: Loadout items no longer disappear during migrations - - code_imp: tgui-core 3.1.3 - - code_imp: Adjustment on self surgery proc to allow synthetics to commit self surgery. - - rscadd: Wearing specific types of footwear preserves barefoot stepping sounds - - bugfix: Lobby screen is less colorbandy - - bugfix: fixed recyclers fucking up every button ever in tgui + - bugfix: Loadout items no longer disappear during migrations + - code_imp: tgui-core 3.1.3 + - code_imp: Adjustment on self surgery proc to allow synthetics to commit self surgery. + - rscadd: Wearing specific types of footwear preserves barefoot stepping sounds + - bugfix: Lobby screen is less colorbandy + - bugfix: fixed recyclers fucking up every button ever in tgui diff --git a/html/changelogs_ch/archive/2025-05.yml b/html/changelogs_ch/archive/2025-05.yml index 2d2d83b81e..ef23a38e29 100644 --- a/html/changelogs_ch/archive/2025-05.yml +++ b/html/changelogs_ch/archive/2025-05.yml @@ -1,237 +1,268 @@ 2025-05-01: CHOMPStation2StaffMirrorBot: - - rscadd: Wires UI is now extra pretty + - rscadd: Wires UI is now extra pretty TheCaramelion: - - bugfix: fixed TGUI not compiling + - bugfix: fixed TGUI not compiling 2025-05-02: CHOMPStation2StaffMirrorBot: - - rscadd: laser5 sound file - - qol: 'bullet_pellet fire_sound to laser5 from Laser4 + - rscadd: laser5 sound file + - qol: "bullet_pellet fire_sound to laser5 from Laser4 - :cl:' - - bugfix: You cant self surgery without NT's permission anymore. - - bugfix: TGUI not compiling - - bugfix: cuffing runtime flood on invalid targets + :cl:" + - bugfix: You cant self surgery without NT's permission anymore. + - bugfix: TGUI not compiling + - bugfix: cuffing runtime flood on invalid targets FluffMedic: - - bugfix: tyr active edges fixed + - bugfix: tyr active edges fixed 2025-05-04: CHOMPStation2StaffMirrorBot: - - bugfix: Wires actually work on things other than airlocks again + - bugfix: Wires actually work on things other than airlocks again FluffMedic: - - rscadd: Tyr Scientist drops a funny lore disc now + - rscadd: Tyr Scientist drops a funny lore disc now 2025-05-05: CHOMPStation2StaffMirrorBot: - - bugfix: player_list ending up with nulls in it + - bugfix: player_list ending up with nulls in it 2025-05-06: CHOMPStation2StaffMirrorBot: - - bugfix: secborg dullahans resting sprites not head bobbing properly. (misaligned.) - - rscadd: Added new variants of knight armours that have lower stats and small slowdown, - but can be found around the fantasy redgate instead of the buffed PoI rewards. - - maptweak: Replaced the murder fire smoke from the burning building with harmless - smoke. + - bugfix: secborg dullahans resting sprites not head bobbing properly. (misaligned.) + - rscadd: + Added new variants of knight armours that have lower stats and small slowdown, + but can be found around the fantasy redgate instead of the buffed PoI rewards. + - maptweak: + Replaced the murder fire smoke from the burning building with harmless + smoke. Diana: - - rscadd: spacomycaze can now upgrade Bruise Packs to advanced bruise packs + - rscadd: spacomycaze can now upgrade Bruise Packs to advanced bruise packs Will: - - bugfix: Bioprinter works again + - bugfix: Bioprinter works again 2025-05-08: CHOMPStation2StaffMirrorBot: - - bugfix: Virology access buttons no longer depend on init lag to setup their state - correctly. - - code_imp: Removed spawn() behavior from airlock program. Added airlock update - radio command to setup doors on airlock init. - - bugfix: Fixed cave-ins in fantasy dungeon around the dragon - - qol: added the ability to pick up floor tiles to the sheet loader gripper that - borgs have - - bugfix: Fixes throw passing (I didn't even know this was a thing) - - bugfix: Fix spacebar throwing - - bugfix: Fix appearance changer menu lacking data for species sounds + - bugfix: + Virology access buttons no longer depend on init lag to setup their state + correctly. + - code_imp: + Removed spawn() behavior from airlock program. Added airlock update + radio command to setup doors on airlock init. + - bugfix: Fixed cave-ins in fantasy dungeon around the dragon + - qol: + added the ability to pick up floor tiles to the sheet loader gripper that + borgs have + - bugfix: Fixes throw passing (I didn't even know this was a thing) + - bugfix: Fix spacebar throwing + - bugfix: Fix appearance changer menu lacking data for species sounds Diana: - - rscadd: Optional Big Leggies as a marking. These are hidden underneath clothing. - - bugfix: Makes Big Leggies (tail) show back above clothing. + - rscadd: Optional Big Leggies as a marking. These are hidden underneath clothing. + - bugfix: Makes Big Leggies (tail) show back above clothing. 2025-05-09: tacoguy7765093: - - bugfix: Fixed carrier ships not having southern cross's docking codes + - bugfix: Fixed carrier ships not having southern cross's docking codes 2025-05-10: CHOMPStation2StaffMirrorBot: - - rscadd: Balloon Alerts - - refactor: Changed various to_chat to balloon alerts - - bugfix: Fixes runtime errors caused by barefoot sounds. - - bugfix: some coulcatcher vis and pref issues - - code_imp: update tgui core to 3.1.4 + - rscadd: Balloon Alerts + - refactor: Changed various to_chat to balloon alerts + - bugfix: Fixes runtime errors caused by barefoot sounds. + - bugfix: some coulcatcher vis and pref issues + - code_imp: update tgui core to 3.1.4 Diana: - - rscadd: Rx variants of omnihuds now selectable in the loadout. + - rscadd: Rx variants of omnihuds now selectable in the loadout. 2025-05-12: CHOMPStation2StaffMirrorBot: - - rscadd: Two new centered horns that look more axe-like. Perfect for making worldy - critters that live out on the rim. - - rscadd: Added new species desc and changed minimum age for Rapala to 19 for lore - reasons - - rscadd: Usage of "Teshari Union" instead of "Teshari Expeditionary Fleet" wherever - I could find it and updated cataloguer lore - - rscadd: updated maximum working age of tesh in the code to 80, which is 20 years - younger than their actual maximum age - - rscadd: Teshari union is now a valid citizenship instead of Teshari Expeditionary - fleet, as well as a valid faction choice - - qol: makes lobby screen more reliable - - code_imp: tgui-core 3.1.5 + - rscadd: + Two new centered horns that look more axe-like. Perfect for making worldy + critters that live out on the rim. + - rscadd: + Added new species desc and changed minimum age for Rapala to 19 for lore + reasons + - rscadd: + Usage of "Teshari Union" instead of "Teshari Expeditionary Fleet" wherever + I could find it and updated cataloguer lore + - rscadd: + updated maximum working age of tesh in the code to 80, which is 20 years + younger than their actual maximum age + - rscadd: + Teshari union is now a valid citizenship instead of Teshari Expeditionary + fleet, as well as a valid faction choice + - qol: makes lobby screen more reliable + - code_imp: tgui-core 3.1.5 2025-05-13: CHOMPStation2StaffMirrorBot: - - bugfix: Fixes micros being able to pick themselves up. + - bugfix: Fixes micros being able to pick themselves up. 2025-05-14: CHOMPStation2StaffMirrorBot: - - rscadd: Engi and med v3 dullahans wings now work again - - bugfix: Fixed Neutered symptoms not staying neutered when moved around - - bugfix: Fixed diseases duplicating when created - - bugfix: Fixed species with immunity catching viruses - - bugfix: Fixed Pandemic runtimes when trying to duplicate a non-advanced diseases + - rscadd: Engi and med v3 dullahans wings now work again + - bugfix: Fixed Neutered symptoms not staying neutered when moved around + - bugfix: Fixed diseases duplicating when created + - bugfix: Fixed species with immunity catching viruses + - bugfix: Fixed Pandemic runtimes when trying to duplicate a non-advanced diseases 2025-05-16: CHOMPStation2StaffMirrorBot: - - rscadd: New moth eyes marking! - - rscadd: Added the ability to recolour material stacks (such as plastic). Some - items crafted from stacks (such as curtains or beds) inherit the color variable - of the stack, now you can actually recolour your stack to take advantage of - this! - - refactor: Talk sounds are more convenient to add to or change downstream - - bugfix: 'Loaf sprites on Fat Wolf 3 and Fat Wolf 3 Alt are fixed (Note: ALT variant - currently still needs spritework.)' + - rscadd: New moth eyes marking! + - rscadd: + Added the ability to recolour material stacks (such as plastic). Some + items crafted from stacks (such as curtains or beds) inherit the color variable + of the stack, now you can actually recolour your stack to take advantage of + this! + - refactor: Talk sounds are more convenient to add to or change downstream + - bugfix: + "Loaf sprites on Fat Wolf 3 and Fat Wolf 3 Alt are fixed (Note: ALT variant + currently still needs spritework.)" Diana: - - refactor: Weaver, Drippy, and Gargoyle has been refactored. Now uses DCS. - - refactor: Disabilities have been refactored. Now uses DCS. - - qol: Vasillian bodytype gets increased webbing storage if selected. - - refactor: Shadekin and Xenochimera no longer have their special powers on their - brain. Instead it's a component. - - server: Ref Track now goes => .log. Proper ref tracking dm ticked in the .dme + - refactor: Weaver, Drippy, and Gargoyle has been refactored. Now uses DCS. + - refactor: Disabilities have been refactored. Now uses DCS. + - qol: Vasillian bodytype gets increased webbing storage if selected. + - refactor: + Shadekin and Xenochimera no longer have their special powers on their + brain. Instead it's a component. + - server: Ref Track now goes => .log. Proper ref tracking dm ticked in the .dme Kashargul & Diana: - - bugfix: Fixes an error where nulls would enter the player list. + - bugfix: Fixes an error where nulls would enter the player list. 2025-05-17: Aphast: - - rscadd: Any species can now take the 'drippy' trait, previously custom only + - rscadd: Any species can now take the 'drippy' trait, previously custom only CHOMPStation2StaffMirrorBot: - - refactor: Posters can now use downstream overrides to use their own dmis - - code_imp: adds a unit-test to prevent illegal icons and icon_states in poster - definitions - - bugfix: Fixes the glamour drain ability showing the "contact has been broken" - message when it is successful. - - code_imp: RemoveDisease proc now uses LAZYREMOVE - - code_imp: HasResistance proc now uses LAZYFIND - - refactor: Photosynthesis code moved to component - - refactor: complete rebuild of hallucination code to use components and more safely - handled client images - - refactor: Overmap shuttle star movement overlay is not controlled by a subsystem + - refactor: Posters can now use downstream overrides to use their own dmis + - code_imp: + adds a unit-test to prevent illegal icons and icon_states in poster + definitions + - bugfix: + Fixes the glamour drain ability showing the "contact has been broken" + message when it is successful. + - code_imp: RemoveDisease proc now uses LAZYREMOVE + - code_imp: HasResistance proc now uses LAZYFIND + - refactor: Photosynthesis code moved to component + - refactor: + complete rebuild of hallucination code to use components and more safely + handled client images + - refactor: Overmap shuttle star movement overlay is not controlled by a subsystem Diana: - - bugfix: Endurance traits now are properly calculated when it comes to death & - crit. - - bugfix: Xenochimera can no longer move while dead - - balance: Lightweight saddlebags now properly hold normal storage amounts - - balance: Lightweight saddlebags now only cost 1 loadout point. - - balance: taur duty vest (backpack) (Heavy) now costs 2 loadout points. - - rscadd: New Waddle mechanic that can be turned on via 'Character' under Preferences. - Allows you to have animated movement. - - bugfix: Teshari HoS cloak is now selectable - - bugfix: Teshari captain cloak now selects properly + - bugfix: + Endurance traits now are properly calculated when it comes to death & + crit. + - bugfix: Xenochimera can no longer move while dead + - balance: Lightweight saddlebags now properly hold normal storage amounts + - balance: Lightweight saddlebags now only cost 1 loadout point. + - balance: taur duty vest (backpack) (Heavy) now costs 2 loadout points. + - rscadd: + New Waddle mechanic that can be turned on via 'Character' under Preferences. + Allows you to have animated movement. + - bugfix: Teshari HoS cloak is now selectable + - bugfix: Teshari captain cloak now selects properly 2025-05-18: CHOMPStation2StaffMirrorBot: - - bugfix: mob holders play nice with disposals again + - bugfix: mob holders play nice with disposals again Diana: - - qol: Guns that do bonus damage to simple_mob/animal (phaseguns) now do bonus damage - to any simple_mob - - qol: Survey Vendor and Mining Vendor have had some adjustments. PSGs are now available - in them. Some price adjustments. Mining gets a expensive version of their rig. - - qol: Kinetic Gauntlets can fit in your backpack now. + - qol: + Guns that do bonus damage to simple_mob/animal (phaseguns) now do bonus damage + to any simple_mob + - qol: + Survey Vendor and Mining Vendor have had some adjustments. PSGs are now available + in them. Some price adjustments. Mining gets a expensive version of their rig. + - qol: Kinetic Gauntlets can fit in your backpack now. Shadowfire117: - - rscadd: casino crew armband + - rscadd: casino crew armband 2025-05-19: Guti: - - qol: Adjusted the vomit proc. + - qol: Adjusted the vomit proc. 2025-05-20: CHOMPStation2StaffMirrorBot: - - bugfix: mobs can be extinguished by hand when beneath paincrit threshold - - code_imp: Prepared signal handling code for future work - - rscadd: Nutrition resizing traits, disabled on virgo - - refactor: Moved nutrition resizing code to components + - bugfix: mobs can be extinguished by hand when beneath paincrit threshold + - code_imp: Prepared signal handling code for future work + - rscadd: Nutrition resizing traits, disabled on virgo + - refactor: Moved nutrition resizing code to components Diana: - - qol: TTS device now costs 0 points - - code_imp: Gibbing is now 75% FASTER!!! + - qol: TTS device now costs 0 points + - code_imp: Gibbing is now 75% FASTER!!! 2025-05-21: CHOMPStation2StaffMirrorBot: - - image: Fox taurs now have belly sprites. - - code_imp: tgui-core 3.2.0 - - image: added new smolraptors (sec blue, sec red, syndicate); "pk" sec white smolraptor - moved to crisis - - image: new rest mode for smolraptors - - qol: Changes a few descriptions of eating to be more neutral, and a bit less gross - and discouraging to people who like stuffing. + - image: Fox taurs now have belly sprites. + - code_imp: tgui-core 3.2.0 + - image: + added new smolraptors (sec blue, sec red, syndicate); "pk" sec white smolraptor + moved to crisis + - image: new rest mode for smolraptors + - qol: + Changes a few descriptions of eating to be more neutral, and a bit less gross + and discouraging to people who like stuffing. Diana: - - rscdel: Supermatter is no longer obtainable via xenoarcheology & xenobotany + - rscdel: Supermatter is no longer obtainable via xenoarcheology & xenobotany TheCaramelion: - - rscdel: Disabled SecMed + - rscdel: Disabled SecMed 2025-05-25: CHOMPStation2StaffMirrorBot: - - bugfix: Capsaicin no longer causes toxin damage when eaten - - bugfix: qdeleted new_players causing havoc + - bugfix: Capsaicin no longer causes toxin damage when eaten + - bugfix: qdeleted new_players causing havoc ShadowLarkens: - - qol: Entire character setup menu rewritten in TGUI + - qol: Entire character setup menu rewritten in TGUI 2025-05-26: CHOMPStation2StaffMirrorBot: - - bugfix: Gas overlays work again - - code_imp: xgm gas_data is now a GLOB - - server: Server starts faster now + - bugfix: Gas overlays work again + - code_imp: xgm gas_data is now a GLOB + - server: Server starts faster now Diana: - - bugfix: Gorka sprites now properly show - - bugfix: Vox will no longer have a green suit when equipping an unsprited suit - - bugfix: Missing teshari uniform sprites will fallback to a rainbow suit instead - of naked - - bugfix: Missing rolled down/sleeves up uniform sprites will now fallback to an - owlsuit instead of a giant floating SUIT - - rscadd: Missing uniform sprites show up as an owlsuit instead of a giant floating - SUIT + - bugfix: Gorka sprites now properly show + - bugfix: Vox will no longer have a green suit when equipping an unsprited suit + - bugfix: + Missing teshari uniform sprites will fallback to a rainbow suit instead + of naked + - bugfix: + Missing rolled down/sleeves up uniform sprites will now fallback to an + owlsuit instead of a giant floating SUIT + - rscadd: + Missing uniform sprites show up as an owlsuit instead of a giant floating + SUIT 2025-05-27: CHOMPStation2StaffMirrorBot: - - bugfix: Weird pref data causing a UI crash + - bugfix: Weird pref data causing a UI crash Verkister: - - bugfix: Fixed a runtime error with food items on acid turfs. + - bugfix: Fixed a runtime error with food items on acid turfs. 2025-05-28: CHOMPStation2StaffMirrorBot: - - balance: Spider spawned by the spider event have had their behaviour changed. - They are no longer violently aggressive UNLESS they are attacked. However, they - remain territorial and will infrequently "warning bite" anyone who is hanging - out too close to them. This bite does very little toxic damage (you'll outheal - it), but does make you jittery, gives you the drug overlay and slows you down. - - rscadd: Gene scanner tool for genetics to detect traits in monkeys and humans. - - qol: Virus extrapolator not being store-able in the medical belt and pouch - - rscadd: Addictions and consequences for not feeding or treating them. - - rscadd: Various reagents are now addictive, servers can decide if reagents can - be addicted to during a round, or if only with a trait. - - rscadd: Artificial sustenance, a vat-clone body stabilizer using the addiction - system, enabled with a trait - - rscadd: Traits to be addicted to a reagent from round start - - rscadd: inaprovaline treats addiction withdrawls in most cases - - bugfix: Diona not being whitelisted - - bugfix: Body snatcher not respecting resleeve lock - - bugfix: Borgs being slowed by >1000 nutrition - - bugfix: Mobs not updating their transform to match their size - - bugfix: Resleeving not allowed to print whitelisted species - - bugfix: Game preferences missing tgui options + - balance: + Spider spawned by the spider event have had their behaviour changed. + They are no longer violently aggressive UNLESS they are attacked. However, they + remain territorial and will infrequently "warning bite" anyone who is hanging + out too close to them. This bite does very little toxic damage (you'll outheal + it), but does make you jittery, gives you the drug overlay and slows you down. + - rscadd: Gene scanner tool for genetics to detect traits in monkeys and humans. + - qol: Virus extrapolator not being store-able in the medical belt and pouch + - rscadd: Addictions and consequences for not feeding or treating them. + - rscadd: + Various reagents are now addictive, servers can decide if reagents can + be addicted to during a round, or if only with a trait. + - rscadd: + Artificial sustenance, a vat-clone body stabilizer using the addiction + system, enabled with a trait + - rscadd: Traits to be addicted to a reagent from round start + - rscadd: inaprovaline treats addiction withdrawls in most cases + - bugfix: Diona not being whitelisted + - bugfix: Body snatcher not respecting resleeve lock + - bugfix: Borgs being slowed by >1000 nutrition + - bugfix: Mobs not updating their transform to match their size + - bugfix: Resleeving not allowed to print whitelisted species + - bugfix: Game preferences missing tgui options 2025-05-29: CHOMPStation2StaffMirrorBot: - - bugfix: Server is now more stable. + - bugfix: Server is now more stable. Diana: - - bugfix: Some waddle fixes. Waddle height and animation time are now properly selectable - - bugfix: Fixes an oversight that resulted in synthetics not being able to unabsorb - prey. - - bugfix: Toggling silk production now works + - bugfix: Some waddle fixes. Waddle height and animation time are now properly selectable + - bugfix: + Fixes an oversight that resulted in synthetics not being able to unabsorb + prey. + - bugfix: Toggling silk production now works 2025-05-30: CHOMPStation2StaffMirrorBot: - - bugfix: Mobs are briefly stunned when pounced - - image: Fixes missing nukie can sprite - - rscadd: Added a new event collector objector that is designed for events where - players have to gather items to complete a recipe. - - rscadd: Added a blocker object to accompany the event collector. - - rscadd: 'Added a bunch of new torso definition markings: Bust/Bustier (solid, - translucent and outline), nipples (normal position, closer together and one - pixel lower) and abs.' - - bugfix: Admin respawn respects record button selection - - bugfix: custom egg name and size input - - qol: adds an option to have edit mode enabled on window open - - bugfix: dullahan taur jani and command sprites - - bugfix: dullahan syndie sprite + - bugfix: Mobs are briefly stunned when pounced + - image: Fixes missing nukie can sprite + - rscadd: + Added a new event collector objector that is designed for events where + players have to gather items to complete a recipe. + - rscadd: Added a blocker object to accompany the event collector. + - rscadd: + "Added a bunch of new torso definition markings: Bust/Bustier (solid, + translucent and outline), nipples (normal position, closer together and one + pixel lower) and abs." + - bugfix: Admin respawn respects record button selection + - bugfix: custom egg name and size input + - qol: adds an option to have edit mode enabled on window open + - bugfix: dullahan taur jani and command sprites + - bugfix: dullahan syndie sprite diff --git a/html/changelogs_ch/archive/2025-06.yml b/html/changelogs_ch/archive/2025-06.yml index af11b9b94e..25f20b36e7 100644 --- a/html/changelogs_ch/archive/2025-06.yml +++ b/html/changelogs_ch/archive/2025-06.yml @@ -1,359 +1,419 @@ 2025-06-01: CHOMPStation2StaffMirrorBot: - - qol: Crew Monitor & Alarm Map UIs now use a derivative of the Holomap instead - of a weird custom mix of handmade icons. - - admin: VV now has a dark mode (toggleable in game prefs) - - admin: VV now uses getFlatIcon to get a better preview (also toggleable in game - prefs) - - admin: VV now supports previews for /images + - qol: + Crew Monitor & Alarm Map UIs now use a derivative of the Holomap instead + of a weird custom mix of handmade icons. + - admin: VV now has a dark mode (toggleable in game prefs) + - admin: + VV now uses getFlatIcon to get a better preview (also toggleable in game + prefs) + - admin: VV now supports previews for /images Diana: - - bugfix: Markings will no longer make your limbs invisible if toggled off + - bugfix: Markings will no longer make your limbs invisible if toggled off Guti: - - rscadd: Added the ability for virologists to falter their diseases - - rscadd: Added dormant diseases, that some crewmembers might carry. - - rscadd: Added three new chemicals for higher level symptoms. - - rscadd: Old syringes and old syringe boxes, which may include include diseases. - - balance: Buffed the chance of mice having diseases on them. + - rscadd: Added the ability for virologists to falter their diseases + - rscadd: Added dormant diseases, that some crewmembers might carry. + - rscadd: Added three new chemicals for higher level symptoms. + - rscadd: Old syringes and old syringe boxes, which may include include diseases. + - balance: Buffed the chance of mice having diseases on them. 2025-06-03: CHOMPStation2StaffMirrorBot: - - bugfix: genescanner tool now has a proper description - - bugfix: Holomaps/Nanomaps no longer show POI walls - - bugfix: lights do not ignore light switch state when a bulb is inserted - - image: Fixed taj belly markings missing their groins. - - bugfix: macrophages escape chance is now properly set to 20% - - balance: Unathi no longer pass out from sugar, they just get knocked over. + - bugfix: genescanner tool now has a proper description + - bugfix: Holomaps/Nanomaps no longer show POI walls + - bugfix: lights do not ignore light switch state when a bulb is inserted + - image: Fixed taj belly markings missing their groins. + - bugfix: macrophages escape chance is now properly set to 20% + - balance: Unathi no longer pass out from sugar, they just get knocked over. Diana: - - code_imp: Less random lagspikes during the middle of the round. + - code_imp: Less random lagspikes during the middle of the round. FluffMedic: - - qol: Cyber shuttle has full glass walls + - qol: Cyber shuttle has full glass walls Guti: - - refactor: Refactored soap - - refactor: Refactored washing machine code to get rid of sleeps - - rscadd: You can eat soap now - - rscadd: Clean component - - code_imp: Replaced clean(), clean_blood(), and clean_contamination() with wash() + - refactor: Refactored soap + - refactor: Refactored washing machine code to get rid of sleeps + - rscadd: You can eat soap now + - rscadd: Clean component + - code_imp: Replaced clean(), clean_blood(), and clean_contamination() with wash() Verkister: - - bugfix: Fixed unlinked digestive juice turfs not damaging humanmobs. + - bugfix: Fixed unlinked digestive juice turfs not damaging humanmobs. 2025-06-04: CHOMPStation2StaffMirrorBot: - - bugfix: Fixed showers not washing atoms in it's space - - rscadd: Added a small amount of weaken to spider warning bites to knock people - over. - - rscadd: Added a new variable to mobs that can prevent them from being pulled when - alive, currently only applies to the spiders. - - bugfix: Fixed an issue where spiders would sometimes try to inject poison where - they couldn't and runtime. - - rscadd: Multishock integration - - rscadd: Photodegeneration genetrait, cannot be selected from round start - - bugfix: Drippy trait will no longer drop drips into the cryopod when a human with - it is in the pod - - refactor: inStasisNow() has a base proc on mob, for ease of component compatibility - between simple and human mobs - - refactor: Moved species/shadow and zaddat light-based damage code to a component + - bugfix: Fixed showers not washing atoms in it's space + - rscadd: + Added a small amount of weaken to spider warning bites to knock people + over. + - rscadd: + Added a new variable to mobs that can prevent them from being pulled when + alive, currently only applies to the spiders. + - bugfix: + Fixed an issue where spiders would sometimes try to inject poison where + they couldn't and runtime. + - rscadd: Multishock integration + - rscadd: Photodegeneration genetrait, cannot be selected from round start + - bugfix: + Drippy trait will no longer drop drips into the cryopod when a human with + it is in the pod + - refactor: + inStasisNow() has a base proc on mob, for ease of component compatibility + between simple and human mobs + - refactor: Moved species/shadow and zaddat light-based damage code to a component Diana: - - bugfix: You now lose nutrition passively again + - bugfix: You now lose nutrition passively again 2025-06-05: Diana: - - rscadd: Your spleen has been rescued from the Skrell. (Everyone now has a spleen, - not JUST skrell) - - bugfix: Worm meat can now properly be cut into - - bugfix: Organs now properly show their names when you're interacting with them - surgically. - - qol: Surgery steps don't have randomness anymore. Surgery steps also lowered - - qol: You can shove dead organs in bodies. Still a bad idea, but can be combined - with the patient stabilizer to some success. - - code_imp: Adds a spooky modifier with some special stuff to go along with it. - Not obtainable outside of admins. - - bugfix: Puking with a broken liver now properly makes you vomit the correct blood - color + - rscadd: + Your spleen has been rescued from the Skrell. (Everyone now has a spleen, + not JUST skrell) + - bugfix: Worm meat can now properly be cut into + - bugfix: + Organs now properly show their names when you're interacting with them + surgically. + - qol: Surgery steps don't have randomness anymore. Surgery steps also lowered + - qol: + You can shove dead organs in bodies. Still a bad idea, but can be combined + with the patient stabilizer to some success. + - code_imp: + Adds a spooky modifier with some special stuff to go along with it. + Not obtainable outside of admins. + - bugfix: + Puking with a broken liver now properly makes you vomit the correct blood + color Guti: - - bugfix: Fixed wash() proc to delete cleanable decals - - bugfix: Fixed mops and soaps not making the floor wet + - bugfix: Fixed wash() proc to delete cleanable decals + - bugfix: Fixed mops and soaps not making the floor wet 2025-06-06: Diana: - - bugfix: Artifact range logic fixed - - bugfix: Lightning artifact now respects protection - - balance: DNA mutation artifact no longer mutates genes as often - - qol: DNA mutation artifact no longer spams your chat. + - bugfix: Artifact range logic fixed + - bugfix: Lightning artifact now respects protection + - balance: DNA mutation artifact no longer mutates genes as often + - qol: DNA mutation artifact no longer spams your chat. 2025-06-07: CHOMPStation2StaffMirrorBot: - - admin: Admin verb subsystem is now integrated and a small amount of verbs have - been converted into the new format (categories or verb names are still the same - of course). - - maptweak: Tether tweaks. Added a swimwear locker to the locker room, a wall locker - with towels near the spa, and polarisable windows to the massage room. - - code_imp: removed duplicate b_type var from human mobs, they use their dna one - only now - - bugfix: bloodtype not being assigned to organs and limbs - - rscadd: Fingerprints can now be washed off in washing machines and showers. - - refactor: Reworked all bloodsplatter, fingerprint, gunshot residue, and clothing - fiber code into a single datum - - bugfix: cult ritual runes missing wash proc - - bugfix: vehicles no longer run you over going down stairs if you are driving them - - refactor: janicart updated to use vehicle code - - bugfix: a crash with the General Tab in the vorepanel if used by robots - - rscadd: Implements digi sprite markings for hooves, fox legs, tiger stripes, and - a gloss for toning. - - maptweak: Added janicart and keys for it to each station map. This is just in - the existing room on SD and RP. On the tether, there is a small garage on the - side of the janitors office now, because I thought that would be cute! + - admin: + Admin verb subsystem is now integrated and a small amount of verbs have + been converted into the new format (categories or verb names are still the same + of course). + - maptweak: + Tether tweaks. Added a swimwear locker to the locker room, a wall locker + with towels near the spa, and polarisable windows to the massage room. + - code_imp: + removed duplicate b_type var from human mobs, they use their dna one + only now + - bugfix: bloodtype not being assigned to organs and limbs + - rscadd: Fingerprints can now be washed off in washing machines and showers. + - refactor: + Reworked all bloodsplatter, fingerprint, gunshot residue, and clothing + fiber code into a single datum + - bugfix: cult ritual runes missing wash proc + - bugfix: vehicles no longer run you over going down stairs if you are driving them + - refactor: janicart updated to use vehicle code + - bugfix: a crash with the General Tab in the vorepanel if used by robots + - rscadd: + Implements digi sprite markings for hooves, fox legs, tiger stripes, and + a gloss for toning. + - maptweak: + Added janicart and keys for it to each station map. This is just in + the existing room on SD and RP. On the tether, there is a small garage on the + side of the janitors office now, because I thought that would be cute! 2025-06-08: CHOMPStation2StaffMirrorBot: - - rscadd: Added custom links to the character directory. - - bugfix: Fake attackers crashing MC with invalid turfs - - bugfix: cleaning applies description to desc, not to name! - - bugfix: Circuit boards no longer bad-del - - rscadd: AIs can now open their multicam views in completely separate windows and - maintain them while switching back to main view. - - bugfix: Camera consoles work more consistently. - - rscadd: Glitch-out effect to AI holograms when stuff passes through them - - bugfix: fixed mobs that qdel on death, causing crashes when crushed by doors and - dying. - - bugfix: Phased shadekin can no longer be lit on fire by atmofires - - bugfix: Phased shadekin can no longer be run over by vehicles - - bugfix: maintenance drone HP calculations - - bugfix: borgs don't try to leave suit fibres on fingerprint checks - - qol: The chat now supports TTS for chosen message types, filtered the same way - that chat tabs are filtered. This is an accessibility feature. - - bugfix: Fixed runtime on vampire xenoartifact's blood sucking effect + - rscadd: Added custom links to the character directory. + - bugfix: Fake attackers crashing MC with invalid turfs + - bugfix: cleaning applies description to desc, not to name! + - bugfix: Circuit boards no longer bad-del + - rscadd: + AIs can now open their multicam views in completely separate windows and + maintain them while switching back to main view. + - bugfix: Camera consoles work more consistently. + - rscadd: Glitch-out effect to AI holograms when stuff passes through them + - bugfix: + fixed mobs that qdel on death, causing crashes when crushed by doors and + dying. + - bugfix: Phased shadekin can no longer be lit on fire by atmofires + - bugfix: Phased shadekin can no longer be run over by vehicles + - bugfix: maintenance drone HP calculations + - bugfix: borgs don't try to leave suit fibres on fingerprint checks + - qol: + The chat now supports TTS for chosen message types, filtered the same way + that chat tabs are filtered. This is an accessibility feature. + - bugfix: Fixed runtime on vampire xenoartifact's blood sucking effect 2025-06-09: CHOMPStation2StaffMirrorBot: - - bugfix: phased shadekin no longer prevent airlocks from closing - - bugfix: phased shadekin are no longer crushed by dangerous airlocks closing - - rscadd: Dormant diseases may now be acquired via blood samples - - qol: Allowed virus immune species to get dormant diseases, as well as access to - Disease Carrier trait - - balance: The extrapolator may find any disease with no regards of it's stealth - - code_imp: added GetDormantDiseases proc + - bugfix: phased shadekin no longer prevent airlocks from closing + - bugfix: phased shadekin are no longer crushed by dangerous airlocks closing + - rscadd: Dormant diseases may now be acquired via blood samples + - qol: + Allowed virus immune species to get dormant diseases, as well as access to + Disease Carrier trait + - balance: The extrapolator may find any disease with no regards of it's stealth + - code_imp: added GetDormantDiseases proc Diana: - - bugfix: Plat and gold can be put in prosfabs again - - balance: Spooky modifier was tested and had some balance adjustments + - bugfix: Plat and gold can be put in prosfabs again + - balance: Spooky modifier was tested and had some balance adjustments FluffMedic: - - bugfix: properly removes a nonfunctioning attack from the E-janus - - bugfix: The hivebot tower summoning the wrong mobs - - bugfix: wrong pilot for E-janus - - qol: Added more feedback to the E-Janus's armor gimmick. + - bugfix: properly removes a nonfunctioning attack from the E-janus + - bugfix: The hivebot tower summoning the wrong mobs + - bugfix: wrong pilot for E-janus + - qol: Added more feedback to the E-Janus's armor gimmick. 2025-06-11: CHOMPStation2StaffMirrorBot: - - bugfix: fixed dormant diseases showing up in Medical scanners - - bugfix: some vorepanel message toggles in the general tab - - bugfix: game panel inaccessible to devs / event managers + - bugfix: fixed dormant diseases showing up in Medical scanners + - bugfix: some vorepanel message toggles in the general tab + - bugfix: game panel inaccessible to devs / event managers FluffMedic: - - rscadd: 2 new sif POIs based off a past event + - rscadd: 2 new sif POIs based off a past event 2025-06-12: Diana, Will, Kash: - - qol: Prometheans now use an appearance changer instead of 100 specialty verbs! - - qol: Cocoon trait can now change more things about you! - - qol: TF methods using the apperance changer allow you to load slots. - - bugfix: missing ooc notes added to body record for transfer - - bugfix: clonepods do not break listener code when releasing occupants - - bugfix: clonepod computer does not spin right around baby when interacted with - - bugfix: body redesign UI preview aligned correctly and no longer tiny - - bugfix: species/copy_vars no longer takes centuries validating known good data - - qol: anyone adding new dna vars no longer needs to worry about the dna cloning - proc. - - balance: FBP Xenochimera regenerate their robolimbs back - - balance: Organic Xenochimera drop their robolimbs, allowing them to slap them - back on post-revival - - code_imp: added BLACKLISTED_COPY_VARS macro, for safely iterating or filtering - atom.vars - - code_imp: added COMSIG_HUMAN_DNA_FINALIZED signal. Sent when a human mob is fully - init with all dna and species vars applied. - - code_imp: hair gradients use dnaUIs instead of separate vars - - refactor: massive rework to dna, bodyrecords and dna2record datums to handle copying - vars, and applying them to their owner mob more gracefully - - refactor: all dna related machines that resleeve humans, except the autosleever, - use a unified proc to ensure no loss of data. - - refactor: Xenochimera no longer use admin procs to heal, and use an internal body - record datum. + - qol: Prometheans now use an appearance changer instead of 100 specialty verbs! + - qol: Cocoon trait can now change more things about you! + - qol: TF methods using the apperance changer allow you to load slots. + - bugfix: missing ooc notes added to body record for transfer + - bugfix: clonepods do not break listener code when releasing occupants + - bugfix: clonepod computer does not spin right around baby when interacted with + - bugfix: body redesign UI preview aligned correctly and no longer tiny + - bugfix: species/copy_vars no longer takes centuries validating known good data + - qol: + anyone adding new dna vars no longer needs to worry about the dna cloning + proc. + - balance: FBP Xenochimera regenerate their robolimbs back + - balance: + Organic Xenochimera drop their robolimbs, allowing them to slap them + back on post-revival + - code_imp: + added BLACKLISTED_COPY_VARS macro, for safely iterating or filtering + atom.vars + - code_imp: + added COMSIG_HUMAN_DNA_FINALIZED signal. Sent when a human mob is fully + init with all dna and species vars applied. + - code_imp: hair gradients use dnaUIs instead of separate vars + - refactor: + massive rework to dna, bodyrecords and dna2record datums to handle copying + vars, and applying them to their owner mob more gracefully + - refactor: + all dna related machines that resleeve humans, except the autosleever, + use a unified proc to ensure no loss of data. + - refactor: + Xenochimera no longer use admin procs to heal, and use an internal body + record datum. FluffMedic: - - bugfix: carrier being disconnected from medical sensors + - bugfix: carrier being disconnected from medical sensors 2025-06-13: CHOMPStation2StaffMirrorBot: - - rscadd: Improved AI holonoms, they use real bellies now - - rscadd: 'Succubi care about consent and have a safeword~ :heart:' - - sound: SMESes now make a big contactor noise when switched on and off. - - admin: Added a new smite that forces the skyrim intro meme onto someone. - - qol: The stripping menu is more intuitive now - - bugfix: Emote sound mode should now apply to things like *meow. - - rscadd: The cooking machines now have unique UIs. - - qol: The cooking machines like the grill and deep fryer now attempt to predict - what they will produce. - - rscadd: Character Directory now shows profile pictures. - - code_imp: added primitive color grading for areas and weather - - qol: You can configure whether or not you want the runechat "Balloon Messages" - to appear to you or not + - rscadd: Improved AI holonoms, they use real bellies now + - rscadd: "Succubi care about consent and have a safeword~ :heart:" + - sound: SMESes now make a big contactor noise when switched on and off. + - admin: Added a new smite that forces the skyrim intro meme onto someone. + - qol: The stripping menu is more intuitive now + - bugfix: Emote sound mode should now apply to things like *meow. + - rscadd: The cooking machines now have unique UIs. + - qol: + The cooking machines like the grill and deep fryer now attempt to predict + what they will produce. + - rscadd: Character Directory now shows profile pictures. + - code_imp: added primitive color grading for areas and weather + - qol: + You can configure whether or not you want the runechat "Balloon Messages" + to appear to you or not Will: - - qol: dna modification console takes 5 seconds instead of 30 to make a new injector - - qol: gene scanner provides the current value of an active gene, but not it's block - ID - - qol: gene scanner can now scan dna injectors to find out what unmarked injectors - do + - qol: dna modification console takes 5 seconds instead of 30 to make a new injector + - qol: + gene scanner provides the current value of an active gene, but not it's block + ID + - qol: + gene scanner can now scan dna injectors to find out what unmarked injectors + do 2025-06-14: CHOMPStation2StaffMirrorBot: - - code_imp: fixed colorgrading issues - - qol: Paint bucket no longer tries to preview, it's too confusing to look at - - qol: Added a new vore pref to force belly visuals to be capped at a certain alpha. - - rscadd: Real Bluespace RPED that works at range. Locked behind prototype brped - requirements + anomalous 1. + - code_imp: fixed colorgrading issues + - qol: Paint bucket no longer tries to preview, it's too confusing to look at + - qol: Added a new vore pref to force belly visuals to be capped at a certain alpha. + - rscadd: + Real Bluespace RPED that works at range. Locked behind prototype brped + requirements + anomalous 1. FluffMedic: - - bugfix: hivebot disks are named disks instead of disc. - - qol: reduced softlock chances - - balance: blue tower hivebot has more wiggle room, and is a bit more worthwhile + - bugfix: hivebot disks are named disks instead of disc. + - qol: reduced softlock chances + - balance: blue tower hivebot has more wiggle room, and is a bit more worthwhile 2025-06-15: CHOMPStation2StaffMirrorBot: - - bugfix: airflow thrown objects don't hit phased shadekin now - - bugfix: fixed a crash when updating a player record from the employment records - computer - - rscadd: Added new hackable wires to disposal pipe junctions. Divert the flow of - junk as you desire. - - bugfix: Fixed disposal pipe deconstruction + - bugfix: airflow thrown objects don't hit phased shadekin now + - bugfix: + fixed a crash when updating a player record from the employment records + computer + - rscadd: + Added new hackable wires to disposal pipe junctions. Divert the flow of + junk as you desire. + - bugfix: Fixed disposal pipe deconstruction Diana: - - balance: Dogborg blade can be turned on/off. Glows when on. - - rscadd: Dogborg blade can be recolored. - - rscadd: Ninja blade (more damage) and Syndicate blade (starts red) + - balance: Dogborg blade can be turned on/off. Glows when on. + - rscadd: Dogborg blade can be recolored. + - rscadd: Ninja blade (more damage) and Syndicate blade (starts red) 2025-06-16: CHOMPStation2StaffMirrorBot: - - rscadd: makes the switch tail layer verb let you choose from three layers - - maptweak: Added another 8 space heaters to the SD. Three of them in general maint, - 5 of them specifically in a totally forgotten maint corner attached only to - atmos. Also generally spruced up that little room so it's not just blank. + - rscadd: makes the switch tail layer verb let you choose from three layers + - maptweak: + Added another 8 space heaters to the SD. Three of them in general maint, + 5 of them specifically in a totally forgotten maint corner attached only to + atmos. Also generally spruced up that little room so it's not just blank. Diana: - - rscadd: Kinetic Crusher and Kinetic Glaive now in mining vending machine - - balance: Kinetic weapon damage variables shifted around. Gaunelts stronger, Dagger - hits harder when thrown, Machete does more when backstabbing. - - bugfix: Kinetic crusher now does 25 damage, up from 0 - - rscadd: Miners now start with a kinetic crusher in their starting locker + - rscadd: Kinetic Crusher and Kinetic Glaive now in mining vending machine + - balance: + Kinetic weapon damage variables shifted around. Gaunelts stronger, Dagger + hits harder when thrown, Machete does more when backstabbing. + - bugfix: Kinetic crusher now does 25 damage, up from 0 + - rscadd: Miners now start with a kinetic crusher in their starting locker Will: - - refactor: Hose connectors are a component now - - bugfix: Reagent hoses are now stack-able - - bugfix: It is no longer possible to plug a reagent hose into the same object, - making it impossible to retrieve - - bugfix: Reagent hoses no longer become unusable after clicking on an object that - already has all its connections used - - bugfix: Reagent hoses update on object move instead of lagging behind - - bugfix: He3 tank always spawning empty, and with a broken name - - bugfix: Reagent hoses are no longer a memory leak - - qol: Objects with reagent hose connections now show those connections when examined - - qol: Reagent hoses have feedback on connection and disconnection - - qol: Reagent hoses drop on disconnection instead of being destroyed - - qol: Reagent hoses change colors as reagents are pumped through them + - refactor: Hose connectors are a component now + - bugfix: Reagent hoses are now stack-able + - bugfix: + It is no longer possible to plug a reagent hose into the same object, + making it impossible to retrieve + - bugfix: + Reagent hoses no longer become unusable after clicking on an object that + already has all its connections used + - bugfix: Reagent hoses update on object move instead of lagging behind + - bugfix: He3 tank always spawning empty, and with a broken name + - bugfix: Reagent hoses are no longer a memory leak + - qol: Objects with reagent hose connections now show those connections when examined + - qol: Reagent hoses have feedback on connection and disconnection + - qol: Reagent hoses drop on disconnection instead of being destroyed + - qol: Reagent hoses change colors as reagents are pumped through them 2025-06-17: CHOMPStation2StaffMirrorBot: - - rscadd: Xenoarch's Radiocarbon Spectrometer has been rewritten to be more engaging. + - rscadd: Xenoarch's Radiocarbon Spectrometer has been rewritten to be more engaging. Will: - - rscadd: reagent hoses can be used to inflate and drain other human mobs in various - ways - - rscadd: borgs now have hose connectors that go to their current vore belly - - qol: Show belly fluid verb now shows composition of belly fluids and not just - amount - - code_imp: reagents that enter someone's belly become belly reagents to respect - prefs + - rscadd: + reagent hoses can be used to inflate and drain other human mobs in various + ways + - rscadd: borgs now have hose connectors that go to their current vore belly + - qol: + Show belly fluid verb now shows composition of belly fluids and not just + amount + - code_imp: + reagents that enter someone's belly become belly reagents to respect + prefs 2025-06-19: CHOMPStation2StaffMirrorBot: - - rscadd: New process option, "Break Bone". - - qol: If you have digestion pain turned on, you will receive broken bone notifications - even inside a stomach. - - bugfix: Forensics data merging on objects without data but with data on the merging - object, no longer crash on merge - - bugfix: reagent dispenser tanks no longer perform alchemy, turning all reagents - into fuel spills - - rscadd: Voodoo dolls now render things all scrungly - - rscadd: Remote scene tools have some new utility verbs - - qol: Remote scene tools now show the status of their counterpart's wearer on examine - - bugfix: Various typos have been fixed for the recycler and recycling vendor - - bugfix: The maint recycler doesn't nuke your points after getting to 999 anymore. - whoops. - - rscadd: Viruses now spawn with random names, depending on the symptoms, source, - and random factors. - - rscadd: Added medical names to all the common diseases - - rscadd: Examines now embed extra information that used to be examine tab exclusive. - This is a preference, so can be configured to remain as the old behavior. - - rscdel: Removed the old verb for setting examine mode - - refactor: Examine Mode is now a TG preference - - bugfix: Fixed janitor shutter buttons on the tether. - - code_imp: more browse to datum browser - - code_imp: tgui-core 4.3.1 - - bugfix: blood without dna from simple mobs will track onto shoes, floors and hands - again + - rscadd: New process option, "Break Bone". + - qol: + If you have digestion pain turned on, you will receive broken bone notifications + even inside a stomach. + - bugfix: + Forensics data merging on objects without data but with data on the merging + object, no longer crash on merge + - bugfix: + reagent dispenser tanks no longer perform alchemy, turning all reagents + into fuel spills + - rscadd: Voodoo dolls now render things all scrungly + - rscadd: Remote scene tools have some new utility verbs + - qol: Remote scene tools now show the status of their counterpart's wearer on examine + - bugfix: Various typos have been fixed for the recycler and recycling vendor + - bugfix: + The maint recycler doesn't nuke your points after getting to 999 anymore. + whoops. + - rscadd: + Viruses now spawn with random names, depending on the symptoms, source, + and random factors. + - rscadd: Added medical names to all the common diseases + - rscadd: + Examines now embed extra information that used to be examine tab exclusive. + This is a preference, so can be configured to remain as the old behavior. + - rscdel: Removed the old verb for setting examine mode + - refactor: Examine Mode is now a TG preference + - bugfix: Fixed janitor shutter buttons on the tether. + - code_imp: more browse to datum browser + - code_imp: tgui-core 4.3.1 + - bugfix: + blood without dna from simple mobs will track onto shoes, floors and hands + again Diana: - - bugfix: arglasses can be properly selected in the loadout + - bugfix: arglasses can be properly selected in the loadout 2025-06-20: CHOMPStation2StaffMirrorBot: - - code_imp: gene conflict list uses much less memory + - code_imp: gene conflict list uses much less memory 2025-06-21: Diana, Kash: - - rscadd: Borgs now have toolbelts instead of various misc tools in their inventory. - - rscadd: Borgs now have a Material Dispenser that holds all the various materials - they can make, instead of being scattered throughout your inventory - - rscadd: Grippers are now consolidated and have 5 inventory slots each. No more - guessing 'What gripper is used for what' - - rscdel: tool bloat + - rscadd: Borgs now have toolbelts instead of various misc tools in their inventory. + - rscadd: + Borgs now have a Material Dispenser that holds all the various materials + they can make, instead of being scattered throughout your inventory + - rscadd: + Grippers are now consolidated and have 5 inventory slots each. No more + guessing 'What gripper is used for what' + - rscdel: tool bloat Kash Guti Will: - - rscadd: Adds genes and diseases to bingle's database so symptoms and genetics - stuff can be looked up ingame - - code_imp: added unit test for virus names and trait names to prevent tgui issues + - rscadd: + Adds genes and diseases to bingle's database so symptoms and genetics + stuff can be looked up ingame + - code_imp: added unit test for virus names and trait names to prevent tgui issues 2025-06-22: CHOMPStation2StaffMirrorBot: - - balance: Changed the level that you can use backup batteries as a synth to 150 - nutrition, and it also gives you 150 nutrition back. This means you can use - it as soon as you reach slowdown levels of hunger and it fills you up a decent - amount. + - balance: + Changed the level that you can use backup batteries as a synth to 150 + nutrition, and it also gives you 150 nutrition back. This means you can use + it as soon as you reach slowdown levels of hunger and it fills you up a decent + amount. Will: - - code_imp: moves sql death reporting to SSmobs as a single massinsert - - refactor: turns object climbing code into a component - - qol: many more objects are climbable, preventing softlocks, especially for engineers - and miners + - code_imp: moves sql death reporting to SSmobs as a single massinsert + - refactor: turns object climbing code into a component + - qol: + many more objects are climbable, preventing softlocks, especially for engineers + and miners 2025-06-23: CHOMPStation2StaffMirrorBot: - - spellcheck: removed all strucutres from the game - - rscadd: Hoses can connect to sinks for endless water, or as an endless drain + - spellcheck: removed all strucutres from the game + - rscadd: Hoses can connect to sinks for endless water, or as an endless drain 2025-06-24: CHOMPStation2StaffMirrorBot: - - qol: climbable objects being pulled up or down stairs no longer knock you around + - qol: climbable objects being pulled up or down stairs no longer knock you around Diana: - - rscadd: Miners now start with a voucher that can be redeemed for various loadouts - at the ore vendor. + - rscadd: + Miners now start with a voucher that can be redeemed for various loadouts + at the ore vendor. Will: - - qol: Borgs can now examine items to know if any of their grippers can hold it. + - qol: Borgs can now examine items to know if any of their grippers can hold it. 2025-06-29: CHOMPStation2StaffMirrorBot: - - code_imp: Reagent unit-test is more strict about duplicated reagent names - - qol: You can extract blood from blood bags using a syringe - - bugfix: dna block injectors no longer show their entire genome, and instead just - the relevant block. Doesn't affect full sequence injectors. - - bugfix: dna resequencers from the body record console should not do radiation - damage + - code_imp: Reagent unit-test is more strict about duplicated reagent names + - qol: You can extract blood from blood bags using a syringe + - bugfix: + dna block injectors no longer show their entire genome, and instead just + the relevant block. Doesn't affect full sequence injectors. + - bugfix: + dna resequencers from the body record console should not do radiation + damage Diana: - - bugfix: Xenochimera, spider, diona, shadekin, and alraune now process traits properly. + - bugfix: Xenochimera, spider, diona, shadekin, and alraune now process traits properly. FluffMedic: - - rscadd: 4 new tyr ants. Diamond, Uranium, Tritium, Verd - - rscadd: New Tyr boss, and reworked tyr boss code - - balance: altered several experimental chems + - rscadd: 4 new tyr ants. Diamond, Uranium, Tritium, Verd + - rscadd: New Tyr boss, and reworked tyr boss code + - balance: altered several experimental chems zeskorion: - - rscadd: two new traits, one for synthetics, one for xenochimerae - - rscadd: xenochimera can now break free of cuffs,damage borgs, etc when feral - - rscadd: new YR3 monitor icons - - rscdel: removed some bad monitor icon sprites + - rscadd: two new traits, one for synthetics, one for xenochimerae + - rscadd: xenochimera can now break free of cuffs,damage borgs, etc when feral + - rscadd: new YR3 monitor icons + - rscdel: removed some bad monitor icon sprites 2025-06-30: CHOMPStation2StaffMirrorBot: - - rscdel: tgui-sonar - - bugfix: bunch of right issues with the new ticket system and mentors - - admin: More verbs moved to the new subsystem - - admin: Secrets panel overhauled + - rscdel: tgui-sonar + - bugfix: bunch of right issues with the new ticket system and mentors + - admin: More verbs moved to the new subsystem + - admin: Secrets panel overhauled Diana: - - rscadd: Starlight will come through windows and illuminate areas exposed to space! - - rscadd: borgs now have a basic melee weapon (puppy jaws/knife) - - rscadd: Light fixtures can now directly be interfaced via multitool. - - bugfix: Fixes a bunch of bugs with the multibelt and borg gripper - - qol: Borg material dispenser can now pick up materials - - qol: Borg multibelt & Gripper can now open the radial menu via Ctrl-Z - - qol: Borg default crowbar changed to borg jaws - - bugfix: Borg welder no longer passively drains battery - - qol: Borg gripper will now select the final slot when first spawned, allowing - you to pick up until the gripper is full. - - bugfix: Gargoyle statues now regenerate energy properly - - balance: Gargoyle statues now burn under extreme temperatures (>1600C) - - balance: Gargoyle statues now regenerate health VERY slowly when in statue state - (150 hp will take 50 minutes) - - code_imp: Gargoyle code quality increased in general. + - rscadd: Starlight will come through windows and illuminate areas exposed to space! + - rscadd: borgs now have a basic melee weapon (puppy jaws/knife) + - rscadd: Light fixtures can now directly be interfaced via multitool. + - bugfix: Fixes a bunch of bugs with the multibelt and borg gripper + - qol: Borg material dispenser can now pick up materials + - qol: Borg multibelt & Gripper can now open the radial menu via Ctrl-Z + - qol: Borg default crowbar changed to borg jaws + - bugfix: Borg welder no longer passively drains battery + - qol: + Borg gripper will now select the final slot when first spawned, allowing + you to pick up until the gripper is full. + - bugfix: Gargoyle statues now regenerate energy properly + - balance: Gargoyle statues now burn under extreme temperatures (>1600C) + - balance: + Gargoyle statues now regenerate health VERY slowly when in statue state + (150 hp will take 50 minutes) + - code_imp: Gargoyle code quality increased in general. diff --git a/html/changelogs_ch/archive/2025-07.yml b/html/changelogs_ch/archive/2025-07.yml index 252504d2de..1d95409d1c 100644 --- a/html/changelogs_ch/archive/2025-07.yml +++ b/html/changelogs_ch/archive/2025-07.yml @@ -1,182 +1,204 @@ 2025-07-02: CHOMPStation2StaffMirrorBot: - - bugfix: Fixed virus databases breaking in Medical Computers + - bugfix: Fixed virus databases breaking in Medical Computers TheCaramelion: - - bugfix: Fixed Teshari being too healthy - - bugfix: Fixed Teshari being too brittle/flammable - - bugfix: Fixed Teshari holder sprites + - bugfix: Fixed Teshari being too healthy + - bugfix: Fixed Teshari being too brittle/flammable + - bugfix: Fixed Teshari holder sprites 2025-07-03: Reo: - - qol: soap can be wetted to instantly clean tiles as it used to work. - - balance: Balances soap so that it's not terrible again. (removed the durability - mechanic) + - qol: soap can be wetted to instantly clean tiles as it used to work. + - balance: + Balances soap so that it's not terrible again. (removed the durability + mechanic) Tost: - - bugfix: Emergency lights no longer blow up on activation. + - bugfix: Emergency lights no longer blow up on activation. 2025-07-04: Tost: - - balance: Emergency lights now last longer + - balance: Emergency lights now last longer 2025-07-06: CHOMPStation2StaffMirrorBot: - - bugfix: distillery target temperature can no longer be set to null - - bugfix: maint lurkers not spawning with their languages - - bugfix: protean rigs can no longer get stripped in bellies - - bugfix: contractor IDs now take over mining and survey points - - bugfix: show and jacket spawn selection being inverted - - bugfix: paper icons for 516 - - bugfix: food tray should update properly on item removal - - bugfix: transfer fluids from target - - qol: vore bellies now load instantly - - admin: fix server log rights - - admin: fix deadmin verb - - admin: adds missing space to some atom narrate messages - - code_imp: clean up some mob hooks + - bugfix: distillery target temperature can no longer be set to null + - bugfix: maint lurkers not spawning with their languages + - bugfix: protean rigs can no longer get stripped in bellies + - bugfix: contractor IDs now take over mining and survey points + - bugfix: show and jacket spawn selection being inverted + - bugfix: paper icons for 516 + - bugfix: food tray should update properly on item removal + - bugfix: transfer fluids from target + - qol: vore bellies now load instantly + - admin: fix server log rights + - admin: fix deadmin verb + - admin: adds missing space to some atom narrate messages + - code_imp: clean up some mob hooks Diana: - - bugfix: 3 color wolf (Fat vwag) fixed. No longer has broken sprites. - - qol: Cyborg gripper will now smartly stack material stacks. - - qol: Cyborg gripper will no longer unselect stacks when used - - bugfix: Cyborg surgical and botany multibelt no longer have offset - - bugfix: Antags will now properly get antag-only text when examining things. + - bugfix: 3 color wolf (Fat vwag) fixed. No longer has broken sprites. + - qol: Cyborg gripper will now smartly stack material stacks. + - qol: Cyborg gripper will no longer unselect stacks when used + - bugfix: Cyborg surgical and botany multibelt no longer have offset + - bugfix: Antags will now properly get antag-only text when examining things. Diana, Kash: - - rscadd: Changelings can now absorb via VORE. - - refactor: Changeling is now a component - - balance: Changelings now get a genetic point upon absorbing someone - - balance: Changelings don't mc-die from epi - - balance: Changeling spacesuit is now free - - balance: A lot of changeling perks adjusted in minor ways. More to come. - - rscdel: Changeling death sting deleted. - - balance: Changeling unfat sting now reduces nutrition by 85% or 100 nutrition, - whatever's higher. - - qol: Changeling evolution menu is now TGUI - - code_imp: General code cleanup in Changeling code. Now runs smoother. + - rscadd: Changelings can now absorb via VORE. + - refactor: Changeling is now a component + - balance: Changelings now get a genetic point upon absorbing someone + - balance: Changelings don't mc-die from epi + - balance: Changeling spacesuit is now free + - balance: A lot of changeling perks adjusted in minor ways. More to come. + - rscdel: Changeling death sting deleted. + - balance: + Changeling unfat sting now reduces nutrition by 85% or 100 nutrition, + whatever's higher. + - qol: Changeling evolution menu is now TGUI + - code_imp: General code cleanup in Changeling code. Now runs smoother. 2025-07-07: CHOMPStation2StaffMirrorBot: - - rscadd: Added subsystem for handling admin verbs - - rscadd: Added particle editor - - rscadd: Added filter editor - - rscadd: Added matrix editor - - rscadd: Added new vv dropdown options for atoms - - admin: '''modify transform'' dropdown option' - - admin: '''spin animation'' dropdown option' - - admin: '''stop all animations'' dropdown option' - - admin: '''edit filters'' dropdown option' - - admin: '''test matrices'' dropdown option' - - refactor: The tgui admin state can now take one or multiple permissions that are - allowed to view said state - - refactor: Updated vv code - - refactor: Moved a few verbs from the old admin verb system to the new one - - qol: moves robot sprite setting to the visual tab + - rscadd: Added subsystem for handling admin verbs + - rscadd: Added particle editor + - rscadd: Added filter editor + - rscadd: Added matrix editor + - rscadd: Added new vv dropdown options for atoms + - admin: "'modify transform' dropdown option" + - admin: "'spin animation' dropdown option" + - admin: "'stop all animations' dropdown option" + - admin: "'edit filters' dropdown option" + - admin: "'test matrices' dropdown option" + - refactor: + The tgui admin state can now take one or multiple permissions that are + allowed to view said state + - refactor: Updated vv code + - refactor: Moved a few verbs from the old admin verb system to the new one + - qol: moves robot sprite setting to the visual tab 2025-07-08: CHOMPStation2StaffMirrorBot: - - bugfix: Virologists can change the name of their viruses now + - bugfix: Virologists can change the name of their viruses now FluffMedic: - - balance: voidsuits should no longer breach + - balance: voidsuits should no longer breach 2025-07-09: CHOMPStation2StaffMirrorBot: - - rscadd: You can now write messages on people with a pen~ A shower cleans them - off. - - bugfix: mining voucher can no longer be redeemed multiple times + - rscadd: + You can now write messages on people with a pen~ A shower cleans them + off. + - bugfix: mining voucher can no longer be redeemed multiple times 2025-07-10: CHOMPStation2StaffMirrorBot: - - maptweak: floors losing icon state on turf change - - bugfix: Copy slot should work better + - maptweak: floors losing icon state on turf change + - bugfix: Copy slot should work better Diana: - - bugfix: Borg claymore and borg jaws do proper damage values - - refactor: Shadekin component fully fleshed out. Can now be applied to any /mob/living. - No longer locked to species. - - rscadd: 'Crossports Adjust Light Flicker, which allows you to adjust your: Duration - of light flicker, color of light flicker, and light break chance.' - - rscadd: Flashlights will now flicker when shadekin phase in. - - bugfix: Flashlights no longer leave a lingering overlay when the user is eaten - by a shadekin - - qol: 'BESK, OESK, and RESK generate energy quicker. Note: D = Darkness gain/loss - L = Light gain/loss: (BESK: 0.5both->0.75both) (OESK:-0.5L, 0.5D -> -0.25L, - 0.75D) (RESK: -1D -> -0.5D)' - - bugfix: Fixes mobs dying from no-atmos - - bugfix: 8 year bug that causes ability master to disappear upon aghost/relog + - bugfix: Borg claymore and borg jaws do proper damage values + - refactor: + Shadekin component fully fleshed out. Can now be applied to any /mob/living. + No longer locked to species. + - rscadd: + "Crossports Adjust Light Flicker, which allows you to adjust your: Duration + of light flicker, color of light flicker, and light break chance." + - rscadd: Flashlights will now flicker when shadekin phase in. + - bugfix: + Flashlights no longer leave a lingering overlay when the user is eaten + by a shadekin + - qol: + "BESK, OESK, and RESK generate energy quicker. Note: D = Darkness gain/loss + L = Light gain/loss: (BESK: 0.5both->0.75both) (OESK:-0.5L, 0.5D -> -0.25L, + 0.75D) (RESK: -1D -> -0.5D)" + - bugfix: Fixes mobs dying from no-atmos + - bugfix: 8 year bug that causes ability master to disappear upon aghost/relog 2025-07-11: CHOMPStation2StaffMirrorBot: - - bugfix: Set Voice verb uses correct list of voices - - bugfix: Spyndrome symptom can be found again + - bugfix: Set Voice verb uses correct list of voices + - bugfix: Spyndrome symptom can be found again Diana: - - bugfix: Xenochimera component can be applied midround - - bugfix: Grippers can insert items into protolathes + - bugfix: Xenochimera component can be applied midround + - bugfix: Grippers can insert items into protolathes Diana, Kash: - - rscadd: Shadekin light toggle now has a TGUI. - - bugfix: Borg grippers don't delete items - - bugfix: A lot of borg gripper exploits/bugs fixed - - qol: Borgs can reinforce girders at a speed of 1.5 seconds instead of the normal - 4 - - code_imp: Two hours spent to optimize shadekin phase code and save an average - of ~4 ms of CPU time per phase in extreme conditions! + - rscadd: Shadekin light toggle now has a TGUI. + - bugfix: Borg grippers don't delete items + - bugfix: A lot of borg gripper exploits/bugs fixed + - qol: + Borgs can reinforce girders at a speed of 1.5 seconds instead of the normal + 4 + - code_imp: + Two hours spent to optimize shadekin phase code and save an average + of ~4 ms of CPU time per phase in extreme conditions! 2025-07-12: CHOMPStation2StaffMirrorBot: - - code_imp: improve tg chat performance - - bugfix: removed 2 pixels on the veymed female torso sprite to make it actually - fit into any clothes at all that aren't skirts. - - qol: Replaced the funky alt-click turf examine menu with a separate TGUI window - called the Lootpanel + - code_imp: improve tg chat performance + - bugfix: + removed 2 pixels on the veymed female torso sprite to make it actually + fit into any clothes at all that aren't skirts. + - qol: + Replaced the funky alt-click turf examine menu with a separate TGUI window + called the Lootpanel 2025-07-13: FluffMedic: - - bugfix: sif hivebot bosses regained delay for their spinny attack + - bugfix: sif hivebot bosses regained delay for their spinny attack 2025-07-14: CHOMPStation2StaffMirrorBot: - - bugfix: Alt click menu now lets you middle click - - code_imp: font awesome update - - bugfix: bellymode absorb messages not being editable - - qol: reduces the chance of the chat resizing badly - - admin: entity narrate works again - - admin: tickets can be answered from discord - - bugfix: Proteans can no longer get stuck in a death loop because their posibrain - fell out. + - bugfix: Alt click menu now lets you middle click + - code_imp: font awesome update + - bugfix: bellymode absorb messages not being editable + - qol: reduces the chance of the chat resizing badly + - admin: entity narrate works again + - admin: tickets can be answered from discord + - bugfix: + Proteans can no longer get stuck in a death loop because their posibrain + fell out. Diana: - - bugfix: Changeling stings fixed, can be used multiple times again. - - bugfix: Transformation sting works properly now - - bugfix: Extraction sting works properly now - - bugfix: Whitelisted items can be selected if you're the shape of that species - if not that species exactly. - - bugfix: Normal labcoats become teshari sprites when worn by a teshari + - bugfix: Changeling stings fixed, can be used multiple times again. + - bugfix: Transformation sting works properly now + - bugfix: Extraction sting works properly now + - bugfix: + Whitelisted items can be selected if you're the shape of that species + if not that species exactly. + - bugfix: Normal labcoats become teshari sprites when worn by a teshari 2025-07-15: CHOMPStation2StaffMirrorBot: - - bugfix: a server crash on high deflect mobs + - bugfix: a server crash on high deflect mobs FluffMedic: - - rscadd: New environmental hazard to replace lava and zappy clouds, 4 new mobs - for tyr, and - - balance: Eclipse cryo top has been reworked + - rscadd: + New environmental hazard to replace lava and zappy clouds, 4 new mobs + for tyr, and + - balance: Eclipse cryo top has been reworked Guti: - - maptweak: Added the maintenance recycler and vendor all around Southern Cross + - maptweak: Added the maintenance recycler and vendor all around Southern Cross TheGreatKitsune: - - bugfix: fixed the admin size gun + - bugfix: fixed the admin size gun 2025-07-16: CHOMPStation2StaffMirrorBot: - - qol: active belly settings tabs are now static and no longer scroll out of view - - rscadd: Hanner no longer get outed by medical scanners. - - bugfix: Removed copying of bloodtype from vanity TF procs, as if the user actually - has blood it will cause organ failure. - - bugfix: Added secondary ears to copy form ability. - - bugfix: fixed the recycler deciding plebeians weren't allowed to use it after - someone tried to buy an access locked item. + - qol: active belly settings tabs are now static and no longer scroll out of view + - rscadd: Hanner no longer get outed by medical scanners. + - bugfix: + Removed copying of bloodtype from vanity TF procs, as if the user actually + has blood it will cause organ failure. + - bugfix: Added secondary ears to copy form ability. + - bugfix: + fixed the recycler deciding plebeians weren't allowed to use it after + someone tried to buy an access locked item. 2025-07-21: CHOMPStation2StaffMirrorBot: - - qol: default browser background follows light / dark mode - - rscadd: maplint for bad frequencies - - balance: rng of trashpiles altered - - code_imp: trash piles and loot piles now use a unified looting element for handling - drops and rarity. Not limited to just loot piles. - - rscadd: Adds three more admin duckies. - - rscadd: new traits that increase unarmed damage. Traits have been added that combine - with respective tiers of Hardy, to simulate high strength for species that should - be inhumanly strong - - bugfix: simplemobs should now take extra damage from hulk/knuckles - - code_imp: tgui dependency update - - qol: moves find ghost pod, vorespawn and some other join options from tgui list - to a tgui datum - - rscadd: additional ghost spawn options (2 slots), requires multiple /obj/effect/landmark/start/ghost_roles - to be mapped in - - maptweak: Replaced telecomms machines in the facility redgate map with props that - look like them instead. + - qol: default browser background follows light / dark mode + - rscadd: maplint for bad frequencies + - balance: rng of trashpiles altered + - code_imp: + trash piles and loot piles now use a unified looting element for handling + drops and rarity. Not limited to just loot piles. + - rscadd: Adds three more admin duckies. + - rscadd: + new traits that increase unarmed damage. Traits have been added that combine + with respective tiers of Hardy, to simulate high strength for species that should + be inhumanly strong + - bugfix: simplemobs should now take extra damage from hulk/knuckles + - code_imp: tgui dependency update + - qol: + moves find ghost pod, vorespawn and some other join options from tgui list + to a tgui datum + - rscadd: + additional ghost spawn options (2 slots), requires multiple /obj/effect/landmark/start/ghost_roles + to be mapped in + - maptweak: + Replaced telecomms machines in the facility redgate map with props that + look like them instead. Diana: - - qol: Proteans are less squishy to EMPs - - qol: Veymed limbs are less squishy to EMPs. + - qol: Proteans are less squishy to EMPs + - qol: Veymed limbs are less squishy to EMPs. UniquaSa: - - rscadd: Added new maintenance preds mobs - - maptweak: Added some Maint Pred Spawns in deck 0 + - rscadd: Added new maintenance preds mobs + - maptweak: Added some Maint Pred Spawns in deck 0 diff --git a/html/shock.js b/html/shock.js index 68ad8b61a4..4afce1a554 100644 --- a/html/shock.js +++ b/html/shock.js @@ -4,16 +4,17 @@ let lastCall; const reactRoot = document.getElementById("react-root"); if (reactRoot) { - reactRoot.innerHTML = "

You shouldn't see this window, update your skin.

"; + reactRoot.innerHTML = + "

You shouldn't see this window, update your skin.

"; } Byond.subscribeTo("estop", function () { if (webSocket) { webSocket.close(); } else { - Byond.sendMessage("disconnected"); - } -}) + Byond.sendMessage("disconnected"); + } +}); Byond.subscribeTo("connect", function (data) { if (webSocket) { @@ -30,9 +31,9 @@ Byond.subscribeTo("connect", function (data) { webSocket.onerror = (ev) => { Byond.sendMessage("error", ev); }; - webSocket.onclose = (ev) => { - Byond.sendMessage("disconnected"); - } + webSocket.onclose = (ev) => { + Byond.sendMessage("disconnected"); + }; webSocket.onmessage = (ev) => { Byond.sendMessage("incomingMessage", { data: ev.data, lastCall }); }; @@ -63,17 +64,17 @@ Byond.subscribeTo("shock", function (data) { lastCall = "operate"; webSocket.sendJson({ - "cmd": "operate", - "value": { - "intensity": data.intensity, // 1 - 100 - int - "duration": data.duration, // 0.1 - 15 - float - "shocker_option": "all", // all, random - "action": "shock", // shock, vibrate, beep, end - "shocker_ids": data.shocker_ids, // [] - List of shocker ids - "device_ids": [], // [] - list of pishock client ids, if one of these is provided it will activate all shockers associated with it - "warning": data.warning, // true, false - will send a vibrate with the same intensity and duration - "held": false, // true, false - for continuous commands + cmd: "operate", + value: { + intensity: data.intensity, // 1 - 100 - int + duration: data.duration, // 0.1 - 15 - float + shocker_option: "all", // all, random + action: "shock", // shock, vibrate, beep, end + shocker_ids: data.shocker_ids, // [] - List of shocker ids + device_ids: [], // [] - list of pishock client ids, if one of these is provided it will activate all shockers associated with it + warning: data.warning, // true, false - will send a vibrate with the same intensity and duration + held: false, // true, false - for continuous commands }, - "auth_key": authKey, + auth_key: authKey, }); }); diff --git a/html/statbrowser.css b/html/statbrowser.css index d3084d53cb..c5fcdc3140 100644 --- a/html/statbrowser.css +++ b/html/statbrowser.css @@ -255,52 +255,52 @@ body.dark { /* required for alt click menu */ .link { - display: inline; - background: none; - border: none; - padding: 7px 14px; - color: black; - text-decoration: none; - cursor: pointer; - font-size: 13px; - margin: 2px 2px; + display: inline; + background: none; + border: none; + padding: 7px 14px; + color: black; + text-decoration: none; + cursor: pointer; + font-size: 13px; + margin: 2px 2px; } .linkelem { - display: inline; - background: none; - border: none; - padding: 0px 14px; - color: black; - text-decoration: none; - cursor: pointer; - font-size: 13px; - margin: 2px 2px; + display: inline; + background: none; + border: none; + padding: 0px 14px; + color: black; + text-decoration: none; + cursor: pointer; + font-size: 13px; + margin: 2px 2px; } .dark .link { - color: #abc6ec; + color: #abc6ec; } .dark .linkelem { - color: #abc6ec; + color: #abc6ec; } .link:hover { - text-decoration: underline; + text-decoration: underline; } .linkelem:hover { - text-decoration: underline; + text-decoration: underline; } -.spoiler{ - background-color: gray; - color: transparent; - user-select: none; +.spoiler { + background-color: gray; + color: transparent; + user-select: none; } -.spoiler:hover{ - background-color: inherit; - color: inherit; +.spoiler:hover { + background-color: inherit; + color: inherit; } diff --git a/html/statbrowser.html b/html/statbrowser.html index ffd7425bd2..b1f17b826b 100644 --- a/html/statbrowser.html +++ b/html/statbrowser.html @@ -1,5 +1,5 @@
- -
-
+ +
+
diff --git a/html/statbrowser.js b/html/statbrowser.js index 5ce7ace833..d339809a1e 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -1,17 +1,17 @@ // Polyfills and compatibility ------------------------------------------------ var decoder = decodeURIComponent || unescape; if (!Array.prototype.includes) { - Array.prototype.includes = function (thing) { - for (var i = 0; i < this.length; i++) { - if (this[i] == thing) return true; - } - return false; - }; + Array.prototype.includes = function (thing) { + for (var i = 0; i < this.length; i++) { + if (this[i] == thing) return true; + } + return false; + }; } if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); - }; + String.prototype.trim = function () { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); + }; } // Status panel implementation ------------------------------------------------ @@ -41,1055 +41,1055 @@ var split_admin_tabs = false; // to ensure that when we relinquish our focus, we don't do it after the result of // a command has already taken focus for itself. function run_after_focus(callback) { - setTimeout(callback, 0); + setTimeout(callback, 0); } function createStatusTab(name) { - if (name.indexOf(".") != -1) { - var splitName = name.split("."); - if (split_admin_tabs && splitName[0] === "Admin") name = splitName[1]; - else name = splitName[0]; - } - if (document.getElementById(name) || name.trim() == "") { - return; - } - if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { - return; - } - var button = document.createElement("DIV"); - button.onclick = function () { - tab_change(name); - this.blur(); - statcontentdiv.focus(); - }; - button.id = name; - button.textContent = name; - button.className = "button"; - //ORDERING ALPHABETICALLY - button.style.order = name.charCodeAt(0); - if (name == "Status" || name == "MC") { - button.style.order = name == "Status" ? 1 : 2; - } - if (name == "Tickets") { - button.style.order = 3; - } - //END ORDERING - menu.appendChild(button); - SendTabToByond(name); + if (name.indexOf(".") != -1) { + var splitName = name.split("."); + if (split_admin_tabs && splitName[0] === "Admin") name = splitName[1]; + else name = splitName[0]; + } + if (document.getElementById(name) || name.trim() == "") { + return; + } + if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { + return; + } + var button = document.createElement("DIV"); + button.onclick = function () { + tab_change(name); + this.blur(); + statcontentdiv.focus(); + }; + button.id = name; + button.textContent = name; + button.className = "button"; + //ORDERING ALPHABETICALLY + button.style.order = name.charCodeAt(0); + if (name == "Status" || name == "MC") { + button.style.order = name == "Status" ? 1 : 2; + } + if (name == "Tickets") { + button.style.order = 3; + } + //END ORDERING + menu.appendChild(button); + SendTabToByond(name); } function removeStatusTab(name) { - if (!document.getElementById(name) || permanent_tabs.includes(name)) { - return; - } - for (var i = verb_tabs.length - 1; i >= 0; --i) { - if (verb_tabs[i] == name) { - verb_tabs.splice(i, 1); - } - } - if (current_tab == name) { - tab_change("Status"); - } - menu.removeChild(document.getElementById(name)); - TakeTabFromByond(name); + if (!document.getElementById(name) || permanent_tabs.includes(name)) { + return; + } + for (var i = verb_tabs.length - 1; i >= 0; --i) { + if (verb_tabs[i] == name) { + verb_tabs.splice(i, 1); + } + } + if (current_tab == name) { + tab_change("Status"); + } + menu.removeChild(document.getElementById(name)); + TakeTabFromByond(name); } function sortVerbs() { - verbs.sort(function (a, b) { - var selector = a[0] == b[0] ? 1 : 0; - if (a[selector].toUpperCase() < b[selector].toUpperCase()) { - return 1; - } else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { - return -1; - } - return 0; - }); + verbs.sort(function (a, b) { + var selector = a[0] == b[0] ? 1 : 0; + if (a[selector].toUpperCase() < b[selector].toUpperCase()) { + return 1; + } else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { + return -1; + } + return 0; + }); } function addPermanentTab(name) { - if (!permanent_tabs.includes(name)) { - permanent_tabs.push(name); - } - createStatusTab(name); + if (!permanent_tabs.includes(name)) { + permanent_tabs.push(name); + } + createStatusTab(name); } function removePermanentTab(name) { - for (var i = permanent_tabs.length - 1; i >= 0; --i) { - if (permanent_tabs[i] == name) { - permanent_tabs.splice(i, 1); - } - } - removeStatusTab(name); + for (var i = permanent_tabs.length - 1; i >= 0; --i) { + if (permanent_tabs[i] == name) { + permanent_tabs.splice(i, 1); + } + } + removeStatusTab(name); } function checkStatusTab() { - for (var i = 0; i < menu.children.length; i++) { - if ( - !verb_tabs.includes(menu.children[i].id) && - !permanent_tabs.includes(menu.children[i].id) - ) { - menu.removeChild(menu.children[i]); - } - } + for (var i = 0; i < menu.children.length; i++) { + if ( + !verb_tabs.includes(menu.children[i].id) && + !permanent_tabs.includes(menu.children[i].id) + ) { + menu.removeChild(menu.children[i]); + } + } } function remove_verb(v) { - var verb_to_remove = v; // to_remove = [verb:category, verb:name] - for (var i = verbs.length - 1; i >= 0; i--) { - var part_to_remove = verbs[i]; - if (part_to_remove[1] == verb_to_remove[1]) { - verbs.splice(i, 1); - } - } + var verb_to_remove = v; // to_remove = [verb:category, verb:name] + for (var i = verbs.length - 1; i >= 0; i--) { + var part_to_remove = verbs[i]; + if (part_to_remove[1] == verb_to_remove[1]) { + verbs.splice(i, 1); + } + } } function check_verbs() { - for (var v = verb_tabs.length - 1; v >= 0; v--) { - verbs_cat_check(verb_tabs[v]); - } + for (var v = verb_tabs.length - 1; v >= 0; v--) { + verbs_cat_check(verb_tabs[v]); + } } function verbs_cat_check(cat) { - var tabCat = cat; - if (cat.indexOf(".") != -1) { - var splitName = cat.split("."); - if (split_admin_tabs && splitName[0] === "Admin") tabCat = splitName[1]; - else tabCat = splitName[0]; - } - var verbs_in_cat = 0; - var verbcat = ""; - if (!verb_tabs.includes(tabCat)) { - removeStatusTab(tabCat); - return; - } - for (var v = 0; v < verbs.length; v++) { - var part = verbs[v]; - verbcat = part[0]; - if (verbcat.indexOf(".") != -1) { - var splitName = verbcat.split("."); - if (split_admin_tabs && splitName[0] === "Admin") verbcat = splitName[1]; - else verbcat = splitName[0]; - } - if (verbcat != tabCat || verbcat.trim() == "") { - continue; - } else { - verbs_in_cat = 1; - break; // we only need one - } - } - if (verbs_in_cat != 1) { - removeStatusTab(tabCat); - if (current_tab == tabCat) tab_change("Status"); - } + var tabCat = cat; + if (cat.indexOf(".") != -1) { + var splitName = cat.split("."); + if (split_admin_tabs && splitName[0] === "Admin") tabCat = splitName[1]; + else tabCat = splitName[0]; + } + var verbs_in_cat = 0; + var verbcat = ""; + if (!verb_tabs.includes(tabCat)) { + removeStatusTab(tabCat); + return; + } + for (var v = 0; v < verbs.length; v++) { + var part = verbs[v]; + verbcat = part[0]; + if (verbcat.indexOf(".") != -1) { + var splitName = verbcat.split("."); + if (split_admin_tabs && splitName[0] === "Admin") verbcat = splitName[1]; + else verbcat = splitName[0]; + } + if (verbcat != tabCat || verbcat.trim() == "") { + continue; + } else { + verbs_in_cat = 1; + break; // we only need one + } + } + if (verbs_in_cat != 1) { + removeStatusTab(tabCat); + if (current_tab == tabCat) tab_change("Status"); + } } function findVerbindex(name, verblist) { - for (var i = 0; i < verblist.length; i++) { - var part = verblist[i]; - if (part[1] == name) return i; - } + for (var i = 0; i < verblist.length; i++) { + var part = verblist[i]; + if (part[1] == name) return i; + } } function wipe_verbs() { - verbs = [["", ""]]; - verb_tabs = []; - checkStatusTab(); // remove all empty verb tabs + verbs = [["", ""]]; + verb_tabs = []; + checkStatusTab(); // remove all empty verb tabs } function update_verbs() { - wipe_verbs(); - Byond.sendMessage("Update-Verbs"); + wipe_verbs(); + Byond.sendMessage("Update-Verbs"); } function SendTabsToByond() { - var tabstosend = []; - tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); - for (var i = 0; i < tabstosend.length; i++) { - SendTabToByond(tabstosend[i]); - } + var tabstosend = []; + tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); + for (var i = 0; i < tabstosend.length; i++) { + SendTabToByond(tabstosend[i]); + } } function SendTabToByond(tab) { - Byond.sendMessage("Send-Tabs", { tab: tab }); + Byond.sendMessage("Send-Tabs", { tab: tab }); } //Byond can't have this tab anymore since we're removing it function TakeTabFromByond(tab) { - Byond.sendMessage("Remove-Tabs", { tab: tab }); + Byond.sendMessage("Remove-Tabs", { tab: tab }); } function spell_cat_check(cat) { - var spells_in_cat = 0; - var spellcat = ""; - for (var s = 0; s < spells.length; s++) { - var spell = spells[s]; - spellcat = spell[0]; - if (spellcat == cat) { - spells_in_cat++; - } - } - if (spells_in_cat < 1) { - removeStatusTab(cat); - } + var spells_in_cat = 0; + var spellcat = ""; + for (var s = 0; s < spells.length; s++) { + var spell = spells[s]; + spellcat = spell[0]; + if (spellcat == cat) { + spells_in_cat++; + } + } + if (spells_in_cat < 1) { + removeStatusTab(cat); + } } function tab_change(tab) { - if (tab == current_tab) return; - if (document.getElementById(current_tab)) - document.getElementById(current_tab).className = "button"; // disable active on last button - current_tab = tab; - set_byond_tab(tab); - if (document.getElementById(tab)) - document.getElementById(tab).className = "button active"; // make current button active - var spell_tabs_thingy = spell_tabs.includes(tab); - var verb_tabs_thingy = verb_tabs.includes(tab); - if (tab == "Status") { - draw_status(); - } else if (tab == "MC") { - draw_mc(); - } else if (spell_tabs_thingy) { - draw_spells(tab); - } else if (verb_tabs_thingy) { - draw_verbs(tab); - } else if (tab == "Debug Stat Panel") { - draw_debug(); - } else if (tab == "Tickets") { - draw_tickets(); - } else if (misc.has(tab)) { - draw_misc(tab); - } else if (tab == "Examine") { - draw_examine(); - } else if (tab == "SDQL2") { - draw_sdql2(); - } else if (tab == turfname) { - draw_listedturf(); - } else { - statcontentdiv.textContext = "Loading..."; - } - Byond.winset(Byond.windowId, { - "is-visible": true, - }); + if (tab == current_tab) return; + if (document.getElementById(current_tab)) + document.getElementById(current_tab).className = "button"; // disable active on last button + current_tab = tab; + set_byond_tab(tab); + if (document.getElementById(tab)) + document.getElementById(tab).className = "button active"; // make current button active + var spell_tabs_thingy = spell_tabs.includes(tab); + var verb_tabs_thingy = verb_tabs.includes(tab); + if (tab == "Status") { + draw_status(); + } else if (tab == "MC") { + draw_mc(); + } else if (spell_tabs_thingy) { + draw_spells(tab); + } else if (verb_tabs_thingy) { + draw_verbs(tab); + } else if (tab == "Debug Stat Panel") { + draw_debug(); + } else if (tab == "Tickets") { + draw_tickets(); + } else if (misc.has(tab)) { + draw_misc(tab); + } else if (tab == "Examine") { + draw_examine(); + } else if (tab == "SDQL2") { + draw_sdql2(); + } else if (tab == turfname) { + draw_listedturf(); + } else { + statcontentdiv.textContext = "Loading..."; + } + Byond.winset(Byond.windowId, { + "is-visible": true, + }); } function set_byond_tab(tab) { - Byond.sendMessage("Set-Tab", { tab: tab }); + Byond.sendMessage("Set-Tab", { tab: tab }); } function draw_examine() { - statcontentdiv.textContent = ""; - var div_content = document.createElement("div"); - for (var i = 0; i < examine.length; i++) { - var parameter = document.createElement("p"); - var textList = examine[i].split("||"); - if (textList.length > 1) { - for (var j = 0; j < textList.length; j++) { - var spoilerText = document.createElement("span"); - if (j % 2) { - spoilerText.className = "spoiler"; - } - spoilerText.innerHTML = textList[j]; - parameter.appendChild(spoilerText); - } - } else { - parameter.innerHTML = examine[i]; - } - div_content.appendChild(parameter); - } - var images = div_content.querySelectorAll("img"); - for (var i = 0; i < images.length; i++) { - images[i].addEventListener("error", iconError); - } - document.getElementById("statcontent").appendChild(div_content); + statcontentdiv.textContent = ""; + var div_content = document.createElement("div"); + for (var i = 0; i < examine.length; i++) { + var parameter = document.createElement("p"); + var textList = examine[i].split("||"); + if (textList.length > 1) { + for (var j = 0; j < textList.length; j++) { + var spoilerText = document.createElement("span"); + if (j % 2) { + spoilerText.className = "spoiler"; + } + spoilerText.innerHTML = textList[j]; + parameter.appendChild(spoilerText); + } + } else { + parameter.innerHTML = examine[i]; + } + div_content.appendChild(parameter); + } + var images = div_content.querySelectorAll("img"); + for (var i = 0; i < images.length; i++) { + images[i].addEventListener("error", iconError); + } + document.getElementById("statcontent").appendChild(div_content); } function draw_debug() { - statcontentdiv.textContent = ""; - var wipeverbstabs = document.createElement("div"); - var link = document.createElement("a"); - link.onclick = function () { - wipe_verbs(); - }; - link.textContent = "Wipe All Verbs"; - wipeverbstabs.appendChild(link); - document.getElementById("statcontent").appendChild(wipeverbstabs); - var wipeUpdateVerbsTabs = document.createElement("div"); - var updateLink = document.createElement("a"); - updateLink.onclick = function () { - update_verbs(); - }; - updateLink.textContent = "Wipe and Update All Verbs"; - wipeUpdateVerbsTabs.appendChild(updateLink); - document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs); - var text = document.createElement("div"); - text.textContent = "Verb Tabs:"; - document.getElementById("statcontent").appendChild(text); - var table1 = document.createElement("table"); - for (var i = 0; i < verb_tabs.length; i++) { - var part = verb_tabs[i]; - // Hide subgroups except admin subgroups if they are split - if (verb_tabs[i].lastIndexOf(".") != -1) { - var splitName = verb_tabs[i].split("."); - if (split_admin_tabs && splitName[0] === "Admin") part = splitName[1]; - else continue; - } - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part; - var a = document.createElement("a"); - a.onclick = (function (part) { - return function () { - removeStatusTab(part); - }; - })(part); - a.textContent = " Delete Tab " + part; - td1.appendChild(a); - tr.appendChild(td1); - table1.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table1); - var header2 = document.createElement("div"); - header2.textContent = "Verbs:"; - document.getElementById("statcontent").appendChild(header2); - var table2 = document.createElement("table"); - for (var v = 0; v < verbs.length; v++) { - var part2 = verbs[v]; - var trr = document.createElement("tr"); - var tdd1 = document.createElement("td"); - tdd1.textContent = part2[0]; - var tdd2 = document.createElement("td"); - tdd2.textContent = part2[1]; - trr.appendChild(tdd1); - trr.appendChild(tdd2); - table2.appendChild(trr); - } - document.getElementById("statcontent").appendChild(table2); - var text3 = document.createElement("div"); - text3.textContent = "Permanent Tabs:"; - document.getElementById("statcontent").appendChild(text3); - var table3 = document.createElement("table"); - for (var i = 0; i < permanent_tabs.length; i++) { - var part3 = permanent_tabs[i]; - var trrr = document.createElement("tr"); - var tddd1 = document.createElement("td"); - tddd1.textContent = part3; - trrr.appendChild(tddd1); - table3.appendChild(trrr); - } - document.getElementById("statcontent").appendChild(table3); + statcontentdiv.textContent = ""; + var wipeverbstabs = document.createElement("div"); + var link = document.createElement("a"); + link.onclick = function () { + wipe_verbs(); + }; + link.textContent = "Wipe All Verbs"; + wipeverbstabs.appendChild(link); + document.getElementById("statcontent").appendChild(wipeverbstabs); + var wipeUpdateVerbsTabs = document.createElement("div"); + var updateLink = document.createElement("a"); + updateLink.onclick = function () { + update_verbs(); + }; + updateLink.textContent = "Wipe and Update All Verbs"; + wipeUpdateVerbsTabs.appendChild(updateLink); + document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs); + var text = document.createElement("div"); + text.textContent = "Verb Tabs:"; + document.getElementById("statcontent").appendChild(text); + var table1 = document.createElement("table"); + for (var i = 0; i < verb_tabs.length; i++) { + var part = verb_tabs[i]; + // Hide subgroups except admin subgroups if they are split + if (verb_tabs[i].lastIndexOf(".") != -1) { + var splitName = verb_tabs[i].split("."); + if (split_admin_tabs && splitName[0] === "Admin") part = splitName[1]; + else continue; + } + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part; + var a = document.createElement("a"); + a.onclick = (function (part) { + return function () { + removeStatusTab(part); + }; + })(part); + a.textContent = " Delete Tab " + part; + td1.appendChild(a); + tr.appendChild(td1); + table1.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table1); + var header2 = document.createElement("div"); + header2.textContent = "Verbs:"; + document.getElementById("statcontent").appendChild(header2); + var table2 = document.createElement("table"); + for (var v = 0; v < verbs.length; v++) { + var part2 = verbs[v]; + var trr = document.createElement("tr"); + var tdd1 = document.createElement("td"); + tdd1.textContent = part2[0]; + var tdd2 = document.createElement("td"); + tdd2.textContent = part2[1]; + trr.appendChild(tdd1); + trr.appendChild(tdd2); + table2.appendChild(trr); + } + document.getElementById("statcontent").appendChild(table2); + var text3 = document.createElement("div"); + text3.textContent = "Permanent Tabs:"; + document.getElementById("statcontent").appendChild(text3); + var table3 = document.createElement("table"); + for (var i = 0; i < permanent_tabs.length; i++) { + var part3 = permanent_tabs[i]; + var trrr = document.createElement("tr"); + var tddd1 = document.createElement("td"); + tddd1.textContent = part3; + trrr.appendChild(tddd1); + table3.appendChild(trrr); + } + document.getElementById("statcontent").appendChild(table3); } function draw_status() { - if (!document.getElementById("Status")) { - createStatusTab("Status"); - current_tab = "Status"; - } - statcontentdiv.textContent = ""; - for (var i = 0; i < status_tab_parts.length; i++) { - if (status_tab_parts[i].trim() == "") { - document - .getElementById("statcontent") - .appendChild(document.createElement("br")); - } else { - var div = document.createElement("div"); - div.textContent = status_tab_parts[i]; - div.className = "status-info"; - document.getElementById("statcontent").appendChild(div); - } - } - if (verb_tabs.length == 0 || !verbs) { - Byond.command("Fix-Stat-Panel"); - } + if (!document.getElementById("Status")) { + createStatusTab("Status"); + current_tab = "Status"; + } + statcontentdiv.textContent = ""; + for (var i = 0; i < status_tab_parts.length; i++) { + if (status_tab_parts[i].trim() == "") { + document + .getElementById("statcontent") + .appendChild(document.createElement("br")); + } else { + var div = document.createElement("div"); + div.textContent = status_tab_parts[i]; + div.className = "status-info"; + document.getElementById("statcontent").appendChild(div); + } + } + if (verb_tabs.length == 0 || !verbs) { + Byond.command("Fix-Stat-Panel"); + } } function draw_mc() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < mc_tab_parts.length; i++) { - var part = mc_tab_parts[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href = - "byond://?_src_=vars;admin_token=" + href_token + ";Vars=" + part[2]; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < mc_tab_parts.length; i++) { + var part = mc_tab_parts[i]; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[0]; + var td2 = document.createElement("td"); + if (part[2]) { + var a = document.createElement("a"); + a.href = + "byond://?_src_=vars;admin_token=" + href_token + ";Vars=" + part[2]; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); } function remove_tickets() { - if (tickets) { - tickets = []; - removePermanentTab("Tickets"); - if (current_tab == "Tickets") tab_change("Status"); - } - checkStatusTab(); + if (tickets) { + tickets = []; + removePermanentTab("Tickets"); + if (current_tab == "Tickets") tab_change("Status"); + } + checkStatusTab(); } function remove_sdql2() { - if (sdql2) { - sdql2 = []; - removePermanentTab("SDQL2"); - if (current_tab == "SDQL2") tab_change("Status"); - } - checkStatusTab(); + if (sdql2) { + sdql2 = []; + removePermanentTab("SDQL2"); + if (current_tab == "SDQL2") tab_change("Status"); + } + checkStatusTab(); } function iconError(e) { - setTimeout(function () { - if (current_tab != turfname && current_tab != "Examine") { - return; - } - var node = e.target; - var current_attempts = Number(node.getAttribute("data-attempts")) || 0; - if (current_attempts > imageRetryLimit) { - return; - } - var src = node.src; - node.src = null; - node.src = src + "#" + current_attempts; - node.setAttribute("data-attempts", current_attempts + 1); - }, imageRetryDelay); + setTimeout(function () { + if (current_tab != turfname && current_tab != "Examine") { + return; + } + var node = e.target; + var current_attempts = Number(node.getAttribute("data-attempts")) || 0; + if (current_attempts > imageRetryLimit) { + return; + } + var src = node.src; + node.src = null; + node.src = src + "#" + current_attempts; + node.setAttribute("data-attempts", current_attempts + 1); + }, imageRetryDelay); } function draw_listedturf() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < turfcontents.length; i++) { - var part = turfcontents[i]; - if (storedimages[part[1]] == null && part[2]) { - var img = document.createElement("img"); - img.src = part[2]; - img.id = part[1]; - storedimages[part[1]] = part[2]; - img.onerror = iconError; - table.appendChild(img); - } else { - var img = document.createElement("img"); - img.onerror = iconError; - img.src = storedimages[part[1]]; - img.id = part[1]; - table.appendChild(img); - } - var b = document.createElement("div"); - b.className = "link"; - b.onmousedown = (function (part) { - // The outer function is used to close over a fresh "part" variable, - // rather than every onmousedown getting the "part" of the last entry. - return function (e) { - e.preventDefault(); - var params = { src: part[1] }; - switch (e.button) { - case 1: - params["statpanel_item_click"] = "middle"; - break; - case 2: - params["statpanel_item_click"] = "right"; - break; - default: - params["statpanel_item_click"] = "left"; - } - if (e.shiftKey) { - params["statpanel_item_shiftclick"] = 1; - } - if (e.ctrlKey) { - params["statpanel_item_ctrlclick"] = 1; - } - if (e.altKey) { - params["statpanel_item_altclick"] = 1; - } - Byond.topic(params); - }; - })(part); - b.textContent = part[0]; - table.appendChild(b); - table.appendChild(document.createElement("br")); - } - statcontentdiv.appendChild(table); + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < turfcontents.length; i++) { + var part = turfcontents[i]; + if (storedimages[part[1]] == null && part[2]) { + var img = document.createElement("img"); + img.src = part[2]; + img.id = part[1]; + storedimages[part[1]] = part[2]; + img.onerror = iconError; + table.appendChild(img); + } else { + var img = document.createElement("img"); + img.onerror = iconError; + img.src = storedimages[part[1]]; + img.id = part[1]; + table.appendChild(img); + } + var b = document.createElement("div"); + b.className = "link"; + b.onmousedown = (function (part) { + // The outer function is used to close over a fresh "part" variable, + // rather than every onmousedown getting the "part" of the last entry. + return function (e) { + e.preventDefault(); + var params = { src: part[1] }; + switch (e.button) { + case 1: + params["statpanel_item_click"] = "middle"; + break; + case 2: + params["statpanel_item_click"] = "right"; + break; + default: + params["statpanel_item_click"] = "left"; + } + if (e.shiftKey) { + params["statpanel_item_shiftclick"] = 1; + } + if (e.ctrlKey) { + params["statpanel_item_ctrlclick"] = 1; + } + if (e.altKey) { + params["statpanel_item_altclick"] = 1; + } + Byond.topic(params); + }; + })(part); + b.textContent = part[0]; + table.appendChild(b); + table.appendChild(document.createElement("br")); + } + statcontentdiv.appendChild(table); } function remove_listedturf() { - removePermanentTab(turfname); - checkStatusTab(); - if (current_tab == turfname) { - tab_change("Status"); - } + removePermanentTab(turfname); + checkStatusTab(); + if (current_tab == turfname) { + tab_change("Status"); + } } function remove_mc() { - removePermanentTab("MC"); - if (current_tab == "MC") { - tab_change("Status"); - } + removePermanentTab("MC"); + if (current_tab == "MC") { + tab_change("Status"); + } } function draw_sdql2() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < sdql2.length; i++) { - var part = sdql2[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href = "byond://?src=" + part[2] + ";statpanel_item_click=left"; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < sdql2.length; i++) { + var part = sdql2[i]; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[0]; + var td2 = document.createElement("td"); + if (part[2]) { + var a = document.createElement("a"); + a.href = "byond://?src=" + part[2] + ";statpanel_item_click=left"; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); } function draw_tickets() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - if (!tickets) { - return; - } - for (var i = 0; i < tickets.length; i++) { - var part = tickets[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href = - "byond://?_src_=holder;admin_token=" + - href_token + - ";ahelp=" + - part[2] + - ";ahelp_action=ticket;statpanel_item_click=left;action=ticket"; - a.textContent = part[1]; - td2.appendChild(a); - } else if (part[3]) { - var a = document.createElement("a"); - a.href = "byond://?src=" + part[3] + ";statpanel_item_click=left"; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + if (!tickets) { + return; + } + for (var i = 0; i < tickets.length; i++) { + var part = tickets[i]; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[0]; + var td2 = document.createElement("td"); + if (part[2]) { + var a = document.createElement("a"); + a.href = + "byond://?_src_=holder;admin_token=" + + href_token + + ";ahelp=" + + part[2] + + ";ahelp_action=ticket;statpanel_item_click=left;action=ticket"; + a.textContent = part[1]; + td2.appendChild(a); + } else if (part[3]) { + var a = document.createElement("a"); + a.href = "byond://?src=" + part[3] + ";statpanel_item_click=left"; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); } function draw_misc(tab) { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - table.className = "elemcontainer"; - let data = misc.get(tab); - if (!data) { - return; - } - for (var i = 0; i < data.length; i++) { - var tr = document.createElement("tr"); - var part = data[i]; + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + table.className = "elemcontainer"; + let data = misc.get(tab); + if (!data) { + return; + } + for (var i = 0; i < data.length; i++) { + var tr = document.createElement("tr"); + var part = data[i]; - var td1 = document.createElement("td"); - if (part[0]) { - td1.className = "elem"; - td1.textContent = part[0]; - } + var td1 = document.createElement("td"); + if (part[0]) { + td1.className = "elem"; + td1.textContent = part[0]; + } - var td2 = null; - if (part[1] && storedimages[part[1]] == null && part[2]) { - td2 = document.createElement("td"); - var img = document.createElement("img"); - img.src = part[2]; - img.id = part[1]; - storedimages[part[1]] = part[2]; - td2.appendChild(img); - } else if (part[1]) { - td2 = document.createElement("td"); - var img = document.createElement("img"); - img.src = storedimages[part[1]]; - img.id = part[1]; - td2.appendChild(img); - } - var td3 = null; - var b = document.createElement("div"); - if (part[4]) { - b.className = "linkelem"; - b.onmousedown = (function (part) { - // The outer function is used to close over a fresh "part" variable, - // rather than every onmousedown getting the "part" of the last entry. - return function (e) { - e.preventDefault(); - var params = { src: part[4] }; - switch (e.button) { - case 1: - params["statpanel_item_click"] = "middle"; - break; - case 2: - params["statpanel_item_click"] = "right"; - break; - default: - params["statpanel_item_click"] = "left"; - } - if (e.shiftKey) { - params["statpanel_item_shiftclick"] = 1; - } - if (e.ctrlKey) { - params["statpanel_item_ctrlclick"] = 1; - } - if (e.altKey) { - params["statpanel_item_altclick"] = 1; - } - Byond.topic(params); - }; - })(part); - } - if (part[3]) { - td3 = document.createElement("td"); - b.textContent = part[3]; - td3.appendChild(b); - } - if (!td2 && !td3) { - td1.className = "elem_span3"; - td1.colSpan += 2; - } else if (!td2) { - td1.className = "elem_span2"; - td1.colSpan += 1; - } else if (!td3) { - td2.colSpan += 1; - } - tr.appendChild(td1); - if (td2) { - tr.appendChild(td2); - } - if (td3) { - tr.appendChild(td3); - } - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + var td2 = null; + if (part[1] && storedimages[part[1]] == null && part[2]) { + td2 = document.createElement("td"); + var img = document.createElement("img"); + img.src = part[2]; + img.id = part[1]; + storedimages[part[1]] = part[2]; + td2.appendChild(img); + } else if (part[1]) { + td2 = document.createElement("td"); + var img = document.createElement("img"); + img.src = storedimages[part[1]]; + img.id = part[1]; + td2.appendChild(img); + } + var td3 = null; + var b = document.createElement("div"); + if (part[4]) { + b.className = "linkelem"; + b.onmousedown = (function (part) { + // The outer function is used to close over a fresh "part" variable, + // rather than every onmousedown getting the "part" of the last entry. + return function (e) { + e.preventDefault(); + var params = { src: part[4] }; + switch (e.button) { + case 1: + params["statpanel_item_click"] = "middle"; + break; + case 2: + params["statpanel_item_click"] = "right"; + break; + default: + params["statpanel_item_click"] = "left"; + } + if (e.shiftKey) { + params["statpanel_item_shiftclick"] = 1; + } + if (e.ctrlKey) { + params["statpanel_item_ctrlclick"] = 1; + } + if (e.altKey) { + params["statpanel_item_altclick"] = 1; + } + Byond.topic(params); + }; + })(part); + } + if (part[3]) { + td3 = document.createElement("td"); + b.textContent = part[3]; + td3.appendChild(b); + } + if (!td2 && !td3) { + td1.className = "elem_span3"; + td1.colSpan += 2; + } else if (!td2) { + td1.className = "elem_span2"; + td1.colSpan += 1; + } else if (!td3) { + td2.colSpan += 1; + } + tr.appendChild(td1); + if (td2) { + tr.appendChild(td2); + } + if (td3) { + tr.appendChild(td3); + } + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); } function draw_spells(cat) { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < spells.length; i++) { - var part = spells[i]; - if (part[0] != cat) continue; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[1]; - var td2 = document.createElement("td"); - if (part[3]) { - var a = document.createElement("a"); - a.href = "byond://?src=" + part[3] + ";statpanel_item_click=left"; - a.textContent = part[2]; - td2.appendChild(a); - } else { - td2.textContent = part[2]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ""; + var table = document.createElement("table"); + for (var i = 0; i < spells.length; i++) { + var part = spells[i]; + if (part[0] != cat) continue; + var tr = document.createElement("tr"); + var td1 = document.createElement("td"); + td1.textContent = part[1]; + var td2 = document.createElement("td"); + if (part[3]) { + var a = document.createElement("a"); + a.href = "byond://?src=" + part[3] + ";statpanel_item_click=left"; + a.textContent = part[2]; + td2.appendChild(a); + } else { + td2.textContent = part[2]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById("statcontent").appendChild(table); } function make_verb_onclick(command) { - return function () { - run_after_focus(function () { - Byond.command(command); - }); - }; + return function () { + run_after_focus(function () { + Byond.command(command); + }); + }; } function draw_verbs(cat) { - statcontentdiv.textContent = ""; - var table = document.createElement("div"); - var additions = {}; // additional sub-categories to be rendered - table.className = "grid-container"; - sortVerbs(); - if (split_admin_tabs && cat.lastIndexOf(".") != -1) { - var splitName = cat.split("."); - if (splitName[0] === "Admin") cat = splitName[1]; - } - verbs.reverse(); // sort verbs backwards before we draw - for (var i = 0; i < verbs.length; ++i) { - var part = verbs[i]; - var name = part[0]; - if (split_admin_tabs && name.lastIndexOf(".") != -1) { - var splitName = name.split("."); - if (splitName[0] === "Admin") name = splitName[1]; - } - var command = part[1]; - var desc = part[2]; + statcontentdiv.textContent = ""; + var table = document.createElement("div"); + var additions = {}; // additional sub-categories to be rendered + table.className = "grid-container"; + sortVerbs(); + if (split_admin_tabs && cat.lastIndexOf(".") != -1) { + var splitName = cat.split("."); + if (splitName[0] === "Admin") cat = splitName[1]; + } + verbs.reverse(); // sort verbs backwards before we draw + for (var i = 0; i < verbs.length; ++i) { + var part = verbs[i]; + var name = part[0]; + if (split_admin_tabs && name.lastIndexOf(".") != -1) { + var splitName = name.split("."); + if (splitName[0] === "Admin") name = splitName[1]; + } + var command = part[1]; + var desc = part[2]; - if ( - command && - name.lastIndexOf(cat, 0) != -1 && - (name.length == cat.length || name.charAt(cat.length) == ".") - ) { - var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null; - if (subCat && !additions[subCat]) { - var newTable = document.createElement("div"); - newTable.className = "grid-container"; - additions[subCat] = newTable; - } + if ( + command && + name.lastIndexOf(cat, 0) != -1 && + (name.length == cat.length || name.charAt(cat.length) == ".") + ) { + var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null; + if (subCat && !additions[subCat]) { + var newTable = document.createElement("div"); + newTable.className = "grid-container"; + additions[subCat] = newTable; + } - var a = document.createElement("a"); - a.href = "#"; - a.onclick = make_verb_onclick(command.replace(/\s/g, "-")); - a.className = "grid-item"; - a.title = desc || "No description"; - var t = document.createElement("span"); - t.textContent = command; - t.className = "grid-item-text"; - a.appendChild(t); - (subCat ? additions[subCat] : table).appendChild(a); - } - } + var a = document.createElement("a"); + a.href = "#"; + a.onclick = make_verb_onclick(command.replace(/\s/g, "-")); + a.className = "grid-item"; + a.title = desc || "No description"; + var t = document.createElement("span"); + t.textContent = command; + t.className = "grid-item-text"; + a.appendChild(t); + (subCat ? additions[subCat] : table).appendChild(a); + } + } - // Append base table to view - var content = document.getElementById("statcontent"); - content.appendChild(table); + // Append base table to view + var content = document.getElementById("statcontent"); + content.appendChild(table); - // Append additional sub-categories if relevant - for (var cat in additions) { - if (additions.hasOwnProperty(cat)) { - // do addition here - var header = document.createElement("h3"); - header.textContent = cat; - content.appendChild(header); - content.appendChild(additions[cat]); - } - } + // Append additional sub-categories if relevant + for (var cat in additions) { + if (additions.hasOwnProperty(cat)) { + // do addition here + var header = document.createElement("h3"); + header.textContent = cat; + content.appendChild(header); + content.appendChild(additions[cat]); + } + } } function set_theme(which) { - if (which == "light" || which == "vchatlight") { - document.body.className = ""; - document.documentElement.className = "light"; - } else if (which == "dark" || which == "vchatdark") { - document.body.className = "dark"; - document.documentElement.className = "dark"; - } + if (which == "light" || which == "vchatlight") { + document.body.className = ""; + document.documentElement.className = "light"; + } else if (which == "dark" || which == "vchatdark") { + document.body.className = "dark"; + document.documentElement.className = "dark"; + } } function set_font_size(size) { - document.body.style.setProperty("font-size", size); + document.body.style.setProperty("font-size", size); } function set_tabs_style(style) { - if (style == "default") { - menu.classList.add("menu-wrap"); - menu.classList.remove("tabs-classic"); - } else if (style == "classic") { - menu.classList.add("menu-wrap"); - menu.classList.add("tabs-classic"); - } else if (style == "scrollable") { - menu.classList.remove("menu-wrap"); - menu.classList.remove("tabs-classic"); - } + if (style == "default") { + menu.classList.add("menu-wrap"); + menu.classList.remove("tabs-classic"); + } else if (style == "classic") { + menu.classList.add("menu-wrap"); + menu.classList.add("tabs-classic"); + } else if (style == "scrollable") { + menu.classList.remove("menu-wrap"); + menu.classList.remove("tabs-classic"); + } } function restoreFocus() { - run_after_focus(function () { - Byond.winset("map", { - focus: true, - }); - }); + run_after_focus(function () { + Byond.winset("map", { + focus: true, + }); + }); } function getCookie(cname) { - var name = cname + "="; - var ca = document.cookie.split(";"); - for (var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == " ") c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length, c.length)); - } - } - return ""; + var name = cname + "="; + var ca = document.cookie.split(";"); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == " ") c = c.substring(1); + if (c.indexOf(name) === 0) { + return decoder(c.substring(name.length, c.length)); + } + } + return ""; } function add_verb_list(payload) { - var to_add = payload; // list of a list with category and verb inside it - to_add.sort(); // sort what we're adding - for (var i = 0; i < to_add.length; i++) { - var part = to_add[i]; - if (!part[0]) continue; - var category = part[0]; - if (category.indexOf(".") != -1) { - var splitName = category.split("."); - if (split_admin_tabs && splitName[0] === "Admin") category = splitName[1]; - else category = splitName[0]; - } - if (findVerbindex(part[1], verbs)) continue; - if (verb_tabs.includes(category)) { - verbs.push(part); - if (current_tab == category) { - draw_verbs(category); // redraw if we added a verb to the tab we're currently in - } - } else if (category) { - verb_tabs.push(category); - verbs.push(part); - createStatusTab(category); - } - } + var to_add = payload; // list of a list with category and verb inside it + to_add.sort(); // sort what we're adding + for (var i = 0; i < to_add.length; i++) { + var part = to_add[i]; + if (!part[0]) continue; + var category = part[0]; + if (category.indexOf(".") != -1) { + var splitName = category.split("."); + if (split_admin_tabs && splitName[0] === "Admin") category = splitName[1]; + else category = splitName[0]; + } + if (findVerbindex(part[1], verbs)) continue; + if (verb_tabs.includes(category)) { + verbs.push(part); + if (current_tab == category) { + draw_verbs(category); // redraw if we added a verb to the tab we're currently in + } + } else if (category) { + verb_tabs.push(category); + verbs.push(part); + createStatusTab(category); + } + } } function init_spells() { - var cat = ""; - for (var i = 0; i < spell_tabs.length; i++) { - cat = spell_tabs[i]; - if (cat.length > 0) { - verb_tabs.push(cat); - createStatusTab(cat); - } - } + var cat = ""; + for (var i = 0; i < spell_tabs.length; i++) { + cat = spell_tabs[i]; + if (cat.length > 0) { + verb_tabs.push(cat); + createStatusTab(cat); + } + } } document.addEventListener("mouseup", restoreFocus); document.addEventListener("keyup", restoreFocus); if (!current_tab) { - addPermanentTab("Status"); - tab_change("Status"); + addPermanentTab("Status"); + tab_change("Status"); } window.onload = function () { - Byond.sendMessage("Update-Verbs"); + Byond.sendMessage("Update-Verbs"); }; Byond.subscribeTo("update_spells", function (payload) { - spell_tabs = payload.spell_tabs; - var do_update = false; - if (spell_tabs.includes(current_tab)) { - do_update = true; - } - init_spells(); - if (payload.actions) { - spells = payload.actions; - if (do_update) { - draw_spells(current_tab); - } - } else { - remove_spells(); - } + spell_tabs = payload.spell_tabs; + var do_update = false; + if (spell_tabs.includes(current_tab)) { + do_update = true; + } + init_spells(); + if (payload.actions) { + spells = payload.actions; + if (do_update) { + draw_spells(current_tab); + } + } else { + remove_spells(); + } }); Byond.subscribeTo("remove_verb_list", function (v) { - var to_remove = v; - for (var i = 0; i < to_remove.length; i++) { - remove_verb(to_remove[i]); - } - check_verbs(); - sortVerbs(); - if (verb_tabs.includes(current_tab)) draw_verbs(current_tab); + var to_remove = v; + for (var i = 0; i < to_remove.length; i++) { + remove_verb(to_remove[i]); + } + check_verbs(); + sortVerbs(); + if (verb_tabs.includes(current_tab)) draw_verbs(current_tab); }); // passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list // example (IC, Say) Byond.subscribeTo("init_verbs", function (payload) { - wipe_verbs(); // remove all verb categories so we can replace them - checkStatusTab(); // remove all status tabs - verb_tabs = payload.panel_tabs; - verb_tabs.sort(); // sort it - var do_update = false; - var cat = ""; - for (var i = 0; i < verb_tabs.length; i++) { - cat = verb_tabs[i]; - createStatusTab(cat); // create a category if the verb doesn't exist yet - } - if (verb_tabs.includes(current_tab)) { - do_update = true; - } - if (payload.verblist) { - add_verb_list(payload.verblist); - sortVerbs(); // sort them - if (do_update) { - draw_verbs(current_tab); - } - } - SendTabsToByond(); + wipe_verbs(); // remove all verb categories so we can replace them + checkStatusTab(); // remove all status tabs + verb_tabs = payload.panel_tabs; + verb_tabs.sort(); // sort it + var do_update = false; + var cat = ""; + for (var i = 0; i < verb_tabs.length; i++) { + cat = verb_tabs[i]; + createStatusTab(cat); // create a category if the verb doesn't exist yet + } + if (verb_tabs.includes(current_tab)) { + do_update = true; + } + if (payload.verblist) { + add_verb_list(payload.verblist); + sortVerbs(); // sort them + if (do_update) { + draw_verbs(current_tab); + } + } + SendTabsToByond(); }); Byond.subscribeTo("update_stat", function (payload) { - status_tab_parts = [payload.ping_str]; - var parsed = payload.global_data; + status_tab_parts = [payload.ping_str]; + var parsed = payload.global_data; - for (var i = 0; i < parsed.length; i++) - if (parsed[i] != null) status_tab_parts.push(parsed[i]); + for (var i = 0; i < parsed.length; i++) + if (parsed[i] != null) status_tab_parts.push(parsed[i]); - parsed = payload.other_str; + parsed = payload.other_str; - for (var i = 0; i < parsed.length; i++) - if (parsed[i] != null) status_tab_parts.push(parsed[i]); + for (var i = 0; i < parsed.length; i++) + if (parsed[i] != null) status_tab_parts.push(parsed[i]); - if (current_tab == "Status") { - draw_status(); - } else if (current_tab == "Debug Stat Panel") { - draw_debug(); - } + if (current_tab == "Status") { + draw_status(); + } else if (current_tab == "Debug Stat Panel") { + draw_debug(); + } }); Byond.subscribeTo("update_mc", function (payload) { - mc_tab_parts = payload.mc_data; - mc_tab_parts.splice(0, 0, ["Location:", payload.coord_entry]); + mc_tab_parts = payload.mc_data; + mc_tab_parts.splice(0, 0, ["Location:", payload.coord_entry]); - if (!verb_tabs.includes("MC")) { - verb_tabs.push("MC"); - } + if (!verb_tabs.includes("MC")) { + verb_tabs.push("MC"); + } - createStatusTab("MC"); + createStatusTab("MC"); - if (current_tab == "MC") { - draw_mc(); - } + if (current_tab == "MC") { + draw_mc(); + } }); Byond.subscribeTo("remove_spells", function () { - for (var s = 0; s < spell_tabs.length; s++) { - removeStatusTab(spell_tabs[s]); - } + for (var s = 0; s < spell_tabs.length; s++) { + removeStatusTab(spell_tabs[s]); + } }); Byond.subscribeTo("init_spells", function () { - var cat = ""; - for (var i = 0; i < spell_tabs.length; i++) { - cat = spell_tabs[i]; - if (cat.length > 0) { - verb_tabs.push(cat); - createStatusTab(cat); - } - } + var cat = ""; + for (var i = 0; i < spell_tabs.length; i++) { + cat = spell_tabs[i]; + if (cat.length > 0) { + verb_tabs.push(cat); + createStatusTab(cat); + } + } }); Byond.subscribeTo("check_spells", function () { - for (var v = 0; v < spell_tabs.length; v++) { - spell_cat_check(spell_tabs[v]); - } + for (var v = 0; v < spell_tabs.length; v++) { + spell_cat_check(spell_tabs[v]); + } }); Byond.subscribeTo("create_debug", function () { - if (!document.getElementById("Debug Stat Panel")) { - addPermanentTab("Debug Stat Panel"); - } else { - removePermanentTab("Debug Stat Panel"); - } + if (!document.getElementById("Debug Stat Panel")) { + addPermanentTab("Debug Stat Panel"); + } else { + removePermanentTab("Debug Stat Panel"); + } }); Byond.subscribeTo("create_listedturf", function (TN) { - remove_listedturf(); // remove the last one if we had one - turfname = TN; - addPermanentTab(turfname); - tab_change(turfname); + remove_listedturf(); // remove the last one if we had one + turfname = TN; + addPermanentTab(turfname); + tab_change(turfname); }); Byond.subscribeTo("create_misc", function (TN) { - addPermanentTab(TN); + addPermanentTab(TN); }); Byond.subscribeTo("remove_misc", function (TN) { - removePermanentTab(TN); + removePermanentTab(TN); }); Byond.subscribeTo("remove_admin_tabs", function () { - href_token = null; - remove_mc(); - remove_tickets(); - remove_sdql2(); + href_token = null; + remove_mc(); + remove_tickets(); + remove_sdql2(); }); Byond.subscribeTo("update_listedturf", function (TC) { - turfcontents = TC; - if (current_tab == turfname) { - draw_listedturf(); - } + turfcontents = TC; + if (current_tab == turfname) { + draw_listedturf(); + } }); Byond.subscribeTo("update_misc", function (payload) { - let TN = payload.TN; - let TC = payload.TC; - misc.set(TN, TC); - if (current_tab == TN) { - draw_misc(TN); - } + let TN = payload.TN; + let TC = payload.TC; + misc.set(TN, TC); + if (current_tab == TN) { + draw_misc(TN); + } }); Byond.subscribeTo("update_split_admin_tabs", function (status) { - status = status == true; + status = status == true; - if (split_admin_tabs !== status) { - if (split_admin_tabs === true) { - removeStatusTab("Events"); - removeStatusTab("Fun"); - removeStatusTab("Game"); - } - update_verbs(); - } - split_admin_tabs = status; + if (split_admin_tabs !== status) { + if (split_admin_tabs === true) { + removeStatusTab("Events"); + removeStatusTab("Fun"); + removeStatusTab("Game"); + } + update_verbs(); + } + split_admin_tabs = status; }); Byond.subscribeTo("add_admin_tabs", function (ht) { - href_token = ht; - addPermanentTab("MC"); - addPermanentTab("Tickets"); + href_token = ht; + addPermanentTab("MC"); + addPermanentTab("Tickets"); }); Byond.subscribeTo("add_tickets_tabs", function (ht) { - href_token = ht; - addPermanentTab("Tickets"); + href_token = ht; + addPermanentTab("Tickets"); }); Byond.subscribeTo("update_examine", function (payload) { - examine = payload.EX; - if (examine.length > 0 && !verb_tabs.includes("Examine")) { - verb_tabs.push("Examine"); - addPermanentTab("Examine"); - } - if (current_tab == "Examine") { - draw_examine(); - } - if (payload.UPD) { - tab_change("Examine"); - } + examine = payload.EX; + if (examine.length > 0 && !verb_tabs.includes("Examine")) { + verb_tabs.push("Examine"); + addPermanentTab("Examine"); + } + if (current_tab == "Examine") { + draw_examine(); + } + if (payload.UPD) { + tab_change("Examine"); + } }); Byond.subscribeTo("update_sdql2", function (S) { - sdql2 = S; - if (sdql2.length > 0 && !verb_tabs.includes("SDQL2")) { - verb_tabs.push("SDQL2"); - addPermanentTab("SDQL2"); - } - if (current_tab == "SDQL2") { - draw_sdql2(); - } + sdql2 = S; + if (sdql2.length > 0 && !verb_tabs.includes("SDQL2")) { + verb_tabs.push("SDQL2"); + addPermanentTab("SDQL2"); + } + if (current_tab == "SDQL2") { + draw_sdql2(); + } }); Byond.subscribeTo("update_tickets", function (T) { - tickets = T; - if (!verb_tabs.includes("Tickets")) { - verb_tabs.push("Tickets"); - addPermanentTab("Tickets"); - } - if (current_tab == "Tickets") { - draw_tickets(); - } + tickets = T; + if (!verb_tabs.includes("Tickets")) { + verb_tabs.push("Tickets"); + addPermanentTab("Tickets"); + } + if (current_tab == "Tickets") { + draw_tickets(); + } }); Byond.subscribeTo("remove_listedturf", remove_listedturf); diff --git a/html/typing_indicator.html b/html/typing_indicator.html index 2988edff55..18b69a0016 100644 --- a/html/typing_indicator.html +++ b/html/typing_indicator.html @@ -1,46 +1,48 @@ - + - - - - - - + window.location = + "byond://?commandbar_typing=1&verb=" + + encodeURIComponent(verb) + + "&argument_length=" + + argument_length; + } + setTimeout(getoutput, 2000); + + diff --git a/icons/goonstation/LICENSE.md b/icons/goonstation/LICENSE.md index bb6102702e..19e666c21c 100644 --- a/icons/goonstation/LICENSE.md +++ b/icons/goonstation/LICENSE.md @@ -1,2 +1,2 @@ All files located in this directory and any subdirectories are licensed under the -Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) \ No newline at end of file +Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) diff --git a/icons/mob/animal_vr.dmi b/icons/mob/animal_vr.dmi index 75edbf2629..da182458cc 100644 Binary files a/icons/mob/animal_vr.dmi and b/icons/mob/animal_vr.dmi differ diff --git a/ingame_manuals/malf_ai.html b/ingame_manuals/malf_ai.html index ff44c57e76..f6bcc56970 100644 --- a/ingame_manuals/malf_ai.html +++ b/ingame_manuals/malf_ai.html @@ -1,22 +1,68 @@ -

Malfunctioning AI guide


+

Malfunctioning AI guide

+
-This guide contains most important OOC information for malfunctioning AIs.
+This guide contains most important OOC information for malfunctioning AIs.
-

Goal


-As malfunctioning AI, your primary goal is to overtake station's systems. To do this, use software "Basic Encryption Hack" on APCs (right click on APC and select Basic Encryption Hack). Please note that hacked APCs have distinctive blue error screen, that tends to attract attention. Remember that malfunctioning AI is antagonist, so read server rules for antagonists. While hacking APCs is your official goal, feel free to create custom goal, as long as it is fun for everyone.
+

Goal

+
+As malfunctioning AI, your primary goal is to overtake station's systems. To do +this, use software "Basic Encryption Hack" on APCs (right click on APC and +select Basic Encryption Hack). Please note that hacked APCs have distinctive +blue error screen, that tends to attract attention. Remember that malfunctioning +AI is antagonist, so read server rules for antagonists. While hacking APCs is +your official goal, feel free to create custom goal, as long as it is fun for +everyone.
-

Hardware


-As malfunctioning AI, you may select one hardware piece to help you. Remember that once you select hardware piece, you cannot select another one, so choose wisely! Hardware may be selected by clicking "Select Hardware" button in Hardware tab. Following is list of possible hardware pieces:
-APU Generator - Auxiliary Power Unit which allows you to operate even without external power. However, running on APU will stop your CPU time generation, and temporarily disable most of your abilities. APU is also somewhat vulnerable to physical damage, and will fail if your core hardware integrity drops below 50%.
-Turrets Focus Enhancer - Removes safeties on installed turrets, boosting their rate of fire, health and enabling nano-regeneration module. This however increases power usage considerably, especially when regenerating damage.
-Secondary Processor Unit - Simple upgrade that increases your CPU time generation by 50%. Useful if you need to speed up your research.
-Secondary Memory Bank - Doubles amount of maximal CPU time you may store. This is useful if you need to use lots of abilities in short amount of time.
-Self-Destruct Explosives - Large blocks of C4 are attached to your physical core. This C4 has 15 second timer, and may be activated by special button that appears in your Hardware tab. This self-destruct will remain active, even if you are destroyed. If timer reaches 0 your core explodes in strong explosion. Obviously, this destroys you, as well as anyone nearby.
+

Hardware

+
+As malfunctioning AI, you may select one hardware piece to help you. Remember +that once you select hardware piece, you cannot select another one, so choose +wisely! Hardware may be selected by clicking "Select Hardware" button in +Hardware tab. Following is list of possible hardware pieces:
+APU Generator - Auxiliary Power Unit which allows you to operate even +without external power. However, running on APU will stop your CPU time +generation, and temporarily disable most of your abilities. APU is also somewhat +vulnerable to physical damage, and will fail if your core hardware integrity +drops below 50%.
+Turrets Focus Enhancer - Removes safeties on installed turrets, boosting +their rate of fire, health and enabling nano-regeneration module. This however +increases power usage considerably, especially when regenerating damage.
+Secondary Processor Unit - Simple upgrade that increases your CPU time +generation by 50%. Useful if you need to speed up your research.
+Secondary Memory Bank - Doubles amount of maximal CPU time you may store. +This is useful if you need to use lots of abilities in short amount of time.
+Self-Destruct Explosives - Large blocks of C4 are attached to your +physical core. This C4 has 15 second timer, and may be activated by special +button that appears in your Hardware tab. This self-destruct will remain active, +even if you are destroyed. If timer reaches 0 your core explodes in strong +explosion. Obviously, this destroys you, as well as anyone nearby.
-

Software


-Software are abilities that have to be unlocked via research menu (Hardware tab). Unlocked abilities appear in Software tab. Sometimes, abilities won't appear in this tab after being researched. This can be fixed by relogging or using "ai-core" command. Abilities are tiered, T1 being the weakest ones, while T4 are strongest ones. To reach higher tier you have to research abilities in lower tier. We currently have 12 abilities, in 3 research trees:
-Networking - Hacking-oriented abilities. T1 ability is Basic Encryption Hack, which allows you to hack more APCs. Higher tiers allow faking centcom messages, and even setting alert level. T4 ability is System Override, that rapidly hacks remaining APCs and gives you access to station self destruct sequence.
-Interdiction - Sabotage-oriented abilities. T1 ability allows you to recall emergency shuttle. Higher level abilities allow you to unlock cyborgs even without access to robotics console, and T4 ability allows you to hack other AIs to slave them under your control.
-Manipulation - Physical-oriented abilities. T1 ability allows you to break few lights, and rarely even APCs. T2 ability allows you to apply upgrade of your choice to camera, or reactivate broken camera. T3 ability allows you to create weak forcefield, that holds air, but won't last for long. And T4 ability allows you to overload machines, detonating them in weak explosion.
-

End


-If you still have some questions, either check the wiki, ask on IRC, or adminhelp and ask your friendly administration staff. +

Software

+
+Software are abilities that have to be unlocked via research menu (Hardware +tab). Unlocked abilities appear in Software tab. +Sometimes, abilities won't appear in this tab after being researched. This + can be fixed by relogging or using "ai-core" command. +Abilities are tiered, T1 being the weakest ones, while T4 are strongest ones. To +reach higher tier you have to research abilities in lower tier. We currently +have 12 abilities, in 3 research trees:
+Networking - Hacking-oriented abilities. T1 ability is Basic Encryption +Hack, which allows you to hack more APCs. Higher tiers allow faking centcom +messages, and even setting alert level. T4 ability is System Override, that +rapidly hacks remaining APCs and gives you access to station self destruct +sequence.
+Interdiction - Sabotage-oriented abilities. T1 ability allows you to +recall emergency shuttle. Higher level abilities allow you to unlock cyborgs +even without access to robotics console, and T4 ability allows you to hack other +AIs to slave them under your control.
+Manipulation - Physical-oriented abilities. T1 ability allows you to +break few lights, and rarely even APCs. T2 ability allows you to apply upgrade +of your choice to camera, or reactivate broken camera. T3 ability allows you to +create weak forcefield, that holds air, but won't last for long. And T4 ability +allows you to overload machines, detonating them in weak explosion.
+

End

+
+If you still have some questions, either check the wiki, ask on IRC, or +adminhelp and ask your friendly administration staff. diff --git a/interface/fonts/fonts.css b/interface/fonts/fonts.css index 8fbec5b88a..c3fc05535d 100644 --- a/interface/fonts/fonts.css +++ b/interface/fonts/fonts.css @@ -3,37 +3,37 @@ */ @font-face { - font-family: 'Grand9K Pixel'; + font-family: "Grand9K Pixel"; src: url(Grand9K_Pixel.ttf); } .font-grand9k_pixel { - font-family: 'Grand9K Pixel'; + font-family: "Grand9K Pixel"; } @font-face { - font-family: 'Pixellari'; + font-family: "Pixellari"; src: url(Pixellari.ttf); } .font-pixellari { - font-family: 'Pixellari'; + font-family: "Pixellari"; } @font-face { - font-family: 'TinyUnicode'; + font-family: "TinyUnicode"; src: url(TinyUnicode.ttf); } .font-tinyunicode { - font-family: 'TinyUnicode'; + font-family: "TinyUnicode"; } @font-face { - font-family: 'VCR OSD Mono'; + font-family: "VCR OSD Mono"; src: url(VCR_OSD_Mono.ttf); } .font-vcr_osd_mono { - font-family: 'VCR OSD Mono'; + font-family: "VCR OSD Mono"; } diff --git a/interface/fonts/fonts.scss b/interface/fonts/fonts.scss deleted file mode 100644 index 8fbec5b88a..0000000000 --- a/interface/fonts/fonts.scss +++ /dev/null @@ -1,39 +0,0 @@ -/** - * All of these fonts are duplicated between interface/fonts and here because SCSS doesn't wanna play nice - */ - -@font-face { - font-family: 'Grand9K Pixel'; - src: url(Grand9K_Pixel.ttf); -} - -.font-grand9k_pixel { - font-family: 'Grand9K Pixel'; -} - -@font-face { - font-family: 'Pixellari'; - src: url(Pixellari.ttf); -} - -.font-pixellari { - font-family: 'Pixellari'; -} - -@font-face { - font-family: 'TinyUnicode'; - src: url(TinyUnicode.ttf); -} - -.font-tinyunicode { - font-family: 'TinyUnicode'; -} - -@font-face { - font-family: 'VCR OSD Mono'; - src: url(VCR_OSD_Mono.ttf); -} - -.font-vcr_osd_mono { - font-family: 'VCR OSD Mono'; -} diff --git a/maps/_templates_and_guidance/Mapping Templates Readme.md b/maps/_templates_and_guidance/Mapping Templates Readme.md index f9fbed268c..13d7c84ab6 100644 --- a/maps/_templates_and_guidance/Mapping Templates Readme.md +++ b/maps/_templates_and_guidance/Mapping Templates Readme.md @@ -4,14 +4,12 @@ The intent of this file is to allow you to more easily be able to follow mapping The following folders will be listed here. If there’s been an update and this readme.md is out of date, let a maintainer on your codebase know. For CHOMPStation, this is a staffdev/maintainer, for VOREStation, this is a maintainer, for Polaris, this is also the maintainer role. - - -* Additional folders TBD. -* Mapping Guides - * This folder exists for newer contributors to physically pull examples from, for example; SMES Wiring.dmm would be for guidance on how to properly wire an SMES. This is not an exhaustive list, but should help the repeated/FAQ questions by allowing one to poke at it in a map editor. -* Public Event Templates - * This folder exists to house templates available to the public. Bear in mind that Event Manager staff will likely not house all event templates publicly for security + future events, but this should be updated once a map is done with or an EM leaves the team and wishes to leave their maps public for future use. -* Public Ship Templates - * This folder exists for SHIP templates that do not normally go into the ships folder (For reference, this ship folder is maps/offmap_vr/om_ships, or overmap/ships). This is for example ships, or for EM-specific, public ships. -* Templates - * This folder is specifically for pre-prepared, ready-to-place templates for things such as drop pods, small maps, etc, things EM-staff will use regularly that are not necessarily related to events. \ No newline at end of file +- Additional folders TBD. +- Mapping Guides + - This folder exists for newer contributors to physically pull examples from, for example; SMES Wiring.dmm would be for guidance on how to properly wire an SMES. This is not an exhaustive list, but should help the repeated/FAQ questions by allowing one to poke at it in a map editor. +- Public Event Templates + - This folder exists to house templates available to the public. Bear in mind that Event Manager staff will likely not house all event templates publicly for security + future events, but this should be updated once a map is done with or an EM leaves the team and wishes to leave their maps public for future use. +- Public Ship Templates + - This folder exists for SHIP templates that do not normally go into the ships folder (For reference, this ship folder is maps/offmap_vr/om_ships, or overmap/ships). This is for example ships, or for EM-specific, public ships. +- Templates + - This folder is specifically for pre-prepared, ready-to-place templates for things such as drop pods, small maps, etc, things EM-staff will use regularly that are not necessarily related to events. diff --git a/maps/tether/submaps/submaps_readme.md b/maps/tether/submaps/submaps_readme.md index 2eddf761f5..79dbaed151 100644 --- a/maps/tether/submaps/submaps_readme.md +++ b/maps/tether/submaps/submaps_readme.md @@ -2,4 +2,4 @@ DO NOT PUT EXPEDITION SUBMAPS HERE. Only submaps and areas EXCLUSIVE to the Tether go here. Underdark POIs are here because they use Virgo3b turfs EXCLUSIVE to Tether. -If you're unsure, ask in #dev-general. \ No newline at end of file +If you're unsure, ask in #dev-general. diff --git a/modular_chomp/icons/mob/animal_ch.dmi b/modular_chomp/icons/mob/animal_ch.dmi index fac7d70136..da1f3cce9f 100644 Binary files a/modular_chomp/icons/mob/animal_ch.dmi and b/modular_chomp/icons/mob/animal_ch.dmi differ diff --git a/modular_chomp/maps/relic_base/relicbase-3.dmm b/modular_chomp/maps/relic_base/relicbase-3.dmm index 443cc73e4f..c4bd896cce 100644 --- a/modular_chomp/maps/relic_base/relicbase-3.dmm +++ b/modular_chomp/maps/relic_base/relicbase-3.dmm @@ -19109,7 +19109,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "iiF" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch, +/mob/living/simple_mob/animal/passive/raccoon, /obj/structure/railing, /obj/structure/flora/ausbushes/grassybush{ opacity = 1 @@ -32821,7 +32821,7 @@ }, /area/server) "otx" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch, +/mob/living/simple_mob/animal/passive/raccoon, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/path/plains) "otF" = ( @@ -34544,7 +34544,7 @@ /turf/simulated/floor/tiled/techfloor, /area/medical/cryo/autoresleeve) "piU" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch, +/mob/living/simple_mob/animal/passive/raccoon, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/plains/outpost) "pjq" = ( @@ -39784,7 +39784,7 @@ /turf/simulated/floor/tiled/techmaint, /area/surface/outpost/mining_main) "rrk" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch, +/mob/living/simple_mob/animal/passive/raccoon, /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/plains/outpost) diff --git a/modular_chomp/maps/virtual_reality/constructVR.dmm b/modular_chomp/maps/virtual_reality/constructVR.dmm index 37cca497a6..73bc059fd5 100644 --- a/modular_chomp/maps/virtual_reality/constructVR.dmm +++ b/modular_chomp/maps/virtual_reality/constructVR.dmm @@ -1714,7 +1714,7 @@ /turf/simulated/shuttle/floor/white, /area/vr/powered/cult) "bzc" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch, +/mob/living/simple_mob/animal/passive/raccoon, /turf/simulated/floor/outdoors/grass/heavy/thor, /area/vr/outdoors/powered) "bzi" = ( @@ -10999,7 +10999,7 @@ /turf/simulated/floor/bmarble, /area/vr/powered/mall) "jnx" = ( -/mob/living/simple_mob/animal/passive/raccoon_ch, +/mob/living/simple_mob/animal/passive/raccoon, /turf/simulated/floor/tiled/white, /area/vr/powered) "jnE" = ( diff --git a/news_articles/space_magazine_1.html b/news_articles/space_magazine_1.html index dbdd3f43ed..1287fa48d4 100644 --- a/news_articles/space_magazine_1.html +++ b/news_articles/space_magazine_1.html @@ -1,135 +1,197 @@ - +

+

- -

Welcome to SPACE Magazine

-
-
+

Welcome to SPACE Magazine

+
+

- SPACE Magazine is a new force in Journalism in the 26th Century- bringing news and information to the multitudes of Star Systems settled by Sentient Life, - letting everyone know whats happening across the Stars, millions of miles away. News if first and foremost our forte, but articles over important - individuals and new developments will also be here in the magazine, which we shall ship out every month with a new issue. This, is our very first issue, - and we hope to continue for many years to come. + SPACE Magazine is a new force in Journalism in the 26th Century- bringing news + and information to the multitudes of Star Systems settled by Sentient Life, + letting everyone know what's happening across the Stars, millions of miles + away. News if first and foremost our forte, but articles over important + individuals and new developments will also be here in the magazine, which we + shall ship out every month with a new issue. This, is our very first issue, + and we hope to continue for many years to come.

- In this first issue, we will address a few incidents that have come up as of recent days- a attempted, but disastrous attack by Pirates against the colony - of Onaios Prime, thwarted by the latest in weapons technology. A meteor shower that rained disaster on the colonial world of Brinkburn in the lucrative - system of Nyx, causing many citizens to leave the planet. An attack by terrorists on the colony of Asilliss VII, resulting in many deaths, and the Great - Carp Migrations that have been occurring in recent days in the Nyx System. + In this first issue, we will address a few incidents that have come up as of + recent days- a attempted, but disastrous attack by Pirates against the colony + of Onaios Prime, thwarted by the latest in weapons technology. A meteor shower + that rained disaster on the colonial world of Brinkburn in the lucrative + system of Nyx, causing many citizens to leave the planet. An attack by + terrorists on the colony of Asilliss VII, resulting in many deaths, and the + Great Carp Migrations that have been occurring in recent days in the Nyx + System.

- -

+

Pirates Underestimate Colonial Defenses

-
+

- This week, a pirate group that has stolen a SolGov Battlecruiser has attempted to commit a raid with it upon a colony world Onaios Prime, in the Onaios - system. However, it was quickly eradicated along with its escort by a planetside battery of Mass Drivers produced recently by Dawnlight Celestial Defence. - After this incident Dawnlight has registered an influx of demand from other colonies, as their weapons are relatively affordable, registering slight growth - in stock ratings for the first time in 250 years, when the success of Dawnlight even competed with corporations like Hephaestus. We have found a written - account of one of the writers of local news agency, and with their permission are including it in this article. + This week, a pirate group that has stolen a SolGov Battlecruiser has attempted + to commit a raid with it upon a colony world Onaios Prime, in the Onaios + system. However, it was quickly eradicated along with its escort by a + planetside battery of Mass Drivers produced recently by Dawnlight Celestial + Defence. After this incident Dawnlight has registered an influx of demand from + other colonies, as their weapons are relatively affordable, registering slight + growth in stock ratings for the first time in 250 years, when the success of + Dawnlight even competed with corporations like Hephaestus. We have found a + written account of one of the writers of local news agency, and with their + permission are including it in this article.

- It was almost midnight when I was driving around the AURA 2, a new anti-orbital installation, on my way home from my office, after some overtime. I have - heard of its construction project and have never paid much attention to it, the world of Onaios Prime that I live on has always been only moderately - wealthy, and peaceful... until last night. A loud siren played from the complex's direction, breaking the silence of the night. I stopped my vehicle where - an overhang down to the valley let me look at the platform, from 50 meters above it, and about 300 meters away from it, and I saw it for my first time. + It was almost midnight when I was driving around the AURA 2, a new + anti-orbital installation, on my way home from my office, after some overtime. + I have heard of its construction project and have never paid much attention to + it, the world of Onaios Prime that I live on has always been only moderately + wealthy, and peaceful... until last night. A loud siren played from the + complex's direction, breaking the silence of the night. I stopped my vehicle + where an overhang down to the valley let me look at the platform, from 50 + meters above it, and about 300 meters away from it, and I saw it for my first + time.

- A great bunker in the middle was having its windows shut in blast doors, shying away from the reason this is an anti-orbital installation: The jeeps and - trucks that were scurrying to hide in the bunker were but the tiniest little dot, compared to the massive Mass Drivers, that slowly, but so steadily, with - a bass, gentle hum, began towering to the sky, reaching out to it with a barrel so long you would need two loaded semi-trucks to cover the length. The - barrels aligned, and I could still hear the humming, but it started growing stronger, stronger... before one of the barrels sparked inside a few times, and - I was blinded by a vast flash... Only then, the humming cut off, only then, I heard the lightning, and only then, a spiking, overwhelming pitch of - capacitor discharge plummeted to my eardrums, only to be followed by an encroaching thunder of a blastwave, shunting masses of air against me. + A great bunker in the middle was having its windows shut in blast doors, + shying away from the reason this is an anti-orbital installation: The jeeps + and trucks that were scurrying to hide in the bunker were but the tiniest + little dot, compared to the massive Mass Drivers, that slowly, but so + steadily, with a bass, gentle hum, began towering to the sky, reaching out to + it with a barrel so long you would need two loaded semi-trucks to cover the + length. The barrels aligned, and I could still hear the humming, but it + started growing stronger, stronger... before one of the barrels sparked inside + a few times, and I was blinded by a vast flash... Only then, the humming cut + off, only then, I heard the lightning, and only then, a spiking, overwhelming + pitch of capacitor discharge plummeted to my eardrums, only to be followed by + an encroaching thunder of a blastwave, shunting masses of air against me.

- Only after a few seconds, I regained my hearing and sight to feel the echoes of the blast, and to see another Mass Driver was discharging, sparking. I - covered the sight of it in time, to see the entire valley was lit for a split second as well as the sun could do, and I heard the discharge again, and I - heard its calling. Every spike, a declaration of freedom. Every thunderblast, a declaration of sovereignty. The Mass Drivers would flash, marking dawn upon - the invaders to signal the humanity made its stand here, and it shall persevere. The warhead that it would expel was our fist that would smite them from - our sky. I did not know who have we fought against at that time, but at that moment, and ever since, I never looked at the night sky the same way again. I - believe that that sky is our home. -Written by Liun Asitero, Onaios Daily + Only after a few seconds, I regained my hearing and sight to feel the echoes + of the blast, and to see another Mass Driver was discharging, sparking. I + covered the sight of it in time, to see the entire valley was lit for a split + second as well as the sun could do, and I heard the discharge again, and I + heard its calling. Every spike, a declaration of freedom. Every thunderblast, + a declaration of sovereignty. The Mass Drivers would flash, marking dawn upon + the invaders to signal the humanity made its stand here, and it shall + persevere. The warhead that it would expel was our fist that would smite them + from our sky. I did not know who have we fought against at that time, but at + that moment, and ever since, I never looked at the night sky the same way + again. I believe that that sky is our home. -Written by Liun Asitero, Onaios + Daily

Written by Lucas Shiito - -

-

Brinkburn Refugees and Sapients Rights

-
+

+

Brinkburn Refugees and Sapient's Rights

+

- One of Nyx's planets, Brinkburn, has had a catastrophe happen in form of a meteor storm three days ago. Nyx has lashed out with a solar corona that, while - having a miniscule effect on traffic and stations, has managed to deflect several asteroids from the belt natively present around Brinkburn. This caused - massive, unsustainable damage to the habitation complexes present on the planet that are occupied by several hundreds of settlers, and given their scarce - material stocks, they had no other choice but to escape, to find another place to survive in. + One of Nyx's planets, Brinkburn, has had a catastrophe happen in form of a + meteor storm three days ago. Nyx has lashed out with a solar corona that, + while having a miniscule effect on traffic and stations, has managed to + deflect several asteroids from the belt natively present around Brinkburn. + This caused massive, unsustainable damage to the habitation complexes present + on the planet that are occupied by several hundreds of settlers, and given + their scarce material stocks, they had no other choice but to escape, to find + another place to survive in.

- The situation was further complicated by the very asteroid rings that have started this misfortune; the refugees did not have sufficiently advanced - navigation computers on their pods to steer them safely through the rings. Approximately 20% of population is estimated to have not made it through. The - shuttles that have shipped the settlers on the world in the first place needed to be dismantled and used for scrap to expand the living area, and the more - advanced components were used to wrangle the escape pods together. + The situation was further complicated by the very asteroid rings that have + started this misfortune; the refugees did not have sufficiently advanced + navigation computers on their pods to steer them safely through the rings. + Approximately 20% of population is estimated to have not made it through. The + shuttles that have shipped the settlers on the world in the first place needed + to be dismantled and used for scrap to expand the living area, and the more + advanced components were used to wrangle the escape pods together.

- Most of the refugees have found their way to Emerald Habitation, a station in Nyx. The station already has issues with over-population and air - purification, and the sudden influx of human settlers has introduced even more problems. Firstly, it has made it much harder to process travelers passing - through, making travel in Nyx either very dangerous through Void Star, or very expensive through NAS Crescent. Secondly, Emerald Habitation has been - housing a large number of Unathi, which have been harassing the refugees, some of them are even a part of the station's security, making appeals to them - only worsen the situation. + Most of the refugees have found their way to Emerald Habitation, a station in + Nyx. The station already has issues with over-population and air purification, + and the sudden influx of human settlers has introduced even more problems. + Firstly, it has made it much harder to process travelers passing through, + making travel in Nyx either very dangerous through Void Star, or very + expensive through NAS Crescent. Secondly, Emerald Habitation has been housing + a large number of Unathi, which have been harassing the refugees, some of them + are even a part of the station's security, making appeals to them only worsen + the situation.

- We can only hope a new home will be found and built for the poor refugees, and that the Skrell present on station, that are keeping the situation - relatively free of casualties, continue to sustain a safe, if not non-hostile environment on the overpopulated station. + We can only hope a new home will be found and built for the poor refugees, and + that the Skrell present on station, that are keeping the situation relatively + free of casualties, continue to sustain a safe, if not non-hostile environment + on the overpopulated station.

Written by Laura Hunton - -

+

Terror Attack on Asilliss VII

-
+

- Planet Asilliss VI has been a civil uprising hotspot for a few weeks now, and things have recently yet again escalated. A research facility belonging to - NanoTrasen, one of several to be specific, that specializes on an undisclosed project, has been attacked by a group of masked raiders armed with automatic - weapons, using several buggies for transport. Two hours after the incident, Asilliss Liberation Force claimed responsibility. "Companies like NanoTrasen - are advancing us, but into slavery and containment! Their technology only brings control to the corrupt over the honest people of Asilliss! We cannot stand - idle! Join us and befall those who take our lives from our control!", claimed a man hiding in a shade on video that was sent to a local entertainment - station to be broadcasted under threat of attack. + Planet Asilliss VI has been a civil uprising hotspot for a few weeks now, and + things have recently yet again escalated. A research facility belonging to + NanoTrasen, one of several to be specific, that specializes on an undisclosed + project, has been attacked by a group of masked raiders armed with automatic + weapons, using several buggies for transport. Two hours after the incident, + Asilliss Liberation Force claimed responsibility. "Companies like NanoTrasen + are advancing us, but into slavery and containment! Their technology only + brings control to the corrupt over the honest people of Asilliss! We cannot + stand idle! Join us and befall those who take our lives from our control!", + claimed a man hiding in a shade on video that was sent to a local + entertainment station to be broadcasted under threat of attack.

- Up until now, the government's militia has been relatively ineffective at quelling this terrorist cell, while their statistics register a number of arrests - and casualties, the group is still registering influx of recruits. However, NanoTrasen seems to have been highly impacted by this attack, judging from - press release of NanoTrasen, Nyx Division: "As a company, we must maintain our safety standard for our employees, as well as secure our installations. The - continued unrest on Asilliss that is resulting in loss of investments is forcing our hand to resort to particularly prejudicial measures and we are - arranging cooperation with the governmental forces." + Up until now, the government's militia has been relatively ineffective at + quelling this terrorist cell, while their statistics register a number of + arrests and casualties, the group is still registering influx of recruits. + However, NanoTrasen seems to have been highly impacted by this attack, judging + from press release of NanoTrasen, Nyx Division: "As a company, we must + maintain our safety standard for our employees, as well as secure our + installations. The continued unrest on Asilliss that is resulting in loss of + investments is forcing our hand to resort to particularly prejudicial measures + and we are arranging cooperation with the governmental forces."

- We have information from a trusted source, who we shall allow to remain unnamed, that NanoTrasen is arranging a loan to Asiliss in form of acquisition of a - small number of vehicles from Terraphistus Military Armor and small arms shipped all the way from Mars Security Industries, as well as hiring services from - a newly instated PMC, SAARE, to protect other NanoTrasen's installations. We have very little information on SAARE due to its novelty, except that it has - accepted several decorated veterans from various security forces and armies, and specializes on top secret operations. Only time will tell if these - measures shall be taken and how shall they affect the unrest on Asilliss IV, but be sure that we shall provide our readers with full coverage! + We have information from a trusted source, who we shall allow to remain + unnamed, that NanoTrasen is arranging a loan to Asiliss in form of acquisition + of a small number of vehicles from Terraphistus Military Armor and small arms + shipped all the way from Mars Security Industries, as well as hiring services + from a newly instated PMC, SAARE, to protect other NanoTrasen's installations. + We have very little information on SAARE due to its novelty, except that it + has accepted several decorated veterans from various security forces and + armies, and specializes on top secret operations. Only time will tell if these + measures shall be taken and how shall they affect the unrest on Asilliss IV, + but be sure that we shall provide our readers with full coverage!

Written by Johnathan Townsend - -

+

The Great Carp Migration

-
+

- Carp and Pike have plagued space station windows and ship paint jobs for the past hundred years, and while local businesses make money off of eradicating - them by the hundreds, they only seem to increase in number and size. Xenobiologists at Brickburn have come to the conclusion that that these pests most - likely came from Erebus. "Was really hard to figure out at first," says researcher Gregory Hills, "They really like to, you know, bite things. But once we - got a few hundred tagged ones out there the answer became pretty obvious." He went further on to explain that through their research they've created a - basic carp life cycle, starting at the center of the gas giant and ending in the upper atmosphere, "They tend to die there.", he remarks, "Carp don't - really survive in space unless they are really, really big. Hence why we get so many." When asked why the carp come to space in the first place, he shrugs, - "We don't really know. We think maybe they can sense the stations up there somehow and are looking for food." + Carp and Pike have plagued space station windows and ship paint jobs for the + past hundred years, and while local businesses make money off of eradicating + them by the hundreds, they only seem to increase in number and size. + Xenobiologists at Brickburn have come to the conclusion that that these pests + most likely came from Erebus. "Was really hard to figure out at first," says + researcher Gregory Hills, "They really like to, you know, bite things. But + once we got a few hundred tagged ones out there the answer became pretty + obvious." He went further on to explain that through their research they've + created a basic carp life cycle, starting at the center of the gas giant and + ending in the upper atmosphere, "They tend to die there.", he remarks, "Carp + don't really survive in space unless they are really, really big. Hence why we + get so many." When asked why the carp come to space in the first place, he + shrugs, "We don't really know. We think maybe they can sense the stations up + there somehow and are looking for food."

- Sadly this does not help much in protecting the citizens of the stars from the dreadful beasts. In the last month, there have been a reported 37 deaths due - to Carp and Pike related incidents, making the Erebus Beasts a serious threat to people thinking of working on a station. Scientists believe that at some - point this year, stations and ships in the Nyx System will be subjected to the largest migration of Carp and Pike that has ever been seen, and it may cause - serious damage to interests in the system. + Sadly this does not help much in protecting the citizens of the stars from the + dreadful beasts. In the last month, there have been a reported 37 deaths due + to Carp and Pike related incidents, making the Erebus Beasts a serious threat + to people thinking of working on a station. Scientists believe that at some + point this year, stations and ships in the Nyx System will be subjected to the + largest migration of Carp and Pike that has ever been seen, and it may cause + serious damage to interests in the system.

-Written by Peggy Resaih \ No newline at end of file +Written by Peggy Re'saih diff --git a/news_articles/starfire_report_2564.html b/news_articles/starfire_report_2564.html index 5f51f02c21..c96f673e5f 100644 --- a/news_articles/starfire_report_2564.html +++ b/news_articles/starfire_report_2564.html @@ -1,462 +1,1328 @@ -
- +
+
-
+

Starfire Report - 12/21/2564

-
+

See You Next Year

-

If you’ve been following us for long enough, you’ll probably know we here at the like to send off the year with one last article. In 2564 we’ve seen pirate raids, weapons of mass destruction, mind-bending anomalies, political protests, lawsuits, and more. PTSD has swept NanoTrasen employees while weapon sales are at an all-time high (even for Sif!). If our news report was the only surviving documentation of this year a century from now then 2564 will be remembered as a year of pain, death, and despair.

-

Except that’s not the whole story, is it? Like most news stations we report on what’s considered news and most of the time that’s the unpleasant stuff going on in the system and wider galaxy. We don’t write an article when your grandmother celebrates her 165th birthday or your best friend lands his dream job. We don’t talk about crime on the fall in New Reykjavik or Sif’s export economy thriving for another decade despite how important it is.

-

Despite all terrible things we’ve reported on, it’s the end of 2564 and we’re still here. We’ve lived and laughed and loved and cried but despite everything, we’re still here. Despite the threats and attacks and bloodshed, we refused to despair and give in. We refused to bow. We refused to be divided. We refused to stop hoping for a better tomorrow. No matter what gets thrown at us, we refuse to stop marching forward because we know the future is bright because we will make it so.

-

Here’s to 2565.

+

+ If you've been following us for long enough, you'll probably know we here at + the like to send off the year with one last article. In 2564 we've seen pirate + raids, weapons of mass destruction, mind-bending anomalies, political + protests, lawsuits, and more. PTSD has swept NanoTrasen employees while weapon + sales are at an all-time high (even for Sif!). If our news report was the only + surviving documentation of this year a century from now then 2564 will be + remembered as a year of pain, death, and despair. +

+

+ Except that's not the whole story, is it? Like most news stations we report on + what's considered news and most of the time that's the unpleasant stuff going + on in the system and wider galaxy. We don't write an article when your + grandmother celebrates her 165th birthday or your best friend lands his dream + job. We don't talk about crime on the fall in New Reykjavik or Sif's export + economy thriving for another decade despite how important it is. +

+

+ Despite all terrible things we've reported on, it's the end of 2564 and we're + still here. We've lived and laughed and loved and cried but despite + everything, we're still here. Despite the threats and attacks and bloodshed, + we refused to despair and give in. We refused to bow. We refused to be + divided. We refused to stop hoping for a better tomorrow. No matter what gets + thrown at us, we refuse to stop marching forward because we know the future is + bright because we will make it so. +

+

Here's to 2565.

-
+

Writers

The Starfire Team

-
+

Starfire Report - 11/30/2564

-
+

NCS Northern Star Raided

-

A Syndicate terrorist cell struck NCS Northern Star late last weekend. Initially posed as an assault on NLS Southern Cross, this turned out to be a ploy to divert resources from the actual target, Northern Star. The ploy succeeded, resulting in the rapid takeover of Northern Star’s surface facility.

-

Despite the initial success, PCRU forces deployed to Southern Cross quickly struck back and retook Northern Star in a matter of hours. Fighting was described as quick and bloody, leaving the hallways a macabre mess of viscera and bullet casings.

-

The intention of the incursion remains unknown. NanoTrasen reports supplies and valuables stolen but lacks evidence of deeper intentions common to anti-NT Syndicate raids. The Syndicate itself has once again taken credit for the terror operation but without nuanced accusations common to its incursions. Perhaps time will reveal deeper motives to the attack.

-
+

+ A Syndicate terrorist cell struck NCS Northern Star late last weekend. + Initially posed as an assault on NLS Southern Cross, this turned out to be a + ploy to divert resources from the actual target, Northern Star. The ploy + succeeded, resulting in the rapid takeover of Northern Star's surface + facility. +

+

+ Despite the initial success, PCRU forces deployed to Southern Cross quickly + struck back and retook Northern Star in a matter of hours. Fighting was + described as quick and bloody, leaving the hallways a macabre mess of viscera + and bullet casings. +

+

+ The intention of the incursion remains unknown. NanoTrasen reports supplies + and valuables stolen but lacks evidence of deeper intentions common to anti-NT + Syndicate raids. The Syndicate itself has once again taken credit for the + terror operation but without nuanced accusations common to its incursions. + Perhaps time will reveal deeper motives to the attack. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 11/02/2564

-
+

Spatial Anomalies Spread

-

Disturbing reports of warped and twisted space have grown throughout last month. Buildings bigger on the inside than the outside, hallways which never end, doors leading to other worlds; the reports go on and on. While growing in number, such anomalies appear to be transient which has resulted in the loss of several explorers thus far.

-

Despite the growing number of anomalies, VirGov maintains there is no cause for alarm and that such anomalies remain rare and limited to areas of known xenoarcheological activity. NLS Southern Cross’s Ullran Expanse outpost is particularly noteworthy due to the high incidence of anomalous reports.

-

Others meanwhile insist the anomalies must be linked to shadekin, a race of mysterious beings first spotted on NCS Northern Star approximately three years ago. As the accusations go, the anomalies must be linked to shadekin as the race itself possesses anomalous space shifting abilities. Critics aptly point out that the anomalies have only been appearing on Sif over the previous several months, long after shadekin were first spotted in Vir.

-
+

+ Disturbing reports of warped and twisted space have grown throughout last + month. Buildings bigger on the inside than the outside, hallways which never + end, doors leading to other worlds; the reports go on and on. While growing in + number, such anomalies appear to be transient which has resulted in the loss + of several explorers thus far. +

+

+ Despite the growing number of anomalies, VirGov maintains there is no cause + for alarm and that such anomalies remain rare and limited to areas of known + xenoarcheological activity. NLS Southern Cross's Ullran Expanse outpost is + particularly noteworthy due to the high incidence of anomalous reports. +

+

+ Others meanwhile insist the anomalies must be linked to shadekin, a race of + mysterious beings first spotted on NCS Northern Star approximately three years + ago. As the accusations go, the anomalies must be linked to shadekin as the + race itself possesses anomalous space shifting abilities. Critics aptly point + out that the anomalies have only been appearing on Sif over the previous + several months, long after shadekin were first spotted in Vir. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 10/24/2564

-
+

Record Breaking Pumpkin Harvest

-

To thank the station crew for their hard efforts, NanoTrasen doubled down on its holiday farming efforts to produce the greatest pumpkin harvest the galaxy has ever seen. The sheer quantity of pumpkins has spilled beyond the confines of the planet, spilling into space as the great pumpkin elevator. Pumpkins roll ever upward, gathering as stations and structures and moons and pumpkins and planets and stars and pumpkins and people and galaxies and time and pumpkins and pumplets and pumpkits and pumpkins and pumpkins crew crew crew pumpkins thank the crew

-

To pumpkin the station crew for their hard pumpkins, NanoPumpkin doubled pumpkins to the NLS Southern Pumpkin to replace the crew organs with pumpkins and pumpkin hands and pumpkin feet and pumpkin lungs oh the great pumpkin plague the pumpkins will roll the pumpkins will roll roll roll down my arm down my thighs I laugh laugh laugh pumpkins cry pumpkins stream pumpkins leak

-

to the crew the crew the crew crew crew pumpkins in space my orange skin I bleed pumpkins help me I cannot scream I choke on pumpkins my blood is pumpkins they split my belly and out spills pumpkins pumpkins pumpkins a sea of pumpkins wash over me the weight I cannot bear the pumpkins they hurt too many pumpkins my spine is cracking cracking cracking open like pumpkins my lungs like lead weighed down with pumpkins help me it hurts the pumpkins spread my life ends the pumpkins spread somebody help me please the pumpkins the pumpkins the pumpkins

-
+

+ To thank the station crew for their hard efforts, NanoTrasen doubled down on + its holiday farming efforts to produce the greatest pumpkin harvest the galaxy + has ever seen. The sheer quantity of pumpkins has spilled beyond the confines + of the planet, spilling into space as the great pumpkin elevator. Pumpkins + roll ever upward, gathering as stations and structures and moons and pumpkins + and planets and stars and pumpkins and people and galaxies and time and + pumpkins and pumplets and pumpkits and pumpkins and pumpkins crew crew crew + pumpkins thank the crew +

+

+ To pumpkin the station crew for their hard pumpkins, NanoPumpkin doubled + pumpkins to the NLS Southern Pumpkin to replace the crew organs with pumpkins + and pumpkin hands and pumpkin feet and pumpkin lungs oh the great pumpkin + plague the pumpkins will roll the pumpkins will roll roll roll down my arm + down my thighs I laugh laugh laugh pumpkins cry pumpkins stream pumpkins leak +

+

+ to the crew the crew the crew crew crew pumpkins in space my orange skin I + bleed pumpkins help me I cannot scream I choke on pumpkins my blood is + pumpkins they split my belly and out spills pumpkins pumpkins pumpkins a sea + of pumpkins wash over me the weight I cannot bear the pumpkins they hurt too + many pumpkins my spine is cracking cracking cracking open like pumpkins my + lungs like lead weighed down with pumpkins help me it hurts the pumpkins + spread my life ends the pumpkins spread somebody help me please the pumpkins + the pumpkins the pumpkins +

+

Pumpking

gggggggg

-
+

Starfire Report - 10/15/2564

-
+

Terrorist Threatens Sif

-

A rampant singularity broke out within the Ullran Expanse, devouring NanoTrasen’s planet-side outpost and threatening to consume Sif. The singularity tore a path of destruction through the wildness for several hours before VirGov’s Anomalous Catastrophe Response unit tamed the beast, forcing it to release tons of compressed planet matter in a violent explosion.

-

”Threats to unleash a singularity on a planet is a pretty common terroristic threat, probably more common than bombs these days. They make demands and if they’re not met, they’ll destroy the planet with a singularity. Or they just release it as part of some extremist agenda,” a spokesperson for the unit was quick to respond to a request for comment. “It’s kind of a serious threat on a space station given those aren’t very big, but a planet? Sif would fit in my hand if compressed enough to be a singularity. Sure, technically it could eat the entire planet if given a ludicrous amount of time but otherwise it’s just a local hazard. Just wait for it to wander somewhere remote and disrupt it with subspace. Boom, all the mass is free again.”

-

Several NLS Southern Cross crew insist a NanoTrasen employee accidentally released the monster in a fit of gross incompetence. NanoTrasen stated its policies ensure a singularity could never be released on a planet and the incident was likely a weak attempt by the Syndicate to threaten Sif due to the loss of its Greytide-based bioweapon.

-
+

+ A rampant singularity broke out within the Ullran Expanse, devouring + NanoTrasen's planet-side outpost and threatening to consume Sif. The + singularity tore a path of destruction through the wildness for several hours + before VirGov's Anomalous Catastrophe Response unit tamed the beast, forcing + it to release tons of compressed planet matter in a violent explosion. +

+

+ ”Threats to unleash a singularity on a planet is a pretty common terroristic + threat, probably more common than bombs these days. They make demands and if + they're not met, they'll destroy the planet with a singularity. Or they just + release it as part of some extremist agenda,” a spokesperson for the unit was + quick to respond to a request for comment. “It's kind of a serious threat on a + space station given those aren't very big, but a planet? Sif would fit in my + hand if compressed enough to be a singularity. Sure, technically it could eat + the entire planet if given a ludicrous amount of time but otherwise it's just + a local hazard. Just wait for it to wander somewhere remote and disrupt it + with subspace. Boom, all the mass is free again.” +

+

+ Several NLS Southern Cross crew insist a NanoTrasen employee accidentally + released the monster in a fit of gross incompetence. NanoTrasen stated its + policies ensure a singularity could never be released on a planet and the + incident was likely a weak attempt by the Syndicate to threaten Sif due to the + loss of its Greytide-based bioweapon. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 10/12/2564

-
+

Wander the Void (Guest Piece)

-

To stride among the starlit sea; to drift through waves of stardust; to swim through aether currents; to brush the frigid void. Ever upward we look, dreaming of distant worlds, longing for verdant vistas of endless green. To explore and conquer the stars, forgetting the eyes staring back. We think ourselves chosen and special even as species after species proves us ordinary.

-

Wanderers brushed against Sif’s Southern Cross. Endless wanderers, forsaking the solidity of planet to embrace the cosmos. How do we receive these wanderers? An infestation! An abomination to eradicate! So the machines followed, so we gave aid on this quest of destruction! Assuredly technology abolished the insufferable reality of the wanderers, condemned the cloth to ash!

-

Yet we are not machine, not bound to logic and rationality. Wanderlust plucked heart threads and so the crew saw through the machines, saw through the lies. Thus the crew aided the wanderers and thus the wanderers now wander once more, unabated. But the stigma of infestation remains, the chase continued beyond our eyes. The crew must take caution.

+

+ To stride among the starlit sea; to drift through waves of stardust; to swim + through aether currents; to brush the frigid void. Ever upward we look, + dreaming of distant worlds, longing for verdant vistas of endless green. To + explore and conquer the stars, forgetting the eyes staring back. We think + ourselves chosen and special even as species after species proves us ordinary. +

+

+ Wanderers brushed against Sif's Southern Cross. Endless wanderers, forsaking + the solidity of planet to embrace the cosmos. How do we receive these + wanderers? An infestation! An abomination to eradicate! So the machines + followed, so we gave aid on this quest of destruction! Assuredly technology + abolished the insufferable reality of the wanderers, condemned the cloth to + ash! +

+

+ Yet we are not machine, not bound to logic and rationality. Wanderlust plucked + heart threads and so the crew saw through the machines, saw through the lies. + Thus the crew aided the wanderers and thus the wanderers now wander once more, + unabated. But the stigma of infestation remains, the chase continued beyond + our eyes. The crew must take caution. +

For no good deed goes unpunished.

-
+

Writers

Zumma

-
+

Starfire Report - 10/04/2564

-
+

Greytide Resurgence Strikes Sif

-

A potent bioweapon targeted NLS Southern Cross last night. Described as an infectious form of Greytide, the weapon rapidly converts a victim into a sprawling mass of biological ooze capable of launching matter beyond orbit. For those who do not know, Greytide is an illegal nanotechnology which rapidly consumes metal and self-replicates in an expanding ooze-like mass of nanomachines. Responsible for near destruction of the Earth (Sol system) landmasses Europe and Asia in the late 2000’s, Greytide is an uncontrollable weapon occasionally used and refined by terrorist organizations.

-

Despite the immense danger, NanoTrasen’s PCRU charged the weapon and destroyed it before any serious damage could be dealt. While all personnel involved in the incident have been quarantined, no signs of the infection have been detected and the weapon is believed to be completely eradicated.

-

The terrorist organization known as the Syndicate has taken credit for the weapon and indicated they may target New Reykjavik if NanoTrasen continues to do business in the Vir system. VirGov declared a state of emergency and instituted a twelve-hour ban on interstellar travel to and from the system. While no evidence of the weapon has been found, SolGov has stated it will be stationing a destroyer in the system until the end of the month.

-
+

+ A potent bioweapon targeted NLS Southern Cross last night. Described as an + infectious form of Greytide, the weapon rapidly converts a victim into a + sprawling mass of biological ooze capable of launching matter beyond orbit. + For those who do not know, Greytide is an illegal nanotechnology which rapidly + consumes metal and self-replicates in an expanding ooze-like mass of + nanomachines. Responsible for near destruction of the Earth (Sol system) + landmasses Europe and Asia in the late 2000's, Greytide is an uncontrollable + weapon occasionally used and refined by terrorist organizations. +

+

+ Despite the immense danger, NanoTrasen's PCRU charged the weapon and destroyed + it before any serious damage could be dealt. While all personnel involved in + the incident have been quarantined, no signs of the infection have been + detected and the weapon is believed to be completely eradicated. +

+

+ The terrorist organization known as the Syndicate has taken credit for the + weapon and indicated they may target New Reykjavik if NanoTrasen continues to + do business in the Vir system. VirGov declared a state of emergency and + instituted a twelve-hour ban on interstellar travel to and from the system. + While no evidence of the weapon has been found, SolGov has stated it will be + stationing a destroyer in the system until the end of the month. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 09/29/2564

-
+

Supermatter Meteor Impacts Southern Cross

-

Late last week a supermatter meteor impacted NanoTrasen’s NLS Southern Cross, resulting in substantial structural damage and widespread hallucinations. Unable to dislodge the meteor, station crew were forced to abandon the scene and leave the mess for the more experienced disaster clean-up crew. NT reports successful extraction of the supermatter followed by otherwise unremarkable repairs.

-

Station crew insist the meteor contained an ancient relic which revived the souls of the dead and called forth heroes from the Wizard Federation to prevent the calamity by jettisoning the artifact back into space. NT insists the Wizard Federation does not exist and the crew’s account resulted from the extreme hallucinations induced by an abnormally large quantity of supermatter.

-

The Wizard Federation is not publicly recognized by SolGov, the Qerr-Katish, or Moghes Hegemony nor mentioned in any official documents, notes, or records. “Wizard Federation” was once a registered trademark of a popular pen and paper roleplaying game during the 2200’s but is now public domain. The name appears across numerous video games, featuring most prominently in the MMO Star Castle as a shadowy organization which spreads chaos and razes star systems for entertainment. The MMO is particularly popular in frontier systems like Vir or Nyx.

-
+

+ Late last week a supermatter meteor impacted NanoTrasen's NLS Southern Cross, + resulting in substantial structural damage and widespread hallucinations. + Unable to dislodge the meteor, station crew were forced to abandon the scene + and leave the mess for the more experienced disaster clean-up crew. NT reports + successful extraction of the supermatter followed by otherwise unremarkable + repairs. +

+

+ Station crew insist the meteor contained an ancient relic which revived the + souls of the dead and called forth heroes from the Wizard Federation to + prevent the calamity by jettisoning the artifact back into space. NT insists + the Wizard Federation does not exist and the crew's account resulted from the + extreme hallucinations induced by an abnormally large quantity of supermatter. +

+

+ The Wizard Federation is not publicly recognized by SolGov, the Qerr-Katish, + or Moghes Hegemony nor mentioned in any official documents, notes, or records. + “Wizard Federation” was once a registered trademark of a popular pen and paper + roleplaying game during the 2200's but is now public domain. The name appears + across numerous video games, featuring most prominently in the MMO Star Castle + as a shadowy organization which spreads chaos and razes star systems for + entertainment. The MMO is particularly popular in frontier systems like Vir or + Nyx. +

+

Writers

Mirkracresh Kalzar

-
+
-

Starfire Report – 09/15/2564

-
-

Shadekin – The New Vox?

+

Starfire Report - 09/15/2564

+
+

Shadekin - The New Vox?

-

Unless you never use the exonet you’ve probably encountered the term “shadekin” at least once. Further searches may have yielded various images but likely failed to produce a coherent, cohesive picture. So what exactly are shadekin and why have they been talked about so much in Vir lately?

-

The amount of public information surrounding shadekin is relatively lacking and comes mostly from anecdote. Four-eared and apparently fluffy, shadekin seem to be a recently discovered race with bluespace phasing abilities (or technology) and an attraction for areas with anomalous bluespace activity (read: NCS Northern Star and the Ullran Expanse). NanoTrasen acknowledges the appearances of these mysterious beings but refuses to divulge further details; SolGov (and VirGov, for that matter) maintains no evidence of a newly discovered sapient species has been submitted to the TransStellar Species Registry.

-

Vir (and perhaps only Vir) has been home to numerous sightings of the beings across several xenoarcheological sites. Most sightings suggest few of the creatures grasp Galactic Common while at least one recorded event of piracy claims a band of the creatures stole a ship. The recent uptick of searching however is due to a well-documented encounter (relative to other sightings) last weekend. A group of the creatures arrived at NLS Southern Cross to sell goods for solid phoron. While not the first claim of shadekin doing such, this instance is well corroborated due to the creatures violating FTL jump-zone traffic law near Tyr. The ship ignored hails, resulting in a televised chase eventually culminating in one of the creatures materializing upon the police cruiser and sabotaging the bluespace jammer, allowing the shadekin to escape from the system.

-

While VirGov officials condemned the incident, the lack of known government entities for the creatures or methods of successfully contacting members of the species leaves no avenue for follow up or punishment. Resultingly, shadekin have been categorized much like vox: no legal recognition of sapience despite clear evidence to the contrary. Unlike vox, shadekin seem significantly more popular in the stories of claimed encounters. Perhaps time will tell if they actually call themselves “shadekin.”

-
+

+ Unless you never use the exonet you've probably encountered the term + “shadekin” at least once. Further searches may have yielded various images but + likely failed to produce a coherent, cohesive picture. So what exactly are + shadekin and why have they been talked about so much in Vir lately? +

+

+ The amount of public information surrounding shadekin is relatively lacking + and comes mostly from anecdote. Four-eared and apparently fluffy, shadekin + seem to be a recently discovered race with bluespace phasing abilities (or + technology) and an attraction for areas with anomalous bluespace activity + (read: NCS Northern Star and the Ullran Expanse). NanoTrasen acknowledges the + appearances of these mysterious beings but refuses to divulge further details; + SolGov (and VirGov, for that matter) maintains no evidence of a newly + discovered sapient species has been submitted to the TransStellar Species + Registry. +

+

+ Vir (and perhaps only Vir) has been home to numerous sightings of the + beings across several xenoarcheological sites. Most sightings suggest few of + the creatures grasp Galactic Common while at least one recorded event of + piracy claims a band of the creatures stole a ship. The recent uptick of + searching however is due to a well-documented encounter (relative to other + sightings) last weekend. A group of the creatures arrived at NLS Southern + Cross to sell goods for solid phoron. While not the first claim of shadekin + doing such, this instance is well corroborated due to the creatures violating + FTL jump-zone traffic law near Tyr. The ship ignored hails, resulting in a + televised chase eventually culminating in one of the creatures materializing + upon the police cruiser and sabotaging the bluespace jammer, allowing the + shadekin to escape from the system. +

+

+ While VirGov officials condemned the incident, the lack of known government + entities for the creatures or methods of successfully contacting members of + the species leaves no avenue for follow up or punishment. Resultingly, + shadekin have been categorized much like vox: no legal recognition of sapience + despite clear evidence to the contrary. Unlike vox, shadekin seem + significantly more popular in the stories of claimed encounters. Perhaps time + will tell if they actually call themselves “shadekin.” +

+

Writers

Eshi Sali

-
+
-

Starfire Report – 09/07/2564

-
+

Starfire Report - 09/07/2564

+

Cyclical Ullran Anomaly

-

Blood, blood, blood. When will NLS Southern Cross escape seas of blood and gore? Yet again NanoTrasen staff spilled into NCS Northern Star covered in blood and gibbering nonsense. Yet again the NanoTrasen cleanup crew found the telecommunications station covered in guts and viscera. Yet again NanoTrasen insists nothing unusual transpired while threatening heavy fines to anybody speaking of the event. Yet again the threat of fines neither suppresses speech nor convinces anybody of the megacorporation’s official account. Not that “nothing happened” leaves much to refute.

-

So what happened this time? Once again, we have pictures and videos of blood and gore and maddened scratchings etched into stone. Crew insist supernatural demons walked the halls and dragged victims into the abyss. Ullran apparently burned beneath boiling blood despite yesterday’s footage revealing the snowy plain is very much still a frigid snowy plain.

-

In all seriousness, the consistency of crew descriptions of similar events over the previous months suggest there’s more than just mass hysteria or airborne mindbreaker toxin behind these incidents. The Ullran Expanse remains the most expansive trove of anomalous precursor relics known on Sif; while the general lack of physical evidence around these events makes it difficult to conclude anything with certainty, xenoarcheological artefacts are well known to occasionally cause hallucinations and other extreme psychological effects. Perhaps some particularly potent find lurks undiscovered beneath the earth, occasionally drowning Southern Cross in blood.

-
+

+ Blood, blood, blood. When will NLS Southern Cross escape seas of blood and + gore? Yet again NanoTrasen staff spilled into NCS Northern Star covered in + blood and gibbering nonsense. Yet again the NanoTrasen cleanup crew found the + telecommunications station covered in guts and viscera. Yet again NanoTrasen + insists nothing unusual transpired while threatening heavy fines to anybody + speaking of the event. Yet again the threat of fines neither suppresses speech + nor convinces anybody of the megacorporation's official account. Not that + “nothing happened” leaves much to refute. +

+

+ So what happened this time? Once again, we have pictures and videos of blood + and gore and maddened scratchings etched into stone. Crew insist supernatural + demons walked the halls and dragged victims into the abyss. Ullran apparently + burned beneath boiling blood despite yesterday's footage revealing the snowy + plain is very much still a frigid snowy plain. +

+

+ In all seriousness, the consistency of crew descriptions of similar events + over the previous months suggest there's more than just mass hysteria or + airborne mindbreaker toxin behind these incidents. The Ullran Expanse remains + the most expansive trove of anomalous precursor relics known on Sif; while the + general lack of physical evidence around these events makes it difficult to + conclude anything with certainty, xenoarcheological artefacts are well known + to occasionally cause hallucinations and other extreme psychological effects. + Perhaps some particularly potent find lurks undiscovered beneath the earth, + occasionally drowning Southern Cross in blood. +

+

Writers

Eshi Sali

-
+

Starfire Report - 08/27/2564

-
+

Explore the Galaxy (Sponsored by Nanotrasen)

-

Ever stare up at the night sky and dream of sailing among the stars? Ever tap on the window in transit from Kara to Sif wishing you could take the wheel and zoom off into the unknown? Have you looked into getting a pilot’s license just to realize it’s way out of your budget? NanoTrasen Exploration Corps may be for you.

-

Dedicated to exploring the unknown, NT ExpoCor may just make those dreams a reality. No prior experience necessary, entrants to the program’s Vir branch start an internship on NLS Southern Cross and work their way into the station’s Exploration department. With a learner class NT Stargazer model ship, even a high school dropout can get the experience to pilot a scout class expedition cruiser into one of NanoTrasen’s many exploratory ventures in just a year or more!

-

Piloting not your thing? Fear not, you can get expedition class combat survival or search and rescue training right from the comfort and familiarity of planet Sif. More of hands on builder or FTL maintenance kind of person? You might not ride the scout ships but the expedition fleet needs everybody from an engine expert to a smooth talker who pours even smoother drinks.

+

+ Ever stare up at the night sky and dream of sailing among the stars? Ever tap + on the window in transit from Kara to Sif wishing you could take the wheel and + zoom off into the unknown? Have you looked into getting a pilot's license just + to realize it's way out of your budget? NanoTrasen Exploration Corps may be + for you. +

+

+ Dedicated to exploring the unknown, NT ExpoCor may just make those dreams a + reality. No prior experience necessary, entrants to the program's Vir branch + start an internship on NLS Southern Cross and work their way into the + station's Exploration department. With a learner class NT Stargazer model + ship, even a high school dropout can get the experience to pilot a scout class + expedition cruiser into one of NanoTrasen's many exploratory ventures in just + a year or more! +

+

+ Piloting not your thing? Fear not, you can get expedition class combat + survival or search and rescue training right from the comfort and familiarity + of planet Sif. More of hands on builder or FTL maintenance kind of person? You + might not ride the scout ships but the expedition fleet needs everybody from + an engine expert to a smooth talker who pours even smoother drinks. +

What are you waiting for, spacer? Join NanoTrasen today.

-
+

Writers

Arielle Wood

-
+

Starfire Report - 08/16/2564

-
+

Swarmers Escape Station

-

A mysterious group of swarmer robots struck NLS Southern Cross last night. Occasionally encountered in unexplored reaches of space, little is known about swarmers. Swarmers typically appear without warning and begin repurposing all available metal into more swarmers and a new structure. Xenoarchaeologists conjecture swarmers may be construction robots left from an extinct civilization but have uncovered little to confirm this hypothesis.

-

Swarmers within settled space tend to be rare due to most governments destroying the robots with extreme prejudice before they can tear down important installations. The appearance of such robots expectedly resulted in a swift response from VirGov once made public, a government taskforce deploying and thoroughly inspecting NLS Southern Cross despite NanoTrasen’s protests.

-

Crew testimony suggests these swarmers were somehow different than the variety encountered throughout unsettled space. While the swarmers did begin disassembling Southern Cross, they apparently built and escaped through a special gateway. No trace of a gateway was recovered; NT insists the swarmers were ordinary and completely eradicated shortly after embarking on the station.

-
+

+ A mysterious group of swarmer robots struck NLS Southern Cross last night. + Occasionally encountered in unexplored reaches of space, little is known about + swarmers. Swarmers typically appear without warning and begin repurposing all + available metal into more swarmers and a new structure. Xenoarchaeologists + conjecture swarmers may be construction robots left from an extinct + civilization but have uncovered little to confirm this hypothesis. +

+

+ Swarmers within settled space tend to be rare due to most governments + destroying the robots with extreme prejudice before they can tear down + important installations. The appearance of such robots expectedly resulted in + a swift response from VirGov once made public, a government taskforce + deploying and thoroughly inspecting NLS Southern Cross despite NanoTrasen's + protests. +

+

+ Crew testimony suggests these swarmers were somehow different than the variety + encountered throughout unsettled space. While the swarmers did begin + disassembling Southern Cross, they apparently built and escaped through a + special gateway. No trace of a gateway was recovered; NT insists the swarmers + were ordinary and completely eradicated shortly after embarking on the + station. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 08/03/2564

-
+

Firefight Breaks Out Over Southern Cross

-

Unknown factions battled across NLS Southern Cross late last weekend. Confirmed details remain sparse but crew accounts describe a fight between hostile entities to obtain an object guarded in the station’s vault. Crew insist NanoTrasen instituted penalties over the loss of the object while NanoTrasen insists no such object exists and the intentions of the hostile parties remains unconfirmed.

-

The anti-NT terror group known as the Syndicate claimed credit for the attack, stating it was a targeted assault meant to damage NT assets and send a message that no NT facility will be safe from damage so long as the company continues to exist. Details from the crew contest this claim, suggesting some of the assailants possessed supernatural abilities and fought against both NT crew and members of the Syndicate.

-

VirGov officials condemn the Syndicate attack and the group as a whole, stating the organization is nothing more than a terror organization using profit as a justification to kill and maim unarmed civilians. Throughout the chaos surrounding the terror attack, questions about the hostile non-Syndicate elements have been swept aside and ignored. Perhaps we shall never uncover the identity or intentions of the unconfirmed group.

-
+

+ Unknown factions battled across NLS Southern Cross late last weekend. + Confirmed details remain sparse but crew accounts describe a fight between + hostile entities to obtain an object guarded in the station's vault. Crew + insist NanoTrasen instituted penalties over the loss of the object while + NanoTrasen insists no such object exists and the intentions of the hostile + parties remains unconfirmed. +

+

+ The anti-NT terror group known as the Syndicate claimed credit for the attack, + stating it was a targeted assault meant to damage NT assets and send a message + that no NT facility will be safe from damage so long as the company continues + to exist. Details from the crew contest this claim, suggesting some of the + assailants possessed supernatural abilities and fought against both NT crew + and members of the Syndicate. +

+

+ VirGov officials condemn the Syndicate attack and the group as a whole, + stating the organization is nothing more than a terror organization using + profit as a justification to kill and maim unarmed civilians. Throughout the + chaos surrounding the terror attack, questions about the hostile non-Syndicate + elements have been swept aside and ignored. Perhaps we shall never uncover the + identity or intentions of the unconfirmed group. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 07/23/2564

-
+

Medibot Pain Awareness Added (Sponsored by NanoTrasen)

-

The medibot received a software update several days ago. A classic NanoTrasen product commonly deployed on stations with high risk of workplace injury, medibots have long been seen as an important staple to fighting off the dangers of injuries in space. Thanks to this new update medibots are better than ever.

-

”Everybody’s always thinking about the next big product but sometimes you just need to improve the essentials,” an NT mechatronic engineer responded to my correspondence. “So we thought, why not make them more like crew? We couldn’t really fit in thoughts and feelings but it was pretty simple to make a panic response. So now they can feel pain and feel like the rest of the crew.”

-

This new response is easiest observed by tipping a medibot over. The medibot will then cry for help until either somebody helps or it manages to upright itself. Apparently that’s not just a simulation; the medibots are now programmed to actually experience distress when tipped over.

-
+

+ The medibot received a software update several days ago. A classic NanoTrasen + product commonly deployed on stations with high risk of workplace injury, + medibots have long been seen as an important staple to fighting off the + dangers of injuries in space. Thanks to this new update medibots are better + than ever. +

+

+ ”Everybody's always thinking about the next big product but sometimes you just + need to improve the essentials,” an NT mechatronic engineer responded to my + correspondence. “So we thought, why not make them more like crew? We couldn't + really fit in thoughts and feelings but it was pretty simple to make a panic + response. So now they can feel pain and feel like the rest of the crew.” +

+

+ This new response is easiest observed by tipping a medibot over. The medibot + will then cry for help until either somebody helps or it manages to upright + itself. Apparently that's not just a simulation; the medibots are now + programmed to actually experience distress when tipped over. +

+

Writers

Arielle Wood

-
+

Starfire Report - 07/13/2564

-
+

NLS Southern Cross Nearly Crashes

-

An anomalous asteroid struck NLS Southern Cross late last week, nearly forcing the station into a crash course with Sif. After the strike the station entered an unstable orbit but miraculously corrected itself before drifting beyond the point of no return. The exact reasons why the station became unstable and how it stabilized itself remains unknown.

-

Testimony from the crew suggests the asteroid contained a “fractured being” which demanded being “made whole again” or it would fling the station to the planet below. If these accounts are to be believed, Southern Cross’ crew scrambled to reunite the unknown being against the actions of a supernatural antagonist. Once whole, the being corrected the station’s orbit before departing.

-

NanoTrasen denies the stories of the crew as absurd. “The fact is the station’s orbit temporarily became unstable. Considering the asteroid wasn’t nearly massive enough to achieve that is pretty solid evidence of anomalous behavior.” an official NT spokesperson responded to a request for interview. “The crew’s stories are likely a result of hallucinations. The actual cause of orbital destabilization was likely subspace phasing behavior. We have discovered that particular property is common in Sif-bound anomalies.”

+

+ An anomalous asteroid struck NLS Southern Cross late last week, nearly forcing + the station into a crash course with Sif. After the strike the station entered + an unstable orbit but miraculously corrected itself before drifting beyond the + point of no return. The exact reasons why the station became unstable and how + it stabilized itself remains unknown. +

+

+ Testimony from the crew suggests the asteroid contained a “fractured being” + which demanded being “made whole again” or it would fling the station to the + planet below. If these accounts are to be believed, Southern Cross' crew + scrambled to reunite the unknown being against the actions of a supernatural + antagonist. Once whole, the being corrected the station's orbit before + departing. +

+

+ NanoTrasen denies the stories of the crew as absurd. “The fact is the + station's orbit temporarily became unstable. Considering the asteroid wasn't + nearly massive enough to achieve that is pretty solid evidence of anomalous + behavior.” an official NT spokesperson responded to a request for interview. + “The crew's stories are likely a result of hallucinations. The actual cause of + orbital destabilization was likely subspace phasing behavior. We have + discovered that particular property is common in Sif-bound anomalies.” +

The full interview can be found on our exonet site.

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 07/07/2564

-
+

Bioweapon Strikes NLS Southern Cross

-

A mysterious infested ship struck NLS Southern Cross several days prior. Containing some sort of biological material, the ship crashed into Southern Cross’ docks and infested the station with the unknown substance. Details of the ship’s contents remain vague and speculatory.

-

While the crew put up a valiant fight against the threat, the threat proved too powerful to overcome and had to be destroyed with NanoTrasen’s Vir-based bluespace artillery installation. Reserved for serious threats with the potential to spread throughout the system, bluespace artillery is a form of powerful explosive weaponry capable of targeting almost any location within a system. The artillery strike destroyed the threat but likely eradicated any evidence which may have offered clues about the threat’s origin or nature.

-

Speculation abounds about the mysterious ship but the most popular idea suggests the ship was plagued by a dangerous infection and quarantined. If this is the case, the ship has likely drifted in orbit since the quarantine and impacted the station by chance. Other stories suggest the ship may have been a targeted attack but no concrete evidence backs this claim. Despite the lack of evidence, this particular story has resulted in public unrest due to similarities to the mechanical ship attack last month.

-

VirGov officials have stated that the risk of infected ships crashing into Sif is extraordinarily low.

-
+

+ A mysterious infested ship struck NLS Southern Cross several days prior. + Containing some sort of biological material, the ship crashed into Southern + Cross' docks and infested the station with the unknown substance. Details of + the ship's contents remain vague and speculatory. +

+

+ While the crew put up a valiant fight against the threat, the threat proved + too powerful to overcome and had to be destroyed with NanoTrasen's Vir-based + bluespace artillery installation. Reserved for serious threats with the + potential to spread throughout the system, bluespace artillery is a form of + powerful explosive weaponry capable of targeting almost any location within a + system. The artillery strike destroyed the threat but likely eradicated any + evidence which may have offered clues about the threat's origin or nature. +

+

+ Speculation abounds about the mysterious ship but the most popular idea + suggests the ship was plagued by a dangerous infection and quarantined. If + this is the case, the ship has likely drifted in orbit since the quarantine + and impacted the station by chance. Other stories suggest the ship may have + been a targeted attack but no concrete evidence backs this claim. Despite the + lack of evidence, this particular story has resulted in public unrest due to + similarities to the mechanical ship attack last month. +

+

+ VirGov officials have stated that the risk of infected ships crashing into Sif + is extraordinarily low. +

+

Writers

Mirkracresh Kalzar

-
+
- -

Starfire Report – 06/30/2564

-
+

Starfire Report - 06/30/2564

+

Disappearances Amidst Anomalous Measurements

-

A swathe of Southern Cross crew went missing without a trace several days ago, necessitating resleeving for the missing personnel. Details on the disappearances are scant and whether or not the missing crew still live remains unknown. An official NanoTrasen inquiry has turned up no leads.

-

Testimony from the few crew present during the disappearances suggest an unknown visitor appeared with an anomalous item. Further details are conflicting and unclear. While most eyewitness accounts mention an agent or creature visiting the station, the details diverge about anything more specific. Some reports mention a sphere of lightning while others mention a rift to a different reality. No signs of an anomaly or visitor are anywhere to be found though an empty crater was discovered at the alleged location of the anomaly.

-

”We’ve been unable to find anything conclusive. Resleeving of course means the lost crew have no memories of the event.” stated an official NT spokesperson. “We’re offering a monetary reward to anybody who can provide information that somehow leads to the missing crew. Without a stronger lead it’s unlikely we’ll ever determine what happened.”

-
+

+ A swathe of Southern Cross crew went missing without a trace several days ago, + necessitating resleeving for the missing personnel. Details on the + disappearances are scant and whether or not the missing crew still live + remains unknown. An official NanoTrasen inquiry has turned up no leads. +

+

+ Testimony from the few crew present during the disappearances suggest an + unknown visitor appeared with an anomalous item. Further details are + conflicting and unclear. While most eyewitness accounts mention an agent or + creature visiting the station, the details diverge about anything more + specific. Some reports mention a sphere of lightning while others mention a + rift to a different reality. No signs of an anomaly or visitor are anywhere to + be found though an empty crater was discovered at the alleged location of the + anomaly. +

+

+ ”We've been unable to find anything conclusive. Resleeving of course means the + lost crew have no memories of the event.” stated an official NT spokesperson. + “We're offering a monetary reward to anybody who can provide information that + somehow leads to the missing crew. Without a stronger lead it's unlikely we'll + ever determine what happened.” +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 06/25/2564

-
+

SolGov Denies Transhumanist Bill

-

Earlier today SolGov officials struck down a bill which would allow transhumanists to be recognized as a separate species if passed. Despite the heavy push for such a bill over the last several years the motion was rejected by an 80% majority vote. While applauded by the heavily populated core worlds of SolGov space the decision has caused further unrest in mid worlds and frontier worlds. Frontier worlds have taken the news particularly badly, resulting in riots which have already led to martial law in several systems with talk of possible USDF deployment.

-

For those of you who don’t keep up with pop culture, transhumanists are a broad, loosely defined group of “humans with non-human modifications.” They’re not really a formal or united group that agrees on anything (this includes the word “transhumanist” so have fun with that); rather, the term tends to be used and defined by other humans to lump together anybody who may fit this very loose definition. I don’t really have the time to go in-depth here; the complexities of the subject and the various resulting controversies could easily eat up my entire year’s worth of column space. The gist is “transhumanism” usually consists of anybody with a human origin who’s somehow added semi-permanent non-human parts to their body to anybody with a human origin who resides in a non-human non-synthetic body (notably, some extremists lump in anybody with even tiny non-human modifications but these people don’t understand how viral infections would thus mean humans do not exist).

-

The movement to allow transhumanists (I really need to emphasize I’m not using “transhumanist” as a pejorative, there’s simply no other word I can use while writing in Galactic Common) to legally identify as a separate species has been contentious. Largely opposed by the general public of SolGov’s core worlds (and thus the majority of SolGov’s population), the movement formally began several years ago through the demands of TranshumanismInterstellar (THIS). THIS meanwhile is a transhumanist lobbying group with roots in transhumanism exonet discussion boards. Just as infamous for its bad acronym as for its demands, THIS has aggressively pushed for a transhumanism species law through demonstrations and occasionally violent rallies across SolGov frontier and occasionally SolGov mid worlds.

-

As expected, THIS has decried SolGov’s refusal to pass the transhumanism species bill and released an official statement: “Once again SolGov refuses to acknowledge transhumanists for what we are. We have transcending [sic] the limits of humanity and become something better. It is becoming apparent that SolGov will not listen to peaceful protest. If this is the case then we must make them know we will not be peace until we achieve the same rights as every other species in the galaxy.”

-

Various transhumanist groups have been quick to decry both SolGov and THIS. “Yeah, it really sucks that the bill didn’t pass. Yeah, it really sucks that we get treated as less than human but SolGov won’t let us be something different. But violence and rioting aren’t the answer. There’s enough shit in the world, we don’t need to add to it and if we’re going to add to it we probably don’t deserve what we’re asking for.” a representative TheTranshumanTree responded to a request for an interview. An art-sharing exonet site, TheTranshumanTree has become known for strongly advocating firm but peaceful political activism.

-

”Look, THIS doesn’t speak for all of us, they don’t even speak for most of us. And… well, I don’t speak for all of us either so take my words as you will. The only thing most of us usually agrees on is wanting to be accepted or recognized as normal. A lot of us have supported the whole transhumanist species thing but that’s not always because we actually want to be our own species. It’s more… it seemed like the only thing which might get us accepted as something so a lot of us supported it. But the rioting and violence that’s started up… I don’t support this and I firmly believe most of us don’t support it. Just… well, if there’s on take away message I can give to your readers it would have to be this: don’t look at the extremists and assume that’s who we are. Most of us are ordinary people just like everybody else and just like everybody else we want to be accepted and just like everybody else we want to be able to live ordinary lives. We’re people to. Remember that.”

-

For now, only time will tell if the current flames of violence will die out or burn deeper. Tensions in many frontier worlds have been running high for decades and this latest controversy from SolGov has given more fuel to the extremist sects stalking the frontier (despite most of said groups sharing no relevance with the greater transhumanist movement). SolGov has never invested resources in frontier territories; as long as SolGov remains a distant non-provider, violence will breed.

+

+ Earlier today SolGov officials struck down a bill which would allow + transhumanists to be recognized as a separate species if passed. Despite the + heavy push for such a bill over the last several years the motion was rejected + by an 80% majority vote. While applauded by the heavily populated core worlds + of SolGov space the decision has caused further unrest in mid worlds and + frontier worlds. Frontier worlds have taken the news particularly badly, + resulting in riots which have already led to martial law in several systems + with talk of possible USDF deployment. +

+

+ For those of you who don't keep up with pop culture, transhumanists are a + broad, loosely defined group of “humans with non-human modifications.” They're + not really a formal or united group that agrees on anything (this includes the + word “transhumanist” so have fun with that); rather, the term tends to be used + and defined by other humans to lump together anybody who may fit this very + loose definition. I don't really have the time to go in-depth here; the + complexities of the subject and the various resulting controversies could + easily eat up my entire year's worth of column space. The gist is + “transhumanism” usually consists of anybody with a human origin who's + somehow added semi-permanent non-human parts to their body to anybody with a + human origin who resides in a non-human non-synthetic body (notably, some + extremists lump in anybody with even tiny non-human modifications but these + people don't understand how viral infections would thus mean humans do not + exist). +

+

+ The movement to allow transhumanists (I really need to emphasize I'm not using + “transhumanist” as a pejorative, there's simply no other word I can use while + writing in Galactic Common) to legally identify as a separate species has been + contentious. Largely opposed by the general public of SolGov's core worlds + (and thus the majority of SolGov's population), the movement formally began + several years ago through the demands of TranshumanismInterstellar (THIS). + THIS meanwhile is a transhumanist lobbying group with roots in transhumanism + exonet discussion boards. Just as infamous for its bad acronym as for its + demands, THIS has aggressively pushed for a transhumanism species law through + demonstrations and occasionally violent rallies across SolGov frontier and + occasionally SolGov mid worlds. +

+

+ As expected, THIS has decried SolGov's refusal to pass the transhumanism + species bill and released an official statement: “Once again SolGov refuses to + acknowledge transhumanists for what we are. We have transcending [sic] + the limits of humanity and become something better. It is becoming apparent + that SolGov will not listen to peaceful protest. If this is the case then we + must make them know we will not be peace until we achieve the same rights as + every other species in the galaxy.” +

+

+ Various transhumanist groups have been quick to decry both SolGov and THIS. + “Yeah, it really sucks that the bill didn't pass. Yeah, it really sucks that + we get treated as less than human but SolGov won't let us be something + different. But violence and rioting aren't the answer. There's enough shit in + the world, we don't need to add to it and if we're going to add to it we + probably don't deserve what we're asking for.” a representative + TheTranshumanTree responded to a request for an interview. An art-sharing + exonet site, TheTranshumanTree has become known for strongly advocating firm + but peaceful political activism. +

+

+ ”Look, THIS doesn't speak for all of us, they don't even speak for most of us. + And… well, I don't speak for all of us either so take my words as you will. + The only thing most of us usually agrees on is wanting to be accepted or + recognized as normal. A lot of us have supported the whole transhumanist + species thing but that's not always because we actually want to be our own + species. It's more… it seemed like the only thing which might get us accepted + as something so a lot of us supported it. But the rioting and violence that's + started up… I don't support this and I firmly believe most of us don't support + it. Just… well, if there's on take away message I can give to your readers it + would have to be this: don't look at the extremists and assume that's who we + are. Most of us are ordinary people just like everybody else and just like + everybody else we want to be accepted and just like everybody else we want to + be able to live ordinary lives. We're people to. Remember that.” +

+

+ For now, only time will tell if the current flames of violence will die out or + burn deeper. Tensions in many frontier worlds have been running high for + decades and this latest controversy from SolGov has given more fuel to the + extremist sects stalking the frontier (despite most of said groups sharing no + relevance with the greater transhumanist movement). SolGov has never invested + resources in frontier territories; as long as SolGov remains a distant + non-provider, violence will breed. +

The full TheTranshumanTree interview can be viewed on our exonet site.

-
+

Writers

Eshi Sali

-
+

Starfire Report - 06/17/2564

-
+

NLS Southern Cross Renovations (Sponsored by NanoTrasen)

-

Thanks to the crew’s recent performance in preventing the destruction of NLS Southern Cross, NanoTrasen has decided to expand the station with a third-floor addition to the civilian sector. Previously just a featureless roof, the aft section of Southern Cross’ third floor now comes with a large civilian area.

-

The new expansion comes with extra dormitories, another level to the bar complete with a dance pad and small arcade, and a botanical garden on top of the old café. Several upstairs overlooks came with the new area due to strangely common requests for this feature.

-

”We’re always looking for ways to reward employees for being productive,” commented an official NT spokesperson. “They resolved that disaster with the rogue AI ship so cleanly we ended up under budget on the usual cleanup costs. We decided to pass that along to the crew with these new renovations. After all, happy employees make productive employees.”

-
+

+ Thanks to the crew's recent performance in preventing the destruction of NLS + Southern Cross, NanoTrasen has decided to expand the station with a + third-floor addition to the civilian sector. Previously just a featureless + roof, the aft section of Southern Cross' third floor now comes with a large + civilian area. +

+

+ The new expansion comes with extra dormitories, another level to the bar + complete with a dance pad and small arcade, and a botanical garden on top of + the old café. Several upstairs overlooks came with the new area due to + strangely common requests for this feature. +

+

+ ”We're always looking for ways to reward employees for being productive,” + commented an official NT spokesperson. “They resolved that disaster with the + rogue AI ship so cleanly we ended up under budget on the usual cleanup costs. + We decided to pass that along to the crew with these new renovations. After + all, happy employees make productive employees.” +

+

Writers

Arielle Wood

-
+
-

Starfire Report – 06/14/2564

-
+

Starfire Report - 06/14/2564

+

Anomalous Artifacts Impact Station

-

Unusual objects smashed into NLS Southern Cross last night, causing widespread structural damage to the station. After impact the objects catalyzed a variety of unusual effects, releasing aggressive Aetolian giant slimes and triggering widespread explosions. The origin of the objects remains unknown but comments from a xenoarcheologist suggests a precursor origin is most likely due to the unusual abundance of precursor artifacts within the Vir system.

-

Crew testimony suggests a mysterious being manifested on the station to prevent the objects from dealing irreparable harm. Referenced as a “wizard,” the individual allegedly gathered the objects to being “a ritual” meant to prevent the destruction of the station. Said event was allegedly disrupted by a crew member, resulting in widespread devastation, destruction of the artifacts, and the death of the unknown individual and many station crew.

-

”These reports from the crew are ludicrous. Wizards don’t exist outside of children’s books and they certainly don’t appear on space stations to prevent the end of the universe. It’s well established that certain anomalous artifacts cause hallucinations and degradation of mental states. It seems pretty obvious that one of these objects had those properties and resulted in the crew hallucinating a wizard.” an official NT xenoarcheology spokesperson was quick to respond to a request for a video interview. “Look, we don’t know why there were anomalies orbiting Sif. They were probably leftovers which missed us last time this happen but maybe they weren’t, anomalies like to subvert expectations. What we do know is they hit the station, caused chaos, then eventually exploded. That’s not terribly strange when you get a lot of active anomalies in a confined space.”

+

+ Unusual objects smashed into NLS Southern Cross last night, causing widespread + structural damage to the station. After impact the objects catalyzed a variety + of unusual effects, releasing aggressive Aetolian giant slimes and triggering + widespread explosions. The origin of the objects remains unknown but comments + from a xenoarcheologist suggests a precursor origin is most likely due to the + unusual abundance of precursor artifacts within the Vir system. +

+

+ Crew testimony suggests a mysterious being manifested on the station to + prevent the objects from dealing irreparable harm. Referenced as a “wizard,” + the individual allegedly gathered the objects to being “a ritual” meant to + prevent the destruction of the station. Said event was allegedly disrupted by + a crew member, resulting in widespread devastation, destruction of the + artifacts, and the death of the unknown individual and many station crew. +

+

+ ”These reports from the crew are ludicrous. Wizards don't exist outside of + children's books and they certainly don't appear on space stations to prevent + the end of the universe. It's well established that certain anomalous + artifacts cause hallucinations and degradation of mental states. It seems + pretty obvious that one of these objects had those properties and resulted in + the crew hallucinating a wizard.” an official NT xenoarcheology spokesperson + was quick to respond to a request for a video interview. “Look, we don't know + why there were anomalies orbiting Sif. They were probably leftovers which + missed us last time this happen but maybe they weren't, anomalies like to + subvert expectations. What we do know is they hit the station, caused chaos, + then eventually exploded. That's not terribly strange when you get a lot of + active anomalies in a confined space.” +

The full interview can be watched at our exonet site.

-
+

Writers

Mirkracresh Kalzar

-
+
-

Starfire Report – 06/08/2564

-
+

Starfire Report - 06/08/2564

+

Mechanical Ship Infests Station

-

A mysterious unknown ship docked near NanoTrasen’s NLS Southern Cross a couple days ago. Constructed of a hull merged with some sort of organometallic substance, the ship appeared to be less of a traditional ship and more of an advanced robotic entity capable of twisting and perhaps assimilating other metallic structures. Upon docking, the ship began spreading itself throughout the station, twisting everything into what crew could only describe as “warped, durable metal which spread and boxed you in.” The dangers and intent of these structures remain unknown; trapped crew described “walls closing in to crush you” but no casualties were reported from the environment.

-

Crew testimony supports NanoTrasen’s official report of an anomalous ship “infesting” the station with unusual structures. “We think it was some sort of AI experiment which went horribly wrong. We’re still investigating but we’ve been unable to piece together where it came from or why it targeted us. Everything left behind crumbled apart when we tried to study it.” an official NT spokesperson offered a short correspondence over exomail. “Apparently it wrecked the engine before power was up so the crew launched the supermatter core into the ship. Risky but it worked, whatever that ship was wasn’t immune to a supermatter explosion. Surprisingly it was a pretty good call, we might not have a station anymore if they didn’t come up with that idea. The actual damage ended up being minor. We’re considering renovating some civilian areas as a reward for going above and beyond.”

-

While the incident seems to have resolved cleanly, the nature of the mysterious ship has stoked fears raised by the AI attack almost two months prior. Extremist anti-synthetic groups have used the event as an excuse to stage protests in New Reykjavik and demand the abolishment of synthetics being included in galactic sapient rights law. While the recent incident garnered more of a response than typical, said protests remain at the fringes of the wider public.

-

VirGov officials have condemned the protests but declined to comment on the Southern Cross incident.

-
+

+ A mysterious unknown ship docked near NanoTrasen's NLS Southern Cross a couple + days ago. Constructed of a hull merged with some sort of organometallic + substance, the ship appeared to be less of a traditional ship and more of an + advanced robotic entity capable of twisting and perhaps assimilating other + metallic structures. Upon docking, the ship began spreading itself throughout + the station, twisting everything into what crew could only describe as + “warped, durable metal which spread and boxed you in.” The dangers and intent + of these structures remain unknown; trapped crew described “walls closing in + to crush you” but no casualties were reported from the environment. +

+

+ Crew testimony supports NanoTrasen's official report of an anomalous ship + “infesting” the station with unusual structures. “We think it was some sort of + AI experiment which went horribly wrong. We're still investigating but we've + been unable to piece together where it came from or why it targeted us. + Everything left behind crumbled apart when we tried to study it.” an official + NT spokesperson offered a short correspondence over exomail. “Apparently it + wrecked the engine before power was up so the crew launched the supermatter + core into the ship. Risky but it worked, whatever that ship was wasn't immune + to a supermatter explosion. Surprisingly it was a pretty good call, we might + not have a station anymore if they didn't come up with that idea. The actual + damage ended up being minor. We're considering renovating some civilian areas + as a reward for going above and beyond.” +

+

+ While the incident seems to have resolved cleanly, the nature of the + mysterious ship has stoked fears raised by the AI attack almost two months + prior. Extremist anti-synthetic groups have used the event as an excuse to + stage protests in New Reykjavik and demand the abolishment of synthetics being + included in galactic sapient rights law. While the recent incident garnered + more of a response than typical, said protests remain at the fringes of the + wider public. +

+

+ VirGov officials have condemned the protests but declined to comment on the + Southern Cross incident. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 06/02/2564

-
+

NanoTrasen Hides Anomalous Assault

-

Yet again we’ve received tips of anomalous activity at NLS Southern Cross and yet again NanoTrasen has attempted to bury all evidence related to the incident. Unfortunately for the megacorporation, an internal memo threatening a $15,000 fine for the release of information regarding this event ended up in the hands of VirGov’s SolGov Intergalactic Legal Compliance office yesterday morning. Unfortunately for NanoTrasen, SolGov launched an official inquiry this morning and released a statement that it shall be thoroughly investigating NanoTrasen’s operations in the Vir system over the coming months.

-

Despite the threat of a fine, we here at the Starfire Report managed to get our hands on several recordings and eyewitness reports of the events three days ago. The appearance of seemingly supernatural teleporting beings appeared in all forms of evidence, often referenced as “demons” in eyewitness testimony. Video captured blood and gore spilling from disposal outlets as well as unusual ritualistic structures placed around the station. Crew described attacks from twisted lifeforms (specifically not the beings referred to as “demons”) worsening with the amount of blood strewn about the station.

-

If these events seem absurd or made-up, you’re not alone in expressing this skepticism. The evidence we obtained has been very difficult to piece together and even consistent themes seem outlandish. Either some element of truth exists despite the absurdity or somebody managed to put together a hoax so elaborate that several dozen station crew fell for it. The only aspect we’re confident about is NanoTrasen refusing to share the full story. The corporation did not respond to several requests for interviews and maintains nothing unusual transpired. Threatening a $15,000 fine however tells a different story.

-
+

+ Yet again we've received tips of anomalous activity at NLS Southern Cross and + yet again NanoTrasen has attempted to bury all evidence related to the + incident. Unfortunately for the megacorporation, an internal memo threatening + a $15,000 fine for the release of information regarding this event ended up in + the hands of VirGov's SolGov Intergalactic Legal Compliance office yesterday + morning. Unfortunately for NanoTrasen, SolGov launched an official inquiry + this morning and released a statement that it shall be thoroughly + investigating NanoTrasen's operations in the Vir system over the coming + months. +

+

+ Despite the threat of a fine, we here at the Starfire Report managed to get + our hands on several recordings and eyewitness reports of the events three + days ago. The appearance of seemingly supernatural teleporting beings appeared + in all forms of evidence, often referenced as “demons” in eyewitness + testimony. Video captured blood and gore spilling from disposal outlets as + well as unusual ritualistic structures placed around the station. Crew + described attacks from twisted lifeforms (specifically not the beings referred + to as “demons”) worsening with the amount of blood strewn about the station. +

+

+ If these events seem absurd or made-up, you're not alone in expressing this + skepticism. The evidence we obtained has been very difficult to piece together + and even consistent themes seem outlandish. Either some element of truth + exists despite the absurdity or somebody managed to put together a hoax so + elaborate that several dozen station crew fell for it. The only aspect we're + confident about is NanoTrasen refusing to share the full story. The + corporation did not respond to several requests for interviews and maintains + nothing unusual transpired. Threatening a $15,000 fine however tells a + different story. +

+

Writers

Eshi Sali

-
+

Starfire Report - 06/01/2564

-
+

NanoTrasen Freedom of Information Suit Settled

-

So if you’re the sort to closely follow legal proceedings you might know we here at Starfire have been engaged in a lawsuit with NanoTrasen for a couple years now. But if you’re not a lawyer, well, now you know. We can’t get into the details other than to say we settled and settled favorably since the terms of settlement involve us not reporting on the details of the case.

-

What we can tell you is part of the settlement requires NanoTrasen to provide free access to our station which is the main point of this article. If you’re a new NT reader checking us out for the first time, welcome! We are the Starfire Report, an independent news agency committed to covering stories in the Vir system and beyond. We are not part of NanoTrasen and will disclose if any stories are sponsored by NanoTrasen.

-

If you’re looking for access to our channel (maybe you’re reading this on a friend’s device), just ask NanoTrasen for a Starcaster and you’ll be given one free of charge. We look forward to keeping you informed and up to date.

-
+

+ So if you're the sort to closely follow legal proceedings you might know we + here at Starfire have been engaged in a lawsuit with NanoTrasen for a couple + years now. But if you're not a lawyer, well, now you know. We can't get into + the details other than to say we settled and settled favorably since the terms + of settlement involve us not reporting on the details of the case. +

+

+ What we can tell you is part of the settlement requires NanoTrasen to provide + free access to our station which is the main point of this article. If you're + a new NT reader checking us out for the first time, welcome! We are the + Starfire Report, an independent news agency committed to covering stories in + the Vir system and beyond. We are not part of NanoTrasen and will disclose if + any stories are sponsored by NanoTrasen. +

+

+ If you're looking for access to our channel (maybe you're reading this on a + friend's device), just ask NanoTrasen for a Starcaster and you'll be given one + free of charge. We look forward to keeping you informed and up to date. +

+

Writers

Eshi Sali

-
+

Starfire Report - 05/09/2564

-
+

NanoTrasen Asset Protection Deployed

-

Panic struck NCS Northern Star late last night as an explosion rocked the station shortly after Central Command received an anonymous tip warning about a covert Syndicate attack. Unprepared for an actual attack (“We get about thirty of these tips daily. Usually it’s just spam from bored teens,” stated Northern Star Chief of Security), NanoTrasen rapidly deployed a reserve Emergency Response Team and an Asset Protection team just returned from anti-piracy raids.

-

Details of the assault are vague at best. Eyewitness testimony describes a NanoTrasen-branded drop pod smashing through the ceiling and releasing a dozen heavily-armed men, a Dark Gygax, and a Phazon. “’We’re not going to let those ERT fucks beat us to the punch!’ They kept chanting that while running down the hallway, shutters dropping as everything vented through the hole in the ceiling,” remarked the eyewitness (who requested anonymity out of fear of Asset Protection). “Running and shooting. I couldn’t hear the gunshots soon after the shutters went down but I did hear a couple more dull booms. I just assumed it was the guy with the RPG.”

-

The Emergency Response Team chose a different approach. “I went for the cameras. It’s a bad idea to go in guns blazing, Syndicates usually expect that and you end up with casualties,” Lt. Karora shared over a communicator call. As part of NT’s mysterious PCRU division, Karora specializes in reducing the risk of NT crews opening fire on ERT units. “Plus CC’s message was rushed and incoherent, it was a good indicator they didn’t know what we were dealing with. The recordings were pretty clear, some idiot brought a Durand over from Southern Cross during crew transfer and shot a missile before clearing out. Nothing nefarious at all, just incompetence.”

-

”But then Asset Protection ran into view and opened fire. Ballistics, lasers, grenades. The Durand was a pile of scrap in seconds but they just kept firing. They didn’t stop and check until half the docks were gone. Then they left. The whole thing has been a massive embarrassment. That’s thousands in damage because somebody took a joyride in a combat mech.”

-

Asset Protection had only one comment to share with us. “A fucking Durand!”

-
+

+ Panic struck NCS Northern Star late last night as an explosion rocked the + station shortly after Central Command received an anonymous tip warning about + a covert Syndicate attack. Unprepared for an actual attack (“We get about + thirty of these tips daily. Usually it's just spam from bored teens,” stated + Northern Star Chief of Security), NanoTrasen rapidly deployed a reserve + Emergency Response Team and an Asset Protection team just returned from + anti-piracy raids. +

+

+ Details of the assault are vague at best. Eyewitness testimony describes a + NanoTrasen-branded drop pod smashing through the ceiling and releasing a dozen + heavily-armed men, a Dark Gygax, and a Phazon. “'We're not going to let those + ERT fucks beat us to the punch!' They kept chanting that while running down + the hallway, shutters dropping as everything vented through the hole in the + ceiling,” remarked the eyewitness (who requested anonymity out of fear of + Asset Protection). “Running and shooting. I couldn't hear the gunshots soon + after the shutters went down but I did hear a couple more dull booms. I just + assumed it was the guy with the RPG.” +

+

+ The Emergency Response Team chose a different approach. “I went for the + cameras. It's a bad idea to go in guns blazing, Syndicates usually expect that + and you end up with casualties,” Lt. Karora shared over a communicator call. + As part of NT's mysterious PCRU division, Karora specializes in reducing the + risk of NT crews opening fire on ERT units. “Plus CC's message was rushed and + incoherent, it was a good indicator they didn't know what we were dealing + with. The recordings were pretty clear, some idiot brought a Durand over from + Southern Cross during crew transfer and shot a missile before clearing out. + Nothing nefarious at all, just incompetence.” +

+

+ ”But then Asset Protection ran into view and opened fire. Ballistics, lasers, + grenades. The Durand was a pile of scrap in seconds but they just kept firing. + They didn't stop and check until half the docks were gone. Then they left. The + whole thing has been a massive embarrassment. That's thousands in damage + because somebody took a joyride in a combat mech.” +

+

+ Asset Protection had only one comment to share with us. “A fucking Durand!” +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 05/02/2564

-
+

The Mysteries of the Void (Guest Piece)

-

Despite its ubiquity in every facet of modern life, the riddles and nature of outer space and the wider universe continue to defy our understanding and demonstrate how little we truly know about the mysteries of existence. We dig up ancient civilizations with physics-defying technology and simply chalk it to “redspace” as if that explains their nature. We gather phoron to warp time and space in inexplicable ways without pausing to consider what scars we tear into the fabric of reality.

-

What shall we do when things beyond comprehension crawl through the holes we tear and further fray the fabric? Cover it up like NanoTrasen’s attempts to hide demonic incursions into the crew of NLS Southern Cross? Shall we continue hiding it as evidence piles too high to ignore, as the foundations of daily life erode and collapse? Just today Southern Cross was visited by a faction wielding reality-bending technology so potent we would call it magic. Just today NanoTrasen once again denied the anomalous events even as crew insist otherwise. Once again eye witnesses are regarded as madmen as those with wealth throw a shroud over truth.

-

But you, dear reader, shall likely brush me aside like every other inconvenient truth you walked over today. Until, of course, a demon manifests on your doorstep.

-
+

+ Despite its ubiquity in every facet of modern life, the riddles and nature of + outer space and the wider universe continue to defy our understanding and + demonstrate how little we truly know about the mysteries of existence. We dig + up ancient civilizations with physics-defying technology and simply chalk it + to “redspace” as if that explains their nature. We gather phoron to warp time + and space in inexplicable ways without pausing to consider what scars we tear + into the fabric of reality. +

+

+ What shall we do when things beyond comprehension crawl through the holes we + tear and further fray the fabric? Cover it up like NanoTrasen's attempts to + hide demonic incursions into the crew of NLS Southern Cross? Shall we continue + hiding it as evidence piles too high to ignore, as the foundations of daily + life erode and collapse? Just today Southern Cross was visited by a faction + wielding reality-bending technology so potent we would call it magic. Just + today NanoTrasen once again denied the anomalous events even as crew insist + otherwise. Once again eye witnesses are regarded as madmen as those with + wealth throw a shroud over truth. +

+

+ But you, dear reader, shall likely brush me aside like every other + inconvenient truth you walked over today. Until, of course, a demon manifests + on your doorstep. +

+

Writers

Zumma

-
+
-

Starfire Report - 05/01/2564

-
+

Starfire Report - 05/01/2564

+

What Happened to Culinary Arts? (Guest Piece)

-

You’d think everybody would have food straight in this day and age but we still don’t. I don’t know what it is with space-farers but they just cram everything they can find into a microwave and hope it spits out delicious meals. I don’t care how good the result looks, it’s just not going to taste as good as anything made by a proper chef.

-

The crew on Southern Cross are some of Sif’s worst offenders. Earlier today some guy created a burrito bigger than a teshari by just cramming shit into a microwave until it’s ready to burst. The thing is so massive you could smash a windshield with it. Given it came out of a microwave I bet the inside is frozen enough to do so.

-

Come on people, microwaves aren’t the future. Make some real food already.

-
+

+ You'd think everybody would have food straight in this day and age but we + still don't. I don't know what it is with space-farers but they just cram + everything they can find into a microwave and hope it spits out delicious + meals. I don't care how good the result looks, it's just not going to taste as + good as anything made by a proper chef. +

+

+ The crew on Southern Cross are some of Sif's worst offenders. Earlier today + some guy created a burrito bigger than a teshari by just cramming shit into a + microwave until it's ready to burst. The thing is so massive you could smash a + windshield with it. Given it came out of a microwave I bet the inside is + frozen enough to do so. +

+

+ Come on people, microwaves aren't the future. Make some real food already. +

+

Writers

Ino Stern

-
+

Starfire Report - 04/29/2564

-
+

Spiders Swarm Ullran Expanse

-

Invasive giant spiders swarmed the Ullran Expanse in record numbers late last night. Estimated to number in the thousands, the swarm devoured all indigenous wildlife and assaulted personnel within NanoTrasen’s secretive Ullran outpost. The full extent of the damage to the local ecosystem remains unknown and will likely be a major component of next month’s VGA State of Sif Address in New Reykjavik.

-

The cause of the spider surge remains unknown but was quickly brought under control by an extermination effort from Southern Cross crew. Led by NT’s PCRU division, Southern Cross personnel engaged in a bloody, hours long war which left the Ullran plains covered in gore and spider remains. Eyewitness testimony suggests the swarm has been eradicated; tentative surveys throughout the day suggest giant spider numbers have dropped back to the pre-swarm population.

-

”As the only permanent installation in the Ullran Expanse, we saw it as our duty to ensure the spider infestation could not spread and wreck further havoc,” stated an NanoTrasen spokesperson. “We take Sif’s ecological record very seriously. Negligence by unreputable corporations gave giant spiders a foothold on Sif. Allowing them to overrun the wilds just isn’t an option. If that means we alone have to stand against [the spiders], then so be it.”

-

The cause of the infestation remains a source of speculation. Several sources directly involved in the eradication state an experimental weapon designed by the Syndicate attracted the spiders as a targeted attack against Southern Cross and a blunder by the PCRU squad prevented the device from being destroyed before activation. The NT spokesperson dismissed these rumors as “ludicrous” and stated the PCRU was not involved due to preemptive knowledge of the situation but because they were the only squad in the Vir system at the time of the attack.

+

+ Invasive giant spiders swarmed the Ullran Expanse in record numbers late last + night. Estimated to number in the thousands, the swarm devoured all indigenous + wildlife and assaulted personnel within NanoTrasen's secretive Ullran outpost. + The full extent of the damage to the local ecosystem remains unknown and will + likely be a major component of next month's VGA State of Sif Address in New + Reykjavik. +

+

+ The cause of the spider surge remains unknown but was quickly brought under + control by an extermination effort from Southern Cross crew. Led by NT's PCRU + division, Southern Cross personnel engaged in a bloody, hours long war which + left the Ullran plains covered in gore and spider remains. Eyewitness + testimony suggests the swarm has been eradicated; tentative surveys throughout + the day suggest giant spider numbers have dropped back to the pre-swarm + population. +

+

+ ”As the only permanent installation in the Ullran Expanse, we saw it as our + duty to ensure the spider infestation could not spread and wreck further + havoc,” stated an NanoTrasen spokesperson. “We take Sif's ecological record + very seriously. Negligence by unreputable corporations gave giant spiders a + foothold on Sif. Allowing them to overrun the wilds just isn't an option. If + that means we alone have to stand against [the spiders], then so be it.” +

+

+ The cause of the infestation remains a source of speculation. Several sources + directly involved in the eradication state an experimental weapon designed by + the Syndicate attracted the spiders as a targeted attack against Southern + Cross and a blunder by the PCRU squad prevented the device from being + destroyed before activation. The NT spokesperson dismissed these rumors as + “ludicrous” and stated the PCRU was not involved due to preemptive knowledge + of the situation but because they were the only squad in the Vir system at the + time of the attack. +

Myelamine prices have hit an all-time low on Sif.

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 04/26/2564

-
+

Volcanic Ash Settles

-

A massive cloud of volcanic ash finally dispersed today. A recent volcanic eruption resulted in an ash cloud thick enough to blot out all sunlight over the Ullran Expanse. While the ash has not completely settled out, enough has washed to the ground to once again allow sunlight to reach the earth.

-

The ash cloud has been unusual in persisting almost entirely over the Ullran Expanse and nowhere else on Sif. NanoTrasen has declined to comment on whether or not testing in their Ullran facility may have been linked to this atmospheric anomaly.

-
+

+ A massive cloud of volcanic ash finally dispersed today. A recent volcanic + eruption resulted in an ash cloud thick enough to blot out all sunlight over + the Ullran Expanse. While the ash has not completely settled out, enough has + washed to the ground to once again allow sunlight to reach the earth. +

+

+ The ash cloud has been unusual in persisting almost entirely over the Ullran + Expanse and nowhere else on Sif. NanoTrasen has declined to comment on whether + or not testing in their Ullran facility may have been linked to this + atmospheric anomaly. +

+

Writers

Eshi Sali

-
+

Starfire Report - 04/26/2564

-
+

Ullran Outpost Renovated (Sponsored by NanoTrasen)

-

Due to employee feedback, NanoTrasen has decided to fully renovate its Ullran Expanse installation. Formerly several distinct buildings haphazardly scattered about, the new outpost is an interconnected unit kept secure behind a chain-link fence.

-

The new outpost features a plethora of improvements for leisurely activity. From extended sleeping quarters to a boxing ring, new pool, and sauna, crew are certain to be pleased with the renovations. Ships now land inside to avoid the cold and fishing is now just a short walk from the southern airlocks.

-

”We take the emotional wellbeing of our employees very seriously,” commented an official NT spokesperson. “What better way to show our appreciation than to provide better facilities for taking a break? We’re certain this will improve morale and boost productivity.”

-
+

+ Due to employee feedback, NanoTrasen has decided to fully renovate its Ullran + Expanse installation. Formerly several distinct buildings haphazardly + scattered about, the new outpost is an interconnected unit kept secure behind + a chain-link fence. +

+

+ The new outpost features a plethora of improvements for leisurely activity. + From extended sleeping quarters to a boxing ring, new pool, and sauna, crew + are certain to be pleased with the renovations. Ships now land inside to avoid + the cold and fishing is now just a short walk from the southern airlocks. +

+

+ ”We take the emotional wellbeing of our employees very seriously,” commented + an official NT spokesperson. “What better way to show our appreciation than to + provide better facilities for taking a break? We're certain this will improve + morale and boost productivity.” +

+

Writers

Arielle Wood

-
- +

Starfire Report - 04/19/2564

-
+

Rampant AI Strikes

-

A swarm of unbranded hive bots swarmed NLS Southern Cross late last night, reportedly due to either a container crashing into the station or an unidentified ship docking with it. NanoTrasen crew valiantly fought off the rogue swarm; an official NT spokesman insists the mysterious swarm has been completely destroyed and there is no risk of further attack.

-

Eyewitness testimony from Southern Cross crew suggests the hive pursued a group of unlawed cyborgs to Southern Cross but offered no unanimous answers as to why a hivebot swarm targeted a group of cyborgs. Some suggested the cyborgs were an advanced form of hivebot, others stated the hivebot swarm acted at the behest of a corrupted AI seeking to take prisoners. Another common theme was the aid of an outside agent but no crew could provide details about this unknown entity.

-

This attack has fueled concerns about the dangers of replicating low-intelligence AI. Occasionally used in pirate extortion tactics, hivebots are aggressive autonomous robots which can self-replicate in environments with abundant steel and can be difficult to eradicate. Evidence of hivebots mounting largescale attacks without directive from sapient life is rare. The possibility of a hivebot swarm developing advanced intelligence with the capability of travelling between planets is a cause for alarm.

-

SolGov is expected to release a statement regarding the hivebots later in the week.

-
+

+ A swarm of unbranded hive bots swarmed NLS Southern Cross late last night, + reportedly due to either a container crashing into the station or an + unidentified ship docking with it. NanoTrasen crew valiantly fought off the + rogue swarm; an official NT spokesman insists the mysterious swarm has been + completely destroyed and there is no risk of further attack. +

+

+ Eyewitness testimony from Southern Cross crew suggests the hive pursued a + group of unlawed cyborgs to Southern Cross but offered no unanimous answers as + to why a hivebot swarm targeted a group of cyborgs. Some suggested the cyborgs + were an advanced form of hivebot, others stated the hivebot swarm acted at the + behest of a corrupted AI seeking to take prisoners. Another common theme was + the aid of an outside agent but no crew could provide details about this + unknown entity. +

+

+ This attack has fueled concerns about the dangers of replicating + low-intelligence AI. Occasionally used in pirate extortion tactics, hivebots + are aggressive autonomous robots which can self-replicate in environments with + abundant steel and can be difficult to eradicate. Evidence of hivebots + mounting largescale attacks without directive from sapient life is rare. The + possibility of a hivebot swarm developing advanced intelligence with the + capability of travelling between planets is a cause for alarm. +

+

+ SolGov is expected to release a statement regarding the hivebots later in the + week. +

+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 04/07/2564

-
+

Grayson Class Action Suit Settled

-

A decades-long class action lawsuit against Grayson Manufactories Ltd. has finally reached an out-of-court settlement. For those of you not in the know, Grayson was implicated in a scandal fifty years ago over their standard line of workhorse ore refineries. Due to a flaw in the phoron compressing chamber, processing phoron with a Grayson refinery produced trace amounts of an unknown highly neurotoxic gas. Studies since this discovery have determined the gas is a chronic toxin at the levels workers were exposed to, now known to trigger neurological disorders and neural degradation over long term exposure. The gas is particularly nefarious by almost entirely lacking unique exposure symptoms; the only telltale symptom of exposure is an auditory hallucination where all footsteps sound like walking over a metal hull. This particular symptom has fueled countless conspiracy theories about all planets secretly being ancient hollow spacecraft.

-

According to the lawsuit, Grayson allegedly produced faulty refineries with knowledge of the toxic byproduct and attempted to cover up its knowledge of the flaw once discovered by the general public. The terms of the settlement remain private but do not involve Grayson publicly admitting fault for the millions of workers irreversibly harmed by faulty phoron refineries. If you have been diagnosed with a neurological disorder and have worked in a phoron processing facility with a Grayson refinery, you have up to 30 days to claim compensation from Grayson’s exonet site. Persistence is recommended as the site has been down due to heavy traffic since the settlement was announced last week.

-

Emboldened by the settlement, workers at NanoTrasen began organizing a class action lawsuit due to reports of similar symptoms at NT facilities. Curiously, tests conducted at NT facilities over the previous several days found no trace of the neurotoxic gas. Workers stated the hallucinations had subsided but were present just last week. Accusations abound that NT rectified the issue just before the Grayson case settled to prevent a similar lawsuit but no record exists of NT recently upgrading its refineries or of its refineries having ever produced the gas.

-

NanoTrasen insists it has always used a proprietary refinery design which never produced toxic gas. Workers claim otherwise, dredging up years of accusations from Grayson that NT’s mining equipment not only violates Grayson patents but copies Grayson designs down to the smallest detail. Unfortunately for workers, medical records of nonspecific neurological symptoms are the only hard evidence the lawsuit possesses. Without more evidence, the lawsuit shall likely collapse by next month.

-

Conspiracy theorists claim Grayson deliberately utilized a faulty refinery design to ensure NanoTrasen would steal a faulty model. Like all legal battles against trans-stellar corporations, accusations abound while documentation goes missing.

-
+

+ A decades-long class action lawsuit against Grayson Manufactories Ltd. has + finally reached an out-of-court settlement. For those of you not in the know, + Grayson was implicated in a scandal fifty years ago over their standard line + of workhorse ore refineries. Due to a flaw in the phoron compressing chamber, + processing phoron with a Grayson refinery produced trace amounts of an unknown + highly neurotoxic gas. Studies since this discovery have determined the gas is + a chronic toxin at the levels workers were exposed to, now known to trigger + neurological disorders and neural degradation over long term exposure. The gas + is particularly nefarious by almost entirely lacking unique exposure symptoms; + the only telltale symptom of exposure is an auditory hallucination where all + footsteps sound like walking over a metal hull. This particular symptom has + fueled countless conspiracy theories about all planets secretly being ancient + hollow spacecraft. +

+

+ According to the lawsuit, Grayson allegedly produced faulty refineries with + knowledge of the toxic byproduct and attempted to cover up its knowledge of + the flaw once discovered by the general public. The terms of the settlement + remain private but do not involve Grayson publicly admitting fault for the + millions of workers irreversibly harmed by faulty phoron refineries. If you + have been diagnosed with a neurological disorder and have worked in a phoron + processing facility with a Grayson refinery, you have up to 30 days to claim + compensation from Grayson's exonet site. Persistence is recommended as the + site has been down due to heavy traffic since the settlement was announced + last week. +

+

+ Emboldened by the settlement, workers at NanoTrasen began organizing a class + action lawsuit due to reports of similar symptoms at NT facilities. Curiously, + tests conducted at NT facilities over the previous several days found no trace + of the neurotoxic gas. Workers stated the hallucinations had subsided but were + present just last week. Accusations abound that NT rectified the issue just + before the Grayson case settled to prevent a similar lawsuit but no record + exists of NT recently upgrading its refineries or of its refineries having + ever produced the gas. +

+

+ NanoTrasen insists it has always used a proprietary refinery design which + never produced toxic gas. Workers claim otherwise, dredging up years of + accusations from Grayson that NT's mining equipment not only violates Grayson + patents but copies Grayson designs down to the smallest detail. Unfortunately + for workers, medical records of nonspecific neurological symptoms are the only + hard evidence the lawsuit possesses. Without more evidence, the lawsuit shall + likely collapse by next month. +

+

+ Conspiracy theorists claim Grayson deliberately utilized a faulty refinery + design to ensure NanoTrasen would steal a faulty model. Like all legal battles + against trans-stellar corporations, accusations abound while documentation + goes missing. +

+

Writers

Eshi Sali

-
+

Starfire Report - 03/22/2564

-
+

Anomalies Smash Outpost

-

Once again we see NanoTrasen’s Ullran Expanse installment featuring in our column. This time it’s due to a peculiar meteor shower allegedly made up of mysterious anomalous artifacts which smashed directly into the outpost while leaving the vast empty expanse of the surrounding plains untouched. At least if the crew are to be believed, NT is remaining tight-lipped and will only confirm “objects” destroyed the installation.

-

According to the crew, a ship of vox lost the objects in some sort of attack and needed to retrieve them to make repairs and leave. Said vox crew was apparently secretive and openly suspicious of Southern Cross’s crew, enough so one Cargo Technician to request advice on how to submit a Hurt Feelings Report. Given both NanoTrasen and SolGov’s track record with vox (the latter doesn’t even offer vox basic sapient rights!), this is both expected and likely warranted.

-

Why NanoTrasen refuses to comment on this incident is anybody’s guess. Were they planning to steal something from the vox? Are they embarrassed they failed to steal anything? Did they launch the attack which stranded the vox on Sif? I could speculate all day and get no closer to a definitive answer. As usual there’s likely more than meets the eye but no way to uncover the truth.

-
+

+ Once again we see NanoTrasen's Ullran Expanse installment featuring in our + column. This time it's due to a peculiar meteor shower allegedly made up of + mysterious anomalous artifacts which smashed directly into the outpost while + leaving the vast empty expanse of the surrounding plains untouched. At least + if the crew are to be believed, NT is remaining tight-lipped and will only + confirm “objects” destroyed the installation. +

+

+ According to the crew, a ship of vox lost the objects in some sort of attack + and needed to retrieve them to make repairs and leave. Said vox crew was + apparently secretive and openly suspicious of Southern Cross's crew, enough so + one Cargo Technician to request advice on how to submit a Hurt Feelings + Report. Given both NanoTrasen and SolGov's track record with vox (the latter + doesn't even offer vox basic sapient rights!), this is both expected and + likely warranted. +

+

+ Why NanoTrasen refuses to comment on this incident is anybody's guess. Were + they planning to steal something from the vox? Are they embarrassed they + failed to steal anything? Did they launch the attack which stranded the vox on + Sif? I could speculate all day and get no closer to a definitive answer. As + usual there's likely more than meets the eye but no way to uncover the truth. +

+

Writers

Eshi Sali

-
+

Starfire Report - 03/11/2564

-
+

PCRU Saves Ullran Expanse (Special Report)

-

Several days back an explosion wracked the Ullran Expanse with enough force to trigger Richter scales all the way in New Reykjavik. Exactly what happened has made waves through the media here in Vir and beyond. Rumors and misinformation abound so we here at Starfire decided to set the facts straight.

-

The events begin with NanoTrasen’s NLS Southern Cross space station and a planned attack by the terrorist organization known as the Syndicate. NT has remained tight-lipped on the details here due to security concerns but revealed the plans were uncovered early enough to dispatch its “Preemptive Chaos Response Unit” (PCRU) before the Syndicate could launch the attack.

-

”Given the scope of what happened here we’re being as transparent as we can be without risking our intelligence teams. I might be stating the obvious but the Syndicate reads the news,” an official NT spokesperson was quick to respond to our requests for an interview. The full interview can be found on our exonet site. “I guess the simplest way to put it is the Syndicate built a giant experimental gun mech. And when I say giant, I mean the kind of thing you’d see on a USDF flagship. It was designed to blast space stations out of orbit from the planet’s surface. We still don’t know how the Syndicate transported this thing to the Ullran wilderness without us finding out about it but there it was, just a few hours away from blowing Southern Cross out of the sky. There’s no force on Sif which could’ve gotten to that thing with just a couple hours’ notice so we had to send the PCRU.”

-

A relatively new and secretive division of NanoTrasen’s Emergency Response Team, the PCRU specializes in tackling major threats before they become major emergencies. “The higher-ups weren’t all that keen on handing this over to the PCRU but ultimately we didn’t have a choice. Asset Protection wasn’t available to respond that quickly and the rest of the ERT was caught up with an attack on Northern Star. Probably a diversion in retrospect. But that’s what we have the PCRU for and why we were able to save Southern Cross. Just… well, thing is this was the biggest threat in the entire history of the PCRU. This was going to make or break the division’s existence.”

-

”I can’t really get into the details on the PCRU’s inner workings, only that they deal with very extreme threats. They did far better than anybody was expecting for a new program,” reported to consist of only three operatives, the PCRU disrupted the initial bombardment of NLS Southern Cross and recruited the station’s crew as a militia to destroy the heavily guarded Syndicate weapon. “Casualties were minimal, station damage was minimal, the crew didn’t try killing the PCRU. They just banded together and assaulted the weapon. The PCRU commander spoke highly of the crew and the bravery they displayed taking on a small Syndicate army. She recommended medals for everybody who joined the fight. Station’s still standing so that’s probably going to happen.”

-

When asked about the explosion and rumors of a nuclear bomb, the spokesperson laughed. “Yeah, Ullran didn’t get nuked and we can prove it because our outpost is still standing without a scratch. You’re probably going to want to ask VirGov about the details of the explosion once they’re done investigating because we don’t know the specifics. What we do know is the Syndicate bombed the area once the mech was destroyed, probably to try and kill our guys and obliterate the remains of the weapon. The damage is pretty serious but that’s what you get when people fund a terrorist organization. They wouldn’t think twice about poisoning all the waters of Sif to somehow get at us.”

-

Our requests for interviews with the VirGov officials carrying out the investigation of the Ullran investigation were declined. The VGA released an official statement stating NanoTrasen has shown full compliance so far in the investigation and is likely not culpable for the damage to the Ullran Expanse. The actions of Southern Cross’s crew were commendable and the PCRU squad responsible for destroying the mech may be considered for Vir Medals of Honor.

-

The PCRU squad similarly declined requests for interview but provided a message with a request we share it in place of a full interview. “I know everybody’s going to be disappointed we aren’t taking interviews over the Ullran incident but we’re busy, terrorist stuff like this doesn’t take a break for celebrations. Think is, we’re not the ones you should be clamoring to interview. We were just the leaders; the real heroes that day were the crew of Southern Cross. We would have died and lost the station on our own; the crew is why we’re celebrating instead of worrying about where the remains of Southern Cross will crash into Sif. These are ordinary civilians just like you who went above and beyond to thwart mass murder. You want somebody to praise and interview? Look among the crew because they are the ones who deserve your respect and awe.”

-
+

+ Several days back an explosion wracked the Ullran Expanse with enough force to + trigger Richter scales all the way in New Reykjavik. Exactly what happened has + made waves through the media here in Vir and beyond. Rumors and misinformation + abound so we here at Starfire decided to set the facts straight. +

+

+ The events begin with NanoTrasen's NLS Southern Cross space station and a + planned attack by the terrorist organization known as the Syndicate. NT has + remained tight-lipped on the details here due to security concerns but + revealed the plans were uncovered early enough to dispatch its “Preemptive + Chaos Response Unit” (PCRU) before the Syndicate could launch the attack. +

+

+ ”Given the scope of what happened here we're being as transparent as we can be + without risking our intelligence teams. I might be stating the obvious but the + Syndicate reads the news,” an official NT spokesperson was quick to respond to + our requests for an interview. The full interview can be found on our exonet + site. “I guess the simplest way to put it is the Syndicate built a giant + experimental gun mech. And when I say giant, I mean the kind of thing you'd + see on a USDF flagship. It was designed to blast space stations out of orbit + from the planet's surface. We still don't know how the Syndicate transported + this thing to the Ullran wilderness without us finding out about it but there + it was, just a few hours away from blowing Southern Cross out of the sky. + There's no force on Sif which could've gotten to that thing with just a couple + hours' notice so we had to send the PCRU.” +

+

+ A relatively new and secretive division of NanoTrasen's Emergency Response + Team, the PCRU specializes in tackling major threats before they become major + emergencies. “The higher-ups weren't all that keen on handing this over to the + PCRU but ultimately we didn't have a choice. Asset Protection wasn't available + to respond that quickly and the rest of the ERT was caught up with an attack + on Northern Star. Probably a diversion in retrospect. But that's what we have + the PCRU for and why we were able to save Southern Cross. Just… well, thing is + this was the biggest threat in the entire history of the PCRU. This was going + to make or break the division's existence.” +

+

+ ”I can't really get into the details on the PCRU's inner workings, only that + they deal with very extreme threats. They did far better than anybody was + expecting for a new program,” reported to consist of only three operatives, + the PCRU disrupted the initial bombardment of NLS Southern Cross and recruited + the station's crew as a militia to destroy the heavily guarded Syndicate + weapon. “Casualties were minimal, station damage was minimal, the crew didn't + try killing the PCRU. They just banded together and assaulted the weapon. The + PCRU commander spoke highly of the crew and the bravery they displayed taking + on a small Syndicate army. She recommended medals for everybody who joined the + fight. Station's still standing so that's probably going to happen.” +

+

+ When asked about the explosion and rumors of a nuclear bomb, the spokesperson + laughed. “Yeah, Ullran didn't get nuked and we can prove it because our + outpost is still standing without a scratch. You're probably going to want to + ask VirGov about the details of the explosion once they're done investigating + because we don't know the specifics. What we do know is the Syndicate bombed + the area once the mech was destroyed, probably to try and kill our guys and + obliterate the remains of the weapon. The damage is pretty serious but that's + what you get when people fund a terrorist organization. They wouldn't think + twice about poisoning all the waters of Sif to somehow get at us.” +

+

+ Our requests for interviews with the VirGov officials carrying out the + investigation of the Ullran investigation were declined. The VGA released an + official statement stating NanoTrasen has shown full compliance so far in the + investigation and is likely not culpable for the damage to the Ullran Expanse. + The actions of Southern Cross's crew were commendable and the PCRU squad + responsible for destroying the mech may be considered for Vir Medals of Honor. +

+

+ The PCRU squad similarly declined requests for interview but provided a + message with a request we share it in place of a full interview. “I know + everybody's going to be disappointed we aren't taking interviews over the + Ullran incident but we're busy, terrorist stuff like this doesn't take a break + for celebrations. Think is, we're not the ones you should be clamoring to + interview. We were just the leaders; the real heroes that day were the crew of + Southern Cross. We would have died and lost the station on our own; the crew + is why we're celebrating instead of worrying about where the remains of + Southern Cross will crash into Sif. These are ordinary civilians just like you + who went above and beyond to thwart mass murder. You want somebody to praise + and interview? Look among the crew because they are the ones who deserve your + respect and awe.” +

+

Writers

Eshi Sali

Mirkracresh Kalzar

diff --git a/news_articles/starfire_report_2565.html b/news_articles/starfire_report_2565.html index bf63ccface..781578533d 100644 --- a/news_articles/starfire_report_2565.html +++ b/news_articles/starfire_report_2565.html @@ -1,243 +1,510 @@ -
- +
+
-
+

Starfire Report - 12/30/2565

-
+

A Safe and Productive Year (Sponsored by NanoTrasen)

-

The good folks at NanoTrasen have reached out to wish everybody a safe and productive year 2566. The company has continued to grow beyond quarterly projections and would thus like to thank both its dedicated Vir personnel and devoted Vir customers.

-

NanoTrasen would particularly like to thank the crew of NLS Southern Cross for keeping the station functional despite a string of unexpected disasters. NT hopes the late year visit from the Golden Space Goose sufficiently helped with unwinding and relaxing for the rest of the month.

-

Once year 2566 hits, all Southern Cross crew will be entitled to a free coffee.

+

+ The good folks at NanoTrasen have reached out to wish everybody a safe and + productive year 2566. The company has continued to grow beyond quarterly + projections and would thus like to thank both its dedicated Vir personnel and + devoted Vir customers. +

+

+ NanoTrasen would particularly like to thank the crew of NLS Southern Cross for + keeping the station functional despite a string of unexpected disasters. NT + hopes the late year visit from the Golden Space Goose sufficiently helped with + unwinding and relaxing for the rest of the month. +

+

+ Once year 2566 hits, all Southern Cross crew will be entitled to a free + coffee. +

-
+

Writers

Arielle Wood

-
+

Starfire Report - 20/20/2565

-
+

New Bluespace “Angle” Suspected

-

VirGov researchers stationed in northern Kaltsandur reported anomalous bluespace readings hinting at a previously unknown “angle” within bluespace. Said “angle” may be related to the pattern of anomalous incidents which semi-regularly strike NLS Southern Cross.

-

”The best way we can put this without getting too technical is there are certain ‘angles’ in bluespace readings which can suggest uncharacterized space. It’s similar to the breakthrough that allows long-distance FTL travel between black holes,” the researchers stated when asked for comment. “The readings here suggest previous investigations into the bluespace anomalies have missed something significant. The breakthrough came when we saw a spike and contacted NanoTrasen to check for anomalous activity.”

-

NanoTrasen corroborated the story, stating a shadekin incursion during the period of unusual activity.

+

+ VirGov researchers stationed in northern Kaltsandur reported anomalous + bluespace readings hinting at a previously unknown “angle” within bluespace. + Said “angle” may be related to the pattern of anomalous incidents which + semi-regularly strike NLS Southern Cross. +

+

+ ”The best way we can put this without getting too technical is there are + certain 'angles' in bluespace readings which can suggest uncharacterized + space. It's similar to the breakthrough that allows long-distance FTL travel + between black holes,” the researchers stated when asked for comment. “The + readings here suggest previous investigations into the bluespace anomalies + have missed something significant. The breakthrough came when we saw a spike + and contacted NanoTrasen to check for anomalous activity.” +

+

+ NanoTrasen corroborated the story, stating a shadekin incursion during the + period of unusual activity. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 11/26/2565

-
+

NanoTrasen to Retire Beepsky

-

Officer Beepsky, NanoTrasen’s infamous security bot mascot, is once again slated to be retired. As with last time (and the time before that), NT cited software bugs and a tendency to worsen security incidents as reasons to do away with the whisky-powered stun-baton-on-wheels.

-

NT has so far refused to elaborate further, though months of complaints on unofficial forums suggest “some guy in corporate really likes Beepsky and hands out promotions to anybody claiming to fix him.” Speculation of course, but entirely in line with NanoTrasen’s track record.

-

Beepsky is expected to disappear in the following months, at least until later reinstated.

+

+ Officer Beepsky, NanoTrasen's infamous security bot mascot, is once again + slated to be retired. As with last time (and the time before that), NT cited + software bugs and a tendency to worsen security incidents as reasons to do + away with the whisky-powered stun-baton-on-wheels. +

+

+ NT has so far refused to elaborate further, though months of complaints on + unofficial forums suggest “some guy in corporate really likes Beepsky and + hands out promotions to anybody claiming to fix him.” Speculation of course, + but entirely in line with NanoTrasen's track record. +

+

+ Beepsky is expected to disappear in the following months, at least until later + reinstated. +

-
+

Writers

Eshi Sali

-
+

Starfire Report - 10/29/2565

-
+

The Future of Atmospherics (Sponsored by NanoTrasen)

-

If airlocks are modern, then NanoTrasen’s new atmospheric retention field must be cutting edge! Revealed just a few days ago, NT’s new atmospheric management system projects powerful holograms which keep air in but don’t get in the way of traffic. Unlike fire doors, you can walk right through retention fields as if they don’t even exist.

-

Atmospheric retention fields are compatible with both old and new station, ship, and vessel designs; all you need is a suitable power source! Strip away those ugly steel shutters and upgrade to power-projected field effects today!

-

Warning lights and pressure/temperature indicators will be implemented in a future release.

+

+ If airlocks are modern, then NanoTrasen's new atmospheric retention field must + be cutting edge! Revealed just a few days ago, NT's new atmospheric management + system projects powerful holograms which keep air in but don't get in the way + of traffic. Unlike fire doors, you can walk right through retention fields as + if they don't even exist. +

+

+ Atmospheric retention fields are compatible with both old and new station, + ship, and vessel designs; all you need is a suitable power source! Strip away + those ugly steel shutters and upgrade to power-projected field effects today! +

+

+ Warning lights and pressure/temperature indicators will be implemented in a + future release. +

-
+

Writers

Arielle Wood

-
+

Starfire Report - 10/12/2565

-
+

Invasive Grubs Discovered on Sif

-

A species of invasive, asteroid dwelling-grub has just been spotted digging through Sif. Known as oregrubs, these dog-sized creatures resemble grubs and are known for eating silicates and precious minerals. Usually encountered in deep space mining operations, oregrubs were thought incapable of surviving Sif’s atmosphere.

-

Along with giant spiders , cold-adapted slimes, Tymisian moths, and numerous species of bass, the oregrub is the latest entry in the list of off-planet invasive species which threaten the planetary ecosystem. While ecologists state eradication would be ideal, oregrubs can prove dangerous when threatened and should be approached only be trained professionals.

-

While resembling the better known solargrub, it remains unknown of the species are related.

+

+ A species of invasive, asteroid dwelling-grub has just been spotted digging + through Sif. Known as oregrubs, these dog-sized creatures resemble grubs and + are known for eating silicates and precious minerals. Usually encountered in + deep space mining operations, oregrubs were thought incapable of surviving + Sif's atmosphere. +

+

+ Along with giant spiders , cold-adapted slimes, Tymisian moths, and numerous + species of bass, the oregrub is the latest entry in the list of off-planet + invasive species which threaten the planetary ecosystem. While ecologists + state eradication would be ideal, oregrubs can prove dangerous when threatened + and should be approached only be trained professionals. +

+

+ While resembling the better known solargrub, it remains unknown of the species + are related. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 08/19/2565

-
+

Body-Shape Friendly Clothing Success Continues

-

Clothing designed for unusual body shapes continues to successfully proliferate throughout frontier systems. Perhaps due to the sheer number of frontier crew with two arms and four legs, clothing made for such shapes continues to sell out as soon as released.

-

Initially sparked by the success of teshari brands, the non-traditional clothing market recently shifted focus to six-limbed customers. Current market prospects suggest this may expand to even more species, though fashion trends have always been notoriously difficult to predict in advance.

+

+ Clothing designed for unusual body shapes continues to successfully + proliferate throughout frontier systems. Perhaps due to the sheer number of + frontier crew with two arms and four legs, clothing made for such shapes + continues to sell out as soon as released. +

+

+ Initially sparked by the success of teshari brands, the non-traditional + clothing market recently shifted focus to six-limbed customers. Current market + prospects suggest this may expand to even more species, though fashion trends + have always been notoriously difficult to predict in advance. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 07/27/2565

-
+

Veiling Light Circus Appears in Sif

-

A mysterious criminal syndicate known as the Veiling Light reportedly surfaced in Vir this weekend. NLS Southern Cross personnel claimed a demonic circus kidnapped the entire station and forced the crew to complete twisted challenges and face eternal damnation if unsuccessful. Reports around the galaxy corroborates the crew’s testimony, as the incident was apparently streamed.

-

”This group has always remained countless steps ahead of law enforcement. Years later, we still have nothing to follow but eyewitness testimony,” an official VirGov official responded to a request for comment. “They’ve appeared throughout the galaxy and always put on some sort of horrific gameshow. There’s never evidence other than victim testimony and viewings of the streamed events.”

-

Despite reports of streaming, no recording of the group’s theatrics has ever been obtained and no evidence of a stream has ever been found. This has led law enforcement to speculate about the use of advanced technology without any known modern equivalent.

+

+ A mysterious criminal syndicate known as the Veiling Light reportedly surfaced + in Vir this weekend. NLS Southern Cross personnel claimed a demonic circus + kidnapped the entire station and forced the crew to complete twisted + challenges and face eternal damnation if unsuccessful. Reports around the + galaxy corroborates the crew's testimony, as the incident was apparently + streamed. +

+

+ ”This group has always remained countless steps ahead of law enforcement. + Years later, we still have nothing to follow but eyewitness testimony,” an + official VirGov official responded to a request for comment. “They've appeared + throughout the galaxy and always put on some sort of horrific gameshow. + There's never evidence other than victim testimony and viewings of the + streamed events.” +

+

+ Despite reports of streaming, no recording of the group's theatrics has ever + been obtained and no evidence of a stream has ever been found. This has led + law enforcement to speculate about the use of advanced technology without any + known modern equivalent. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 07/07/2565

-
+

NanoTrasen Supports the Arts (Sponsored by NanoTrasen)

-

In order to show its support for the arts, NanoTrasen will now be providing employees with access to painting canvases! No longer will crew need to paint on the floor, now Southern Cross personnel can take their vision to actual painting easels!

-

With so many of the crew intent on painting pictures across floor tiles, NT felt compelled to enable their star employees with creative opportunity! Just like the previously-implemented literary program, crew can show off their best work in the library instead of across the floors!

-

Rumors about a fine increase for defacing the station are completely untrue.

+

+ In order to show its support for the arts, NanoTrasen will now be providing + employees with access to painting canvases! No longer will crew need to paint + on the floor, now Southern Cross personnel can take their vision to actual + painting easels! +

+

+ With so many of the crew intent on painting pictures across floor tiles, NT + felt compelled to enable their star employees with creative opportunity! Just + like the previously-implemented literary program, crew can show off their best + work in the library instead of across the floors! +

+

+ Rumors about a fine increase for defacing the station are completely untrue. +

-
+

Writers

Arielle Wood

-
+

Starfire Report - 06/18/2565

-
+

NanoTrasen Tech Gets a Makeover… Again

-

In order to keep everything cutting edge, NanoTrasen announced that it will shortly unveil a redesign of its emitter brand of high-powered laser. What comes with this redesign? A sleek new look coupled with… nothing. Much like the company’s previous redesigns, this is yet another entry in its “switch up the looks without improving anything” marketing scheme.

-

As the saying goes, everything old is new again, and tweaking looks while changing nothing else is as old as capitalism itself. Of course, I can’t fault the corporation too much because sales are indeed back up since we continue the centuries-old trend of falling for depthless marketing gimmicks. At least this one hasn’t yet inspired a fan war over which model looks the best.

-

In any event, let’s keep our fingers crossed that the power cell redesign finally comes through without fanfare. Given NT has been advertising that one for years now, we can expect a lot of development hell in whatever eventually ends up on the market.

+

+ In order to keep everything cutting edge, NanoTrasen announced that it will + shortly unveil a redesign of its emitter brand of high-powered laser. What + comes with this redesign? A sleek new look coupled with… nothing. Much like + the company's previous redesigns, this is yet another entry in its “switch up + the looks without improving anything” marketing scheme. +

+

+ As the saying goes, everything old is new again, and tweaking looks while + changing nothing else is as old as capitalism itself. Of course, I can't fault + the corporation too much because sales are indeed back up since we continue + the centuries-old trend of falling for depthless marketing gimmicks. At least + this one hasn't yet inspired a fan war over which model looks the best. +

+

+ In any event, let's keep our fingers crossed that the power cell redesign + finally comes through without fanfare. Given NT has been advertising that one + for years now, we can expect a lot of development hell in whatever eventually + ends up on the market. +

-
+

Writers

Eshi Sali

-
+

Starfire Report - 05/30/2565

-
+

Study Detects Significant Increase in Nightmare Frequency

-

Recent reports of recurring nightmares throughout New Reykjavik have spurred a group of researchers to investigate the phenomenon. After months of tracking, the team determined a statistically significant three-fold increase in nightmares, though nightmares remain uncommon enough that the overall number remains low.

-

”Usually we find nothing significant whenever investigating anecdotal case reports, or at most a small variance like 10%. But a 306% increase like we found here? We weren’t expecting such success,” the group stated when reached out to for comment. “It may support the idea that areas of increased bluespace activity influence dreams. Vir is currently in the uptick of its bluespace solar cycle so that could be why these data hold water.”

-

Residents remain skeptical of the researchers’ claims, frequently insisting incidents at NLS Southern Cross are to blame. Given Sif’s general mistrust toward NanoTrasen, however, these accusations should be taken with a grain of salt.

+

+ Recent reports of recurring nightmares throughout New Reykjavik have spurred a + group of researchers to investigate the phenomenon. After months of tracking, + the team determined a statistically significant three-fold increase in + nightmares, though nightmares remain uncommon enough that the overall number + remains low. +

+

+ ”Usually we find nothing significant whenever investigating anecdotal case + reports, or at most a small variance like 10%. But a 306% increase like we + found here? We weren't expecting such success,” the group stated when reached + out to for comment. “It may support the idea that areas of increased bluespace + activity influence dreams. Vir is currently in the uptick of its bluespace + solar cycle so that could be why these data hold water.” +

+

+ Residents remain skeptical of the researchers' claims, frequently insisting + incidents at NLS Southern Cross are to blame. Given Sif's general mistrust + toward NanoTrasen, however, these accusations should be taken with a grain of + salt. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 05/17/2565

-
+

GET YOUR CHOMPS AT SOUTHERN CROSS (Sponsored Advertisement)

-

COMING TO YOU SOUTHERN CROSS CREW, 24/7 PIZZA PIE; WE ALWAYS DELIVER. PARTNERED WITH NANOTRASEN WE HAVE A NEW PROGRAM, WORK CARGO AND WEAR OUR UNIFORM! ORDER OUR PIZZA AND BRING THAT HAND-DELIVERED TASTE TO MEDICAL’S FRONT DOOR!

-

TOO MUCH WORK? STILL NOT FRESH ENOUGH? TRY OUR BLUESPACE 24/7 DELIVERY SLIPS AND GET YOUR PIZZA SECONDS AFTER IT’S READY! OUT OF BLUESPACE RANGE? STANDBACK AND TRY BALLISTIC DELIVERY NOW!

-

WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER

+

+ COMING TO YOU SOUTHERN CROSS CREW, 24/7 PIZZA PIE; WE ALWAYS DELIVER. + PARTNERED WITH NANOTRASEN WE HAVE A NEW PROGRAM, WORK CARGO AND WEAR OUR + UNIFORM! ORDER OUR PIZZA AND BRING THAT HAND-DELIVERED TASTE TO MEDICAL'S + FRONT DOOR! +

+

+ TOO MUCH WORK? STILL NOT FRESH ENOUGH? TRY OUR BLUESPACE 24/7 DELIVERY SLIPS + AND GET YOUR PIZZA SECONDS AFTER IT'S READY! OUT OF BLUESPACE RANGE? STANDBACK + AND TRY BALLISTIC DELIVERY NOW! +

+

+ WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE + ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS + DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS + DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS DELIVER WE ALWAYS + DELIVER +

-
+

Writers

PIZZA PIE HEAVEN

-
+

Starfire Report - 04/20/2565

-
+

Away with Vices (Guest Piece)

-

More gambling and alcohol? Really? Is that all NanoTrasen can offer employees to make up for awful working conditions? Week after week Southern Cross seems to be in the news thanks to disaster after disaster. Except today, now it’s in the news because the Golden Space Goose is back in Ullran and this is just too much.

-

If you’re unaware of this travelling den of vice and debauchery, the titular Space Goose is a travelling luxury space cruiser home to a likewise travelling casino. Alcohol, gambling, strippers, and other unmentionable things behind closed curtains, this depraved vessel seems to be the only thing NT can provide to keep the crew from striking. Is it because they take a cut off the profits? NT crew working this casino should be answer enough!

-

Stop falling for their tricks, people! It’s time to write to VirGov and outlaw these dens of sin once and for all!

+

+ More gambling and alcohol? Really? Is that all NanoTrasen can offer employees + to make up for awful working conditions? Week after week Southern Cross seems + to be in the news thanks to disaster after disaster. Except today, now it's in + the news because the Golden Space Goose is back in Ullran and this is just too + much. +

+

+ If you're unaware of this travelling den of vice and debauchery, the titular + Space Goose is a travelling luxury space cruiser home to a likewise travelling + casino. Alcohol, gambling, strippers, and other unmentionable things behind + closed curtains, this depraved vessel seems to be the only thing NT can + provide to keep the crew from striking. Is it because they take a cut off the + profits? NT crew working this casino should be answer enough! +

+

+ Stop falling for their tricks, people! It's time to write to VirGov and outlaw + these dens of sin once and for all! +

-
+

Writers

Ino Stern

-
+

Starfire Report - 03/30/2565

-
+

Try Out NT-VR Pods (Sponsored by NanoTrasen)

-

Ever wanted to fight in the thunderdome but afraid to lose life or limb? Still skeptical about resleeving technology despite our tried-and-true no-compromises quality assurance testing? Then we have just the product for you.

-

Introducing the NanoTrasen VR pod. Utilizing cutting edge replicant technology, the VR pod prints and grants the user control over a physical body rather than a virtual avatar. For the low price of your bodyweight in NT-biomass blend, you can now try out anything risky without fear of injury! Get maimed or killed exploring a deadly jungle? No problem, you’ll wake up back in the pod ready to print a new body and get right back at it. At long last, take all those risky adventures you’ve been dying to try without fear of dying.*

-

*WARNING: VR pods provide 100% realistic body sensations and do not protect against mental trauma triggered by traumatic events. Potential risks of VR pod use include and are not limited to: post-traumatic stress disorder, ego dissolution, loss of self-preservation instinct, dissociative identity disorder, and amnesia.

+

+ Ever wanted to fight in the thunderdome but afraid to lose life or limb? Still + skeptical about resleeving technology despite our tried-and-true + no-compromises quality assurance testing? Then we have just the product for + you. +

+

+ Introducing the NanoTrasen VR pod. Utilizing cutting edge replicant + technology, the VR pod prints and grants the user control over a physical body + rather than a virtual avatar. For the low price of your bodyweight in + NT-biomass blend, you can now try out anything risky without fear of injury! + Get maimed or killed exploring a deadly jungle? No problem, you'll wake up + back in the pod ready to print a new body and get right back at it. At long + last, take all those risky adventures you've been dying to try without fear of + dying.* +

+

+

+ *WARNING: VR pods provide 100% realistic body sensations and do not protect + against mental trauma triggered by traumatic events. Potential risks of VR pod + use include and are not limited to: post-traumatic stress disorder, ego + dissolution, loss of self-preservation instinct, dissociative identity + disorder, and amnesia. +

-
+

Writers

Arielle Wood

-
+

Starfire Report - 03/22/2565

-
+

Trafficking Harem Reported in Vir

-

Reports emerged this weekend regarding a trafficking ring making rounds throughout Vir, allegedly lingering near Sif and Kara. Posing as a travelling harem, the ring reportedly lures patrons with promises of enjoyment then abducts anybody unable to pay the fee to leave.

-

”Such schemes frequently pop up among frontier systems,” stated a VirGov Public Services spokesperson. “Lack of SolGov policing often leaves frontier systems understaffed with upholding law and order. Thus ships like these pop up as it’s much easier for them to slip under our radar our here versus the core systems.”

-

VirGov is requesting anybody with information about the trafficking ring to contact the local authorities. The only released information so far Is the ring appears to be based out of a ship last seen orbiting Sif.

+

+ Reports emerged this weekend regarding a trafficking ring making rounds + throughout Vir, allegedly lingering near Sif and Kara. Posing as a travelling + harem, the ring reportedly lures patrons with promises of enjoyment then + abducts anybody unable to pay the fee to leave. +

+

+ ”Such schemes frequently pop up among frontier systems,” stated a VirGov + Public Services spokesperson. “Lack of SolGov policing often leaves frontier + systems understaffed with upholding law and order. Thus ships like these pop + up as it's much easier for them to slip under our radar our here versus the + core systems.” +

+

+ VirGov is requesting anybody with information about the trafficking ring to + contact the local authorities. The only released information so far Is the + ring appears to be based out of a ship last seen orbiting Sif. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 02/15/2565

-
+

Realspace Instability Grows (Guest Interview)

-

Anomalous space-based fluctuations abound across Sif’s Ullran Expanse. While hardly a new phenomenon, a year-long study of the surrounding area reported a hundred-fold increase in bluespace turbulence over the course approximately six months.

-

”These numbers are unlike anything we’ve seen in a previously characterized area,” reported Shhokla Ezur, the lead author of the study. “While not unprecedented in a newly discovered or unmeasured location, we’ve never found such a spike in activity in somewhere as well-studied as Ullran. Curiously, the data suggest a link to NanoTrasen’s Southern Cross, though we lack data on the installation itself.”

-

Several commentators have been quick to draw a link between the study results and the anomalous occurrences at NLS Southern Cross. Perhaps further study will draw a definitive answer about the infrequent events.

+

+ Anomalous space-based fluctuations abound across Sif's Ullran Expanse. While + hardly a new phenomenon, a year-long study of the surrounding area reported a + hundred-fold increase in bluespace turbulence over the course approximately + six months. +

+

+ ”These numbers are unlike anything we've seen in a previously characterized + area,” reported Shhokla Ezur, the lead author of the study. “While not + unprecedented in a newly discovered or unmeasured location, we've never found + such a spike in activity in somewhere as well-studied as Ullran. Curiously, + the data suggest a link to NanoTrasen's Southern Cross, though we lack data on + the installation itself.” +

+

+ Several commentators have been quick to draw a link between the study results + and the anomalous occurrences at NLS Southern Cross. Perhaps further study + will draw a definitive answer about the infrequent events. +

The full interview can be found on our exonet site.

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 02/01/2565

-
+

Assailants Battle Over Southern Cross

-

A firefight broke out across NLS Southern Cross this weekend, allegedly involving at least two rival mercenary factions. While NanoTrasen claims to have identified both groups, it has not offered an explanation as to why the factions targeted the station. According to crew reports, the factions apparently used the station to attack one another, treating the crew as collateral damage.

-

Nevertheless, the station suffered heavy damage and casualties but reportedly less than typical. “The crew seemed to hold the line enough to fight back and deal damage to the invaders,” stated an official NT spokesperson. “We were alerted to the situation much earlier than usual and recorded less damage to the station. The ERT expected much more of a bloodbath.”

-

While not the first time Southern Cross has been a staging ground for battling mercenaries, the motives remain unclear. No faction has claimed credit for the battle, though it is worth noting the infamous Syndicate rarely takes credit for attacks which fail to deal tremendous damage to NanoTrasen installations.

+

+ A firefight broke out across NLS Southern Cross this weekend, allegedly + involving at least two rival mercenary factions. While NanoTrasen claims to + have identified both groups, it has not offered an explanation as to why the + factions targeted the station. According to crew reports, the factions + apparently used the station to attack one another, treating the crew as + collateral damage. +

+

+ Nevertheless, the station suffered heavy damage and casualties but reportedly + less than typical. “The crew seemed to hold the line enough to fight back and + deal damage to the invaders,” stated an official NT spokesperson. “We were + alerted to the situation much earlier than usual and recorded less damage to + the station. The ERT expected much more of a bloodbath.” +

+

+ While not the first time Southern Cross has been a staging ground for battling + mercenaries, the motives remain unclear. No faction has claimed credit for the + battle, though it is worth noting the infamous Syndicate rarely takes credit + for attacks which fail to deal tremendous damage to NanoTrasen installations. +

-
+

Writers

Mirkracresh Kalzar

-
+

Starfire Report - 01/18/2565

-
+

Trafficking Targets NanoTrasen Crew

-

Reports of a trafficking ring targeting NLS Southern Cross surfaced yesterday, testing the facility’s lackluster security. Allegedly armed with teleportation devices, the perpetrators simply teleported hapless crew to a processing facility to be stripped and sold for ransom or as black-market goods. NanoTrasen maintains that any crew not recovered were resleeved but it remains unknown how many crew may now have other selves sold into slavery.

-

Commonly called “abductors,” such trafficking rings are rare on the frontier but not unheard of, resulting in many horror stories (somewhat rightfully) circulating about the fates of their victims. Whether or not such rings are part of a large organization is unknown but considered unlikely due to the rarity of such attacks.

-

The average person on Sif (or the Karan colonies, for that matter) has little to fear as such incursions are exceptionally rare outside of isolated locales. The average NT employee however would be rightfully afraid given the isolated nature of Southern Cross and the success of this weekend’s incursion. It will be up to NanoTrasen to prevent this from happening again; we all know how that will go.

-
+

+ Reports of a trafficking ring targeting NLS Southern Cross surfaced yesterday, + testing the facility's lackluster security. Allegedly armed with teleportation + devices, the perpetrators simply teleported hapless crew to a processing + facility to be stripped and sold for ransom or as black-market goods. + NanoTrasen maintains that any crew not recovered were resleeved but it remains + unknown how many crew may now have other selves sold into slavery. +

+

+ Commonly called “abductors,” such trafficking rings are rare on the frontier + but not unheard of, resulting in many horror stories (somewhat rightfully) + circulating about the fates of their victims. Whether or not such rings are + part of a large organization is unknown but considered unlikely due to the + rarity of such attacks. +

+

+ The average person on Sif (or the Karan colonies, for that matter) has little + to fear as such incursions are exceptionally rare outside of isolated locales. + The average NT employee however would be rightfully afraid given the isolated + nature of Southern Cross and the success of this weekend's incursion. It will + be up to NanoTrasen to prevent this from happening again; we all know how that + will go. +

+

Writers

Eshi Sali

diff --git a/news_articles/the_sleepy_sergal_2.html b/news_articles/the_sleepy_sergal_2.html index 5cf7473dfb..0994d4b3ed 100644 --- a/news_articles/the_sleepy_sergal_2.html +++ b/news_articles/the_sleepy_sergal_2.html @@ -1,51 +1,101 @@ -
- +
+
-
+

The Sleepy Sergal - 09/28/2563

===Unathi Black Egg Plague At Record High! (powered by NanoTrasen)===

-

The Hegemony High Council has released a statement today confirming what has been circulating amongst the circles of the unathi population: Black Egg Syndrome has been at an all time high, at thirteen percent and rising. -

For readers who are unaware, this is a condition that mainly targets unathi females, sympthoms include unathi egg clutches including one or several eggs which are covered in a dark, hard, leather like substance, which makes hatching for the young skinks next to impossible thanks to how solid the egg is compared to normal. Often times this will result in the egg being left for dead in the wild, and the female is reclassified as male due to their cultural value decreasing.

+

+ The Hegemony High Council has released a statement today confirming what has + been circulating amongst the circles of the unathi population: Black Egg + Syndrome has been at an all time high, at thirteen percent and rising. +

+

+ For readers who are unaware, this is a condition that mainly targets unathi + females, sympthoms include unathi egg clutches including one or several eggs + which are covered in a dark, hard, leather like substance, which makes + hatching for the young skinks next to impossible thanks to how solid the egg + is compared to normal. Often times this will result in the egg being left for + dead in the wild, and the female is reclassified as male due to their cultural + value decreasing. +

-

Beyond confirming what was suspected, Hegemony, as well as Solgov officals, have declined to comment. Skrellian officals, meanwhile, have remarked that they would seek a cure for this deliberating condition, as a token of goodwill after the war years earlier involving the Hegemony, Skrell, and Solgov.

+

+ Beyond confirming what was suspected, Hegemony, as well as Solgov officals, + have declined to comment. Skrellian officals, meanwhile, have remarked that + they would seek a cure for this deliberating condition, as a token of goodwill + after the war years earlier involving the Hegemony, Skrell, and Solgov. +

- Reporter Jalder Strelam

Writer(s)

Matt

-
- +
+

The Sleepy Sergal - 10/02/2563

Obituary - Pablo Jenner

-

Pablo Jenner passed away while fighting giant space bears during a mining expedition on the evening of October 10th, 2563, at the age of 76. He will be greatly missed for his service. He has lived a rich life of mining on various planets and moons, and continued on even after losing his legs to other creatures, he was a real trooper.

+

+ Pablo Jenner passed away while fighting giant space bears during a mining + expedition on the evening of October 10th, 2563, at the age of 76. He will be + greatly missed for his service. He has lived a rich life of mining on various + planets and moons, and continued on even after losing his legs to other + creatures, he was a real trooper. +

-

His last words were to a certain Margaret and it said: "Tell her she's a bitch."

+

+ His last words were to a certain Margaret and it said: "Tell her she's a + bitch." +

-

Respects can be paid at the Yawn Wider Colony, where his remains are currently kept.

+

+ Respects can be paid at the Yawn Wider Colony, where his remains are currently + kept. +

Writer(s)

Kelshark

Credits

-

Snek, the souped up space bear
-Legion

+

+ Snek, the souped up space bear
+ Legion +

-
+

The Sleepy Sergal - 10/03/2563

-

===Tragic Tram Crash on Virgo 3B! (powered by NanoTrasen) ===

+

===Tragic Tram Crash on Virgo 3B! (powered by NanoTrasen) ===

-

Tragic news from Virgo 3B today. The orange line tram's automated brakes failed to engage when arriving at one of the waystations on the route. The resulting crash ended up destroying the small station's tram terminal, as well as the tram car itself. The automated systems however, did not pick up on the crash until much later, reporting that the train was still moving as normal. It wasn't until crewmembers aboard the next stop on the line, Yawn Wider Station, noticed that the tram was mysteriously missing, that technicians realized what had happened.

+

+ Tragic news from Virgo 3B today. The orange line tram's automated brakes + failed to engage when arriving at one of the waystations on the route. The + resulting crash ended up destroying the small station's tram terminal, as well + as the tram car itself. The automated systems however, did not pick up on the + crash until much later, reporting that the train was still moving as normal. + It wasn't until crewmembers aboard the next stop on the line, Yawn Wider + Station, noticed that the tram was mysteriously missing, that technicians + realized what had happened. +

-

The tram contained two passengers, Sabel Hall, 34, Human; and Farket Mrrhalka, 21, Tajara. Only Sabel's body has been located at this time, though the explosion, coupled with the harsh environment, leads investigators to presume that Farket was also killed.

+

+ The tram contained two passengers, Sabel Hall, 34, Human; and Farket Mrrhalka, + 21, Tajara. Only Sabel's body has been located at this time, though the + explosion, coupled with the harsh environment, leads investigators to presume + that Farket was also killed. +

-

A memorial service will be conducted for the victims of the tragic accident on their home colony. In the meantime, technicians begun repairs on the orange line, and, in the meantime, workers should use short range teleporters, or a different tram line, to make it to and from their workplace

+

+ A memorial service will be conducted for the victims of the tragic accident on + their home colony. In the meantime, technicians begun repairs on the orange + line, and, in the meantime, workers should use short range teleporters, or a + different tram line, to make it to and from their workplace +

Writer(s)

Cebutris

@@ -53,31 +103,69 @@ Legion

Credits

The shuttle system breaking

-
+

The Sleepy Sergal - 10/13/2563

===Fast Headlines (powered by NanoTrasen)===

-

Spooky celebrations: The capital city on Sol IIIᵃ is due to begin the 2563 celebration of its annual "Festival of Spirits", a 45 day long celebration of various cultures' supernatural-centric holidays. The festival kicks off with Earth's american region holiday "Halloween" on day one, followed by its neighbor to the south's "Día de Muertos" (Day of the dead) on day two. For a full list, see exonet address sol.luna.spiritfest.nt. New entries into the line-up this year include an performance enactments of Hawaii, Earth's "Nightmarchers", and Doradus IV's temperate zone holiday "Eve of the Seafolk"

+

+ Spooky celebrations: The capital city on Sol IIIᵃ is due to begin the 2563 + celebration of its annual "Festival of Spirits", a 45 day long celebration of + various cultures' supernatural-centric holidays. The festival kicks off with + Earth's american region holiday "Halloween" on day one, followed by its + neighbor to the south's "Día de Muertos" (Day of the dead) on day two. For a + full list, see exonet address sol.luna.spiritfest.nt. New entries into the + line-up this year include an performance enactments of Hawaii, Earth's + "Nightmarchers", and Doradus IV's temperate zone holiday "Eve of the Seafolk" +

-

Mystery probe: An uncrewed probe of mysterious make and origin has been detected at the fringes of NanoTrasen space. Reportedly, it does nto match the construction materials or techniques of any galactic power, and governments and corporations alike are denying involvement in the machine's manufacture and operation. Just as soon as it was detected, the probe enabled a series of stealth systems one-by-one including heat sinks, subspace radio jamming, EM field scattering, and what is theorized to be an advanced form of spacetime distortional phasing until it finally escaped detection.

+

+ Mystery probe: An uncrewed probe of mysterious make and origin has been + detected at the fringes of NanoTrasen space. Reportedly, it does nto match the + construction materials or techniques of any galactic power, and governments + and corporations alike are denying involvement in the machine's manufacture + and operation. Just as soon as it was detected, the probe enabled a series of + stealth systems one-by-one including heat sinks, subspace radio jamming, EM + field scattering, and what is theorized to be an advanced form of spacetime + distortional phasing until it finally escaped detection. +

-

Box Office Record Scared to Death: The new Horror holofilm "Alone in the void", in which a multi-species crew on a station outside of reliable communications range must fight to survive a power failure, while attempting to decipher the mystery of who, or what, is killing personnel one by one, opened to an astounding 517 billion thalers, after the success of a long, extensive exonet viral marketing ARG spanning an area of 39 systems. Contestants had to find public exonet terminals with notes adhered to them, dig up buried cases of clues, and in one instance, actually space walk on an asteroid covertly registered by the studio under the name of a non-existent small mining company.

+

+ Box Office Record Scared to Death: The new Horror holofilm "Alone in the + void", in which a multi-species crew on a station outside of reliable + communications range must fight to survive a power failure, while attempting + to decipher the mystery of who, or what, is killing personnel one by one, + opened to an astounding 517 billion thalers, after the success of a long, + extensive exonet viral marketing ARG spanning an area of 39 systems. + Contestants had to find public exonet terminals with notes adhered to them, + dig up buried cases of clues, and in one instance, actually space walk on an + asteroid covertly registered by the studio under the name of a non-existent + small mining company. +

Writer(s)

DeepIndigo

-
+

The Sleepy Sergal - 10/21/2563

===GOOD TIDINGS AND CHEER (powered by NanoTrasen)===

-

As with every year, the sol winter holiday season is coming up, and fast! The solstice around which the holidays are centered will occur on Thursday, 22.Dec.2563 at 04:20:33 NT-ST, in fact! That's only a month away, so be sure to get those extra duty shifts in to make your holidays exceptionally magical! As always, we'd like to wish all employees and citizens within NanoTrasen Interstellar holdings, and denizens of its member planet-states and colonies, a happy, happy holidays, full of family, friends, festivity, and fine products by Getmore Chocolate Corp and Robust Softdrinks.

+

+ As with every year, the sol winter holiday season is coming up, and fast! The + solstice around which the holidays are centered will occur on Thursday, + 22.Dec.2563 at 04:20:33 NT-ST, in fact! That's only a month away, so be sure + to get those extra duty shifts in to make your holidays exceptionally magical! + As always, we'd like to wish all employees and citizens within NanoTrasen + Interstellar holdings, and denizens of its member planet-states and colonies, + a happy, happy holidays, full of family, friends, festivity, and fine products + by Getmore Chocolate Corp and Robust Softdrinks. +

Writer(s)

DeepIndigo

-
+

NanoTrasen Announcement - 12/11/2563

===NT VEGA BRANCH BOARD OF DIRECTORS ANNOUNCEMENT==

@@ -85,20 +173,42 @@ Legion

Dear employees,

-

As the new fiscal year approaches, the board of directors will be announcing sweeping changes to multiple facets of the corporate guidelines, regulations and policies. These new changes will be broadcasted on all NanoTrasen facilities in the Virgo-Erigone sector on Saturday, the 14th of December 2563. The changes will come effect as they are announced.p> +

+ As the new fiscal year approaches, the board of directors will be announcing + sweeping changes to multiple facets of the corporate guidelines, regulations + and policies. These new changes will be broadcasted on all NanoTrasen + facilities in the Virgo-Erigone sector on Saturday, the 14th of December 2563. + The changes will come effect as they are announced.p> +

Glory to NanoTrasen.

-
+

The Sleepy Sergal - 12/14/2563

===VEGA Sector in Shambles after Mercenary Involvment===

-

The Virgo-Erigone sector of NanoTrasen got a pretty rough day, reports have been coming of new policy changes which have sparked riots throughout the entire sector. It turns out those new policies were enacted by members of the board who happened to have links with a mercenary organization that is tied to diverse companies. We do not know who hired these men specifically however. But whatever it was, their plan worked. NT has lost Virgo-3b after the Trade Wind Freighter collided with it at half light speed. Causing the entire Moon, and ship, to be completely obliterated. Including all facilities within, and those orbiting it.

+

+ The Virgo-Erigone sector of NanoTrasen got a pretty rough day, reports have + been coming of new policy changes which have sparked riots throughout the + entire sector. It turns out those new policies were enacted by members of the + board who happened to have links with a mercenary organization that is tied to + diverse companies. We do not know who hired these men specifically however. + But whatever it was, their plan worked. NT has lost Virgo-3b after the Trade + Wind Freighter collided with it at half light speed. Causing the entire Moon, + and ship, to be completely obliterated. Including all facilities within, and + those orbiting it. +

-

Many facilities managed to launch escape ships with the crew escaping thanks to a early warning system, some have flown all the way to nearby planets, where it appears mercenaries were waiting for them. Early Search and Rescue units reports having seen many naked corpses strewn about, with crewmembers wearing their outfits. -The death toll is reported to be above the thousands, no numbers have been released yet. -Most of the workforce from those areas have been relocated to other sectors.

+

+ Many facilities managed to launch escape ships with the crew escaping thanks + to a early warning system, some have flown all the way to nearby planets, + where it appears mercenaries were waiting for them. Early Search and Rescue + units reports having seen many naked corpses strewn about, with crewmembers + wearing their outfits. The death toll is reported to be above the thousands, + no numbers have been released yet. Most of the workforce from those areas have + been relocated to other sectors. +

Writer(s)

Kelshark

@@ -106,33 +216,76 @@ Most of the workforce from those areas have been relocated to other sectors.

Credit(s)

Pre-map switch event, thank you everyone who participated!

-
+

The Sleepy Sergal - 12/17/2563

=== Have Carp, Will Travel ===

-

Reports from around the outer rims tells tales of the dreaded Space Carp breaching their way through atmospheres and hitting the surfaces of many villages, facilities, and other inhabited areas. Details suggest that upwards of hundreds of Space Carp are making landfall each hour, quickly adapting to the new environments they are invading. On a newly christened NanoTrasen outpost, Cryogaia, there were reports of upwards of forty unique Space Carps patrolling around the area of the outpost. They were seen actively engaging wildlife, showing little regard for their own safety.

+

+ Reports from around the outer rims tells tales of the dreaded Space Carp + breaching their way through atmospheres and hitting the surfaces of many + villages, facilities, and other inhabited areas. Details suggest that upwards + of hundreds of Space Carp are making landfall each hour, quickly adapting to + the new environments they are invading. On a newly christened NanoTrasen + outpost, Cryogaia, there were reports of upwards of forty unique Space Carps + patrolling around the area of the outpost. They were seen actively engaging + wildlife, showing little regard for their own safety. +

-

NanoTrasen Navy released a short statement in regards to the carp, as follows: "...In relation to the Carps, we'll be shortly putting up small, automated anti-air defenses on many of our outposts, capable of shredding a school of Space Carp within moments. Given they are considered Invasive, our internal Native Enrichment department determines this as acceptable action." Time will tell if these methods are to prove useful, or if they'll make the issues worse.

+

+ NanoTrasen Navy released a short statement in regards to the carp, as follows: + "...In relation to the Carps, we'll be shortly putting up small, automated + anti-air defenses on many of our outposts, capable of shredding a school of + Space Carp within moments. Given they are considered Invasive, our internal + Native Enrichment department determines this as acceptable action." Time will + tell if these methods are to prove useful, or if they'll make the issues + worse. +

Writer(s)

Sleepy

Credit(s)

-

To a slightly bugged event that spawned space carp on our lovely ground colony.

+

+ To a slightly bugged event that spawned space carp on our lovely ground + colony. +

-
+

The Sleepy Sergal - 12/18/2563

=== Chill Out ===

-

NanoTrasen's new automated micro-AA batteries have been a resounding success: Counteless chunks of meat have been splattered around many favilities, and no carp have been spotted. Many activists are quick to point out that some of them may be local wildlife capable of flight, though NanoTrasen has given no official response, besides a rumor, saying that: "There were no confirmed reports of Avians[sic], and if there were, it doesn't matter now."

+

+ NanoTrasen's new automated micro-AA batteries have been a resounding success: + Counteless chunks of meat have been splattered around many favilities, and no + carp have been spotted. Many activists are quick to point out that some of + them may be local wildlife capable of flight, though NanoTrasen has given no + official response, besides a rumor, saying that: "There were no confirmed + reports of Avians[sic], and if there were, it doesn't matter now." +

-

One side effect that has been noted by the NanoTrasen Navy's Native Enrichment department, is with the abundance of shredded carp meat laying around the new Cryogaia outpost, normally underground dwelling Frost Spiders have come out from their burrows, feating upon the plentiful carp organic confetti. The toxins within the carp, however, cause the frost spiders to have lowered body activity, until the inevitably die of exposure as their body fails to keep up with the rapidly changing conditions, unable to heat themselves up.

+

+ One side effect that has been noted by the NanoTrasen Navy's Native Enrichment + department, is with the abundance of shredded carp meat laying around the new + Cryogaia outpost, normally underground dwelling Frost Spiders have come out + from their burrows, feating upon the plentiful carp organic confetti. The + toxins within the carp, however, cause the frost spiders to have lowered body + activity, until the inevitably die of exposure as their body fails to keep up + with the rapidly changing conditions, unable to heat themselves up. +

-

NanoTrasen Navy's Native Enrichment department released a statement in regard to this development, "... We're more than sure that they [frost spiders] will be able to quickly adapt to carp toxins, after a liberal deployment of 'stable mutagen' canisters in known hives."

+

+ NanoTrasen Navy's Native Enrichment department released a statement in regard + to this development, "... We're more than sure that they [frost spiders] will + be able to quickly adapt to carp toxins, after a liberal deployment of 'stable + mutagen' canisters in known hives." +

-

Only time will tell if the spiders will be able to develop an immunity, or if they'll continue to die out on the surface.

+

+ Only time will tell if the spiders will be able to develop an immunity, or if + they'll continue to die out on the surface. +

Writer(s)

Sleepy

@@ -140,52 +293,98 @@ Most of the workforce from those areas have been relocated to other sectors.

Credit(s)

To the frost spider code, which causes them to die outside as of now.

-
+

The Sleepy Sergal - 12/24/2563

===Mystery Probe Update (powered by NanoTrasen)===

-

A small update to the probe spotting we reported on last in October. The object, or one of similar make and model has been spotted in a system approximately 3471 LY away from the location of the initial sighting. It has been determined that the probes create a small, but unique form of "eddy" in subspace upon arrival. Reportedly, an NT Navy Laboratory is working on a detection system specifically calibrated to alert information networks upon the arrival of similar objects, in hopes of determining their purpose and origin.

+

+ A small update to the probe spotting we reported on last in October. The + object, or one of similar make and model has been spotted in a system + approximately 3471 LY away from the location of the initial sighting. It has + been determined that the probes create a small, but unique form of "eddy" in + subspace upon arrival. Reportedly, an NT Navy Laboratory is working on a + detection system specifically calibrated to alert information networks upon + the arrival of similar objects, in hopes of determining their purpose and + origin. +

Writer(s)

DeepIndigo

-
+

The Sleepy Sergal - 1/15/2564

===Calendar Update (powered by NanoTrasen)===

-

Well loyal readers here we are, just over two weeks into the new year. We're looking forward to the great strides that will be made by personnel of Nanotrasen®™, its subsidiaries, and associations there-of. 2564 is looking bright and profitable! Just as in years past, we'll continue to bring you the hard-hitting, timely, and truthful journalism you know us for in the coming year!

+

+ Well loyal readers here we are, just over two weeks into the new year. We're + looking forward to the great strides that will be made by personnel of + Nanotrasen®™, its subsidiaries, and associations there-of. 2564 is looking + bright and profitable! Just as in years past, we'll continue to bring you the + hard-hitting, timely, and truthful journalism you know us for in the coming + year! +

Writer(s)

DeepIndigo

-
+

The Sleepy Sergal - 1/15/2564

===Strange phenomena from around NT space! (powered by NanoTrasen)===

-

A series of bizarre events reported from around the holdings. A detailed report on this one, as well as several not included here, can be found on the hotlink list located at exonet address NTspacegen.phenomlist21942.ZZZSerg.NT

+

+ A series of bizarre events reported from around the holdings. A detailed + report on this one, as well as several not included here, can be found on the + hotlink list located at exonet address NTspacegen.phenomlist21942.ZZZSerg.NT +

-

Plague of nightspiders: Following several days of unusual sun-blocking heavy overcast at the Borealis 1 mining and research outpost, the facility was recently sieged by a large migration of local arachniform animal species nearly ten times the population of the expected norms. Fortunately, on-site NT and externally contracted security consisting of Officers Tenali, Kurkivor Snowstrider, Joel Johnson, and Alex Maktzandt were ln-site to head up the defense. We attempted to reach each of them for comment via e-mail.

+

+ Plague of nightspiders: Following several days of unusual sun-blocking heavy + overcast at the Borealis 1 mining and research outpost, the facility was + recently sieged by a large migration of local arachniform animal species + nearly ten times the population of the expected norms. Fortunately, on-site NT + and externally contracted security consisting of Officers Tenali, Kurkivor + Snowstrider, Joel Johnson, and Alex Maktzandt were ln-site to head up the + defense. We attempted to reach each of them for comment via e-mail. +

-

Officer Snowstrider had the following to say: "We lost a few good people who decided to recklessly charge into battle. I'm just glad we had a good few more there to back me up. Certainly was the worse wall breach I've ever seen."
- "Command better ok my turret network idea! [The facility] would be safe from another attack like that.", said Johnson.
- Said Tenali, "Psh, I killed like 30 of them while dragging the fools back to medical, lost count after 50. Was it stressful? Nah, I had a laser gun and 5 batteries! Certified spider slaying equipment."
- Officer Maktzandt declined to comment.

+

+ Officer Snowstrider had the following to say: "We lost a few good people who + decided to recklessly charge into battle. I'm just glad we had a good few more + there to back me up. Certainly was the worse wall breach I've ever seen."
+ "Command better ok my turret network idea! [The facility] would be safe from + another attack like that.", said Johnson.
+ Said Tenali, "Psh, I killed like 30 of them while dragging the fools back to + medical, lost count after 50. Was it stressful? Nah, I had a laser gun and 5 + batteries! Certified spider slaying equipment."
+ Officer Maktzandt declined to comment. +

Writer(s)

DeepIndigo

-
+

The Sleepy Sergal - 4/17/2564

===BREAKING: High energy physics disaster! (powered by NanoTrasen)===

-

A Nanotrasen Navy-funded research facility, which will go unnamed, has experienced a disaster following experimentation into alternatives to current gateway technology. A core laboratory equipment failure resulted in a phenomena described by the facility AI, the only survivor of the incident, as a "gateway storm", a series of spatial vortexes, potentially interdimensional ones. The "gateway storm" in question translocated a series of new, previously unseen plants and animals, many of them hostile, into the facility. As of this report, Nanotrasen Marine teams have regained control of a portion of the facility and are working with the AI to secure the site until corporate authorities determine the next course of action.

+

+ A Nanotrasen Navy-funded research facility, which will go unnamed, has + experienced a disaster following experimentation into alternatives to current + gateway technology. A core laboratory equipment failure resulted in a + phenomena described by the facility AI, the only survivor of the incident, as + a "gateway storm", a series of spatial vortexes, potentially interdimensional + ones. The "gateway storm" in question translocated a series of new, previously + unseen plants and animals, many of them hostile, into the facility. As of this + report, Nanotrasen Marine teams have regained control of a portion of the + facility and are working with the AI to secure the site until corporate + authorities determine the next course of action. +

Writer(s)

DeepIndigo

Credits

-

Valve Games and Wayneradiotv for inspiration.

\ No newline at end of file +

Valve Games and Wayneradiotv for inspiration.

diff --git a/package.json b/package.json new file mode 100644 index 0000000000..1d123f3ffc --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "devDependencies": { + "@biomejs/biome": "^2.1.2", + "prettier": "^3.6.2" + }, + "scripts": { + "tgui:fix": "biome check --write --unsafe tgui", + "tgui:lint": "biome lint tgui" + } +} diff --git a/sound/goonstation/LICENSE.md b/sound/goonstation/LICENSE.md index bb6102702e..19e666c21c 100644 --- a/sound/goonstation/LICENSE.md +++ b/sound/goonstation/LICENSE.md @@ -1,2 +1,2 @@ All files located in this directory and any subdirectories are licensed under the -Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) \ No newline at end of file +Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) diff --git a/tgui/.eslintignore b/tgui/.eslintignore deleted file mode 100644 index 4f735f3c51..0000000000 --- a/tgui/.eslintignore +++ /dev/null @@ -1,17 +0,0 @@ -/.yarn/** -/**/node_modules -/**/*.bundle.* -/**/*.chunk.* -/**/*.hot-update.* -**.lock -**.log -**.json -**.svg -**.scss -**.md -**.css -**.txt -**.woff2 -**.eot -**.ttf -/public diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml deleted file mode 100644 index 7ad819bc24..0000000000 --- a/tgui/.eslintrc.yml +++ /dev/null @@ -1,774 +0,0 @@ -root: true -extends: prettier -parser: '@typescript-eslint/parser' -parserOptions: - ecmaVersion: 2020 - sourceType: module - ecmaFeatures: - jsx: true -env: - es6: true - browser: true - node: true -plugins: - - react - - unused-imports - - simple-import-sort - - '@typescript-eslint' -settings: - react: - version: '19.1' -rules: - ## Possible Errors - ## ---------------------------------------- - ## Enforce “for” loop update clause moving the counter in the right - ## direction. - # for-direction: error - ## Enforce return statements in getters - # getter-return: error - ## Disallow using an async function as a Promise executor - no-async-promise-executor: error - ## Disallow await inside of loops - # no-await-in-loop: error - ## Disallow comparing against -0 - # no-compare-neg-zero: error - ## Disallow assignment operators in conditional expressions - no-cond-assign: error - ## Disallow the use of console - # no-console: error - ## Disallow constant expressions in conditions - # no-constant-condition: error - ## Disallow control characters in regular expressions - # no-control-regex: error - ## Disallow the use of debugger - no-debugger: error - ## Disallow duplicate arguments in function definitions - no-dupe-args: error - ## Disallow duplicate keys in object literals - no-dupe-keys: error - ## Disallow duplicate case labels - no-duplicate-case: error - ## Disallow empty block statements - # no-empty: error - ## Disallow empty character classes in regular expressions - no-empty-character-class: error - ## Disallow reassigning exceptions in catch clauses - no-ex-assign: error - ## Disallow unnecessary boolean casts - no-extra-boolean-cast: error - ## Disallow unnecessary parentheses - # no-extra-parens: warn - ## Disallow unnecessary semicolons - no-extra-semi: error - ## Disallow reassigning function declarations - no-func-assign: error - ## Disallow assigning to imported bindings - no-import-assign: error - ## Disallow variable or function declarations in nested blocks - no-inner-declarations: error - ## Disallow invalid regular expression strings in RegExp constructors - no-invalid-regexp: error - ## Disallow irregular whitespace - no-irregular-whitespace: error - ## Disallow characters which are made with multiple code points in character - ## class syntax - no-misleading-character-class: error - ## Disallow calling global object properties as functions - no-obj-calls: error - ## Disallow calling some Object.prototype methods directly on objects - no-prototype-builtins: error - ## Disallow multiple spaces in regular expressions - no-regex-spaces: error - ## Disallow sparse arrays - no-sparse-arrays: error - ## Disallow template literal placeholder syntax in regular strings - no-template-curly-in-string: error - ## Disallow confusing multiline expressions - no-unexpected-multiline: error - ## Disallow unreachable code after return, throw, continue, and break - ## statements - # no-unreachable: warn - ## Disallow control flow statements in finally blocks - no-unsafe-finally: error - ## Disallow negating the left operand of relational operators - no-unsafe-negation: error - ## Disallow assignments that can lead to race conditions due to usage of - ## await or yield - # require-atomic-updates: error - ## Require calls to isNaN() when checking for NaN - use-isnan: error - ## Enforce comparing typeof expressions against valid strings - valid-typeof: error - - ## Best practices - ## ---------------------------------------- - ## Enforce getter and setter pairs in objects and classes - # accessor-pairs: error - ## Enforce return statements in callbacks of array methods - # array-callback-return: error - ## Enforce the use of variables within the scope they are defined - # block-scoped-var: error - ## Enforce that class methods utilize this - # class-methods-use-this: error - ## Enforce a maximum cyclomatic complexity allowed in a program - complexity: [error, { max: 50 }] - ## Require return statements to either always or never specify values - # consistent-return: error - ## Enforce consistent brace style for all control statements - curly: [error, multi-line] - ## Require default cases in switch statements - # default-case: error - ## Enforce default parameters to be last - # default-param-last: error - ## Enforce consistent newlines before and after dots - dot-location: [error, property] - ## Enforce dot notation whenever possible - # dot-notation: error - ## Require the use of === and !== - eqeqeq: [error, always] - ## Require for-in loops to include an if statement - # guard-for-in: error - ## Enforce a maximum number of classes per file - # max-classes-per-file: error - ## Disallow the use of alert, confirm, and prompt - # no-alert: error - ## Disallow the use of arguments.caller or arguments.callee - # no-caller: error - ## Disallow lexical declarations in case clauses - no-case-declarations: error - ## Disallow division operators explicitly at the beginning of regular - ## expressions - # no-div-regex: error - ## Disallow else blocks after return statements in if statements - # no-else-return: error - ## Disallow empty functions - # no-empty-function: error - ## Disallow empty destructuring patterns - no-empty-pattern: error - ## Disallow null comparisons without type-checking operators - # no-eq-null: error - ## Disallow the use of eval() - # no-eval: error - ## Disallow extending native types - # no-extend-native: error - ## Disallow unnecessary calls to .bind() - # no-extra-bind: error - ## Disallow unnecessary labels - # no-extra-label: error - ## Disallow fallthrough of case statements - no-fallthrough: error - ## Disallow leading or trailing decimal points in numeric literals - # no-floating-decimal: error - ## Disallow assignments to native objects or read-only global variables - no-global-assign: error - ## Disallow shorthand type conversions - # no-implicit-coercion: error - ## Disallow variable and function declarations in the global scope - # no-implicit-globals: error - ## Disallow the use of eval()-like methods - # no-implied-eval: error - ## Disallow this keywords outside of classes or class-like objects - # no-invalid-this: error - ## Disallow the use of the __iterator__ property - # no-iterator: error - ## Disallow labeled statements - # no-labels: error - ## Disallow unnecessary nested blocks - # no-lone-blocks: error - ## Disallow function declarations that contain unsafe references inside - ## loop statements - # no-loop-func: error - ## Disallow magic numbers - # no-magic-numbers: error - ## Disallow multiple spaces - no-multi-spaces: warn - ## Disallow multiline strings - # no-multi-str: error - ## Disallow new operators outside of assignments or comparisons - # no-new: error - ## Disallow new operators with the Function object - # no-new-func: error - ## Disallow new operators with the String, Number, and Boolean objects - # no-new-wrappers: error - ## Disallow octal literals - no-octal: error - ## Disallow octal escape sequences in string literals - no-octal-escape: error - ## Disallow reassigning function parameters - # no-param-reassign: error - ## Disallow the use of the __proto__ property - # no-proto: error - ## Disallow variable redeclaration - no-redeclare: error - ## Disallow certain properties on certain objects - # no-restricted-properties: error - ## Disallow assignment operators in return statements - no-return-assign: error - ## Disallow unnecessary return await - # no-return-await: error - ## Disallow javascript: urls - # no-script-url: error - ## Disallow assignments where both sides are exactly the same - no-self-assign: error - ## Disallow comparisons where both sides are exactly the same - # no-self-compare: error - ## Disallow comma operators - no-sequences: error - ## Disallow throwing literals as exceptions - # no-throw-literal: error - ## Disallow unmodified loop conditions - # no-unmodified-loop-condition: error - ## Disallow unused expressions - # no-unused-expressions: error - ## Disallow unused labels - no-unused-labels: warn - ## Disallow unnecessary calls to .call() and .apply() - # no-useless-call: error - ## Disallow unnecessary catch clauses - # no-useless-catch: error - ## Disallow unnecessary concatenation of literals or template literals - # no-useless-concat: error - ## Disallow unnecessary escape characters - no-useless-escape: warn - ## Disallow redundant return statements - # no-useless-return: error - ## Disallow void operators - # no-void: error - ## Disallow specified warning terms in comments - # no-warning-comments: error - ## Disallow with statements - no-with: error - ## Enforce using named capture group in regular expression - # prefer-named-capture-group: error - ## Require using Error objects as Promise rejection reasons - # prefer-promise-reject-errors: error - ## Disallow use of the RegExp constructor in favor of regular expression - ## literals - # prefer-regex-literals: error - ## Enforce the consistent use of the radix argument when using parseInt() - radix: error - ## Disallow async functions which have no await expression - # require-await: error - ## Enforce the use of u flag on RegExp - # require-unicode-regexp: error - ## Require var declarations be placed at the top of their containing scope - # vars-on-top: error - ## Require parentheses around immediate function invocations - # wrap-iife: error - ## Require or disallow “Yoda” conditions - # yoda: error - - ## Strict mode - ## ---------------------------------------- - ## Require or disallow strict mode directives - strict: error - - ## Variables - ## ---------------------------------------- - ## Require or disallow initialization in variable declarations - # init-declarations: error - ## Disallow deleting variables - no-delete-var: error - ## Disallow labels that share a name with a variable - # no-label-var: error - ## Disallow specified global variables - # no-restricted-globals: error - ## Disallow variable declarations from shadowing variables declared in - ## the outer scope - # no-shadow: error - ## Disallow identifiers from shadowing restricted names - no-shadow-restricted-names: error - ## Disallow the use of undeclared variables unless mentioned - ## in /*global*/ comments - ## NOTE: Pointless when TypeScript can check for this - # no-undef: error - ## Disallow initializing variables to undefined - no-undef-init: error - ## Disallow the use of undefined as an identifier - # no-undefined: error - ## Disallow unused variables - # no-unused-vars: error - ## Disallow the use of variables before they are defined - # no-use-before-define: error - - ## Code style - ## ---------------------------------------- - ## Enforce linebreaks after opening and before closing array brackets - array-bracket-newline: [error, consistent] - ## Enforce consistent spacing inside array brackets - array-bracket-spacing: [error, never] - ## Enforce line breaks after each array element - # array-element-newline: error - ## Disallow or enforce spaces inside of blocks after opening block and - ## before closing block - block-spacing: [error, always] - ## Enforce consistent brace style for blocks - # brace-style: [error, stroustrup, { allowSingleLine: false }] - ## Enforce camelcase naming convention - # camelcase: error - ## Enforce or disallow capitalization of the first letter of a comment - # capitalized-comments: error - ## Require or disallow trailing commas - comma-dangle: [ - error, - { - arrays: always-multiline, - objects: always-multiline, - imports: always-multiline, - exports: always-multiline, - functions: only-multiline, ## Optional on functions - }, - ] - ## Enforce consistent spacing before and after commas - comma-spacing: [error, { before: false, after: true }] - ## Enforce consistent comma style - comma-style: [error, last] - ## Enforce consistent spacing inside computed property brackets - computed-property-spacing: [error, never] - ## Enforce consistent naming when capturing the current execution context - # consistent-this: error - ## Require or disallow newline at the end of files - # eol-last: error - ## Require or disallow spacing between function identifiers and their - ## invocations - func-call-spacing: [error, never] - ## Require function names to match the name of the variable or property - ## to which they are assigned - # func-name-matching: error - ## Require or disallow named function expressions - # func-names: error - ## Enforce the consistent use of either function declarations or expressions - # func-style: [error, expression] - ## Enforce line breaks between arguments of a function call - # function-call-argument-newline: error - ## Enforce consistent line breaks inside function parentheses - ## NOTE: This rule does not honor a newline on opening paren. - # function-paren-newline: [error, never] - ## Disallow specified identifiers - # id-blacklist: error - ## Enforce minimum and maximum identifier lengths - # id-length: error - ## Require identifiers to match a specified regular expression - # id-match: error - ## Enforce the location of arrow function bodies - # implicit-arrow-linebreak: error - ## Enforce consistent indentation - # indent: [error, 2, { SwitchCase: 1 }] - ## Enforce the consistent use of either double or single quotes in JSX - ## attributes - # jsx-quotes: [error, prefer-double] - ## Enforce consistent spacing between keys and values in object literal - ## properties - # key-spacing: [error, { beforeColon: false, afterColon: true }] - ## Enforce consistent spacing before and after keywords - # keyword-spacing: [error, { before: true, after: true }] - ## Enforce position of line comments - # line-comment-position: error - ## Enforce consistent linebreak style - # linebreak-style: error - ## Require empty lines around comments - # lines-around-comment: error - ## Require or disallow an empty line between class members - # lines-between-class-members: error - ## Enforce a maximum depth that blocks can be nested - # max-depth: error - ## Enforce a maximum line length - # max-len: [error, { - # code: 80, - # ## Ignore imports - # ignorePattern: '^(import\s.+\sfrom\s|.*require\()', - # ignoreUrls: true, - # ignoreRegExpLiterals: true, - # ignoreStrings: true, - # ignoreTemplateLiterals: true, - # }] - ## Enforce a maximum number of lines per file - # max-lines: error - ## Enforce a maximum number of line of code in a function - # max-lines-per-function: error - ## Enforce a maximum depth that callbacks can be nested - # max-nested-callbacks: error - ## Enforce a maximum number of parameters in function definitions - # max-params: error - ## Enforce a maximum number of statements allowed in function blocks - # max-statements: error - ## Enforce a maximum number of statements allowed per line - # max-statements-per-line: error - ## Enforce a particular style for multiline comments - # multiline-comment-style: error - ## Enforce newlines between operands of ternary expressions - # multiline-ternary: [error, always-multiline] - ## Require constructor names to begin with a capital letter - # new-cap: error - ## Enforce or disallow parentheses when invoking a constructor with no - ## arguments - # new-parens: error - ## Require a newline after each call in a method chain - # newline-per-chained-call: error - ## Disallow Array constructors - # no-array-constructor: error - ## Disallow bitwise operators - # no-bitwise: error - ## Disallow continue statements - # no-continue: error - ## Disallow inline comments after code - # no-inline-comments: error - ## Disallow if statements as the only statement in else blocks - # no-lonely-if: error - ## Disallow mixed binary operators - # no-mixed-operators: error - ## Disallow mixed spaces and tabs for indentation - # no-mixed-spaces-and-tabs: error - ## Disallow use of chained assignment expressions - # no-multi-assign: error - ## Disallow multiple empty lines - # no-multiple-empty-lines: error - ## Disallow negated conditions - # no-negated-condition: error - ## Disallow nested ternary expressions - # no-nested-ternary: error - ## Disallow Object constructors - # no-new-object: error - ## Disallow the unary operators ++ and -- - # no-plusplus: error - ## Disallow specified syntax - # no-restricted-syntax: error - ## Disallow all tabs - # no-tabs: error - ## Disallow ternary operators - # no-ternary: error - ## Disallow trailing whitespace at the end of lines - # no-trailing-spaces: error - ## Disallow dangling underscores in identifiers - # no-underscore-dangle: error - ## Disallow ternary operators when simpler alternatives exist - # no-unneeded-ternary: error - ## Disallow whitespace before properties - # no-whitespace-before-property: error - ## Enforce the location of single-line statements - # nonblock-statement-body-position: error - ## Enforce consistent line breaks inside braces - # object-curly-newline: [error, { multiline: true }] - ## Enforce consistent spacing inside braces - object-curly-spacing: [error, always] - ## Enforce placing object properties on separate lines - # object-property-newline: error - ## Enforce variables to be declared either together or separately in - ## functions - # one-var: error - ## Require or disallow newlines around variable declarations - # one-var-declaration-per-line: error - ## Require or disallow assignment operator shorthand where possible - # operator-assignment: error - ## Enforce consistent linebreak style for operators - # operator-linebreak: [error, before] - ## Require or disallow padding within blocks - # padded-blocks: error - ## Require or disallow padding lines between statements - # padding-line-between-statements: error - ## Disallow using Object.assign with an object literal as the first - ## argument and prefer the use of object spread instead. - # prefer-object-spread: error - ## Require quotes around object literal property names - # quote-props: error - ## Enforce the consistent use of either backticks, double, or single quotes - # quotes: [error, single] - ## Require or disallow semicolons instead of ASI - semi: error - ## Enforce consistent spacing before and after semicolons - semi-spacing: [error, { before: false, after: true }] - ## Enforce location of semicolons - semi-style: [error, last] - ## Require object keys to be sorted - # sort-keys: error - ## Require variables within the same declaration block to be sorted - # sort-vars: error - ## Enforce consistent spacing before blocks - space-before-blocks: [error, always] - ## Enforce consistent spacing before function definition opening parenthesis - # space-before-function-paren: [error, { - # anonymous: always, - # named: never, - # asyncArrow: always, - # }] - ## Enforce consistent spacing inside parentheses - space-in-parens: [error, never] - ## Require spacing around infix operators - # space-infix-ops: error - ## Enforce consistent spacing before or after unary operators - # space-unary-ops: error - ## Enforce consistent spacing after the // or /* in a comment - spaced-comment: [error, always] - ## Enforce spacing around colons of switch statements - switch-colon-spacing: [error, { before: false, after: true }] - ## Require or disallow spacing between template tags and their literals - template-tag-spacing: [error, never] - ## Require or disallow Unicode byte order mark (BOM) - # unicode-bom: [error, never] - ## Require parenthesis around regex literals - # wrap-regex: error - - ## ES6 - ## ---------------------------------------- - ## Require braces around arrow function bodies - # arrow-body-style: error - ## Require parentheses around arrow function arguments - # arrow-parens: [error, as-needed] - ## Enforce consistent spacing before and after the arrow in arrow functions - arrow-spacing: [error, { before: true, after: true }] - ## Require super() calls in constructors - # constructor-super: error - ## Enforce consistent spacing around * operators in generator functions - generator-star-spacing: [error, { before: false, after: true }] - ## Disallow reassigning class members - no-class-assign: error - ## Disallow arrow functions where they could be confused with comparisons - # no-confusing-arrow: error - ## Disallow reassigning const variables - no-const-assign: error - ## Disallow duplicate class members - no-dupe-class-members: error - ## Disallow duplicate module imports - # no-duplicate-imports: error - ## Disallow new operators with the Symbol object - no-new-symbol: error - ## Disallow specified modules when loaded by import - # no-restricted-imports: error - ## Disallow this/super before calling super() in constructors - no-this-before-super: error - ## Disallow unnecessary computed property keys in object literals - # no-useless-computed-key: error - ## Disallow unnecessary constructors - # no-useless-constructor: error - ## Disallow renaming import, export, and destructured assignments to the - ## same name - # no-useless-rename: error - ## Require let or const instead of var - no-var: error - ## Require or disallow method and property shorthand syntax for object - ## literals - # object-shorthand: error - ## Require using arrow functions for callbacks - prefer-arrow-callback: error - ## Require const declarations for variables that are never reassigned after - ## declared - prefer-const: error - ## Require destructuring from arrays and/or objects - # prefer-destructuring: error - ## Disallow parseInt() and Number.parseInt() in favor of binary, octal, and - ## hexadecimal literals - # prefer-numeric-literals: error - ## Require rest parameters instead of arguments - # prefer-rest-params: error - ## Require spread operators instead of .apply() - # prefer-spread: error - ## Require template literals instead of string concatenation - # prefer-template: error - ## Require generator functions to contain yield - # require-yield: error - ## Enforce spacing between rest and spread operators and their expressions - # rest-spread-spacing: error - ## Enforce sorted import declarations within modules - # sort-imports: error - ## Require symbol descriptions - # symbol-description: error - ## Require or disallow spacing around embedded expressions of template - ## strings - # template-curly-spacing: error - ## Require or disallow spacing around the * in yield* expressions - yield-star-spacing: [error, { before: false, after: true }] - - ## React - ## ---------------------------------------- - ## Enforces consistent naming for boolean props - react/boolean-prop-naming: error - ## Forbid "button" element without an explicit "type" attribute - react/button-has-type: error - ## Prevent extraneous defaultProps on components - react/default-props-match-prop-types: error - ## Rule enforces consistent usage of destructuring assignment in component - # react/destructuring-assignment: [error, always, { ignoreClassFields: true }] - ## Prevent missing displayName in a React component definition - # react/display-name: error - ## Forbid certain props on Components - # react/forbid-component-props: error - ## Forbid certain props on DOM Nodes - # react/forbid-dom-props: error - ## Forbid certain elements - # react/forbid-elements: error - ## Forbid certain propTypes - # react/forbid-prop-types: error - ## Forbid foreign propTypes - # react/forbid-foreign-prop-types: error - ## Prevent using this.state inside this.setState - react/no-access-state-in-setstate: error - ## Prevent using Array index in key props - # react/no-array-index-key: error - ## Prevent passing children as props - react/no-children-prop: error - ## Prevent usage of dangerous JSX properties - react/no-danger: error - ## Prevent problem with children and props.dangerouslySetInnerHTML - react/no-danger-with-children: error - ## Prevent usage of deprecated methods, including component lifecycle - ## methods - react/no-deprecated: error - ## Prevent usage of setState in componentDidMount - react/no-did-mount-set-state: error - ## Prevent usage of setState in componentDidUpdate - react/no-did-update-set-state: error - ## Prevent direct mutation of this.state - react/no-direct-mutation-state: error - ## Prevent usage of findDOMNode - react/no-find-dom-node: error - ## Prevent usage of isMounted - react/no-is-mounted: error - ## Prevent multiple component definition per file - # react/no-multi-comp: error - ## Prevent usage of shouldComponentUpdate when extending React.PureComponent - react/no-redundant-should-component-update: error - ## Prevent usage of the return value of React.render - react/no-render-return-value: error - ## Prevent usage of setState - # react/no-set-state: error - ## Prevent common casing typos - react/no-typos: error - ## Prevent using string references in ref attribute. - react/no-string-refs: error - ## Prevent using this in stateless functional components - react/no-this-in-sfc: error - ## Prevent invalid characters from appearing in markup - react/no-unescaped-entities: error - ## Prevent usage of unknown DOM property (fixable) - # react/no-unknown-property: error - ## Prevent usage of unsafe lifecycle methods - react/no-unsafe: error - ## Prevent definitions of unused prop types - react/no-unused-prop-types: error - ## Prevent definitions of unused state properties - react/no-unused-state: error - ## Prevent usage of setState in componentWillUpdate - react/no-will-update-set-state: error - ## Enforce ES5 or ES6 class for React Components - react/prefer-es6-class: error - ## Enforce that props are read-only - react/prefer-read-only-props: off - ## Enforce stateless React Components to be written as a pure function - react/prefer-stateless-function: error - ## Prevent missing props validation in a React component definition - # react/prop-types: error - ## Prevent missing React when using JSX - # react/react-in-jsx-scope: error - ## Enforce a defaultProps definition for every prop that is not a required - ## prop - # react/require-default-props: error - ## Enforce React components to have a shouldComponentUpdate method - # react/require-optimization: error - ## Enforce ES5 or ES6 class for returning value in render function - react/require-render-return: error - ## Prevent extra closing tags for components without children (fixable) - react/self-closing-comp: error - ## Enforce component methods order (fixable) - # react/sort-comp: error - ## Enforce propTypes declarations alphabetical sorting - # react/sort-prop-types: error - ## Enforce the state initialization style to be either in a constructor or - ## with a class property - # react/state-in-constructor: error - ## Enforces where React component static properties should be positioned. - # react/static-property-placement: error - ## Enforce style prop value being an object - react/style-prop-object: error - ## Prevent void DOM elements (e.g. ,
) from receiving children - react/void-dom-elements-no-children: error - - ## JSX-specific rules - ## ---------------------------------------- - ## Enforce boolean attributes notation in JSX (fixable) - react/jsx-boolean-value: error - ## Enforce or disallow spaces inside of curly braces in JSX attributes and - ## expressions. - # react/jsx-child-element-spacing: error - ## Validate closing bracket location in JSX (fixable) - # react/jsx-closing-bracket-location: [error, { - # ## NOTE: Not really sure about enforcing this one - # selfClosing: false, - # nonEmpty: after-props, - # }] - ## Validate closing tag location in JSX (fixable) - react/jsx-closing-tag-location: error - ## Enforce or disallow newlines inside of curly braces in JSX attributes and - ## expressions (fixable) - # react/jsx-curly-newline: error - ## Enforce or disallow spaces inside of curly braces in JSX attributes and - ## expressions (fixable) - react/jsx-curly-spacing: error - ## Enforce or disallow spaces around equal signs in JSX attributes (fixable) - react/jsx-equals-spacing: error - ## Restrict file extensions that may contain JSX - # react/jsx-filename-extension: error - ## Enforce position of the first prop in JSX (fixable) - # react/jsx-first-prop-new-line: error - ## Enforce event handler naming conventions in JSX - react/jsx-handler-names: error - ## Validate JSX indentation (fixable) - # react/jsx-indent: [error, 2, { - # checkAttributes: true, - # }] - ## Validate props indentation in JSX (fixable) - # react/jsx-indent-props: [error, 2] - ## Validate JSX has key prop when in array or iterator - react/jsx-key: error - ## Validate JSX maximum depth - react/jsx-max-depth: [error, { max: 10 }] ## Generous - ## Limit maximum of props on a single line in JSX (fixable) - # react/jsx-max-props-per-line: error - ## Prevent usage of .bind() and arrow functions in JSX props - # react/jsx-no-bind: error - ## Prevent comments from being inserted as text nodes - react/jsx-no-comment-textnodes: error - ## Prevent duplicate props in JSX - react/jsx-no-duplicate-props: error - ## Prevent usage of unwrapped JSX strings - # react/jsx-no-literals: error - ## Prevent usage of unsafe target='_blank' - react/jsx-no-target-blank: error - ## Disallow undeclared variables in JSX - react/jsx-no-undef: error - ## Disallow unnecessary fragments (fixable) - react/jsx-no-useless-fragment: error - ## Limit to one expression per line in JSX - # react/jsx-one-expression-per-line: error - ## Enforce curly braces or disallow unnecessary curly braces in JSX - # react/jsx-curly-brace-presence: error - ## Enforce shorthand or standard form for React fragments - react/jsx-fragments: error - ## Enforce PascalCase for user-defined JSX components - react/jsx-pascal-case: error - ## Disallow multiple spaces between inline JSX props (fixable) - react/jsx-props-no-multi-spaces: error - ## Disallow JSX props spreading - # react/jsx-props-no-spreading: error - ## Enforce default props alphabetical sorting - # react/jsx-sort-default-props: error - ## Enforce props alphabetical sorting (fixable) - # react/jsx-sort-props: error - ## Validate whitespace in and around the JSX opening and closing brackets - ## (fixable) - react/jsx-tag-spacing: error - ## Prevent React to be incorrectly marked as unused - react/jsx-uses-react: error - ## Prevent variables used in JSX to be incorrectly marked as unused - react/jsx-uses-vars: error - ## Prevent missing parentheses around multilines JSX (fixable) - react/jsx-wrap-multilines: error - ## Prevents the use of unused imports. - ## This could be done by enabling no-unused-vars, but we're doing this for now - unused-imports/no-unused-imports: error - ## https://github.com/lydell/eslint-plugin-simple-import-sort/ - simple-import-sort/imports: error - simple-import-sort/exports: error - - ## Typescript - '@typescript-eslint/consistent-type-imports': - [error, { fixStyle: inline-type-imports }] diff --git a/tgui/.prettierignore b/tgui/.prettierignore index eac862f94a..64ad6361de 100644 --- a/tgui/.prettierignore +++ b/tgui/.prettierignore @@ -1,5 +1,12 @@ node_modules public +*.js +*.ts +*.tsx +*.css +*.jsx +*.json + # Running it on tgui.html is fine, however. !/public/tgui.html diff --git a/tgui/bun.lock b/tgui/bun.lock index 7b20d42062..53cb3942c1 100644 --- a/tgui/bun.lock +++ b/tgui/bun.lock @@ -3,30 +3,19 @@ "workspaces": { "": { "name": "tgui-workspace", - "dependencies": { - "@rspack/cli": "^1.4.8", - "@rspack/core": "^1.4.8", - "@typescript-eslint/eslint-plugin": "^8.37.0", - "@typescript-eslint/parser": "^8.37.0", - "@typescript-eslint/utils": "^8.37.0", - "css-loader": "^7.1.2", - "eslint": "^8.57.1", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-simple-import-sort": "^12.1.1", - "eslint-plugin-unused-imports": "^4.1.4", - "prettier": "^3.6.2", - "sass-embedded": "^1.89.2", - "sass-loader": "^16.0.5", - "typescript": "^5.8.3", - }, "devDependencies": { "@happy-dom/global-registrator": "^17.6.3", + "@rspack/cli": "^1.4.8", + "@rspack/core": "^1.4.8", "@types/bun": "^1.2.18", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/webpack-env": "^1.18.8", "@types/wicg-file-system-access": "^2023.10.6", + "css-loader": "^7.1.2", + "sass-embedded": "^1.89.2", + "sass-loader": "^16.0.5", + "typescript": "^5.8.3", }, }, "packages/common": { @@ -111,19 +100,11 @@ "@discoveryjs/json-ext": ["@discoveryjs/json-ext@0.5.7", "", {}, "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw=="], - "@emnapi/core": ["@emnapi/core@1.4.4", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.3", "tslib": "^2.4.0" } }, "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g=="], + "@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" } }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="], - "@emnapi/runtime": ["@emnapi/runtime@1.4.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw=="], - - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], - - "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], - - "@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], - - "@eslint/js": ["@eslint/js@8.57.1", "", {}, "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="], "@floating-ui/core": ["@floating-ui/core@1.7.2", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw=="], @@ -137,12 +118,6 @@ "@happy-dom/global-registrator": ["@happy-dom/global-registrator@17.6.3", "", { "dependencies": { "happy-dom": "^17.6.3" } }, "sha512-SE8Mu6bdkgKENemVg20yMrKdYeAvVesQrLPVfNBKnhicCM3ylHV9oIDzDMxSFj3qYCrHrIWOZsItOXSafrM4Tw=="], - "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.13.0", "", { "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } }, "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw=="], - - "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], - - "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@2.0.3", "", {}, "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="], - "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], @@ -183,12 +158,6 @@ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], - - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], - - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@nozbe/microfuzz": ["@nozbe/microfuzz@1.0.0", "", {}, "sha512-XKIg/guk+s1tkPTkHch9hfGOWgsKojT7BqSQddXTppOfVr3SWQhhTCqbgQaPTbppf9gc2kFeG0gpBZZ612UXHA=="], "@npmcli/agent": ["@npmcli/agent@2.2.2", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og=="], @@ -321,28 +290,6 @@ "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.37.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/type-utils": "8.37.0", "@typescript-eslint/utils": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.37.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA=="], - - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.37.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/types": "8.37.0", "@typescript-eslint/typescript-estree": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA=="], - - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.37.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.37.0", "@typescript-eslint/types": "^8.37.0", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA=="], - - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.37.0", "", { "dependencies": { "@typescript-eslint/types": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0" } }, "sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA=="], - - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.37.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg=="], - - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.37.0", "", { "dependencies": { "@typescript-eslint/types": "8.37.0", "@typescript-eslint/typescript-estree": "8.37.0", "@typescript-eslint/utils": "8.37.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow=="], - - "@typescript-eslint/types": ["@typescript-eslint/types@8.37.0", "", {}, "sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ=="], - - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.37.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.37.0", "@typescript-eslint/tsconfig-utils": "8.37.0", "@typescript-eslint/types": "8.37.0", "@typescript-eslint/visitor-keys": "8.37.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg=="], - - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.37.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/types": "8.37.0", "@typescript-eslint/typescript-estree": "8.37.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A=="], - - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.37.0", "", { "dependencies": { "@typescript-eslint/types": "8.37.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w=="], - - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], - "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.13.2", "", {}, "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="], @@ -395,7 +342,7 @@ "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], @@ -413,32 +360,14 @@ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], - "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], - "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="], - - "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="], - - "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="], - - "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="], - - "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="], - - "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], - "asap": ["asap@2.0.6", "", {}, "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="], - "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], - "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], "auto-config-loader": ["auto-config-loader@2.0.2", "", { "dependencies": { "ini": "^5.0.0", "jiti": "^2.4.1", "jsonc-eslint-parser": "^2.3.0", "lodash.merge": "^4.6.2", "sucrase": "^3.35.0", "toml-eslint-parser": "^0.10.0", "yaml-eslint-parser": "^1.2.2" } }, "sha512-0V8gZAGGqiFDP15d6d4/Emi6Gpozbr1S9lSfxJ+lNV8nF+7grhcgbHIgn3O/DQKybS+cDqVMC3rxH8k+o0ISpA=="], - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "axios": ["axios@1.10.0", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw=="], "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -475,18 +404,12 @@ "cacache": ["cacache@18.0.4", "", { "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" } }, "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001723", "", {}, "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw=="], - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "cheerio": ["cheerio@1.0.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "encoding-sniffer": "^0.2.0", "htmlparser2": "^9.1.0", "parse5": "^7.1.2", "parse5-htmlparser2-tree-adapter": "^7.0.0", "parse5-parser-stream": "^7.1.2", "undici": "^6.19.5", "whatwg-mimetype": "^4.0.0" } }, "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww=="], "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], @@ -559,30 +482,18 @@ "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], - "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], - - "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], - - "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "dateformat": ["dateformat@5.0.3", "", {}, "sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA=="], "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - "default-browser": ["default-browser@5.2.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg=="], "default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], @@ -595,8 +506,6 @@ "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], - "doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], @@ -633,24 +542,16 @@ "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], - "es-abstract": ["es-abstract@1.24.0", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-iterator-helpers": ["es-iterator-helpers@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" } }, "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w=="], - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], - "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="], - - "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], - "es-toolkit": ["es-toolkit@1.39.7", "", {}, "sha512-ek/wWryKouBrZIjkwW2BFf91CWOIMvoy2AE5YYgUrfWsJQM2Su1LoLtrw8uusEpN9RfqLlV/0FVNjT0WMv8Bxw=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -659,29 +560,15 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "eslint": ["eslint@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.57.1", "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" } }, "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="], - - "eslint-config-prettier": ["eslint-config-prettier@9.1.0", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw=="], - - "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], - - "eslint-plugin-simple-import-sort": ["eslint-plugin-simple-import-sort@12.1.1", "", { "peerDependencies": { "eslint": ">=5.0.0" } }, "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA=="], - - "eslint-plugin-unused-imports": ["eslint-plugin-unused-imports@4.1.4", "", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^9.0.0 || ^8.0.0" }, "optionalPeers": ["@typescript-eslint/eslint-plugin"] }, "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ=="], - - "eslint-scope": ["eslint-scope@7.2.2", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg=="], + "eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], "eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "espree": ["espree@9.6.1", "", { "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ=="], - "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], - - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + "estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], @@ -697,38 +584,20 @@ "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - - "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], - "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], - "faye-websocket": ["faye-websocket@0.11.4", "", { "dependencies": { "websocket-driver": ">=0.5.1" } }, "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g=="], "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], - "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], - "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - - "flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], - - "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], - "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], "form-data": ["form-data@4.0.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA=="], @@ -749,48 +618,30 @@ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], - - "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - "globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="], - - "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], - "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], "handle-thing": ["handle-thing@2.0.1", "", {}, "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="], "happy-dom": ["happy-dom@17.6.3", "", { "dependencies": { "webidl-conversions": "^7.0.0", "whatwg-mimetype": "^3.0.0" } }, "sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug=="], - "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], @@ -827,14 +678,10 @@ "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], - "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "image2uri": ["image2uri@2.1.2", "", { "dependencies": { "node-fetch": "^3.3.1" } }, "sha512-3b2zRma8I3zulb4OCkZruRw1VsnysT9phBzOJj+x3lPkwybJtNa5Sz6Dw8jSQI6OL7Ns4H5h8Y26EJbwq4GhQQ=="], "immutable": ["immutable@5.1.3", "", {}, "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], @@ -845,87 +692,39 @@ "ini": ["ini@5.0.0", "", {}, "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw=="], - "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], - "interpret": ["interpret@3.1.1", "", {}, "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ=="], "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], "ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], - "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - - "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], - - "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], - "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], - - "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], - "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], - "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], - "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], - - "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], - "is-network-error": ["is-network-error@1.1.0", "", {}, "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g=="], "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], - - "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], - "is-plain-obj": ["is-plain-obj@3.0.0", "", {}, "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], - - "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], - - "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], - - "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], - - "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], - - "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], - - "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], - - "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], - "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], - "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - - "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], + "isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], "jackspeak": ["jackspeak@4.1.1", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" } }, "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ=="], @@ -933,44 +732,28 @@ "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - - "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "jsonc-eslint-parser": ["jsonc-eslint-parser@2.4.0", "", { "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "semver": "^7.3.5" } }, "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg=="], "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], - "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], - - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "launch-editor": ["launch-editor@2.10.0", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA=="], - "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], "loader-runner": ["loader-runner@4.3.0", "", {}, "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "lru-cache": ["lru-cache@11.1.0", "", {}, "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A=="], "make-fetch-happen": ["make-fetch-happen@13.0.1", "", { "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", "http-cache-semantics": "^4.1.1", "is-lambda": "^1.0.1", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" } }, "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA=="], @@ -993,8 +776,6 @@ "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], "microbuffer": ["microbuffer@1.0.0", "", {}, "sha512-O/SUXauVN4x6RaEJFqSPcXNtLFL+QzJHKZlyDVYFwcDDRVca3Fa/37QXXC+4zAGGa4YhHrHxKXuuHvLDIQECtA=="], @@ -1039,8 +820,6 @@ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], @@ -1069,16 +848,6 @@ "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - - "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="], - - "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="], - - "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -1091,14 +860,6 @@ "opener": ["opener@1.5.2", "", { "bin": { "opener": "bin/opener-bin.js" } }, "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="], - "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - - "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], - - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], "p-retry": ["p-retry@6.2.1", "", { "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ=="], @@ -1107,8 +868,6 @@ "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], - "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], @@ -1117,8 +876,6 @@ "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -1135,8 +892,6 @@ "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], @@ -1151,28 +906,18 @@ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - - "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], - "proc-log": ["proc-log@4.2.0", "", {}, "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA=="], "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "qs": ["qs@6.13.0", "", { "dependencies": { "side-channel": "^1.0.6" } }, "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], @@ -1183,48 +928,28 @@ "react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="], - "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], "rechoir": ["rechoir@0.8.0", "", { "dependencies": { "resolve": "^1.20.0" } }, "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ=="], - "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], - - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], - "resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="], - - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - - "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "run-applescript": ["run-applescript@7.0.0", "", {}, "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], - - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "sass": ["sass@1.89.2", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA=="], @@ -1285,12 +1010,6 @@ "serve-static": ["serve-static@1.16.2", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw=="], - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - - "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], - - "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -1339,30 +1058,16 @@ "statuses": ["statuses@2.0.1", "", {}, "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="], - "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], - - "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], - - "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], - - "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], - - "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], - "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="], "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], @@ -1395,8 +1100,6 @@ "terser-webpack-plugin": ["terser-webpack-plugin@5.3.14", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw=="], - "text-table": ["text-table@0.2.0", "", {}, "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="], - "tgfont": ["tgfont@workspace:packages/tgfont"], "tgui": ["tgui@workspace:packages/tgui"], @@ -1431,8 +1134,6 @@ "tree-dump": ["tree-dump@1.0.3", "", { "peerDependencies": { "tslib": "2" } }, "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg=="], - "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], - "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -1443,24 +1144,12 @@ "ttf2woff2": ["ttf2woff2@6.0.1", "", { "dependencies": { "bindings": "^1.5.0", "bufferstreams": "^4.0.0", "debug": "^4.3.5", "nan": "^2.20.0", "node-gyp": "^10.2.0", "yerror": "^8.0.0" }, "bin": { "ttf2woff2": "bin/ttf2woff2.js" } }, "sha512-QVkHvd4VsJ9cZNnzrfJL4Fhl5tyGkO5ih9PRY3DQ2BicKjyA+92I+00H2p06mBw1d0eCtzSQh5bp7NTUA57trg=="], - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "type-fest": ["type-fest@0.7.1", "", {}, "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="], "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], - "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], - - "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], - - "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], - - "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], - "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], - "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="], "undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="], @@ -1475,8 +1164,6 @@ "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], @@ -1513,17 +1200,7 @@ "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], - - "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], - - "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - - "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="], - - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -1547,10 +1224,6 @@ "yerror": ["yerror@8.0.0", "", {}, "sha512-FemWD5/UqNm8ffj8oZIbjWXIF2KE0mZssggYpdaQkWDDgXBQ/35PNIxEuz6/YLn9o0kOxDBNJe8x8k9ljD7k/g=="], - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - - "@eslint/eslintrc/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], @@ -1559,16 +1232,8 @@ "@npmcli/agent/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - - "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], - "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], - "ajv-formats/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "ajv-keywords/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], @@ -1579,34 +1244,24 @@ "cacache/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "cheerio/whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], - "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], - "eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - - "eslint-plugin-react/doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], - - "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], - "globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], - "hpack.js/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -1619,8 +1274,6 @@ "node-gyp/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], - "node-gyp/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], - "nunjucks/commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], @@ -1631,12 +1284,8 @@ "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "rechoir/resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], - "sass/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], @@ -1659,8 +1308,6 @@ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "webpack/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], - "webpack-bundle-analyzer/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], @@ -1669,12 +1316,6 @@ "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - - "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "ajv-keywords/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "cacache/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], @@ -1685,14 +1326,14 @@ "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "hpack.js/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - "hpack.js/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "hpack.js/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], @@ -1703,12 +1344,8 @@ "node-gyp/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "node-gyp/which/isexe": ["isexe@3.1.1", "", {}, "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ=="], - "sass/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - "schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "serve-index/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -1729,8 +1366,6 @@ "svgicons2svgfont/glob/minimatch": ["minimatch@10.0.3", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw=="], - "webpack/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], - "cacache/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "node-gyp/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], diff --git a/tgui/package.json b/tgui/package.json index bc4c76dc56..d751be25bd 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -10,36 +10,21 @@ "tgui:analyze": "rspack --analyze", "tgui:build": "rspack build", "tgui:dev": "bun --smol packages/tgui-dev-server/index.ts", - "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", - "tgui:prettier": "prettier --check .", "tgui:test": "bun test", - "tgui:tsc": "tsc", - "tgui:prettier-fix": "prettier --write .", - "tgui:eslint-fix": "eslint --fix packages --ext .js,.cjs,.ts,.jsx,.tsx" - }, - "dependencies": { - "@rspack/cli": "^1.4.8", - "@rspack/core": "^1.4.8", - "@typescript-eslint/eslint-plugin": "^8.37.0", - "@typescript-eslint/parser": "^8.37.0", - "@typescript-eslint/utils": "^8.37.0", - "css-loader": "^7.1.2", - "eslint": "^8.57.1", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.37.5", - "eslint-plugin-simple-import-sort": "^12.1.1", - "eslint-plugin-unused-imports": "^4.1.4", - "prettier": "^3.6.2", - "sass-embedded": "^1.89.2", - "sass-loader": "^16.0.5", - "typescript": "^5.8.3" + "tgui:tsc": "tsc" }, "devDependencies": { "@happy-dom/global-registrator": "^17.6.3", + "@rspack/cli": "^1.4.8", + "@rspack/core": "^1.4.8", "@types/bun": "^1.2.18", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@types/webpack-env": "^1.18.8", - "@types/wicg-file-system-access": "^2023.10.6" + "@types/wicg-file-system-access": "^2023.10.6", + "css-loader": "^7.1.2", + "sass-embedded": "^1.89.2", + "sass-loader": "^16.0.5", + "typescript": "^5.8.3" } } diff --git a/tgui/packages/common/colorpicker.ts b/tgui/packages/common/colorpicker.ts index 494ab3ea7f..95449c4c83 100644 --- a/tgui/packages/common/colorpicker.ts +++ b/tgui/packages/common/colorpicker.ts @@ -11,11 +11,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -const round = ( - number: number, - digits = 0, - base = Math.pow(10, digits), -): number => { +const round = (number: number, digits = 0, base = 10 ** digits): number => { return Math.round(base * number) / base; }; export interface RgbColor { @@ -185,25 +181,23 @@ export const rgbaStringToHsva = (rgbaString: string): HsvaColor => { export const rgbStringToHsva = rgbaStringToHsva; const format = (number: number) => { const hex = number.toString(16); - return hex.length < 2 ? '0' + hex : hex; + return hex.length < 2 ? `0${hex}` : hex; }; export const rgbaToHex = ({ r, g, b, a }: RgbaColor): string => { const alphaHex = a < 1 ? format(round(a * 255)) : ''; - return ( - '#' + format(round(r)) + format(round(g)) + format(round(b)) + alphaHex - ); + return `#${format(round(r))}${format(round(g))}${format(round(b))}${alphaHex}`; }; export const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => { const max = Math.max(r, g, b); const delta = max - Math.min(r, g, b); // prettier-ignore const hh = delta - ? max === r - ? (g - b) / delta - : max === g - ? 2 + (b - r) / delta - : 4 + (r - g) / delta - : 0; + ? max === r + ? (g - b) / delta + : max === g + ? 2 + (b - r) / delta + : 4 + (r - g) / delta + : 0; return { h: 60 * (hh < 0 ? hh + 6 : hh), s: max ? (delta / max) * 100 : 0, @@ -238,7 +232,7 @@ export const validHex = (value: string, alpha?: boolean): boolean => { export const luminance = (rgb: RgbColor): number => { const [r, g, b] = [rgb.r, rgb.g, rgb.b].map((v) => { v /= 255; - return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); + return v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4; }); return r * 0.2126 + g * 0.7152 + b * 0.0722; }; diff --git a/tgui/packages/common/storage.ts b/tgui/packages/common/storage.ts index 97d8ae61cc..a43156c421 100644 --- a/tgui/packages/common/storage.ts +++ b/tgui/packages/common/storage.ts @@ -46,7 +46,7 @@ class HubStorageBackend implements StorageBackend { } async get(key: string): Promise { - const value = await window.hubStorage.getItem('chomp-' + key); // CHOMPEdit + const value = await window.hubStorage.getItem(`chomp-${key}`); // CHOMPEdit if (typeof value === 'string') { return JSON.parse(value); } @@ -54,11 +54,11 @@ class HubStorageBackend implements StorageBackend { } async set(key: string, value: any): Promise { - window.hubStorage.setItem('chomp-' + key, JSON.stringify(value)); // CHOMPEdit + window.hubStorage.setItem(`chomp-${key}`, JSON.stringify(value)); // CHOMPEdit } async remove(key: string): Promise { - window.hubStorage.removeItem('chomp-' + key); // CHOMPEdit + window.hubStorage.removeItem(`chomp-${key}`); // CHOMPEdit } async clear(): Promise { diff --git a/tgui/packages/tgui-dev-server/dreamseeker.ts b/tgui/packages/tgui-dev-server/dreamseeker.ts index 8e186ef3d8..90e26b914c 100644 --- a/tgui/packages/tgui-dev-server/dreamseeker.ts +++ b/tgui/packages/tgui-dev-server/dreamseeker.ts @@ -37,13 +37,13 @@ export class DreamSeeker { const query = Object.keys(params) .map( (key) => - encodeURIComponent(key) + '=' + encodeURIComponent(params[key]), + `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`, ) .join('&'); logger.log( `topic call at ${this.client.defaults.baseURL}/dummy.htm?${query}`, ); - return this.client.get('/dummy.htm?' + query); + return this.client.get(`/dummy.htm?${query}`); } static async getInstancesByPids(pids: number[]): Promise { @@ -111,5 +111,5 @@ export class DreamSeeker { } function plural(word: string, n: number): string { - return n !== 1 ? word + 's' : word; + return n !== 1 ? `${word}s` : word; } diff --git a/tgui/packages/tgui-dev-server/link/retrace.ts b/tgui/packages/tgui-dev-server/link/retrace.ts index 0560c40aa5..6fd1bc27ab 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.ts +++ b/tgui/packages/tgui-dev-server/link/retrace.ts @@ -84,5 +84,5 @@ export function retrace(stack: string): string | undefined { }) .join('\n'); - return header + '\n' + mappedStack; + return `${header}\n${mappedStack}`; } diff --git a/tgui/packages/tgui-dev-server/link/server.ts b/tgui/packages/tgui-dev-server/link/server.ts index a2d854af0a..e618bb15ec 100644 --- a/tgui/packages/tgui-dev-server/link/server.ts +++ b/tgui/packages/tgui-dev-server/link/server.ts @@ -1,6 +1,6 @@ import { inspect } from 'node:util'; -import { type ServerWebSocket } from 'bun'; +import type { ServerWebSocket } from 'bun'; import { createLogger, directLog } from '../logging'; import { retrace } from './retrace'; diff --git a/tgui/packages/tgui-dev-server/reloader.ts b/tgui/packages/tgui-dev-server/reloader.ts index 19c7e27a27..fdbb2aa066 100644 --- a/tgui/packages/tgui-dev-server/reloader.ts +++ b/tgui/packages/tgui-dev-server/reloader.ts @@ -61,7 +61,7 @@ export async function findCacheRoot(): Promise { 'userpath', ); if (userpath) { - cacheRoot = userpath.replace(/\\$/, '').replace(/\\/g, '/') + '/cache'; + cacheRoot = `${userpath.replace(/\\$/, '').replace(/\\/g, '/')}/cache`; await onCacheRootFound(cacheRoot); return cacheRoot; } @@ -72,7 +72,7 @@ export async function findCacheRoot(): Promise { async function onCacheRootFound(cacheRoot: string): Promise { logger.log(`found cache at '${cacheRoot}'`); // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. - await Bun.write(cacheRoot + '/dummy.htm', ''); + await Bun.write(`${cacheRoot}/dummy.htm`, ''); } export async function reloadByondCache(bundleDir: string): Promise { @@ -103,7 +103,7 @@ export async function reloadByondCache(bundleDir: string): Promise { try { // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515-516. - await Bun.write(cacheDir + '/dummy.htm', ''); + await Bun.write(`${cacheDir}/dummy.htm`, ''); // Copy assets for (const asset of assets) { diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx b/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx index 889dd19f55..22031ddb61 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx @@ -28,7 +28,7 @@ export const NowPlayingWidget = (props) => { upload_date = audio.meta?.upload_date || 'Unknown Date', album = audio.meta?.album || 'Unknown Album', duration = audio.meta?.duration, - date = !isNaN(Number(upload_date)) + date = !Number.isNaN(Number(upload_date)) ? upload_date?.substring(0, 4) + '-' + upload_date?.substring(4, 6) + @@ -105,7 +105,7 @@ export const NowPlayingWidget = (props) => { value={settings.adminMusicVolume} step={0.0025} stepPixelSize={1} - format={(value) => toFixed(value * 100) + '%'} + format={(value) => `${toFixed(value * 100)}%`} onDrag={(e, value) => settings.update({ adminMusicVolume: value, diff --git a/tgui/packages/tgui-panel/audio/player.ts b/tgui/packages/tgui-panel/audio/player.ts index e990069312..21b791c300 100644 --- a/tgui/packages/tgui-panel/audio/player.ts +++ b/tgui/packages/tgui-panel/audio/player.ts @@ -28,8 +28,8 @@ export class AudioPlayer { options: AudioOptions; volume: number; - onPlaySubscribers: { (): void }[]; - onStopSubscribers: { (): void }[]; + onPlaySubscribers: (() => void)[]; + onStopSubscribers: (() => void)[]; constructor() { this.element = null; diff --git a/tgui/packages/tgui-panel/chat/chatExport.ts b/tgui/packages/tgui-panel/chat/chatExport.ts index e9ada4ceb5..6c7a8fb38e 100644 --- a/tgui/packages/tgui-panel/chat/chatExport.ts +++ b/tgui/packages/tgui-panel/chat/chatExport.ts @@ -113,7 +113,7 @@ async function getRound( for (const message of messages) { // Filter messages according to active tab for export if (page && canPageAcceptType(page, message.type)) { - messagesHtml += message.html + '\n'; + messagesHtml += `${message.html}\n`; } } diff --git a/tgui/packages/tgui-panel/chat/middleware.ts b/tgui/packages/tgui-panel/chat/middleware.ts index 524ae24841..5d7f627ee8 100644 --- a/tgui/packages/tgui-panel/chat/middleware.ts +++ b/tgui/packages/tgui-panel/chat/middleware.ts @@ -284,23 +284,22 @@ export const chatMiddleware = (store) => { } const sequence_count = sequences.length; - seq_check: if (sequence_count > 0) { + if (sequence_count > 0) { if (sequences_requested.includes(sequence)) { sequences_requested.splice(sequences_requested.indexOf(sequence), 1); // if we are receiving a message we requested, we can stop reliability checks - break seq_check; - } - - // cannot do reliability if we don't have any messages - const expected_sequence = sequences[sequence_count - 1] + 1; - if (sequence !== expected_sequence) { - for ( - let requesting = expected_sequence; - requesting < sequence; - requesting++ - ) { - sequences_requested.push(requesting); - Byond.sendMessage('chat/resend', requesting); + } else { + // cannot do reliability if we don't have any messages + const expected_sequence = sequences[sequence_count - 1] + 1; + if (sequence !== expected_sequence) { + for ( + let requesting = expected_sequence; + requesting < sequence; + requesting++ + ) { + sequences_requested.push(requesting); + Byond.sendMessage('chat/resend', requesting); + } } } } diff --git a/tgui/packages/tgui-panel/chat/model.ts b/tgui/packages/tgui-panel/chat/model.ts index c39e3fda30..dbe04fadfe 100644 --- a/tgui/packages/tgui-panel/chat/model.ts +++ b/tgui/packages/tgui-panel/chat/model.ts @@ -7,7 +7,7 @@ import { createUuid } from 'tgui-core/uuid'; import { MESSAGE_TYPE_INTERNAL, MESSAGE_TYPES } from './constants'; -import type { message, Page } from './types'; +import type { message, NewPageData, Page } from './types'; export const canPageAcceptType = (page: Page, type: string): string | boolean => type.startsWith(MESSAGE_TYPE_INTERNAL) || page.acceptedTypes[type]; @@ -46,7 +46,7 @@ export const canStoreType = ( type: string, ) => storedTypes[type]; -export const createPage = (obj?: Object): Page => { +export const createPage = (obj?: NewPageData): Page => { const acceptedTypes = {}; for (const typeDef of MESSAGE_TYPES) { @@ -66,7 +66,7 @@ export const createPage = (obj?: Object): Page => { }; export const createMainPage = (): Page => { - const acceptedTypes = {}; + const acceptedTypes: Record = {}; for (const typeDef of MESSAGE_TYPES) { acceptedTypes[typeDef.type] = true; } diff --git a/tgui/packages/tgui-panel/chat/renderer.tsx b/tgui/packages/tgui-panel/chat/renderer.tsx index 76a4e2b9c7..27943eb638 100644 --- a/tgui/packages/tgui-panel/chat/renderer.tsx +++ b/tgui/packages/tgui-panel/chat/renderer.tsx @@ -70,7 +70,7 @@ const findNearestScrollableParent = (startingNode: HTMLElement) => { const createHighlightNode = (text: string, color: string): HTMLElement => { const node = document.createElement('span'); node.className = 'Chat__highlight'; - node.setAttribute('style', 'background-color:' + color); + node.setAttribute('style', `background-color:${color}`); node.textContent = text; return node; }; @@ -87,7 +87,7 @@ const interleaveMessage = ( color: string, ): HTMLElement => { if (interleave) { - node.setAttribute('style', 'background-color:' + color); + node.setAttribute('style', `background-color:${color}`); node.setAttribute('display', 'block'); } else { node.removeAttribute('style'); @@ -137,7 +137,7 @@ const handleImageError = (e: ErrorEvent) => { } const src = node.src; node.src = ''; - node.src = src + '#' + attempts; + node.src = `${src}#${attempts}`; node.setAttribute('data-reload-n', (attempts + 1).toString()); }, IMAGE_RETRY_DELAY); }; @@ -319,6 +319,8 @@ class ChatRenderer { const matchCase = setting.matchCase; const allowedRegex = /^[a-zа-яё0-9_\-$/^[\s\]\\]+$/gi; const regexEscapeCharacters = /[!#$%^&*)(+=.<>{}[\]:;'"|~`_\-\\/]/g; + // Reset lastIndex so it does not mess up the next word + allowedRegex.lastIndex = 0; const lines = String(text) .split(',') .map((str) => str.trim()) @@ -328,9 +330,7 @@ class ChatRenderer { str && str.length > 1 && // Must be alphanumeric (with some punctuation) - allowedRegex.test(str) && - // Reset lastIndex so it does not mess up the next word - ((allowedRegex.lastIndex = 0) || true), + allowedRegex.test(str), ); let highlightWords; let highlightRegex; @@ -338,6 +338,8 @@ class ChatRenderer { if (lines.length === 0) { return; } + // Reset lastIndex so it does not mess up the next word + allowedRegex.lastIndex = 0; const blacklistLines = String(blacklist) .split(',') .map((str) => str.trim()) @@ -347,11 +349,8 @@ class ChatRenderer { str && str.length > 1 && // Must be alphanumeric (with some punctuation) - allowedRegex.test(str) && - // Reset lastIndex so it does not mess up the next word - ((allowedRegex.lastIndex = 0) || true), + allowedRegex.test(str), ); - let blacklistWords; let blacklistregex; if (highlightBlacklist && blacklistLines.length > 0) { const blacklistRegexExpressions: string[] = []; @@ -368,7 +367,7 @@ class ChatRenderer { // We're not going to let regex characters fuck up our RegEx operation. line = line.replace(regexEscapeCharacters, '\\$&'); - blacklistRegexExpressions.push('^' + line); + blacklistRegexExpressions.push(`^${line}`); } } const regexStrBL = blacklistRegexExpressions.join('|'); @@ -376,7 +375,7 @@ class ChatRenderer { // We wrap this in a try-catch to ensure that broken regex doesn't break // the entire chat. try { - blacklistregex = new RegExp('(' + regexStrBL + ')', flagsBL); + blacklistregex = new RegExp(`(${regexStrBL})`, flagsBL); } catch { // We just reset it if it's invalid. blacklistregex = null; @@ -405,13 +404,13 @@ class ChatRenderer { } } const regexStr = regexExpressions.join('|'); - const flags = 'g' + (matchCase ? '' : 'i'); + const flags = `g${matchCase ? '' : 'i'}`; // We wrap this in a try-catch to ensure that broken regex doesn't break // the entire chat. try { // setting regex overrides matchword if (regexStr) { - highlightRegex = new RegExp('(' + regexStr + ')', flags); + highlightRegex = new RegExp(`(${regexStr})`, flags); } else { const pattern = `${matchWord ? '\\b' : ''}(${highlightWords.join( '|', @@ -649,9 +648,9 @@ class ChatRenderer { working_value = true; } else if (working_value === '$false') { working_value = false; - } else if (!isNaN(working_value)) { + } else if (!Number.isNaN(working_value)) { const parsed_float = parseFloat(working_value); - if (!isNaN(parsed_float)) { + if (!Number.isNaN(parsed_float)) { working_value = parsed_float; } } @@ -912,7 +911,7 @@ class ChatRenderer { for (let i = 0; i < cssRules.length; i++) { const rule = cssRules[i]; if (rule && typeof rule.cssText === 'string') { - cssText += rule.cssText + '\n'; + cssText += `${rule.cssText}\n`; } } } @@ -950,7 +949,7 @@ class ChatRenderer { for (const message of tmpMsgArray) { // Filter messages according to active tab for export if (this.page && canPageAcceptType(this.page, message.type)) { - messagesHtml += message.html + '\n'; + messagesHtml += `${message.html}\n`; } // if (message.node) { // messagesHtml += message.node.outerHTML + '\n'; diff --git a/tgui/packages/tgui-panel/chat/replaceInTextNode.ts b/tgui/packages/tgui-panel/chat/replaceInTextNode.ts index 8fe899e8e7..a5aa7838b8 100644 --- a/tgui/packages/tgui-panel/chat/replaceInTextNode.ts +++ b/tgui/packages/tgui-panel/chat/replaceInTextNode.ts @@ -18,13 +18,13 @@ const regexParseNode = (params: { const textLength = text.length; let nodes; let new_node; - let match; + let match = regex.exec(text); let lastIndex = 0; let fragment; let n = 0; let count = 0; // eslint-disable-next-line no-cond-assign - while ((match = regex.exec(text))) { + while (match !== null) { n += 1; // Safety check to prevent permanent // client crashing @@ -55,6 +55,7 @@ const regexParseNode = (params: { new_node = createNode(matchText); nodes.push(new_node); fragment.appendChild(new_node); + match = regex.exec(text); } if (fragment) { // Insert the remaining unmatched chunk diff --git a/tgui/packages/tgui-panel/chat/types.ts b/tgui/packages/tgui-panel/chat/types.ts index c42ed491f3..f99a31f2d8 100644 --- a/tgui/packages/tgui-panel/chat/types.ts +++ b/tgui/packages/tgui-panel/chat/types.ts @@ -18,3 +18,9 @@ export type Page = { hideUnreadCount: boolean; createdAt: number; }; + +export type NewPageData = { + isMain: boolean; + name: string; + acceptedTypes: Record; +}; diff --git a/tgui/packages/tgui/components/NanoMap.tsx b/tgui/packages/tgui/components/NanoMap.tsx index e48592b005..630b032865 100644 --- a/tgui/packages/tgui/components/NanoMap.tsx +++ b/tgui/packages/tgui/components/NanoMap.tsx @@ -1,11 +1,11 @@ -import React, { Component, type PropsWithChildren } from 'react'; +import { Component, type CSSProperties, type PropsWithChildren } from 'react'; import { resolveAsset } from 'tgui/assets'; import { useBackend } from 'tgui/backend'; -import { KeyListener } from 'tgui-core/components'; import { Box, Button, Icon, + KeyListener, LabeledList, Slider, Tooltip, @@ -193,18 +193,18 @@ export class NanoMap extends Component { const WxH = this.getWxH(zoom); const mapUrl = resolveAsset(`minimap_${config.mapZLevel}.png`); - const newStyle: {} = { + const newStyle: CSSProperties = { width: `${WxH[0]}px`, height: `${WxH[1]}px`, - 'margin-top': `${offsetY}px`, - 'margin-left': `${offsetX}px`, + marginTop: `${offsetY}px`, + marginLeft: `${offsetX}px`, overflow: 'hidden', position: 'relative', - 'image-rendering': 'pixelated', - 'background-image': `url(${mapUrl})`, - 'background-size': 'cover', - 'background-repeat': 'no-repeat', - 'text-align': 'center', + imageRendering: 'pixelated', + backgroundImage: `url(${mapUrl})`, + backgroundSize: 'cover', + backgroundRepeat: 'no-repeat', + textAlign: 'center', cursor: dragging ? 'move' : 'auto', }; diff --git a/tgui/packages/tgui/interfaces/AutomatedTellerMachine.tsx b/tgui/packages/tgui/interfaces/AutomatedTellerMachine.tsx index f09e81538d..037afee9d4 100644 --- a/tgui/packages/tgui/interfaces/AutomatedTellerMachine.tsx +++ b/tgui/packages/tgui/interfaces/AutomatedTellerMachine.tsx @@ -282,7 +282,7 @@ const CustomWithdrawal = (props: { maxLength={10} onChange={(val) => { const value = parseInt(val, 10); - if (isNaN(value)) { + if (Number.isNaN(value)) { setMoney(0); } else { setMoney(value); @@ -430,7 +430,7 @@ const TransferMenu = (props: { const [accountNum, setAccountNum] = useState(100000); const updateAccountNum = (val) => { const newVal = parseInt(val, 10); - if (isNaN(newVal)) { + if (Number.isNaN(newVal)) { setAccountNum(100000); } else { setAccountNum(newVal); @@ -440,7 +440,7 @@ const TransferMenu = (props: { const [money, setMoney] = useState(0); const updateMoney = (val) => { const newVal = parseInt(val, 10); - if (isNaN(newVal)) { + if (Number.isNaN(newVal)) { setMoney(0); } else { setMoney(newVal); diff --git a/tgui/packages/tgui/interfaces/Biogenerator.tsx b/tgui/packages/tgui/interfaces/Biogenerator.tsx index 09d42e69e7..6161c8d1c4 100644 --- a/tgui/packages/tgui/interfaces/Biogenerator.tsx +++ b/tgui/packages/tgui/interfaces/Biogenerator.tsx @@ -43,18 +43,6 @@ export const Biogenerator = (props) => { const [sortOrder, setSortOrder] = useState('Alphabetical'); const [descending, setDescending] = useState(false); - function handleSearchText(value: string) { - setSearchText(value); - } - - function handleSortOrder(value: string) { - setSortOrder(value); - } - - function handleDescending(value: boolean) { - setDescending(value); - } - return ( @@ -82,9 +70,9 @@ export const Biogenerator = (props) => { searchText={searchText} sortOrder={sortOrder} descending={descending} - onSearchText={handleSearchText} - onSortOrder={handleSortOrder} - onDescending={handleDescending} + onSearchText={setSearchText} + onSortOrder={setSortOrder} + onDescending={setDescending} /> >; + onSortOrder: React.Dispatch>; + onDescending: React.Dispatch>; }) => { return ( diff --git a/tgui/packages/tgui/interfaces/BombTester.tsx b/tgui/packages/tgui/interfaces/BombTester.tsx index fe47e6ee2c..5ea98af17b 100644 --- a/tgui/packages/tgui/interfaces/BombTester.tsx +++ b/tgui/packages/tgui/interfaces/BombTester.tsx @@ -1,4 +1,4 @@ -import { Component } from 'react'; +import { Component, type CSSProperties } from 'react'; import { useBackend } from 'tgui/backend'; import { Window } from 'tgui/layouts'; import { @@ -213,7 +213,7 @@ class BombTesterSimulation extends Component { render() { const { x, y } = this.state; - const newStyle: {} = { + const newStyle: CSSProperties = { position: 'relative', left: `${x}px`, top: `${y}px`, diff --git a/tgui/packages/tgui/interfaces/Canvas.tsx b/tgui/packages/tgui/interfaces/Canvas.tsx index 84f74cbfe5..e2de3e80ba 100644 --- a/tgui/packages/tgui/interfaces/Canvas.tsx +++ b/tgui/packages/tgui/interfaces/Canvas.tsx @@ -262,7 +262,7 @@ class PaintCanvas extends Component { this.lastHovered = coord; - const time = new Date().getTime(); + const time = Date.now(); if (this.lastSuccessfulPaint + 50 > time) { return; diff --git a/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx b/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx index 609e68f072..6bf19e0135 100644 --- a/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx +++ b/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx @@ -33,35 +33,21 @@ export const CasinoPrizeDispenser = () => { const [sortOrder, setSortOrder] = useState('Alphabetical'); const [descending, setDescending] = useState(false); - function handleSearchText(value: string) { - setSearchText(value); - } - - function handleSortOrder(value: string) { - setSortOrder(value); - } - - function handleDescending(value: boolean) { - setDescending(value); - } - return ( - <> - - - + + ); @@ -70,9 +56,9 @@ export const CasinoPrizeDispenser = () => { const CasinoPrizeDispenserSearch = (props: { sortOrder: string; descending: boolean; - onSearchText: Function; - onSortOrder: Function; - onDescending: Function; + onSearchText: React.Dispatch>; + onSortOrder: React.Dispatch>; + onDescending: React.Dispatch>; }) => { return ( diff --git a/tgui/packages/tgui/interfaces/Changelog.tsx b/tgui/packages/tgui/interfaces/Changelog.tsx index f9f17516c5..529cb3c315 100644 --- a/tgui/packages/tgui/interfaces/Changelog.tsx +++ b/tgui/packages/tgui/interfaces/Changelog.tsx @@ -44,16 +44,15 @@ const icons = { type Data = { dates: string[] }; -export class Changelog extends Component< - {}, - { - data: - | string - | { date: string; authors: { name: string; changes: string[] } }; - selectedDate: string; - selectedIndex: number; - } -> { +// biome-ignore lint/complexity/noBannedTypes:Ingored here +type ChangelogProps = {}; + +interface ChangelogState { + data: string | { date: string; authors: { name: string; changes: string[] } }; + selectedDate: string; + selectedIndex: number; +} +export class Changelog extends Component { dateChoices: string[]; constructor(props) { diff --git a/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryList.tsx b/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryList.tsx index a13d5b5df5..f105dfa416 100644 --- a/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryList.tsx +++ b/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryList.tsx @@ -8,22 +8,14 @@ import type { mobEntry } from './types'; export const CharacterDirectoryList = (props: { directory: mobEntry[]; - onOverlay: Function; + onOverlay: React.Dispatch>; }) => { const { act } = useBackend(); const { onOverlay, directory } = props; const [sortId, setSortId] = useState('name'); - const [sortOrder, setSortOrder] = useState('name'); - - function handleSortId(value: string) { - setSortId(value); - } - - function handleSortOrder(value: string) { - setSortOrder(value); - } + const [sortOrder, setSortOrder] = useState(true); return (
Name @@ -50,8 +42,8 @@ export const CharacterDirectoryList = (props: { id="species" sortId={sortId} sortOrder={sortOrder} - onSortId={handleSortId} - onSortOrder={handleSortOrder} + onSortId={setSortId} + onSortOrder={setSortOrder} > Species @@ -59,8 +51,8 @@ export const CharacterDirectoryList = (props: { id="tag" sortId={sortId} sortOrder={sortOrder} - onSortId={handleSortId} - onSortOrder={handleSortOrder} + onSortId={setSortId} + onSortOrder={setSortOrder} > Vore Tag @@ -68,8 +60,8 @@ export const CharacterDirectoryList = (props: { id="gendertag" sortId={sortId} sortOrder={sortOrder} - onSortId={handleSortId} - onSortOrder={handleSortOrder} + onSortId={setSortId} + onSortOrder={setSortOrder} > Gender @@ -77,8 +69,8 @@ export const CharacterDirectoryList = (props: { id="sexualitytag" sortId={sortId} sortOrder={sortOrder} - onSortId={handleSortId} - onSortOrder={handleSortOrder} + onSortId={setSortId} + onSortOrder={setSortOrder} > Sexuality @@ -86,8 +78,8 @@ export const CharacterDirectoryList = (props: { id="erptag" sortId={sortId} sortOrder={sortOrder} - onSortId={handleSortId} - onSortOrder={handleSortOrder} + onSortId={setSortId} + onSortOrder={setSortOrder} > ERP Tag @@ -95,8 +87,8 @@ export const CharacterDirectoryList = (props: { id="eventtag" sortId={sortId} sortOrder={sortOrder} - onSortId={handleSortId} - onSortOrder={handleSortOrder} + onSortId={setSortId} + onSortOrder={setSortOrder} > Event Pref diff --git a/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectorySortButton.tsx b/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectorySortButton.tsx index 24d369b515..681629fca6 100644 --- a/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectorySortButton.tsx +++ b/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectorySortButton.tsx @@ -3,9 +3,9 @@ import { Button, Icon, Table } from 'tgui-core/components'; export const SortButton = (props: { id: string; sortId: string; - sortOrder: string; - onSortOrder: Function; - onSortId: Function; + sortOrder: boolean; + onSortOrder: React.Dispatch>; + onSortId: React.Dispatch>; children: React.JSX.Element | string; }) => { const { id, sortId, sortOrder, onSortOrder, onSortId, children } = props; diff --git a/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryViewCharacter.tsx b/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryViewCharacter.tsx index ebcb6e1423..fc90e04061 100644 --- a/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryViewCharacter.tsx +++ b/tgui/packages/tgui/interfaces/CharacterDirectory/CharacterDirectoryViewCharacter.tsx @@ -6,7 +6,7 @@ import type { mobEntry } from './types'; export const ViewCharacter = (props: { overlay: mobEntry; - onOverlay: Function; + onOverlay: React.Dispatch>; }) => { const { overlay, onOverlay } = props; diff --git a/tgui/packages/tgui/interfaces/CharacterDirectory/index.tsx b/tgui/packages/tgui/interfaces/CharacterDirectory/index.tsx index 291df29c38..0f3665e2d7 100644 --- a/tgui/packages/tgui/interfaces/CharacterDirectory/index.tsx +++ b/tgui/packages/tgui/interfaces/CharacterDirectory/index.tsx @@ -23,15 +23,11 @@ export const CharacterDirectory = (props) => { const [overlay, setOverlay] = useState(null); const [overwritePrefs, setOverwritePrefs] = useState(false); - function handleOverlay(value: mobEntry) { - setOverlay(value); - } - return ( {(overlay && ( - + )) || ( <>
{
)} diff --git a/tgui/packages/tgui/interfaces/CloningConsole/types.ts b/tgui/packages/tgui/interfaces/CloningConsole/types.ts index 57e0f9b7b7..6cce52f955 100644 --- a/tgui/packages/tgui/interfaces/CloningConsole/types.ts +++ b/tgui/packages/tgui/interfaces/CloningConsole/types.ts @@ -37,5 +37,5 @@ export type modalData = { unidentity: string; strucenzymes: string; }; - modal_type: string; + type: string; }; diff --git a/tgui/packages/tgui/interfaces/ColorPickerModal.tsx b/tgui/packages/tgui/interfaces/ColorPickerModal.tsx index 02e913dede..83ac4e2d36 100644 --- a/tgui/packages/tgui/interfaces/ColorPickerModal.tsx +++ b/tgui/packages/tgui/interfaces/ColorPickerModal.tsx @@ -6,8 +6,8 @@ import { colorList, - hexToHsva, type HsvaColor, + hexToHsva, hsvaToHex, hsvaToHslString, hsvaToRgba, @@ -47,6 +47,7 @@ interface ColorPickerData { presets: string; } +// biome-ignore lint/complexity/noBannedTypes:Ingored here type ColorPickerModalProps = {}; export const ColorPickerModal: React.FC = () => { diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorGeneral.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorGeneral.tsx index 9d6edd27e2..331299e860 100644 --- a/tgui/packages/tgui/interfaces/Communicator/CommunicatorGeneral.tsx +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorGeneral.tsx @@ -46,7 +46,7 @@ export const CommunicatorHeader = (props) => { export const CommunicatorFooter = (props: { videoSetting: number; - setVideoSetting: Function; + setVideoSetting: React.Dispatch>; }) => { const { act, data } = useBackend(); @@ -99,7 +99,7 @@ export const CommunicatorFooter = (props: { export const VideoComm = (props: { videoSetting: number; - setVideoSetting: Function; + setVideoSetting: React.Dispatch>; }) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx index 2c011d8801..010ab9c0b6 100644 --- a/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx @@ -6,7 +6,7 @@ import type { Data } from './types'; export const CommunicatorMessageSubTab = (props: { clipboardMode: boolean; - onClipboardMode: Function; + onClipboardMode: React.Dispatch>; }) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Communicator/index.tsx b/tgui/packages/tgui/interfaces/Communicator/index.tsx index 17968544cf..e795beba33 100644 --- a/tgui/packages/tgui/interfaces/Communicator/index.tsx +++ b/tgui/packages/tgui/interfaces/Communicator/index.tsx @@ -32,10 +32,6 @@ export const Communicator = () => { const [videoSetting, setVideoSetting] = useState(0); const [clipboardMode, setClipboardMode] = useState(false); - function handleClipboardMode(value: boolean) { - setClipboardMode(value); - } - tab[tabs[0]] = ; tab[tabs[1]] = ; tab[tabs[2]] = ; @@ -43,7 +39,7 @@ export const Communicator = () => { tab[tabs[4]] = ( ); tab[tabs[5]] = ; diff --git a/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorContent.tsx b/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorContent.tsx index aba7fc8540..391e05892a 100644 --- a/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorContent.tsx +++ b/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorContent.tsx @@ -8,8 +8,8 @@ import type { Data } from './types'; export const CrewMonitorContent = (props: { tabIndex: number; zoom: number; - onTabIndex: Function; - onZoom: Function; + onTabIndex: React.Dispatch>; + onZoom: React.Dispatch>; }) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorMapView.tsx b/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorMapView.tsx index 09486cf398..ab6a77607a 100644 --- a/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorMapView.tsx +++ b/tgui/packages/tgui/interfaces/CrewMonitor/CrewMonitorMapView.tsx @@ -7,7 +7,7 @@ import type { Data } from './types'; export const CrewMonitorMapView = (props: { zoom: number; - onZoom: Function; + onZoom: React.Dispatch>; }) => { const { config, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/CrewMonitor/index.tsx b/tgui/packages/tgui/interfaces/CrewMonitor/index.tsx index a6b8e5a8c4..123f0753b9 100644 --- a/tgui/packages/tgui/interfaces/CrewMonitor/index.tsx +++ b/tgui/packages/tgui/interfaces/CrewMonitor/index.tsx @@ -7,22 +7,14 @@ export const CrewMonitor = () => { const [tabIndex, setTabIndex] = useState(0); const [zoom, setZoom] = useState(1); - function handleTabIndex(value: number) { - setTabIndex(value); - } - - function handleZoom(value: number) { - setZoom(value); - } - return ( diff --git a/tgui/packages/tgui/interfaces/DNAModifier/types.ts b/tgui/packages/tgui/interfaces/DNAModifier/types.ts index 253bef9677..d5fdb0d679 100644 --- a/tgui/packages/tgui/interfaces/DNAModifier/types.ts +++ b/tgui/packages/tgui/interfaces/DNAModifier/types.ts @@ -42,7 +42,7 @@ type modalData = { args: { id: string; }; - modal_type: string; + type: string; }; export type buffData = { diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricator/Material.tsx b/tgui/packages/tgui/interfaces/ExosuitFabricator/Material.tsx index 9e8fdbb000..6189ce2fca 100644 --- a/tgui/packages/tgui/interfaces/ExosuitFabricator/Material.tsx +++ b/tgui/packages/tgui/interfaces/ExosuitFabricator/Material.tsx @@ -1,3 +1,4 @@ +import type { CSSProperties } from 'react'; import { useBackend, useSharedState } from 'tgui/backend'; import { Box, @@ -11,7 +12,6 @@ import { formatMoney, formatSiUnit } from 'tgui-core/format'; import { toFixed } from 'tgui-core/math'; import { classes } from 'tgui-core/react'; import { toTitleCase } from 'tgui-core/string'; - import { MATERIAL_KEYS } from './constants'; import type { Data, material } from './types'; @@ -111,7 +111,7 @@ export const MaterialAmount = (props: { formatsi?: boolean; formatmoney?: boolean; color?: string; - style?: {}; + style?: CSSProperties; }) => { const { name, amount, formatsi, formatmoney, color, style } = props; diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricator/Queue.tsx b/tgui/packages/tgui/interfaces/ExosuitFabricator/Queue.tsx index 03ffef1cfb..b1f02ce78a 100644 --- a/tgui/packages/tgui/interfaces/ExosuitFabricator/Queue.tsx +++ b/tgui/packages/tgui/interfaces/ExosuitFabricator/Queue.tsx @@ -120,7 +120,7 @@ const QueueList = (props: { textColors: Record }) => { const { queue = [] } = data; if (!queue || !queue.length) { - return <>No parts in queue.; + return 'No parts in queue.'; } return queue.map((part, index) => ( diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricator/functions.ts b/tgui/packages/tgui/interfaces/ExosuitFabricator/functions.ts index 6449d52d9d..818d3daee0 100644 --- a/tgui/packages/tgui/interfaces/ExosuitFabricator/functions.ts +++ b/tgui/packages/tgui/interfaces/ExosuitFabricator/functions.ts @@ -2,7 +2,7 @@ import { uniqBy } from 'es-toolkit'; import { createSearch } from 'tgui-core/string'; import { COLOR_AVERAGE, COLOR_BAD, COLOR_NONE } from './constants'; -import type { material, part, queueFormat } from './types'; +import type { MatFormat, material, part, queueFormat } from './types'; export function materialArrayToObj( materials: material[], @@ -55,13 +55,13 @@ export function partCondFormat( } export function queueCondFormat( - materials: material | {}, + materials: Record, queue: part[] | null, ): queueFormat { - const materialTally = {}; - const matFormat = {}; - const missingMatTally = {}; - const textColors = {}; + const materialTally: Record = {}; + const matFormat: Record = {}; + const missingMatTally: Record = {}; + const textColors: Record = {}; queue?.forEach((part, i) => { textColors[i] = COLOR_NONE; diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricator/types.ts b/tgui/packages/tgui/interfaces/ExosuitFabricator/types.ts index 6a5aecb5a7..18f471a68f 100644 --- a/tgui/packages/tgui/interfaces/ExosuitFabricator/types.ts +++ b/tgui/packages/tgui/interfaces/ExosuitFabricator/types.ts @@ -35,8 +35,10 @@ export type material = { export type queueFormat = { materialTally: Record; missingMatTally: Record; - matFormat: { color: number; deficit: number } | {}; + matFormat: Record; textColors: Record; }; +export type MatFormat = { color: number; deficit: number }; + export type internalPart = Required; diff --git a/tgui/packages/tgui/interfaces/FishingMinigame.tsx b/tgui/packages/tgui/interfaces/FishingMinigame.tsx index a2aa757962..66a8dc061b 100644 --- a/tgui/packages/tgui/interfaces/FishingMinigame.tsx +++ b/tgui/packages/tgui/interfaces/FishingMinigame.tsx @@ -270,10 +270,6 @@ type MouseTrackerProps = PropsWithChildren<{ }>; export class MouseTracker extends Component { - constructor(props: MouseTrackerProps) { - super(props); - } - onMouseDown = (e) => { if (this.props.onMouseDown) { this.props.onMouseDown(e); diff --git a/tgui/packages/tgui/interfaces/GhostSpawn/GhostJoin/GhostJoin.tsx b/tgui/packages/tgui/interfaces/GhostSpawn/GhostJoin/GhostJoin.tsx index 5120c00be9..7fbad340d3 100644 --- a/tgui/packages/tgui/interfaces/GhostSpawn/GhostJoin/GhostJoin.tsx +++ b/tgui/packages/tgui/interfaces/GhostSpawn/GhostJoin/GhostJoin.tsx @@ -170,7 +170,7 @@ export const GhostJoin = (props: { all_ghost_join_options: GhostJoinData }) => {
-
+
{specialRoles.map((role) => ( + act(action)} > - {'Become ' + title + '?'} + {`Become ${title}?`} diff --git a/tgui/packages/tgui/interfaces/GhostSpawn/functions.ts b/tgui/packages/tgui/interfaces/GhostSpawn/functions.ts index fc39100f67..58621aab29 100644 --- a/tgui/packages/tgui/interfaces/GhostSpawn/functions.ts +++ b/tgui/packages/tgui/interfaces/GhostSpawn/functions.ts @@ -1,4 +1,4 @@ -import type { describeReturnData, DroneData, MouseData } from './types'; +import type { DroneData, describeReturnData, MouseData } from './types'; export function describeMouseData( data: MouseData, @@ -86,23 +86,20 @@ export function describeSpecialData( respawn: string, action: string, ): describeReturnData { - const text = 'Span as ' + role.toLowerCase() + '.'; + const text = `Span as ${role.toLowerCase()}.`; const returnData = { text: text, state: true, name: role, action: action }; if (banned) { - returnData.text = - 'You are banned from playing as ' + role.toLowerCase() + '.'; + returnData.text = `You are banned from playing as ${role.toLowerCase()}.`; returnData.state = false; return returnData; } if (!spawn_exists) { - returnData.text = - 'There are no available ' + role.toLowerCase() + ' spawn points, sorry.'; + returnData.text = `There are no available ${role.toLowerCase()} spawn points, sorry.`; returnData.state = false; return returnData; } if (respawn) { - returnData.text = - 'You must wait ' + respawn + ' before being able to respawn again.'; + returnData.text = `You must wait ${respawn} before being able to respawn again.`; returnData.state = false; return returnData; } diff --git a/tgui/packages/tgui/interfaces/ICAssembly/Plane.tsx b/tgui/packages/tgui/interfaces/ICAssembly/Plane.tsx index d1a068e571..b5c0337428 100644 --- a/tgui/packages/tgui/interfaces/ICAssembly/Plane.tsx +++ b/tgui/packages/tgui/interfaces/ICAssembly/Plane.tsx @@ -17,6 +17,7 @@ import { PortTypesToColor, } from './types'; +// biome-ignore lint/complexity/noBannedTypes:Ingored here export type PlaneProps = {}; type PlaneState = { @@ -72,8 +73,8 @@ export class Plane extends Component { const position = this.getPosition(dom); if ( - isNaN(position.x) || - isNaN(position.y) || + Number.isNaN(position.x) || + Number.isNaN(position.y) || (lastPosition && lastPosition.x === position.x && lastPosition.y === position.y) diff --git a/tgui/packages/tgui/interfaces/LawManager.tsx b/tgui/packages/tgui/interfaces/LawManager.tsx index b2dfd66ef9..8a18c9a409 100644 --- a/tgui/packages/tgui/interfaces/LawManager.tsx +++ b/tgui/packages/tgui/interfaces/LawManager.tsx @@ -465,7 +465,7 @@ export const LawManagerLawSets = (props: { law_sets: law_pack[]; ion_law_nr: string; searchLawName: string; - onSearchLawName: Function; + onSearchLawName: React.Dispatch>; isAdmin: BooleanLike; isMalf: BooleanLike; }) => { diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/types.ts b/tgui/packages/tgui/interfaces/MedicalRecords/types.ts index e68950a838..1d9495644f 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/types.ts +++ b/tgui/packages/tgui/interfaces/MedicalRecords/types.ts @@ -63,7 +63,7 @@ export type modalData = { }[]; record: string; }; - modal_type: string; + type: string; }; type record = { diff --git a/tgui/packages/tgui/interfaces/MiningVendor.tsx b/tgui/packages/tgui/interfaces/MiningVendor.tsx index 48ef1d5a9f..2e7b656eb0 100644 --- a/tgui/packages/tgui/interfaces/MiningVendor.tsx +++ b/tgui/packages/tgui/interfaces/MiningVendor.tsx @@ -34,18 +34,6 @@ export const MiningVendor = (props) => { const [sortOrder, setSortOrder] = useState('Alphabetical'); const [descending, setDescending] = useState(false); - function handleSearchText(value: string) { - setSearchText(value); - } - - function handleSortOrder(value: string) { - setSortOrder(value); - } - - function handleDescending(value: boolean) { - setDescending(value); - } - return ( @@ -54,9 +42,9 @@ export const MiningVendor = (props) => { searchText={searchText} sortOrder={sortOrder} descending={descending} - onSearchText={handleSearchText} - onSortOrder={handleSortOrder} - onDescending={handleDescending} + onSearchText={setSearchText} + onSortOrder={setSortOrder} + onDescending={setDescending} /> >; + onSortOrder: React.Dispatch>; + onDescending: React.Dispatch>; }) => { return ( diff --git a/tgui/packages/tgui/interfaces/MobSpawner.tsx b/tgui/packages/tgui/interfaces/MobSpawner.tsx index e2596c7c33..8c91bdefae 100644 --- a/tgui/packages/tgui/interfaces/MobSpawner.tsx +++ b/tgui/packages/tgui/interfaces/MobSpawner.tsx @@ -57,65 +57,41 @@ export const MobSpawner = (props) => { const [sizeMultiplier, setSizeMultiplier] = useState(100); const [amount, setAmount] = useState(1); - function handleHealth(value: number) { + function handleHealth(value: number): void { data.health = value; renderData(value); } - function handleMaxHealth(value: number) { + function handleMaxHealth(value: number): void { data.max_health = value; renderData(value); } - function handleMeleeDamageLower(value: number) { + function handleMeleeDamageLower(value: number): void { data.melee_damage_lower = value; renderData(value); } - function handleMeleeDamageupper(value: number) { + function handleMeleeDamageupper(value: number): void { data.melee_damage_upper = value; renderData(value); } - function handleName(value: string) { + function handleName(value: string): void { data.path_name = value; renderData(value); } - function handleDesc(value: string) { + function handleDesc(value: string): void { data.desc = value; renderData(value); } - function handleFlavor(value: string) { + function handleFlavor(value: string): void { data.flavor_text = value; renderData(value); } - function handleRadius(value: number) { - setRadius(value); - } - - function handleX(value: number) { - setX(value); - } - - function handleY(value: number) { - setY(value); - } - - function handleZ(value: number) { - setZ(value); - } - - function handleSizeMultiplier(value: number) { - setSizeMultiplier(value); - } - - function handleAmount(value: number) { - setAmount(value); - } - const tabs: React.JSX.Element[] = []; tabs[0] = ( @@ -126,7 +102,7 @@ export const MobSpawner = (props) => { z={z} sizeMultiplier={sizeMultiplier} amount={amount} - onRadius={handleRadius} + onRadius={setRadius} onHealth={handleHealth} onMaxHealth={handleMaxHealth} onMeleeDamageLower={handleMeleeDamageLower} @@ -134,11 +110,11 @@ export const MobSpawner = (props) => { onName={handleName} onDesc={handleDesc} onFlavor={handleFlavor} - onX={handleX} - onY={handleY} - onZ={handleZ} - onSizeMultiplier={handleSizeMultiplier} - onAmount={handleAmount} + onX={setX} + onY={setY} + onZ={setZ} + onSizeMultiplier={setSizeMultiplier} + onAmount={setAmount} /> ); tabs[1] = ; @@ -167,19 +143,19 @@ const GeneralMobSettings = (props: { z: number; sizeMultiplier: number; amount: number; - onRadius: Function; - onHealth: Function; - onMaxHealth: Function; - onMeleeDamageLower: Function; - onMeleeDamageUpper: Function; - onName: Function; - onDesc: Function; - onFlavor: Function; - onX: Function; - onY: Function; - onZ: Function; - onSizeMultiplier: Function; - onAmount: Function; + onRadius: React.Dispatch>; + onHealth: React.Dispatch>; + onMaxHealth: React.Dispatch>; + onMeleeDamageLower: React.Dispatch>; + onMeleeDamageUpper: React.Dispatch>; + onName: React.Dispatch>; + onDesc: React.Dispatch>; + onFlavor: React.Dispatch>; + onX: React.Dispatch>; + onY: React.Dispatch>; + onZ: React.Dispatch>; + onSizeMultiplier: React.Dispatch>; + onAmount: React.Dispatch>; }) => { const { act, data } = useBackend(); return ( diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx index dc0685c7cc..eed60470ba 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotAccess.tsx @@ -121,7 +121,7 @@ export const ModifyRobotAccess = (props: { const AccessSection = (props: { title: string; searchText: string; - onSearchText: Function; + onSearchText: React.Dispatch>; access: Access[]; action: string; buttonColor: string; diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx index 4233580f5f..b2e4f8a953 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx @@ -218,7 +218,7 @@ export const ModifyRobotComponent = (props: { const ComponentSection = (props: { title: string; searchText: string; - onSearchText: Function; + onSearchText: React.Dispatch>; components: Component[]; action: string; buttonColor: string; diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx index 12232d4df6..f353efe860 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx @@ -127,7 +127,7 @@ const SelectionField = (props: { previewImage: string | undefined; previewImageSize: string | undefined; searchText: string; - onSearchText: Function; + onSearchText: React.Dispatch>; action: string; buttonIcon: string; buttonColor: string; diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx index dc3a404cfb..309b4fef13 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotRadio.tsx @@ -67,7 +67,7 @@ export const ModifyRobotRadio = (props: { target: Target }) => { const RadioSection = (props: { title: string; searchText: string; - onSearchText: Function; + onSearchText: React.Dispatch>; channels: string[]; action: string; buttonColor: string; diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotUpgrades.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotUpgrades.tsx index d85a6fefd8..41133fad59 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotUpgrades.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotUpgrades.tsx @@ -118,7 +118,7 @@ export const ModifyRobotUpgrades = (props: { target: Target }) => { const UpgradeSection = (props: { title: string; searchText: string; - onSearchText: Function; + onSearchText: React.Dispatch>; upgrades: Upgrade[]; action: string; }) => { diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterMainMenu.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterMainMenu.tsx index 4b9255cb46..d0a4e11554 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterMainMenu.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterMainMenu.tsx @@ -11,7 +11,9 @@ import { } from './constants'; import type { Data } from './types'; -export const NewscasterMainMenu = (props: { setScreen: Function }) => { +export const NewscasterMainMenu = (props: { + setScreen: React.Dispatch>; +}) => { const { data } = useBackend(); const { securityCaster, wanted_issue } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewChannel.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewChannel.tsx index 976a8cd570..bb59ad4f3d 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewChannel.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewChannel.tsx @@ -5,7 +5,9 @@ import { decodeHtmlEntities } from 'tgui-core/string'; import { NEWSCASTER_SCREEN_MAIN } from './constants'; import type { Data } from './types'; -export const NewscasterNewChannel = (props: { setScreen: Function }) => { +export const NewscasterNewChannel = (props: { + setScreen: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { channel_name, c_locked, user } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewStory.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewStory.tsx index 2c05065af1..34d3ddab02 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewStory.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewStory.tsx @@ -4,7 +4,9 @@ import { Button, LabeledList, Section, Stack } from 'tgui-core/components'; import { NEWSCASTER_SCREEN_MAIN } from './constants'; import type { Data } from './types'; -export const NewscasterNewStory = (props: { setScreen: Function }) => { +export const NewscasterNewStory = (props: { + setScreen: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { channel_name, user, title, msg, photo_data } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewWanted.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewWanted.tsx index 83c3bd47b5..e9a3e6a2c1 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewWanted.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterNewWanted.tsx @@ -5,7 +5,9 @@ import { decodeHtmlEntities } from 'tgui-core/string'; import { NEWSCASTER_SCREEN_MAIN } from './constants'; import type { Data } from './types'; -export const NewscasterNewWanted = (props: { setScreen: Function }) => { +export const NewscasterNewWanted = (props: { + setScreen: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { channel_name, msg, photo_data, user, wanted_issue } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterPrint.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterPrint.tsx index b30b77ee19..05fe8d0907 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterPrint.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterPrint.tsx @@ -4,7 +4,9 @@ import { Box, Button, LabeledList, Section } from 'tgui-core/components'; import { NEWSCASTER_SCREEN_MAIN } from './constants'; import type { Data } from './types'; -export const NewscasterPrint = (props: { setScreen: Function }) => { +export const NewscasterPrint = (props: { + setScreen: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { total_num, active_num, message_num, paper_remaining } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewList.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewList.tsx index 4c3f73dbb3..4977ce6142 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewList.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewList.tsx @@ -8,7 +8,9 @@ import { } from './constants'; import type { Data } from './types'; -export const NewscasterViewList = (props: { setScreen: Function }) => { +export const NewscasterViewList = (props: { + setScreen: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { channels } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx index 8852b2fea1..8797b748a8 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewSelected.tsx @@ -12,7 +12,9 @@ import { decodeHtmlEntities } from 'tgui-core/string'; import { NEWSCASTER_SCREEN_VIEWLIST } from './constants'; import type { Data } from './types'; -export const NewscasterViewSelected = (props: { setScreen: Function }) => { +export const NewscasterViewSelected = (props: { + setScreen: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { viewing_channel, securityCaster, company } = data; diff --git a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewWanted.tsx b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewWanted.tsx index 7124f55387..f22a1e43f0 100644 --- a/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewWanted.tsx +++ b/tgui/packages/tgui/interfaces/Newscaster/NewscasterViewWanted.tsx @@ -5,7 +5,9 @@ import { decodeHtmlEntities } from 'tgui-core/string'; import { NEWSCASTER_SCREEN_MAIN } from './constants'; import type { Data } from './types'; -export const NewscasterViewWanted = (props: { setScreen: Function }) => { +export const NewscasterViewWanted = (props: { + setScreen: React.Dispatch>; +}) => { const { data } = useBackend(); const { wanted_issue } = data; diff --git a/tgui/packages/tgui/interfaces/NtosCrewMonitor.tsx b/tgui/packages/tgui/interfaces/NtosCrewMonitor.tsx index 038a03b7d5..980c877e2c 100644 --- a/tgui/packages/tgui/interfaces/NtosCrewMonitor.tsx +++ b/tgui/packages/tgui/interfaces/NtosCrewMonitor.tsx @@ -7,21 +7,14 @@ export const NtosCrewMonitor = () => { const [tabIndex, setTabIndex] = useState(0); const [zoom, setZoom] = useState(1); - function handleTabIndex(value) { - setTabIndex(value); - } - - function handleZoom(value) { - setZoom(value); - } return ( diff --git a/tgui/packages/tgui/interfaces/NtosFileManager.tsx b/tgui/packages/tgui/interfaces/NtosFileManager.tsx index 56eee693ed..661e160d7e 100644 --- a/tgui/packages/tgui/interfaces/NtosFileManager.tsx +++ b/tgui/packages/tgui/interfaces/NtosFileManager.tsx @@ -71,16 +71,18 @@ export const NtosFileManager = (props) => { act('PRG_copytousb', { uid: file })} - onDelete={(file: file) => act('PRG_deletefile', { uid: file })} - onOpen={(file: file) => act('PRG_openfile', { uid: file })} - onRename={(file: file, newName: string) => + onUpload={(file: number) => act('PRG_copytousb', { uid: file })} + onDelete={(file: number) => + act('PRG_deletefile', { uid: file }) + } + onOpen={(file: number) => act('PRG_openfile', { uid: file })} + onRename={(file: number, newName: string) => act('PRG_rename', { uid: file, new_name: newName, }) } - onDuplicate={(file: file) => act('PRG_clone', { uid: file })} + onDuplicate={(file: number) => act('PRG_clone', { uid: file })} />
{(usbconnected && ( @@ -89,20 +91,22 @@ export const NtosFileManager = (props) => { usbmode files={usbfiles} usbconnected={usbconnected} - onUpload={(file: file) => + onUpload={(file: number) => act('PRG_copyfromusb', { uid: file }) } - onDelete={(file: file) => + onDelete={(file: number) => act('PRG_deletefile', { uid: file }) } - onOpen={(file: file) => act('PRG_openfile', { uid: file })} - onRename={(file: file, newName: string) => + onOpen={(file: number) => act('PRG_openfile', { uid: file })} + onRename={(file: number, newName: string) => act('PRG_rename', { uid: file, new_name: newName, }) } - onDuplicate={(file: file) => act('PRG_clone', { uid: file })} + onDuplicate={(file: number) => + act('PRG_clone', { uid: file }) + } />
)) || @@ -140,11 +144,11 @@ const FileTable = (props: { files: file[]; usbconnected: BooleanLike; usbmode?: boolean; - onUpload: Function; - onDelete: Function; - onRename: Function; - onOpen: Function; - onDuplicate: Function; + onUpload: (file: number) => void; + onDelete: (file: number) => void; + onRename: (file: number, newName: string) => void; + onOpen: (file: number) => void; + onDuplicate: (file: number) => void; }) => { const { files = [], diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx index 3234d3b46b..84de76f907 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx @@ -190,7 +190,9 @@ export const EntryGradient = (props: EntryGradientProps) => { var_mod: P_DATA_GRADIENT, new_value: gradient!.map((x, i) => { const floatNum = parseFloat(value); - const result = isNaN(floatNum) ? value : floatNum; + const result = Number.isNaN(floatNum) + ? value + : floatNum; return i === index ? result : x; }), }) diff --git a/tgui/packages/tgui/interfaces/Pda/index.tsx b/tgui/packages/tgui/interfaces/Pda/index.tsx index f3c100b4aa..2666128dc2 100644 --- a/tgui/packages/tgui/interfaces/Pda/index.tsx +++ b/tgui/packages/tgui/interfaces/Pda/index.tsx @@ -81,16 +81,12 @@ export const Pda = (props) => { const [settingsMode, setSettingsMode] = useState(false); - function handleSettingsMode(value: BooleanLike) { - setSettingsMode(value); - } - return ( {(settingsMode && ) || (
{
)} - +
); @@ -114,7 +110,7 @@ export const Pda = (props) => { const PDAHeader = (props: { settingsMode: BooleanLike; - onSettingsMode: Function; + onSettingsMode: React.Dispatch>; }) => { const { act, data } = useBackend(); @@ -191,7 +187,9 @@ const PDASettings = (props) => { ); }; -const PDAFooter = (props: { onSettingsMode: Function }) => { +const PDAFooter = (props: { + onSettingsMode: React.Dispatch>; +}) => { const { act, data } = useBackend(); const { app, useRetro } = data; diff --git a/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_atmos_scan.tsx b/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_atmos_scan.tsx index f61427698e..a519a1564d 100644 --- a/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_atmos_scan.tsx +++ b/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_atmos_scan.tsx @@ -16,7 +16,13 @@ type aircontent = { bad_high: number; }; -const getItemColor = (value, min2, min1, max1, max2) => { +const getItemColor = ( + value: number, + min2: number, + min1: number, + max1: number, + max2: number, +) => { if (value < min2) { return 'bad'; } else if (value < min1) { @@ -49,7 +55,7 @@ export const pda_atmos_scan = (props) => { key={item.entry} label={item.entry} color={getItemColor( - item.val, + Number(item.val), item.bad_low, item.poor_low, item.poor_high, diff --git a/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_messenger.tsx b/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_messenger.tsx index 7d1853ebdb..1215f37e55 100644 --- a/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_messenger.tsx +++ b/tgui/packages/tgui/interfaces/Pda/pda_screens/pda_messenger.tsx @@ -41,14 +41,6 @@ type message = { target: string; }; -// Really cursed old API that was deprecated before IE8 but still works in IE11 because lol lmao -type IeWindow = Window & - typeof globalThis & { - clipboardData: { - setData: (type: 'Text', text: string) => {}; - }; - }; - const CopyToClipboardButton = (props: { messages: message[] }) => { const [showCompletion, setShowCompletion] = useState(false); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx index a3beb91c3c..c13f7ca254 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx @@ -1,7 +1,7 @@ import type { ReactNode } from 'react'; import { Button } from 'tgui-core/components'; -export const PageButton =

(props: { +export const PageButton = (props: { currentPage: P; page: P; otherActivePages?: P[]; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx index 72111d15ee..b1d724eb1b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx @@ -401,22 +401,22 @@ export const SubtabSettings = (props: { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts index 67e5500bc7..ff13371ba2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts @@ -236,10 +236,10 @@ export type AntagonismData = { uplink_type: string; record_banned: BooleanLike; exploitable_record?: string; - pai_name: string; - pai_desc: string; - pai_role: string; - pai_comments: string; + pai_name?: string; + pai_desc?: string; + pai_role?: string; + pai_comments?: string; syndicate_ban: BooleanLike; special_roles: SpecialRole[]; }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/helper_components.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/helper_components.tsx index 3ab0c4eed8..291464db70 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/helper_components.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/helper_components.tsx @@ -1,4 +1,4 @@ -import React, { +import { type PropsWithChildren, type ReactNode, useCallback, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/occupation/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/occupation/data.ts index 47ca74eb27..b4180cf508 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/occupation/data.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/occupation/data.ts @@ -35,8 +35,8 @@ export type Job = { export type OccupationData = { alternate_option: AlternateOption; - jobs: Job[]; + jobs: Record; }; -export type OccupationDataStatic = {}; -export type OccupationDataConstant = {}; +export type OccupationDataStatic = undefined; +export type OccupationDataConstant = undefined; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx index 6130794a6b..eeb912e640 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx @@ -5,7 +5,6 @@ import { useEffect, useState, } from 'react'; -import React from 'react'; import { type sendAct, useBackend } from 'tgui/backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiChemList.tsx b/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiChemList.tsx index 9e21aea291..0e3670ff93 100644 --- a/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiChemList.tsx +++ b/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiChemList.tsx @@ -34,34 +34,32 @@ export const ChemicalReactionList = (props: { return ( <> - <> - - - - {instant_reactions ? ( - Array.isArray(instant_reactions) ? ( - instant_reactions.map((reactionTypes, index) => - getReactionComponents(reactionTypes, 'Breakdown', index + 1), - ) - ) : ( - Object.keys(instant_reactions).map((reaction) => - getReactionComponents( - instant_reactions[reaction], - 'Breakdown', - 1, - ), - ) + + + + {instant_reactions ? ( + Array.isArray(instant_reactions) ? ( + instant_reactions.map((reactionTypes, index) => + getReactionComponents(reactionTypes, 'Breakdown', index + 1), ) ) : ( - - )} - - - + Object.keys(instant_reactions).map((reaction) => + getReactionComponents( + instant_reactions[reaction], + 'Breakdown', + 1, + ), + ) + ) + ) : ( + + )} + + {!!distilled_reactions && ( <> @@ -173,25 +171,23 @@ function getReactionComponents( )} {(!!reactionTypes.require_xgm_gas || !!reactionTypes.rejects_xgm_gas) && } - {!!reactionTypes.required && !!reactionTypes.required.length && ( - <> - {reactionTypes.required.map((required) => ( - - {!!reactionTypes.is_slime && ( - <> - - {capitalize(reactionTypes.is_slime)} - - - - )} - - {required} - - - ))} - - )} + {!!reactionTypes.required && + !!reactionTypes.required.length && + reactionTypes.required.map((required) => ( + + {!!reactionTypes.is_slime && ( + <> + + {capitalize(reactionTypes.is_slime)} + + + + )} + + {required} + + + ))} {!!reactionTypes.inhibitor && !!reactionTypes.inhibitor.length && ( <> diff --git a/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiColorIcon.tsx b/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiColorIcon.tsx index 80a9f703fc..f9da2a19a7 100644 --- a/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiColorIcon.tsx +++ b/tgui/packages/tgui/interfaces/PublicLibraryWiki/WikiCommon/WikiColorIcon.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Box, Icon } from 'tgui-core/components'; export const getImage = async (url: string): Promise => { diff --git a/tgui/packages/tgui/interfaces/RCON/RCONSmesList.tsx b/tgui/packages/tgui/interfaces/RCON/RCONSmesList.tsx index b6faf8d3d2..4c0f870274 100644 --- a/tgui/packages/tgui/interfaces/RCON/RCONSmesList.tsx +++ b/tgui/packages/tgui/interfaces/RCON/RCONSmesList.tsx @@ -1,6 +1,6 @@ +import type { ReactNode } from 'react'; import { useBackend } from 'tgui/backend'; import { Button, Section, Stack } from 'tgui-core/components'; - import { SMESItem } from './RCONSMESItem'; import type { Data } from './types'; @@ -9,7 +9,7 @@ export const RCONSmesList = (props) => { const { smes_info, pages, current_page } = data; - const runCallback = (cb: Function) => { + const runCallback = (cb: () => ReactNode) => { return cb(); }; diff --git a/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx b/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx index 0e6a85e523..49c65392aa 100644 --- a/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx +++ b/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx @@ -104,11 +104,8 @@ export const RIGSuitHardware = (props) => { > { const ResearchServer = (props: { server: server; - setSelectedServer: Function; + setSelectedServer: React.Dispatch>; }) => { const { data } = useBackend(); const { badmin } = data; diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts index 350b5544a2..b4a16d48f4 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts +++ b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts @@ -41,6 +41,7 @@ type record = { export type modalData = { id: string; text: string; + // biome-ignore lint/complexity/noBannedTypes: In this case we got any type of Object args: {}; - modal_type: string; + type: string; }; diff --git a/tgui/packages/tgui/interfaces/SmartVend.tsx b/tgui/packages/tgui/interfaces/SmartVend.tsx index 909dfa9820..e37f6221c7 100644 --- a/tgui/packages/tgui/interfaces/SmartVend.tsx +++ b/tgui/packages/tgui/interfaces/SmartVend.tsx @@ -34,18 +34,6 @@ export const SmartVend = (props) => { const [sortOrder, setSortOrder] = useState('Alphabetical'); const [descending, setDescending] = useState(false); - function handleSearchText(value: string) { - setSearchText(value); - } - - function handleSortOrder(value: string) { - setSortOrder(value); - } - - function handleDescending(value: boolean) { - setDescending(value); - } - const { secure, locked, contents } = data; return ( @@ -55,7 +43,7 @@ export const SmartVend = (props) => { {(secure && locked === -1 && ( - Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($... + {`Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($...`} )) || @@ -73,9 +61,9 @@ export const SmartVend = (props) => { searchText={searchText} sortOrder={sortOrder} descending={descending} - onSearchText={handleSearchText} - onSortOrder={handleSortOrder} - onDescending={handleDescending} + onSearchText={setSearchText} + onSortOrder={setSortOrder} + onDescending={setDescending} /> >; + onSortOrder: React.Dispatch>; + onDescending: React.Dispatch>; }) => { const { searchText, diff --git a/tgui/packages/tgui/interfaces/SuitCycler.tsx b/tgui/packages/tgui/interfaces/SuitCycler.tsx index cfa786e816..ff3aaa2969 100644 --- a/tgui/packages/tgui/interfaces/SuitCycler.tsx +++ b/tgui/packages/tgui/interfaces/SuitCycler.tsx @@ -42,20 +42,12 @@ export const SuitCycler = (props) => { (!!species && species[0]) || undefined, ); - function handleSelectedDepartment(value: string | undefined) { - setSelectedDepartment(value); - } - - function handleSelectedSpecies(value: string | undefined) { - setSelectedSpecies(value); - } - let subTemplate = ( ); @@ -77,8 +69,10 @@ export const SuitCycler = (props) => { const SuitCyclerContent = (props: { selectedDepartment: string | undefined; selectedSpecies: string | undefined; - onSelectedDepartment: Function; - onSelectedSpecies: Function; + onSelectedDepartment: React.Dispatch< + React.SetStateAction + >; + onSelectedSpecies: React.Dispatch>; }) => { const { act, data } = useBackend(); const { diff --git a/tgui/packages/tgui/interfaces/SupplyConsole/types.ts b/tgui/packages/tgui/interfaces/SupplyConsole/types.ts index 7d8bc8133b..6877bc09dd 100644 --- a/tgui/packages/tgui/interfaces/SupplyConsole/types.ts +++ b/tgui/packages/tgui/interfaces/SupplyConsole/types.ts @@ -24,7 +24,7 @@ export type modalData = { ref: string; random: number; }; - modal_type: string; + type: string; }; export type supplyPack = { diff --git a/tgui/packages/tgui/interfaces/Uplink/UplinkHeader.tsx b/tgui/packages/tgui/interfaces/Uplink/UplinkHeader.tsx index f7d39db013..0b7769a5b6 100644 --- a/tgui/packages/tgui/interfaces/Uplink/UplinkHeader.tsx +++ b/tgui/packages/tgui/interfaces/Uplink/UplinkHeader.tsx @@ -5,7 +5,7 @@ import type { Data } from './types'; export const UplinkHeader = (props: { screen: number; - setScreen: Function; + setScreen: React.Dispatch>; }) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Vending.tsx b/tgui/packages/tgui/interfaces/Vending.tsx index 0b19e16384..b108c53f27 100644 --- a/tgui/packages/tgui/interfaces/Vending.tsx +++ b/tgui/packages/tgui/interfaces/Vending.tsx @@ -98,14 +98,10 @@ export const Vending = (props) => { const { panel } = data; const [searchText, setSearchText] = useState(''); - function handleSearchText(value: string) { - setSearchText(value); - } - return ( - + {panel ? : null} @@ -114,7 +110,7 @@ export const Vending = (props) => { export const VendingProducts = (props: { searchText: string; - onSearch: Function; + onSearch: React.Dispatch>; }) => { const { act, data } = useBackend(); const { coin, chargesMoney, user, userMoney, guestNotice, products } = data; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelTextArea.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelTextArea.tsx index ba502d6d3e..5baeaf56b8 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelTextArea.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelElements/VorePanelTextArea.tsx @@ -27,18 +27,19 @@ const DescriptionSyntaxHighlighting = (props: { desc: string }) => { const regexCopy = new RegExp(SYNTAX_REGEX); let lastIndex = 0; - let result; - while ((result = regexCopy.exec(desc)) !== null) { - elements.push(<>{desc.substring(lastIndex, result.index)}); + let result = regexCopy.exec(desc); + while (result !== null) { + elements.push(desc.substring(lastIndex, result.index)); elements.push( {result[0]} , ); lastIndex = result.index + result[0].length; + result = regexCopy.exec(desc); } - elements.push(<>{desc.substring(lastIndex)}); + elements.push(desc.substring(lastIndex)); setHtmlDesc(elements); }, [desc]); @@ -49,7 +50,7 @@ const DescriptionSyntaxHighlighting = (props: { desc: string }) => { const CountedTextElement = (props: { limit: number; entry: string; - action: Function; + action: (value: string | string[], index?: number) => void; index?: number; }) => { const { entry, limit, action, index } = props; @@ -90,7 +91,7 @@ const CountedTextElement = (props: { const AreaMapper = (props: { limit: number; entry: string[]; - action: Function; + action: (value: string | string[], index?: number) => void; exactLength: boolean; maxEntries: number; }) => { @@ -163,7 +164,7 @@ export const VorePanelEditTextArea = (props: { noHighlight, } = props; - function doAct(value: string | string[]) { + function doAct(value: string | string[]): void { if (Array.isArray(value)) { act(action, { attribute: listAction, msgtype: subAction, val: value }); return; diff --git a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx index 8c94d1022d..9e0f4e6656 100644 --- a/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx +++ b/tgui/packages/tgui/interfaces/VorePanel/VorePanelMainTabs/VoreSelectedBelly.tsx @@ -124,7 +124,7 @@ export const VoreSelectedBelly = (props: { onClick={() => act('change_vore_tab', { tab: index })} > {tabToNames[index]} - {!!(index === 6) && '(' + content_length + ')'} + {!!(index === 6) && `(${content_length})`} ))} diff --git a/tgui/packages/tgui/interfaces/chompstation/Changelog.tsx b/tgui/packages/tgui/interfaces/chompstation/Changelog.tsx index bd903876ca..1223bc4bc1 100644 --- a/tgui/packages/tgui/interfaces/chompstation/Changelog.tsx +++ b/tgui/packages/tgui/interfaces/chompstation/Changelog.tsx @@ -44,8 +44,11 @@ const icons = { type Data = { dates: string[] }; +// biome-ignore lint/complexity/noBannedTypes:Ingored here +type ChangelogProps = {}; + export class Changelog extends Component< - {}, + ChangelogProps, { data: | string @@ -84,21 +87,19 @@ export class Changelog extends Component< const maxAttempts = 6; if (attemptNumber > maxAttempts) { - return this.setData( - 'Failed to load data after ' + maxAttempts + ' attempts', - ); + return this.setData(`Failed to load data after ${maxAttempts} attempts`); } act('get_month', { date }); - fetch(resolveAsset(date + '.yml')).then(async (changelogData) => { + fetch(resolveAsset(`${date}.yml`)).then(async (changelogData) => { const result = await changelogData.text(); const errorRegex = /^Cannot find/; if (errorRegex.test(result)) { const timeout = 50 + attemptNumber * 50; - self.setData('Loading changelog data' + '.'.repeat(attemptNumber + 3)); + self.setData(`Loading changelog data${'.'.repeat(attemptNumber + 3)}`); setTimeout(() => { self.getData(date, attemptNumber + 1); }, timeout); @@ -307,12 +308,12 @@ export class Changelog extends Component< color={ icons[changeType] ? icons[changeType].color - : icons['unknown'].color + : icons.unknown.icon } name={ icons[changeType] ? icons[changeType].icon - : icons['unknown'].icon + : icons.unknown.icon } /> diff --git a/tgui/packages/tgui/interfaces/chompstation/ChemMaster/ChemMasterProductionChemical.tsx b/tgui/packages/tgui/interfaces/chompstation/ChemMaster/ChemMasterProductionChemical.tsx index 66e83287a2..4ad501c286 100644 --- a/tgui/packages/tgui/interfaces/chompstation/ChemMaster/ChemMasterProductionChemical.tsx +++ b/tgui/packages/tgui/interfaces/chompstation/ChemMaster/ChemMasterProductionChemical.tsx @@ -38,7 +38,7 @@ export const ChemMasterProductionChemical = (props: { }} > { align="flex-start" disabled={1} > - {c.title + ' (' + c.amount + ')'} + {`${c.title} (${c.amount})`} ))} diff --git a/tgui/packages/tgui/interfaces/chompstation/ChemSynthesizer/ChemSynthesizerSettings.tsx b/tgui/packages/tgui/interfaces/chompstation/ChemSynthesizer/ChemSynthesizerSettings.tsx index eb2f113d65..9f3f6fa9ff 100644 --- a/tgui/packages/tgui/interfaces/chompstation/ChemSynthesizer/ChemSynthesizerSettings.tsx +++ b/tgui/packages/tgui/interfaces/chompstation/ChemSynthesizer/ChemSynthesizerSettings.tsx @@ -100,7 +100,7 @@ export const ChemSynthesizerSettings = (props) => { { { { OOC Note: PTO acquired is account-wide and shared across all characters. Info listed below is not IC information. -

+
{!!department_hours && Object.keys(department_hours).map((key) => ( diff --git a/tgui/packages/tgui/interfaces/chompstation/PrecisionEditor.tsx b/tgui/packages/tgui/interfaces/chompstation/PrecisionEditor.tsx index 88b7a1e872..f410ab721a 100644 --- a/tgui/packages/tgui/interfaces/chompstation/PrecisionEditor.tsx +++ b/tgui/packages/tgui/interfaces/chompstation/PrecisionEditor.tsx @@ -47,7 +47,7 @@ const SeedStatus = (props) => { {seedname} {health < 100 ? ( - {100 - health + '%'} + {`${100 - health}%`} ) : ( @@ -119,7 +119,7 @@ const BiochemEditor = (props) => { {health < 100 ? ( - {100 - health + '%'} + {`${100 - health}%`} ) : ( diff --git a/tgui/packages/tgui/interfaces/chompstation/StarcasterCh.tsx b/tgui/packages/tgui/interfaces/chompstation/StarcasterCh.tsx index a8be46b228..deb5171f2c 100644 --- a/tgui/packages/tgui/interfaces/chompstation/StarcasterCh.tsx +++ b/tgui/packages/tgui/interfaces/chompstation/StarcasterCh.tsx @@ -7,7 +7,7 @@ import type { BooleanLike } from 'tgui-core/react'; type Data = { showing_archived: BooleanLike; - article: { title: String; cover: string; content: string } | null; + article: { title: string; cover: string; content: string } | null; all_articles: { name: string; uid: number; archived: BooleanLike }[]; }; @@ -42,7 +42,7 @@ const SelectedArticle = (props) => { return (
act('PRG_reset')}> Close diff --git a/tgui/packages/tgui/interfaces/chompstation/TguiFeedback.tsx b/tgui/packages/tgui/interfaces/chompstation/TguiFeedback.tsx index 45359c75f0..d51811e6d4 100644 --- a/tgui/packages/tgui/interfaces/chompstation/TguiFeedback.tsx +++ b/tgui/packages/tgui/interfaces/chompstation/TguiFeedback.tsx @@ -65,7 +65,7 @@ export const TguiFeedback = (props) => { )} - : {<>Please select an open window on the left!} + : Please select an open window on the left! diff --git a/tgui/packages/tgui/interfaces/common/ComplexModal.tsx b/tgui/packages/tgui/interfaces/common/ComplexModal.tsx index 22ca961e3a..88ee27c6d4 100644 --- a/tgui/packages/tgui/interfaces/common/ComplexModal.tsx +++ b/tgui/packages/tgui/interfaces/common/ComplexModal.tsx @@ -1,15 +1,16 @@ import { type KeyboardEvent, useRef, useState } from 'react'; import { useBackend } from 'tgui/backend'; -import { Modal } from 'tgui-core/components'; import { Box, Button, Dropdown, Image, Input, + Modal, Stack, } from 'tgui-core/components'; +// biome-ignore lint/complexity/noBannedTypes: In this case, we got any type of Object type Data = { modal: { id: string; args: {}; text: string; type: string } }; const bodyOverrides = {}; @@ -39,11 +40,18 @@ export const modalOpen = (id, args = {}) => { */ export const modalRegisterBodyOverride = ( id: string, - bodyOverride: Function, + bodyOverride: (modal: { + id: string; + text: string; + // biome-ignore lint/complexity/noBannedTypes: In this case, we got any type of Object + args: {}; + type: string; + }) => React.JSX.Element, ) => { bodyOverrides[id] = bodyOverride; }; +// biome-ignore lint/complexity/noBannedTypes: In this case, we got any type of Object const modalAnswer = (id: string, answer: string, args: {}) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/layouts/TitleBar.tsx b/tgui/packages/tgui/layouts/TitleBar.tsx index f5b63120c6..25dc90e6f3 100644 --- a/tgui/packages/tgui/layouts/TitleBar.tsx +++ b/tgui/packages/tgui/layouts/TitleBar.tsx @@ -24,7 +24,6 @@ function statusToColor(status: number): string { return 'good'; case UI_UPDATE: return 'average'; - case UI_DISABLED: default: return 'bad'; } diff --git a/tools/StrongDMM/README.md b/tools/StrongDMM/README.md index ba8a552901..9c550696c0 100644 --- a/tools/StrongDMM/README.md +++ b/tools/StrongDMM/README.md @@ -1,14 +1,17 @@ # StrongDMM ### LICENSE + The contents of this folder are licensed under the GNU General Public License version 3, which can be found in full in ~/LICENSE-GPL3.txt. The source code can be found at https://github.com/SpaiR/StrongDMM ### Overview + [SpaiR/StrongDMM](https://github.com/SpaiR/StrongDMM) is a 3rd-party program licensed under GPL-v3 that loads in the object tree from a .dme file, and provides an interface very similar to DreamMaker's own mapping interface with which to make and edit .dmm map files. Generally speaking, it loads faster than DM, has several useful features and a cleaner interface, but requires compilation from a separate program (With some care required to ensure that changes are properly copied over). Executables for both Windows and Linux are provided, differentiated by the windows executable being suffixed with `.exe`. There are also instructions on StrongDMM's github page (Linked above) on how to build it from the source code (Not provided) ### Setup + Navigate to `/tools/StrongDMM` and run the launcher appropriate for your operating system. If you're on windows, it ends in `.exe`. If you're on linux, it has no suffix. Because going into those folders is considered tedious by ~~lazy coders~~ basically everyone, it's recommended to set up a shortcut in the root directory. The launcher will automatically update to the latest build and then open the editor. You should see something like this: ![.png](https://puu.sh/H75QH/28c4a5917c.png) @@ -19,8 +22,8 @@ It's important to note the format of the map files you intend to be working with You can also change the other settings as you see fit, but the map save format and nudge mode are most important. Unless you know what you're doing, you probably don't want to change nudge mode, as `step_x/step_y` breaks the commonly-used glide movement animations. Ticking the `Alternate Scrolling Behaviour` will allow you to zoom while holding Space, and scrolling otherwise pans like DreamMaker. With the option unticked, scrolling will only affect zoom. The middle mouse button can always be used to pan, in either case. - ### Loading a map + If this is the first time you're using StrongDMM, the panel on the left will be blank except for the `Open Environment...` button at the top. You'll want to click that (Or go `File`->`Open Environment`, or open one directly from `Recent Environments`) and then navigate to the `.dme` file for the project you're working on. StrongDMM needs this to load in the object tree so it can understand the map files that you try to load. It's generally a good idea to make sure that the map files you want to load successfully compile, which generally means making sure the right files for their map-specific objects and areas are ticked when you compile. Once you've loaded an environment, the panel on the left should show the object tree, which looks very similar to DreamMaker's UI, but is notably not a blinding white. ![.png](https://puu.sh/H75YM/dc455a1b42.png) @@ -34,6 +37,7 @@ If the map cannot load correctly because objects aren't defined in the environme ![.png](https://puu.sh/H763d/c609eaff27.png) ### Mapping + Once a map is loaded, you're pretty much free to start mapping, just as you would in DreamMaker. You can use Ctrl+[1, 2, 3, 4] to toggle the various layers or do so manually from the `Options` menu, which notably _doesn't_ require ticking any extra boxes. By default, in the bottom right of the screen will be one or two small UI elements. The bottommost one will show the map coordinates of the cursor, and the top one, if present, will allow you to move between Z-levels on maps with multiple Z levels (But not when multiple map _files_ are stitched together into multi-Z). ![.png](https://puu.sh/H7685/da1121bfef.png) @@ -42,4 +46,4 @@ Shift+Right Click will open up the Edit-Variables interface for whatever you cli ![.png](https://puu.sh/H76aI/0726f5ebc4.png) -The only other really important thing to note is that all these panels can be moved about the whole window, so if you find something is in the way, you're totally free to move it. And again, remember to save (Ctrl+S) and compile your changes before you start your test server and wonder where in the hells all your changes went. \ No newline at end of file +The only other really important thing to note is that all these panels can be moved about the whole window, so if you find something is in the way, you're totally free to move it. And again, remember to save (Ctrl+S) and compile your changes before you start your test server and wonder where in the hells all your changes went. diff --git a/tools/UpdatePaths/readme.md b/tools/UpdatePaths/readme.md index 6e40a73e10..23f2ce6976 100644 --- a/tools/UpdatePaths/readme.md +++ b/tools/UpdatePaths/readme.md @@ -74,6 +74,7 @@ If you do not want any variable edits to carry over, you can simply skip adding ```txt /obj/structure/door/airlock/science/closed/rd : /obj/structure/door/airlock/science/rd/closed ``` + On this example map key: ```dm @@ -85,8 +86,8 @@ On this example map key: /turf/open/floor/iron, /area/science/rd), ``` -You will then result the following: +You will then result the following: ```dm "a" = ( @@ -134,11 +135,12 @@ Presto, like it never existed. Note how both the "a" and "b" files were able to ### Multiple Path Output -UpdatePaths has the powerful ability to output multiple paths from a single input path. Let's say that you have a snowflake turf (`/turf/open/floor/iron/i_like_spawning_mobs`) with some behavior that you atomize out into some spawner `/obj/mob_spawner` that can work on every single turf. So, let's script that out. +UpdatePaths has the powerful ability to output multiple paths from a single input path. Let's say that you have a snowflake turf (`/turf/open/floor/iron/i_like_spawning_mobs`) with some behavior that you atomize out into some spawner `/obj/mob_spawner` that can work on every single turf. So, let's script that out. ```txt /turf/open/floor/iron/i_like_spawning_mobs : /obj/mob_spawner, /turf/open/floor/iron ``` + So, now when you have the following example map keys: ```dm @@ -155,6 +157,7 @@ Running the script will mutate this into: /turf/open/floor/iron, /area/station/kitchen), ``` + Remember that this is a kind of silly example, but this is one of the things that UpdatePaths was built to do- help coders fix shitty code without having to bug out over how maps don't compile. ### Subtype Handling @@ -197,7 +200,6 @@ Running the script will update this into: Note how since you kept in `{@OLD}`, it was able to retain the re-named variables of the subtypes. - ### Old Path Variable Filtering Alright, there's a few subsections here. This is how you are able to filter out old paths to ensure you target something precise. Let's just go through them one by one. @@ -256,6 +258,7 @@ That's cool, but let's say you have this same example, but let's say that you do ```txt /mob/living/basic/mouse{name="Tom"} : /mob/living/basic/mouse/tom{pixel_x = @OLD} ``` + The following is also supported, but it's not recommended since it's harder to read because it doesn't really mesh with the TGM format: ```txt @@ -341,6 +344,7 @@ You would then get the following output: Note how we keep the "Money Hole" intact, while still managing to extrapolate the `dir` variable to 1 on the sink that had absolutely no variables set on it. This is useful for when you want to change a variable that is not shown in the map editor, but you want to keep the rest of the variables intact. #### Methods: Any Value Fits All and Naming Conventions + But what if you just want to rename the variable `maxHealth` to `good_boy_points` for all instances of `/mob/living/github_user`? Using the `@ANY` parameter after a variable name, you can capture any instance that has it edited in a map. While, to set the value of the newly named `good_boy_points` to that of the old `maxHealth`, we can use `@OLD:maxHealth`, put after the name of the new variable to achieve that. The result'll be something like this: ```txt @@ -400,6 +404,7 @@ All of the examples provided within are not mutually exclusive! They can be mixe ## Why should I care? UpdatePaths is an incredible valuable tool to the following populations: + - Mappers who have mapping PRs that take a long time to create, and that will need to be updated as progression goes on. Having an UpdatePaths file makes it much more simple to get them to compile their map properly, and not lose paths. - Downstreams who have additional maps to the ones we have. You obviously can't Search & Replace fix for a whole downstream, but you can give them the ammunition (UpdatePaths script) for them to quickly and easily resolve that problem. - You! As you've seen, you can do a lot of clever and powerful tools that respect the TGM format, from Old Path Filtering to Multiple Path Output- and you can do it all with a simple text file! Otherwise, you would be stuck in absolute RegEx hell, and still end up missing on several potential edge cases. UpdatePaths is built on the same framework that builds the TGM format, so it's incredibly reliable in finding and replacing paths. diff --git a/tools/alwayson-backend/README b/tools/alwayson-backend/README index 8c9c204093..b261f887c5 100644 --- a/tools/alwayson-backend/README +++ b/tools/alwayson-backend/README @@ -7,6 +7,4 @@ you will have to supply the correct ip-address/domain and port on where this API For this you can set the DBCONFIG_PATH environment variable (or use the .env.example) to the exact path of the config/dbconfig.txt. - - -Do not forget to rename .env.example to .env of course, if you want to use a file. \ No newline at end of file +Do not forget to rename .env.example to .env of course, if you want to use a file. diff --git a/tools/build/build.ts b/tools/build/build.ts index 0b92adf811..98c4e7ffc1 100644 --- a/tools/build/build.ts +++ b/tools/build/build.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node + /** * Build script for /tg/station 13 codebase. * @@ -6,27 +7,27 @@ * https://github.com/stylemistake/juke-build */ -import Bun from "bun"; -import fs from "node:fs"; -import Juke from "./juke/index.js"; -import { bun } from "./lib/bun"; -import { DreamDaemon, DreamMaker, NamedVersionFile } from "./lib/byond"; -import { downloadFile } from "./lib/download"; -import { formatDeps } from "./lib/helpers"; -import { prependDefines } from "./lib/tgs"; +import fs from 'node:fs'; +import Bun from 'bun'; +import Juke from './juke/index.js'; +import { bun, bunRoot } from './lib/bun'; +import { DreamDaemon, DreamMaker, NamedVersionFile } from './lib/byond'; +import { downloadFile } from './lib/download'; +import { formatDeps } from './lib/helpers'; +import { prependDefines } from './lib/tgs'; -export const TGS_MODE = process.env.CBT_BUILD_MODE === "TGS"; +export const TGS_MODE = process.env.CBT_BUILD_MODE === 'TGS'; -export const DME_NAME = "vorestation"; +export const DME_NAME = 'vorestation'; -Juke.chdir("../..", import.meta.url); +Juke.chdir('../..', import.meta.url); -const dependencies: Record = await Bun.file("dependencies.sh") +const dependencies: Record = await Bun.file('dependencies.sh') .text() .then(formatDeps) .catch((err) => { Juke.logger.error( - "Failed to read dependencies.sh, please ensure it exists and is formatted correctly.", + 'Failed to read dependencies.sh, please ensure it exists and is formatted correctly.', ); Juke.logger.error(err); throw new Juke.ExitCode(1); @@ -35,8 +36,8 @@ const dependencies: Record = await Bun.file("dependencies.sh") // Canonical path for the cutter exe at this moment function getCutterPath() { const ver = dependencies.CUTTER_VERSION; - const suffix = process.platform === "win32" ? ".exe" : ""; - const file_ver = ver.split(".").join("-"); + const suffix = process.platform === 'win32' ? '.exe' : ''; + const file_ver = ver.split('.').join('-'); return `tools/icon_cutter/cache/hypnagogic${file_ver}${suffix}`; } @@ -44,39 +45,39 @@ function getCutterPath() { const cutter_path = getCutterPath(); export const DefineParameter = new Juke.Parameter({ - type: "string[]", - alias: "D", + type: 'string[]', + alias: 'D', }); export const PortParameter = new Juke.Parameter({ - type: "string", - alias: "p", + type: 'string', + alias: 'p', }); export const DmVersionParameter = new Juke.Parameter({ - type: "string", + type: 'string', }); -export const CiParameter = new Juke.Parameter({ type: "boolean" }); +export const CiParameter = new Juke.Parameter({ type: 'boolean' }); export const ForceRecutParameter = new Juke.Parameter({ - type: "boolean", - name: "force-recut", + type: 'boolean', + name: 'force-recut', }); export const SkipIconCutter = new Juke.Parameter({ - type: "boolean", - name: "skip-icon-cutter", + type: 'boolean', + name: 'skip-icon-cutter', }); export const WarningParameter = new Juke.Parameter({ - type: "string[]", - alias: "W", + type: 'string[]', + alias: 'W', }); export const NoWarningParameter = new Juke.Parameter({ - type: "string[]", - alias: "I", + type: 'string[]', + alias: 'I', }); export const CutterTarget = new Juke.Target({ @@ -87,11 +88,11 @@ export const CutterTarget = new Juke.Target({ executes: async () => { const repo = dependencies.CUTTER_REPO; const ver = dependencies.CUTTER_VERSION; - const suffix = process.platform === "win32" ? ".exe" : ""; + const suffix = process.platform === 'win32' ? '.exe' : ''; const download_from = `https://github.com/${repo}/releases/download/${ver}/hypnagogic${suffix}`; await downloadFile(download_from, cutter_path); - if (process.platform !== "win32") { - await Juke.exec("chmod", ["+x", cutter_path]); + if (process.platform !== 'win32') { + await Juke.exec('chmod', ['+x', cutter_path]); } }, }); @@ -114,7 +115,7 @@ export const IconCutterTarget = new Juke.Target({ ]; return [ ...standard_inputs, - ...existing_configs.map((file) => file.replace(".toml", "")), + ...existing_configs.map((file) => file.replace('.toml', '')), ]; }, outputs: ({ get }) => { @@ -124,15 +125,15 @@ export const IconCutterTarget = new Juke.Target({ ...Juke.glob(`icons/**/*.dmi.toml`), ]; return folders - .map((file) => file.replace(`.png.toml`, ".dmi")) - .map((file) => file.replace(`.dmi.toml`, ".png")); + .map((file) => file.replace(`.png.toml`, '.dmi')) + .map((file) => file.replace(`.dmi.toml`, '.png')); }, executes: async () => { await Juke.exec(cutter_path, [ - "--dont-wait", - "--templates", - "cutter_templates", - "icons", + '--dont-wait', + '--templates', + 'cutter_templates', + 'icons', ]); }, }); @@ -140,18 +141,18 @@ export const IconCutterTarget = new Juke.Target({ export const DmMapsIncludeTarget = new Juke.Target({ executes: async () => { const folders = [ - ...Juke.glob("_maps/map_files/**/modular_pieces/*.dmm"), - ...Juke.glob("_maps/RandomRuins/**/*.dmm"), - ...Juke.glob("_maps/RandomZLevels/**/*.dmm"), - ...Juke.glob("_maps/shuttles/**/*.dmm"), - ...Juke.glob("_maps/templates/**/*.dmm"), + ...Juke.glob('_maps/map_files/**/modular_pieces/*.dmm'), + ...Juke.glob('_maps/RandomRuins/**/*.dmm'), + ...Juke.glob('_maps/RandomZLevels/**/*.dmm'), + ...Juke.glob('_maps/shuttles/**/*.dmm'), + ...Juke.glob('_maps/templates/**/*.dmm'), ]; const content = folders - .map((file) => file.replace("_maps/", "")) + .map((file) => file.replace('_maps/', '')) .map((file) => `#include "${file}"`) - .join("\n") + "\n"; - fs.writeFileSync("_maps/templates.dm", content); + .join('\n') + '\n'; + fs.writeFileSync('_maps/templates.dm', content); }, }); @@ -164,18 +165,18 @@ export const DmTarget = new Juke.Target({ SkipIconCutter, ], dependsOn: ({ get }) => [ - get(DefineParameter).includes("ALL_MAPS") && DmMapsIncludeTarget, + get(DefineParameter).includes('ALL_MAPS') && DmMapsIncludeTarget, !get(SkipIconCutter) && IconCutterTarget, ], inputs: [ - "_maps/map_files/generic/**", - "maps/**/*.dm", - "code/**", - "html/**", - "icons/**", - "interface/**", - "sound/**", - "tgui/public/tgui.html", + '_maps/map_files/generic/**', + 'maps/**/*.dm', + 'code/**', + 'html/**', + 'icons/**', + 'interface/**', + 'sound/**', + 'tgui/public/tgui.html', `${DME_NAME}.dme`, NamedVersionFile, ], @@ -187,8 +188,8 @@ export const DmTarget = new Juke.Target({ }, executes: async ({ get }) => { await DreamMaker(`${DME_NAME}.dme`, { - defines: ["CBT", ...get(DefineParameter)], - warningsAsErrors: get(WarningParameter).includes("error"), + defines: ['CBT', ...get(DefineParameter)], + warningsAsErrors: get(WarningParameter).includes('error'), ignoreWarningCodes: get(NoWarningParameter), namedDmVersion: get(DmVersionParameter), }); @@ -203,36 +204,36 @@ export const DmTestTarget = new Juke.Target({ NoWarningParameter, ], dependsOn: ({ get }) => [ - get(DefineParameter).includes("ALL_MAPS") && DmMapsIncludeTarget, + get(DefineParameter).includes('ALL_MAPS') && DmMapsIncludeTarget, IconCutterTarget, ], executes: async ({ get }) => { fs.copyFileSync(`${DME_NAME}.dme`, `${DME_NAME}.test.dme`); await DreamMaker(`${DME_NAME}.test.dme`, { - defines: ["CBT", "CIBUILDING", ...get(DefineParameter)], - warningsAsErrors: get(WarningParameter).includes("error"), + defines: ['CBT', 'CIBUILDING', ...get(DefineParameter)], + warningsAsErrors: get(WarningParameter).includes('error'), ignoreWarningCodes: get(NoWarningParameter), namedDmVersion: get(DmVersionParameter), }); - Juke.rm("data/logs/ci", { recursive: true }); + Juke.rm('data/logs/ci', { recursive: true }); const options = { dmbFile: `${DME_NAME}.test.dmb`, namedDmVersion: get(DmVersionParameter), }; await DreamDaemon( options, - "-close", - "-trusted", - "-verbose", - "-params", - "log-directory=ci", + '-close', + '-trusted', + '-verbose', + '-params', + 'log-directory=ci', ); - Juke.rm("*.test.*"); + Juke.rm('*.test.*'); try { - const cleanRun = fs.readFileSync("data/logs/ci/clean_run.lk", "utf-8"); + const cleanRun = fs.readFileSync('data/logs/ci/clean_run.lk', 'utf-8'); console.log(cleanRun); } catch (err) { - Juke.logger.error("Test run was not clean, exiting"); + Juke.logger.error('Test run was not clean, exiting'); throw new Juke.ExitCode(1); } }, @@ -246,21 +247,21 @@ export const AutowikiTarget = new Juke.Target({ NoWarningParameter, ], dependsOn: ({ get }) => [ - get(DefineParameter).includes("ALL_MAPS") && DmMapsIncludeTarget, + get(DefineParameter).includes('ALL_MAPS') && DmMapsIncludeTarget, IconCutterTarget, ], - outputs: ["data/autowiki_edits.txt"], + outputs: ['data/autowiki_edits.txt'], executes: async ({ get }) => { fs.copyFileSync(`${DME_NAME}.dme`, `${DME_NAME}.test.dme`); await DreamMaker(`${DME_NAME}.test.dme`, { - defines: ["CBT", "AUTOWIKI", ...get(DefineParameter)], - warningsAsErrors: get(WarningParameter).includes("error"), + defines: ['CBT', 'AUTOWIKI', ...get(DefineParameter)], + warningsAsErrors: get(WarningParameter).includes('error'), ignoreWarningCodes: get(NoWarningParameter), namedDmVersion: get(DmVersionParameter), }); - Juke.rm("data/autowiki_edits.txt"); - Juke.rm("data/autowiki_files", { recursive: true }); - Juke.rm("data/logs/ci", { recursive: true }); + Juke.rm('data/autowiki_edits.txt'); + Juke.rm('data/autowiki_files', { recursive: true }); + Juke.rm('data/logs/ci', { recursive: true }); const options = { dmbFile: `${DME_NAME}.test.dmb`, @@ -268,15 +269,15 @@ export const AutowikiTarget = new Juke.Target({ }; await DreamDaemon( options, - "-close", - "-trusted", - "-verbose", - "-params", - "log-directory=ci", + '-close', + '-trusted', + '-verbose', + '-params', + 'log-directory=ci', ); - Juke.rm("*.test.*"); - if (!fs.existsSync("data/autowiki_edits.txt")) { - Juke.logger.error("Autowiki did not generate an output, exiting"); + Juke.rm('*.test.*'); + if (!fs.existsSync('data/autowiki_edits.txt')) { + Juke.logger.error('Autowiki did not generate an output, exiting'); throw new Juke.ExitCode(1); } }, @@ -284,112 +285,93 @@ export const AutowikiTarget = new Juke.Target({ export const BunTarget = new Juke.Target({ parameters: [CiParameter], - inputs: ["tgui/**/package.json"], + inputs: ['tgui/**/package.json'], executes: () => { - return bun("install", "--frozen-lockfile", "--ignore-scripts"); + return bun('install', '--frozen-lockfile', '--ignore-scripts'); + }, +}); + +export const BiomeInstallTarget = new Juke.Target({ + dependsOn: [BunTarget], + inputs: ['package.json', 'bun.lock'], + onlyWhen: () => { + return Juke.glob('node_modules/@biomejs/**').length === 0; + }, + executes: () => { + return bunRoot('install'); }, }); export const TgFontTarget = new Juke.Target({ dependsOn: [BunTarget], inputs: [ - "tgui/packages/tgfont/**/*.+(js|mjs|svg)", - "tgui/packages/tgfont/package.json", + 'tgui/packages/tgfont/**/*.+(js|mjs|svg)', + 'tgui/packages/tgfont/package.json', ], outputs: [ - "tgui/packages/tgfont/dist/tgfont.css", - "tgui/packages/tgfont/dist/tgfont.woff2", + 'tgui/packages/tgfont/dist/tgfont.css', + 'tgui/packages/tgfont/dist/tgfont.woff2', ], executes: async () => { - await bun("tgfont:build"); - fs.mkdirSync("tgui/packages/tgfont/static", { recursive: true }); + await bun('tgfont:build'); + fs.mkdirSync('tgui/packages/tgfont/static', { recursive: true }); fs.copyFileSync( - "tgui/packages/tgfont/dist/tgfont.css", - "tgui/packages/tgfont/static/tgfont.css", + 'tgui/packages/tgfont/dist/tgfont.css', + 'tgui/packages/tgfont/static/tgfont.css', ); fs.copyFileSync( - "tgui/packages/tgfont/dist/tgfont.woff2", - "tgui/packages/tgfont/static/tgfont.woff2", + 'tgui/packages/tgfont/dist/tgfont.woff2', + 'tgui/packages/tgfont/static/tgfont.woff2', ); }, }); export const TguiTarget = new Juke.Target({ - dependsOn: [BunTarget], + dependsOn: [BunTarget, BiomeInstallTarget], inputs: [ - "tgui/rspack.config.ts", - "tgui/**/package.json", - "tgui/packages/**/*.+(js|cjs|ts|tsx|jsx|scss)", + 'tgui/rspack.config.ts', + 'tgui/**/package.json', + 'tgui/packages/**/*.+(js|cjs|ts|tsx|jsx|scss)', ], outputs: [ - "tgui/public/tgui.bundle.css", - "tgui/public/tgui.bundle.js", - "tgui/public/tgui-panel.bundle.css", - "tgui/public/tgui-panel.bundle.js", - "tgui/public/tgui-say.bundle.css", - "tgui/public/tgui-say.bundle.js", + 'tgui/public/tgui.bundle.css', + 'tgui/public/tgui.bundle.js', + 'tgui/public/tgui-panel.bundle.css', + 'tgui/public/tgui-panel.bundle.js', + 'tgui/public/tgui-say.bundle.css', + 'tgui/public/tgui-say.bundle.js', ], - executes: () => bun("tgui:build"), -}); - -export const TguiEslintTarget = new Juke.Target({ - parameters: [CiParameter], - dependsOn: [BunTarget], - executes: ({ get }) => bun("tgui:lint", !get(CiParameter) && "--fix"), -}); - -export const TguiPrettierTarget = new Juke.Target({ - dependsOn: [BunTarget], - executes: () => bun("tgui:prettier"), -}); - -export const TguiSonarTarget = new Juke.Target({ - dependsOn: [BunTarget], - executes: () => bun("tgui:sonar"), + executes: () => bun('tgui:build'), }); export const TguiTscTarget = new Juke.Target({ dependsOn: [BunTarget], - executes: () => bun("tgui:tsc"), + executes: () => bun('tgui:tsc'), }); export const TguiTestTarget = new Juke.Target({ parameters: [CiParameter], dependsOn: [BunTarget], - executes: () => bun("tgui:test"), + executes: () => bun('tgui:test'), +}); + +export const BiomeCheckTarget = new Juke.Target({ + dependsOn: [BunTarget, BiomeInstallTarget], + executes: () => bunRoot('tgui:lint'), }); export const TguiLintTarget = new Juke.Target({ - dependsOn: [BunTarget, TguiPrettierTarget, TguiEslintTarget, TguiTscTarget], + dependsOn: [BunTarget, BiomeCheckTarget, TguiTscTarget], }); export const TguiDevTarget = new Juke.Target({ dependsOn: [BunTarget], - executes: ({ args }) => bun("tgui:dev", ...args), + executes: ({ args }) => bun('tgui:dev', ...args), }); export const TguiAnalyzeTarget = new Juke.Target({ dependsOn: [BunTarget], - executes: () => bun("tgui:analyze"), -}); - -export const TguiBenchTarget = new Juke.Target({ - dependsOn: [BunTarget], - executes: () => bun("tgui:bench"), -}); - -export const TguiPrettierFix = new Juke.Target({ - dependsOn: [BunTarget], - executes: () => bun("tgui:prettier-fix"), -}); - -export const TguiEslintFix = new Juke.Target({ - dependsOn: [BunTarget], - executes: () => bun("tgui:eslint-fix"), -}); - -export const TguiFix = new Juke.Target({ - dependsOn: [TguiPrettierFix, TguiEslintFix], + executes: () => bun('tgui:analyze'), }); export const TestTarget = new Juke.Target({ @@ -408,12 +390,12 @@ export const ServerTarget = new Juke.Target({ parameters: [DmVersionParameter, PortParameter], dependsOn: [BuildTarget], executes: async ({ get }) => { - const port = get(PortParameter) || "1337"; + const port = get(PortParameter) || '1337'; const options = { dmbFile: `${DME_NAME}.dmb`, namedDmVersion: get(DmVersionParameter), }; - await DreamDaemon(options, port, "-trusted -invisible"); + await DreamDaemon(options, port, '-trusted -invisible'); }, }); @@ -423,19 +405,19 @@ export const AllTarget = new Juke.Target({ export const TguiCleanTarget = new Juke.Target({ executes: async () => { - Juke.rm("tgui/public/.tmp", { recursive: true }); - Juke.rm("tgui/public/*.map"); - Juke.rm("tgui/public/*.{chunk,bundle,hot-update}.*"); - Juke.rm("tgui/packages/tgfont/dist", { recursive: true }); - Juke.rm("tgui/node_modules", { recursive: true }); + Juke.rm('tgui/public/.tmp', { recursive: true }); + Juke.rm('tgui/public/*.map'); + Juke.rm('tgui/public/*.{chunk,bundle,hot-update}.*'); + Juke.rm('tgui/packages/tgfont/dist', { recursive: true }); + Juke.rm('tgui/node_modules', { recursive: true }); }, }); export const CleanTarget = new Juke.Target({ dependsOn: [TguiCleanTarget], executes: async () => { - Juke.rm("*.{dmb,rsc}"); - Juke.rm("_maps/templates.dm"); + Juke.rm('*.{dmb,rsc}'); + Juke.rm('_maps/templates.dm'); }, }); @@ -445,24 +427,24 @@ export const CleanTarget = new Juke.Target({ export const CleanAllTarget = new Juke.Target({ dependsOn: [CleanTarget], executes: async () => { - Juke.logger.info("Cleaning up data/logs"); - Juke.rm("data/logs", { recursive: true }); + Juke.logger.info('Cleaning up data/logs'); + Juke.rm('data/logs', { recursive: true }); }, }); export const TgsTarget = new Juke.Target({ dependsOn: [TguiTarget], executes: async () => { - Juke.logger.info("Prepending TGS define"); - prependDefines("TGS"); + Juke.logger.info('Prepending TGS define'); + prependDefines('TGS'); }, }); Juke.setup({ file: import.meta.url }).then((code) => { // We're using the currently available quirk in Juke Build, which // prevents it from exiting on Windows, to wait on errors. - if (code !== 0 && process.argv.includes("--wait-on-error")) { - Juke.logger.error("Please inspect the error and close the window."); + if (code !== 0 && process.argv.includes('--wait-on-error')) { + Juke.logger.error('Please inspect the error and close the window.'); return; } diff --git a/tools/build/lib/bun.ts b/tools/build/lib/bun.ts index 0cb1a4e27e..951af3f50f 100644 --- a/tools/build/lib/bun.ts +++ b/tools/build/lib/bun.ts @@ -1,16 +1,28 @@ -import Juke from "../juke/index.js"; -import { mkdirSync } from "node:fs"; +import { mkdirSync } from 'node:fs'; +import Juke from '../juke/index.js'; let hasInstallFolder = false; export function bun(...args: any[]): Promise { if (!hasInstallFolder) { - mkdirSync("./tgui/node_modules/", { recursive: true }); + mkdirSync('./tgui/node_modules/', { recursive: true }); hasInstallFolder = true; } - return Juke.exec("bun", [...args.filter((arg) => typeof arg === "string")], { - cwd: "./tgui", + return Juke.exec('bun', [...args.filter((arg) => typeof arg === 'string')], { + cwd: './tgui', + shell: true, + }); +} + +export function bunRoot(...args: any[]): Promise { + if (!hasInstallFolder) { + mkdirSync('./node_modules/', { recursive: true }); + hasInstallFolder = true; + } + + return Juke.exec('bun', [...args.filter((arg) => typeof arg === 'string')], { + cwd: './', shell: true, }); } diff --git a/tools/dm-invalid-utf8-discovery/index.js b/tools/dm-invalid-utf8-discovery/index.js index c287e270cb..a08ba698c1 100644 --- a/tools/dm-invalid-utf8-discovery/index.js +++ b/tools/dm-invalid-utf8-discovery/index.js @@ -6,8 +6,8 @@ let files = {}; let count = 0; while (queue.length) { - let entries = await Promise.all( - queue.slice(0, 100).map((path) => readdir(path, { withFileTypes: true })) + const entries = await Promise.all( + queue.slice(0, 100).map((path) => readdir(path, { withFileTypes: true })), ); for (let i = 0; i < entries.length; ++i) { for (const entry of entries[i]) { @@ -24,8 +24,8 @@ while (queue.length) { files = Object.keys(files); while (files.length) { - let queue = files.slice(0, 100); - let buffers = await Promise.all(queue.map((path) => readFile(path))); + const queue = files.slice(0, 100); + const buffers = await Promise.all(queue.map((path) => readFile(path))); for (let i = 0; i < queue.length; ++i) { if (!isValidUTF8(buffers[i])) { console.log(queue[i]); diff --git a/tools/dm-invalid-utf8-discovery/package.json b/tools/dm-invalid-utf8-discovery/package.json index 55af8d18c8..ec37e67139 100644 --- a/tools/dm-invalid-utf8-discovery/package.json +++ b/tools/dm-invalid-utf8-discovery/package.json @@ -1,11 +1,11 @@ { - "name": "dm-invalid-utf8-discovery", - "version": "0.1.0", - "type":"module", - "dependencies": { - "utf-8-validate": "5.0.9" - }, - "contributors": [ - "spookerton (https://github.com/spookerton)" - ] + "name": "dm-invalid-utf8-discovery", + "version": "0.1.0", + "type": "module", + "dependencies": { + "utf-8-validate": "5.0.9" + }, + "contributors": [ + "spookerton (https://github.com/spookerton)" + ] } diff --git a/tools/hooks/README.md b/tools/hooks/README.md index c710590397..1c34d53860 100644 --- a/tools/hooks/README.md +++ b/tools/hooks/README.md @@ -12,9 +12,9 @@ or other script you can run instead - see the links below for details. ## Hooks -* **Pre-commit**: Runs [mapmerge2] to reduce the diff on any changed maps. -* **DMI merger**: Attempts to [fix icon conflicts] when performing a Git merge. -* **DMM merger**: Attempts to [fix map conflicts] when performing a Git merge. +- **Pre-commit**: Runs [mapmerge2] to reduce the diff on any changed maps. +- **DMI merger**: Attempts to [fix icon conflicts] when performing a Git merge. +- **DMM merger**: Attempts to [fix map conflicts] when performing a Git merge. ## Adding New Hooks diff --git a/tools/icon_cutter/README.md b/tools/icon_cutter/README.md index 91edd1a406..8bd416154a 100644 --- a/tools/icon_cutter/README.md +++ b/tools/icon_cutter/README.md @@ -20,4 +20,4 @@ If they have been, the cutter will perform a full runthrough, and compile all in These dmis can then be committed, and badabing badaboom we have autocut sprites. -If you want to change the cutter version we have a set of config values in [dependancies.sh](../../dependencies.sh) that control it. +If you want to change the cutter version we have a set of config values in [dependancies.sh](../../dependencies.sh) that control it. diff --git a/tools/maplint/README.md b/tools/maplint/README.md index 82ee0bd0ce..47a21ae721 100644 --- a/tools/maplint/README.md +++ b/tools/maplint/README.md @@ -1,4 +1,5 @@ # maplint + maplint is a tool that lets you prohibit anti-patterns in maps through simple rules. You can use maplint to do things like ban variable edits for specific types, ban specific variable edits, ban combinations of types, etc. ## Making lints @@ -6,6 +7,7 @@ maplint is a tool that lets you prohibit anti-patterns in maps through simple ru To create a lint, create a new file in the `lints` folder. Lints use [YAML](https://learnxinyminutes.com/docs/yaml/), which is very expressive, though can be a little complex. If you get stuck, read other lints in this folder. ### Typepaths + The root of the file is your typepaths. This will match not only that type, but also subtypes. For example: ```yml @@ -26,6 +28,7 @@ If you only want to match a specific typepath, prefix it with `=`. This: Alternatively, if you want to match ALL types, enter a single `*`, for wildcard. ### `banned` + The simplest rule is to completely ban a subtype. To do this, fill with `banned: true`. For example, this lint will ban `/mob/dog` and all subtypes: @@ -36,34 +39,35 @@ For example, this lint will ban `/mob/dog` and all subtypes: ``` ### `banned_neighbors` + If you want to ban other objects being on the same tile as another, you can specify `banned_neighbors`. -This takes a few forms. The simplest is just a list of types to not be next to. This lint will ban either cat_toy *or* cat_food (or their subtypes) from being on the same tile as a dog. +This takes a few forms. The simplest is just a list of types to not be next to. This lint will ban either cat*toy \_or* cat_food (or their subtypes) from being on the same tile as a dog. ```yml /mob/dog: banned_neighbors: - - /obj/item/cat_toy - - /obj/item/cat_food + - /obj/item/cat_toy + - /obj/item/cat_food ``` -This also supports the `=` format as specified before. This will ban `/mob/dog` being on the same tile as `/obj/item/toy` *only*. +This also supports the `=` format as specified before. This will ban `/mob/dog` being on the same tile as `/obj/item/toy` _only_. ```yml /mob/dog: banned_neighbors: - - =/obj/item/toy # Only the best toys for our dogs + - =/obj/item/toy # Only the best toys for our dogs ``` -Anything in this list will *not* include the object itself, meaning you can use it to make sure two of the same object are not on the same tile. For example, this lint will ban two dogs from being on the same tile: +Anything in this list will _not_ include the object itself, meaning you can use it to make sure two of the same object are not on the same tile. For example, this lint will ban two dogs from being on the same tile: ```yml /mob/dog: banned_neighbors: - - /mob/dog # We're a space station, not a dog park! + - /mob/dog # We're a space station, not a dog park! ``` -However, you can add a bit more specificity with `identical: true`. This will prohibit other instances of the *exact* same type *and* variable edits from being on the same tile. +However, you can add a bit more specificity with `identical: true`. This will prohibit other instances of the _exact_ same type _and_ variable edits from being on the same tile. ```yml /mob/dog: @@ -81,6 +85,7 @@ Finally, if you need maximum precision, you can specify a [regular expression](h ``` ### `banned_variables` + To ban all variable edits, you can specify `banned_variables: true` for a typepath. For instance, if we want to block dogs from getting any var-edits, we can write: ```yml @@ -119,10 +124,11 @@ Similar to [banned_neighbors](#banned_neighbors), you can specify a regular expr banned_variables: # Names must start with a capital letter name: - allow: { pattern: '^[A-Z].*$' } + allow: { pattern: "^[A-Z].*$" } ``` ### `help` + If you want a custom message to go with your lint, you can specify "help" in the root. ```yml diff --git a/tools/maplint/lints/cable_dir_varedits.yml b/tools/maplint/lints/cable_dir_varedits.yml index 366b82686c..90a42d2969 100644 --- a/tools/maplint/lints/cable_dir_varedits.yml +++ b/tools/maplint/lints/cable_dir_varedits.yml @@ -1,5 +1,5 @@ /obj/structure/cable: banned_variables: - - dir - - d1 - - d2 + - dir + - d1 + - d2 diff --git a/tools/maplint/lints/merge_conflict_marker.yml b/tools/maplint/lints/merge_conflict_marker.yml index bdece05597..04dbf08a67 100644 --- a/tools/maplint/lints/merge_conflict_marker.yml +++ b/tools/maplint/lints/merge_conflict_marker.yml @@ -1,5 +1,4 @@ -help: - This means you didn't clean up any potential merge conflicts, +help: This means you didn't clean up any potential merge conflicts, make sure everything in that area is correct. /obj/merge_conflict_marker: banned: true diff --git a/tools/maplint/lints/multiple_airlocks.yml b/tools/maplint/lints/multiple_airlocks.yml index 669272f61c..345526bc4a 100644 --- a/tools/maplint/lints/multiple_airlocks.yml +++ b/tools/maplint/lints/multiple_airlocks.yml @@ -1,3 +1,3 @@ /obj/machinery/door/airlock: banned_neighbors: - - /obj/machinery/door/airlock + - /obj/machinery/door/airlock diff --git a/tools/maplint/lints/multiple_area.yml b/tools/maplint/lints/multiple_area.yml index 91391cb2e9..c91572a382 100644 --- a/tools/maplint/lints/multiple_area.yml +++ b/tools/maplint/lints/multiple_area.yml @@ -1,3 +1,3 @@ /area: banned_neighbors: - - /area + - /area diff --git a/tools/maplint/lints/multiple_beds.yml b/tools/maplint/lints/multiple_beds.yml index da96e679a3..3cebf4b6e5 100644 --- a/tools/maplint/lints/multiple_beds.yml +++ b/tools/maplint/lints/multiple_beds.yml @@ -1,3 +1,3 @@ /obj/structure/bed: banned_neighbors: - - /obj/structure/bed + - /obj/structure/bed diff --git a/tools/maplint/lints/multiple_blood_effects.yml b/tools/maplint/lints/multiple_blood_effects.yml index 6ce90f3107..f513b5cf00 100644 --- a/tools/maplint/lints/multiple_blood_effects.yml +++ b/tools/maplint/lints/multiple_blood_effects.yml @@ -1,3 +1,3 @@ =/obj/effect/decal/cleanable/blood: banned_neighbors: - - =/obj/effect/decal/cleanable/blood + - =/obj/effect/decal/cleanable/blood diff --git a/tools/maplint/lints/multiple_catwalks.yml b/tools/maplint/lints/multiple_catwalks.yml index 3b19e8d812..6e2e3bf935 100644 --- a/tools/maplint/lints/multiple_catwalks.yml +++ b/tools/maplint/lints/multiple_catwalks.yml @@ -1,3 +1,3 @@ /obj/structure/catwalk: banned_neighbors: - - /obj/structure/catwalk + - /obj/structure/catwalk diff --git a/tools/maplint/lints/multiple_dirt_effects.yml b/tools/maplint/lints/multiple_dirt_effects.yml index c8fb443e9e..ef7d470f20 100644 --- a/tools/maplint/lints/multiple_dirt_effects.yml +++ b/tools/maplint/lints/multiple_dirt_effects.yml @@ -1,3 +1,3 @@ /obj/effect/decal/cleanable/dirt: banned_neighbors: - - /obj/effect/decal/cleanable/dirt + - /obj/effect/decal/cleanable/dirt diff --git a/tools/maplint/lints/multiple_firelocks.yml b/tools/maplint/lints/multiple_firelocks.yml index 5c751d8cae..79ff0728ae 100644 --- a/tools/maplint/lints/multiple_firelocks.yml +++ b/tools/maplint/lints/multiple_firelocks.yml @@ -1,3 +1,3 @@ =/obj/machinery/door/firedoor: banned_neighbors: - - =/obj/machinery/door/firedoor + - =/obj/machinery/door/firedoor diff --git a/tools/maplint/lints/multiple_girders.yml b/tools/maplint/lints/multiple_girders.yml index 38a2a77871..8367b04af0 100644 --- a/tools/maplint/lints/multiple_girders.yml +++ b/tools/maplint/lints/multiple_girders.yml @@ -1,3 +1,3 @@ /obj/structure/girder: banned_neighbors: - - /obj/structure/girder + - /obj/structure/girder diff --git a/tools/maplint/lints/multiple_grilles.yml b/tools/maplint/lints/multiple_grilles.yml index c04829f4b7..0fa21de8aa 100644 --- a/tools/maplint/lints/multiple_grilles.yml +++ b/tools/maplint/lints/multiple_grilles.yml @@ -1,3 +1,3 @@ /obj/structure/grille: banned_neighbors: - - /obj/structure/grille + - /obj/structure/grille diff --git a/tools/maplint/lints/multiple_lattice.yml b/tools/maplint/lints/multiple_lattice.yml index 3ad5253fbf..8504fbc63f 100644 --- a/tools/maplint/lints/multiple_lattice.yml +++ b/tools/maplint/lints/multiple_lattice.yml @@ -1,3 +1,3 @@ /obj/structure/lattice: banned_neighbors: - - /obj/structure/lattice + - /obj/structure/lattice diff --git a/tools/maplint/lints/multiple_tables.yml b/tools/maplint/lints/multiple_tables.yml index 0925fd843b..d90b372baa 100644 --- a/tools/maplint/lints/multiple_tables.yml +++ b/tools/maplint/lints/multiple_tables.yml @@ -1,3 +1,3 @@ /obj/structure/table: banned_neighbors: - - /obj/structure/table + - /obj/structure/table diff --git a/tools/maplint/lints/multiple_turf.yml b/tools/maplint/lints/multiple_turf.yml index 2a66f18398..1ce790e9b8 100644 --- a/tools/maplint/lints/multiple_turf.yml +++ b/tools/maplint/lints/multiple_turf.yml @@ -1,3 +1,3 @@ /turf: banned_neighbors: - - /turf + - /turf diff --git a/tools/maplint/lints/pixel_varedits.yml b/tools/maplint/lints/pixel_varedits.yml index c496fa06da..f572ba9e53 100644 --- a/tools/maplint/lints/pixel_varedits.yml +++ b/tools/maplint/lints/pixel_varedits.yml @@ -1,6 +1,6 @@ "*": banned_variables: - - pixel_w - - pixel_z - - step_x - - step_y + - pixel_w + - pixel_z + - step_x + - step_y diff --git a/tools/maplint/lints/stray_item.yml b/tools/maplint/lints/stray_item.yml index 0f5e6f4181..4855b9a4bb 100644 --- a/tools/maplint/lints/stray_item.yml +++ b/tools/maplint/lints/stray_item.yml @@ -1,3 +1,3 @@ /turf/closed: banned_neighbors: - - =/obj/item + - =/obj/item diff --git a/tools/maplint/lints/wall_stacking.yml b/tools/maplint/lints/wall_stacking.yml index 42a21527d4..b9cd0a2e80 100644 --- a/tools/maplint/lints/wall_stacking.yml +++ b/tools/maplint/lints/wall_stacking.yml @@ -1,5 +1,5 @@ /turf/closed: banned_neighbors: - - /obj/machinery/door/airlock - - /obj/structure/lattice - - /obj/structure/window + - /obj/machinery/door/airlock + - /obj/structure/lattice + - /obj/structure/window diff --git a/tools/mapmerge2/readme.md b/tools/mapmerge2/readme.md index 71164bdb71..0cd9f50e57 100644 --- a/tools/mapmerge2/readme.md +++ b/tools/mapmerge2/readme.md @@ -16,8 +16,8 @@ To install the [Git hooks], open the `tools/hooks/` folder and double-click If using a Git GUI which is not compatible with the hooks: -* Before committing, double-click `Run Before Committing.bat` -* When a merge has map conflicts, double-click `Resolve Map Conflicts.bat` +- Before committing, double-click `Run Before Committing.bat` +- When a merge has map conflicts, double-click `Resolve Map Conflicts.bat` The console will show whether the operation succeeded. @@ -44,16 +44,16 @@ the map root is autodetected. Each script may either prompt for the desired map or be run with command-line parameters indicating which maps to act on. The scripts include: -* `convert.py` for converting maps to and from the TGM format. Used by +- `convert.py` for converting maps to and from the TGM format. Used by `tgm2dmm.bat` and `dmm2tgm.bat`. -* `mapmerge.py` for running the map merge on map backups saved by +- `mapmerge.py` for running the map merge on map backups saved by `Prepare Maps.bat`. Used by `mapmerge.bat` Implementation modules: -* `dmm.py` includes the map reader and writer. -* `mapmerge.py` includes the implementation of the map merge operation. -* `frontend.py` includes the common code for the frontend scripts. +- `dmm.py` includes the map reader and writer. +- `mapmerge.py` includes the implementation of the map merge operation. +- `frontend.py` includes the common code for the frontend scripts. `precommit.py` is run by the [Git hooks] if installed, and merges the new version of any map saved in the index (`git add`ed) with the old version stored diff --git a/tools/nano-tester/README.md b/tools/nano-tester/README.md index 8c01aa326b..afc99699b2 100644 --- a/tools/nano-tester/README.md +++ b/tools/nano-tester/README.md @@ -1,12 +1,15 @@ # NanoUI Template Tester + A simple utility for previewing how NanoUI templates will look out of game, useful for rapid development cycles. ## Setup + - Make sure you have Node.js ( https://nodejs.org/ ) installed. - Run `npm install` to install dependencies - Edit `index.js` to change the configuration to use the template you want to preview. - Edit `initialData.json` to contain the initial data that will be generated by your object's `ui_interact` proc. -- Run `node index.js` and then connect at http://localhost:8000/ +- Run `node index.js` and then connect at http://localhost:8000/ ## While Running + - You can update your template files, nano CSS or initialData.json at any time while the server is running. diff --git a/tools/nano-tester/index.html b/tools/nano-tester/index.html index f3cf4ba855..ee6b24a918 100644 --- a/tools/nano-tester/index.html +++ b/tools/nano-tester/index.html @@ -1,46 +1,53 @@ - + - - - - + + + + - - - - - - - - - - - - - - -
-
- - - \ No newline at end of file + + + + + + + + + + + + + + +
+ + + diff --git a/tools/nano-tester/index.js b/tools/nano-tester/index.js index 53eb6f3576..6aaa9151cd 100644 --- a/tools/nano-tester/index.js +++ b/tools/nano-tester/index.js @@ -2,23 +2,23 @@ // // Mini webserver for testing NanoUI templates // -const fs = require('fs'); -const http = require('http'); -const mime = require('mime'); -const path = require('path'); -const url = require('url'); -const dot = require('dot'); +const fs = require("fs"); +const http = require("http"); +const mime = require("mime"); +const path = require("path"); +const url = require("url"); +const dot = require("dot"); // Configuration constants -var config = { - "port": 8000, // Port to listen on - "dir": "../../nano", // Path to SS13 nano folder +var config = { + port: 8000, // Port to listen on + dir: "../../nano", // Path to SS13 nano folder }; // Choose your templates here. Hint: You'll probably never change layout, main is the one you want. var templateData = { layout: "layout_default.tmpl", - main: "smes.tmpl" + main: "smes.tmpl", }; // In BYOND everything is sent to the client's byond cache, so its all in one flat directory. @@ -30,27 +30,28 @@ const extFolderMapping = { ".jpeg": path.join(process.cwd(), config.dir, "images"), ".gif": path.join(process.cwd(), config.dir, "images"), ".js": path.join(process.cwd(), config.dir, "js"), - ".css": path.join(process.cwd(), config.dir, "css"), - ".tmpl": path.join(process.cwd(), config.dir, "templates") + ".css": path.join(process.cwd(), config.dir, "css"), + ".tmpl": path.join(process.cwd(), config.dir, "templates"), }; // Read the shipped index.html as a doT template. -var genIndexHtml = dot.template(fs.readFileSync('index.html', 'utf8')); +var genIndexHtml = dot.template(fs.readFileSync("index.html", "utf8")); // the main thing -var server = http.createServer( function(request, response) { - - // extract the pathname from the request URL +var server = http.createServer((request, response) => { + // extract the pathname from the request URL var pathname = url.parse(request.url).pathname; - + // Exception for front page - if (pathname === '/') { - let initialData = JSON.parse(fs.readFileSync('initialData.json', 'utf8')); - response.writeHead(200, {"Content-Type": "text/html"}); - response.write(genIndexHtml({ - initialDataJson: JSON.stringify(initialData), - templateDataJson: JSON.stringify(templateData) - })); + if (pathname === "/") { + const initialData = JSON.parse(fs.readFileSync("initialData.json", "utf8")); + response.writeHead(200, { "Content-Type": "text/html" }); + response.write( + genIndexHtml({ + initialDataJson: JSON.stringify(initialData), + templateDataJson: JSON.stringify(templateData), + }), + ); response.end(); return; } @@ -68,36 +69,37 @@ var server = http.createServer( function(request, response) { // console.log("Trying to serve ", pathname, " from ", filename); - // Does this path exist? - fs.exists(filename, function(gotPath) { - // no, bail out + // Does this path exist? + fs.exists(filename, (gotPath) => { + // no, bail out if (!gotPath) { console.warn("Path: %s File: %s NOT FOUND", pathname, filename); - response.writeHead(404, {"Content-Type": "text/plain"}); + response.writeHead(404, { "Content-Type": "text/plain" }); response.write("404 Not Found"); response.end(); return; } - // still here? filename is good + // still here? filename is good // look up the mime type by file extension - response.writeHead(200, {'Content-Type': mime.getType(filename)}); - + response.writeHead(200, { "Content-Type": mime.getType(filename) }); + // read and pass the file as a stream. Not really sure if this is better, // but it feels less block-ish than reading the whole file // and we get to do awesome things with listeners fs.createReadStream(filename, { - 'flags': 'r', - 'encoding': 'binary', - 'mode': 0x3146, // 0666 - 'bufferSize': 4 * 1024 - }).addListener( "data", function(chunk) { - response.write(chunk, 'binary'); - }).addListener( "close",function() { - response.end(); - }); - - }); + flags: "r", + encoding: "binary", + mode: 0x3146, // 0666 + bufferSize: 4 * 1024, + }) + .addListener("data", (chunk) => { + response.write(chunk, "binary"); + }) + .addListener("close", () => { + response.end(); + }); + }); }); // fire it up diff --git a/tools/nano-tester/package.json b/tools/nano-tester/package.json index f961d9ff87..b3e933ccba 100644 --- a/tools/nano-tester/package.json +++ b/tools/nano-tester/package.json @@ -1,19 +1,19 @@ { - "name": "nano-tester", - "version": "1.0.0", - "description": "Test NanoUI Templates", - "main": "index.js", - "dependencies": { - "dot": "^1.1.2", - "mime": "^2.2.0" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/VOREStation/VOREStation.git" - }, - "author": "Leshana", - "license": "AGPL-3.0" + "name": "nano-tester", + "version": "1.0.0", + "description": "Test NanoUI Templates", + "main": "index.js", + "dependencies": { + "dot": "^1.1.2", + "mime": "^2.2.0" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/VOREStation/VOREStation.git" + }, + "author": "Leshana", + "license": "AGPL-3.0" } diff --git a/tools/playsound_finder/README.md b/tools/playsound_finder/README.md index 5e12e69f51..b566e73148 100644 --- a/tools/playsound_finder/README.md +++ b/tools/playsound_finder/README.md @@ -1,4 +1,4 @@ This script extracts playsound() calls and their arguments and outputs it in a csv format In order to use this, open a shell at the root of the git directory and run `node tools/playsound_finder/index.js`. -It's pretty far from perfect, but hey, quicker than extracting playsound parameters by hand. \ No newline at end of file +It's pretty far from perfect, but hey, quicker than extracting playsound parameters by hand. diff --git a/tools/playsound_finder/index.js b/tools/playsound_finder/index.js index 020dda6446..13188e0b2e 100644 --- a/tools/playsound_finder/index.js +++ b/tools/playsound_finder/index.js @@ -1,14 +1,13 @@ -var fs = require('fs'); +var fs = require("fs"); // List all files in a directory in Node.js recursively in a synchronous fashion -var walkSync = function(dir, filelist) { +var walkSync = (dir, filelist) => { var files = fs.readdirSync(dir); filelist = filelist || []; - files.forEach(function(file) { + files.forEach((file) => { if (fs.statSync(dir + file).isDirectory()) { - filelist = walkSync(dir + file + '/', filelist); - } - else { + filelist = walkSync(dir + file + "/", filelist); + } else { filelist.push(dir + file); } }); @@ -17,56 +16,63 @@ var walkSync = function(dir, filelist) { var findNearestAbsolute = (data, line) => { for (let i = line; i > 0; i--) { - let str = data[i]; - if (str && str.match(/^\//)) { + const str = data[i]; + if (str?.match(/^\//)) { return str.trim().replace(/,/g, "|"); } } - return null -} + return null; +}; var main = () => { - let files = walkSync("code/"); - let matches = {}; - for (let file of files) { + const files = walkSync("code/"); + const matches = {}; + for (const file of files) { const data = fs.readFileSync(file, "utf8"); if (!data.match(/playsound.*/)) { - continue + continue; } - if(!matches[file]) matches[file] = []; + if (!matches[file]) matches[file] = []; const dataArray = data.split("\n"); let i = 1; - for (let line of dataArray) { + for (const line of dataArray) { i++; - let m = line.match(/playsound.*/) + const m = line.match(/playsound.*/); if (m) { - matches[file].push({line: i, match: m[0], src: findNearestAbsolute(dataArray, i)}); + matches[file].push({ + line: i, + match: m[0], + src: findNearestAbsolute(dataArray, i), + }); } } } - Object.keys(matches).map(file => { - let allResults = matches[file]; - allResults.map(obj => { + Object.keys(matches).map((file) => { + const allResults = matches[file]; + allResults.map((obj) => { obj.params = obj.match.split(","); - for (var i = 0; i < obj.params.length; i++) { - obj.params[i] = obj.params[i].trim().replace(/playsound\(/g, "").replace(/\)/g, ""); + for (let i = 0; i < obj.params.length; i++) { + obj.params[i] = obj.params[i] + .trim() + .replace(/playsound\(/g, "") + .replace(/\)/g, ""); } - }) + }); }); // Final loop, spit out a csv - Object.keys(matches).map(file => { + Object.keys(matches).map((file) => { let thisFileCsvEntry = ""; - let allResults = matches[file]; - for (let matchObj of allResults) { + const allResults = matches[file]; + for (const matchObj of allResults) { thisFileCsvEntry += `${file},${matchObj.line},${matchObj.src},${matchObj.params.join(",")}\n`; } fs.appendFileSync("results.csv", thisFileCsvEntry); }); -} +}; -main(); \ No newline at end of file +main(); diff --git a/tools/playsound_finder/package.json b/tools/playsound_finder/package.json index b7e1961c37..28cc71ea5c 100644 --- a/tools/playsound_finder/package.json +++ b/tools/playsound_finder/package.json @@ -1,11 +1,11 @@ { - "name": "playsound_finder", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Tigercat2000", - "license": "AGPL 3.0" + "name": "playsound_finder", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Tigercat2000", + "license": "AGPL 3.0" } diff --git a/tools/pull_request_hooks/autoChangelog.js b/tools/pull_request_hooks/autoChangelog.js index cc91c7ea31..6b9e8e544c 100644 --- a/tools/pull_request_hooks/autoChangelog.js +++ b/tools/pull_request_hooks/autoChangelog.js @@ -1,42 +1,42 @@ import { parseChangelog } from "./changelogParser.js"; const safeYml = (string) => - string.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n"); + string.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n"); export function changelogToYml(changelog, login) { - const author = changelog.author || login; - const ymlLines = []; + const author = changelog.author || login; + const ymlLines = []; - ymlLines.push(`author: "${safeYml(author)}"`); - ymlLines.push(`delete-after: True`); - ymlLines.push(`changes:`); + ymlLines.push(`author: "${safeYml(author)}"`); + ymlLines.push(`delete-after: True`); + ymlLines.push(`changes:`); - for (const change of changelog.changes) { - ymlLines.push( - ` - ${change.type.changelogKey}: "${safeYml(change.description)}"` - ); - } + for (const change of changelog.changes) { + ymlLines.push( + ` - ${change.type.changelogKey}: "${safeYml(change.description)}"`, + ); + } - return ymlLines.join("\n"); + return ymlLines.join("\n"); } export async function processAutoChangelog({ github, context }) { - const changelog = parseChangelog(context.payload.pull_request.body); - if (!changelog || changelog.changes.length === 0) { - console.log("no changelog found"); - return; - } + const changelog = parseChangelog(context.payload.pull_request.body); + if (!changelog || changelog.changes.length === 0) { + console.log("no changelog found"); + return; + } - const yml = changelogToYml( - changelog, - context.payload.pull_request.user.login - ); + const yml = changelogToYml( + changelog, + context.payload.pull_request.user.login, + ); - github.rest.repos.createOrUpdateFileContents({ - owner: context.repo.owner, - repo: context.repo.repo, - path: `html/changelogs_ch/AutoChangeLog-pr-${context.payload.pull_request.number}.yml`, // CHOMPEdit - message: `Automatic changelog for PR #${context.payload.pull_request.number} [ci skip]`, - content: Buffer.from(yml).toString("base64"), - }); + github.rest.repos.createOrUpdateFileContents({ + owner: context.repo.owner, + repo: context.repo.repo, + path: `html/changelogs_ch/AutoChangeLog-pr-${context.payload.pull_request.number}.yml`, // CHOMPEdit + message: `Automatic changelog for PR #${context.payload.pull_request.number} [ci skip]`, + content: Buffer.from(yml).toString("base64"), + }); } diff --git a/tools/pull_request_hooks/autoChangelog.test.js b/tools/pull_request_hooks/autoChangelog.test.js index e7c29c384a..821c29c6a4 100644 --- a/tools/pull_request_hooks/autoChangelog.test.js +++ b/tools/pull_request_hooks/autoChangelog.test.js @@ -3,19 +3,19 @@ import { changelogToYml } from "./autoChangelog.js"; import { parseChangelog } from "./changelogParser.js"; assert.equal( - changelogToYml( - parseChangelog(` + changelogToYml( + parseChangelog(` My cool PR! :cl: DenverCoder9 add: Adds new stuff add: Adds more stuff /:cl: - `) - ), + `), + ), - `author: "DenverCoder9" + `author: "DenverCoder9" delete-after: True changes: - rscadd: "Adds new stuff" - - rscadd: "Adds more stuff"` + - rscadd: "Adds more stuff"`, ); diff --git a/tools/pull_request_hooks/changelogConfig.js b/tools/pull_request_hooks/changelogConfig.js index 46b28f8d73..e460a2a3e6 100644 --- a/tools/pull_request_hooks/changelogConfig.js +++ b/tools/pull_request_hooks/changelogConfig.js @@ -8,106 +8,106 @@ * doesn't exist. */ export const CHANGELOG_ENTRIES = [ - [ - ["rscadd", "add", "adds"], - { - placeholders: [ - "Added new mechanics or gameplay changes", - "Added more things", - ], - }, - ], + [ + ["rscadd", "add", "adds"], + { + placeholders: [ + "Added new mechanics or gameplay changes", + "Added more things", + ], + }, + ], - [ - ["bugfix", "fix", "fixes"], - { - placeholders: ["fixed a few things"], - }, - ], + [ + ["bugfix", "fix", "fixes"], + { + placeholders: ["fixed a few things"], + }, + ], - [ - ["rscdel", "del", "dels"], - { - placeholders: ["Removed old things"], - }, - ], + [ + ["rscdel", "del", "dels"], + { + placeholders: ["Removed old things"], + }, + ], - [ - ["qol", "tweak"], - { - placeholders: ["made something easier to use"], - }, - ], + [ + ["qol", "tweak"], + { + placeholders: ["made something easier to use"], + }, + ], - [ - ["maptweak", "remap"], - { - placeholders: ["tweaked something in a map"], - }, - ], + [ + ["maptweak", "remap"], + { + placeholders: ["tweaked something in a map"], + }, + ], - [ - ["sound"], - { - placeholders: ["added/modified/removed audio or sound effects"], - }, - ], + [ + ["sound"], + { + placeholders: ["added/modified/removed audio or sound effects"], + }, + ], - [ - ["image"], - { - placeholders: ["added/modified/removed some icons or images"], - }, - ], + [ + ["image"], + { + placeholders: ["added/modified/removed some icons or images"], + }, + ], - [ - ["spellcheck", "typo"], - { - placeholders: ["fixed a few typos"], - }, - ], + [ + ["spellcheck", "typo"], + { + placeholders: ["fixed a few typos"], + }, + ], - [ - ["balance"], - { - placeholders: ["rebalanced something"], - }, - ], + [ + ["balance"], + { + placeholders: ["rebalanced something"], + }, + ], - [ - ["code_imp", "code"], - { - placeholders: ["changed some code"], - }, - ], + [ + ["code_imp", "code"], + { + placeholders: ["changed some code"], + }, + ], - [ - ["refactor"], - { - placeholders: ["refactored some code"], - }, - ], + [ + ["refactor"], + { + placeholders: ["refactored some code"], + }, + ], - [ - ["config"], - { - placeholders: ["changed some config setting"], - }, - ], + [ + ["config"], + { + placeholders: ["changed some config setting"], + }, + ], - [ - ["admin"], - { - placeholders: ["messed with admin stuff"], - }, - ], + [ + ["admin"], + { + placeholders: ["messed with admin stuff"], + }, + ], - [ - ["server"], - { - placeholders: ["something server ops should know"], - }, - ], + [ + ["server"], + { + placeholders: ["something server ops should know"], + }, + ], ]; // Valid changelog openers diff --git a/tools/pull_request_hooks/changelogParser.js b/tools/pull_request_hooks/changelogParser.js index ba572d24b4..f652d84357 100644 --- a/tools/pull_request_hooks/changelogParser.js +++ b/tools/pull_request_hooks/changelogParser.js @@ -4,80 +4,80 @@ const REGEX_CHANGELOG_LINE = /^(\w+): (.+)$/; const CHANGELOG_KEYS_TO_ENTRY = {}; for (const [types, entry] of changelogConfig.CHANGELOG_ENTRIES) { - const entryWithChangelogKey = { - ...entry, - changelogKey: types[0], - }; + const entryWithChangelogKey = { + ...entry, + changelogKey: types[0], + }; - for (const type of types) { - CHANGELOG_KEYS_TO_ENTRY[type] = entryWithChangelogKey; - } + for (const type of types) { + CHANGELOG_KEYS_TO_ENTRY[type] = entryWithChangelogKey; + } } function parseChangelogBody(lines, openTag) { - const [changelogOpening] = lines.splice(0, 1); + const [changelogOpening] = lines.splice(0, 1); - const author = - changelogOpening.substring(openTag.length).trim() || undefined; + const author = changelogOpening.substring(openTag.length).trim() || undefined; - const changelog = { - author, - changes: [], - }; + const changelog = { + author, + changes: [], + }; - for (const line of lines) { - if (line.trim().length === 0) { - continue; - } + for (const line of lines) { + if (line.trim().length === 0) { + continue; + } - for (const closeTag of changelogConfig.CHANGELOG_CLOSE_TAGS) { - if (line.startsWith(closeTag)) { - return changelog; - } - } + for (const closeTag of changelogConfig.CHANGELOG_CLOSE_TAGS) { + if (line.startsWith(closeTag)) { + return changelog; + } + } - const match = line.match(REGEX_CHANGELOG_LINE); - if (match) { - const [_, type, description] = match; + const match = line.match(REGEX_CHANGELOG_LINE); + if (match) { + const [_, type, description] = match; - const entry = CHANGELOG_KEYS_TO_ENTRY[type] || CHANGELOG_KEYS_TO_ENTRY["rscadd"]; + const entry = + CHANGELOG_KEYS_TO_ENTRY[type] || CHANGELOG_KEYS_TO_ENTRY["rscadd"]; - if (!entry || entry.placeholders.includes(description)) { - continue; - } + if (!entry || entry.placeholders.includes(description)) { + continue; + } - if (entry) { - changelog.changes.push({ - type: entry, - description, - }); - } - } else { - const lastChange = changelog.changes[changelog.changes.length - 1]; - if (lastChange) { - lastChange.description += `\n${line}`; - } - } - } + if (entry) { + changelog.changes.push({ + type: entry, + description, + }); + } + } else { + const lastChange = changelog.changes[changelog.changes.length - 1]; + if (lastChange) { + lastChange.description += `\n${line}`; + } + } + } - return changelog; + return changelog; } export function parseChangelog(text) { - if(text == null) { - return undefined; - } - const lines = text.split("\n").map((line) => line.trim()); + if (text == null) { + return undefined; + } + const lines = text.split("\n").map((line) => line.trim()); - for (let index = 0; index < lines.length; index++) { - const line = lines[index]; + for (let index = 0; index < lines.length; index++) { + const line = lines[index]; - for (const openTag of changelogConfig.CHANGELOG_OPEN_TAGS) { - if (line.startsWith(openTag)) { - return parseChangelogBody(lines.slice(index), openTag); - } - } - } + for (const openTag of changelogConfig.CHANGELOG_OPEN_TAGS) { + if (line.startsWith(openTag)) { + return parseChangelogBody(lines.slice(index), openTag); + } + } + } - return undefined; + return undefined; } diff --git a/tools/pull_request_hooks/changelogParser.test.js b/tools/pull_request_hooks/changelogParser.test.js index bcf044ee36..aeea866424 100644 --- a/tools/pull_request_hooks/changelogParser.test.js +++ b/tools/pull_request_hooks/changelogParser.test.js @@ -27,8 +27,8 @@ assert.equal(multiLineChangelog.author, undefined); assert.equal(multiLineChangelog.changes.length, 1); assert.equal(multiLineChangelog.changes[0].type.changelogKey, "rscadd"); assert.equal( - multiLineChangelog.changes[0].description, - "Adds new stuff\nto the game" + multiLineChangelog.changes[0].description, + "Adds new stuff\nto the game", ); // Placeholders diff --git a/tools/pull_request_hooks/removeGuideComments.js b/tools/pull_request_hooks/removeGuideComments.js index c7cdcd1ca6..6154cef6b6 100644 --- a/tools/pull_request_hooks/removeGuideComments.js +++ b/tools/pull_request_hooks/removeGuideComments.js @@ -19,14 +19,14 @@ export async function removeGuideComments({ github, context }) { let newBody = context.payload.pull_request.body; if (!newBody) { - console.log("PR body is empty, skipping..."); - return; + console.log("PR body is empty, skipping..."); + return; } for (const comment of comments) { newBody = newBody.replace( new RegExp(`^\\s*${escapeRegex(comment)}\\s*`, "gm"), - "\n" + "\n", ); } diff --git a/tools/pull_request_hooks/rerunFlakyTests.js b/tools/pull_request_hooks/rerunFlakyTests.js index 6625d9caa8..f7a71396be 100644 --- a/tools/pull_request_hooks/rerunFlakyTests.js +++ b/tools/pull_request_hooks/rerunFlakyTests.js @@ -3,222 +3,224 @@ const TITLE_BOT_HEADER = "title: "; // Only check jobs that start with these. // Helps make sure we don't restart something like screenshot tests or linters, which are not known to be flaky. -const CONSIDERED_JOBS = [ - "Integration Tests", -]; +const CONSIDERED_JOBS = ["Integration Tests"]; async function getFailedJobsForRun(github, context, workflowRunId, runAttempt) { - const { - data: { jobs }, - } = await github.rest.actions.listJobsForWorkflowRunAttempt({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: workflowRunId, - attempt_number: runAttempt, - }); + const { + data: { jobs }, + } = await github.rest.actions.listJobsForWorkflowRunAttempt({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: workflowRunId, + attempt_number: runAttempt, + }); - return jobs - .filter((job) => job.conclusion === "failure") - .filter((job) => - CONSIDERED_JOBS.some((title) => job.name.startsWith(title)) - ); + return jobs + .filter((job) => job.conclusion === "failure") + .filter((job) => + CONSIDERED_JOBS.some((title) => job.name.startsWith(title)), + ); } export async function rerunFlakyTests({ github, context }) { - const failingJobs = await getFailedJobsForRun( - github, - context, - context.payload.workflow_run.id, - context.payload.workflow_run.run_attempt - ); + const failingJobs = await getFailedJobsForRun( + github, + context, + context.payload.workflow_run.id, + context.payload.workflow_run.run_attempt, + ); - if (failingJobs.length > 1) { - console.log("Multiple jobs failing. PROBABLY not flaky, not rerunning."); - return; - } + if (failingJobs.length > 1) { + console.log("Multiple jobs failing. PROBABLY not flaky, not rerunning."); + return; + } - if (failingJobs.length === 0) { - throw new Error( - "rerunFlakyTests should not have run on a run with no failing jobs" - ); - } + if (failingJobs.length === 0) { + throw new Error( + "rerunFlakyTests should not have run on a run with no failing jobs", + ); + } - github.rest.actions.reRunWorkflowFailedJobs({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: context.payload.workflow_run.id, - }); + github.rest.actions.reRunWorkflowFailedJobs({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); } // Tries its best to extract a useful error title and message for the given log export function extractDetails(log) { - // Strip off timestamp - const lines = log.split(/^[0-9.:T\-]*?Z /gm); + // Strip off timestamp + const lines = log.split(/^[0-9.:T\-]*?Z /gm); - const failureRegex = /^\t?FAILURE #(?[0-9]+): (?.+)/; - const groupRegex = /^##\[group\](?.+)/; + const failureRegex = /^\t?FAILURE #(?[0-9]+): (?.+)/; + const groupRegex = /^##\[group\](?.+)/; - const failures = []; - let lastGroup = "root"; - let loggingFailure; + const failures = []; + let lastGroup = "root"; + let loggingFailure; - const newFailure = (failureMatch) => { - const { headline } = failureMatch.groups; + const newFailure = (failureMatch) => { + const { headline } = failureMatch.groups; - loggingFailure = { - headline, - group: lastGroup.replace("/datum/unit_test/", ""), - details: [], - }; - }; + loggingFailure = { + headline, + group: lastGroup.replace("/datum/unit_test/", ""), + details: [], + }; + }; - for (const line of lines) { - const groupMatch = line.match(groupRegex); - if (groupMatch) { - lastGroup = groupMatch.groups.group.trim(); - continue; - } + for (const line of lines) { + const groupMatch = line.match(groupRegex); + if (groupMatch) { + lastGroup = groupMatch.groups.group.trim(); + continue; + } - const failureMatch = line.match(failureRegex); + const failureMatch = line.match(failureRegex); - if (loggingFailure === undefined) { - if (!failureMatch) { - continue; - } + if (loggingFailure === undefined) { + if (!failureMatch) { + continue; + } - newFailure(failureMatch); - } else if (failureMatch || line.startsWith("##")) { - failures.push(loggingFailure); - loggingFailure = undefined; + newFailure(failureMatch); + } else if (failureMatch || line.startsWith("##")) { + failures.push(loggingFailure); + loggingFailure = undefined; - if (failureMatch) { - newFailure(failureMatch); - } - } else { - loggingFailure.details.push(line.trim()); - } - } + if (failureMatch) { + newFailure(failureMatch); + } + } else { + loggingFailure.details.push(line.trim()); + } + } - // We had no logged failures, there's not really anything we can do here - if (failures.length === 0) { - return { - title: "Flaky test failure with no obvious source", - failures, - }; - } + // We had no logged failures, there's not really anything we can do here + if (failures.length === 0) { + return { + title: "Flaky test failure with no obvious source", + failures, + }; + } - // We *could* create multiple failures for multiple groups. - // This would be important if we had multiple flaky tests at the same time. - // I'm choosing not to because it complicates this logic a bit, has the ability to go terribly wrong, - // and also because there's something funny to me about that increasing the urgency of fixing - // flaky tests. If it becomes a serious issue though, I would not mind this being fixed. - const uniqueGroups = new Set(failures.map((failure) => failure.group)); + // We *could* create multiple failures for multiple groups. + // This would be important if we had multiple flaky tests at the same time. + // I'm choosing not to because it complicates this logic a bit, has the ability to go terribly wrong, + // and also because there's something funny to me about that increasing the urgency of fixing + // flaky tests. If it becomes a serious issue though, I would not mind this being fixed. + const uniqueGroups = new Set(failures.map((failure) => failure.group)); - if (uniqueGroups.size > 1) { - return { - title: `Multiple flaky test failures in ${Array.from(uniqueGroups) - .sort() - .join(", ")}`, - failures, - }; - } + if (uniqueGroups.size > 1) { + return { + title: `Multiple flaky test failures in ${Array.from(uniqueGroups) + .sort() + .join(", ")}`, + failures, + }; + } - const failGroup = failures[0].group; + const failGroup = failures[0].group; - if (failures.length > 1) { - return { - title: `Multiple errors in flaky test ${failGroup}`, - failures, - }; - } + if (failures.length > 1) { + return { + title: `Multiple errors in flaky test ${failGroup}`, + failures, + }; + } - const failure = failures[0]; + const failure = failures[0]; - // Common patterns where we can always get a detailed title - const runtimeMatch = failure.headline.match(/Runtime in .+?: (?.+)/); - if (runtimeMatch) { - const runtime = runtimeMatch.groups.error.trim(); + // Common patterns where we can always get a detailed title + const runtimeMatch = failure.headline.match(/Runtime in .+?: (?.+)/); + if (runtimeMatch) { + const runtime = runtimeMatch.groups.error.trim(); - const invalidTimerMatch = runtime.match(/^Invalid timer:.+object:(?[^[]+).*delegate:(?.+?), source:/); - if (invalidTimerMatch) { - return { - title: `Flaky test ${failGroup}: Invalid timer: ${invalidTimerMatch.groups.proc.trim()} on ${invalidTimerMatch.groups.object.trim()}`, - failures, - }; - } + const invalidTimerMatch = runtime.match( + /^Invalid timer:.+object:(?[^[]+).*delegate:(?.+?), source:/, + ); + if (invalidTimerMatch) { + return { + title: `Flaky test ${failGroup}: Invalid timer: ${invalidTimerMatch.groups.proc.trim()} on ${invalidTimerMatch.groups.object.trim()}`, + failures, + }; + } - return { - title: `Flaky test ${failGroup}: ${runtime}`, - failures, - }; - } + return { + title: `Flaky test ${failGroup}: ${runtime}`, + failures, + }; + } - const hardDelMatch = failure.headline.match(/^(?\/[\w/]+) hard deleted .* times out of a total del count of/); - if (hardDelMatch) { - return { - title: `Flaky hard delete: ${hardDelMatch.groups.object}`, - failures, - }; - } + const hardDelMatch = failure.headline.match( + /^(?\/[\w/]+) hard deleted .* times out of a total del count of/, + ); + if (hardDelMatch) { + return { + title: `Flaky hard delete: ${hardDelMatch.groups.object}`, + failures, + }; + } - // Try to normalize the title and remove anything that might be variable - const normalizedError = failure.headline.replace(/\s*at .+?:[0-9]+.*/g, ""); // " at code.dm:123" + // Try to normalize the title and remove anything that might be variable + const normalizedError = failure.headline.replace(/\s*at .+?:[0-9]+.*/g, ""); // " at code.dm:123" - return { - title: `Flaky test ${failGroup}: ${normalizedError}`, - failures, - }; + return { + title: `Flaky test ${failGroup}: ${normalizedError}`, + failures, + }; } async function getExistingIssueId(graphql, context, title) { - // Hope you never have more than 100 of these open! - const { - repository: { - issues: { nodes: openFlakyTestIssues }, - }, - } = await graphql( - ` - query ($owner: String!, $repo: String!, $label: String!) { - repository(owner: $owner, name: $repo) { - issues( - labels: [$label] - first: 100 - orderBy: { field: CREATED_AT, direction: DESC } - states: [OPEN] - ) { - nodes { - number - title - body - } - } - } - } - `, - { - owner: context.repo.owner, - repo: context.repo.repo, - label: LABEL, - } - ); + // Hope you never have more than 100 of these open! + const { + repository: { + issues: { nodes: openFlakyTestIssues }, + }, + } = await graphql( + ` + query ($owner: String!, $repo: String!, $label: String!) { + repository(owner: $owner, name: $repo) { + issues( + labels: [$label] + first: 100 + orderBy: { field: CREATED_AT, direction: DESC } + states: [OPEN] + ) { + nodes { + number + title + body + } + } + } + } + `, + { + owner: context.repo.owner, + repo: context.repo.repo, + label: LABEL, + }, + ); - const exactTitle = openFlakyTestIssues.find((issue) => issue.title === title); - if (exactTitle !== undefined) { - return exactTitle.number; - } + const exactTitle = openFlakyTestIssues.find((issue) => issue.title === title); + if (exactTitle !== undefined) { + return exactTitle.number; + } - const foundInBody = openFlakyTestIssues.find((issue) => - issue.body.includes(``) - ); - if (foundInBody !== undefined) { - return foundInBody.number; - } + const foundInBody = openFlakyTestIssues.find((issue) => + issue.body.includes(``), + ); + if (foundInBody !== undefined) { + return foundInBody.number; + } - return undefined; + return undefined; } function createBody({ title, failures }, runUrl) { - return ` + return ` @@ -227,67 +229,67 @@ function createBody({ title, failures }, runUrl) { Failures: \`\`\` ${failures - .map( - (failure) => - `${failure.group}: ${failure.headline}\n\t${failure.details.join("\n")}` - ) - .join("\n")} + .map( + (failure) => + `${failure.group}: ${failure.headline}\n\t${failure.details.join("\n")}`, + ) + .join("\n")} \`\`\` `.replace(/^\s*/gm, ""); } export async function reportFlakyTests({ github, context }) { - const failedJobsFromLastRun = await getFailedJobsForRun( - github, - context, - context.payload.workflow_run.id, - context.payload.workflow_run.run_attempt - 1 - ); + const failedJobsFromLastRun = await getFailedJobsForRun( + github, + context, + context.payload.workflow_run.id, + context.payload.workflow_run.run_attempt - 1, + ); - // This could one day be relaxed if we face serious enough flaky test problems, so we're going to loop anyway - if (failedJobsFromLastRun.length !== 1) { - console.log( - "Multiple jobs failing after retry, assuming maintainer rerun." - ); + // This could one day be relaxed if we face serious enough flaky test problems, so we're going to loop anyway + if (failedJobsFromLastRun.length !== 1) { + console.log( + "Multiple jobs failing after retry, assuming maintainer rerun.", + ); - return; - } + return; + } - for (const job of failedJobsFromLastRun) { - const { data: log } = - await github.rest.actions.downloadJobLogsForWorkflowRun({ - owner: context.repo.owner, - repo: context.repo.repo, - job_id: job.id, - }); + for (const job of failedJobsFromLastRun) { + const { data: log } = + await github.rest.actions.downloadJobLogsForWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + job_id: job.id, + }); - const details = extractDetails(log); + const details = extractDetails(log); - const existingIssueId = await getExistingIssueId( - github.graphql, - context, - details.title - ); + const existingIssueId = await getExistingIssueId( + github.graphql, + context, + details.title, + ); - if (existingIssueId !== undefined) { - // Maybe in the future, if it's helpful, update the existing issue with new links - console.log(`Existing issue found: #${existingIssueId}`); - return; - } + if (existingIssueId !== undefined) { + // Maybe in the future, if it's helpful, update the existing issue with new links + console.log(`Existing issue found: #${existingIssueId}`); + return; + } - await github.rest.issues.create({ - owner: context.repo.owner, - repo: context.repo.repo, - title: details.title, - labels: [LABEL], - body: createBody( - details, - `https://github.com/${context.repo.owner}/${ - context.repo.repo - }/actions/runs/${context.payload.workflow_run.id}/attempts/${ - context.payload.workflow_run.run_attempt - 1 - }` - ), - }); - } + await github.rest.issues.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: details.title, + labels: [LABEL], + body: createBody( + details, + `https://github.com/${context.repo.owner}/${ + context.repo.repo + }/actions/runs/${context.payload.workflow_run.id}/attempts/${ + context.payload.workflow_run.run_attempt - 1 + }`, + ), + }); + } } diff --git a/tools/pull_request_hooks/rerunFlakyTests.test.js b/tools/pull_request_hooks/rerunFlakyTests.test.js index 6a3300ff59..7f0b2dfb01 100644 --- a/tools/pull_request_hooks/rerunFlakyTests.test.js +++ b/tools/pull_request_hooks/rerunFlakyTests.test.js @@ -3,43 +3,43 @@ import fs from "node:fs"; import { extractDetails } from "./rerunFlakyTests.js"; function extractDetailsFromPayload(filename) { - return extractDetails( - fs.readFileSync(`tests/flakyTestPayloads/${filename}.txt`, { - encoding: "utf8", - }) - ); + return extractDetails( + fs.readFileSync(`tests/flakyTestPayloads/${filename}.txt`, { + encoding: "utf8", + }), + ); } const chatClient = extractDetailsFromPayload("chat_client"); assert.equal( - chatClient.title, - "Flaky hard delete: /datum/computer_file/program/chatclient" + chatClient.title, + "Flaky hard delete: /datum/computer_file/program/chatclient", ); assert.equal(chatClient.failures.length, 1); const monkeyBusiness = extractDetailsFromPayload("monkey_business"); assert.equal( - monkeyBusiness.title, - "Flaky test monkey_business: Cannot execute null.resolve()." + monkeyBusiness.title, + "Flaky test monkey_business: Cannot execute null.resolve().", ); assert.equal(monkeyBusiness.failures.length, 1); const shapeshift = extractDetailsFromPayload("shapeshift"); assert.equal( - shapeshift.title, - "Multiple errors in flaky test shapeshift_spell" + shapeshift.title, + "Multiple errors in flaky test shapeshift_spell", ); assert.equal(shapeshift.failures.length, 16); const multipleFailures = extractDetailsFromPayload("multiple_failures"); assert.equal( - multipleFailures.title, - "Multiple flaky test failures in more_shapeshift_spell, shapeshift_spell" + multipleFailures.title, + "Multiple flaky test failures in more_shapeshift_spell, shapeshift_spell", ); assert.equal(multipleFailures.failures.length, 2); const invalidTimer = extractDetailsFromPayload("invalid_timer"); assert.equal( - invalidTimer.title, - "Flaky test monkey_business: Invalid timer: /datum/looping_sound/proc/start_sound_loop() on /datum/looping_sound/showering" + invalidTimer.title, + "Flaky test monkey_business: Invalid timer: /datum/looping_sound/proc/start_sound_loop() on /datum/looping_sound/showering", ); diff --git a/tools/registration/config.json.example b/tools/registration/config.json.example index a95663c923..88a0a4a3fe 100644 --- a/tools/registration/config.json.example +++ b/tools/registration/config.json.example @@ -1,6 +1,6 @@ { - "port": 6969, - "token": "your-token-goes-here", - "guildId": "your-guild-snowflake-goes-here", - "roleId": "your-role-snowflake-goes-here" + "port": 6969, + "token": "your-token-goes-here", + "guildId": "your-guild-snowflake-goes-here", + "roleId": "your-role-snowflake-goes-here" } diff --git a/tools/registration/index.js b/tools/registration/index.js index af35488282..99be9650b1 100644 --- a/tools/registration/index.js +++ b/tools/registration/index.js @@ -3,70 +3,74 @@ const { Client, GatewayIntentBits } = require("discord.js"); const { port, token, guildId, roleId } = require("./config.json"); async function main() { - const client = new Client({ intents: [] }); - await client.login(token); + const client = new Client({ intents: [] }); + await client.login(token); - const guild = await client.guilds.fetch(guildId); - if (!guild) { - console.error("ERROR in config, unable to resolve guild " + guildId); - return; - } + const guild = await client.guilds.fetch(guildId); + if (!guild) { + console.error("ERROR in config, unable to resolve guild " + guildId); + return; + } - const role = await guild.roles.fetch(roleId); - if (!role) { - console.error("ERROR in config, invalid role ID ", roleId); - return; - } + const role = await guild.roles.fetch(roleId); + if (!role) { + console.error("ERROR in config, invalid role ID ", roleId); + return; + } - const server = http.createServer({}, (req, res) => { - const url = req.url; - if (!url) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ data: "error parsing URL" })) - return; - } + const server = http.createServer({}, (req, res) => { + const url = req.url; + if (!url) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ data: "error parsing URL" })); + return; + } - let urlObj; - try { - urlObj = new URL(`http://localhost${url}`); - } catch (err) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ data: "error parsing URL: " + err })) - return; - } - if (!urlObj.search) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ data: "error parsing URL" })) - return; - } + let urlObj; + try { + urlObj = new URL(`http://localhost${url}`); + } catch (err) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ data: "error parsing URL: " + err })); + return; + } + if (!urlObj.search) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ data: "error parsing URL" })); + return; + } - const params = urlObj.searchParams; - const member_id = params.get("member"); + const params = urlObj.searchParams; + const member_id = params.get("member"); - if (!member_id) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ data: "error parsing URL" })) - return; - } + if (!member_id) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ data: "error parsing URL" })); + return; + } - let memberIdRaw; - try { - memberIdRaw = JSON.parse(member_id); - } catch(err) { - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ data: "error parsing URL: " + err })) - return; - } + let memberIdRaw; + try { + memberIdRaw = JSON.parse(member_id); + } catch (err) { + res.writeHead(400, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ data: "error parsing URL: " + err })); + return; + } - guild.members.addRole({ user: memberIdRaw, role, reason: "SS13 Registration" }) - console.log("Successfully registered ", memberIdRaw); + guild.members.addRole({ + user: memberIdRaw, + role, + reason: "SS13 Registration", + }); + console.log("Successfully registered ", memberIdRaw); - res.writeHead(200, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ data: "success" })) - }); + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ data: "success" })); + }); - server.listen(port); - console.log("Server running on port", port); + server.listen(port); + console.log("Server running on port", port); } main(); diff --git a/tools/registration/package.json b/tools/registration/package.json index e2b1bd7fe1..5b133c2f28 100644 --- a/tools/registration/package.json +++ b/tools/registration/package.json @@ -1,14 +1,14 @@ { - "name": "registration", - "version": "1.0.0", - "description": "Small discord.js bot to handle adding member roles on discord registration", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "tigercat2000", - "license": "MIT", - "dependencies": { - "discord.js": "^14.21.0" - } + "name": "registration", + "version": "1.0.0", + "description": "Small discord.js bot to handle adding member roles on discord registration", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "tigercat2000", + "license": "MIT", + "dependencies": { + "discord.js": "^14.21.0" + } } diff --git a/verdigris/README.md b/verdigris/README.md index 202dc34001..e5ef6da985 100644 --- a/verdigris/README.md +++ b/verdigris/README.md @@ -1,5 +1,7 @@ # Verdigris + ## An in-tree rust module for [VOREStation](https://github.com/VOREStation/VOREStation) Currently implemented: - - Random map cellular automata + +- Random map cellular automata diff --git a/vorestation.dme b/vorestation.dme index fecf269de1..18ea5fcab3 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3593,7 +3593,7 @@ #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\passive.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\penguin.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\passive\possum.dm" -#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\raccoon_ch.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\raccoon.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\pets\cat.dm"