Remove unused nuzlocke rules, reorganize into core and playstyle
All checks were successful
CI / backend-lint (push) Successful in 9s
CI / actions-lint (push) Successful in 15s
CI / frontend-lint (push) Successful in 21s

Remove firstEncounterOnly, permadeath, nicknameRequired, and
postGameCompletion from the rules system — they are either implicit
(it's a nuzlocke tracker) or not enforced. Move levelCaps to core
(it's displayed in the sticky bar). Create a new "playstyle" category
for hardcoreMode and setModeOnly — informational rules useful for
stats but not enforced by the tracker. Remove the completion category
entirely. Add sub-task beans for the rules overhaul epic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 21:20:23 +01:00
parent 4fbfcf9b29
commit e25d1cf24c
11 changed files with 204 additions and 124 deletions

View File

@@ -36,37 +36,18 @@ These are boolean flags with real tracker logic:
- `randomizer` — the run uses a randomized ROM. Same behavior: encounter Pokemon selection allows picking from ALL Pokemon since the dex is randomized.
- `giftClause` — in-game gift Pokemon are free and do not count against the area's encounter limit. When enabled, gift-origin encounters should bypass the route-lock check (similar to how shinyClause bypasses it for shinies).
### Follow-up beans to CREATE
Rules that need more complex logic, tracked separately:
- Type Restrictions (Monolocke) — restrict team to specific types
- Team Size Limit — cap active party size with warnings
- Static/Legendary Clause — whether static encounters count or are banned
### Complex rules (need design work)
These need more complex logic and are tracked as draft sub-tasks:
- Type Restrictions (Monolocke) — bs0y
- Team Size Limit — fv7w
- Static/Legendary Clause — knnc
## Checklist
## Children
### Cleanup: remove unused rules
- [ ] Remove `firstEncounterOnly`, `permadeath`, `nicknameRequired`, `setModeOnly`, `postGameCompletion` from `NuzlockeRules` interface and `DEFAULT_RULES`
- [ ] Remove their entries from `RULE_DEFINITIONS`
### Add new rules: frontend types
- [ ] Add `egglocke`, `wonderlocke`, `randomizer`, `giftClause` to `NuzlockeRules` interface and `DEFAULT_RULES` (default: false)
- [ ] Add `RuleDefinition` entries for the new rules with appropriate categories
### Add new rules: egglocke / wonderlocke / randomizer logic
- [ ] When any of `egglocke`, `wonderlocke`, or `randomizer` is enabled, the encounter Pokemon selector should allow picking from ALL Pokemon (not just the game's regional dex)
- [ ] Reuse the existing "all Pokemon" selector pattern used in admin panel encounter creation and boss team creation
### Add new rules: giftClause logic
- [ ] When `giftClause` is enabled, gift-origin encounters should bypass the route-lock check in the backend (similar to shinyClause bypass)
- [ ] Update the encounter creation endpoint to check for giftClause when origin is "gift"
### Update components and pages
- [ ] Update `RulesConfiguration`, `RuleToggle`, and `RuleBadges` components as needed
- [ ] Update `NewRun.tsx` and `NewGenlocke.tsx` if they reference removed rules
### Backend and data
- [ ] Verify backend encounter logic still works for removed rules (uses `.get()` with defaults)
- [ ] Update backend test seed data if it references removed rules
### Follow-ups
- [ ] Create follow-up beans for: Type Restrictions, Team Size Limit, Static/Legendary Clause
Work is tracked in sub-tasks:
- **o7r8** — Remove unused nuzlocke rules
- **fitk** — Add egglocke, wonderlocke, and randomizer rules
- **sij8** — Add gift clause rule
- **bs0y** — Add type restriction rules (monolocke) *(draft)*
- **fv7w** — Add team size limit rule *(draft)*
- **knnc** — Add static/legendary clause rule *(draft)*