ActionSystem¶
ActionSystem
| Phase · priority | Agency · 40 |
| Reads | current_action, current_action_target; inventory (contains), water_level, fuel_value, food_value |
| Writes | edges (contains), hunger, food_value, water_level, fuel, energy; events item_taken, item_eaten, npc_fetch_water, npc_douse_fire, npc_tend_fire, … |
| Settings | bite_size 0.5, meal_value 25, rest_rate_per_hour |
| Status | designed · Phase 1 (#37) |
| PLAN | §7.7, §6.2, §6.4.1, §18.1 |
| Player | Water and buckets · Food |
Converts the chosen action into intents, exactly as the §7.7 table states. ActionSystem has no opinion about whether to act; it is the hands.
| Action | Intents |
|---|---|
move |
RemoveEdge(contains, old) + AddEdge(contains, new) — one hop per tick; multi-hop journeys take several ticks |
eat |
Delta(actor.hunger, −meal_value) + Delta(food.food_value, −bite_size) |
pick_up |
RemoveEdge(item ← location) + AddEdge(item ← actor) — the single-container rule makes a contested grab resolve to one winner |
drop |
the reverse |
fetch_water |
a pick_up of a Vessel with water_level > 0. Water lives in the vessel, never on the NPC |
douse_fire |
Delta(target.water_level, +vessel.water_level) + Set(vessel.water_level, 0); FireSystem decides whether that puts it out |
tend_fire |
Delta(campfire.fuel, +wood_fuel_value) + RemoveEdge(wood ← actor) |
gather_wood |
pick_up of a wood pile |
rest |
Delta(energy, +PerTick(rest_rate)) |
Events are emitted for the feed (npc_fetch_water → Tomas grabbed a bucket from the river). From Phase 2, incidental contact (PLAN §6.4.1) is rolled here as a side effect of execution, seeded and traced.
Hot-toggle: off, decisions are made but nothing happens — a village of intentions. Trace: every intent here carries the action and actor; move intents may carry Inputs naming the path target.
History¶
| Phase | Change |
|---|---|
| 1 | Introduced; water in the vessel; eat as meals and bites. |
See also: DecisionSystem · Intents and the resolver