Combat encounter system — pull-based trigger + tiered risk-choice pool
D-020: Combat encounter system — pull-based trigger + tiered risk-choice pool
Picks 2 + 6 from the 2026-05-21 vision verification session. D-010 ratified RNG / turn-order / defeat semantics but explicitly deferred “encounter shape” to mechanics-designer B-level. D-018 made combat the premium Energy sink (~30% of a daily budget per fight); the per-encounter cost shape became load-bearing — a player must be able to see what an encounter will cost BEFORE committing Energy. D-020 closes that gap: pull-based trigger, visible tiered pool, deliberate risk-choice initiation.
1. Trigger = pull-based, no auto-spawn
The Walker initiates every combat from a visible encounter queue. The app NEVER auto-spawns combat as a side-effect of step count, time-of-day, location, or any other passive trigger. Rationale: D-018 force-choice scarcity (a Walker must be able to refuse combat when their daily Energy is earmarked for craft or allocation); D-001 hardcore positioning (auto-spawned mob-grind is the f2p-mobile failure mode WalkRPG explicitly rejects).
2. Pool builds passively from two sources
| Source | Cadence | Notes |
|---|---|---|
| Step-driven | Every N steps (N B-level, mechanics-designer; nominal ~500-1000) drops one trop of region-appropriate difficulty | Region surfaces tropy keyed to Walker’s current region.<id> |
| Quest-beat driven | Specific quest beats inject specific tropy directly | Authored per-quest (e.g. a beat injects trop.<id> keystone-ready). Quest beats fire on quest-state progression (player advanced step N→N+1), never on raw geofence or time triggers — those would re-introduce push via the quest layer. |
Pool fill is server-authoritative (D-007 §3 reconciliation pattern; sink-debit ordering from D-018 §What-not-decide applies to fill events too). Client surfaces the queue read-only until initiation.
3. Pool entries = tropy; each carries one of four difficulty badges
Each encounter card is a trop (singular) / tropy (plural). PL canonical; glossary entry per D-017 four-phase pick is W-level narrative-designer follow-up. Four badges, deliberately small set:
| Badge | Energy cost vs base | Reward vs base | Risk tail |
|---|---|---|---|
easy | -50% | -30% | None |
normal | base (per D-018 ~30% of daily) | base | None |
hard | +30% | +40% | ~15% chance of energy-loss outcome (combat ends; extra Energy debit ≈ 10% of daily) |
keystone-ready | +50% | tree-keystone unlock per D-014 §2 + standard reward | ~30% chance of energy-loss outcome |
The percentages shown are shape-level only — exact tunables are B-level under mechanics-designer within the D-020 envelope. Adding a 5th badge tier (elite, boss, etc.) requires a new D-decision.
Risk tail vs D-010 §3 defeat semantics — orthogonal. The energy-loss tail on hard / keystone-ready is a NEW failure mode separate from D-010 §3’s HP-clamp rule. D-010 §3 governs the HP=0 outcome (clamp to 1, no XP/point/rep loss); D-020’s energy-loss tail governs the engagement-cost outcome (you took the risky encounter, paid extra Energy for the tail). Both can fire independently in the same fight; neither contradicts the other. HP outcome remains non-punitive per D-010 §3.
Cosmetic flags are NOT badges. A quest-beat tropy may want a non-mechanical marker (e.g. boss for a region-finale tropy that uses the existing normal cost/reward shape). These ride on tropy.tags per TagSchema and are W-level (narrative-designer + mechanics-designer). Only new cost/reward tiers require a new D-decision; tagging an existing-tier tropy as cosmetically distinct does not.
4. Risk choice = visible before commit
The badge is shown on the trop BEFORE the player commits Energy. Initiation is a deliberate “I accept this risk-reward” action, not a click-to-dismiss. PoE / Last Epoch farming pattern: the player sees the modifiers, chooses the run. UI surface (badge styling, initiation gesture) is ui-designer’s call within this contract.
5. Terminology disambiguation (D-017 carve-out for D-020)
trop / tropy in D-020 (and all downstream gameplay surfaces) means encounter card — a lead the Walker investigates by initiating combat. This is distinct from “Trop NN” usage in D-013 and decision-process discussion, where “Trop” is a numbered slot for a research proposition (e.g. “Trop 12 — anti-step-spam clause”). Same Polish word, two registers: gameplay (entity) vs process (proposition slot).
PL register fit: trop (lead / clue / trace) sits natively in the D-013 editorial-investigator register — the Walker traces the trop, then commits the editorial act (the fight). Maps cleanly to the cartographer-as-investigator framing in cartographer.ts:11 and to D-013’s evidentiary grammar. Narrative-designer’s four-phase pick should affirm trop as canonical or surface a stronger candidate; the disambiguation requirement below stands either way.
The trop glossary entry per D-017 four-phase pick MUST capture the gameplay-vs-process disambiguation explicitly in transcreationNote (same carve-out shape as D-019 §2 class-vs-rank disambiguation).
What D-020 does NOT decide (delegated)
- Pool size cap (max concurrent tropy in queue) — B-level (mechanics-designer).
- Pool refresh cadence per region — B-level.
- Specific badge cost/reward percentages within the D-020 envelope — B-level (mechanics-designer).
- 5th tier badges (
elite,boss, etc.) — forbidden at B-level; requires a new D-decision. - UI surface for tropy queue and initiation flow — ui-designer.
- Quest-beat → tropy injection math (probability, timing, append vs replace) — W-level (mechanics-designer + narrative-designer per quest).
- Tropy expiry policy (do unfought tropy decay? after how long?) — B-level; open W/B question.
tropglossary entry (handle slug + EN transcreation + disambiguation note) — W-level (narrative-designer, D-017 four-phase pick).- Schema additions (
Tropentity,Opponenttier-badge metadata) — W-level (tech-architect). Existingdata/src/schemas/opponent.ts8-stat pattern + region binding + tag bag is preserved; tier-badge metadata extends rather than replaces (either as a new field onOpponent, or as a new field onTropthat references an opponent).
Rejected alternatives
- Push-based (auto-spawn) — contradicts D-018 force-choice scarcity (Walker loses agency over which days they spend Energy on combat vs craft vs allocation); matches the f2p-mobile mob-grind failure mode D-001 rejects.
- Fully random pool (no badge visibility) — flattens decision space, removes risk-reward, doesn’t match the PoE / Last Epoch reference D-008 hardcore audience expects.
- Binary safe/risky (no tier visibility) — removes the “I see what I’m getting into” promise; collapses back toward fog-of-war that D-020 rejects.
- Time-based encounter spawning (encounter appears at 7pm regardless) — re-introduces the push mechanic via the time axis; same failure mode as step-based auto-spawn.
Reasoning
The trigger choice was binary: push (auto-spawn) or pull (player-initiates). Push is incompatible with D-018 single-currency scarcity at the protocol layer — if combat appears unbidden, a player who saved Energy for craft loses agency over their own daily triage. Pull is the only choice coherent with D-018’s promise that “I walked 5k today” is legible at decision time.
Tiered visible pool + risk-choice is the PoE / Last Epoch pattern for a reason: it preserves agency at run-time (you see what you’re committing to) AND creates the engagement loop that grindless variance cannot. Pure RNG trades agency for surprise; tiered visible trades surprise for considered choice. D-008 hardcore audience expects the latter.
The keystone-ready badge is the gameplay surface that wires D-014 §2 keystone-gating into the encounter system. Without it, the keystone-unlock pathway is invisible to the player at the point of decision — they would only learn an encounter was keystone-relevant after the fight, removing the agency the rest of D-020 is built around.
The four-badge set is deliberately small. Two badges (safe / risky) under-discriminates and forces every encounter into one of two molds; six+ badges over-fragments the design space and signals tier-bloat. Four (easy / normal / hard / keystone-ready) matches the natural decision granularity: how cheap can I get this, what is the baseline, how much extra reward do I want, and is this a tree-progression opportunity.
Source: picks 2 + 6 from ops/memory/vision-qa-2026-05-21.md. Triage by game-director (2026-05-21 session). Pre-ratification reconnaissance per [[feedback-decide-triage-recon]] confirmed trop / tropy has zero collision with existing data/src/content/ entities; D-013 process-slot “Trop NN” usage disambiguated inline (§5).