feat: add paired goat care

This commit is contained in:
Rijad Zuzo
2026-07-30 23:03:15 +02:00
parent 5511c295a5
commit d950c3da68
19 changed files with 541 additions and 61 deletions
+10 -5
View File
@@ -811,15 +811,20 @@ Completed:
exact mid-route state through schema-v11 restore and presentation
unload/reload. The animal feature assets now live together under
`world/animals/goat/`, while ignored docs no longer create import sidecars.
42. `Jajce Goat Pair 09`: Zora now joins Dunja as a second named, stable animal
with an authored private shelter and deterministic access to the shared
pasture. Simultaneous hunger selects the nearest available loaded goat,
preserves two exact reservations through save/restore, and feeds only the
named target. Private shelter ownership remains loaded-world context; no
herd system, animal index, or schema bump was introduced.
Next:
1. Add one second named goat with its own stable state, authored shelter
context, and deterministic use of the shared pasture. Prove nearest
feed-target selection and independent reservations when both animals are
hungry.
1. Playtest the named pair and record one concrete gameplay or scaling need
before extending the animal model.
2. Keep breeding, products, herd scheduling, animal spatial indexing, and
active/abstract simulation LOD deferred until two real animals require them.
active/abstract simulation LOD deferred unless that evidence requires one
of them; otherwise return to the broader milestone sequence.
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 -7
View File
@@ -938,16 +938,28 @@ destination, and every NPC RNG stream. Unloading and re-instantiating the goat
scene retains that same travel state, arrival is exact, and hunger stops
movement before feeding.
The immediate next slice should add one second named goat with its own stable
record and authored shelter context while sharing the existing pasture.
Selection and reservation tests must prove that simultaneous hunger still
chooses the nearest real animal and mutates only the exact target. Keep
loaded-animal discovery linear and defer herd scheduling, breeding, products,
animal indexing, and active/abstract simulation LOD until two identities
demonstrate a concrete need.
The first multi-animal care slice is complete. Zora adds a second stable record,
loaded presentation, and private shelter while sharing Dunja's pasture. When
both goats are hungry, loaded target resolution chooses the nearest available
interaction point, two villagers can retain independent exact claims, and
feeding Zora leaves Dunja's hunger, feed history, and reservation untouched.
Schema-v11 restore preserves both claim pairings and checksum. Loaded routine
sites now distinguish private shelter ownership from shared species context
without adding that authored-world fact to saved simulation state.
The immediate next step is a playtest-and-measure gate, not a herd abstraction.
Keep loaded-animal discovery linear and use the named pair to identify one
concrete gameplay need before adding breeding, products, herd scheduling,
animal indexing, or active/abstract animal LOD. If no such need appears, resume
the broader milestone sequence instead of adding animal framework by momentum.
Recently completed:
- `Jajce Goat Pair 09`: named goat Zora adds a second independent animal
record and private shelter while sharing Dunja's pasture. Stable nearest
targeting, simultaneous exact reservations, isolated feed mutation and
events, deterministic routine ownership, and active-claim save/restore prove
the multi-animal contract without a schema bump or herd system.
- `Jajce Dunja Habitat 08`: the first deterministic animal routine alternates
shelter and pasture through real loaded navigation, preserves exact
mid-route state across save/restore and presentation unload/reload, stops
+8 -4
View File
@@ -999,10 +999,14 @@ World-schema v10 restore reconstructs her persistent state without replaying
the transient response. Dunja now also alternates between a stable shelter and
pasture through real loaded navigation. World-schema v11 preserves exact
mid-route position, destination, and schedule through restore or presentation
unload/reload without consuming decision RNG. The next bounded animal slice
should add one second named goat and prove independent nearest-target care
before any herd abstraction. Do not yet generalize animal discovery or
introduce active/abstract simulation LOD.
unload/reload without consuming decision RNG. Zora now proves the bounded
multi-animal contract: her independent stable record and private shelter share
Dunja's pasture, nearest loaded care targeting supports two simultaneous exact
claims, and feeding one goat cannot mutate the other. World-schema v11
preserves both claim pairings without serializing shelter ownership. Do not
generalize animal discovery or introduce herd scheduling, products, breeding,
or active/abstract animal LOD until playtest or measurement exposes a concrete
need.
The remaining simulation-garden target still aims for:
+4 -4
View File
@@ -37,10 +37,10 @@ both require one stored wood without duplicating that rule.
farmer profession and declares an exact one-food completion cost. Selection,
animal target reservation, and completion remain separate; NPC and player
completion both use `AnimalCareSystem`'s same pantry-to-animal transaction.
`SimulationIds` also names Dunja's shelter and pasture anchors. These IDs are
saved routine vocabulary; their loaded positions come from
`AnimalRoutineSite` rather than entering an action definition or resource
registry.
`SimulationIds` names Dunja and Zora, their private shelter anchors, and the
shared pasture anchor. These IDs are saved routine vocabulary; their loaded
positions and private/shared ownership come from `AnimalRoutineSite` rather
than entering an action definition or resource registry.
## Current profession contract
+17 -7
View File
@@ -284,13 +284,23 @@ care operation: reserve or select the exact animal, withdraw one real food
from `village_pantry`, reduce that animal's hunger, and append one exact
`animal_fed` fact. Failed withdrawal changes neither animal nor history.
The first routine consumer alternates Dunja between stable-ID shelter and
pasture markers without drawing RNG. `ActiveWorldAdapter` supplies the loaded
marker positions, the selected ID and exact position enter state, and
`AnimalNode` follows a real `NavigationServer3D` path while reporting factual
position changes. A mid-route save restores the same position and target;
unloading the scene node pauses presentation only, and reloading it resumes
from those facts. Hunger cancels travel before care targeting.
The first routine consumers alternate Dunja and Zora between stable-ID private
shelters and one shared pasture without drawing RNG. `AnimalRoutineSite`
declares optional loaded-world resident ownership: an empty resident ID is
shared species context, while a named resident makes a shelter private.
`ActiveWorldAdapter` filters those loaded markers for each stable animal; site
ownership is not persistent state and does not require a schema bump. The
selected site ID and exact position do enter state, and each `AnimalNode`
follows a real `NavigationServer3D` path while reporting factual position
changes. A mid-route save restores the same position and target; unloading a
scene node pauses presentation only, and reloading it resumes from those facts.
Hunger cancels travel before care targeting.
Multiple animal records remain independently authoritative. A schema-v11 save
may contain concurrent feed reservations only when each reserving NPC targets
that exact animal in a valid travel or work state. Restoring Dunja and Zora
preserves both claim pairings and the checksum; completing one feed releases
and mutates only its destination record.
The persistent hungry/content presentation derives from authoritative hunger.
The short feed response is transient and is reset rather than serialized or