diff --git a/.github/AI_POLICY.md b/.github/AI_POLICY.md new file mode 100644 index 000000000..7447421d1 --- /dev/null +++ b/.github/AI_POLICY.md @@ -0,0 +1,54 @@ +# AI Policy + +Using AI (i.e., LLMs) as tools for coding is welcome. A high bar is held for +all contributions to this project. Moreover, the project maintainers remain +responsible for any code that is published as part of a release. Contributors +are expected to be responsible for any code they publish. + +**If you use AI in any part of your contribution, you must declare it.** This +includes the model and version used (e.g. GPT-5, Claude Sonnet 4.5, Gemini 3.0 +Flash). Claiming authorship of AI-generated code is inaccurate if your role was +to prompt an AI and paste the result. Ownership implies understanding; if you +cannot explain what the code does, you did not write it. + +**If you do not understand the code you are submitting, do not submit it.** This +applies specifically to AI-generated code that you have copy-pasted without +reading or understanding. If you find yourself hoping it works rather than +knowing it works, that is a signal to stop. Open a suggestion or discussion +instead. Describe what you want to achieve, and let a maintainer or contributor +who understands the codebase implement it. A suggestion from someone unfamiliar +with the code is valuable. A pull request from them is a liability. + +This project requires a human in the loop who understands the work produced by +AI. **Autonomous agents are not allowed to be used for contributing to this +project**. Pull requests that appear in violation of this will be closed, +perhaps without notice. + +**AI should not be used to generate comments when communicating with +maintainers**. Comments are expected to be written by humans. Comments that are +believed to be written by AI may be hidden without notice. + +If you are opening an issue, you should be able to describe the problem in your +own words. + +If you are opening a pull request, you are expected to be able to explain the +proposed changes in your own words. This includes the pull request body and +responses to questions. **Do not copy responses from the AI when replying to +questions from maintainers.** + +If you wish to include context from an interaction with AI in your comments, it +must be in a quote block (e.g., using `>`) and disclosed as such. It must be +accompanied by human commentary explaining the relevance and implications of +the context. Do not share long snippets. + +AI is useful when communicating as a non-native English speaker. If you are +using AI to edit your comments for this purpose, please take the time to ensure +it reflects your own voice and ideas. If using AI for translation, we recommend +writing in your native language and including the AI translation in a quote +block. + +Senior contributors and maintainers may exercise discretion in how strictly +these guidelines apply to their own workflow, as their track record and +familiarity with the codebase speak for themselves. + +This policy was adapted from [uv's AI policy](https://github.com/astral-sh/.github/blob/main/AI_POLICY.md) and further modified by @ZypherusKhan. diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 93% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md index d9ad1a3f3..1e4c970a9 100644 --- a/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -27,7 +27,11 @@ You don’t need to get approval for every small fix or improvement, as long as - Follow the **existing code style**. - JetBrains Rider is recommended, as the editor settings are included in the repo, so they will sync automatically if used by contributors. -- Make sure your changes are consistent with the surrounding code. +- Make sure your changes are consistent with the surrounding code. + +### Use of AI + +All use of AI in contributions must follow our [AI Policy](./AI_POLICY.md). Contributions that do not comply will be closed. --- diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..d267c9fff --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,49 @@ +# Summary + + +## What type of PR is this? (check all that apply) + + +- [ ] Bug Fix +- [ ] New Feature +- [ ] Refactor / Optimization +- [ ] Documentation Update +- [ ] Other + +## Description + + +## Related issue or discussion + + +## Screenshots / Videos + + +## Checklist + + +- [ ] I have read [CONTRIBUTING.md](./CONTRIBUTING.md) and my changes follow its guidelines +- [ ] I have read the [AI Policy](./AI_POLICY.md) and I am complying with it +- [ ] I have performed a self-review of my own code and it follows the code style of this project +- [ ] I understand every part of the code I am submitting and can explain it if asked +- [ ] I have commented my code where the logic is not immediately obvious +- [ ] I have tested my changes in-game and they work as expected +- [ ] My changes do not break any existing functionality I am aware of +- [ ] I have not left behind debug code, commented-out blocks, or unnecessary logging +- [ ] I added or updated translation keys if applicable +- [ ] If this adds a new role, add-on, game mode, or option, it is properly registered + +## AI usage declaration + diff --git a/SECURITY.md b/.github/SECURITY.md similarity index 100% rename from SECURITY.md rename to .github/SECURITY.md diff --git a/SUPPORT.md b/.github/SUPPORT.md similarity index 100% rename from SUPPORT.md rename to .github/SUPPORT.md diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 0fd9a9785..049d49071 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -412,7 +412,7 @@ internal static class CustomRolesHelper // Hide And Seek CustomRoles.Hider => CustomRoles.Crewmate, CustomRoles.Seeker => CustomRoles.Impostor, - CustomRoles.Fox => CustomRoles.Crewmate, + CustomRoles.Fox => Fox.HasVitals.GetBool() ? CustomRoles.Scientist : CustomRoles.Crewmate, CustomRoles.Troll => CustomRoles.Crewmate, CustomRoles.Jumper => CustomRoles.Engineer, CustomRoles.Detector => CustomRoles.Crewmate, diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json index 598480b54..bf003d844 100644 --- a/Resources/Lang/en_US.json +++ b/Resources/Lang/en_US.json @@ -4494,6 +4494,7 @@ "FoxInfoLong": "Survive until the end to win", "FoxSpeed": "Fox Speed", "FoxVision": "Fox Vision", + "FoxHasVitals": "Fox has Vitals", "Hider": "Hider", "HiderInfo": "Complete tasks and survive until the end", "HiderInfoLong": "Complete tasks and survive until the end", diff --git a/Roles/HideAndSeek/Fox.cs b/Roles/HideAndSeek/Fox.cs index 46951d2f5..30ecd2de1 100644 --- a/Roles/HideAndSeek/Fox.cs +++ b/Roles/HideAndSeek/Fox.cs @@ -6,6 +6,7 @@ internal class Fox : RoleBase, IHideAndSeekRole public static OptionItem Vision; public static OptionItem Speed; + public static OptionItem HasVitals; public override bool IsEnable => On; public Team Team => Team.Neutral; @@ -21,7 +22,7 @@ internal class Fox : RoleBase, IHideAndSeekRole .SetGameMode(CustomGameMode.HideAndSeek); Options.SetupRoleOptions(69_211_301, TabGroup.NeutralRoles, CustomRoles.Fox, CustomGameMode.HideAndSeek); - + Vision = new FloatOptionItem(69_211_303, "FoxVision", new(0.05f, 5f, 0.05f), 1.25f, TabGroup.NeutralRoles) .SetGameMode(CustomGameMode.HideAndSeek) .SetValueFormat(OptionFormat.Multiplier) @@ -33,6 +34,11 @@ internal class Fox : RoleBase, IHideAndSeekRole .SetValueFormat(OptionFormat.Multiplier) .SetColor(new(0, 255, 0, byte.MaxValue)) .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Fox]); + + HasVitals = new BooleanOptionItem(69_213_305, "FoxHasVitals", true, TabGroup.NeutralRoles) + .SetGameMode(CustomGameMode.HideAndSeek) + .SetColor(new(0, 255, 0, byte.MaxValue)) + .SetParent(Options.CustomRoleSpawnChances[CustomRoles.Fox]); } public override void Add(byte playerId)