diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 000000000..8e7389a90 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,14 @@ +"English": +- 'src/en/**' + +"Russian": +- 'src/ru/**' + +"Ukrainian": +- 'src/ua/**' + +"Scripts": +- 'scripts/**' + +"Design": +- 'src/en/proposals/**' diff --git a/.github/workflows/labeler-pr.yml b/.github/workflows/labeler-pr.yml new file mode 100644 index 000000000..1b87e6555 --- /dev/null +++ b/.github/workflows/labeler-pr.yml @@ -0,0 +1,12 @@ +name: "Labels: PR" + +on: +- pull_request_target + +jobs: + labeler: + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v4 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7585238ef..d47934e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ book +.idea/ diff --git a/book.toml b/book.toml index aad926134..10586853b 100644 --- a/book.toml +++ b/book.toml @@ -72,6 +72,7 @@ warning-policy = "ignore" # false-positives like hell with absolute links & late "/en/hosting/SS14-Admin/index.html" = "/en/server-hosting/setting-up-ss14-admin.html" "/en/hosting/robust-cdn/index.html" = "/en/server-hosting/setting-up-robust-cdn.html" "/en/hosting/oauth/index.html" = "/en/server-hosting/oauth.html" +"/en/hosting/port-forwarding/index.html" = "/en/server-hosting/port-forwarding.html" "/en/technical-docs/acronyms-and-nomenclature/index.html" = "/en/general-development/codebase-info/acronyms-and-nomenclature.html" "/en/getting-started/engine-changes/index.html" = "/en/general-developmnet/codebase-info/prs-with-engine-changes.html" "/en/getting-started/debugging-tools/index.html" = "/en/general-development/tips/debugging-tools.html" @@ -116,4 +117,5 @@ warning-policy = "ignore" # false-positives like hell with absolute links & late "/en/engine/porting-visualizers/index.html" = "/en/ss14-by-example/making-a-sprite-dynamic/porting-appearance-visualizers.html" "/en/engine/lighting-fov/index.html" = "/en/robust-toolbox/rendering/lighting-and-fov.html" "/en/engine/sprites-icons/index.html" = "/en/robust-toolbox/rendering/sprites-and-icons.html" -"/en/hosting/hub-rules/index.html" = "/en/community/space-wizards-hub-rules.html" \ No newline at end of file +"/hosting/hub-rules/index.html" = "/en/community/space-wizards-hub-rules.html" +"/en/hosting/hub-rules/index.html" = "/en/community/space-wizards-hub-rules.html" diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 9c37e3f09..dbe0f9c25 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -91,6 +91,7 @@ Robust Toolbox - [Build Configurations](en/robust-toolbox/build-configurations.md) - [Preprocessor Defines](en/robust-toolbox/preprocessor-defines.md) - [MIDI](en/robust-toolbox/midi.md) +- [Publishing a new version](en/robust-toolbox/publishing-robusttoolbox.md) Space Station 14 ================ @@ -119,6 +120,14 @@ Design Proposals ---------------------- +- [Anomaly cores](en/proposals/anomaly-cores.md) +- [PDA messaging](en/proposals/pda-messaging.md) +- [Plant genetics](en/proposals/deltanedas-plant-genetics.md) +- [Security Genpop Rework](en/proposals/genpop_security.md) +- [Game Director](en/proposals/game-director.md) +- [Grid Inventory](en/proposals/grid-inventory.md) + + Server Hosting ============== @@ -131,6 +140,8 @@ Server Hosting - [Setting up SS14.Changelog](en/server-hosting/setting-up-ss14-changelog.md) - [Setting up SS14.Watchdog](en/server-hosting/setting-up-ss14-watchdog.md) - [OAuth](en/server-hosting/oauth.md) +- [Maintenance]() + - [Debugging server lockups](en/server-hosting/maintenance/debugging-server-lockups.md) Other Projects ============== @@ -167,3 +178,42 @@ Community - [Admin Command Cookbook](en/community/admin/admin-tooling/admin-command-cookbook.md) - [Wizards Den Admin Policy](en/community/admin/wizards-den-admin-policy.md) - [Wizards Den Banning Policy](en/community/admin/wizards-den-banning-policy.md) +- [Progress Report Creation](en/community/progress-report-creation.md) + +Maintainer Meetings +============== + +---------------------- +- [2023-09-23](en/maintainer-meetings/maintainer-meeting-2023-09-23.md) +- [2023-09-09](en/maintainer-meetings/maintainer-meeting-2023-09-09.md) +- [2023-09-02](en/maintainer-meetings/maintainer-meeting-2023-09-02.md) +- [2023-08-19](en/maintainer-meetings/maintainer-meeting-2023-08-19.md) +- [2023-07-29](en/maintainer-meetings/maintainer-meeting-2023-07-29.md) +- [2023-06-10](en/maintainer-meetings/maintainer-meeting-2023-06-10.md) +- [2023-05-20](en/maintainer-meetings/maintainer-meeting-2023-05-20.md) +- [2023-05-06](en/maintainer-meetings/maintainer-meeting-2023-05-06.md) +- [2023-03-05](en/maintainer-meetings/maintainer-meeting-2023-03-05.md) +- [2023-02-11](en/maintainer-meetings/maintainer-meeting-2023-02-11.md) +- [2023-01-21](en/maintainer-meetings/maintainer-meeting-2023-01-21.md) +- [2023-01-07](en/maintainer-meetings/maintainer-meeting-2023-01-07.md) +- [2022-07-30](en/maintainer-meetings/maintainer-meeting-2022-07-30.md) +- [2022-07-16](en/maintainer-meetings/maintainer-meeting-2022-07-16.md) +- [2022-06-25](en/maintainer-meetings/maintainer-meeting-2022-06-25.md) +- [2022-06-11](en/maintainer-meetings/maintainer-meeting-2022-06-11.md) +- [2022-05-28](en/maintainer-meetings/maintainer-meeting-2022-05-28.md) +- [2022-05-14](en/maintainer-meetings/maintainer-meeting-2022-05-14.md) +- [2022-04-30](en/maintainer-meetings/maintainer-meeting-2022-04-30.md) +- [2022-04-16](en/maintainer-meetings/maintainer-meeting-2022-04-16.md) +- [2022-04-02](en/maintainer-meetings/maintainer-meeting-2022-04-02.md) +- [2022-03-19](en/maintainer-meetings/maintainer-meeting-2022-03-19.md) +- [2022-03-05](en/maintainer-meetings/maintainer-meeting-2022-03-05.md) +- [2022-02-05](en/maintainer-meetings/maintainer-meeting-2022-02-05.md) +- [2022-01-22](en/maintainer-meetings/maintainer-meeting-2022-01-22.md) +- [2022-01-08](en/maintainer-meetings/maintainer-meeting-2022-01-08.md) +- [2021-12-11](en/maintainer-meetings/maintainer-meeting-2021-12-11.md) +- [2021-11-27](en/maintainer-meetings/maintainer-meeting-2021-11-27.md) +- [2021-11-13](en/maintainer-meetings/maintainer-meeting-2021-11-13.md) +- [2021-10-30](en/maintainer-meetings/maintainer-meeting-2021-10-30.md) +- [2021-10-16](en/maintainer-meetings/maintainer-meeting-2021-10-16.md) +- [2021-10-02](en/maintainer-meetings/maintainer-meeting-2021-10-02.md) +- [2021-09-19](en/maintainer-meetings/maintainer-meeting-2021-09-19.md) diff --git a/src/en/assets/images/grid-inventory/grid-example.png b/src/en/assets/images/grid-inventory/grid-example.png new file mode 100644 index 000000000..5a0e5610b Binary files /dev/null and b/src/en/assets/images/grid-inventory/grid-example.png differ diff --git a/src/en/assets/images/grid-inventory/in-game.png b/src/en/assets/images/grid-inventory/in-game.png new file mode 100644 index 000000000..e53999761 Binary files /dev/null and b/src/en/assets/images/grid-inventory/in-game.png differ diff --git a/src/en/assets/images/grid-inventory/shape-examples.png b/src/en/assets/images/grid-inventory/shape-examples.png new file mode 100644 index 000000000..55f122536 Binary files /dev/null and b/src/en/assets/images/grid-inventory/shape-examples.png differ diff --git a/src/en/assets/images/hosting/scsi-while-true.png b/src/en/assets/images/hosting/scsi-while-true.png new file mode 100644 index 000000000..48e0e6ea3 Binary files /dev/null and b/src/en/assets/images/hosting/scsi-while-true.png differ diff --git a/src/en/assets/images/hosting/windbg-open.png b/src/en/assets/images/hosting/windbg-open.png new file mode 100644 index 000000000..071c6538e Binary files /dev/null and b/src/en/assets/images/hosting/windbg-open.png differ diff --git a/src/en/community/progress-report-creation.md b/src/en/community/progress-report-creation.md new file mode 100644 index 000000000..dc518d316 --- /dev/null +++ b/src/en/community/progress-report-creation.md @@ -0,0 +1,30 @@ +# Progress Report Creation +*A short handbook about making a progress report.* + +### Checklist +- Set an explicit start- & end-date of contributions you want to outline. +- Create a Trello board based off of the Progress Report Trello Template. +- Run the [tool](https://github.com/space-wizards/github2trello) to generate Trello cards for every Content/Engine pull request. Note that Content PRs without changelogs will be skipped. +- Organize the cards into their columns as you see fit. +- Write descriptions for every card. +- Combine the card contents into a markdown file based off of the Progress Report Markdown Template, but be sure to update the PR number. +- Ask PJB for the Patrons list. +- Add the contributors list, see below. +- Replace/remove names as stated [here](https://github.com/space-wizards/space-station-14/blob/master/Tools/contribs_shared.ps1). +- Put the markdown file into `website-content/content/post`. Images go in a new `website-content/static/images/post/pr_[number]` directory and videos go in a new `website-content/static/video/pr_[number]` directory. +- Create PNGs and MP4s for every section that needs them. +- Run [this script](https://github.com/space-wizards/website-content/blob/master/Tools/pr-image-convert.ps1) in the directory with all of the PNGs. Requires [ImageMagick](https://imagemagick.org/index.php) and [optipng](http://optipng.sourceforge.net/). +- Make a thumbnail (800x450) PNG and put it in `website-content/assets/images/thumbnails`. +- Create a pull request on the [website repo](https://github.com/space-wizards/website-content). Give everyone a chance to review it for a couple days, then merge at the same time as you release it. + +### Datasources +- List of all contributors with the following command: `git shortlog -s -n --since= --until=`. +- Commit-count: `git rev-list --count master --since= --until=`. + +### Places to Release +- Website. Automatically published when the pull request to `website-content` is merged. +- Steam (bug PJB or Smug). +- Discord. +- Patreon (bug PJB). +- Reddit (r/ss13, r/ss14, & r/linux_gaming). +- Twitter (bug PJB or Smug). diff --git a/src/en/general-development/codebase-info/conventions.md b/src/en/general-development/codebase-info/conventions.md index fd2e14906..004bca8a5 100644 --- a/src/en/general-development/codebase-info/conventions.md +++ b/src/en/general-development/codebase-info/conventions.md @@ -133,10 +133,10 @@ This is so it is clear to others what it is. This is especially true if the same ## Prototypes ### Prototype data-fields -Don't cache prototypes, use prototypeManager to index them when they are needed. You can store them by their ID. When using data-fields that involve prototype ID strings, use custom type serializers. For example, a data-field for a list of prototype IDs should use something like: +Don't cache prototypes, use prototypeManager to index them when they are needed. You can store them by their ID. When using data-fields that involve prototype ID strings, use ProtoId. For example, a data-field for a list of prototype IDs should use something like: ```csharp= -[DataField("exampleTypes", customTypeSerializer: typeof(PrototypeIdListSerializer))] -public List ExampleTypes = new(); +[DataField] +public List> ExampleTypes = new(); ``` ### Enums vs Prototypes @@ -155,7 +155,7 @@ When specifying sound data fields, use `SoundSpecifier`. C# code example (click to expand) ```csharp= -[DataField("sound", required: true)] +[DataField(required: true)] public SoundSpecifier Sound { get; } = default!; ``` @@ -190,7 +190,7 @@ When specifying sprite or texture data fields, use `SpriteSpecifier`. C# code example (click to expand) ```csharp= -[DataField("icon")] +[DataField] public SpriteSpecifier Icon { get; } = SpriteSpecifier.Invalid; ``` @@ -200,10 +200,14 @@ public SpriteSpecifier Icon { get; } = SpriteSpecifier.Invalid; YAML prototype example (click to expand) ```yml= -# You can specify a specific texture file like this +# You can specify a specific texture file like this, /Textures/ is optional - type: MyComponent icon: /Textures/path/to/my/texture.png - + +# /Textures/ is optional and will be automatically inferred, however make sure that you don't start the path with a slash if you don't specify it +- type: MyComponent + icon: path/to/my/texture.png + # You can specify an rsi sprite like this - type: MyOtherComponent icon: @@ -316,10 +320,10 @@ Transform(uid).Coordinates; ### Public API Method Signature All public Entity System API Methods that deal with entities and game logic should *always* follow a very specific structure. -All relevant `EntityUid` should come first. +All relevant `Entity` and `EntityUid` should come first. +The `T?` in `Entity` stands for the component type you need from the entity. +The question mark `?` must be present at the end to mark the component type as nullable. Next, any arguments you want should come afterwards. -And finally, all the components you need from the entity or entities should come last. -The component arguments shall be nullable, and default to `null`. The first thing you should do in your method's body should then be calling `Resolve` for the entity UID and components. @@ -327,11 +331,11 @@ The first thing you should do in your method's body should then be calling `Reso Example (click to expand) ```csharp= -public void SetCount(EntityUid uid, int count, StackComponent? stack = null) +public void SetCount(Entity stack, int count) { - // This call below will set "stack" to the correct instance if it's null. + // This call below will set "Comp" to the correct instance if it's null. // If all components were resolved to an instance or were non-null, it returns true. - if(!Resolve(uid, ref stack)) + if(!Resolve(stack, ref stack.Comp)) return; // If the component wasn't found, this will log an error by default. // Logic here! diff --git a/src/en/general-development/codebase-info/pull-request-guidelines.md b/src/en/general-development/codebase-info/pull-request-guidelines.md index c41b32ee3..539bed09e 100644 --- a/src/en/general-development/codebase-info/pull-request-guidelines.md +++ b/src/en/general-development/codebase-info/pull-request-guidelines.md @@ -1,54 +1,71 @@ # Pull Request Guidelines -Following these guidelines will make contributing much easier, and will help your PRs be merged much faster by making them easy to review. - -- If you're unfamiliar with the Git workflow, please read [our git guide](../setup/git-for-the-ss14-developer.md) and ask as many questions as you need in #howdoicode. -- Do not use the GitHub web editor to make pull requests. You are required to make sure your code compiles and you've tested your changes in-game before making the PR. **PRs created through the Github web editor are liable to be closed at a maintainer's discretion, as they have not been tested locally and cannot meet these requirements.** Repeated submission of PRs made through the web editor may result in a repository ban. -- Please **re-read your code preview on GitHub** before submitting a PR. If it's obvious to a reviewer it includes your last PR (i.e. PR2 includes PR1's changes), or that there are accidental changes, then it should be obvious to you. -- If your PR adds a new feature, you should provide a screenshot or video of it functioning properly ingame. This not only makes reviewing easier, but also makes writing the progress report easier. -- Avoid adding miscellaneous additional changes to a PR, e.g. changing the heat resistance of a pair of gloves alongside your PR adding a new gun. -- Avoid making lots of formatting changes in a file if you change very few lines in it. It makes the review significantly more difficult to parse what actually changed and can generate conflicts for other PRs. -- If you do make refactoring/formatting changes, make them separate commits from actual content/feature/functionality changes so that they are easier to review. -- Large refactors that touch a lot of other systems belong in a separate refactor-only PR with no content changes -- If you move a file to a different folder and/or namespace, put that in its own commit when possible to make it easier to tell what got changed in a file and what was just moved. +Thank you for contributing to Space Station 14. When submitting pull requests (PRs), please follow these guidelines to make your pull requests easier to review and merge. Pull requests that do not follow these guidelines may be closed at a maintainer's discretion. + +## Before You Begin + +- If you're unfamiliar with the Git workflow, please read our [Git guide](../setup/git-for-the-ss14-developer.md) and ask as many questions as you need in #howdoicode. + - Please have some familiarity with [C# conventions](https://docs.microsoft.com/en-us/dotnet/csharp/) (if working with C#) and [our own conventions](./conventions.md). Try to read how other parts of the codebase are formatted for a general idea. -- Try to split your PR into smaller ones where it makes sense to do so. This makes it significantly easier to read and can lead to faster reviews. It's also usually easier for you, and means you will receive earlier feedback and can avoid spending time making changes that have to be reworked. + - Large new features and comprehensive reworks to existing large features (ie antags or anything that could be considered a subdepartment unto itself), should first be [proposed and accepted in abstract](../feature-proposals.md) before you start working on actually implementing it. -- Avoid force-pushing to your branch. This makes all reviews show as 'outdated', even if they have not been addressed yet, which makes it much harder for us. -- When you're addressing reviews, click 'Resolve conversation' on GitHub once your revised code has been pushed. -- If you have questions about reviews that were submitted on your PR (or code questions in general, of course), feel free to ask for clarification on GitHub or Discord in #howdoicode. -## Reviews +## Content + +- **Make separate PRs for feature changes, bug fixes, and cleanup/refactors.** This makes changes easier to review, reduces conflicts, and also easier to revert if something goes wrong. + + - Feature changes and bug fixes should be in their own PR. + - Cleanups and "refactoring", including variable renaming and indentation changes (for example, due to file-scoped namespacing) must be in their own PR. + - **Refactors must be in a separate PR.** This includes changes that impact a significant number of public APIs (fields, methods, etc.) that require changes across multiple systems. These must be made in a separate PR from any content changes or bug fixes. + - If you move a file to a different folder and/or namespace, put that in its own commit when possible to make it easier to tell what got changed in a file and what was just moved. + +- **Do not make multiple unrelated changes in one PR.** For example, do not make miscellaneous additional changes to a PR, e.g. changing the heat resistance of a pair of gloves alongside your PR adding a new gun. + + - Try to split your PR into smaller ones where it makes sense to do so. This makes it significantly easier to read and can lead to faster reviews. It's also usually easier for you, and means you will receive earlier feedback and can avoid spending time making changes that have to be reworked. + +## Testing + +- **Test all of your changes in-game.** All bug fixes and features must be tested in-game. You should also test other features that may be indirectly impacted by your changes. -We get around 700 PRs a month and only have a small number of active maintainers. All maintainers are volunteers and maintainer availability is very variable. Depending on the size and importance of your PR, it could take up to a few weeks before someone gets around to reviewing it. Responding to any changes may also take some time. Please be patient. + - For the above reason, **do not use the GitHub web editor to make PRs.** Web edits are liable to be closed at a maintainer's discretion. Repeated submission of PRs made through the web editor may result in a repository ban. -Anyone is welcome to review PRs. Reviews from other contributors can be just as valuable as reviews from maintainers, and often mean that PRs can be merged faster and can help relieve the worload for maintainers. If you are waiting for a review it might be a good idea to find another contributor in a similar position so that you can mutually review each other's PRs. Reading other people's PRs and thinking critically about how you would have written the code can also be a useful learning tool. +- **Provide screenshots or videos** that demonstrate testing done. This also makes it easier to write progress reports. -### Asking for reviews -Please do not simply post your PR in our discord channels without context simply to ask for reviews. However, if your PR hasn't been reviewed by anyone and it has been a month, feel free to ping those listed here on GitHub or Discord. These aren't all of our maintainers, but they're currently the most active when it comes to reviews. +## Before Submitting -**For content reviews:** -- mirrorcult#9528, @mirrorcult on GitHub -- metalgearsloth#7697, @metalgearsloth -- ElectroSR#9529, @ElectroJr -- /tmp/moony#0029, @moonheart08 +- **Review your diff** using the code preview tab on GitHub. -**For engine reviews:** -- metalgearsloth#7697, @metalgearsloth -- PJB#3005, @PJB3005 -- ElectroSR#9529, @ElectroJr -- mirrorcult#9528, @mirrorcult + - Check for changes that you did not intend to commit. + - Check for accidental whitespace additions or line end changes. -## Adding screenshots/videos to your PR -PRs which make ingame changes (adding clothing, items, new features, etc) are required to have media attached that showcase the changes or the PR will not be merged, in accordance with our PR guidelines. Small fixes/refactors are exempt. If you include media in your pull request, we may potentially use it in the SS14 progress reports, with clear credit given. +## After Submitting + +You are free to make changes to your PR after submitting, for example, if you make improvements or fix bugs that you discover after submitting. + +- **Do not force push to your branch** after receiving a review unless a maintainer requests it. Doing so makes all reviews show as 'outdated', even if they have not been addressed yet. + +# Reviews + +Reviews are an important part of the pull request process. Reviews help us obtain feedback from the community and maintain a high quality of code in the codebase. Since maintainers are volunteers, we ask for your patience. The review process for large changes can take up to several weeks. + +## Getting Reviews + +- Anyone is welcome to review PRs. Reviews from other contributors can be just as valuable as reviews from maintainers, and often mean that PRs can be merged faster and can help relieve the workload for maintainers. If you are waiting for a review it might be a good idea to find another contributor in a similar position so that you can mutually review each other's PRs. Reading other people's PRs and thinking critically about how you would have written the code can also be a useful learning tool. + +- Maintainers periodically review open PRs. + +- If it is taking several days to get an initial review, it is appropriate to ask for a review in #pr-review-request. + +## Addressing Reviews + +- When you're addressing reviews, click 'Resolve conversation' on GitHub once your revised code has been pushed. -Use screenshot software like Window's built in snipping tool, ShareX, Lightshot, or recording software like ShareX (gif), ScreenToGif, or OBS (cross platform). -If you're unsure whether your PR will require media, ask a maintainer. +- If you have questions about reviews that were submitted on your PR (or code questions in general, of course), feel free to ask for clarification on GitHub or Discord from the reviewer or in #howdoicode. -## Changelog +# Changelog Changelog entries help make players aware of new features or changes to existing features. -### Changelog Template +## Changelog Template The Github PR template contains the following changelog that you can use to format your changelog entry so that it is automatically updated in-game: ``` @@ -65,7 +82,7 @@ Each entry is either an `add`, `remove`, `tweak`, or `fix`. There can be multipl Maintainers may, at their discretion, add, modify, or remove a change log entry that you suggest. -### Writing An Effective Changelog +## Writing An Effective Changelog The Changelog is for *players* to be aware of new features and changes that could affect how they play the game. It is *not* designed for maintainers, admins, or server operators (these should be in the PR description). When writing your changelog entries, please follow these guidelines: @@ -110,4 +127,4 @@ When writing your changelog entries, please follow these guidelines: - Not so good: "Can you believe it? Arachnid re-rework just dropped! Check the PR for more details" - - Not so good: "Arachnids have new sprites for being creampied." *crampied* has another, unfortunate meaning that undermines the professional tone of a Changelog entry. \ No newline at end of file + - Not so good: "Arachnids have new sprites for being creampied." *crampied* has another, unfortunate meaning that undermines the professional tone of a Changelog entry. diff --git a/src/en/general-development/feature-proposals.md b/src/en/general-development/feature-proposals.md index 5e17ea20c..478b5f0f0 100644 --- a/src/en/general-development/feature-proposals.md +++ b/src/en/general-development/feature-proposals.md @@ -4,9 +4,13 @@ If you are considering adding or reworking some major component of the game it's ## How do I make a proposal? -Just follow [our guide](../meta/guide-to-editing-docs.md) on editing any part of this site and PR your proposal as a page under the "Design Proposals" section found in the sidebar between "Space Station 14" and "Server Hosting". +1. Make a copy of the design proposal template located at `src/en/proposals/proposal-template.md`. -Proposals that get approved by a maintainer will be merged to this site, which is basically the green light for you or someone else to go ahead and implement it. +2. Write your proposal (see [guide to editing docs](../meta/guide-to-editing-docs.md)). + +3. When you are ready for your proposal to be reviewed, make a pull request. + +4. Your proposal is approved when a maintainer merges it. This is a green light for you or someone else to go ahead and implement it. A maintainer will then link your proposal to the side bar. *Note to maintainers: edit `src/SUMMARY.md`* ``` admonish tip "Unfinished Proposals" If you don't think that your proposal is ready for maintainer scrutiny, but still want feedback on it you can PR it as a draft. Drafts are less likely to attract people looking to get down to brass tacks, but still let people comment and give advice. diff --git a/src/en/general-development/setup/setting-up-a-development-environment.md b/src/en/general-development/setup/setting-up-a-development-environment.md index 31a476b7d..97bb8df35 100644 --- a/src/en/general-development/setup/setting-up-a-development-environment.md +++ b/src/en/general-development/setup/setting-up-a-development-environment.md @@ -25,9 +25,9 @@ If you're **unfamiliar with Git**, or just don't know how to proceed, follow the We have an automatic submodule updater so you don't have to worry about running `git submodule update --init --recursive` all the time. -Run `RUN_THIS.py` inside the repo you downloaded with Python. Preferably from a terminal too. This should take a few seconds so if it instantly stops you probably aren't using Python 3.7+ or something. Try checking out the troubleshooting at the bottom of this page. +Run `RUN_THIS.py` inside the repo you downloaded with Python. Preferably from a terminal too. This should take a few seconds so if it instantly stops then check if you are running Python 3.7+ otherwise keep reading. -**If running `RUN_THIS.py` immediately opens and closes a window: do not worry.** This does not mean that it failed. The script closes automatically upon completion, so if you want to verify that it worked properly, check the submodule `/RobustToolbox/` and verify that all the files are there. +**If running `RUN_THIS.py` immediately opens and closes a window: do not worry.** This does not mean that it failed. The script closes automatically upon completion, so if you want to verify that it worked properly, check the submodule `/RobustToolbox/` and verify that all the files are there. If not try checking out the troubleshooting at the bottom of this page. Note: If you have any issues when getting started with missing files it's recommended you run `git submodule update --init --recursive` by hand once in case something went wrong with python. @@ -104,7 +104,7 @@ In Rider you can create a "compound configuration" to run or debug both client a ## JetBrains Rider In Rider you can attach the resources directory to the solution so that you can more easily navigate to resource files like prototypes. -![](../../assets/images/setup-rider-configurations.png) +![](../../assets/images/setup-rider-attach-existing-folder.png) # Troubleshooting @@ -132,3 +132,8 @@ Unhandled exception. Robust.Shared.IoC.Exceptions.ImplementationConstructorExcep ``` Uninstall .NET Core SDK x86. Install .NET Core SDK x64. + + +## The client and server aren't available in Visual Studio to configure in Multiple startup projects + +This may be because you opened the project as a folder rather than a solution. Make sure you open it as a solution and click the space station 14 .sln file. diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-09-19.md b/src/en/maintainer-meetings/maintainer-meeting-2021-09-19.md new file mode 100644 index 000000000..92b37a125 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-09-19.md @@ -0,0 +1,287 @@ +# 2021-09-19 - Maintainer Meeting Notes +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +Attendees: +Paul +Smug +Silver +Vera +PJB +Shadow +Mirrorcult + +# Overall Summary + +Next Meeting Items: +- have a moderator +- buy pjb a MoMMI plushie for the meetings +- less ideaguying, more concrete topics + +Action Items: +- combat and disarm shouldn't be actions +- PJB fix UI (or anyone else) +- multi hotbar (switching with shift+num) should be optional, so it isn't used accidentally. +- add the ability to perform actions from the Action List Menu +- Resolve should assert UIDs match in debug only. +- Code wide-chat. +- add as an optional UI style. +- Code Shuttles first. Revisit this after. +- Fix Ui for lathes and research +- Investigate better research server sync mechanic +- Delete research code. Maybe from memory too +- Investigate KSP style point return +- Investigate Point Types +- Balance point receiving mechanics. +- Add Debug Only UI for errors. Make it on HUD and hard to miss on debug +- Enforce naming things OnX instead of HandleX. Use OnEntityEvent vs HandleEntityEvent etc +- Investigate how shuttles would be created. +- Shuttles should be able to fly and warp between z levels +- Investigate Shuttlebombing as a problem. +- admin tools and logging +- EU/US Biweekly playtests. +- split game admins to EU/US +- Three month limit on progress reports. +- Two month minimum for progress reports. +- Fix Slow Tests. Fix Test framework to be fast and cancer free +- Write Docs on how to write Tests +- what should have required tests: medium to large changes, systemchanges +- Write docs for ss13 dev transitioning like system xyz and you or byond to C# for byond refugees +- YAML Real time Linter. Language server +- GOTO YAML +- XAML Linter hot reloading, Previewing +- Fluent Linter +- Custom editor for yaml prototypes/constructiongraphs. +- worldline debugging +- save states +- test pooling + +# Individual Discussions + +## Action Bar +**Summary: Actions should be used for item actions & spells etc. Combat & Disarm just dont really belong there.** + +Discussed Items: +- using is a pain (especially combat & disarm action) +- combat is so specific it should just be a button +- alt click should be disarm in combat mode +- ui broken (pjs fault) +- Having to bind "scream" (for example) to the bar to use it is dumb. Specially if you're only gonna use it once or on special occasions. + +Action Items: +- combat and disarm shouldn't be actions +- PJB fix UI (or anyone else) +- multi hotbar (switching with shift+num) should be opt in so it isn't used accidentally. +- being able to perform actions from the Action List Menu + +(18:12 -- People distracted by SS14 in-game chess)(they lost btw) +(18:16 -- PJB can smell her dinner already. Oh no.) + +## Entity System Method Resolves +Summary: Everyone agreed that ES resolution works fine now. Resolve testing only in debug should assert matching UIDs between server and client. + +Discussion Items: +- Everyone seems to agree that this is the cleanest way to do it? +- resolve should assert that the entity UIDs match so components don't get mixed. (but only in debug!!) + +Action Items: +- Resolve asserting UIDs match in debug. + +## Wide-chat UI +Summary: code it as an option, leave it off by default, evaluate maybe making it default later. + +Action Items: +- Code wide-chat. +- add as an optional UI style. + +## Salvage Crew +Summary: Code Shuttles. Revisit afterwards. + +Discussion Items: +- do we really wanna focus on this right now? +- probably want shuttles & docking first + +Action Items: +- Code Shuttles first. Revisit this after. + +## Research +Summary: Code Shuttles. Revisit afterwards. + +Discussion Items: +- UI for lathes and research is bad +- the code and syncing with the server is bad +- ctrl+a backspace the code +- can I ctrl+a backspace it from my memory? +- KSP-style diminishing point returns? +- different types of points? +- avoid continuous points source or make sure they're not op + +Action Items: +- Fix Ui for lathes and research +- Investigate better research server sync mechanic +- Delete research code. Maybe from memory too +- Investigate KSP style point return +- Investigate Point Types +- Balance point receiving mechanics. + +(18:27 -- pjb announces there is a meteor swarm (AND CARP) on station)(now xenos) + +## Exception tolerance in debug +Summary: We need a debug ui that shows errors + +Discussion Items: +- a debug-only ui that shows the errors that occur (make it obvious) +- yes exception tolerance + +Action Items: +- Add Debug Only UI for errors. Make it on HUD and hard to miss on debug + +## Minor formatting naming like OnEntityEvent vs HandleEntityEvent. +Summary: Format Naming Discussion for OnX vs HandleX prefixes. Use OnX. + +Discussion Items: +- on- because it's shorter + +Action Items: +- Enforce naming things OnX instead of HandleX. Use OnEntityEvent vs HandleEntityEvent etc + +## Shuttle +Summary: Investigate Creation, Flying, Warping and Shuttlebombing. + +Discussion Items: +- how would players create a shuttle? +- cargo shuttle should be autonomous/untamperabler +- shuttles should be able to fly and "warp" (go between z levels) +- not sure how to handle remote shuttle control. Necessary for latejoin miners but abusable if shuttle not static (can get lost) +- shuttle bombing limited damage + +Action Items: +- Investigate how shuttles would be created. +- Shuttles should be able to fly and warp between z levels +- Investigate Shuttlebombing as a problem. + +## Scheduling Playtests +Summary: Playtest Scheduled for every two weeks. We will have US/EU seperated. + +Discussion Items: +- our current game admins are... slightly uncommited +- we desperately need admin tools & logs +- we're not building a community, but recruiting admin ties into this +- we should get a roadmap to see when we're ready for building a community? +- do one us & one eu time, biweekly +- split eu and us game admin + +Action Items: +- admin tools and logging +- EU/US Biweekly playtests. +- split game admins to EU/US + +## progress reports +Summary: Playtest Scheduled for every two weeks. We will have US/EU seperated. + +Discussion Items: +- PJB proposed smaller progress reports every now and then +- Having a "max amount of time between progress reports" was discussed +- Releasing a progress report before playtests was discussed +- need better way to keep track of stuff for progress reports +- robust film maker ??? + +Action Items: +- Three month limit on progress reports. +- Two month minimum for progress reports. + +(19:11 -- PJB mentioned how Unitystation gets more upvotes than us on Reddit. All hell broke loose.) + +(19:15 -- Vote is held for progress report time. using discord reactions :clap: :clap:) +result: six weeks won with 7 votes. +or not +ok +MORE wins 2months + +(19:20 -- PJB screwed up the voting reaction order, we just realized. Some people voted wrongly due to this. Laughs were had. curtains roll, exit stage left. ) + +(19:24 -- PJB: "Discord screwed up the order don't blame me") + +(19:25 -- PJB said "I'm hungry" and left. Just like that.) + +## CI/Testing +Summary: Playtest Scheduled for every two weeks. We will have US/EU seperated. + +Discussion Items: +- Speed is a concern with CI. Integration tests are very slow. + But why are they slow: because they we reuse the server + -> we need to have a possiblity to reset the server instead of making a new one + they are also not pooled/multithread. +- they are also ass to write, which means its alot of effort. + write docs on how to write tests +- make it not cancer + +Action Items: +- Fix Slow Tests. Fix Test framework to be fast and cancer free +- Write Docs on how to write Tests +- what should have required tests: medium to large changes, systemchanges + +## Reaching out to (ss13) devs +Summary: Playtest Scheduled for every two weeks. We will have US/EU seperated. + +Discussion Items: +- mirror wants to make docs specifically for ss13 devs: + here is what it looks like in byond, here is what it looks like in ss14. helping devs transitions +- passively attract devs by helping them transition, dont poach people +- more "system xyz & you" + +Action Items: +- Write docs for ss13 dev transitioning like system xyz and you or byond to C# for byond refugees + +## Tooling!!!! that doesnt suck ass +Summary: Playtest Scheduled for every two weeks. We will have US/EU seperated. + +Discussion Items: +- yaml goto, real time linter. language server +- xaml linter, (preview), hotreload, not make it ass for vs, automatically call robustxamlloader.load(this) +- ref events are ass to work with + have an analyzer/attribute? name it a specific way? +- ftl linter, markup +- editor for yaml, prototypes, constructiongraphs. in-engine? per command? +- worldline debugging (@pjb) +- save state of game to save ourselves from redoing testing enviroments all the time +- do a doc in ss14docs for this (tooling ideas) +- TEST POOLING (WIP) + + +Action Items: +- YAML Real time Linter. Language server +- GOTO YAML +- XAML Linter hot reloading, Previewing +- Fluent Linter +- Custom editor for yaml prototypes/constructiongraphs. +- worldline debugging +- save states +- test pooling + +## Roadmap +Summary: Playtest Scheduled for every two weeks. We will have US/EU seperated. + +Discussion Items: +- + +Action Items: +- Law !@#!$>. +- Admin tools and logging +- Test suite fix +- Debugging (Debug ui, exception tolerance in debug) +- Tooling suite +- medbay +- traitor + +## Conclusion +Summary: for the next meeting, maybe have a moderator and less ideaguying, more concrete topics + +Discussion Items: +- + +Action Items: +- for the next meeting, maybe have a moderator +- buy pjb a MoMMI plushie for the meetings +- less ideaguying, more concrete topics diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-10-02.md b/src/en/maintainer-meetings/maintainer-meeting-2021-10-02.md new file mode 100644 index 000000000..082600ff8 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-10-02.md @@ -0,0 +1,116 @@ +# 2021-10-02 Maintainer Meeting +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +Attendees: +PJB +Vera +Paul +Smüg +Silver +Shadowcommander +Mirrorcult + +First topic: when are we playing spelunky arena mode + +## Vera: Standard for missing components in new resolve standard +right now they just fail silently and return +- log errors in the resolve, make it optional to disable + +## Sloth: Refactoring collision masks to something like source +because everyone stuffs them up +- sounds good go for it + +## Vera: mobs probably need a base mob prototype +yes +pj notes current species impl is bad +3 different prototypes per species -> should be one honestly +pj notes "eausugeuguegebgeyehmeh" +SS13 does 2 too the problem is that all the data is duplicated in the mob entity prototype SS14, SS13's is fine. + +## Vera: can we stop naming things base.yml +- may the odds be ever in her favor +- base_xyz.yml format + +## Vera: future of async interactions +- do_after() etc +- actions/callbacks instead? +- events can be serialized unlike async, but using events is more painful +- T E C H D E B T -> makes issue 2&>1 /dev/null + +## Mirrorcult: wiki.js docs & bi-directional git support +- git support for wiki.js docs so non-maintainers can contribute easier +- talk about more docs in general, how do we get em? enforce it? when do we enforce it? + - enforce for large prs. make required + - +- vera still salty about ECS document being grieffed smh :pensive: at below +- silver grieffed ECS omegalul +- paul discovers autoscrolling based on where you type in hackmd + +## Sloth: PVS performance because people lifted up the carpet and saw the termites +- serialization slow +- acruid missing +- remove player specific states -> ???? -> pvs fixed +- custom path for player specific states? + - have two events, one for common state and one for player-specific states +- pjb.speech_speed=120% + +## Playtest review +- bugs, perf. etc +- the gang gets ratiod by vera +- vera is in (s)pain +- tickets + - persistent +- mom and dad are fighting + +## Literally everyone: We need logging +- how do we persist: + - positions -> entitycoordinates, but not the literal type + - entities -> euid, name, prototypeid +- db stuff needs doing and paul is too dumb +- silver will check out grafana/loki pains + +## SS14.Admin experience +- what stats to display +- have one place to view logs +- access to admin panel? + +## Progress Report +- opendream & shuttles in next pr +- look over contents +- deadline: soon:tm: + - yes pls soon I want tg walls and byondchat +- [PR link](https://github.com/space-wizards/website-content/pull/19) + +## Sloth: The big shuttle bonanza +#### How to thrust +- Should thrust be related to the position of the thruster, especially for angular velocity i.e. should it be perpendicular? + - Should thrusters be smoothed to make w i d e t h r u s t +- How should thrusters be obtainable +- What should the driving UI look like, radar like raft / baro? Controls? Access locked? +- Should it be possible to rotation-lock to make driving something like an escape pod easier +- Shuttle collisions, minimum velocity / mass / effects (I think last time we talked about it was a couple tiles destruction max) +- Speedcap? +- Which sprite set are we using (eris?) Should we support additional stuff like wings +- how should ship guns work +#### How to dock +- Do we actually want grid merging vs just attaching it via a joint. Gonna have the eventbus flooded with the grid change (parenting events) +- Somewhat related: Floyd mentioned having a salvage shuttle that tows stuff in rather than using something like a tractor beam +#### Balance questions +- How many thrusters to move an average size +- S H U T T L E BOMBING + +#### GitHub Projects, Discussions +- Discuss how bad they are. +- GitHub Discussions is where ideaguys go to die. + - Vera: YEET + - salvage, then yeet +- Why tf did Paul create https://github.com/orgs/space-wizards/projects/6hh + - i propose raising the debt ceiling. all in favor say aye + +## Meeting review +what could be done better in terms of moderating? +- make sure pjb eats dinner before meeting X3 +- play jackbox after next meeting +- play xonotic *during* meeting diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-10-16.md b/src/en/maintainer-meetings/maintainer-meeting-2021-10-16.md new file mode 100644 index 000000000..14ed17882 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-10-16.md @@ -0,0 +1,134 @@ +Maintainer Meeting Notes - Date: 16.10.2021 += +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +Attendees: +PJB +Paul +ShadowCommander +Vera +Zoldorf +DrSmokeleaf +RemieRichards +Mirrorcult (last 2) + +## A plan for release | Mirror +do we feature freeze, keep going as a standalone thing and let forks take over? +- will /veegee/ steal PJB back? idk +- pjb doesnt like trees +- we will continue to develop the official game + +18:07 -- My cookies are already gone. Oh no. WHATTAAMAGONNADO??? 🍪 + +## Game admins, we need em | Mirror +server population is picking up. we should probably look for more admins if we can. +- we really needs logs before we do this +- also other admin tools + - logging + - jobbans + - notes + - improve ahelps when we have logging & have them link to a private discord + - Teleport Here and Jump to Player but not ass + - click author name of a message to open a context menu, jump to them @PJB for the functionality for buttons in chat +- new admins are gonna ragequit because the lack of admintools +- all gameadmins are basically inactive, delete role + + +## Discord channel mosh pit +- we have info spread throughout #rules-info, #faq, #annoucements, #progress-reports + - team agrees its fine, but move faq to website & link to it from #rules-info +- internal channels. its mostly not even for development, more like a meta-gang of friends, so the "contributor" might be a bit misleading + - VIP: Assigned on discretion. Internal channels (secret-ss14, secret-offtopic, vidya-gamers) + - Contributor: ""Automatic"" role after 1 PR. Access to #actual-development #progress-reports #role-assign #important-info + - Move gamer role from role-assign to vidya-gamers + - Have patreons & contributors have access to patreons????????????? + - ~~maybe have a seperate discord for developing in the future~~ + + +## Rotation bug funnies | Sloth +Spawning the station rotated to better spot obvious rotation bugs +- sure +- this is terrible for map diff renderer + - you know the emoji disintegrating gif where it has the funny loading icon? that + ![](https://i.imgur.com/s3it1jC.gif) + - Deal with it + + +## Popup/Prompt standard | Shadow, Mirror +- which side confirm & cancel goes to + - confirm right + +Windows: +![](https://cdn.discordapp.com/attachments/811718327579443230/898977474027864154/unknown.png) +MacOS: +![](https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/Art/dialog_simple_2x.png) +Ubuntu: +![](https://i.stack.imgur.com/tj9Fm.png) +KDE: +![](https://develop.kde.org/deploy/kdialog/yesnowarning.png) +- have a simplified way to create them + - pjb hates em. "really does not like them" extreme hatred "input dialogs everywhere" + - pjb made a spooky sound... she scares me + - AaAAaaAAAaaaaaAAAAaAAA! + - mom pick me up im scared + - just saw a blue vera gradient in pjb's krita recent files, d'aw. + +- solution: have "popups" that expand out of stuff like the examine window or: + ![](https://i.imgur.com/iT2WuEo.png) + + +#### This is already in, woo +~~## Status effects framework & event handling | Vera~~ +~~- We might wanna code a general framework for status effects. Discuss what we need.~~ +~~- Certain status effects should probably be components so handling events with them isn't bad~~ + + +## Runtime? Variant? Strains? Seed prototypes :chart_with_downwards_trend: | Vera +some systems depend on getting roundstart prototypes and modifying those (by creating variants). this should be standardized to not become a massive mess +- a +- conversation has gone off-rails :focus: +- codebase ain't prepared for YAML hot-reload... +- open git issue for this system +- sacrifice vera by rewriting seeds and then get ideas +- you know the emoji disintegrating gif where it has the funny loading icon? that + + +## Ancient Hardware vs. Compute Shaders | Paul, hopefully PJB +do we keep supporting ancient hardware or do we save ourselves the trouble and get nicer libs & nice new features +- veldrid +- benefits: pjb dies less daily, compute shaders +- downsides: pjb rewrites renderer, needs to be rewritten anyways +- pjb: might be possible to keep opengl and rewrite renderer to be onpar +- ancient hardware wins again + + +## Wallmounts, how do | Mirror +*refuses to elaborate* +*leaves* + +very fast pjb transcription done by 3 people at once: +- visibility is dependent on the viewport (camera position, side of the wall) +- cant be global (e.g. cant be on the spritecomponent) +- collect list of spritecomponents & pass it to systems that want to look into it so they can switch the visibility (working on a copy of the data) + + + +## Logging stuff | Mirror +- log by each entity system, then group systems together? + - move entity system, logs are different + - OOC is not in an entity system + - manually assign groups instead (like ss13) +- how to store logs + - throw it on postgres (jsonb goes brrrr) for the time being + - if its a perf/(web) scaling problem we can change it later +- use loki to aggregate? @Silvertorch5 + - if we need perf we do it then, just postgres for now +- stay with grafana for all logs, or just server metrics? have our own prebuilt solution for logs? @Silvertorch5 + - grafana way too limited, we need our own solution for logs. keep for server metrics. +- ingame log viewer + - yes, obviously + - drag select an area when? +- API? + - check pauls branch diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-10-30.md b/src/en/maintainer-meetings/maintainer-meeting-2021-10-30.md new file mode 100644 index 000000000..10a756070 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-10-30.md @@ -0,0 +1,206 @@ +2021-10-30 - Maintainer Meeting Notes +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 30.10.2021 16:00 UTC + +**Attendees:** +PJB +DrSmugLeaf +Vera +Silver +Paul +metalgearsloth he arrived AUSTRALIA TIMEZONE counts casual 3am 100 space bucks sloth falls asleep during meeting excuse me I was here at 9am once ok sloth why did you have to go there the first meeting was not that long ok I was busy playing rain world, PJB approved ok understandable have a nice day +mirrorcult + +## Visibility of maintainer notes | Paul +- Can contributors read? +- Can everyone read? + +Proposal: Mirror whatever visibility the meeting has. +(#maintainers channel is separate does not apply) + +## Changing the release date on Steam from Fall 2021 | Vera +- Let's be honest, we won't be ready until we have a few more things... +- We should probably change it to something like Dwarf Fortress ("time is subjective") + - when mommi flys + - when we code it + +Discussion about when to open up the playtest: When we are fine with it being reviewed? + + +## Screenshots for Steam | Paul +Do screenshots really need to be 1080p? surely we could edit them to also allow for smaller ones(?) + +No. + +## Name letter restrictions | Vera +What kinda letters do we allow +yes: +- Alphanumerical +- Accents: ä, á, à... +- Numbers +- Symbols -> restrict to machines/sillycons + no: +- Kanji +- Zalgo --> s̸̡͆̕͠i̴̧̢̺̩̦͙̜͑͛͑͑̓̿̈͛̚ͅl̴̨̘͔̥̩͎̼̞͌̎̈́͂͜͠͠v̷̘̦̬̹̖͎͌̾e̶̩̻͔̦͗̅̀͂r̵̦̟̹̤͓̼͓̣̉̄̃̽̿̑̇͗̚ +- X Æ A-12 +- Spanish Ñ spanish Ñ is under no why live if ñ is not in I die this paul please save the spanish Ñ + ![](https://i.imgur.com/OC2eJiF.png) :thistbh: stolen from pjb's stream + ![](https://cdn.discordapp.com/emojis/833946663130759190.png?size=160) + `If you mean could someone legally name their child "Bobbysystem 14", that depends. Some countries have laws about what names you can give your child. I'm not aware of any law in the United States against giving your child a number for a name.` + Vera: "im not coding that" + + +## Fluent Text type | PJB +To allow different locales on the server at the same time + +- russian and us players play on the same server + +question: make loc fully clientside/user-dependent +how cbt will this be to do? *very*: send the loc ids & parameters instead of the strings + +vera: I'm so happy I accounted for this in contructionGL2 part 2: of guides and recipes +silver: brb deleting constructionGL2 branch +vera: :waltre: + +this wont be that useful for ss13/4, but definitely for some other rt-game + +tldr: its gonna be a (vera: maybe not, pj disagrees) massive refactor, but noone is opposed to the idea. + +verdict: WYCI +also a problem atm: you use the static method alot + +## PR GitHub bot | DrSmugleaf, Mirrorcult +Automatically tags PRs with: +- Conflicts +- Needs Review +- Awaiting Changes +- Approved +- Map Changes +- Sprite Changes + +What default GitHub looks like (ass) +![](https://i.imgur.com/uC4YUGA.png) + + +## YAML Prototype Editor | DrSmugleaf +- Do we do it + - If not, is autocompletion/validation on the IDE for prototypes a good idea instead + - Merely do all of the above gaming +- In-game, out of game or both +- Is Injazz alive so they can design it +- Would it integrate other tools into it like the construction graph editor + - if not, I die + +we do it +Which ui system? ROLL OUR OWN oh god ours, cba for avalonia. +editor in-engine. +- funny in-editor run would be possible +- F A S T +- semiblocker: hotreload game assemblies. +- solution: pjb codes it! +- if we don't do this, I die tbh + +pjb: OH NO *shows three lines of code* + + +## Do we localize command error messages | Vera +Do we *really* need to localize commands? +https://pickerwheel.com/ + +- What about admin stuff? + +Just go with it. (Don't localize command names) + +## Docking airlocks | ~~Vera~~ Sloth +Should the only way to dock two grids be via special docking airlocks? + +special docking airlock with joints +*PJB3005 set atmos preset to ZAS - Hellish* +we *WILL* have atmos presets mark my words +*PJB3005 set atmos preset to Plasma* + +## Visualizer refactor | Vera +Visualizers are a pain in the ass to work with. Let's come up with a better way to do 'em. +Pain points: +- touching five files for smth +- enum keys are bad for perf +- animations are janky + +handle visualizers over the entitysystem? +visualizer-data should just be a component +- serv3 killed my flyweighting + +pjb should write down her ideas +good luck with that +do we make a discord thread for this? +simply quickly type out pjb's words turbo fast +5 pings ought to do it +ECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECSECS + +Just make visualizer data a component seriously + +this has been promoted to threadstatus +this discussion has been terrible for the barotrauma timetable +man this speedruning split was terrible + + +## Timed entity system updates / master controller stuff | Mirrorcult + +See https://github.com/space-wizards/RobustToolbox/pull/2125 + +How do we want to handle timed updates since the boilerplate for it is really bad right now--reflection, virtual methods, etc, and do we want to do something like SS13's MC so we can smooth updates out over multiple ticks intelligently + +Do we want mc: yeah, definitely +prediction is gonna be funky for this -> make it use gametime? but then we cant do mastercontroller stuff. cross that bridge when we get there. + +## Impromptu topic: PVS and NaNs | Metalgearsloth +average pjb rant: compression streams are slow in pvs we need to dfcsiuzxfhvd rteu7yi54rhjirotpter +sloth: shut it +kill da NaN + +general agreement: destroy the NaN +fix: throw entity into the nullspace shadow realm +nullspace entities work differently between client and server +allegedly server cant refer to nullspace entity on the client + +## Engine Entity Tags in MetaData | Vera +Basically, tagging entities is something vital enough that it feels it should be supported by the engine, and not something content provides. + +yes fund it gaming +Move TagComponent to engine +When you source gen the flags + +## Merging IEntitySystemManager into IEntityManager | Vera +First it was IComponentManager, now it's gonna be IEntitySystemManager. +There's no reason not to merge EntitySystemManager into EntityManager. Hell, the former is initialized and shut down by the latter. Also screw mocking, tbh. + +Powerful Vera will take care of the entire refactor +"dw about it, i will code it" + +I expect vera to be done by the end of tonight +Unless she plays baro with us :focus: +expect the PR-- wait I'm hanging out with someone later + +## Identity System | Vera +So basically, `entity.Name` bad. + +Obscure name, voice, face etc. Chameleon traitor items. +This is terrible for component states not being player specific +Remove `entity.Name` +pipe entity through a system to get a string representation +entity.name is just kinda bad and should be removed + +## Maintainer meeting topics topic | Paul +Ideally i want to have a short description of each topic to order/group them before the meeting & to have a rough estimate of the time needed for each topic. How we wrote down topics this time was kinda bad in that regard :heck: + +Proposal: Maybe have a link next to each topic pointing to a discord-message explaining it a bit? Maybe have somewhat of a guide on how these messages should look: No open questions, etc. + +## Discuss Bodysystem Replacement | Silver +rip sub 2 hour speed run +quick distract paul ok +man +gaming diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-11-13.md b/src/en/maintainer-meetings/maintainer-meeting-2021-11-13.md new file mode 100644 index 000000000..96285d059 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-11-13.md @@ -0,0 +1,111 @@ +# Maintainer Meeting Notes - Date: 13 Nov 2021 += +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + + +DrSmugleaf +Paul +PJB +Electro +Remie +ShadowCommander +Vera +Visne +Silver + + +# Metadata ECS Design | Vera +- Do we make a MetaDataSystem with GetName, SetName, GetDescription, etc methods, or do we make them part of EntityManager? +- MetaData stores the same things as IEntity used to, now. Lots of things will query this info, so it should be part of EntityManager. +- Put the data in MetadataComponent. +- Can't get name directly, localization. + - GetName/SetName and SetDescription/SetDescription method in the system for localization. + +# The VV meets ECS problem | DrSmugleaf, Vera +- How performant does this need to be (for BQL for example) + - Slightly performant not super optimized +- How do we properly integrate VV-Setters with ECS + - Put attributes on system methods then make the property read only + - Show system methods on the component VV window + - map with attributes, maybe synergy with friendattribute funnies here? + - Put attributes on component fields that dont need any logic when changed +- How do we (and should we) allow method calls from VV + - How does VV handle arguments for methods +- How do we make compiling or tests properly tell us if something will screw up in advance + - Roslyn analyzer +- What to do when a resolve method has multiple entity uids + - Pass all the ids manually, stop checking arguments when finding the first nullable component parameter with default value + +Make it possible to raise events with VV +In the future merge VV with a generic inspector in the engine + +# Admin Logs | DrSmugleaf +Vibechecking smugs work :yay: +- PJB are you happy: + ![](https://i.imgur.com/SfyctsB.png) + ![](https://i.imgur.com/xvBvZeW.png) + +Make a log entry have multiple types +Filter by these types (be able to do and) +Grab the variable name with caller expression syntax from the method call + +# Visualizers | Vera +Visualizers should have been components & entity systems from the start, writing visualizers is a pain in the ass my god + +Visualizer data should be a component. +Have a way to make entity systems use visualizers ideally. +Components are heavy. +- Struct components? +- Flyweighting? + +# Async/Await | mirrorcult +tldr: sometimes async stuff leads to less cbt and sometimes events lead to less cbt +- Which async stuff do we have atm? should it still be async. + - Some leftover async doafters, port them over to new event doafter + - Tool interact? +- Which event stuff do we have that should be async? + - None +- What makes a certain usecase more suited towards async/events respectively. + - Async never if it needs to be serialized. + - Await wrapper for events? + - Needs to be compact. + - Not possible with serialization, would need to instantiate the task and you can't serialize the task. + - Events when it needs to be serialized. + +You can serialize the entire server state if you can serialize everything, good for testing. +EVERYTHING NEEDS TO BE SERIALIZABLE - Paul Paulson, 2021 +We failed mirror + +# Examining Tooltip | mirrorcult +Proposals: +- Hold shift to see name, click to see description + - Hold shift for name + short description, click for long description + - Short descriptions should make it obvious that a long description is available, i.e. having a "..." symbol/button etc. - Remie +- We gotta show characters equipment and stuff + - Show it on examine +- Show armor values and stuff + - How protective armor is + - Good idea, show it +- How do we do it? it'd be a bit ugly to put all in the tooltip, so how about.. buttons in the tooltip that open up a more close examination? + - Not bad + - Popup somewhere on shift click + - In the examine tooltip and hope it just looks good + +We need a vibe check on how examining works in SS13 +![](https://cdn.discordapp.com/attachments/903694002577113118/909137595638890497/unknown.png) +![](https://cdn.discordapp.com/attachments/903694002577113118/909137935683698708/unknown-10.png) + +# Revert .NET 6 | PJB +- It wasn't a joke... +- ![](https://i.imgur.com/bMBsRbV.png) +- This is terrible for admin logging. +- If PJB fixes ef core issue with memory leaking it's fine. + +# MEETING OVER +# MEETING OVER +# MEETING OVER +# MEETING OVER + +# paul sounds like he's dying diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-11-27.md b/src/en/maintainer-meetings/maintainer-meeting-2021-11-27.md new file mode 100644 index 000000000..4c0975aa4 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-11-27.md @@ -0,0 +1,123 @@ +# Maintainer Meeting Notes - Date: 27 Nov 2021 += +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +Paul +Vera +Smug +Visne +Acruid +PJB +Electro +ShadowCommander +Remie +Sloth + +# Recruiting new game admins | Vera, Paul +- Application form +- Staff application forums +- no irc +- perhaps recruit some ss13 admins? + +# How do we cope with the many PRs we've been getting | Paul, Sloth +- Having a "How to make your pr more reviewable"-guide + - Don't make a bunch of miscellaneous additional changes in a PR, e.g. changing the heat resistance of a pair of gloves alongside your PR adding a new gun + - Don't make a bunch of formatting changes in a file if you change 1 line. It makes the review significantly more difficult to parse what actually changed and can generate conflicts for other PRs. + - Once a review has started on your PR do not force push to it. + - prefer multiple small PRs over one large PR +- simply have 100% test coverage it reviews itself + +From https://docs.spacestation14.io/en/maintainer-meetups/secret/2021-10-30-meetup +(Also here now! https://github.com/space-wizards/space-station-14/issues/5542) +![](https://i.imgur.com/vPY8qhP.png) + +We need a knowledgebase, so contribs can find everything important at once. + +Engine code quality needs to go up. + +We need to: +- write more docs, especially super simple 14 + - most common things people are pr'ing + - how to use containers + - go through prs to see what people are doing + - if you are reading the code, write down what you are looking for + - playerfilters + - make subfolder in docs for drafts + - drafts can just be bullet points/a skeleton/outline + +# Making Transform not required for entities | Vera +- for serialization + ![](https://i.imgur.com/BY3W0oM.png) +- free VV, no extra work IT ALREADY WORKS!!!! +- whats +- simply support serializing entity systems instead + - make systems entities + - way too powerful +- how to handle saving non-transitive data used by entity systems + +# Chat filter | Shadowcommander +implement the chatfilter, because admins are doing it rn +remember to save it in base64 or something so we dont get bopped by github +to sum it up: dont allow to send, notify admins, give them a popups +- use unicode's "confusables" information to find chars that look like eachother, and use that to bad "variants" of no-no words + + +# Roadmap | Vera +"No" - Smug +"Why" - Vera +"It would be extremely painful" - Smug +"You're a big guy" - Vera +"For you" - Smug + +- New roadmap: + - Body system + - thats it + - dont forget photography + - TBF the last roadmap had ideaguys all over it + +- make the roadmap make the last topic of each meeting + - this way we all get input + - the roadmap is at worst 2 weeks out of date + +# ComponentProtoName attribute | Sloth +![](https://i.imgur.com/kzYoNoF.png) +https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/static-abstract-interface-methods + +# Stable/bleeding edge branches | Mirror +- where is mirror, wake her up!!!!! +- we are currently very volatile compared to ss13 +- pause fukken updates to the servers somehow PLEASE + - thistbh + +# Synthetic stress test of USWest | Mirror +PaulVS + USWest Hardware + .NET 6 + Atmos/Solar optimizations + +# Should we continue running biweekly playtests | Mirror +considering we get 20-40 pop pretty much constantly +- keep doing playtests +- they are good to remind people we exist +- better player stat tracking? like retention, etc + +# Roadmap content +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - nuke ops + - lings? + - blob? + - cult? +- EL BODY SYSTEM +- Salvage +- Teleporters (Beam me up (Scotty)) + - telescience +- body system but again +- body system (get smug to code it) +- __***ENGINE EDITOR***__ +- Tutorial + - In game guides + +# Post-meeting ~~jstris~~ tetr.io! | Visne, Tomeno +- when the hwehgneh the isss suss + - ![](https://cdn.discordapp.com/emojis/818484273995841547.png?size=32) diff --git a/src/en/maintainer-meetings/maintainer-meeting-2021-12-11.md b/src/en/maintainer-meetings/maintainer-meeting-2021-12-11.md new file mode 100644 index 000000000..f6eff7507 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2021-12-11.md @@ -0,0 +1,232 @@ +# Maintainer Meeting Notes - Date: 11 Dec 2021 += +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +DrSmugleaf +Vera +PJB +Acruid +ShadowCommander +ElectroSR +Silver + + +# Do we support grid overlap | metalgearsloth +- Sloth got ganked by ideaguys again +- For planets +- Imagine the effort +- Check if Tomeno is in the meeting +- Sloth: Ignoring planets and assuming they're just coded somehow, what level of grid interactivity do we support on a """planet""". i.e. +- do we support multiple shuttles overlapping +- are cars grids, +- do we support a grid shuttle flying over a car. - what if a mob leaves the shuttle? +- How do we handle collision between the planet and cars or the likes? +- If sloth codes it +- Acruid already coded it and clusterfack removed it why live +- Shuttle flying over car? No, driving a car over the planet is fine. + - No pseudo-z level + - No 3d with layering like that. +- Do we want tile based vehicles? + - CM does an entity tank, way easier +- How do we layer multiple grids on top of each other + - Any time you want to query for a grid in a point in space you are returning an IEnumerable of grids + - Way to get foreground/background grid? + - How do we get the grid, keep them separate and not mix them up + - Keep a z-index and sort the results to distinguish the grids + - NO default grids + - Acruid: Promote grids to entities so they float in space like Godot/Unity + - Make MapManager a system, collection of grids is entities. + - Grid ids are an alias to the entity that holds the grid data. + - Replace grid ids with entity ids. + - Removing grid ids can be done now "easily" tm. + - Do it like Rimworld which keeps track of the ground underneath the floor as separate grids on the same chunk. + - Do we want to support smaller grids (like space engineers)? We can but it scales with an integer and the default is 1 > can be fixed + - If someone really wants to support grid vehicles yes but it's a lot of work and effort, entities is easier, if anything should be a long term goal. +- Collision: Normal collision between vehicle and wall, really complicated box2d does not handle it. + - Use different collision groups maybe. + + +# Pulling tile sized entities through airlocks | ShadowCommander +- How should this be made easier +- For players we made the hitbox circular, what do we do for lockers or girders? +- Do we make entities trail behind you like in RPGs? +- Make them less than tile sized. +- Current pulling mechanics or something different? + - Either make all have hexagon/octagon hitboxes or change hitbox dynamically when pulling. +- Follow pulling? + - No +- Need a custom constraint in the physics engine to keep a box behind you and aligned to get it through the door. + - Do it like Zelda a Link to the Past (https://www.youtube.com/watch?v=A6r-625k-Bo) +- How to implement it: https://oraqia.wordpress.com/2014/07/05/tricks-for-2d-grid-based-character-collision-that-can-work-in-3d-too/ + + +# IEntity removal and feature/code freeze | Vera +- [GitHub Link](https://github.com/space-wizards/space-station-14/issues/5733) +- FIX THE CODEBASE +- When do we stop the current feature/code freeze + - What is exempt from this freeze: YAML, bugfixes, admin tools? +- What do we do with the stable branch after the freeze is over +- Pretty stable right now +- Feature Freeze: + - Keep feature freeze going + - Keep nullable entity uid, compile time checks + - Vera: Replace invalid entity uid checks with nullable null checks instead (if it makes sense) for the most part. + - Nullable entity uid does not hurt performance. + - Use nullable entity uid instead of invalid, invalid is if someone weird gets deserialized. +- Engine changes are fine as long as the public API does not change + + +# ViewVariables refactor (Impromptu) | Acruid +- Do a custom class for the editor, a view like Unity (custom editor for a component). +- https://www.youtube.com/watch?v=RInUu1_8aGw +- MVP/MVVM pattern, build a presenter that pulls the data from the component and the system (lives in the system as a function or separate class). +- Use reflection to autogenerate those classes at runtime. +- Generates the UI components inside the class (if feasible). + - Worse for performance. +- Component has data, system has functions, bind these together. + - How do you bind the getter/setter for the UI fields (current VV does this (poorly)). + - Example: get/set stack size, let VV know these are two separate functions with attributes or hardcode it into the view class. + - The view class can also be a function, register them through reflection by having the entity system implement a generic interface for a component. + - This interface specifies the functions required to view/set properties of components in methods. + + +# EntitySystem proxy methods vibe check | Vera +- [GitHub Link](https://github.com/space-wizards/RobustToolbox/blob/master/Robust.Shared/GameObjects/EntitySystem.Proxy.cs) +- Hide the aggressive inlining from PJB + - Do not use aggressive optimization, that means it runs faster first few runs, JIT does this anyway after a few runs. + - It can slow down your code long term. + - Compiler details etc. + - Use it in long-running methods that only get ran a few times. + - It makes it skip some optimizations it otherwise would make if you are not careful. + - The aggressive inlining is fine (but probably not necessary). Aggressive optimization though... +> The AggressiveOptimization option is meant for very specific cases and should only ever be used when sure that the method being annotated actually benefits from that (possibly running some benchmarks to confirm that). Despite what the name might suggest, this option will not "make your code faster", on the contrary it might very well make it slower in many situations. AggressiveOptimization means that the method will skip the tiered compilation and go directly to tier1. This can be beneficial for methods that are hot paths or long running, but only executed once, so that the tiered JIT wouldn't have time to kick in (for instance, for a complex app initialization method that is run at startup). But skipping the tier0 -> tier1 transition also means that a number of additional optimizations cannot be done by the JIT (eg. removing checks for the static constructor, or inlining static readonly fields). Because of this, in many cases applying this option might actually make your code slower. And regardless, the JIT will often skip tier0 anyway in many cases already (eg. in methods with a backwards branch), so it might very well be unnecessary anyway. Long story short: if you're not 100% sure, just don't use this option in your code. +- It surely has 100% test coverage +- Does it make sense for their names to be different than the ones on EntityManager + - Rename EntityManager functions??!! + + +# Engine design SOLID and OOP (Impromptu) | Acruid, Vera +- Keep the APIs simple as possible, the names should be the same +- SOLID principles +- but what about WARMED (Write/Argue/Rewrite/uhh I forgor the rest) this +- Acruid: 2 classes depending on each other bad +- PJB: but consider: + - Main loop needs to be able to shutdown + - Main loop depends on everything + - Multiple things (server shutdown command) need to be able to shutdown the main loop down + - Not allowed under this model +- Acruid: Use an event to decouple them + - Inject game manager to command, command calls shutdown on it. +- PJB: You only avoid the loop in abstract OOP terms, you still have a circular dependency linked by an intermediary class with a shutdown method and a shutdown event where the loop listens to the event and everything else calls the method. +- Constructor vs field reflection dependency injection. + - Acruid: Constructor is only bad in a minimal amount of cases, it makes more sense conceptually so you don't need an Initialize method. Field reflection makes understanding the order in which dependencies need to be instantiated more difficult, for example in tests. It is already done for EntityManager. + - PJB: It's unnecessary and constructor injection does not fix this, it's a general problem for testing. + + +# Documentation | Paul +- How do we organize it? + - Content docs: Brought back by pressure from Moony, fandom wiki is worse than setting it up ourselves. Mediawiki moony has access. + - Game guides + - Tutorials + - SS13 books open up an HTML window for in-game wiki: We aren't doing this. + - How do we do it? IDK lol moony figures it out + - EFR is working on book markup, pull wiki pages into the game, write it in markdown. + - LIGHT THEME OR DARK THEME: moony sorts thi out + - Content-dev docs + - Device networks + - YAML + - How to interact with entities, components, systems and ioc managersç + - Mapping docs + - Engine-dev docs + - Technical writeups to understand what's going on and the design behind it + - Do not split content and engine docs, distinguish them properly on the wiki, we don't need 2 separate wiki (wiki.js doesn't make this easy, easier than hackmd) +- Paul found something better than wiki.js for docs + - We don't know the name it's lost with time ask Paul. + - We can use outline to replace hackmd, free to self-host, not open-source +- Autogenerated content + - WikiJS seems to not support templates/macros + - Dump chemical reactions into the wiki for example, Paul could not figure it out + - We simply use mediawiki, use a script to parse the data and output the markdown (not possible in wiki.js) (may be possible in mediawiki) + - Once again ask Paul + - Moony: "autogen is possible on mediawiki p nicely" + - JSON upload +- GitHub integration to PR to the wiki when? + - Content wiki: Don't need it + - Wiki.js docs: Supported, do it + - Not compatible with secret docs, port that out and then do it + + +# Meme idea: UE4-like naming standard | PJB +- https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/ +- https://www.tomlooman.com/unreal-engine-naming-convention-guide/ +- Instead of FooComponent, FooC +- Instead of FooSystem, FooS +- DO IT +- MY KEYBOARD??? +- LITERALLY DO IT NO BALL +- vera ain't writing the conventions for this, you people do it just type !conventions on discord and write there very easy very simple +- How far do we take it? + - FooS, FooC + - M for manager? MEntity +- Do it in content +- Maybe do(n't do) it in engine +- what about FooS and FooC +- Do suffixes instead so its sorted alphabetically +- One system can handle multiple components +- 1:1 component:system is ass + - vera was right about atmospheresystem handling every pipe device + +![](https://i.imgur.com/4Y2QbhU.gif) + + +# GitHub issues, feature requests (Mini Impromptu) | Acruid +- They are fine, keep them there unless we agree the feature is dumb then close it. +- Make them a discussion as features are not actionable, issues need to be actionable. +- This is a problem in the engine too. +- Make a bug template for engine issues. + + +# Admin Log Persisting (Impromptu) | Silver +- We haven't needed to look at old ones so far. +- With bans from years ago we need to look back. +- Keep them. +- At minimum keep every round of logs where someone was banned. + - Or properly document the (perma)ban. +- Make a schema for logs. + + +# Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2021-11-27-meetup) +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic + - nuke ops + - the nuke is done, nuke ops isn't yet + - does not work outside dynamic + - lings? + - blob? + - vera loves blob + - cult? + - make it as good as vg for pjb +- EL BODY SYSTEM + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage + - prototype done by 20kdc and it is good +- Teleporters (Beam me up (Scotty)) + - telescience +- Singularity needs to ACTUALLY WORK +- body system but again +- body system (get smug to code it) +- __***ENGINE EDITOR***__ +- Tutorial + - we implement a wiki, peptide wrote some stuff in-game + - In game guides + - Waiting on pretty labels + + +# Project Zomboid +after I eat diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-01-08.md b/src/en/maintainer-meetings/maintainer-meeting-2022-01-08.md new file mode 100644 index 000000000..86017ccf5 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-01-08.md @@ -0,0 +1,194 @@ +# Maintainer Meeting (8 Jan 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 8 Jan 2022 16:00 UTC + +**Attendees:** +DrSmugleaf +Vera +metalgearsloth +Paul +ElectroSR +PJB +Visne +ShadowCommander + +# Automatic component names | wrexbe, metalgearsloth +- [Current PR link](https://github.com/space-wizards/RobustToolbox/pull/2389) +- Previous PR got some objections which got addressed. +- RenderingTreeComponent gets RenderingTree as name automatically + +ok epin merge + +# Reduce movement speed | metalgearsloth +- Current movement speed: + - Walk = 4 + - Sprint = 7 +- Reduce it to 5 for sprint? +- Change it in code 5 sounds good + +# Comment and changelog typing conventions | ShadowCommander, metalgearsloth +- Capitalization +- Punctuation +- They are very inconsistent at the moment +- Code comment consistency does not matter +- Changelog consistency matters + +# Improving CODEOWNERS | Vera +- Maintainers should actually codeown stuff they're in charge of. +- Make it so nobody gets notified for absolutely everything (like me and PJB currently-) +- Doing this should help with reviews! +- Maybe don't merge PRs if the codeowners haven't approved it? +- Current CODEOWNERS: + - All: PJB, Vera + - Localization files: Remie +- Change it to: + - Atmos: Vera + - Body system: Mirror and Smug + - Clyde/ClydeAudio: PJB + - Construction: Vera + - Database: PJB and Smug + - Integration tests: Smug + - How about just everything except physics in engine: PJB + - thistbhn't, I'd rather not have anyone receive notifs for everything :blobsweat: + - Map renderer: Smug + - Networking/prediction (not pvs): PJB/Acruid? + - Pow3r: PJB + - PVS: Paul + - Resources: PJB + - Physics: Sloth + - Serialization: Paul and Smug + - UI: PJB + - YAML Linter: Paul and Smug + +# Audio attribution | Paul +- Do we enforce it +- Paul says we figured out how to do out but I can't find where + - audiofile.ogg -> audiofile.ogg.yml +- Which metadata should audiofiles have? + - license identifier like rsis, copyrightstring + +# Event naming | Paul +- Unified way to name them +- TWO EVENTS +- Equip attempt event has two viewpoints: + - Equipee (GotEquipped?) + - Equipment (IsBeingEquipped?) + - talk in text chat to decide the funny + - just @ Remie simple + +# Port, protocol and IANA | PJB +- IANA is the list of "which applications use which ports" +- Port 5514 is free. +- Current status: `ss14://` is HTTP port 1212/tcp, `ss14s://` is HTTPS port 443/tcp + - Problem: leaving out URI scheme can make address fail to work + - Most people used to playing on game servers are probably *not* used to URI schemes in their server address. + - Problem: 443 is HTTPS port. This means `ss14s://` servers need to put their stuff behind a subpath or subdomain, which is ugly. Or use a port I guess. +- Do we want an IANA port assignment? + - Yes + - Port: 5514 +- Only HTTP for connections +- Drop the code for connecting over HTTPs + - It makes the code simpler (Launcher, watchdog, hub) + - Figure out a fallback path for the other servers + +# Reverting policy for untested/unreviewed buggy PRs | ShadowCommander +- Should we revert them? + - We did so for rich text +- Revert if server is broken and we can't fix it in one line code change (quickly) +- Objective: For a round to be playable, we can do it case by case. +- If we revert we can reopen the original pr + +# YAML bloat prevention rules | Vera +- What to do about the many useless prototypes? + - Do we clean them? +- Only allow YAML additions that would be immediately useful to mappers, admins or straight up obtainable in-game + - New salvage wreck, new playable station, new chemical that can be mixed and has effects, new food item that can be cooked in-game or is obtainable in some other way, new fun badmin toy... +- Do we want to be a bit more strict with new machines having, for example, construct/deconstruct steps? +- every yaml addition should be either: + - for admins + - for mappers + - obtainable + - with cooking recipe & construction steps +- be more strict in general + +# Full server snapshot/reload | PJB +- The workflow: + - Press a button + - Restart server + - Enter server + - Same state +- What's the current status + - not good +- What can we do (conventions, best practices) to make this more doable + - event serialization + - new save format & logic: gamestatesave + - saves all maps + - entitysystem should get a way to read/write into that +- sidenote: this would be very beneficial for my persistence server fork plans + +# Species | Paul +- This is going to take 30 minutes to talk through +- Do we allow them at roundstart? + - Current stance: + - Q. Will the main SS14 servers have round-start playable races other than humans? + - A. No, but the functionality will be there for other servers. (Click spoiler to see the long answer to this question). + - Thoughts (from PJB) are that it would be too much effort to make them interesting enough. + - See [the FAQ for the full explanation](https://forum.spacestation14.io/index.php?/topic/48-information-faq/) + - Is PJB a furry? + - >looks at own avatar on discord + - ![](https://cdn.discordapp.com/emojis/913187937854832720.webp?size=96&quality=lossless) + - ![](https://c.tenor.com/hZSHM9mDoL4AAAAC/drake-morphin.gif) +- We support species. +- We support species at roundstart (when moony PRs it) +- Review species case by case, same as everything else. + +# Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2021-12-11-meetup) +AKA What do we want to move from playtest to early access + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic + - mirror pls write the doc for it I will code it I swear on my life + - nuke ops + - the nuke is done, nuke ops isn't yet + - does not work outside dynamic + - lings? + - blob? + - vera loves blob + - cult? + - make it as good as vg for pjb +- EL BODY SYSTEM + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage + - it is done + - upstream moony asteroid/wreck generator for procgen salvage + - https://www.youtube.com/watch?v=H0LPWuTt2o4 +- Teleporters (Beam me up (Scotty)) + - telescience + - its complicated we need to talk about it +- Singularity needs to ACTUALLY WORK +- body system but again +- body system (get smug to code it) + - Species???? +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- Tutorial + - In game guides + - Yes + - Or at least a link to the wiki ingame + - Link it RN JESUS + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + +# Bloons TD 6 | Vera, DrSmugleaf +- Bloons TD 6 gaming + - this diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-01-22.md b/src/en/maintainer-meetings/maintainer-meeting-2022-01-22.md new file mode 100644 index 000000000..43c6b8f40 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-01-22.md @@ -0,0 +1,205 @@ +# Maintainer Meeting (22 Jan 2022) += +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +DrSmugleaf +Vera +Visne +ShadowCommander +PJB +ElectroSR +metalgearsloth +moony +Remie +mirrorcult + +# Do we promote bigger over smaller maps | metalgearsloth +- We have a bunch of tiny maps but no large ones +- Small maps get played regularly +- Should we save mapvote stats? + - **Yes, also track votes against to not skew results.** +- **Don't promote bigger maps, just merge them on a case-by-case quality basis.** + + +# Moving BUI to content | metalgearsloth +- Is this something that would be reused by other games + - **No** +- **Move it** + + +# Proxy methods for is entity terminating / deleted / queued for deletion | metalgearsloth +- **Yes** +- Proxy methods in EntityManager and EntitySystem. + - Maybe have an interface to standardise these? + + +# Standardising EntityManager generic and non-generic methods | metalgearsloth +- Some use the array indexing and some don't so assume there's more of a speed difference now +- **Standardise them (on generics)** + + +# Discord role for musicians | metalgearsloth +- We have a pingable role for spriter already +- **Add the role** + + +# Not raising transform events during initialization | metalgearsloth +- Raising them leads to lifestage checks everywhere +- Ties into DetachParentToNull which would be nice to remove. +- **Sloth looks at it** +- Make events for transform initialize/shutdown? + - Current one can only be subscribed to once. + + +# Ergonomics of async code vs do_after events | metalgearsloth, mirrorcult +- Solution: [single event do-afters](https://github.com/space-wizards/space-station-14/issues/6132) + - Replace the two do after events with one DoAfterEndedEvent with the status on it, and a wrapper for custom data + - Also could put cancel tokens into the do_after system +- Events are more painful than async code to write + - So painful I would rather code in Unity +- It's a necessary evil for full map serialization +- If we don't use it, do we keep async in for forks? + - **No** +- Async do_after made interaction worse internally | metalgearsloth + - If you want to make your tool do after you have to make it all async +- We could serialize member methods with much difficulty, pass in the method to run into the do_after like verbs | Paul + - Needs to be a member method, not a lambda or anonymous +- **Async might be serializable, when PJB codes it** +- **Use single event do after meanwhile** + + +# Removing component start/shutdown events | PJB +- Instead have the few components that actually respect startup/shutdown implement it themselves. +- **Remove and replace it** +- We don't know how much legacy code require the OnAdd/Initialize/Startup functions. + - This won't be trivial. + - Probably nothing uses the Running property, which we can remove. + - The point is to **Remove Running** + + +# Protocol-require UDP and TCP port to be the same | PJB +- Extension from the port assignment topic +- What did PJB mean by this +- It is very complex otherwise +- Querying the server list would be easier +- **Require both ports be the same** + + +# Do we accept translation contributions | Paul +- Can the admins deal with non-english speaking people? + - Servers would still be English only, server hosts could change the locale with us as the upstream being the pool of translations for everyone. + - Paul how do we handle different servers having different content to be translated + - **We will only accept common content between the two repositories** + - Linter when +- Not purely game-translation, also launcher, website, etc. + - Launcher: **Yes** + - Website: **Yes** + - Game: If you can run a client with a different locale to the server **yes** + - **This requires the giant FText refactor** +- There are tools for this ([Discord link](https://discord.com/channels/310555209753690112/675078881425752124/931645419598000238)) +- [Weblate](https://github.com/WeblateOrg/weblate/) + + +# Wallmounts on the floor in front of the wall vs on/in the wall | ShadowCommander +- Interactability is easier if they're in front | PJB +- **They will go on the wall because otherwise you can't place wallmounts facing to space** +- Wall lights are complicated + - **Simply offset the point light** +- PJB implements occlusion and we win + + +# Text input popup design | ShadowCommander +- Should it be a BaseWindow/Eui or pop out of the control like the confirmation pop out for verbs like delete? +- Example: the set-transfer-amount verb should use it. Currently it creates a little popup +- **Multiline text: window** +- **Verbs (Rename, Transfers): input box, with sizes** +- **Commands: box if possible, window if too big** + + +# Why are integration tests slow | mirrorcult +- Because someone broke the ShouldPool method by changing the amount of default cvars on tests or smth + - Be my guest if you want to find a better way to do it + - Also tests are now broken if you enable pooling again + - I'm not fixing it | DrSmugleaf +- Next :clap: topic :clap: +- also 40% of tests is just reloading prototypes (last I profiledTM) + + +# Archive Python rsi.py and rsi-editor | mirrorcult +- **Decision: keep rsi.py because python scripts are convenient, archive rsi-editor** + Old repositories in Python: +- [RSI.py](https://github.com/space-wizards/RSI.py) +- [RSI-editor](https://github.com/space-wizards/RSI-editor) + +New repositories in C#: +- [RSIEdit](https://github.com/space-wizards/RSIEdit) +- [RSI.NET](https://github.com/space-wizards/RSI.NET) + + +# Mapping and adding escape pods | mirrorcult +- We now have multi-grid saving/loading and docking serialization +- **Decision: code it, map it** +- Mapping docking is really annoying right now +- **Add a console command/mapping utility to make this easier, while the map is paused** + + +# Upstreaming ship vs ship combat as a gamemode | moony, mirrorcult +- When mirrorcult upstreams it +- **Sounds good to everyone** + + +# Early Access Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-01-08-meetup) + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic + - mirror pls write the doc for it I will code it I swear on my life + - nuke ops + - the nuke is done, nuke ops isn't yet + - does not work outside dynamic + - lings? + - blob? + - vera loves blob + - Remie already coding it, but got lazy + - cult? + - make it as good as vg for pjb + - revs +- EL BODY SYSTEM + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage + - it is done + - upstream moony asteroid/wreck generator for procgen salvage!!!!!!!!! + - https://www.youtube.com/watch?v=H0LPWuTt2o4 +- Singularity + - radiation needs to work +- body system but again +- body system (get smug to code it) + - Species + - we need to do non human body parts +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- Client side movement? + - a smidgen +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - :death: + +Bugs: +- copy the Subnautica bug reporter for players to report bugs +- automatically log grafana exceptions +- being able to see inside containers + - Need to change PVS to not send all container contents + - Isn't this a separate issue anyway + - Seems like PVS queue bugs? + - Imagine if players could give steps to replicate, insanium +- hud disappearing diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-02-05.md b/src/en/maintainer-meetings/maintainer-meeting-2022-02-05.md new file mode 100644 index 000000000..bc86f0ecf --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-02-05.md @@ -0,0 +1,170 @@ +# Maintainer Meeting (5 Feb 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 5 Feb 2022 16:00 UTC + +**Attendees:** +DrSmugleaf +Vera +PJB +Paul +ElectroSR +ShadowCommander +moony +Silver + +## Improving the usability of animations in code | metalgearsloth +- For example, an easy way to play a state then go to another. +- Animations big suck + - Hard to play, keep track of and synchronize (need sync with animation timing) +- In most game engines (Godot/Unreal) you have a state machine with the animations, based on some state +- **Should be part of visualizers** +- Not having a GUI to define them kinda sucks. + + +## Guide for reporting bugs | metalgearsloth +- Subnautica button + - S 👏 u 👏 b 👏 n 👏 a 👏 u 👏 t 👏 i 👏 c 👏 a 👏 👏 b 👏 u 👏 t 👏 t 👏 o 👏 n + - [GDC talk](https://www.youtube.com/watch?v=Urx7WQE6NY0) +- **Have a /vg/-like button** to create issues on GitHub on a separate repo, so the main one is not spammed + - **In-game window** + - Make sure it has **feedback** so we dont get duplicate bug reports + - What do we grab: + - Round information + - Commit the server is at + - How do we fix it not leaking current-round information? + - Only send at end of round. + - **Cache the reports into local SQLite DB (game server) while the round is going on** in case the server crashes, then send them **through the server**, not the watchdog. + + +## Replacing prototype inheritance with composition | Paul +- **Fund it** +- Conflicts (multiple inheritance/diamond problem) + - based on imported order, like python +- Prototype load ordering + - Push composition on the mapping level, not on the created objects + - Gets rid of deserialization results + - Makes it possible to do it in order + - load all mappings at once, then serialize them in one method call + + +## Start using Bors for PR rollup | moony +[Discord message](https://discord.com/channels/310555209753690112/900426319433728030/934889142431653888) +[GitHub link](https://github.com/bors-ng/bors-ng) +Helps avoid this: +![](https://cdn.discordapp.com/attachments/900426319433728030/934889141789921401/unknown.png) +- Usage: you write bors r+ +- Gives more overhead to merging PRs +- We can use it when we are merging a lot of PRs at once, not for every PR +- [Bors can't squash merge](https://github.com/bors-ng/bors-ng/issues/1217) +- **No Bors**, try to find another alternative +- **We should not publish releases to servers if CI fails** + + +## Implementing a load balancer | moony +[Discord message](https://discord.com/channels/310555209753690112/900426319433728030/934951024500826142) +- Opt-in vs opt-out + - If its automatic instead of a prompt sloth dies + - **Opt-in** +- Doing it with batches of players (so it doesn't balance 1 at a time) + - **Yes** + - Have a threshold of players that need to have clicked yes for the autobalance to actually happen. + - Check the other server's pop, if it's over an amount transfer anyway. + - Needs inter-server communication. +- What about ping? + - **Show the ping to the person**, maybe a ping comparison between the current server and the other one? +- Popup midround? + - **If we do it, don't do it for alive players, only ghosts** +- Endround popup? + - **Yes** +- Need to have it be per group of servers +- **Control players counts with player caps**, tell players they can move +- **Prompt on the server full deny screen to connect to another server, indicate this with the launcher** +- **Have a queue** that shows you can join to other servers +- Servers having different versions? Paul issue + - They will usually be the same version + delta updates + ratio + + +## Policy on pushing to master vs PRs | moony +- PRs are better for downstreams specially when conflicts arise. Working directly with PRs is easier (bots that mirror upstream PRs). + - What is easier? Who knows? Where's moony? +- **Simple bug fixes can be committed to master** +- PJB vs Paul 2 hour discussion on whether to PR or not + + +## Put changes we are committed to in the roadmap | metalgearsloth +[Discord message](https://discord.com/channels/310555209753690112/900426319433728030/935176505993089085) +- For example the melee refactor + + +## Early Access Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-01-22-meetup) + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops + - the nuke is done, nuke ops isn't yet + - does not work outside dynamic + - lings? + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) +- Radiation refactor + - Singularity rebalance +- body system but again +- body system (get smug to code it) + - Species + - we need to do non human body parts +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - :death: +- oldchat + ui refactor +- explosion refactor | electrosr +- combat refactor +- pulling refactor +- role bans | ShadowCommander +- admin notes | drsmugleaf +- Admin traitor/role menu + - Assign people roles +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) +- change pvs to p/invoke zstd + +Bugs: (when are we moving these to GitHub) +- turn this section into crashes / critical bugs later +- automatically log exceptions shown on grafana +- being able to see inside containers + - Need to change PVS to not send all container contents + - Isn't this a separate issue anyway + - Seems like PVS queue bugs? + - Imagine if players could give steps to replicate, insanium +- hud disappearing + - cant reproduce yet, status icons keep disappearing + - might be food or thrist related + - Gets fixed when status gets and update (Like buckling or unbuckling) +- Singularity pops in. Needs a PVS override. +- when the station moves or rotates (rotation is reliable) everyone is unbuckled diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-03-05.md b/src/en/maintainer-meetings/maintainer-meeting-2022-03-05.md new file mode 100644 index 000000000..a41dd63fe --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-03-05.md @@ -0,0 +1,108 @@ +# Maintainer Meeting (5 March 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 5 March 2022 16:00 UTC + +**Attendees:** +Paul +PJB +ShadowCommander +ElectroSr +moony +Silver + +## should we stop storing entity uids inside entity systems to denote entities to update in favor of special components for this? | Vera +for example: basically instead of this field on a system +```csharp +HashSet ActiveWelders +``` +You'd just assign the `ActiveWelderComponent` and use an EntityQuery +- ye this is probably a good idea, but we'd have to take effort to make it efficiently. +- make binary components efficient + +## Deprecate EntitySystem.Get | Vera +it's a shitty static method that does an IoCManager resolve and its misused everywhere +- sgtm + +## benchmark metrics | paul +already decided on, just announcing: action piping data into db, grafana reading db +- YES +- gh actions will produce inconsistent results +- where to run benchmarks + +## docfx | paul +bugging pj or vera to set it up +- silver will do it + +## Soundsystem API revamp | Mirror +the current api leads to easy errors which cause sounds to be played globally, not uid-specific +example: https://github.com/space-wizards/space-station-14/pull/6982/files +- remove overloads + +## Rename Server Role Ban to Role Ban | ShadowCommander +sgtm + +## Early Access Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-01-22-meetup) + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops + - the nuke is done, nuke ops isn't yet + - does not work outside dynamic + - lings? + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) +- Radiation refactor + - Singularity rebalance +- body system but again +- body system (get smug to code it) + - Species + - we need to do non human body parts +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - :death: +- oldchat + ui refactor +- explosion refactor | electrosr +- combat refactor +- ghostrole bans +- pulling refactor +- admin notes | drsmugleaf +- Admin traitor/role menu + - Assign people roles +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) +- change pvs to p/invoke zstd +- Prototype composition | Paul +- Map poll at round end +- Round Statistics + - Log votes, which maps are played the most… + +Crashes / Critical bugs: (when are we moving these to GitHub) +- grid disappears on reconnect + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-03-19.md b/src/en/maintainer-meetings/maintainer-meeting-2022-03-19.md new file mode 100644 index 000000000..14eebab54 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-03-19.md @@ -0,0 +1,201 @@ +# Maintainer Meeting (19 March 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 19 March 2022 16:00 UTC + +**Attendees:** +DrSmugleaf +ShadowCommander +ElectroJR +Remie +Moony +Silver +Mirrorcult + +## Weekly bug-sheriff to triage issues that come up | Paul +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/952880631514288148) +- Maybe also include triaging PRs that should/could be included in the progress report + - **Use labels for project reports, is 3 too many?** + - 3 is good, use Major for things that should be added + - Minor for things that may be added/fine to miss +- We can shuffle maintainers around to this role depending on availability + - Have a bot or something that displays how many issues are untagged? + - **Whoever volunteers** + + +## Fixing/refactoring test pooling | DrSmugleaf +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/954006741568344084) +- Restarting the round is not a foolproof solution to reset the instance. +- Integration test client reconnection is faulty which is why pooling never applied for client instances. +- **We need functioning full state serialization, then reset the state.** + + +## How does one move the YAML Linter to engine | DrSmugleaf +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/954006885802049586) +- How do we have content have a way to specify IOC services to use if the YAML Linter is in the engine. + - **Nobody knows** +- Currently all the YAML Linter project does is start up two integration instances and call a prototype manager method. + - **Nobody knows an alternative** + - **PLS HELP PJB** + + +## Where to draw the line on references to non-SS13 media | PJB +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/953952903964549130) + +Examples of references to discuss: +* https://github.com/space-wizards/space-station-14/pull/6037/files many AI names from small names barely anybody knows to SHODAN to Siri. + * I fucking added X.A.N.A. to the AI name list on /vg/ you can damn well bet your ass I'm gonna try to keep it there + * Who added XANA I must know who here stans Code Lyoko + * HERE WE ARE, GOING FAR, TO SAVE ALL THAT WE LOVE +* Kamina glasses & other Gurren Lagann items + * Keep +* Hatsune Miku clothes + * Keep it's CC +* Alien franchise (aliens duh but also Ripley mechs?) + * No (we have replacements thank god) + * RIP smug +* Duck game items on /vg/ + * VG items are direct asset rips, fuck that +* Portal gun on /vg/ (Terraria has one too!) + * It's pixel should be fine. Valve allows a lot of usage from what I know. +* Red telephone + - **This is fine until valve releases their Red Phone AU** + - Yes this is fine + +(Writing out thoroughly since I won't be here) + +Some thoughts: +* Something like Siri or Windows might be ick since those are actively advertised trademarks and stuff. Something like SHODAN isn't as big of a deal? + * **Agree** +* A simple name drop like SHODAN isn't as big of a deal as complete content-take like Aliens. + * **Agree** +* Taking assets is never OK, obviously. + * **Agree** +* Miku clothes are fine only because they allow nonprofit use, prob wouldn't be otherwise? + * **Agree** + +**Case-by-case, check what each owning company has policy-wise** + +* **If the demand is very strict it may want us to remove the content from git hsitory, needing a rewrite, which is painful** + + +## Renaming/editing/hiding old rsi-editor | mirrorcult +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/950509187073470509) +- People are still trying to use it over RSIEdit +- Already archived +- **We are waiting on GitHub to detach the fork** +- **Edit the rsi-editor Readme to lead to RSIEdit** + +RSIEdit +- It doesn't show up on the organization's project list because it's a fork + - Ticket to detach it already open with GitHub Support + + +## Commission lobby art | mirrorcult +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/952756729295274034) +- We have lobby BG support now +- PJB's take: BG should take full screen at ~16:9 aspect ratio. Part will be covered up by lobby UI on the right frequently; art commissioned can put less important stuff there to avoid wasting effort. + - Please no inset image like SS13 lobby. The lobby goes on top of the art. +- **Find an artist, get the price, use Patreon money.** + - Artist for some of the stuff is aspev, steam art is waster of orange. +- **Try to add support for viewing a map through a viewport in the background.** +- **Make a transparent overlay to give to the artists to know what aspect ratio they have to work with** + - **Overcompensate for a long server name** + + +## What extra servers do we want | mirrorcult +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/953039871587520512) +- We have EU West 1, EU West 2, US West and Oceania at the moment +- We can host more instances on our current hardware +- **Poll for MRP** + - Discord poll, but we should implement game polls too +- **US East pls** +- Kill EU West 1 make 2 new 1 + - add US East + + +## Early Access Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-01-22-meetup) + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops + - the nuke is done, but it doesnt explode + - large kaboom required + - does not work outside dynamic + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** +- Radiation refactor +- body system but again +- body system (get smug to code it) + - Species + - we need to do non human body parts + - needed to reenable lizard +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr + - we did it +- explosion refactor | ElectroJR + - under review +- combat rework + - hard to hit someone + - wide attacks might be broken + - prediction issue +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- pulling refactor | Sloth +- admin notes | DrSmugleaf +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) +- change pvs to p/invoke zstd + - compression too slow + - we're using (Q's) C# library for zstd +- Prototype composition | Paul +- Server polls + - Map poll at round end +- Round Statistics + - Log votes, which maps are played the most… +- suit storage + +Crashes / Critical bugs: (when are we moving these to GitHub) +- Round restart fails sometimes (may be a physics issue) + => till next time + + +## PJB isn't here so there's no Tetris after-meeting party diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-04-02.md b/src/en/maintainer-meetings/maintainer-meeting-2022-04-02.md new file mode 100644 index 000000000..adc079f25 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-04-02.md @@ -0,0 +1,206 @@ +# Maintainer Meeting (02 April 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 02 April 2022 18:00 UTC + +**Attendees:** +Smug +Silver +Shadow +Paul +moony +Jezithyr +ElectroSR +PJB +metalgearsloth + +## Not pushing to master to make it easier for downstreams | moony +- Using PRs it's easier for downstreams to selectively pick what they want from upstream. +- This would mean making master (and stable if it happens) a protected branch so people can't push to it. +- [Gitflow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) +- We already don't push features to master +- Should we push hotfixes/submodule updates to master? + - We can commit hotfixes to master + - I'm still PRing them + - Push submodule updates directly if we can fix bots +- Current bots don't handle direct commits well, someone needs to fix/create a new bot that does + + +## Getting a CDN and setting up region serving | Silver +- Our resident Argentinian has been getting slow downloads. + - complaints from argentinian resident are through the roof +- silver spinning up free aws instances with s3 and cloudfront with na, sa and eu, maybe au + - we barely push 100gigs a month + - we can use the free plan + - if not, its not very expensive +- apparently we cant use S3, builds arent cached (nono) + + +## Migrating to a point-release model | moony +- To help avoid disrupting our active playerbase and help mitigate download times. + - Delta downloads when. + - Reconnecting automatically without going back to the launcher when. + - background download + - point release +- One update per day? +- Point release is the easiest to do fast + - **Do it** + - 10 am every day +- Delta downloads when PJB codes it + + +## Document and improve content/engine publish workflows and the watchdog | moony +- Open-source content and engine publish workflows. +- Server hosting is painful at the moment, has undocumented error messages. +- The system to publish builds like the main servers isn't public, you need to ask for the powershell scripts. +- **Improve the docs** and the tools god damn + - Specially the watchdog (proper error output) + + +## Engine changelog | ike709 +- Document engine changes so breaking changes are not a surprise. +- This has already been a problem multiple times for Opendream. +- also proper major/minor versions x.y -> major -> .z minor + - X Major Y Minor? +- **GitHub action for changelog**, similar to how content does it +- Show the changelog somewhere + + +## Removing drag and drop interactions | moony +- Uncommon interaction and unintuitive for new players. + - We can assign a keybind instead, like alt+click currently +- How do we do it for dragging others into disposals for example +- **We should write a design doc and decide how interactions work in general** + + +## Multi-Z | Vera +- How does one (sanely) do it +- what needs it + - movement + - atmos + - explosions + - rendering +- Special case maps +- needs more discussion. + + +## Improving dev UX for mappers, maintaining maps | moony +- We need to maintain our soon to be 7 playable maps and other salvage maps. +- Onboarding new mappers to help maintain them +- Automated map maintenance? + - Migrations + - Renaming, replacing and removing + - With YAML +- Seeing pipes through walls / Being able to hide walls + - filter/toggle by walls/floors/doors/windows/wire/pipe/tubes etc. +- Being able to see the color of floors +- Area copy and paste with preview +- Picker copy and paste (middle click to copy what's under your mouse) +- Improving mapping UI in general (spawn windows) +- Improving docking when mapping +- Teleporting to error messages +- Unreal engine retargets +- Placement ghost for salvage that shows where it will spawn, how big the maximum salvage size is + - To know if the salvage will spawn inside the map + + +## Splitting UI code from simulation code, UI hot reloading and framework | Jezithyr +- **Split UI code from simulation code** +- **Splitting into a separate assembly to be decided** +- Apply this to rendering and user input as well. +- This can be done at the engine level without breaking downstreams (Opendream) while we transition SS14. +- Removing UI dependencies from sim makes it possible to run the game without an UI. + - It also makes it possible to develop UI without getting cancer. +- Hot reloading UI + - **Yes when you code it** + - Visual editor? + - **No, visual preview yes** +- Using a established UI framework? + - [Avalonia](https://avaloniaui.net/) + - [qmlnet](https://github.com/qmlnet/qmlnet) + - **Not at the moment** + + +## Early Access Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-01-22-meetup) + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops + - the nuke is done + - does not work outside dynamic + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** +- Radiation refactor +- body system but again +- body system (get smug to code it) +- Grid splitting + - finish when sloth comes out as a furry +- Grid merging +- Diagonal tiles + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr + - we did it +- combat rework + - hard to hit someone + - wide attacks might be broken + - prediction issue +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- pulling refactor +- admin notes | DrSmugleaf +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr +- any% maintainer | Jezithyr +- change pvs to p/invoke zstd + - compression too slow + - we're using (Q's) C# library for zstd +- Prototype composition | Paul +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- suit storage + +Crashes / Critical bugs: (when are we moving these to GitHub) +- Round restart fails sometimes (may be a physics issue) + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-04-16.md b/src/en/maintainer-meetings/maintainer-meeting-2022-04-16.md new file mode 100644 index 000000000..abaac3485 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-04-16.md @@ -0,0 +1,122 @@ +# Maintainer Meeting (16 April 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 16 April 2022 18:00 UTC + +**Attendees:** +Acruid +metalgearsloth +DrSmugleaf +moony +Vera +ShadowCommander +Visne +Paul +ElectroSR +PJB + +## We hit 250 players in one server. What's next? | moony +- What is our goal for optimizations + - What can we do better + - What should we do now that the game is very performant +- Is this when we finally code content +- We need to fix stuttering, pvs pop-in, rubberband issues and make network smoothing default to 2 | mirrorcult +- **Server side performance is fine, need to fix client side performance and bugs** + + +## Diagonal tiles | metalgearsloth +- The engine technology is there +- What do about anchoring and stuff on content +- Atmos will just treat them as space, still have diagonal walls be airtight +- **Needs to be fleshed out more** + + +## Make VV read/write by default | mirrorcult +- Everyone forgets to make properties read/write +- We still have to refactor VV for ECS +- **Make all VV properties writable if you have +HOST** +- **The default should be read** +- **Attribute to make all properties on a class VV** + + +## Review and PR guidelines | mirrorcult +- https://docs.spacestation14.io/en/maintainer-info/review-guidelines +- https://docs.spacestation14.io/en/getting-started/pr-guideline +- **We are missing file name conventions on the conventions page** +- **We need better automated tooling** + + +## Early Access Roadmap +[Previous Roadmap](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-01-22-meetup) + +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops + - the nuke is done + - does not work outside dynamic + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** +- Radiation refactor +- body system but again +- body system +- Grid splitting + - finish when sloth comes out as a furry +- Grid merging +- Diagonal tiles + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr + - we did it +- combat rework +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- pulling refactor | bobda +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr +- any% maintainer | Jezithyr +- Prototype composition | Paul +- Server polls +- Round Statistics + - Log votes, which maps are played the most… + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-04-30.md b/src/en/maintainer-meetings/maintainer-meeting-2022-04-30.md new file mode 100644 index 000000000..dd844b04c --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-04-30.md @@ -0,0 +1,384 @@ +# Maintainer Meeting (30 April 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 30 April 2022 18:00 UTC + +**Attendees:** +Vera +Silver +ShadowCommander +PJB +Sloth +moony +mirrorcult +Acruid +DrSmugleaf + +## Removing RobustUnitTest or RobustServerSim | metalgearsloth +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/966291335785095239) +- Actual unit tests shouldn't be inheriting, everything else should be an integration test +- If prototype loading was faster we could remove both +- Is Acruid in the meeting + +Answer: +- We have like four ways to start engine and run tests. +- We have NO CLUE what each of these do, we should probably gather some info and list it out so we can make a more informed decision? +- Come back to this after we actually know what each does +- Acruid came: + - Server simulation can spawn entities + - It's the bare minimum required for that, any extras such as prototypes, components and systems need to be added automatically. + + +## Long term map maintenance tools | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/966528422933323866) +- Fixing the mapping merge driver + - Rewrite it atop the testing framework? +- Automated YAML and entity migrations + +Answer: +- when someone codes it +- BYOND is better than us + - BYOND's map editor asks you for new paths (like entity prototype IDs) for missing things + - tbh this goes for a lot of things about mapping rn +- Entity UID consistency system on map is broken right now, needs fixing + - 1 entity getting changed -> ![](https://i.imgur.com/7htfQil.png) ungabunga change go brr SO TRUE BESTEI +- Migrations are like scripts more than like prototypes. Does it make sense to keep them in the prototypes folder? + - For complex C# based ones it'd be necessary for them to remain compiled in? + +## Write down the main purpose of each interaction hotkey | ShadowCommander +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/966591327494086706) +- For contributors to decide on which hotkey to use when implementing a feature. +- Remove overlap between left click/E | PJB + + +Answer: +- Tooltip show alt uses + - Somewhat unusual for 2D games? + - Starbound apparently has it though + - Show icons and +- Remove overlap between left click/E. Force people to learn E + - Give indication that you can use E to click on the thing. Otherwise people will not realize it exists. + - Candidate: https://youtu.be/d6GtGbI-now keyboard spritesheet + - Has no Cyrillic support + - Can add ourselves + - Other links: + - https://thoseawesomeguys.com/prompts/ + - https://www.gameuidatabase.com/index.php?&scrn=907 + - https://kenney.nl/assets/input-prompts-pixel-16 +- Forced Tutorial™ to teach interactions +- Show the thing you're looking at too, optionally. + +### Hotkeys: +- Use(Left click) + - Interaction involving hands +- ActivateItemInWorld(E) + - Open UI + - If there's a secondary activate, then put that in the UI +- AltActivateItemInWorld(Alt) + - Specify which interaction it should run instead of automatically picking the first verb +- ActivateItemInHand(Z) + + +## Guidelines for balance discussions and code of conduct | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/966843069515329586) +- Emag nerf (18291 comments) +- ![](https://i.imgur.com/Vv4d6Ht.gif) + +Results +- GitHub discussions usually get bad. +- They spam the #github channel reee. +- Should we move those discussions to somewhere else? + - The official forums aren't great for that. + - Discord threads are an option, but they're not great for week-long discussions. + - discord community server forums someday + - Some people don't want to join the Discord for these discussions, they might be put off by that. + - Moderate GitHub better? + - Use GitHub discussions? (Although they suck) + + +## Planet maps, should maps be able to be grids | Vera +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/966984856863113217) +- It would allow for tiles to be placed anywhere (needs refactors) +- This would be sane opt-in default grids +- Allows for planet maps if changes are made to: + - Parallax + - Default atmos empty tile behavior (being worked on) + - Adding a component for a map to handle gravity. +- Probably useful for other games, including OpenDream. + +Results +- When sloth codes it +- We are supposed to be able to have maps as grids already but it's broken +- Allows for global grids from Byond +- Causes some crashes if you mix map and grid component + + +## Deprecate GridId and MapId in favor of EntityUid | Vera +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/966986023689129994) + +Results: +- YES +- Ask Acruid, he has *a plan* :focus: + + +## Maps submodule | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/967544877506236437) +- Keep only 4-5 core maps in the main repo +- Lets us introduce new maps without assuming that they will be in forever +- We can give mappers like Emisse write access to the repo +- Allows easier rotation of maps and possibly encouraging people to try out bolder things with map design + +Results: +- Every submodule makes it harder for new people +- Requires keeping the main/map repo in sync with changes + - If an item is changed then the maps need to be changed +- If someone needs map write access give them write access to content +- **No submodule for maps** + + +## Icon for the launcher | mirrorcult +- [Discord message and thread](https://discord.com/channels/310555209753690112/900426319433728030/967667307142860800) +- Probably needs to be different than the SS14 one +- PJB had a think in the thread above + +Results: +- Maybe do it similar to the auth website + https://central.spacestation14.io/web/ + - How does this fit into the icon in the task bar + - Who knows +- When someone inkscapes it +- When one of us uses the Patreon money for it? +- Can be a modified SS14 logo +- YES BUT WE DO NOT KNOW THE DESIGN + + +## Making fake lag the default in local development | metalgearsloth +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/967779103023460352) +- Helps spot prediction issues +- Makes people other than just senior contributors consider it +- Prevents the game feeling like shit to play with high ping +- We can LARP as Australians or Argentinians during local development + +Results: +- Yes +- Make it 150ms + - With 20ms randomness, but the client might not handle it well yet + - 0.01% packet loss +- We need to be able to diff component states + + +## Quickstart script for repo setup | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/967988264818577488) +- Also attempts to open the repo in your IDE of choice +- Probably a Python script targeting only Windows users to allow people that have no interest in fully developing the game (mappers and spriters) to get the game up and running. + +Results: +- Make a script to build without Visual Studio (Saves a few GB of disk space and RAM for mappers) + - Script needs .NET 6 + - msbuild +- We need a tutorial on how to clone and build the project from command line for mappers + - We can provide a script for this, to have an up-to-date build to map with + + +## Species/roles whitelist | metalgearsloth +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/968123789768552468) +- Would we ever actually have it on an official server + - (no) | moony +- Generalize whitelists so it's easy to add new ones | moony + - Specify in YAML which whitelist to use + +Results: +- Implement it +- Generalize whitelists +- We won't have it on an official LRP server + + +## Issue templates and enforcing good issue writing | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/968126891926122547) + +Results: +- We need an issue template on engine +- Improve the content issue template +- Figure out a better template + - Description: + - Reproduction: + - Screenshots: + + +## The identity / entity LOC problem | mirrorcult +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/968642553228460052) +- What did mirror mean by this +- Need to separate metadata name and display name + +Results: +- Don't have it in engine, add a layer in content that gets used +- We can have an analyzer for people to not use EntitySystem.Name(EntityUid) where necessary + + +## What's necessary for MRP | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/968872376370622495) +- [GitHub issue](https://github.com/space-wizards/space-station-14/issues/7809) + +Results: +- BE ABLE TO CHANGE THE RULES + + +## What do we want out of in-game species | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/969305610657087499) +- SS14 has made it a lot easier to add and maintain new playable species + - The biggest hurdle is sprites, but humanoid ones are fine +- What should we do when for example someone wants to add a sentient cloud of bees: + - What's acceptable for a round-start species? + - What's acceptable for a mid-round species? (Events, something you can turn yourself into with enough work) + - Situational/event species (skeletons on roundstart on Halloween) + +Results: +- **Round start:** have them be sufficiently different that you play different than a human + - The goal is to make it different enough that LRP players play them differently. + - Slimes should be made more interesting + - Lizards aren't there + - Make them cold-blooded + - More carnivorous + - Dwarves are a debug species, can be removed + - Vox are good but effort + - ok tbh vox would probably still need a bit more mechanically to set them apart imo + - Can it be too different? (Plasmemes) + - Pain in the ass + - If the rest of the game needs to be designed around it (the map has to change) it is too different +- **Mid-round:** SKELETONS, needs to be unique, well-designed, the bar is lower than for round-start +- **Situational/event species:** Lower bar than mid-round, needs to be funny + - Needs a way to prevent round start species after event + + +- Literally this entire answer has been "it has to be interesting" smh. + +## Should we implement map standard tests | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/969630546550489119) +- Examples: +- Enforcing a maximum light budget within an area. +- Making sure each job in the job list has a spawnpoint. +- Forbidding certain objects from being placed in a map (i.e. finally making sure nobody maps the cursed locker for a laugh) +- Ensuring that no spawnpoints will instantly kill you. +- Potentially abusing the pathfinder a bit to check that it's possible for each job to make it to their spawnpoint from arrivals? This might help avert "whoops you can't exit arrivals/your office" bugs. But I think the pathfinder's ability to understand access isn't functional atm. +- Duplicate structures (pipes, wires, and full-tile structures having more than one of themself on the same tile) +- Power continuity tests (mapper places test points and can either check in-game or have a test yell if there's a break) + +Results: +- We need a better way to review maps. + - Overlay to see wires and what's powered at round-start. + - Access overlay for doors, green for accessible red for not, able to be used as a ghost to audit access + - Or list access levels above doors + - Easy way to change access level for this so you don't need to go back to the lobby +- Yes: + - Enforcing a maximum light budget within an area. + - Making sure each job in the job list has a spawnpoint. + - Forbidding certain objects from being placed in a map (i.e. finally making sure nobody maps the cursed locker for a laugh) + - Don't error, warning for relevant things + - Duplicate structures (pipes, wires, and full-tile structures having more than one of themself on the same tile) + - Seeing how fast power runs out on a map + - Power continuity tests (mapper places test points and can either check in-game or have a test yell if there's a break) + - Makes sure there are no breaks in power lines +- No: + - Ensuring that no spawnpoints will instantly kill you. + - Not automatic, we need to go through spawn points for quality control anyway + - The arrivals shuttle fixes this. + - Draw spawn points over everything + - Potentially abusing the pathfinder a bit to check that it's possible for each job to make it to their spawnpoint from arrivals? This might help avert "whoops you can't exit arrivals/your office" bugs. But I think the pathfinder's ability to understand access isn't functional atm. + - For access + - Do it in manual review instead + +- When you code + +## Map quality control | PJB +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/969677010668507176) +- PJB says a bunch are bad + - tremble + - PJB ASMR (patreon exclusive) + +Results: +- Don't rely on there not being player collisions when mapping +- Porting 1:1 is fine on some maps (Delta) not on others (Atlas) +- Common problems: + - All staff halls were a mess, didn't have visibility into the department or no desks, almost all the offices had a bedroom crammed into the office (waste of space, we don't have enough for that on most maps). + - Medbay lobby (except Pillar, where it was fine) + - Too many lights (Pillar and Bagel specially) +- Make sure there are enough disposal chutes + + +## Do we keep asking question on maintainer meeting that end in "WYCI" | PJB +Results: +- Yes, when there's valuable input to be had, even if the result is WYCI we need to figure out if everyone wants it or if there are any downsides + + +## Early Access Roadmap +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops + - the nuke is done + - does not work outside dynamic + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** +- body system but again +- body system +- Grid merging +- Diagonal tiles | sloth + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr + - we did it +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr +- any% maintainer | Jezithyr +- Prototype composition | Paul + - https://github.com/space-wizards/space-station-14/pull/7403 +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- State mandated Xonotic matches + - Please I have severe withdrawal symptoms + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-05-14.md b/src/en/maintainer-meetings/maintainer-meeting-2022-05-14.md new file mode 100644 index 000000000..20c2ce583 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-05-14.md @@ -0,0 +1,176 @@ +# Maintainer Meeting (14 May 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 14 May 2022 18:00 UTC + +**Attendees:** +DrSmugleaf +Remie +Visne +moony +ShadowCommander +PJB +ElectroSR +mirrorcult + +## Launcher server announcements | moony +- The launcher listens to an RSS feed if you opt-in **per server (or server group)**. + - Works for any server that has such a feed setup. + - **It can be transient (truncated)** +- For both automated and manual announcements. + - **Can be categorized.** +- Can announce a new round starting, or mandatory server restarts. +- Separate restart notifications from other notifications? + - **Needs high poll rate** + - **Don't have a websocket per server** + - **Run a news aggregator as part of the hub?** + - What happens to servers off the hub? + - Just keep it simple no websocket stuff for now just RSS all the way baby. + - **Push notifications for restarts** +- **Hook up changelog to RSS updates** + + +## Automerging PRs when approved and CI passes | metalgearsloth +- Refined GitHub supports this but it doesn't work properly. +- Allegedly exists in GitHub by default but the button doesn't exist. + - You can only enable it if you enable only being able to merge PRs when CI passes + - Simply disable push to master --moony +- What if the servers DIDN'T autoupdate to broken builds?? + - check em before we wreck em +- **Use a bot (when you code it)** + - **We can use the `workflow_run` workflow event to do this.** + + +## getFlatIcon() AKA handling capture of appearance data (photography, scoreboard, Remie bait) | PJB +- No BYOND-like server CPU rendering +- Send the visual information to the client (appearance components) + - Move complex stuff like item rendering on mobs to be 100% visualizer data +- Just take a screenshot on the client? (photography) (Remie vindicated) + - Easy to do +- How do we render multi-entity entities? + - e.g. eris walls + - **follow child entities and collect em all?** +- **Replace appearance visualizers with entity systems** + - Already agreed on this in another meeting + - Use component states to send the data? + + +## ABI vs API backwards compatibility on engine | PJB +- ABI: code keeps working dynamic linking against newer versions of the engine +- API: code keeps working if you recompile against newer versions of the engine +- **ABI stability** +- There might be GitHub analyzers to check this + - May or may not be worth setting up +- **Aim for ABI, when you have to break it, increase major version** +```cs +// What you have: +void Foo(int x) => ... + +// What you want: +void Foo(int x, int y = 0) => ... + +// What you need to do to preserve ABI compat: +void Foo(int x) => Foo(x, 0); //method NOT removed +void Foo(int x, int y) => ... +``` + + +## Private playtest/actual QA sessions | mirrorcult +- Making the maintainers, senior contributors and game admins play their game +- (Suspicion on Space Station) +- Whitelisted server on EUW2 or USW? + - Maybe USW for the Australians. + - **Put another server instance on USW ez clap** +- Schedule + - **After the maintainer meeting (afterparty)** +- **The whitelist needs to be per server** + + +## Auto-ignore unknown components on the client and remove client IgnoredComponents | mirrorcult +Cases: +- server side component spelled correctly--ignored by client, no error on server +- server side component spelled incorrectly--ignored by client, server errors +- client side component spelled correctly--no error on client, server needs it in the ignore list +- client side component spelled incorrectly--ignored by client, server errors since it's no longer in the ignore list +- shared component spelled correctly--no error on client, no error on server +- shared component spelled incorrectly--ignored by client, server errors +- **Fund it** + + +## Early Access Roadmap +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - nuke ops | Paul + - the nuke is done + - does not work outside dynamic + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** + - moony's entirely rewriting it anyways so don't do that +- body system but again +- body system +- Grid merging +- Diagonal tiles | sloth + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr, DrSmugleaf + - we did it +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr +- any% maintainer | Jezithyr +- Prototype composition | Paul + - https://github.com/space-wizards/RobustToolbox/pull/2678 + - https://github.com/space-wizards/space-station-14/pull/7403 +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- State mandated Xonotic matches + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Man down +- The game runs like shit how do people play this + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-05-28.md b/src/en/maintainer-meetings/maintainer-meeting-2022-05-28.md new file mode 100644 index 000000000..b709b3bcf --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-05-28.md @@ -0,0 +1,274 @@ +# Maintainer Meeting (28 May 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 28 May 2022 18:00 UTC + +**Attendees:** +- Visne +- Remie +- Wrexbe +- Electro +- ShadowCommander +- PJB +- Sloth +- Vera +- Moony +- Silver +- DrSmugleaf, in spirit, briefly + +## Smug left the meeting for Canada | DrSmugleaf +- a mimir + - Jezlag is no joke +- Jez sends her regards +- :pray: + +## Rethink flat folder structure | Sloth +- a: + 1. Engine still doesn't match + 2. There's no nice place to put sundry components + 3. I have to scroll for like 5 seconds to go from client to shared if I don't know the right term to ctrl-F +- Fuck the netherlands we're moving to belgium + +Result: Jeopardy Music +- **Previous system didn't work** +- **just... nest things more? Put all the engines together** + - Potential ones brought up: + - By department (Science, Engineering, etc.) + - Doesn't seem to work that well. + - By game mechanic (Power, Physics, etc.) + +## Remove maintainer ping | Sloth +- Discord permissions moment +- Do we even need to put this in here + +Results: +- **yes** +- Removed mention from maintainer, +- Gave maintainer @ everyone so they can keep pinging eachother + +## making events directed by default instead of broadcast | Sloth +- For `RaiseLocalEvent` +- (essentially, making broadcast default to false on directed `RaiseLocalEvent`) + +Results: +- **a lot of things would break** +- **Make everything explicitly true at call sites** +- **Make it default to false** + +## remove component reference | PJB +- How do we make it happen +- What about Shared components inherited by client/server ones? + +Result: +- We need to get rid of component inheritance/interfaces anyways. +- Only remaining use left is shared components +- Figure out an alternative for shared components: + - *Maybe* (not decided yet) make them more specific so they can be optimized better. + - Some problems: + - Shared component presence 1:1 tied to client/server component + - EnsureComponent spaghet + +## `EntityUid?` vs `EntityUid.Invalid` | Vera + +- Nullable EntityUid has convenient compile-time checks, and forces you to handle null cases. +- There's a clear distinction between EntityUid? and EntityUid, you can expect the latter to be valid in most cases. +- Nullable EntityUid, however, forces you to write a lot more boilerplate. +- Using EntityUid.Invalid is more convenient and allows you to write less boilerplate in most cases, but you lose compile-time checks and an explicit way to mark something as "possibly being invalid/not having a value". +- We need to decide this ASAP and stick with one. + +Results: + +- Problem with nullables: memory overhead (2x mem usage due to alignment) +- One option: `Option` + - Only difference is no orange squiggle when doing `.Value` instead of `!.Value`. + - No pattern matching: `if (foo is { } ent)` + - goodtbh + - Agreed +- **Use EntityUid? whereever possible. If memory usage is a concern, store as `EntityUid.Invalid` and convert on usage but try to avoid using it.** +- Content-facing APIs should use `EntityUid?`, convert if needed. +- Need to convert existing usages + +## Change XAML file naming scheme | PJB +- `Foo.xaml`/`Foo.xaml.cs` -> `Foo.cs.xaml`/`Foo.cs` +- ![](https://i.imgur.com/iCqMUdA.png) + +Results: +- it's fine as is, the UI aspect is "made more important" by this + +## Rename maintainer meetings to Round Table Meetings | PJB +- El Psy Kongroo +- Rename to Round Buckle Table Meetings + - High Round Buckle Table Meeting + +- smugleaf jumpscare + - holyshit smug is typing from air plane + - spanish airplanes have wifi confirmed + - better wifi than Spain + - how long before you land? + - the trick is i havent even left yet + - amongus or silver moment + - yoooo smug bsaed based based + - !!! + +- Rename maintainers to Labo Members + - tuturu~ +- rename maintainers to mini wizards + +Results: +- uhhhhh all shitposting aside +- alles gekheid op een stokje... +- **Nonissue, can be named whatever** + +## Simplify ResourcePath | PJB +- what do we remove from it + - paths :clown_face: +- PJB was an idiot at the time + - she apologises + - not good enough, a blood sacrifice must be made +- Current status: + - Bunch of filesystem semantics like `/` (rooted path), `.` (current dir), `..` (go up a dir) + - Customizable separators (WHO NEEDS THIS) + - Path stored as segmented array of strings +- It's a class because fuck me + - :face_with_one_eyebrow_raised: + +Results: +- PJB has started this already +- Wrapper struct around string + - Keep division operator combining paths P / P +- Remove `..` support +- Remove `.` support +- `null` path is same as `""` + +## Components: Properties or Fields | Wrexbe +- [Message link since we decided to bikeshed this 3 hours before the meeting](https://discord.com/channels/310555209753690112/900426319433728030/980127305894600704) + +Results: +- We settled this pre-meeting (see message link above) +- Use fields unless you need to debug it, but then turn it back into a field after + +## Require public functions/fields be documented | Moony +- Silver votes that this should be enforced now that we have docfx for content/engine. + +Results: +- **Write a convention page about writing good docs. Link it at people.** +- **Try to care more** +- **Maintainers can block PRs in review if deem more docs needed in med/big systems** +- Don't put an analyzer that enforces it too much (i.e. having to repeat yourself just to satisfy the analyzer) +- Don't assume the reader knows game mechanics/has ever played SS13 + +## Robust IDE Extension | Moony +- ![](https://i.imgur.com/fF3vlMQ.png) +- Examples: + - More complex templates for client/server component boilerplates + - YAML language server + - ez pz + - analyzer for sandbox violations + +Results: +- WYCI + +## The Renderer Sucks | Moony +- How do we make it not +- Specifically: byond beats us in some of the things it can do +- Revive RobustEngine + +Results: +- Make wishlist +- Let PJB do it +- Court mandated graphics programming lessons for all maintainers yes yes + +## ~~what should be done about BaseWindow? | Flipp~~ +~~- it seems to be that things that use BaseWindow in SS14 construct the layout in C# rather than XAML~~ +- Mistakes were made + +## what do about fwiend :relieved: PR funny enum | Vera +- where do I put the enum both the analyzer and robust.shared/content need it AAAAAAAAAA +- (do I just make this a completely separate project and put it on nuget or something it'd be useful for other projects, dunno anyway just some bikeshedding) +- Give the enum its own file: + - Link it in both projects SIMPLE + +## Early Access Roadmap +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - ~~!!nuke ops | Paul~~ + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs | Vera + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - limb damage..... +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** + - moony's entirely rewriting it anyways so **don't do that** +- body system but again +- body system +- Grid merging +- Diagonal tiles | sloth + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr, DrSmugleaf + - we did it + - lost in the canadian wilds +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? + - "Science is still a piece of shit" - Vera 28/05/2022 +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr + - stuck in canada +- any% maintainer | Jezithyr + - Stuck in canada + - soon tm +- Prototype composition | Paul + - https://github.com/space-wizards/RobustToolbox/pull/2678 + - https://github.com/space-wizards/space-station-14/pull/7403 + - paul still not done with his thesis +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- State mandated Xonotic matches + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Man down +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-06-11.md b/src/en/maintainer-meetings/maintainer-meeting-2022-06-11.md new file mode 100644 index 000000000..d65bde562 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-06-11.md @@ -0,0 +1,249 @@ +# Maintainer Meeting (11 June 2022) +=== +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 11 June 2022 18:00 UTC + +**Attendees:** +- Electro +- Vera +- Remie +- Visne +- PJB +- Moony + +## I'm stuck in Quebec for 5 more hours | DrSmugleaf +- I'm about to baguettify +- The destination is even worse (Spain) +- Smug gets a Canadian gf character arc (multiple maintainer meetings long, episode 2: Attack of the Quebecoise) + - Jez isn't even awake to help me cope with the French please send help + +Agreement: +- Quebec bad +- "Discord leave lasting damage" - smugleaf + +## Click to wide attack was a mistake | Remie +- [link](https://discord.com/channels/310555209753690112/900426319433728030/980204271385604106) + +Agreement: +- Mirrorcult on break, move it to next meeting + + +## Lobby songs take up half the game download what the fuck | All of us, enranged +- seriously?? +- "enranged" means all of the maintainers are so distant from SS14 +- 16 lobby songs... 40mb total. The resources folder is 133mb total. +- This is probably fucking terrible for git clone, etc + +Agreement: +- Turn the PR icon red +- Should we do on-packaging compression? + - Probably yes but how + +## How do release packaging of assets | PJB monologues in the maintainer meeting +- Most engines work with raw high quality assets in repo, game finalized has compressed and lower qualtiy assets on publish. + - Probably a terrible fit for our development: Git + - Audio compression etc is gonna require dedicated heavy tools like ffmpeg and be slow + - Doing audio compression live means results potentially inconsistent across publishes = + - Too slow performance for ACZ, will require asset cache + - Goes against current engine model where resources have 0 importing/caching/etc... +- Still a good choice we should do this: + - Audio too large + - RSI packing + - more + +Conclusion: +- Generate a good idea +- Audio files too heavy, put sources in separate repo. Main repo contains pre-downsampled assets. +- RSI packing etc is a good idea and should be fine. + - Move packaging logic to C#, expose it to ACZ. + - FINALLY. Also please put it in engine thanks. +- Probably still gonna need an asset processing cache either way, :salute: + - SQLite it up + - Please refrain from fucking this up this could go really bad. + - No commitment only experiment for now + +## Asset Manifests | PJB monologues in the maintainer meeting +- Manifest files (not for delta updates) client can load to pre-load all lengths of audio files etc +- Potentially very useful and avoids expensive loading +- May not be necessary +- Annoying on development builds +- Ick for ACZ again, see above. +- Reasons like async loading probably not good enough? +- Vera just got me activated so sloth could show up, how nice of her. + +## Discord emote for all in-game plushies | Wrexbe +- uhhhh +- Only the good ones +- We already snivy what more do you need + - Slime plushie + - Slushie + - PJB throws BASED ACCUSSATIONS of me being a slime girl... lawsuit ensues + - SS14 in shambles + +## Optional tile movement in SS14 | Vera +- Make mob movement modular +- How much effort +- We have to sucker in SS13 codebases +- How to implement? + +Conclusion: +- Ship it, kind of half-ass it for SS14. +- Keep doing distance measurements for interactions, avoid + - Simpler physics for it? Only hard vs non-hard, no "proper" shapes. + - Have support for things such as windoors, etc. + - This logic is not trivial at all, will require in-depth understanding of how SS13 works. +- Forks can improve it further if they want. + - Perhaps upstream/merge good changes? + - as long as it doesn't diverge the code too much?? +- OpenDream needs more sophisticated implementation. + - Needs separate visual/simulation transform + - Wanted to pass this by sloth but rip + - I talked about this with Acruid once + - Gonna be kinks to work out + - Probably have shared transform system func that gets render position, returns sim pos during sim. +- Sorry, Sloth. (Listen I tried to delay this topic until you showed up ;_;) + +## No more new maps until better tools | Sloth +- [message there's a lot of details](https://discord.com/channels/310555209753690112/900426319433728030/980517246390644777) +- didn't we discuss this last meeting wtf +- drama + +Conclusion: +- Even if we had better tools, more maps isn't a good idea + - Still allow new maps but remove old ones. + - Don't increase the total map count +- Make maps unique + - Don't gimmick with a layout, gimmick with a story/theme + - Maps should have unique assets where possible (Sprites, Objects, Jobs) + - Yes this takes effort, git gud + - Who knew that making a good game requires effort +- Port the fucking map that's like 6 spaceships amalgamated together. + - I don't know what it's called (Ask in coderbus) + +## Update server every commit again | Mirror +- [message](https://discord.com/channels/310555209753690112/900426319433728030/982571963316863038) + - Damn 9 this tbh +- We have deltas + redial +- Moony mentioned still reduction in pop even through redial. + +Conclusion: +- PJB has anxiety, this will kill her +- Just don't shy away from manual publish when :eyes: +- Keep as is + +## can I get maintainer review of my design docs because you guys don't look at ideaguys | Mirror +- Well uhhhh + +Conclusion +- She is not here... +- Sorry mirror +- Easiest maintainer meeting topic of my life + +## RobustGenericAttribution Standard: yay or nay? | Vera +- https://github.com/space-wizards/RobustToolboxSpecifications/pull/3 +- don't bikeshed the name + - RobustGenericAttribution (Name Subject to chance) + - it's the choice of steins;gate + - based ref + +Conclusion +- Good idea + - Reviews left to be handled +- Not sure about the name! + - Hehehehehe + +## Matrix3 -> System.Numerics.Matrix3x2 | Electro +Conclusion: +- Probably wanna switch to System.Numerics in general + - Even if it's not great for hot loop SIMD, it's still a bit of savings. +- Differences in API needs to be evaluated, massive breaking change. + - Can we/should we use extension methods to help with this? + - Misses stuff like my tuple cast so sad + +## Early Access Roadmap +- emergency shuttle + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - ~~!!nuke ops | Paul~~ + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs | Vera + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** + - moony's entirely rewriting it anyways so **don't do that** +- body system but again +- body system +- Grid merging +- Diagonal tiles | sloth + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak + - TILE MOVEMENT +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr, DrSmugleaf + - we did it + - lost in the canadian wilds +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole bans | ShadowCommander + - unify ghost roles prototype +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements | Veritius + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? + - "Science is still a piece of shit" - Vera 28/05/2022 +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr + - stuck in canada +- any% maintainer | Jezithyr + - Stuck in canada + - soon tm +- Prototype composition | Paul + - https://github.com/space-wizards/RobustToolbox/pull/2678 + - https://github.com/space-wizards/space-station-14/pull/7403 + - paul still not done with his thesis +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- State mandated Xonotic matches + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Man down +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-06-25.md b/src/en/maintainer-meetings/maintainer-meeting-2022-06-25.md new file mode 100644 index 000000000..fe36078ea --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-06-25.md @@ -0,0 +1,189 @@ +# Maintainer Meeting (25 June 2022) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 25 June 2022 18:00 UTC + +**Attendees:** +- DrSmugleaf +- PJB +- Wrexbe +- ElectroSR +- Vera +- metalgearsloth (just got nitro) +- Shadowcommander (late) + +## Making wide attack click-based was a mistake | Remie +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/980204271385604106) +- Too much friendly fire with Kudzu + - **Kudzu needs to be fixed separately** +- Most weapons shouldn't have broad-angle wide attacks + - **Spears should have spear-like attacks** +- Make it toggleable to let the user decide? + - Need to pick a sane default + - **Experiment with making it a hold attack, when you release left-mouse button** + - Windup? + - **Experiment with it too** + + +## Disbanding scheduled playtests for now | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/986359940400680980) +- Letting in a select amount of users at a time +- High pop has design and game administration problems +- We set the cap to 65 recently (raised to 130 during playtests) +- Some SS13 servers have such high pop counts +- **We need high pop maps for this** +- **They are important to get players invested and check out new things** +- Turn them into proper feature tests? + - No because features will be broken and it will look bad +- **Decision: Change playtests to be at the same time as progress reports** + + +## Tile damage kinds | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/986384961718353951) +- RobustToolbox's tiles are too limited and don't have enough space +- Do we make a SS14-specific wrapper around tiles? +- Tile controllers? + - **A separate system from normal ECS is not convenient** +- Make them use normal components and ECS? + - **We need to make our ECS not shit and implement transformless entities** + + +## ECS refactor | Jezithyr +- Two-layer ECS, archetypical for perf and sparse for entity glut, similar to the concept of worlds in some ECS +- In archetypical ECS, the problem is that adding more components to an entity at runtime is slow + - **We do this sometimes** + - Iterating and filtering entities is very fast +- With worlds we can have replays with their own world and entities + - Multithreading +- C# binds for FLECS exist + - **Decision: Experiment with it** +- Rewrite our own ECS with the important parts in C# instead? + - NIH my beloved + - Less performance overhead with marshalling + - More work to maintain +- Do we need to cut down on remo +- Flecs fixed my marriage + - Me irl + - Good for containers with child entities +- Is this the next engine rewrite +- Back to Godot +- Try to not cause an API breakage +- A - Vera + + +## Right-click for both entity menu and verb menu on entities is unintuitive | mirrorcult +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/988966819018707004) +- It's unintuitive because you have to right click twice +- There's no indication it's possible to open the verb menu +- How do we solve this + - **Decision: Trigger on hover** + - Properly handle moving diagonally onto submenu (don't make the submenu close instantly on hover leave) + + +## Expanding who can merge PRs | moony +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/988983179262189639) +- Junior maints / trusted reviewers? +- We need more people to get content PRs through +- Expanding triage perms? +- **Need more people to review** +- **Decision: Make review guidelines** + - Add big/breaking code changes to the codebase changes channel + + +## Protect master branch | mirrorcult +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/989048858216636446) +- We are getting 500 PRs a month anyway help +- We need it to make downstreams have an easier time merging changes +- Prevents cringe pushes to master +- Too many commands to update the submodule + - **Solution: make a script, you can make PRs from the CLI too** +- **Decision: protect master branch** + + +## Early Access Roadmap +- emergency shuttle | sloth + - auto shuttle movement +- gamemodes/antags + - dynamic | mirror + - ~~!!nuke ops | Paul~~ + - lings? + - needs DNA + - blob | Remie + - cult? + - make it as good as vg for pjb + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** + - moony's entirely rewriting it anyways so **don't do that** +- body system but again +- body system +- Grid merging +- Diagonal tiles + - we have diagonal walls, tiles are harder +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak + - TILE MOVEMENT [c#5551](https://github.com/space-wizards/space-station-14/issues/5551) +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr, DrSmugleaf + - we did it + - lost in the canadian wilds +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole bans + - unify ghost roles prototype +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements | Veritius + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? + - "Science is still a piece of shit" - Vera 28/05/2022 +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr + - stuck in canada +- any% maintainer | Jezithyr + - Stuck in canada + - soon tm +- Prototype composition | Paul + - https://github.com/space-wizards/RobustToolbox/pull/2678 + - https://github.com/space-wizards/space-station-14/pull/7403 + - paul still not done with his thesis +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Man down +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + +Crashes / Critical bugs: (when are we moving these to GitHub) + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-07-16.md b/src/en/maintainer-meetings/maintainer-meeting-2022-07-16.md new file mode 100644 index 000000000..d7219643f --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-07-16.md @@ -0,0 +1,142 @@ +# Maintainer Meeting (16 July 2022) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 16 July 2022 18:00 UTC + +**Attendees:** +- DrSmugleaf +- ElectroSR +- Silver +- Vera +- Ike709 +- ShadowCommander +- PJB + +## Replace EffectSystem with client-side entities | Metalgearsloth +- Effects don't have animations +- Can't have layered effects nor do fancy animations +- At the moment we mix the two +- They do the same thing and are legacy +- **Conclusion: Yes** + + +## Labelling EntityUids as "should have a component" | PJB +- Such as EntityUid\ +- Wouldn't really mean anything short of just being implicit cast to/from EntityUid when relevant, just a type hint kinda thing +- Vast majority would expect TransformComponent, would make more sense to explicitly say it doesn't require it +- ![](https://i.imgur.com/KqbK5vi.png) + - ship it +- Generic struct that contains the entity uid and component, keeps it in a field +- **Conclusion: Ship it (When PJB Codes It)** + + +## Engine changelogs | Ike709 +- Do we want them: Yes +- Who codes it: PJB +- When: RN +- With: MoMMI +- **Put the changelog in a markdown file** + + +## Replacing tags with tag components | Mirrorcult +- They often break with prototype inheritance +- Auto ignored comps are now a thing +- The engine needs to be optimized for this (store tag components as a bit flag instead of full components) +- Need proper ECS for this +- **Do it** + + +## Expanding the number of people allowed to merge PRs | Moony +- **Appoint more maintainers (easier now that master is protected)** +- Link docs automatically when a relevant file is changed. + - Example: Link construction docs when a file relating to construction is changed. +- Fix the GitHub workflow to auto-remove "needs review" when the PR gets one review, if more reviews are needed put the tag back on. + - Have it add waiting for review tag as well. +- **Re-read and re-write if necessary the review/PR guidelines.** +- **Show PR guidelines somewhere to the contributor when making a PR.** + + +## Making wide-attack based on click was a huge mistake | Remie +- [From previous notes](https://docs.spacestation14.io/en/maintainer-meetups/secret/2022-06-25-meetup) + + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** + - moony's entirely rewriting it anyways so **don't do that** +- body system but again +- body system +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak + - TILE MOVEMENT [c#5551](https://github.com/space-wizards/space-station-14/issues/5551) +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor | Jezithyr, DrSmugleaf + - we did it + - lost in the canadian wilds +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole bans + - unify ghost roles prototype +- Admin traitor/role menu + - Assign people roles + - Objectives UI +- Job playtime requirements | metalgearsloth, Veritius [c#9384](https://github.com/space-wizards/space-station-14/pull/9384) + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? + - "Science is still a piece of shit" - Vera 28/05/2022 +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr + - stuck in canada +- any% maintainer | Jezithyr + - Stuck in canada + - soon tm +- Prototype composition | Paul + - https://github.com/space-wizards/RobustToolbox/pull/2678 + - https://github.com/space-wizards/space-station-14/pull/7403 + - paul still not done with his thesis +- Server polls +- Round Statistics + - Log votes, which maps are played the most… +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Man down +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + +Crashes / Critical bugs: (when are we moving these to GitHub) + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2022-07-30.md b/src/en/maintainer-meetings/maintainer-meeting-2022-07-30.md new file mode 100644 index 000000000..50665409b --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2022-07-30.md @@ -0,0 +1,110 @@ +# Maintainer Meeting (30 July 2022) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 30 July 2022 18:00 UTC + +**Attendees:** +- DrSmugleaf +- ShadowCommander +- ElectroSR +- Wrexbe +- moony +- PJB +- Visne + +## Are we The Upstream or our own server | moony +- Will there be a separate repo + - **No** +- Don't hold game design back because we're "upstream" + - If a feature needs to be killed to make the game better, don't keep it because downstreams might want it +- Can we trust project managers with SSH: + - Yes, assuming Silver doesn't object. +- Change server configs in the repo instead of Ansible. + - Is this worse for downstreams + - Downstreams can change it promptly in the config file + - **Put all the default configs in the TOML config file so upstream changes don't change downstream** +- Do we make different CVars changeable by different permission groups? (Game admin, moderator) + - **Yes** + + +## Remove game settings from server config | PJB +- We basically ended up discussing this in the previous point +- "Thank you for the bullet point" - Smugleaf + + +## Hud refactor ready for review | Jezithyr +- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revs + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - [Cargo Commander](https://www.youtube.com/watch?v=H0LPWuTt2o4) + - **Coded on outer-rim, just needs porting to upstream** + - moony's entirely rewriting it anyways so **don't do that** +- body system but again +- body system +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game guides + - Yes + - Waiting on pretty labels + - books/ebooks in pda + - ebooks preloaded on pda for selected job + - when rich text gets merged + - ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) +- oldchat + ui refactor READY FOR REVIEW | Jezithyr, DrSmugleaf + - we did it + - lost in the canadian wilds + - found in the canadian wilds +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole/antag bans + - unify ghost roles prototype +- Job playtime requirements | metalgearsloth, Veritius [c#9384](https://github.com/space-wizards/space-station-14/pull/9384) + - Playtime tracking + - Per role playtime tracking +- experimental science + - artifacts??!?!? + - "Science is still a piece of shit" - Vera 28/05/2022 +- action ui refactor, [like ss13 maybe](https://i.ytimg.com/vi/iFf_T31C-iU/maxresdefault.jpg) | Jezithyr + - stuck in canada +- any% maintainer | Jezithyr + - Stuck in canada + - soon tm +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Man down +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 +- A trailer for Steam + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-01-07.md b/src/en/maintainer-meetings/maintainer-meeting-2023-01-07.md new file mode 100644 index 000000000..1664b2ac7 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-01-07.md @@ -0,0 +1,165 @@ +# Maintainer Meeting (07 January 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 07 January 2023 19:00 UTC + +**Attendees:** +- Moony +- Visne +- ElectroSR +- Remie +- Flipp +- ShadowCommander +- DrSmugleaf +- Vera +- PJB + +## Using source generators for (de)serialization | DrSmugleaf +- Expression trees were a mistake +- **sounds good** + + +## Enforce AccessAttribute and better documentation on new PRs | metalgearsloth +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1060739900758044792) +- **yes** +- may not work for shared components +- check if it works with implementations of the whitelisted type for shared systems + - If it doesn't, make [Access] take an optional list of strings for types in server/client +- ping Vera if something goes terribly wrong + + +## Minify meta.json files | metalgearsloth +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1060432256092618753) +- [GitHub PR](https://github.com/space-wizards/space-station-14/pull/13035) +- Do we minify them + - **no** +- If not change the editorconfig to match the current style (2 space indents) + - **yes** +- Apparently some people copypaste existing meta.jsons to create new ones, which has caused many errors in multiple RSIs +- Reasons not to: + - harder to edit + - harder to review + - ? +- Reasons to: + - there's editor plugins that minify and unminify automatically for you + - this isnt a reason + - ~~saves 1.5 MB~~ not important? it's compressed when game is packaged, etc + - ? + + +## Require all public fields and methods to include xmldoc comments | moony +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1055341182248558623) +- Make sure every method is documented +- Document every field +- **Put this in the PR guidelines** +- https://docs.spacestation14.io/en/getting-started/pr-guideline + + +## Rename entityquery to componentquery | metalgearsloth +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1030122281462136862) +- **Yes** +- Wait for archetypes to rename them + + +## Should Helpers and Extensions be moved to EntitySystems | ShadowCommander +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1018323213517856838) +- **Yes, if it refers to any manager, system or entity** +- **If it's a random helper to save code it doesn't need to be** + + +## Resolve pattern | DrSmugleaf +- **Add call site to arguments of resolve with the new .NET 6 arguments so it can log the file and line if a warning happens.** + + +## Turn IPlayerSession into an entity | moony +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1015187820752683021) +- **Yes** +- This would let us modularize the entire thing and allow us to use events on players directly, letting us get rid of many player-indexed dicts in favor of storing it on the player +- Should this be done at an engine level, or at a content level? +- **Engine** +- **Keep player session, then have an entity field on the session for its data** +- **Mind would still be separate since player session is transient** +- **You can have multiple minds for the lifetime of a single player session** + + +## Replace BUI state handling with normal component state handling for BUI prediction | ElectroSR +- [Discord link](https://discord.com/channels/310555209753690112/900426319433728030/1012164293816483870) +- Laggy interfaces suck +- Everyone is actively avoiding BUI atm +- **Prefer component states to BUI states** +- **Someone refactor BUI please** +- **Have the client manage the UI, the server needs to know if its open** + + +## Component references | PJB +- **Try to remove them** +- How do we have client-only or server-only data on a component without it +- Use different components for that data? + + +## Archetypes | DrSmugleaf +- B O N U S T O P I C +- Need to be made faster before we implement them outside of Robust.Benchmarks +- Do archetype chunking to optimize for CPU cache hits +- Check startup time specially for the JIT when creating all the archetypes +- [Flecs benchmarks](https://github.com/SanderMertens/ecs_benchmark) + + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | mirror ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - she did it go port it https://github.com/Citadel-Station-13/space-station-14/tree/master/Content.Server/_Citadel/Worldgen +- body system but again +- body system +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Tutorial + - In game + - we have a pr open +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole/antag bans + - unify ghost roles prototype (mind refactor) +- experimental science + - "Science is still a piece of shit" - Vera 28/05/2022 + - "I haven't played the game in 2 years" - Vera 07/01/2023 +- any% maintainer | Jezithyr + - Stuck in canada + - soon tm +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 +- A trailer for Steam + +Crashes / Critical bugs: (when are we moving these to GitHub) +- role timers not counting properly + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-01-21.md b/src/en/maintainer-meetings/maintainer-meeting-2023-01-21.md new file mode 100644 index 000000000..9b57350df --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-01-21.md @@ -0,0 +1,161 @@ +# Maintainer Meeting (21 January 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 21 January 2023 19:00 UTC + +**Attendees:** +- moony +- AJCM +- Zoldorf +- Visne +- ElectroSR +- Remie +- Wrexbe +- DrSmugleaf +- Vera +- mirrorcult +- PJB + +## Bumping map count to 15 | metalgearsloth +- Most of [c#10595](https://github.com/space-wizards/space-station-14/issues/10595) is done +- 15 is too many +- **Bump it up to 12** +- **1 more low pop map, 1 more high pop map** + +## What to do about RSI licensing | metalgearsloth +- Do we use RGA outside of the folder + - No, RGAs are for other resources +- Do we use something else entirely +- **Make the license field a list of licenses interpreted by a script** +- **Copyright is freeform interpreted by a human** +- **Don't use RGAs for RSIs** + +## Do we explicitly block Windows 7 | PJB +- **Make the pop-up always show up, not only once** +- **Change the text and make closing the pop-up close the launcher too** +- **Localize the pop-up message to Russian if the OS is in Russian** + +## Do we mandate guidebook entries for new large features | mirrorcult +- **Yes** + +## How do we distribute replay recordings & clients, and should we hide some data | ElectroSR +- Should we hide data such as admin aghost positions? + - No +- How do we distribute it + - Tie replays to a version (game/engine), metadata and a link + - Download the replay and its data should launch the sandboxed client with a specific version + - Include the commit number in the replay file (any data can be appended to the replay file from content) + - Content versioning scheme (commit number), download link (if it doesn't work you download it yourself) + +## Can we do another stress test trace | mirrorcult +- Try and say that 10 times fast "stress test trace" + - Stresst +- Run it from time to time (ping PJB) +- Ping tester for it +- Having links that connect you to a server would be useful + +## PJB's renderer ASMR for Jez | PJB +- Problems with the renderer: +- We can't do what Byond can with planes, complex filtering +- We don't want planes (they are a bad idea) +- The alternative is a GOOD API (difficult) +- We can't have multiple post-shaders +- The hard part of a renderer is integrating it into the rest of the game engine (we are 2D) +- There are no existing rendering APIs we can just take +- We need a rendering API to: + - Draw textures, polygons at locations +- The game's code: + - Puts sprites at locations + - People do funny things (shaders, render targets) +- Our API has some of this but is unperformant, not very flexible +- Going from "draw sprite" to "opengl arrays" is just a lot of glue-code, not complicated +- Clyde is divided internally, only one file takes the sprites and actually draws them with the rest of the API +- Using a different rendering API to replace Clyde because of the maintenance burden requires it doing everything that Clyde already does +- We can't build Clyde on top of another incomplete rendering API because it would be spaghetti +- When we tried to use Godot we had our own sprite component and tried to build it on top + - Godot was too high level, too unperformant to integrate with nicely + - Need something that's lower level + - Godot 4 nonwithstanding +- Maybe something like Monogame but we would need a lot of glue code (replacing all of Clyde and refactoring anything that uses Clyde) +- PJB transferred from the Clyde mines and into the Monogame mines (we would need to fork it) +- Any other libraries unknown that don't need us to half-ass it +- Not worth the complexity +- PART 2: Even if you can find a good rendering API +- There are some good libraries (e.g. BGFX) that make you not need to write separate OpenGL/DirectX/Vulkan backends +- You would still have your own "Clyde" on top of it +- We still support very old hardware up to 10 years old, even if you raised this number WebGPU/etc require more modern APIs which would drop older hardware +- We don't want to expose the graphics library on Robust +- PROBLEM 2 (It's actually 3): +- We need to support Veldrid +- PROBLEM 3 (4): +- Older hardware +- this is still all just problem 2: "older hardware" she's just talking in a very roundabout funny manner +- Don't worry about it +- Maybe (maybe) use (maybe) WebGPU which uses the browser which reduces a lot of things you would need to create +- DirectX 10.1 hardware is what we target +- Visne left to go party, he is uncool +- Writing multiple backends: not good +- PJB is lost and confused, sad +- Just use Clyde :+1: +- Clyde2.0 When +- **If you want it easy drop OpenGL support** + - Less ass to maintain +- There are no plug-in rendering APIs +- Maybe get WebGPU or Vulkan-based, code against that, OpenGL is a fuck + + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | jez ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - she did it go port it https://github.com/Citadel-Station-13/space-station-14/tree/master/Content.Server/_Citadel/Worldgen +- body system but again +- body system +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- Add more shit to the guidebook +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole/antag bans + - unify ghost roles prototype (mind refactor) +- experimental science + - "Science is still a piece of shit" - Vera 28/05/2022 + - "I haven't played the game in 2 years" - Vera 07/01/2023 +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 +- A trailer for Steam + +Crashes / Critical bugs: (when are we moving these to GitHub) +- role timers not counting properly + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-02-11.md b/src/en/maintainer-meetings/maintainer-meeting-2023-02-11.md new file mode 100644 index 000000000..889def06c --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-02-11.md @@ -0,0 +1,139 @@ +# Maintainer Meeting (11 February 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 11 February 2023 19:00 UTC + +**Attendees:** +- Remie +- keronshb +- ElectroSR +- DrSmugleaf +- Vera +- PJB +- moony +- Visne +- Jezithyr +- flipp +- Zoldorf +- Wrexbe + +## Standardize and document naming for (system) dependencies | Vera +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/1070066968419381320) +- [Original discussion](https://discord.com/channels/310555209753690112/770682801607278632/1070064771761709076) +- **Remove the prefix and suffix.** +- What about UIControllers, where there is SharedHandsSystem, HandsGUI, HandsUIController. +- Keep it explicit with `_handsSystem`. +- **Make a maintainer vote for whether or not we enforce this (either an analyzer or as part of review.)** + +## Debug vs DebugOpt vs Release vs ReleaseTools build configurations | PJB +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/1072637756955693067) +- **Yes** +- Release (closest to the launcher version) would be closer to what we have for the downloadable public build (FULL_RELEASE). + - Can't be compiled easily because of filepath changes. +- Current release configuration (debug tools available) can become DebugOpt. +- Current debug configuration is the new Debug configuration. +- Tools (for mapping) is release with checks disabled and optimizations/tools enabled (tools is the launcher connect command). +- to summarize: + - `Debug`: optimizations disabled, asserts enabled, tools enabled. + - `DebugOpt`: optimizations enabled, asserts enabled, tools enabled. + - `Tools`: optimizations enabled, asserts disabled, tools enabled. + - `Release`: optimizations, asserts and tools disabled. As close to the launcher builds as you're gonna get while it stills runs from your repo. +- **Don't disable exception tolerance in debug.** + +## Medical refactor | Jezithyr +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/1073932941878636624) +- This is basically old baymed (+ rimworld ~~+ EFT~~) +- Take notes on brainmed +- Don't make it overly complex +- Make cloning lategame/not a solution to everything + - And implement speedcloning where releasing someone too soon makes them miss body parts + +## Game admin tooling | DrSmugleaf +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/1073933000204619807) (mistake) +- LOGS BAD (kind of) +- Not being able to search by username (have to correlate with the player list) + - Same in the player list +- Replays will help +- Add more buttons to the player panel (following players is ass) +- Make admin logs clickable (we have rich text now) +- Add UI for role bans +- Whitelist UI +- Admin wishlist [#13270](https://github.com/space-wizards/space-station-14/issues/13270) +- [Admin wishlist 2](https://github.com/space-wizards/space-station-14/issues?q=is%3Aopen+is%3Aissue+author%3A%40me+wishlist) +- [Admin wishlist 3](https://github.com/space-wizards/space-station-14/issues/13269) +- Fix not being able to use role ban and role time commands with offline players +- Add month and year to notes +- Greyscale/Grey out older notes +- Add UI to see a player's inventory including pocket items +- Admins can't see whispers +- Antag/ghost role bans +- Add categories to admin logs (groups of types) (not in the database, do it filtering on the frontend) +- Add a cvar to delete old admin logs + +## Server pop with the new large map | Pancake +- [Discord message](https://discord.com/channels/310555209753690112/900426319433728030/1073935104176562236) +- [Admin chat Discord message](https://discord.com/channels/310555209753690112/811324338099585036/1073934949633237092) +- Do we increase player cap + - idk + - **make a vote** + - **mirror take the wheel** +- Do we change the player cap based on the map + - probably not +- Do we make an US East server + - **yes** + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | jez ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - she did it go port it https://github.com/Citadel-Station-13/space-station-14/tree/master/Content.Server/_Citadel/Worldgen +- body system but again +- body system +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole/antag bans +- experimental science + - "Science is still a piece of shit" - Vera 28/05/2022 + - "I haven't played the game in 2 years" - Vera 07/01/2023 + - "Uhhhhhhhhhhhhhhhhh I'm sorry EmoGarbage" - Vera 11/02/2023 +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 +- A trailer for Steam + +Crashes / Critical bugs: (when are we moving these to GitHub) +- role timers not counting properly (pjb added a thing to check if its a db issue) (epico) + => till next time diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-03-05.md b/src/en/maintainer-meetings/maintainer-meeting-2023-03-05.md new file mode 100644 index 000000000..6276bb4b4 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-03-05.md @@ -0,0 +1,118 @@ +# Maintainer Meeting (5 March 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +> **Time:** 5 March 2023 19:00 UTC +> +> **Attendees:** +> - Wrexbe +> - Jezithyr +> - Visne +> - ElectroSR +> - PJB +> - DrSmugleaf +> - Paul +> - moony +> - keronshb + +## Re-enabling GitHub discussions | PJB +- Open them up to ideaguysing? +- We originally closed them because bot doesn't track them +- We disabled it because MoMMI doesn't post GitHub discussions in the github channel + - **If we agree that it's good PJB codes it** +- Verdict: **Yes** + +## YAML Prototype Editor | DrSmugleaf +- In-game or out-of-game + - If it's in-game it doesn't need to be downloaded separately but it can't be used if the branch doesn't build (can be solved by not using latest) + - Out of game means having to use avalonia :death: + - In-game means having to use robust's UI :death: + - In-game means it could live reload, and show it + - If the editor was good enough, we could store the data in a better format for machines +- Could be used by admins when uploading prototypes? +- Exporting to Resources/Prototypes when in local development +- Being able to view prototypes that have been uploaded through uploadfile in an UI? imagine +- **Don't do it out of game with Avalonia** +- **Do it in-game and maybe later move it to be inside a RobustToolbox editor** + + +## What to do about delta comp states | metalgearsloth +- Make comps track it themselves? https://discord.com/channels/310555209753690112/310555209753690112/1080275438913470564 +- Just use smaller components? (in the above case per-chunk ents but then that likely requires pvssystem changes and maybe archetypes) +- Pre-empting "do we need this" fixtures were split out from physics as grid movement was making the game unplayable for slow connections +- **Look into supporting chunk entities** + - **For bounds, chunks are multiples of 4 so it's not a problem** (i regard to chunk entities sitting at the corner of chunks) +- **Archetypes when** +- hampter, buncake + + +## Turning off settings requiring reviews to be approved | metalgearsloth +- It's just a placebo +- You can just dismiss it anyway. It doesn't need to remind me comments exist. +- I have already vibechecked the pr by that point even if I wasn't the reviewer. +- About as useful as protecting engine master +- Assuming it takes 5-10 seconds per PR this wastes 40+minutes a month +- Take a survey of active maints or smth idklol +- **Just use Bors you don't need to dismiss the reviews and Bors will fail if you merge something while it's working** + - **Ok don't do it yet until we fix the changelog bot** + + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system +- EL BODY SYSTEM | jez ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony + - she did it go port it https://github.com/Citadel-Station-13/space-station-14/tree/master/Content.Server/_Citadel/Worldgen +- body system but again +- body system +- __***ENGINE EDITOR***__ | PJB + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- combat rework (needs to be bikeshedded) + - https://github.com/space-wizards/space-station-14/issues/3378 +- ghostrole/antag bans +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 +- A trailer for Steam + - Liltenhead made one + +Crashes / Critical bugs: (when are we moving these to GitHub) +- role timers not counting properly (pjb added a thing to check if its a db issue) (epico) + - the web ui just chops off after 24 hours haha + => till next time + like and subscribe + smash that button + did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-05-06.md b/src/en/maintainer-meetings/maintainer-meeting-2023-05-06.md new file mode 100644 index 000000000..04fcc5513 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-05-06.md @@ -0,0 +1,80 @@ +# Maintainer Meeting (6 May 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 6 May 2023 19:00 UTC + +**Attendees:** +- DrSmugleaf +- Visne +- Flipp +- KeronSHB +- ShadowCommander +- mirrorcult + +## Dropping content support for disabling client-side prediction | ElectroSR +- **Simply make the server aware of which clients have prediction disabled instead** +- Might be annoying for the small amount of people that use it + +## Jez talks about telemetry | Jezithyr + +## Early Access Roadmap +- gamemodes/antags + - dynamic | mirror + - lings? + - needs DNA + - blob | Remie + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system + - clock cult | keronshb +- EL BODY SYSTEM | jez ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- Salvage proc gen | moony [c#15120](https://github.com/space-wizards/space-station-14/pull/15120) + - she did it go port it https://github.com/Citadel-Station-13/space-station-14/tree/master/Content.Server/_Citadel/Worldgen +- body system but again +- body system +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- ghostrole/antag bans +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 + - "Uh" | PJB 19/03/2023 + - "Smugleaf to answer the literal question posed, because its better than Byond I hope" | PJB 01/04/2023 + - "Well I have a sample size of 1 myself and I do believe people do not in fact play the game" | PJB 15/04/2023 +- A trailer for Steam + - Also the screenshots for steam and the website + +Crashes / Critical bugs: (when are we moving these to GitHub) +- admin player overlay broke + => till next time + like and subscribe + smash that button + did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-05-20.md b/src/en/maintainer-meetings/maintainer-meeting-2023-05-20.md new file mode 100644 index 000000000..b5a0ef312 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-05-20.md @@ -0,0 +1,117 @@ +# Maintainer Meeting (20 May 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 20 May 2023 19:00 UTC + +**Attendees:** +- DrSmugleaf +- flipp +- metalgearsloth +- ShadowCommander +- PJB +- Visne +- keronshb +- ElectroSR +- Jezithyr +- mirrorcult + +## Component shutdown events | ElectroSR +- Should we combine ComponentShutdown and ComponentRemove events? + - Yes, but also remove the separation between component Add and Init (and Startup) + - Also remove component enabling/disabling +- Should we add a new event that only gets raised when a component is explicitly removed, rather than due to entity deletion. Standard removal events would still get raised. + - Context: removal logic that is a waste of time if the entity is just getting deleted anyways. + - Components shouldn't do complex work in removal/deletion. Deletion should just get rid of things as aggressively as possible, only keeping the game state consistent. + - Removal of components should be private to systems rather than a public API. Systems should do "on removal" logic themselves in a public function that removes components for you. + - Make it opt in (Access attribute). + - Keep a deletion event if the entity is deleted altogether, but don't fire it if individual component is removed. + - Combined with the earlier point, this means that if you ABSOLUTELY MUST run code on all component removals, you need to explicitly call it from both your public removal function AND on deletione event. + - Keep a component removal event in case some use case really needs it. +- If we have a separate explicit removal event, can we eventually remove InSafeOrder() & just enforce that component removal doesn't require querying other components on that entity? + - **YES** + +Edit with bonus questions: +- If the events are merged, what do we do with deffered component removal. Currently it raises a shutdown event, but defers the remove event & actual removal. + - idk +- Also: should events be raised for components that are deferred for removal (i.e., should the subscription enumerator check the component's lifestage?) + - idk 2 + + +## UI stylesheets and themes | ElectroSR +- Meeting topic/discussion: Stylesheets & themes. +- How do we make them better? Stylesheets and rich text should probably use themes when possible. + +- Decision: + - Combine stylesheets and themes, move it to YAML + - Context: stylesheets are originally C# because they need to be able to describe C# objects like style boxes, and `.css` can't do that. + - Whoever makes the YAML syntax has to figure out how to implement constants for re-use in the stylesheet. + - Make it easy to extend stylesheets (edits of simple properties, colors etc). + - For complex animations/styling of controls, content should inherit engine controls and implement logic there. + - We will not be implementing more complex styling functions from CSS like built-in transitions, aniamtions, descendant selector. + + +## Arch | DrSmugleaf +- Smug giving status updates on Arch + - She's ranting I love it when she has this energy. + - She's explaining it again + + +## Early Access Roadmap +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - lings? [c#16513](https://github.com/space-wizards/space-station-14/pull/16513) + - needs DNA + - blob + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system + - clock cult | keronshb +- EL BODY SYSTEM | jez (sloth?) ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- body system but again +- body system +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- ghostrole/antag bans +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 + - "Uh" | PJB 19/03/2023 + - "Smugleaf to answer the literal question posed, because its better than Byond I hope" | PJB 01/04/2023 + - "Well I have a sample size of 1 myself and I do believe people do not in fact play the game" | PJB 15/04/2023 + - "Well I mean well ok we are somewhat close to being able to play the game, I still haven't played the game however" | PJB 20/05/2023 +- A trailer for Steam + - Also the screenshots for steam and the website + +Crashes / Critical bugs: (when are we moving these to GitHub)ç +=> till next time +like and subscribe +smash that button +did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-06-10.md b/src/en/maintainer-meetings/maintainer-meeting-2023-06-10.md new file mode 100644 index 000000000..0989e5eea --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-06-10.md @@ -0,0 +1,126 @@ +# Maintainer Meeting (10 Jun 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 10 Jun 2023 19:00 UTC + +**Attendees:** +- DrSmugleaf +- PJB +- ElectroSR +- KeronSHB + +## Target round length | ShadowCommander +- How long? + - Citadel is too long at 2 sometimes not + - Really depends on what's going on in the round + - **60/90 minutes and give admins permissions to extend the shift** +- **Not hard-forced mechanically** + - i.e. no forced un-recallable shuttle at 90 minute mark + - If someone holds the round hostage others AHelp it +- **If we want to end the round, start ramping up events and disaster on the round** + - Overridable by admins + - Maybe override with player vote? + - Obviously tune for MRP + - Should take state of round into account +- Add a TF2 payload cart to SS14 + +## Formatting for log sawmills | metalgearsloth +- Options: + - name + - name.othername + - name_name + - Name + - Name.Name + - Name_Name + +- **Decision**: + - snake case elements + - example: `foo_bar.baz` + +## Obsolete freeze | PJB +![](https://hackmd.io/_uploads/B17h1SMP2.png) + +- Fucking fix the code reeee +- **"Just don't obsolete anything that's on the tier of `.Owner` for now probably"** +- **No content freezes or anything like that, it doesn't work** + +## IoCManager resolves in UI code | PJB +- UI controls currently rely on `IoCManager.Resolve()` in current +- **Option 1: constructor parameter** + - `new Control(UI)` + - First parameter becomes `IUserInterfaceManager` + - Must be passed through manually when creating new controls + - XamlUI does it automatically, only relevant for dynamic control creation. + - Hopefully not too inconvenient, have a `UI` property you can pass through easily. + - Add `IDependencyCollection` property to `IUserInterfaceManager` to link it through. + +- ~~Option 2~~: + - UI manager gets passed through on tree attach (when you add control as child of another one). + - Means no needing to pass constructor parameter manually. + - Fetching dependencies like sawmills must be done from `EnteredTree()` instead. + - Add `IDependencyCollection` property to `IUserInterfaceManager` to link it through. + +## How do we make PRs easier to review +- **We don't know** + +## Early Access Roadmap +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - lings? [c#16513](https://github.com/space-wizards/space-station-14/pull/16513) + - needs DNA + - blob + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system + - clock cult | keronshb + - waiting for mind rework +- EL BODY SYSTEM | jez (sloth?) ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- body system but again +- body system +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak +- ghostrole/antag bans +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 + - "Uh" | PJB 19/03/2023 + - "Smugleaf to answer the literal question posed, because its better than Byond I hope" | PJB 01/04/2023 + - "Well I have a sample size of 1 myself and I do believe people do not in fact play the game" | PJB 15/04/2023 + - "Well I mean well ok we are somewhat close to being able to play the game, I still haven't played the game however" | PJB 20/05/2023 + - "It still runs pretty bad however I do understand how people play it" | PJB 10/06/2023 +- A trailer for Steam + - Also the screenshots for steam and the website + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time +like and subscribe +smash that button +did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-07-29.md b/src/en/maintainer-meetings/maintainer-meeting-2023-07-29.md new file mode 100644 index 000000000..a0bbdfae2 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-07-29.md @@ -0,0 +1,148 @@ +# Maintainer Meeting (29 Jul 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 29 Jul 2023 19:00 UTC + +**Attendees:** +- EmoGarbage +- Visne +- Wrexbe +- ElectroSR +- PJB +- Chief_Engineer +- Moony +- Notafet + +## Ambiguity of rule-relevant information in-game - Chief Engineer +* Certain rules are unclear at least partially because the game doesn't do a great job of presenting certain types of information to the player. This can result in confusion around certain rules, particularly for players who don't spend a significant amount of time in the game. + +* This is the information I can think of that should be clearly presented in-game: +* Antag status, including for ghost roles + * Example: Slimes clearly™️ communicate their antag status in their role description, but this is inconsistent with other ghost roles which also have ghost role rules saying that they are an antag. + * **On spawn (regular jobs & ghost roles), the character window should always open.** + * **Character menu gets far more info such as antag status, job expectation, etc... Actually make it useful!** + * **For ghost roles, add lottery, so people have time to read the role's description.** + * **This should provide people unmissable info what's expected of them (e.g. if they're antag), if people still wanna be friendly in an RP game we can't stop them.** + * What is contraband, specifically what is non-stealth contraband + * This is info for the antag player (in the item status box), so people realize what they're buying is contraband. + * **Silly stuff like syndicate balloon isn't really contraband: security can't assume you're a traitor.** + * ![](https://hackmd.io/_uploads/HJFTnRMjh.png) + * **No explicit indication for obvious crap like emag, power sink, etc. Players should use their brain, but do have good descriptions for it.** + * What are high value items, things that shouldn't be given away by heads + * People don't realize you can't *just* give the hypospray away. + * **Put a list of high-value items in the guidebook.** + * Which bodies can be returned to [#8495](https://github.com/space-wizards/space-station-14/issues/8495). + * **Make sure it's clearly explained in the guidebook.** + * **Make sure it makes sense.** + * **Doesn't need to be 100% obvious whether a corpse is revivable or not just from examine text, minimum should be health analyzer.** + +> What is the best way to present this information to players in-game? Many players miss that xenos, whose description includes "kill all crewmembers", are antags. Is this just a skill issue, or can it be mitigated with game changes? +How do you communicate what is a high value item without encouraging/justifying things like throwing it in the vault round start +What's the best way to ensure that contributors are aware that this information needs to be presented to players? +Is there a way the contraband status of stealth items can be communicated without ruining their stealth? + +mucho texto + +**See bullet points above** + +## Salvage Design Direction maintainer meeting topic - Emisse +(what's the opposite of mucho) texto +* tstalker says it's poco. + +According to EmoGarbage: Used to just have magnet salvage. Pull shit in, mine it. Now we have expeditions (~10min): fly to length, procgen dungeon. These are very different and it's not clear how this shit fit into gameplay. + +* **Make expeditions shorter & faster** + * **~5 min max time limit** + * **Corpse recovery if left behind** + * **stuff to make looting faster: mark items to be teleported, no inventory management** + * **Just make it more gamey** + * **Force a cooldown between expeditions. People can do magnet salvage if they want, but it's not required** + +## Spawn coordinates naming - ElectroSR +* Should we rename the entity spawn variant that takes in entity coordinates to clarify that it spawns-then-attaches or something like that +* **Yes, make more clear naming.** +* **A lot of helper functions.** +* **We need explicit helpers for common scenarios like "spawn next to player" (accounting for containers).** + +## What kinds of gamemodes are acceptable upstream? - EmoGarbage +* What kinds of gamemodes are acceptable upstream? +* Current gamemodes are all on-station regular stuff. People have jobs, antags happen. +* Some idea for more devious game modes: + * Planet tower defense + * Team deathmatch + * STATIONWARE +* Do we run total conversion and NRP modes (TDM, etc) +* What kinds of modes should be opt-in vs. part of secret +* **People can vote for alt gamemodes, within population ranges (e.g. 20 players max for TDM). +* **Alt gamemodes are WYCI** + +## Antags: to midround or not? - EmoGarbage +* What modes should be roundstart / in secret +* What modes/antagonists should remain as midrounds +* **We're just bikeshedding dynamic/game director. I think we're all in agreement there's nothing special to decide here** + +## Early Access Roadmap +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - lings? [c#16513](https://github.com/space-wizards/space-station-14/pull/16513) + - needs DNA + - blob + - revolutionaries + - we want a generic antag overlay system + - loyalty implant + - faction system + - clock cult | keronshb + - waiting for mind rework +- EL BODY SYSTEM | jez (sloth?) ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- body system but again +- body system + - Maybe if we hold the VRChat maintainer meeting +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak + - What does this even mean anymore? +- ghostrole/antag bans +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 + - "Uh" | PJB 19/03/2023 + - "Smugleaf to answer the literal question posed, because its better than Byond I hope" | PJB 01/04/2023 + - "Well I have a sample size of 1 myself and I do believe people do not in fact play the game" | PJB 15/04/2023 + - "Well I mean well ok we are somewhat close to being able to play the game, I still haven't played the game however" | PJB 20/05/2023 + - "It still runs pretty bad however I do understand how people play it" | PJB 10/06/2023 +- A trailer for Steam + - Also the screenshots for steam and the website + - holy shit we have replays now + + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time +like and subscribe +smash that button +did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-08-19.md b/src/en/maintainer-meetings/maintainer-meeting-2023-08-19.md new file mode 100644 index 000000000..d983f513f --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-08-19.md @@ -0,0 +1,201 @@ +# Maintainer Meeting (19 Aug 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 19 Aug 2023 18:00 UTC + +**Attendees:** +- Visne +- ElectroSR +- Metalgearsloth +- ShadowCommander +- PJB +- DrSmugleaf +- Julian +- Mirrorcult +- Notafet +- TheQuietOne +- Faint +- Jezithyr +- EmoGarbage + +![](https://hackmd.io/_uploads/SJ_QSYAhh.png) omg miku + +## Namespace changes in content | metalgearsloth +- https://github.com/space-wizards/space-station-14/pull/18869#issuecomment-1672388772 +- client and server end with s but shared doesn't so it was updated +- PR is also making component changes +- IMO no because it's cleaning up code so it's actually consistent +- **Do it in standalone PRs unless the PR is very small** + * Better for reviewing and forks +- **Post breaking changes in #codebase-changes AND THE GITHUB DISCUSSIONS ANNOUNCEMENTS** + +## Conventions for locale strings | EmoGarbage +- there is literally no rhyme or reason anywhere +- there isn't a guideline for what the locale key is supposed to look like +- the file structure is a literal hellhole of a million folders with a single file inside of them +- it doesn't even mirror Prototypes or the c# code file structure +- "Does anybody even use the file tree?" - Smug +- Mirror idea: what if they're top-level popup/, verb/, prototype/, etc. + - Would make future rewriting easier. + - **Just always have `verb-` or `popup-` or `ui` in the key for that purpose.** +- **Mirror C# structure** + - Mostly used from C#: popups, verbs, etc.. + - C# structure is *fine*, could be better but ah well. + +## How do we handle reagents with extra data | ElectroSR +- IMO we should extend solutions to also be able to store non-prototype / complex reagents that aren't simply an ID string. +- How would complex reagents store data? Would it just be an instance of some class per solution or would they point to some shared instance/entity? +- If its a shared entity, how do we handle: +- PVS +- Deleting the entity when all solutions are gone. +- Cloning an entity if one of several solutions gets modified (e.g., dna damage). +--- +Comments: +- IMO it would probably be easiest to just have complex reagents be instances of some class that defines special behaviour in C#. Allowing them to be entities probably just overcomplicates this? +- this has definitely been brought up before, but I don't remember what the conclusions were +- if there even were any + +--- + +- ![](https://hackmd.io/_uploads/SJOE9tR2h.png) +- **(Make it some base type other than object, figure out how to do automatic merging behavior)** +- Idea is this data object would be copied + +## Don't speedmerge large content PRs | metalgearsloth +- specifically [c#18840] and [c#18136] (TEG and borgs) +- I know they're both maintainers but at a glance I can see a lot of standards not being applied +- there's a lot of older prs that still need reviewing +- having a maint get their 5k line pr get merged while your small pr is still sitting there is a kick in the guts +--- +- personally: +- I'd rather playtest after someone's reviewed it thoroughly so if there's no major issues we can keep it rather than expect every time for it to get reverted. This is to avoid stuff like the ninja pr which sat in review hell for months +- There's a risk that some big, really not up-to-standards code gets merged and then people get unhappy when it needs reverting, or the bigger risk that it just stays there. +- **Have it be moderately ready for test merges** +- **Remember test merges** +- **Try to notify game admins for roles and gamerules (events)** + +## IMPROMPTU TOPIC: Contributor survey | Mirrorcult +- Do it sometime soon™ + +## Derailment +OH MY GOD WE HAVE 700 MERGED PRs LAST MONTH ALMOST TWICE OTHER CODEBASES. + +## Change how we do !logging | Visne +- !logging tells you to dm a random maintainer who may not know how it works and may have to message someone else +- Logs may have PII +- **Remove PII from logs so they can be posted in public channels** + - **Edit the !logging command** +- **Eventually have some ticketing system that lets every maintainer look at it** +- Ticket system is a massive pipe dream lmao wyci + +## Net entities | metalgearsloth +- how do we handle commands for migration (I'm just assuming they should all take NetEntity atm) +- anything else that may come up +- **Write a migration guide for forks** + +## Arch migration | metalgearsloth +- after the initial arch port to swap out internals what else do we want to take advantage of / how in terms of what I think is priority e.g.: +- queries (and how we prefer to structure it content side) https://github.com/genaray/Arch/wiki/Query-techniques +- command buffer (to replace RemCompDeferred / other stuff editing in loops), would we just expose this directly, do we flush it after every update, do we store one on EntityManager and flush it at the end of ticks etc. https://github.com/genaray/Arch/wiki/Utility-Features +- eventbus +- job scheduling (replace my shitty parallel.for everywhere) +- relations +- **its good** + +## Named args enforcement | metalgearsloth +- so emote sounds broke and it turns out adding an extra arg to the emotes method shifted everything and broke it. +- should we enforce this in review, even just past a certain point (e.g. 3 args) to avoid bools suddenly being mixed up or is this just a skill issue. + - **Enforce it in review when we decide the guidelines.** +- alternatively chat system is so fucking bad this was bound to happen (freeze until refactor PLEASE). +- **Maybe write an analyzer for it** +- **Also figure out how long it takes to run analyzers** + +## Default values in component C# definitions | PJB +- HAS THIS HAPPENED TO YOU? +- You define a component in C#. You only need it for one thing right now. Instead of putting the value in the YAML, you put it in the C# +- Should we put this as a no-no in the conventions? +- **Do it case-by-case** + +## Additional changelog categories/types for codebase changes and pretty/lore versions | ShadowCommander +- **Do it for codebase and game admin changes that can be filtered.** +``` +**Changelog** + +:cl: PJB3005 +[Gameplay] +- add: Nanotrasen finally decided to give engineering departments something to do, and has finalized the schematics for the thermo-electric generator (TEG). +- add: The TEG creates power by exchanging energy between a hot and cold gas on its two sides. +- tweak: You can turn on gas heaters/freezers with alt-click now. +- tweak: You can open air alarm and pump menus with activate (E) now. +``` +- **Have separate files and ids for any channels (admin/fork) so forks can also have their own.** + +## Early Access Roadmap +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - lings? [c#16513](https://github.com/space-wizards/space-station-14/pull/16513) (closed) + - needs DNA + - blob + - revolutionaries [c#18477](https://github.com/space-wizards/space-station-14/pull/18477) + - we want a generic antag overlay system + - loyalty implant + - faction system + - clock cult | keronshb + - waiting for mind rework +- EL BODY SYSTEM | jez ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- body system but again +- body system + - Maybe if we hold the VRChat maintainer meeting +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak + - What does this even mean anymore? + - what is an 'acruid'? +- ghostrole/antag bans + - for ghost roles make taking them not valid if role-banned +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 + - "Uh" | PJB 19/03/2023 + - "Smugleaf to answer the literal question posed, because its better than Byond I hope" | PJB 01/04/2023 + - "Well I have a sample size of 1 myself and I do believe people do not in fact play the game" | PJB 15/04/2023 + - "Well I mean well ok we are somewhat close to being able to play the game, I still haven't played the game however" | PJB 20/05/2023 + - "It still runs pretty bad however I do understand how people play it" | PJB 10/06/2023 + - "Still does" | PJB 19/08/2023 +- A trailer for Steam + - Also the >>>>**screenshots**<<<< for steam and the website + - DO WE HAVE SELF GHOST HIDING + - holy shit we have **replays** now + + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time +like and subscribe +smash that button +did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-09-02.md b/src/en/maintainer-meetings/maintainer-meeting-2023-09-02.md new file mode 100644 index 000000000..2833088a5 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-09-02.md @@ -0,0 +1,129 @@ +# Maintainer Meeting (02 Sep 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 02 Sep 2023 18:00 UTC + +**Attendees:** +- EmoGarbage +- Visne +- Julian +- ShadowCommander +- ElectroSR +- Lank +- Notafet +- PJB +- Faint + +## "the github reviews murder case special" +- get rid of codeowners. do any of us actually use it, it just confuses people who think the codeowners need to review before its merged + - **Remove all general ones and change to one or two folders deep, so that it actually goes to the relevant PRs +- review labels rn are half-automated which is good but its hard to tell when someone finishes a review. have people re-request a review on github to clear the ‘changes requested’ label and expect ppl to do this + - Make the bot remove the "Awaiting changes" label when PR reviews are requested again + - Just tell more people to press the re-request review button when reviewing. + - Maybe make a copy paste that can be put as the instructions for new contributors +- have maintainers actually assign themselves to review PRs that they're going to review so we aren't just passing this along through word of mouth +- ok basically just actually make use of the GH review features instead of having to tell people ‘uhh just ignore that’ +- side quest. can we ask github for GH enterprise again since we're big boys and open source + +## "a killing at the github issues and labels page " +- get rid of all prio labels except for URGENT they dont rly matter + - We probably wont sort by + or - Low Priority, so + - **Yes only URGENT** +- maybe consolidate the difficulty labels too but theyre probably fine + - **Keep difficulty labels** + - Easy should be able to be done by a new contributor with 0-4 PRs within a few hours. + - Beginner friendly should be clearly written out what the requirements and goals are for the PR +- mapping issue labels (one for every map? makes it easier for mappers to sort through) + - Not needed +- some ‘possibly no longer relevant' label (like tgs ‘flagged cleanup’label), close really old issues with this if we aren't 100% sure + - some other ideas for issue labels that are actually useful: + - ‘oversight' (easy to fix random stuff that just wasnt caught) + - ‘regression’ (previously working feature is broken) + - combine cleanup/needs refactor into ‘code maintenance’ + - ‘requires resprite’for arttainer issues +- go back through and properly clean up and label old-old issues by god there are 2.2k open and they are definitely not all still relevant. let us start a united front here. give a bunch of people triage and go at it over the course of like a couple weeks. make github issues useful again +- allow user labeling of issues, at least for certain kinds like feature request and oversight. probably thru some gh action that just looks in the issue body or in comments. iirc someone tried this like 2 yrs ago but it didnt work and we never fixed it + - Yes fix the bot +- think about giving out triage access more freely, maybe to all experienced contribs? + - **Yes** + - And some game admins + - All staff + +## New art +- ok can we actually commission artists for new lobby art with our five million dollars like we said we would a year ago +- Yes. We need an artist. +- Lobby art ideas: + - One of every Antagonist + - One of every species + - One of every Job/Department + - This is not one artwork per subject, one artwork can have more than one subject. + +## Early Access Roadmap +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - lings? [c#16513](https://github.com/space-wizards/space-station-14/pull/16513) (closed) + - needs DNA + - blob + - revolutionaries [c#18477](https://github.com/space-wizards/space-station-14/pull/18477) + - we want a generic antag overlay system + - loyalty implant + - faction system + - clock cult | keronshb + - waiting for mind rework +- EL BODY SYSTEM | jez ![](https://cdn.discordapp.com/emojis/933790288860815380.webp =40x) + - some refactors were done by mirror, still some left + - surgery died in the war of 1992 + - Mirror died in the war of 1993 + - limb damage..... +- body system but again +- body system + - Maybe if we hold the VRChat maintainer meeting +- __***ENGINE EDITOR***__ + - could benefit from full state reload +- movement refactor + - Client side movement? + - a smidgen + - as a treat + - acruid pls com bak + - What does this even mean anymore? + - what is an 'acruid'? +- ghostrole/antag bans + - for ghost roles make taking them not valid if role-banned +- State mandated Xonotic matches | PJB + - Please I have severe withdrawal symptoms + - Replaced by private SS14 playtests + - Woman down + - She added Miku to her server (real) now you can play as miku pls play with her + - Implement Xonotic as a plugin to ss14 +- The game runs like shit how do people play this + - still does | PJB 28/05/2022 + - people like shitty games + - "how do people play this game" (high pitched scream) | PJB 28/05/2022 + - ex: SCREEEEEEEEE + - Slightly better | PJB 11/06/2022 + - It's better but still not as good as I'd like it to be | PJB 25/06/2022 + - I haven't played the game since | PJB 16/07/2022 + - "Please read the last line of that subsection" | PJB 30/07/2022 + - "Please unread the last line of the previous subsection" | PJB 07/01/2023 + - "I spent the last two weeks coding Rain World" | PJB 21/01/2023 + - "I should've tried to run it from the AirBNB that I was staying over in my skiing trip but I didn't" | PJB 11/02/2023 + - "It still runs like shit" | PJB 05/03/2023 + - "Uh" | PJB 19/03/2023 + - "Smugleaf to answer the literal question posed, because its better than Byond I hope" | PJB 01/04/2023 + - "Well I have a sample size of 1 myself and I do believe people do not in fact play the game" | PJB 15/04/2023 + - "Well I mean well ok we are somewhat close to being able to play the game, I still haven't played the game however" | PJB 20/05/2023 + - "It still runs pretty bad however I do understand how people play it" | PJB 10/06/2023 + - "Still does" | PJB 19/08/2023 +- A trailer for Steam + - Also the >>>>**screenshots**<<<< for steam and the website + - DO WE HAVE SELF GHOST HIDING + - holy shit we have **replays** now + + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time +like and subscribe +smash that button +did you know only 6% of contribs join this meeting? diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-09-09.md b/src/en/maintainer-meetings/maintainer-meeting-2023-09-09.md new file mode 100644 index 000000000..6a543c882 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-09-09.md @@ -0,0 +1,122 @@ +# Maintainer Meeting (09 Sep 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 09 Sep 2023 18:00 UTC + +**Attendees:** +- ElectroSR +- ShadowCommander +- Sloth +- PJB +- DrSmugleaf +- Notafet +- Julian +- Visne +- faint +- TheQuietOne +- keronshb +- Lank + +## Remove component lifestage properties | metalgearsloth +- Remove component lifestage properties (this is a long-term thing but mainly looking at stopping new code adding checks): +- 90% of the time it's a bandaid for other shitty code +- probably needs removing when we go to struct components in the distant future +- Can probably just check the entity lifestage in most bandaid cases instead anyway +- **Fund it** +- **Most component stuff can just check entity instead, not too hard to remove** +- **Removing entity life stage would be much harder** + +## Remove Component.Deleted | metalgearsloth +- adds unnecessary overhead to some codepaths like TryGetComponent\ / HasComponent\ +- It's really only useful in cases where something is queued but not removed yet but even then I'm kinda suss +- we can probably start investigating after arch port is stable +- **Do it** +- **How are we delaying component changes to the end of the tick some day who knows** + +## Use the pooled collections instead of List\ / HashSet\ etc | metalgearsloth +- Uses the ArrayPool to back the arrays +- Should reduce heap allocsTM +- https://github.com/jtmueller/Collections.Pooled +- we may need to import it anyway for arch +- **Yes in engine, to replace ObjectPool** +- **Don't sandbox Shared pools** +- **Pool objects shouldn't be returned by methods** +- **I don't like it because it makes spaghetti out of memory management, and is basically just a bad bandaid after you give up doing it properly™️** - PJB + +## Arch and performance | metalgearsloth +- We should get AddComp etc to have content start leveraging minimising archetype changes though not sure how we want to handle it. +- any other overloads we could think of + - HasComp, RemoveComp, TryGetComp, EnsureComp +- how do we handle queries i.e. does content cache our existing queries, how do we handle not having .WithAll\ / .WithAny\ / .WithNone\, do we cache arch queries and just have engine relay them, idk) + - **Use query description in engine** + - **If used from content, validate the types that the query handler asks for as Arch doesn't check (it just crashes)** + +## NetEntities and handling unknown entities to the client | metalgearsloth +- NetEntities and handling unknown entities to the client: client may get netentity for something it might not know about yet (due to streaming or whatever else). How do we handle this and what's going to be the best way 3 years from now, e.g. some kind of handle for netentity + entity and entitymanager just updates the field when it comes in? +- Right now client just leaves the entityuid and code just checks for trygetcomp / deleted and it will just suddenly work when the entity comes in but with the entityuids no longer matching (and the entity may not exist yet) this is no longer possible +- Like: +- Do networked comps just store NetEntity? This is kinda ugly and adds dictionary overhead to everything +- Do we somehow put a ref on entitymanager then update it when the gamestate comes in and the entityuid automagically updates? +- **https://discord.com/channels/310555209753690112/900426319433728030/1147795695286362112** + +## Refactoring UpdateBoundStateMessage / whatever the fuck UI is doing to compstates | metalgearsloth +- do we just dump all the data on components +- any data not already comps just dump on a dedicated UI component? +- **"You can scroll two points down for the BUI entities topic"** + +## Changing TryComp\(out var comp) to TryComp(out T comp) for most usages | metalgearsloth +- We had this discussion a long-ass time ago, like 4 years ago +- the latter is shorter +- I preferred it but we ended up using the former +- I think performance is almost identical +- bottom text +- **If we enforce it, enforce it with an analyzer** + +## BUI entities | PJB +- Opening BUI just creates an entity that handles the UI logic. UI data is in that entity's components. We can do composition for various types of behaviors like interaction range. Move it all to content. PVS filter it so only target player has vision over it. One entity per BUI session (player). +- Do we give a shit about optimizing UI states if two players view the same UI? Right now this allows re-using the data but it seems like such a minor thing it's not worth making the system more complex over +- gooey booey looey +- **When you code it, ez clap, we're all in agreement** + +## Disallow using Math and MathF | moony +- and make people use the type-specific functions instead that .NET 7 added +- so for example Math.Pow(x, y) would be double.Pow(x, y) +- Math/MathF are only defined for a limited set of types and are overall a bit more "magical" for what types they allow (due to overloading), so being explicit about the type is cleaner and allows that implied API to be extended (MyNumberType.Pow(x, y) would be what you'd expect to exist instead of initially guessing Math.Pow(x, y)) +- all the functions on Math/MathF have equivalents on the type being operated on for the C# builtin types +- including the constants, so for example float.Pi exists +- also the divide between MathF and Math is just plain confusing most of the time +- **When you write an analyzer for it, for engine only** + +## *"the thrilling case of the missing documentation "* | mirrorcult +- ok can we admit “just ask us for access to edit the dev wiki” is a failed prospect. no one actually knows you can do that and if they do know they dont want to bother with the friction of finding out who to ask and waiting just to submit a fix. as a result the dev wiki is extremely atrophied +- oh my god PLEASE can we move it all to mediawiki or something, i dont care what it is wikijs was a bad idea and i just want something that anyone can edit and add articles to. please +- we really desperately need to do a full audit over the docs, not necessarily like add new stuff rn because i get thats effort but just make sure its up to date information and all useful pages are actually discoverable +- maybe think about mirroring codebase changes to docs site once we get something better like mediawiki. this would probably involve just linking to the docs page in GH and discord as the source of truth +- we REALLY need to make the docfx sites more visible and linked in more places (and docs in general but), discord channels/pins/github/forum/ingame literally everywhere please (and maybe give them better domain names theyre really bad rn) and also + - add a ‘component glossary’ section to docfx which just shows all types that are registered components and what docs/fields they have. like half of the people in <#560845886263918612> ask for something like this and we just have to tell them ‘uhhh look in your IDE’ which is good when they already have the component they're looking for but terrible for when theyre trying to discover potential components they can use for some behavior + - topy was working on this at some point but they are inactive now. if possible just revive their branch we really need this +- **When You Document It** +- **We'll host it for whoever wants to experiment with shit** +- **I saw the search bar on mdbook and I'm convinced** +- **Replace wikijs with mdbook** + +## Early Access Roadmap +- **nothing on this roadmap matters except early access trailer.** +- A trailer for Steam + - Also the >>>>**screenshots**<<<< for steam and the website + - holy shit we have **replays** now +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - revolutionaries [c#18477](https://github.com/space-wizards/space-station-14/pull/18477) + - wizard +- The game runs like shit how do people play this + - "IDK but maybe when I fix the watchdog you can figure it out easier" | 09/09/2023 + + +Crashes / Critical bugs: (when are we moving these to GitHub) +=> till next time +like and subscribe +smash that button +~~did you know only 6% of contribs join this meeting?~~ According to YouTube's statistics, diff --git a/src/en/maintainer-meetings/maintainer-meeting-2023-09-23.md b/src/en/maintainer-meetings/maintainer-meeting-2023-09-23.md new file mode 100644 index 000000000..839fc54a0 --- /dev/null +++ b/src/en/maintainer-meetings/maintainer-meeting-2023-09-23.md @@ -0,0 +1,70 @@ +# Maintainer Meeting (23 Sep 2023) +```admonish info +Any decisions taken in these notes may no longer be applicable. +``` + +**Time:** 23 Sep 2023 18:00 UTC + +**Attendees:** +- EmoGarbage +- ElectroSR +- Visne +- DrSmugleaf +- notafet +- Lank +- Visne +- Julian +- Jezithyr +- Chief_Engineer +- PJB (hiiiiiiiiiiiiiiiiii) +- mirrorcult +- TheQuietOne +- miku +![miku](https://media.discordapp.net/attachments/813722892948733982/1155204273777422366/miku.png) +- moony +- Slava0135 +- ShadowCommander + +## Change ToString & Parse for EntityUid or NetEntity | ElectroSR +- Commands that take either are now ambiguous, how do we differentiate between them +- **All commands should take NetEntity** +- What do we do for command output + - **NetEntities should be the one getting presented to the user most of the time** + - **e for EntityUid** + - **n for NetEntity** + - **c for client-side** + +## Remove transparent / non-occluding containers for sprites | ElectroSR +- Right now they can not occlude lights and not occlude sprites. +- **Force containers to always occlude sprites.** +- **Wish we could put containers in content instead.** + +## DERAILMENT: Containers as entities, how do we do it? +- **Entities with ContainerComponent and ContainerSlotComponent.** + +## Entity categories | ElectroSR +- **they are good** + +## Early Access Roadmap +- **nothing on this roadmap matters except early access trailer.** +- A trailer for Steam + - Also the >>>>**screenshots**<<<< for steam and the website + - holy shit we have **replays** now +- gamemodes/antags + - dynamic [c#16548](https://github.com/space-wizards/space-station-14/pull/16548) + - revolutionaries [c#18477](https://github.com/space-wizards/space-station-14/pull/18477) + - wizard +- The game runs like shit how do people play this + - "I only played VRChat since last time and VRChat runs like shit so I don't know how people play this" | 23/09/2023 + + +Crashes / Critical bugs: (when are we moving these to GitHub) +- Crashes the server reliably. +- Something that bricks your client often (needs a client restart). + - Example: Blackscreens the client until you reconnect. +- If something ruins the round and is disabled because of it. + - Example: Communal lung bug. +=> till next time +like and subscribe +smash that button +~~did you know only 6% of contribs join this meeting?~~ According to YouTube's statistics, diff --git a/src/en/meta/docs-example-page.md b/src/en/meta/docs-example-page.md index ec51edcd8..4cb4dfec4 100644 --- a/src/en/meta/docs-example-page.md +++ b/src/en/meta/docs-example-page.md @@ -32,7 +32,7 @@ All available admonishment types. To use an admonishment: `````` -```admonishment {type} "{text you want as title, or leave blank}" +```admonish {type} "{text you want as title, or leave blank}" description ``` `````` diff --git a/src/en/proposals/anomaly-cores.md b/src/en/proposals/anomaly-cores.md new file mode 100644 index 000000000..3fec4552e --- /dev/null +++ b/src/en/proposals/anomaly-cores.md @@ -0,0 +1,45 @@ +# Anomaly Cores and the G.O.R.I.L.L.A Gauntlets + +The intention of this proposal is not to expand the anomaly gameplay system through breadth (i.e. more stuff) but to add new dimensions of gameplay and new incentives entirely. This will be done through two main additions: **inert & decaying anomaly cores**, and the **G.O.R.I.L.L.A Gauntlets**. + +## Anomaly Cores + + + +**Anomaly cores** are generated when an anomaly dissipates in some way. An *inert* core is spawned when an anomaly is fully contained and fizzles out, and a *decaying* core is spawned when an anomaly goes supercritical. + +Inert cores are functionally useless on their own, sell for a small amount of money, and glow faintly. They become useful in conjunction with the G.O.R.I.L.L.A, which will be elaborated on later. They can also be made into anomaly core pie! + +**Decaying cores** are the interesting ones. When an anomaly goes supercritical, it will spawn a decaying anomaly core of the same type as the anomaly. These cores can be sold for a large sum of money, converted into a fairly high amount of research points, or *used by anyone for a one-time anomaly-specific benefit* (this use will not be included in the initial PR for scope reasons). + +Over time, decaying anomaly cores will slowly *lose their value* and eventually convert into an inert anomaly core. If it isn't sold, exchanged, or used fast, then the whole endeavor could prove pointless. + +### Intended Gameplay + +The point of decaying anomaly cores being generated is twofold: First, it provides a potential benefit for anomalies which accidentally go supercritical or are untended to. Second, it gives anomalists the interesting choice to **intentionally make an anomaly go supercritical** for huge rewards, if they feel that they're capable of handling the aftermath. + +Decaying anomaly cores being time-limited is very important. This introduces more gameplay by forcing people to take some risks to extract as much value as possible. For instance, you might just run into a supercritted gravitational anomaly to take its core even if you risk harming yourself. It also forces the decision of *how* to use the anomaly core quickly, which can lead to some fun social scenarios. + +## The G.O.R.I.L.L.A Gauntlets + +```admonish info +or, Gauntlets Orchestrating Relocation of Interloping and Ludicrously Livid Anomalies +``` + + + +The G.O.R.I.L.L.A Gauntlets are an item obtainable through Tier 2 experimental research (subject to change). It functions as a set of wieldable power fists that can deal strong brute damage. However, they're not very strong on their own. To take full effect, they need to be **with an anomaly core**. + +When the gauntlets are loaded with either type of anomaly core, they gain the ability to force throw anything they hit backwards, until it hits a wall. **This includes anomalies, and thus the gauntlets function as a method of moving anomalies.** Inert cores only give you five charges to work with (subject to change), while decaying cores will work until they run out, and deal significantly more damage. + +Anomalies which are hit with the gauntlets will take some minor stability damage. Anomalies in the process of going supercritical can also be hit with the gauntlets. Because of the nature of how the force throw works and the limited charges of an inert core, anomalists will have to first consider the most efficient path and set of pushes to get the anomaly in a more useful location. + +### Intended Gameplay + +The G.O.R.I.L.L.A gauntlets open up many more choices for anomalists. Before, if an anomaly spawned in a particularly unfavorable spot (such as medbay), science was heavily pressured to contain and decay it entirely rather than trying to exploit it, and for good reason. People have often asked for a way to move anomalies, but of course, anomalies' locations being random is a huge part of what makes them interesting to contain. + +With the G.O.R.I.L.L.A gauntlets, anomalists have a way to move unwieldy anomalies in an interesting way that generates rather than removes gameplay: +- The gauntlets require an inert core and research, so science must already have invested some time into anomalies already +- The inert cores have finite charges, so science cannot always rely on them +- The movement of the anomaly is not as simple as 'point A to point B', and because of the limited charges, scientists must consider the location of the anomaly and where they'll be able to move it within 5 pushes, kind of like a box-pushing game or a Pokemon ice tile puzzle, which is a fun mini-challenge on its own. +- Expert anomalists will be able to modify the environment to get anomalies in even more favorable locations and they will likely have to coordinate with others to move it through doors, hallways, into smaller rooms, etc, introducing a new degree skill expression, on top of knowing when to make the decision to try and move one rather than contain or harness it. \ No newline at end of file diff --git a/src/en/proposals/deltanedas-plant-genetics.md b/src/en/proposals/deltanedas-plant-genetics.md new file mode 100644 index 000000000..2bfdf8524 --- /dev/null +++ b/src/en/proposals/deltanedas-plant-genetics.md @@ -0,0 +1,71 @@ +# Feature Design: plant genetics + + + + + + + + + + + + + + +
Designer + deltanedas +
Discord/Forum Thread + TBD +
Github PR/Draft + TBD +
+ + + +# Overview: + +A new CRISPR-like machine for modifying genomes of plants. +Has a hex editor-like UI where you can seek to a position and it shows a certain number of bases. +From there you can make modifications e.g. swapping out an A at index 38 for a T. Once you are happy and think your modifications won't kill the plant, create your new seed and plant it. +Since genome layouts are randomized roundstart this would be no better than current mutagen roulette of just hoping it gets a good trait and doesnt make the plant useless. + +To solve gene roulette, the second part of this would be experimentation. +Get 2 identical seeds with clippers then mutate one a little using unstable mutagen. +Either the same machine from the start or a separate one can then analyze them and check what genes (bits) are different. +After a little bit of time it either picks a single random bit, or multiple of them, and tells the player what gene name is at that bit. If the gene has multiple bits it will take some investigation to see which bit it is but that's trivial for yield/potency which can be seen just by clipping it. +Essentially you keep experimenting on plants to figure out the index of every gene, and tada youve mapped the plant genome and can make gmos with ease for the rest of the round. + +# Goals: +Promote interdepartment stuff by requiring biomass for gene editing: +- Means there is some cost to minmaxing a plant so you might just have to settle for the important traits +- If there is no med staff / no bodies to juice you can still grow plants as normal +- There was some ideas about being able to reclaim biomass from plants so you could use that to kickstart it. +- Salvage can find biomass on expeditions as a large but irregular source, assuming med doesn't get to it first. + +# Gameplay: +The gene editing would primarily be a window like a hex editor, set a position to seek to and then itll show up to X bases. +You can modify a base by just typing A C G or T. they map to 00 01 10 and 11 respectively in binary, so for every 2 bits you get a single base. +From there the player can feed it biomass and print out a fancy new seed with a cost of say 1 biomass per bit modified. + +Unstable mutagen would randomly flip bits so you could get an increase of 8 to yield or a decrease of 1 to potency, depends on which bit it flips in an int. + +Pollen swabbing, if it still exists, would swap entire gene values rather than operate on a random bit basis. + +This might have botanists split up between growing plants for chef and focusing on mapping the genome to get gamer seeds which is cool. + +Additionally, instead of the current mutation of a viable bool, a system would be in place where there are bits that set unreasonable pressure temperature or light requirements to grow. +If a plant suddenly requires being grown in space or a fire you are unlikely to try, but it's still possible if you are extremely determined. + +# Components: +Plant entities would both have GenomeComponent and its own component for handling swabbing/crossbreeding along with copying genes from parent when clipping. + +Since only bools and ints can be stored in genomes, chemicals would still need to be in solution container component and mutated manually similar to how its done currently with SeedData chemicals. + +# Inspirations: + +- life + +# Requirements: + +Depends on a rework of botany to have plants be ECS. diff --git a/src/en/proposals/game-director.md b/src/en/proposals/game-director.md new file mode 100644 index 000000000..cb79334a8 --- /dev/null +++ b/src/en/proposals/game-director.md @@ -0,0 +1,210 @@ +# Game Director / Dynamic Event Scheduler + +**Authors:** tom-leys (RecallSingularity) + +## Abstract + +Triggers game events to attain a chaos goal. Goal varies during each round to create variety. +By measuring and varying chaos, the director keeps the challenge each round within a fun band. It reacts to player success +or failure by tailoring future events based on current chaos measured. + +The Game Director adds new game modes, initially CombatDynamic and CalmDynamic. They can only be triggered by an admin +running for instance `addgamerule CalmDynamic`. A later PR could put them into automatic rotation. + +## Background + +Events in SS14 trigger challenges or benefits for players. They might spawn spiders, dragons or zombies. Traitors +come on board, Nukies attack or vents spew grease. Pizza might be delivered or power is turned off to sections of the station. + +Historically events trigger in a few ways: + +- At round start (for instance a zombie or nukie round begins) +- Randomly, every 5 minutes or so (extended rounds) +- Randomly, at an increasing pace (survival rounds, now discontinued) +- Due to admin commands such as `addgamerule` +- Hand created by admins adding entities and using admin tools. + +In the absense of administrator intervention, extended rounds can become boring and monotonous. Zombie or Nukie rounds +are often boring for a period, intense for a period and if the station is saved boring again. + +Due to the random nature of the extended round system, events cannot be too dangerous or too beneficial to the players +or through RNG they are likely to trigger at the worst time. One station might be flooded with spiders, a dragon and space lube +under every vent while another only suffers a few rats and some flickering lights. + +The Game Director aims to provide an alternative to the extended mode that is flexible and drives a fun set of events +towards a larger set of Chaos Goals. A wide array of extreme events both positive and negative can then be added to the game +safe in the knowledge they will be run at suitable times rather than randomly. + +Discord Topic: https://discord.com/channels/310555209753690112/1110002801448329226 +GitHub PR: https://github.com/space-wizards/space-station-14/pull/16548 + +### Car Metaphor + +Imagine you are driving on the highway. You look at the metric of your speedometer to see how fast you are driving. The +speed limit specifies how fast you should go. You then pick either the apply gas, reduce gas or turn on radio events to +best match the car speed to the goal set by the speed limit. The director works in a similar way. + +## Basic method + +- **Chaos** - Metrics we are measuring and controlling with each event +- **Story** - Determines a series of Chaos Goals +- **Metrics** - Estimate the existing chaos on station +- **Events** - Have a predicted effect on chaos +- **Game Director** - Pick best Event to achieve story Metrics + +1. **Wait** until it is time for next event +2. Run **metrics** to measure current **Chaos** +3. Advance **StoryBeat** and **Story** (over time or based on Chaos) +4. Read **desired Chaos** from **current StoryBeat** +5. **Rank** valid events to achieve near desired chaos +6. Run **best event** + +## Chaos - Metrics of a station + +We want to measure how bad the Chaos is right now. If the station is doing well, the lights are on and the floor is clean, +we expect low chaos scores. If the lights are out, the place is spaced and enemies are roaming the station, we want high +chaos scores. + +To best tailor events to the exact situation on the station, chaos is measured by several metrics. +The solution to hunger is pizzas. The solution to enemies might be a squad of reinforcements. A station +that is too peaceful is ready for meteorites, spiders or other hazards. + +A wide range of challenges should be reflected by moderate chaos values for every metric to best challenge all departments +on the station. For instance many new anomolies will keep science busy and potentially annoy other players. But anomolies won't +tax security the same way traitors or spiders would. + +Obvious metrics, where a perfect station has chaos of 0 and it increases as things get messy: +- Hunger +- Thirst +- Anomaly +- Death +- Medical +- Security +- Power +- Atmos +- Mess + +Combat metrics: +- Friend - negative to represent how many friendlies are alive on the station +- Hostile - Score for all antags and monsters +- Combat - Friend + Hostile. <0 if crew is strong. 0 if balanced (fighting). >0 indicates crew is losing. + +## Story - Determines a series of Chaos Goals + +Stories are composed of StoryBeats and determine the Chaos Goals over a 15-30 minute period within a round. + +Beats generally last 5 minutes each, though they might end early if chaos hits certain thresholds. +These are called `endIfAnyWorse` and `endIfAllBetter`, useful if there is too much war, or perhaps too much peace. + +Once a story beat has ended, the director will move to the next beat in the story. Once a given story has finished, the +director will pick one of its stories at random to start. + +Player experience in SS14 should have both its highs and lows. A peaceful extended shift can become boring with no challenges +to overcome together. An overly intense battle might kill half the crew and leave the station in disorder that we cannot recover from. +What we want is a middle ground with some variation. + +The ideal story has a mix of both, with order followed by disorder and then a chance to recover and rebuild. We want variety with +pleasant cycles in intensity potentially building towards an overall climax as the round progresses. + +### Dynamic Game Modes: + +Each game mode preset specifies which stories will run and so determines the tone for the experience created by +the director. + +The number of stories and story beats is quite small right now, as we add more content to the game we will also expand +the range of stories followed by the director to increase the tonal variety between rounds. + +#### CombatDynamic +Contains combat stories and so will create a station with some fighting +- **RelaxedAttack** - Peace -> AttackMild -> EngineeringIssues +- **ScienceAttack** - Peace -> MadScience -> AttackMild -> Peace -> EngineeringIssues -> RepairStation +- **MajorCombat** - Peace -> AttackMild -> EngineeringIssues -> Attackers -> RestoreOrder -> RepairStation -> Peace + +#### CalmDynamic +More like an extended round, has a balance of minor chaos events +- **Relaxed** - Peace -> AttackMild -> EngineeringIssues +- **Science** - Peace -> MadScience -> Peace -> EngineeringIssues -> RepairStation + +### Story Beats +Some beats deliberately drive moderate or high chaos for a period of time. Others bring specific types of chaos to near +0 to encourage the director to pick helpful events until the station is moderate again. + +The hostile story beats tend to end if the station chaos rises too high. The recovery ones end if the chaos drops low +enough. By incorporating both into a story we can expect some hostile events, a period of chaos followed by positive +events and a period of recovery. + +- **Peace** - Minor Chaos across a wide range +- **PowerIssues** - Create high engineering chaos +- **MadScience** - Create high Science chaos +- **Attackers** - Drive high combat +- **AttackMild** - Drive medium combat +- **RestoreOrder** - Send help to quell disorder on the station +- **RepairStation** - Repair that station + +## Metrics - Estimate the existing chaos on station + +A number of systems called "Metrics" are used to summarize the chaos levels. Metrics each stand alone and so it will be +easy to add or remove them as the game matures. + +Metrics could subscribe to relevant events and dynamically adjust their scores as events occur on the station. Or they +can do a single pass through the component system when run. The single pass approach has been preferred in favor of its +stability and simplicity for now. + +#### Metrics at the moment +- **AnomalyMetric** - Are there many? Are they out of control? Writes to "Anomaly" +- **CombatMetric** - Who is on the station? How injured are our friends? Writes to "Hostiles", "Friendlies", "Death" and "Medical" +- **DoorMetric** - Uses doors as a proxy to surveying the ship for danger. Writes to "Security", "Atmos" and "Power" +- **FoodMetric** - How hungry are the friendly crew? Writes to "Hunger" and "Thirst" +- **PuddleMetric** - How messy is the station (partially as a proxy for safety). Writes to "Mess" + +I expect that as we describe a situation we want the Director to react to we will introduce further metrics to give us +richer insight into the station. We might want trust metrics based on how many traitors there are. Or staff / department +metrics based on staffing issues and role deaths. + +## Events - Have a predicted effect on chaos + +How do we describe what an event does? + +Events have a metric called "Chaos" which describes different types of negative effects they bring to the station. +Good events cause negative chaos. + +If our chaos estimates for each event are accurate, the game director can easily control chaos by picking the best events +for the current story beat. + +### Negative events increase chaos +SpiderSpawn: + - Hostiles: 40 - New hostiles are introduced + - Friends: 20 - Friends are likely to die + - Medical: 150 - Medical will have wounds to heal + +### Positive events reduce chaos +PizzaPartySmall: + - Hunger: -80 - The pizza party satisfies hunger + - Thirst: -40 - And also thirst + +## Game Director - Pick best Event to achieve story Metrics + +Each of the **story beats** from above has a matching chaos level, specifying factors that we care about at that point +in the story along with target values for those **Chaos factors**. + +Once we know what **Chaos metrics** we currently attempting to achieve, we have a chance to select the correct event. + +- The **Story Beat** has told us what chaos we want. +- The **Metrics** tell us what chaos the station currently has. +- Each **StationEvent** has a Chaos field predicting that event's impact + +So we iterate through all the possible events, choose the one which moves the station chaos nearest to our goal and set +that event into action. Simple! + +The whole process is richly logged into the admin log (under GameDirector) so the admins have insight into what the director +is attempting to achieve. + +# Conclusion + +The Game Director system will allow us to author specific experiences that are gated on how chaotic the station has become. + +The more events we introduce to the game with clear chaos outcomes, the better the system will be at guiding the station +through a specific narrative experience. + +The data driven nature of the metrics and story data means that a wide variety of narrative outcomes and station-specific +events can all be achieved through the same system. \ No newline at end of file diff --git a/src/en/proposals/genpop_security.md b/src/en/proposals/genpop_security.md new file mode 100644 index 000000000..5c6b02e89 --- /dev/null +++ b/src/en/proposals/genpop_security.md @@ -0,0 +1,55 @@ +# Genpop Security +By ike709 with heavy inspiration from [AndrewMontagne & OracleStation 13](https://github.com/OracleStation/OracleStation/pull/419) + +## Design Goal + +This is a proposal to redesign the flow of throwing criminals in the brig and their subsequent release. Right now prisoners who aren't permabrigged usually have nothing to do during their sentence except hurry up and wait, and security officers usually have no reason to interact with the prisoner until their time is up and they need to be escorted out of security. + +## Current Brig Experience + +The current experience for brigging criminals looks something like this (your mileage may vary by map): + +1. Criminal is arrested by security officer. +2. Criminal is brought to security and strip-searched. +3. Depending on the severity, the criminal is thrown into either an individual brig cell for a few minutes (which is the case for most criminals) or into the permabrig area which (depending on the map) usually allows permabrigged prisoners to interact and/or do things like gardening. +4. When a non-permabrigged prisoner's time is up, the cell door opens and they can collect their belongings, but they are still trapped in the security department due to airlock access until someone lets them out. + +## Turnstiles + +Turnstiles are a key feature in the new brig experience that I'm about to propose. Turnstiles are effectively one-way airlocks, allowing travel only in one direction while still allowing mappers or engineers to set normal airlock access requirements to move through them. Here's what they look like on Oracle, including the mapper overlay to show which direction players can move. + +![turnstile](https://i.imgur.com/QStUhoA.png) + +In this example a player with the relevant access requirements can only move from the north side to the south side of the turnstile. Even ignoring the rest of this design document, turnstiles would still be useful for things such as putting an exit in medbay or being able to leave the disposals room in maintenance. + +## Proposed Brig Experience - Genpop + +I propose that we completely nuke individual brig cells. All prisoners will now be thrown into a large secure area similar to the permabrig (called "genpop") where they can intermingle, kill eachother, or perform various other mapped-in activities like play arcade games or do basic botany. + +Here's an example from OracleStation. Note the turnstiles, the prisoner processing room in the lower part, and the actual genpop prisoner area in the upper part (ignore the armory in the bottom left): + +![genpop](https://user-images.githubusercontent.com/202160/35178888-91bb7eb6-fd87-11e7-9040-15a6ef93602c.png) + +I highly recommend taking a look at the [OracleStation pull request](https://github.com/OracleStation/OracleStation/pull/419) as it has gifs for most of the things I'm about to describe with words. + +This is what the new experience for brigging criminals would look like: + +1. Criminal is arrested by security officer. +2. Criminal is brought to security and strip-searched. +3. Criminal is given a prisoner ID with their name & the length of their sentence. This ID's access is required to pass through the "entrance" turnstile into genpop, to ensure the security officer processed them correctly. +4. Criminal is thrown into genpop with all the other prisoners via the "entrance" turnstile, regardless of their crime severity. Individual brig cells and a separate permabrig no longer exist. +5. The criminal's turnstile access is tied to their prisoner ID. Once their sentence has elapsed, they will now have access on their prisoner ID to pass through the "exit" turnstile from genpop back into the processing area. This means they can leave genpop with no intervention from security officers. +6. The criminal can retrieve their possessions from the locker in processing using their prisoner ID. +7. Using turnstiles, the criminal is able to exit genpop, processing, and the main security department entrance without needing a security officer to open doors for them. + +## Gameplay Implications + +Here's a non-exhaustive list of impacts these changes can have on gameplay, in no particular order: + +- Players no longer need help opening airlocks to exit security when their sentence elapses +- Players now have things to do while they are brigged, whether it's ~~killing~~ interacting with other prisoners or the items/machines mapped in genpop +- Players could escape early by stealing or trading eachother's prisoner IDs +- Wardens are now incentivized to actually keep an eye on the brig and its prisoners to prevent fights/prison breaks/shenanigans +- The brig effectively no longer has a prisoner capacity limit, as individual brig cells are no longer needed +- Security officers can pass through genpop turnstiles at will with their ID access, allowing them to enter/exit genpop without prisoners tailing them to escape + diff --git a/src/en/proposals/grid-inventory.md b/src/en/proposals/grid-inventory.md new file mode 100644 index 000000000..26b7a4015 --- /dev/null +++ b/src/en/proposals/grid-inventory.md @@ -0,0 +1,69 @@ +# Grid Inventory +**Authors:** EmoGarbage + +Credit to the SS13 server Fields of Fire, whose inventory overhaul served as inspiration for the UI. + +## Abstract + +Grid inventory is intended to be a replacement for the current inventory backend and UI. +It encompasses both an internal rewriting of storages, wherein they are classified by geometric shapes, as well as a redesign of the UI, aiming to translate the internal logistics of the system in an immediately understandable way. +Under the system, storages will consist of grids made up of tiles and items will be small items that can be moved around and fit into the grid. + +## Storage Pains + +Laying out what's wrong with the current storage system is important, because inventories--and for the purpose of this document, inventory refers to any given storage container, not the players' hands and clothing HUD--fail in subtle and unexpected ways. +The failures can be divided largely into two categories, mechanical and visual, and both show the unique ways in which a core system can underperform and in turn erode more central mechanics. + +In terms of the mechanical failings, those which call for the rewriting of the core of the system, the most evident is the inability to represent objects of unorthodox or strange shape. +Whether it be a numerical size or an enum, it is impossible to communicate the spacial properties of something like a broom or a life preserver. +Inventories cannot be long and thin or made up of many smaller sections. +There is a lot of genuine interest in nuance in the problem of storing an object: it exists as a microcosm of greater questions of the value of what you carry and if it can be stored in an efficient manner. +As the system exists currently, the "efficiency" of storage is not a concept that can be explored, which is a shame. + +On a more surface level, the presentation and interactions of a list inventory is also laden with issues. +By existing as an infinitely scalable list, containers are forced to express the sizes and capacity numerically, relying on exposing objectively meaningless numbers in order to communicate scale. +Furthermore, lists are bad at displaying images at a scale that is easily understood (due to their properties of being scalable) and thus rely on things like text, which simply saturates what should be a very simply HUD element with lots of text and numbers. +Lists are also frequently used to fill up large chunks of the screen, which genuinely looks terrible. + +Ideally, a perfect storage system should not only be able to handle weird sizes and shapes of containers and items alike, but also visually convey this in a way that is immediately able to be understood by a new player without being overly reliant on text and numbers. + +Thing goes in bag is simple: it should feel simple to do. +It should never feel sprawling or overwhelming or like you're scanning your screen for crap. + +## Grid Inventory + +Our solution? A to-scale HUD element that can represent uniquely shaped item's as well as display the size of things in an immersive and immediately understandable way. + +![](../assets/images/grid-inventory/in-game.png) + +### Items + +Items in grid inventory are a deviously simple. +They retain the ItemSize enum from the current system, but gain an additional `inventory shape`. +This is just the shape the item takes up in the grid and it additionally serves to codify the hidden weight mechanics of the current inventory in a more intelligent way. +Rather than tiny items having a weight value of 1, they simply take up a single square. +Items would have reasonable default sizes inferred from the current weight values of items with an optional specifier for other custom shapes. + +![](../assets/images/grid-inventory/shape-examples.png) + +Inside of the inventory, you'd be able to manually move around and rotate items, allowing gaps to be filled and space optimized with proper planning. +You'd also be able to intuit how much of the inventory an item fills from a simple glance, since the volume is of the container is represented visually. + +### Storage + +![](../assets/images/grid-inventory/grid-example.png) + +For the most part, storages exist as literal translations of the current values. +A 28 capacity simply becomes a 7x4 box. +In terms of balance, the numerical values of the different items and storages remains the exact same. +The only difference is having to place the items into the bag and organize them to potentially make room. + +Of course, putting an item in your bag will automatically try and orient it within the grid, not allowing it only if there's no room for it to fit. +This means there's an equal measure of convenience in terms of picking items quickly, only being a hindrance when trying to fit an unwieldy object. + +The hotkeys for quickly taking items in and out of bags will remain identical, simply remembering the order of inserted items and taking them out in the reverse order. + +### A Brief Aside About Slots + +For slot-based storage, like belts, the UI will remain the same, but simply with standardized item sizes. +A 7 slot belt is a container with 7 squares and every item takes up only a single square. This loses out on the benefits of the scaling, but it integrates well enough and conveys the same information as the previous system, so it's kinda moot. \ No newline at end of file diff --git a/src/en/proposals/pda-messaging.md b/src/en/proposals/pda-messaging.md new file mode 100644 index 000000000..8766a2fb1 --- /dev/null +++ b/src/en/proposals/pda-messaging.md @@ -0,0 +1,109 @@ +## PDA messaging program and server + +[Julian, VasilisThePikachu, Unapproved] + +*(Taken by [Julian doc](https://hackmd.io/iu2yK9bcQb-veuCOLl-FYw?both#Optional-Channels-and-Department-based-Channels) in hackmd and modified a lil. Mostly replacing "email" to "message", "Email address" to "user/user id" and adding some of my own twists. Julian was fine with this if i understood correctly (i was in vc with em))* + +*(This is mostly taken from how PDA messages work in ss13)* +Allows sending messages to others using PDAs + +### What this adds and why +Simple, Messaging via the PDA! +Messaging someone via the PDA should be made when you need to get the attention of a special someone. Example as HoS you want to ask detective to come over to investigate an item. It's easier to get their attention cause of their PDA vibrating then hoping they are monitoring their channel. Another usage is the heads planning Captain a suprise birthday party. Something like that would require all heads getting together in one place. + +This is **not** a replacement to the radio channel. Theres no "common" channel, it would be easier to spoof being someone (just need their id), past messages on that same id can easily be exposed and its far more cumbersome to message someone over PDA then just using the radio. + +### Message storage +Messages are stored on a server most likely will be stored in telecoms. There can be one server per station, others on the same station won't be used unless the first one loses power or gets destroyed. + +*Optional* The active server synchronises itself with all of the inactive servers on the same station (This happens inside the system directly, no device networking here). + +### One active / Multiple inactive server model + +(This talks about some refactor stuff and Julian told me they forgot to paste the link, im keeping it to be safe in case its actually useful.) + +The one active / multiple inactive server model uses the system that will get refactored into its own system from the crew monitoring server [link text]() + +The messaging client system will use the `GetActiveServer` method of the message server system to retrieve the active server if the client doesn't have a server set yet or that server timed out. *This is also from the system that gets refactored out.* + +### Sending and receiving messages + +When sending a message to someone via the program the PDA sends the message together with an 'user id' to the server and the server will send the message to the target device. Of course there will be a character limit (say... 100 characters?) + +When a PDA recieves a message it plays the PDAs ringtone and vibrates, showing the sent message on the chat. This message can also be viewed on the PDA via a program. + +Notifications can be disabled if desired. + +This user id could be generated into the ID card so that if you get a new PDA your messages are kept as long as you are using the same ID card. Late joiners will get assigned a uid when they arrive on the station. Potencially HoP or RD can move your UID to the a new ID card with the ID comnputer rendering the old ID card useless. This can also prevent powergaming by someone changing their UID to see others messages. + +This UID will receive messages for as long as it is in the station and in a PDA. + +If its not in station the messages can either fail to send or be added in a queue to be sent when it reenters the station. + +Since the UID is stored on the ID. That means that if you manage to get your hands on someones ID you can chat as them and potencially (if added) read their messages. + +### Users list + +When opening the PDA messaging app, you will be able to start a chat session with everyone connected to the server (aka everyone with a PDA) + +They will be listed by name and job title like this "Vapor-Tail (Captain)" + +*Optional* Add the ability for people to not be allowed to initiate a conversation with an option. This can be useful for high command staff like captain from getting message spammed by clown and others at the start of the shift. + +### Optional: Detomatix PDA Cartridge + +(find the original item in the tg wiki here: https://tgstation13.org/wiki/Syndicate_Items) + +The detomatrix is... a zip bomb in easy to say terms. Allowing you to send a spoofed message that when opened by the target fast enough bricking the PDA and its ID (instead of exploding... even though thats funnier maintainers please allow this) + +It will have a chance to fail and have an even lower chance of working on "high profile" PDA's like the Captains. + +It could be used as a way to get people to turn off their messanger function in fear to not being up next if someone screams in radio about it and could be useful. + +### Optional: Multiple network support + +The server is able send on the wireless and the wired network because it saves what network the registered devices are on along with the user id and the network address. + +This requires devices to be able to register themselves with two device net ids at once (which should only be done if it is really needed). + +### Optional: Channels and Department based Channels +Channels are special groups that relay the messages sent to them to users who are subscribed to that channel. + +Channels can be created and they can be deleted by the channel creator. + +When registering to a server the client also sends the job of the inserted ID so the server can put them into special department channels. + +Department channels can't be joined, left or deleted. + +### Optional: RDs messager admin management console +The research director and potencially Captain get a console which connects to the message server via device net that can be used to view and manage all messages and groups. +It uses device net with an `AccessComponent` on the message server so the management functions can be hijacked by traitors that got their hands on an ID card with the right access. (This requires [device net access restrictions](https://hackmd.io/gPjP95_zRUiT-bX4hKxE6w) to be implemented. + +### Optional: pAI as a chat assistant. +This will add new gameplay for the pAI ghost role. Allowing the pAI to chat as their master on their behalf. Could have a little pAI icon in the chatbox to show it was sent by the pAI and not the actual player. pAI's for a while have been kinda boring and may deserve their own design doc of ideas but this is one of my ideas that come to mind. + + +### Concerns +When initially asked about this I was met with some concerns. This section is to address them + +Discord discussion start: https://discord.com/channels/310555209753690112/310555209753690112/1160244698112327830 + +##### Why PDA messaging over plain radio? Would this upset radio balance and reduce coms over radio? +First of all why: +If you play the game you can quickly realise how getting someone's attention god forbid multiple, can be... not an easy task to say the least. You either are lucky and the person you want is just so happening to be monitoring the chatbox or they are busy and not paying attention. In the end missing your message until you resend it or try to look with them. This is just not fun and is just annoying. PDA messaging can solve this. + +As to if it will upset radio balance: Highly unlikely it will be. Mostly cause: +1. PDA messaging wont let you get the attention of multiple people at once (common). PDA messaging can reach one person at the time (unless we get department groups but even then). You will have to jump through a lot of hoops if you JUST wanna use messaging. Radio is easier and faster to talk into and gets to multiple people at once. +2. Sending a PDA message is more of a chore then just using the radio channel, PDA messaging will at least need a minimum of 6 steps to open the PDA, go to the app section, start the app, find the person, write the message and send. And if you keep the chatbox on it would just take up a good chunk of your screen. Or you could just do ":c Captain hamlet ate uranium" +3. Messages are stored and logged. Someone steals caps PDA? Well now all of their messages are up on display. With radio unless they had command channel already they would never learn of any past messages. If two syndies decide to use PDA messaging rd can just grab their chatlogs. Same with syndies using it to communite with others. +4. PDA messaging has a pretty small character limit, if you wanna say something long radio is the place. + +May be the wrong section but admins can also use this to act as "Central Command" so instead of having to subtile message someone they can just send a message to their PDA. + +##### It reduces everyone else's situational awareness since people can't see all radio messages anymore. +I highly disagree, I doupt it will reduce situational awareness more then it already is. I have already went over how someone monitoring the radio channel for messages directed to them is already a chore. PDA messaging names can easily be changed by using someone elses ID therefore its a good idea to not go to maints like they told you to and instead show the message to security. + +##### Why not use fax? +Is this really a question? First of all not everyone has a fax, second you have to be close to hear it go off printing. And unless you check your fax periodicly for new faxes messages can be missed. And even if you do check it its probably boykisser ASCII spammed 10 times. Also why are we using *faxes* in 2563 or whatever year SS14 takes year in. + +These were all the conserns I could find from discord. diff --git a/src/en/proposals/proposal-template.md b/src/en/proposals/proposal-template.md new file mode 100644 index 000000000..c22ae575e --- /dev/null +++ b/src/en/proposals/proposal-template.md @@ -0,0 +1,24 @@ +# Short, Properly Capitalized Title + +Your title should convey the basic jist of your proposed changes. It should be short because the text will be linked in the sidebar. + +**Authors:** foo, bar + +The names that you use on GitHub and/or Discord. This is optional but strongly recommended, since: + +- This acknowledges credit where it is due +- People who are confused about the written intent can use this information to contact the authors + +## Abstract + +A very short, maybe three sentence summary of what this proposal is about. A high level "overview" or "what this adds". + +## Background + +Summarize any information that is needed to contextualize the proposed changes, e.g. the current state of the game. + +Also link any relevant discussions on Discord, GitHub, or HackMD that are relevant to the proposal. + +## The rest? + +Is entirely up to you. diff --git a/src/en/robust-toolbox/ecs.md b/src/en/robust-toolbox/ecs.md index 9602539fb..abe8ef810 100644 --- a/src/en/robust-toolbox/ecs.md +++ b/src/en/robust-toolbox/ecs.md @@ -96,7 +96,7 @@ flowchart TD ```mermaid flowchart TD - subgraph Cofee Maker Machine + subgraph Coffee Maker Machine Damageable; PowerReceiver; SolutionContainer; diff --git a/src/en/robust-toolbox/publishing-robusttoolbox.md b/src/en/robust-toolbox/publishing-robusttoolbox.md new file mode 100644 index 000000000..137703d2d --- /dev/null +++ b/src/en/robust-toolbox/publishing-robusttoolbox.md @@ -0,0 +1,24 @@ +# Publishing RobustToolbox + +```admonish info +These instructions are a step-by-step guide for engine maintainers to follow. +``` + +1. Open a terminal in the RobustToolbox directory (`cd RobustToolbox` if you are in the space-station-14 directory) +2. Fetch latest master (`git fetch https://github.com/space-wizards/RobustToolbox.git`) +3. Checkout the remote master branch (`git checkout -B master upstream/master`, WITH capital 'B' to overwrite master) + - This step will overwrite your local `master` branch with the remote one. +4. Run version.py (`python ./Tools/version.py 0.1.0`, where 0.1.0 is the version number you want, WITHOUT 'v') + - If you use `py` instead on Windows it might not work due to the python microsoft store alias. +5. Push your commit and tag to RobustToolbox (`git push` and `git push https://github.com/space-wizards/RobustToolbox.git v0.1.0`, WITH 'v') + - Do NOT run `git push --tags` as that will push every tag you have locally, even those that have been deleted. +6. Go back into the content directory (`cd ..`) +7. Checkout a new branch (`git checkout -b update/robust-0.1.0`) +8. Commit the engine change (`git commit RobustToolbox -m "Update RobustToolbox"`) +9. Push your branch (`git push`) +10. Open a PR to the content repository and merge it. + +```admonish warning +It is always a good idea to run the game with the new engine version before publishing it and merging the PR, to check that everything still works. +You can also run tests locally with "dotnet test" as that will be faster than waiting for them to run on the GitHub workflows. +``` diff --git a/src/en/robust-toolbox/serialization.md b/src/en/robust-toolbox/serialization.md index c8f8bed45..252d69741 100644 --- a/src/en/robust-toolbox/serialization.md +++ b/src/en/robust-toolbox/serialization.md @@ -1,6 +1,4 @@ # Serialization -For everything in this article: If you dont understand a certain topic, if you have suggestions for improvements, if you have any questions/inquiries at all, ping Paul#7955 (me) on discord. I'm happy to help :) - ## The API Each API-Surface (excluding Composition) of the SerializationManager has a generic variant, as well as a boxing variant. Additionally, each has two more generic methods for directly invoking TypeInterfaces, one where you can provide the instance used, and another where you'll just need to provide the type and the manager will take care of fetching an instance to use. @@ -22,7 +20,6 @@ Can be used to provide a context instance if you so wish to. See [SerializationC All APIs also provide you with a `bool` parameter called `skipHook`, which can be used to skip invoking methods implemented using the `ISerializationHook` interface. **Take note however, this parameter is due to be deprecated.** This parameter is not available in Write,Validate and Composition-APIs! ### Read - When reading, you will have to provide: - A type, either as generic type argument T or as the type parameter in the boxing variant - A DataNode to read (duh) @@ -53,13 +50,11 @@ If CopyTo fails to copy into the target object, it will override it using a call Here, composition is pushed across nodes using definitions associated to the type passed. This means that the type you pass determines how the datanodes you provide will be merged together. Currently, there is only a very limited amount of methods to customize this behaviour, especially on DataFields. However, we are working on it! ## Data Definitions - DataDefinitions are Structs or Classes with Field/Properties annotated to be DataFields. These DataFields are written and read to and from yaml, but are also used for copy, validation & composition operations. Going forward, i will simply refer to structs & classes as a "type". Data definitions must have a parameterless constructor in order to be valid. (With the exception of [DataRecords](#dataRecords)) ### Declaring a DataDefinition - ```admonish note There exists no risk in declaring a DataDefinition with multiple of these options at once. The duplicate registrations will simply be reduced so a single one. ``` @@ -67,7 +62,6 @@ There exists no risk in declaring a DataDefinition with multiple of these option `DataDefinition`s must be declared `partial` in order to work with our source generator for copying. #### Directly - To make a class become a DataDefinition, you can add a [DataDefinition] attribute to the type like so. ```csharp [DataDefinition] @@ -110,20 +104,34 @@ public sealed class PrototypeAttribute : Attribute { ### DataFields #### Types of DataFields ##### Regular -Any property or field or property on a data definition can be annotated with a [DataField] attribute. In the following, both properties and fields will simply be referred to as "field". -This attribute accepts a string key which will be used to define the key in YAML. +Any field or property on a data definition can be annotated with a [DataField] attribute. +In the following, both properties and fields will simply be referred to as "field". ```csharp -[DataField("color")] +[DataField] protected Color Color { get; set; } = Color.White; ``` -The examples above would translate into YAML like this: +The example above would translate into YAML like this: ```yaml color: White ``` +This attribute accepts an optional string key which can be used to define the key in YAML, instead of the camel-case version of the field name. +**If one is not needed, it is preferred to not specify one.** + +```csharp +[DataField("colorValue")] +protected Color Color { get; set; } = Color.White; +``` + +The example above would translate into YAML like this: + +```yaml +colorValue: White +``` + ##### Include DataField A DataDefinition gets written into and read from a MappingDataNode. Other than the regular datafield, the Include DataField will not get a value from a key of that MappingDataNode to read/write from/to the field, but will instead use the MappingDataNode of the entire DataDefinition to perform its read/write-operation. This has specific implications on writing specifically: IncludeDataFields get serialized last, and the produced mapping will be inserted into the mapping of the datadefinition that was already produced. If a key already exists, the new value produced by serializing the IncludeDataField will be ignored. @@ -132,13 +140,8 @@ This has specific implications on writing specifically: IncludeDataFields get se This behaviour might become configurable in the future. ``` -#### Custom Type Handler - -```admonish info -Don't be confused by the type handlers sometimes being called type serializers. This is an artifact from the old times and will soon be removed/renamed. -``` - -A custom type handler can be specified if one doesn't exist by default or custom behavior is needed to serialize a specific type. To use one, pass it through the customTypeSerializer argument. +#### Custom Type Serializer +A custom type serializer can be specified if one doesn't exist by default or custom behavior is needed to serialize a specific type. To use one, pass it through the customTypeSerializer argument. Both the DataField and IncludeDataField support custom type interfaces, but only the DataFieldAttribute is used in the following examples to make them a tad less bloaty. ```admonish warning @@ -147,7 +150,7 @@ Any other behaviour that wont differ from the normal one does not need to be red ``` ```csharp -[DataField("drawdepth", customTypeSerializer: typeof(ConstantSerializer))] +[DataField(customTypeSerializer: typeof(ConstantSerializer))] private int DrawDepth { get; set; } = DrawDepthTag.Default; ``` @@ -171,7 +174,7 @@ public sealed class DrawDepth public sealed partial class SpriteComponent { - [DataField("drawdepth", customTypeSerializer: typeof(ConstantSerializer))] + [DataField(customTypeSerializer: typeof(ConstantSerializer))] private int DrawDepth { get; set; } = DrawDepthTag.Default; } ``` @@ -189,7 +192,7 @@ public sealed class CollisionLayer {} public sealed partial class PhysShapeRect { - [DataField("layer", customTypeSerializer: typeof(FlagSerializer))] + [DataField(customTypeSerializer: typeof(FlagSerializer))] private int CollisionLayer { get; set; } } ``` @@ -205,14 +208,9 @@ Two additional attributes may be used on a datafield to define how it is inherit TODO -## Type handler - -```admonish info -Don't be confused by the type handlers sometimes being called type serializers. This is an artifact from the old times and will soon be removed/renamed. -``` - -The type handler interfaces are a collection of interfaces for defining custom logic for actions on specific types. Sometimes, the expected node type will also be specified. -A class implementing at least one of these type handler interfaces is referred to as a type handler. If you want your type handler to *always* be used, you can annotated it with the `[TypeSerializer]` attribute. Otherwise, the type can be used as a [custom type handler](#custom-type-handler). +## Type serializer +The type serializer interfaces are a collection of interfaces for defining custom logic for actions on specific types. Sometimes, the expected node type will also be specified. +A class implementing at least one of these type serializer interfaces is referred to as a type serializer. If you want your type serializer to *always* be used, you can annotated it with the `[TypeSerializer]` attribute. Otherwise, the type can be used as a [custom type serializer](#custom-type-serializer). **The static IoCManager.Resolve should not be used as the serializer might be running on a separate thread without an initialized IoC context.** diff --git a/src/en/server-hosting/maintenance/debugging-server-lockups.md b/src/en/server-hosting/maintenance/debugging-server-lockups.md new file mode 100644 index 000000000..b8cb3dd37 --- /dev/null +++ b/src/en/server-hosting/maintenance/debugging-server-lockups.md @@ -0,0 +1,234 @@ +# Debugging server lockups + +If `SS14.Watchdog` detects that your server has locked up, it will kill the server and restart it. If this happens for real on a live server, a chance of just looking at logs is out of the window. This guide will give a quick 101 for how to approach debugging this kind of issue. + +```admonish info +Just to be clear: you may get a similar error if the game server can't reach the watchdog due to misconfiguration, in which case the game server will reliably get killed after startup, on loop. This article is not about that, this is about a genuine, real-nasty crash bug. +``` + +## Background: Watchdog Pings + +The watchdog expects the game server to send it regular *ping* messages to indicate that the game server is still alive. The game server sends these pings at a regular interval of 15 seconds (currently unconfigurable, what was past me thinking), and the watchdog expects one at least every *`TimeoutSeconds`* in the instance configuration. If the game were to get stuck in an infinite loop of some kind, it would cease to send these pings and the watchdog would quickly kill it and restart it. + +## Alright, so what have we got? + +If you want to trigger this real easy, connect to your server and run something like this in `scsi`: + +![scsi prompt about to run 'while (true) { }'](../../assets/images/hosting/scsi-while-true.png) + +Expanding the log excerpt from above, we have something like this: + +``` +[WARN] net.ent: Got late MsgEntity! Diff: -12, msgT: 0, cT: 12, player: PJB +[WARN] eng: MainLoop: Cannot keep up! +[22:50:20 WRN SS14.Watchdog.Components.ServerManagement.ServerInstance] test: timed out, killing +[22:50:20 INF SS14.Watchdog.Components.ServerManagement.ServerInstance] test: making on-kill process dump of type Normal +[createdump] Gathering state for process 91738 Robust.Server +[createdump] Writing minidump to file /home/luna/ss14_watchdog_test/instances/test/dumps/dump_2023-10-24_22-50-20 +[createdump] Written 120233984 bytes (29354 pages) to core file +[createdump] Target process is alive +[createdump] Dump successfully written in 306ms +[22:50:20 INF SS14.Watchdog.Components.ServerManagement.ServerInstance] test: Process dump written to /home/luna/ss14_watchdog_test/instances/test/dumps/dump_2023-10-24_22-50-20 +[22:50:20 INF SS14.Watchdog.Components.ServerManagement.ServerInstance] test: killing process... +[22:50:21 INF SS14.Watchdog.Components.ServerManagement.ServerInstance] test shut down with status ProcessExitStatus { Reason = ExitCode, Status = 137, IsClean = False } +[22:50:21 WRN SS14.Watchdog.Components.ServerManagement.ServerInstance] test shut down before sending ping on attempt 1 +[22:50:21 INF SS14.Watchdog.Components.ServerManagement.ServerInstance] test: Restarting server after exit... +``` + +```admonish info +If you're even reading this page I hope you have enough experience hosting a server to know this, but just to be clear: those two `[WARN]` messages are **not it**. +``` + +The game server itself produced no meaningful logs (as it rarely does in a case like this), all we got to go by is the watchdog killing us. Luckily, the watchdog is configured by default to make a **core dump** of the game server process if it has to kill it, and listed the path dumped to in the log output. + +What is a core dump? It's a file that contains the memory of the process when it crashed. By default, this dump includes enough memory to get stack trace information using a debugger. If you want more, you can change the `TimeoutDumpType` property on the watchdog instance configuration to [one of these values](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/microsoft-diagnostics-netcore-client#dumptype-enum). Be warned that core dumps are quite big, and reporting more info can make them *outright huge*. + +```admonish danger +Core dumps can contain sensitive information from your server (such as database passwords) and should **not** be given to people you do not trust! +``` + +"Ok, so I have a file that weighs a couple hundred megabytes, what do I do with it? Do I drag it into Rider?" Oh you sweet summer child. + +You have two options that I know of to debug this: lldb and WinDBG. One of those is a command-line debugger. The other is a command-line Windows debugger that at least has the courtesy of having a basic UI. Hey, at least you don't need to use gdb! + +```admonish failure +Core dumps are fragile little beings, and by default do not include all the context needed to debug something on their own. In general, it is by far the easiest to debug them if you're debugging them on the system they happened on, and *none of the underlying files changed*, e.g. through game server update. + +With the necessary experience and or/infrastructure (symbol servers my beloved) it is possible to handle them much later or on another system, but that's far outside of the scope of this tutorial and even I don't have experience with that.[^2] +``` + +### Using lldb + +lldb is a decent[^1] debugger for Linux and macOS. Install it: + +```sh +# Or whatever package manager you use 🤗 +$ sudo apt install lldb +``` + +You will also need [SOS](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/sos-debugging-extension). This will extend lldb to make debugging a .NET trace possible: + +```sh +luna@Mimas:~/ss14_watchdog_test +$ dotnet tool install -g dotnet-sos +You can invoke the tool using the following command: dotnet-sos +Tool 'dotnet-sos' (version '7.0.447801') was successfully installed. +luna@Mimas:~/ss14_watchdog_test +$ dotnet sos install +Installing SOS to /home/luna/.dotnet/sos +Creating installation directory... +Copying files from /home/luna/.dotnet/tools/.store/dotnet-sos/7.0.447801/dotnet-sos/7.0.447801/tools/net6.0/any/linux-x64 +Copying files from /home/luna/.dotnet/tools/.store/dotnet-sos/7.0.447801/dotnet-sos/7.0.447801/tools/net6.0/any/lib +Creating new /home/luna/.lldbinit file - LLDB will load SOS automatically at startup +SOS install succeeded +``` + +Now you are ready to load the core dump into lldb: +``` +$ lldb -c instances/test/dumps/dump_2023-10-24_23-07-16 +Current symbol store settings: +-> Cache: /home/luna/.dotnet/symbolcache +-> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 +(lldb) target create --core "instances/test/dumps/dump_2023-10-24_23-07-16" +Core file '/home/luna/ss14_watchdog_test/instances/test/dumps/dump_2023-10-24_23-07-16' (x86_64) was loaded. +(lldb) +``` + +```admonish tip +You're going to want a [cheat sheet](https://github.com/carolanitz/DebuggingFun/blob/d0b21847d1ad1506bbaaded915c1625a21165b9c/lldb%20cheat%20sheet.pdf) for that `(lldb)` prompt. +``` + +At this point you have a native debugger open and you can well and truly debug everything. Hell, if the game server dies due to native crashes, this is also how you'd be debugging it. You can use regular `lldb` commands to do regular native debugging on native modules and whatever. Though it's still not for the heart and may require further setup, e.g. to get symbols for native libraries. + +For some meaningful info out of the *managed* stack trace, we can run the `clrstack` command from SOS: + +``` +(lldb) clrstack +OS Thread Id: 0x172fa (1) + Child SP IP Call Site +00007FFFD245BFB0 00007F15096C2F7B Submission#0+<>d__0.MoveNext() +00007FFFD245C000 00007F150962B9FE System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef) +00007FFFD245C060 00007F150962B940 System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].Start[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef) +00007FFFD245C0A0 00007F15096C2E92 Submission#0.() +00007FFFD245C0E0 00007F15096C2CD3 Submission#0.(System.Object[]) +00007FFFD245C110 00007F150962B06C Microsoft.CodeAnalysis.Scripting.ScriptExecutionState+d__9`1[[System.__Canon, System.Private.CoreLib]].MoveNext() +00007FFFD245C1C0 00007F150962AD2B System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.CodeAnalysis.Scripting.ScriptExecutionState+d__9`1[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__9`1 ByRef) +00007FFFD245C220 00007F150962AC50 System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].Start[[Microsoft.CodeAnalysis.Scripting.ScriptExecutionState+d__9`1[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__9`1 ByRef) +00007FFFD245C260 00007F150962AB6F Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[[System.__Canon, System.Private.CoreLib]](System.Collections.Immutable.ImmutableArray`1>, System.Func`2, System.Runtime.CompilerServices.StrongBox`1, System.Func`2, System.Threading.CancellationToken) +00007FFFD245C320 00007F150962A4CC Microsoft.CodeAnalysis.Scripting.Script`1+d__21[[System.__Canon, System.Private.CoreLib]].MoveNext() +00007FFFD245C500 00007F150962A21B System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.CodeAnalysis.Scripting.Script`1+d__21[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__21 ByRef) +00007FFFD245C560 00007F150962A140 System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].Start[[Microsoft.CodeAnalysis.Scripting.Script`1+d__21[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__21 ByRef) +00007FFFD245C5A0 00007F150962A03F Microsoft.CodeAnalysis.Scripting.Script`1[[System.__Canon, System.Private.CoreLib]].RunSubmissionsAsync(Microsoft.CodeAnalysis.Scripting.ScriptExecutionState, System.Collections.Immutable.ImmutableArray`1>, System.Func`2, System.Func`2, System.Threading.CancellationToken) +00007FFFD245C670 00007F15065AF51D Microsoft.CodeAnalysis.Scripting.Script`1[[System.__Canon, System.Private.CoreLib]].RunAsync(System.Object, System.Func`2, System.Threading.CancellationToken) +00007FFFD245C6D0 00007F15096C2BCA Microsoft.CodeAnalysis.Scripting.Script`1[[System.__Canon, System.Private.CoreLib]].CommonRunAsync(System.Object, System.Func`2, System.Threading.CancellationToken) +00007FFFD245C720 00007F15096A8336 Robust.Server.Scripting.ScriptHost+d__12.MoveNext() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Scripting/ScriptHost.cs @ 209] +00007FFFD245C800 00007F15096A79F3 System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Robust.Server.Scripting.ScriptHost+d__12, Robust.Server]](d__12 ByRef) +00007FFFD245C840 00007F15096A795C System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[[Robust.Server.Scripting.ScriptHost+d__12, Robust.Server]](d__12 ByRef) +00007FFFD245C860 00007F15096A7913 Robust.Server.Scripting.ScriptHost.ReceiveScriptEval(Robust.Shared.Network.Messages.MsgScriptEval) +00007FFFD245C8F0 00007F150658947F Robust.Shared.Network.NetManager+<>c__DisplayClass106_0`1[[System.__Canon, System.Private.CoreLib]].b__0(Robust.Shared.Network.NetMessage) +00007FFFD245C960 00007F1506587964 Robust.Shared.Network.NetManager.DispatchNetMessage(Lidgren.Network.NetIncomingMessage) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Network/NetManager.cs @ 912] +00007FFFD245CA30 00007F15059608DF Robust.Shared.Network.NetManager.ProcessPackets() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Network/NetManager.cs @ 492] +00007FFFD245CBE0 00007F15053F906A Robust.Server.BaseServer.Input(Robust.Shared.Timing.FrameEventArgs) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/BaseServer.cs @ 686] +00007FFFD245CD80 00007F1505963FA4 Robust.Shared.Timing.GameLoop.Run() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Timing/GameLoop.cs @ 135] +00007FFFD245D760 00007F150525A0F5 Robust.Server.BaseServer.MainLoop() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/BaseServer.cs @ 565] +00007FFFD245D7A0 00007F14F9729475 Robust.Server.Program.ParsedMain(Robust.Server.CommandLineArgs, Boolean, Robust.Server.ServerOptions) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Program.cs @ 78] +00007FFFD245D8E0 00007F14F971B8D2 Robust.Server.Program.Start(System.String[], Robust.Server.ServerOptions, Boolean) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Program.cs @ 46] +00007FFFD245D930 00007F14F9718901 Robust.Server.Program.Main(System.String[]) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Program.cs @ 25] +``` + +Now this we can work with! At the bottom is the program main, at the top is *`Submission#0`* which is an internal detail of the C# Interactive that we ran `while (true) { }` in. While I can't show you the IL bytes or C# code in lldb (well I'm sure the former is possible with SOS), I can show you the assembly code which looks like a pretty simple infinite loop: + +``` +(lldb) disassemble -s 0x7f15096c2f72 -F intel + 0x7f15096c2f72: nop + 0x7f15096c2f73: nop + 0x7f15096c2f74: mov dword ptr [rbp - 0x1c], 0x1 +-> 0x7f15096c2f7b: nop + 0x7f15096c2f7c: jmp 0x7f15096c2f72 +``` + +I hope this helped getting started using a native debugger on stuff like this. + +### Using WinDBG + +WinDBG is the Windows debugger you pull out when all else has failed (which it has, here). [You can get WinDBG Preview from the Microsoft Store.](https://www.microsoft.com/store/productid/9PGJGD53TN86) + +You will also need [SOS](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/sos-debugging-extension). This will extend WinDBG to make debugging a .NET trace possible: + +``` +C:\Users\Luna +> dotnet tool install -g dotnet-sos +Skipping NuGet package signature verification. +You can invoke the tool using the following command: dotnet-sos +Tool 'dotnet-sos' (version '7.0.447801') was successfully installed. +C:\Users\Luna +> dotnet sos install +Installing SOS to C:\Users\Luna\.dotnet\sos +Creating installation directory... +Copying files from C:\Users\Luna\.dotnet\tools\.store\dotnet-sos\7.0.447801\dotnet-sos\7.0.447801\tools\net6.0\any\win-x64 +Copying files from C:\Users\Luna\.dotnet\tools\.store\dotnet-sos\7.0.447801\dotnet-sos\7.0.447801\tools\net6.0\any\lib +Execute '.load C:\Users\Luna\.dotnet\sos\sos.dll' to load SOS in your Windows debugger. +SOS install succeeded +``` + +You can load the created dump file into WinDBG by going File -> Start debugging -> Open dump file, then selecting the file. If the file doesn't have an extension, you need to change the filter on the open dialog to select it. + +![Showing the navigation in WinDBG to open dump file](../../assets/images/hosting/windbg-open.png) + +You will need to run the `.load` command mentioned in the above output to load SOS: + +``` +0:000> .load C:\Users\Luna\.dotnet\sos\sos.dll +``` + +```admonish tip +You probably still want a proper cheat sheet for WinDBG Preview. It has a bit of UI, but usage of the internal command line is still very necessary. Anyways I couldn't find anything like the well-formatted lldb one in 5 seconds of searching online, so find one yourself I guess. +``` + +I won't repeat myself from the lldb side: you have a full native debugger. This can do everything, if you know how to use it. + +You can use `!clrstack` to show the managed stack trace: + +``` +0:000> !clrstack +OS Thread Id: 0x9034 (0) + Child SP IP Call Site +000000F7BF57D0F0 00007ffab591c72a Submission#0+<>d__0.MoveNext() +000000F7BF57D150 00007ffaf84334b8 System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef) +000000F7BF57D1B0 00007ffab591c642 Submission#0.() +000000F7BF57D220 00007ffab591c484 Submission#0.() +000000F7BF57D270 00007ffab4bb043c Microsoft.CodeAnalysis.Scripting.ScriptExecutionState+d__9`1[[System.__Canon, System.Private.CoreLib]].MoveNext() +000000F7BF57D330 00007ffab4bb0113 System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.CodeAnalysis.Scripting.ScriptExecutionState+d__9`1[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__9`1 ByRef) +000000F7BF57D3A0 00007ffab4bb0040 System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].Start[[Microsoft.CodeAnalysis.Scripting.ScriptExecutionState+d__9`1[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__9`1 ByRef) +000000F7BF57D3E0 00007ffab4baff72 Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[[System.__Canon, System.Private.CoreLib]](System.Collections.Immutable.ImmutableArray`1>, System.Func`2, System.Runtime.CompilerServices.StrongBox`1, System.Func`2, System.Threading.CancellationToken) +000000F7BF57D490 00007ffab4baf932 Microsoft.CodeAnalysis.Scripting.Script`1+d__21[[System.__Canon, System.Private.CoreLib]].MoveNext() +000000F7BF57D680 00007ffab4baf6a3 System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Microsoft.CodeAnalysis.Scripting.Script`1+d__21[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__21 ByRef) +000000F7BF57D6F0 00007ffab4baf5d0 System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].Start[[Microsoft.CodeAnalysis.Scripting.Script`1+d__21[[System.__Canon, System.Private.CoreLib]], Microsoft.CodeAnalysis.Scripting]](d__21 ByRef) +000000F7BF57D730 00007ffab4baf4d0 Microsoft.CodeAnalysis.Scripting.Script`1[[System.__Canon, System.Private.CoreLib]].RunSubmissionsAsync(Microsoft.CodeAnalysis.Scripting.ScriptExecutionState, System.Collections.Immutable.ImmutableArray`1>, System.Func`2, System.Func`2, System.Threading.CancellationToken) +000000F7BF57D7F0 00007ffab30cd6b6 Microsoft.CodeAnalysis.Scripting.Script`1[[System.__Canon, System.Private.CoreLib]].RunAsync(System.Object, System.Func`2, System.Threading.CancellationToken) +000000F7BF57D860 00007ffab591c3ba Microsoft.CodeAnalysis.Scripting.Script`1[[System.__Canon, System.Private.CoreLib]].CommonRunAsync(System.Object, System.Func`2, System.Threading.CancellationToken) +000000F7BF57D8B0 00007ffab58f6f0d Robust.Server.Scripting.ScriptHost+d__12.MoveNext() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Scripting/ScriptHost.cs @ 209] +000000F7BF57D9C0 00007ffab58f6606 System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[Robust.Server.Scripting.ScriptHost+d__12, Robust.Server]](d__12 ByRef) +000000F7BF57DA20 00007ffab58f657c System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start[[Robust.Server.Scripting.ScriptHost+d__12, Robust.Server]](d__12 ByRef) +000000F7BF57DA50 00007ffab58f653c Robust.Server.Scripting.ScriptHost.ReceiveScriptEval(Robust.Shared.Network.Messages.MsgScriptEval) +000000F7BF57DAE0 00007ffab30c3755 Robust.Shared.Network.NetManager.DispatchNetMessage(Lidgren.Network.NetIncomingMessage) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Network/NetManager.cs @ 810] +000000F7BF57DBA0 00007ffab265bfb7 Robust.Shared.Network.NetManager.ProcessPackets() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Network/NetManager.cs @ 439] +000000F7BF57DD70 00007ffab265acea Robust.Server.BaseServer.Input(Robust.Shared.Timing.FrameEventArgs) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/BaseServer.cs @ 683] +000000F7BF57DE20 00007ffab2670b47 Robust.Shared.Timing.GameLoop.Run() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Timing/GameLoop.cs @ 135] +000000F7BF57E5E0 00007ffab25d6685 Robust.Server.BaseServer.MainLoop() [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/BaseServer.cs @ 565] +000000F7BF57E610 00007ffaa93f24f0 Robust.Server.Program.ParsedMain(Robust.Server.CommandLineArgs, Boolean, Robust.Server.ServerOptions) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Program.cs @ 78] +000000F7BF57E6A0 00007ffaa93f12ca Robust.Server.Program.Start(System.String[], Robust.Server.ServerOptions, Boolean) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Program.cs @ 46] +000000F7BF57E700 00007ffaa93f06f2 Robust.Server.Program.Main(System.String[]) [/home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Server/Program.cs @ 25] +``` + +Same as above, again. Wow! + +I hope this helped getting started using a native debugger on stuff like this. + +```admonish note +🤫 I actually used `dotnet dump collect` to get the Windows dump because I was too lazy to set up the watchdog twice just for this article. Works the same, mostly. Hell I'm pretty sure it uses the same underlying library to create the dump as the watchdog! +``` + +[^2]: I tried to open a Linux core dump in WinDBG, which is supported to some degree... but it cried about enough missing files and other pains I gave up. Try moving your watchdog `bin/` folder out of the way and debugging a core dump with lldb... Yeah you get wildly different results huh? + +[^1]: About as good as dev tooling on Linux gets, which is not very great. diff --git a/src/en/server-hosting/setting-up-ss14-watchdog.md b/src/en/server-hosting/setting-up-ss14-watchdog.md index cce9cc001..892218ea0 100644 --- a/src/en/server-hosting/setting-up-ss14-watchdog.md +++ b/src/en/server-hosting/setting-up-ss14-watchdog.md @@ -31,8 +31,8 @@ Both of these can be found at the [.NET 6 download page](https://dotnet.microsof The following set of commands should build the Watchdog on a Linux system. You'll have to adjust it according to your actual system, of course. ``` -# Download the SS14.Watchdog repository and any submodules/etc (but not their history). -git clone --recursive --depth=1 https://github.com/space-wizards/SS14.Watchdog +# Download the SS14.Watchdog repository and any submodules/etc. +git clone --recursive https://github.com/space-wizards/SS14.Watchdog # Switch into the SS14.Watchdog directory. cd SS14.Watchdog diff --git a/src/en/space-station-14/destructible.md b/src/en/space-station-14/destructible.md index e637a33a5..96efe3def 100644 --- a/src/en/space-station-14/destructible.md +++ b/src/en/space-station-14/destructible.md @@ -39,7 +39,7 @@ public partial class DamageTrigger : IThresholdTrigger /// /// The amount of damage at which this threshold will trigger. /// - [DataField("damage")] + [DataField] public int Damage { get; set; } public bool Reached(IDamageableComponent damageable, DestructibleSystem system) @@ -60,7 +60,7 @@ public partial class PlaySoundBehavior : IThresholdBehavior /// /// Sound played upon destruction. /// - [DataField("sound")] + [DataField] public string Sound { get; set; } = string.Empty; public void Execute(IEntity owner, DestructibleSystem system) diff --git a/src/en/space-station-14/mapping.md b/src/en/space-station-14/mapping.md index 0d399d114..50962d4bf 100644 --- a/src/en/space-station-14/mapping.md +++ b/src/en/space-station-14/mapping.md @@ -1,7 +1,7 @@ # Mapping ```admonish warning -Use a release build of the game. If anything goes wrong, a release build is less likely to crash and lose the work up to your last autosave. +Use a Tools build of the game. If anything goes wrong, a Tools or Release build is less likely to crash and lose the work up to your last autosave. ``` Please refer to the page contents menu on the right to get to the section that best suits your needs. @@ -35,13 +35,14 @@ To test the map: ## With Development Environment A [development environment](../general-development/setup/setting-up-a-development-environment.md) and [Git installation](../general-development/setup/git-for-the-ss14-developer.md) are strongly recommended, so that you can keep your local mapping server up to date and submit [pull requests](../general-development/codebase-info/pull-request-guidelines.md). -### Release Build -If you are using a development enviroment instead of just hosting a local server, make sure to use RELEASE instead of DEBUG mode. This is because DEBUG adds artificial lag (making mapping unpleasant) and crashes more (having more assertions enabled). +### Tools Build +If you are using a development enviroment instead of just hosting a local server, make sure to use Tools instead of Debug/DebugOpt mode. This is because Debug adds artificial lag (making mapping unpleasant) and crashes more (having more assertions enabled). +Additionally be careful to not use Release, which disables development environment tooling and configuration and causes the game to act like a standard server instead of a development environment. If you are launching via a console, you can just use: ``` -dotnet run --project Content.Server --configuration RELEASE -dotnet run --project Content.Client --configuration RELEASE +dotnet run --project Content.Server --configuration Tools +dotnet run --project Content.Client --configuration Tools ``` If you are using an IDE, there will be some other way of setting the configuration. For example, in VS there is simply a dropdown menu: @@ -298,4 +299,4 @@ All maps should also have a docking arm in addition to the arrivals and escape d * Protrude from the station with no immediate obstructions either side of it for at least 20 tiles either side. * This is to allow large ships for events to dock with ease. -* The docking arm should have at least a 2 tile wide docking airlock to allow structures to be dragged through it easily. \ No newline at end of file +* The docking arm should have at least a 2 tile wide docking airlock to allow structures to be dragged through it easily. diff --git a/src/en/ss14-by-example/adding-a-simple-bikehorn.md b/src/en/ss14-by-example/adding-a-simple-bikehorn.md index cfdb2a398..cca2e575a 100644 --- a/src/en/ss14-by-example/adding-a-simple-bikehorn.md +++ b/src/en/ss14-by-example/adding-a-simple-bikehorn.md @@ -194,7 +194,7 @@ namespace Content.Server.Sound [RegisterComponent] public sealed partial class PlaySoundOnUseComponent : Component { - [DataField("sound")] + [DataField] public string Sound = string.Empty; } } diff --git a/src/en/ss14-by-example/basic-networking-and-you.md b/src/en/ss14-by-example/basic-networking-and-you.md index ed5b0a497..430e84b91 100644 --- a/src/en/ss14-by-example/basic-networking-and-you.md +++ b/src/en/ss14-by-example/basic-networking-and-you.md @@ -34,13 +34,13 @@ An example of all of the networking code required for IDCardComponent now, from [Access(typeof(SharedIdCardSystem), typeof(SharedPDASystem), typeof(SharedAgentIdCardSystem))] public sealed partial class IdCardComponent : Component { - [DataField("fullName")] + [DataField] [AutoNetworkedField] [Access(typeof(SharedIdCardSystem), typeof(SharedPDASystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite)] // FIXME Friends public string? FullName; - [DataField("jobTitle")] + [DataField] [AutoNetworkedField] public string? JobTitle; } @@ -323,4 +323,4 @@ This isn't going to be a super low-level overview of it or anything, but basical It's quite slow, but it's multithreaded and miles faster than the BYOND equivalent--fast enough to get us >250 players on 20 ticks-per-second, so it's good enough. -As for what this means to you and your code, note that in testing you won't receive states for entities that are too far away, and you may need to think about the special case of what happens when entities go in and out of range, though you don't usually need to worry about it. \ No newline at end of file +As for what this means to you and your code, note that in testing you won't receive states for entities that are too far away, and you may need to think about the special case of what happens when entities go in and out of range, though you don't usually need to worry about it. diff --git a/src/en/ss14-by-example/making-a-sprite-dynamic/porting-appearance-visualizers.md b/src/en/ss14-by-example/making-a-sprite-dynamic/porting-appearance-visualizers.md index 0b3fc8638..0adb3c8d8 100644 --- a/src/en/ss14-by-example/making-a-sprite-dynamic/porting-appearance-visualizers.md +++ b/src/en/ss14-by-example/making-a-sprite-dynamic/porting-appearance-visualizers.md @@ -12,10 +12,10 @@ Here's the full visualizer we're porting: [UsedImplicitly] public class ItemCabinetVisualizer : AppearanceVisualizer { - [DataField("openState", required: true)] + [DataField(required: true)] private string _openState = default!; - [DataField("closedState", required: true)] + [DataField(required: true)] private string _closedState = default!; public override void OnChangeData(AppearanceComponent component) @@ -45,10 +45,10 @@ Component: [RegisterComponent] public sealed class ItemCabinetVisualsComponent : Component { - [DataField("openState", required: true)] + [DataField(required: true)] private string _openState = default!; - [DataField("closedState", required: true)] + [DataField(required: true)] private string _closedState = default!; } ``` @@ -91,10 +91,10 @@ So it'll look like this now: [RegisterComponent] public sealed class ItemCabinetVisualsComponent : Component { - [DataField("openState", required: true)] + [DataField(required: true)] public string OpenState = default!; - [DataField("closedState", required: true)] + [DataField(required: true)] public string ClosedState = default!; } ```