feat: surface open opportunity need on villager field note

This commit is contained in:
2026-08-08 16:18:39 +02:00
parent 8a7e6b12eb
commit 4d2a230c5b
12 changed files with 525 additions and 4 deletions
+11 -1
View File
@@ -841,10 +841,20 @@ Next:
1. Let an inspected villager who owns an open opportunity surface that exact
village need plus the authoritative direct-help route, capable helper, or
honest unavailable state that currently exists.
honest unavailable state that currently exists. **Complete:** the quiet
`VillagerFieldNoteHud` now shows a restrained `Need` line for exactly that
note, derived from the existing player-response/helper queries and the real
storage state. It names the helper when one is capable, shows the direct
finite-resource-to-storage route when the player response derives it, or
honestly states why help is unavailable, and it re-derives from live facts
after restore without entering saves.
2. Prove that the ordinary finite-resource-to-storage harvest resolves an
available player route and updates the context without dialogue branching,
acceptance state, rewards, a quest log, or saved presentation state.
**Complete:** a runtime scenario stages the real pantry crisis, surfaces the
need for its interested villager, and proves that one ordinary
`harvest_resource_node` extraction resolves the same open opportunity and
clears the need segment on the next refresh.
Do not start with GIS data, a full city, a large asset pack, or more NPC
mechanics. The next proof is a beautiful stage for the systems that already
+19
View File
@@ -984,6 +984,25 @@ resolve the need without adding a dialogue tree, quest acceptance, rewards, a
quest log, reputation, a generic conversation framework, or saved presentation
state in that slice.
The first bounded field-note opportunity surfacing slice is complete:
- `VillagerInspectionResult` now carries an optional read-only
`VillagerOpportunityNote` that is present only when the inspected villager is
the interested party of an open village opportunity;
- `VillagerOpportunityNote.derive` decides the honest help state from the
existing authoritative queries: the derived player-response route wins, then
the capable helper by name, then a real unavailable reason (need already met,
storage has no room, no stocked source in reach, or no storage at all);
- the quiet `VillagerFieldNoteHud` shows a restrained `Need` line for exactly
that note, coexists with the existing `E` prompt and cinematic mode, and
re-derives it from live state without entering saves or drawing RNG;
- a real player finite-resource harvest resolves the same open
`OpportunityStateRecord` through the existing economy/event history, and the
need segment clears on the next refresh;
- unit, runtime, and query-neutrality checks cover the derive branches, the
staged pantry-crisis surfacing, helper naming, ordinary harvest resolution,
and the absence of saved presentation state.
Recently completed:
- `Jajce Villager Field Note 12`: a separate player-facing note selects the