Add gift clause rule for free gift encounters

When enabled, in-game gift Pokemon (starters, trades, fossils) do not
count against a location's encounter limit. Both a gift encounter and
a regular encounter can coexist on the same route, in any order.

Persists encounter origin on the Encounter model so the backend can
exclude gift encounters from route-lock checks bidirectionally, and the
frontend can split them into a separate display layer that doesn't lock
the route for regular encounters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 21:55:16 +01:00
parent ed1f7ad3d0
commit 18cc116348
10 changed files with 201 additions and 32 deletions

View File

@@ -79,6 +79,7 @@ export interface Encounter {
faintLevel: number | null
deathCause: string | null
isShiny: boolean
origin: string | null
caughtAt: string
}

View File

@@ -2,6 +2,7 @@ export interface NuzlockeRules {
// Core rules (affect tracker behavior)
duplicatesClause: boolean
shinyClause: boolean
giftClause: boolean
pinwheelClause: boolean
levelCaps: boolean
@@ -19,6 +20,7 @@ export const DEFAULT_RULES: NuzlockeRules = {
// Core rules
duplicatesClause: true,
shinyClause: true,
giftClause: false,
pinwheelClause: true,
levelCaps: false,
@@ -55,6 +57,13 @@ export const RULE_DEFINITIONS: RuleDefinition[] = [
'Shiny Pokémon may always be caught, regardless of whether they are your first encounter.',
category: 'core',
},
{
key: 'giftClause',
name: 'Gift Clause',
description:
"In-game gift Pokémon (starters, trades, fossils) do not count against a location's encounter limit.",
category: 'core',
},
{
key: 'pinwheelClause',
name: 'Pinwheel Clause',