3.9 KiB
3.9 KiB
title, status, type, priority, created_at, updated_at
| title | status | type | priority | created_at | updated_at |
|---|---|---|---|---|---|
| Overhaul Nuzlocke Rules System | todo | epic | normal | 2026-02-20T13:22:23Z | 2026-02-20T13:27:58Z |
Audit and overhaul the nuzlocke rules configuration. The current rules are a flat collection of boolean settings, some of which don't meaningfully affect tracker behavior. This epic cleans up existing rules and adds new rules for popular variants with actual tracker logic.
Scope
Rules to REMOVE (5)
These rules either define what a nuzlocke is (always true) or don't affect tracker behavior at all:
firstEncounterOnly— implicit; it's a nuzlocke trackerpermadeath— implicit; it's a nuzlocke trackernicknameRequired— not enforced or trackedsetModeOnly— not enforced or trackedpostGameCompletion— not enforced or tracked
Rules to KEEP (5)
These actively affect tracker logic:
duplicatesClause— used in encounter creation and bulk randomizationshinyClause— used in encounter creation (bypass route-lock)pinwheelClause— used for zone-based encounter logichardcoreMode— used in BossDefeatModal (auto-win, 1 attempt)levelCaps— displayed in sticky bar on encounters page
New rules to ADD (4)
These are boolean flags with real tracker logic:
egglocke— all caught Pokemon are replaced with traded eggs. When enabled, encounter Pokemon selection should allow picking from ALL Pokemon (not just the game's regional dex), similar to the admin panel encounter creation / boss team creation flow.wonderlocke— all caught Pokemon are Wonder Traded away. Same as egglocke: encounter Pokemon selection allows picking from ALL Pokemon.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
Checklist
Cleanup: remove unused rules
- Remove
firstEncounterOnly,permadeath,nicknameRequired,setModeOnly,postGameCompletionfromNuzlockeRulesinterface andDEFAULT_RULES - Remove their entries from
RULE_DEFINITIONS
Add new rules: frontend types
- Add
egglocke,wonderlocke,randomizer,giftClausetoNuzlockeRulesinterface andDEFAULT_RULES(default: false) - Add
RuleDefinitionentries for the new rules with appropriate categories
Add new rules: egglocke / wonderlocke / randomizer logic
- When any of
egglocke,wonderlocke, orrandomizeris 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
giftClauseis 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, andRuleBadgescomponents as needed - Update
NewRun.tsxandNewGenlocke.tsxif 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