Skip to content

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