Add egglocke, wonderlocke, and randomizer variant rules
All checks were successful
CI / backend-lint (push) Successful in 9s
CI / actions-lint (push) Successful in 14s
CI / frontend-lint (push) Successful in 21s

When any variant rule is enabled, the encounter modal switches from
the game's regional dex to an all-Pokemon search (same debounced
API pattern as EggEncounterModal). A new "Run Variant" section in
rules configuration groups these rules, and badges render in amber.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 21:33:01 +01:00
parent e25d1cf24c
commit 2298c32691
7 changed files with 213 additions and 21 deletions

View File

@@ -8,6 +8,11 @@ export interface NuzlockeRules {
// Playstyle (informational, for stats/categorization)
hardcoreMode: boolean
setModeOnly: boolean
// Variant (changes which Pokemon can appear)
egglocke: boolean
wonderlocke: boolean
randomizer: boolean
}
export const DEFAULT_RULES: NuzlockeRules = {
@@ -20,13 +25,18 @@ export const DEFAULT_RULES: NuzlockeRules = {
// Playstyle - off by default
hardcoreMode: false,
setModeOnly: false,
// Variant - off by default
egglocke: false,
wonderlocke: false,
randomizer: false,
}
export interface RuleDefinition {
key: keyof NuzlockeRules
name: string
description: string
category: 'core' | 'playstyle'
category: 'core' | 'playstyle' | 'variant'
}
export const RULE_DEFINITIONS: RuleDefinition[] = [
@@ -74,4 +84,27 @@ export const RULE_DEFINITIONS: RuleDefinition[] = [
'The game must be played in "Set" battle style, meaning you cannot switch Pokémon after knocking out an opponent.',
category: 'playstyle',
},
// Variant
{
key: 'egglocke',
name: 'Egglocke',
description:
'All caught Pokémon are replaced with traded eggs. The encounter selector shows all Pokémon since the hatched species is unknown.',
category: 'variant',
},
{
key: 'wonderlocke',
name: 'Wonderlocke',
description:
'All caught Pokémon are Wonder Traded away. The encounter selector shows all Pokémon since the received species is unknown.',
category: 'variant',
},
{
key: 'randomizer',
name: 'Randomizer',
description:
"The ROM's wild Pokémon are randomized, so the encounter selector shows all Pokémon instead of the game's regional dex.",
category: 'variant',
},
]