2.1 KiB
Jajce Dunja Habitat 08
Captured: 2026-07-26
File
The 1280×720 Metal frame shows Dunja's small timber shelter, fixed feed bowl,
straw bed, warm lantern, and adjacent fenced clover patch in the south-village
clearing. The bowl now belongs to the static habitat instead of moving with
the goat. Dunja also joins the existing grass_interactors group, so the
camera-local grass shader bends around her real loaded position.
Routine proof
The two habitat markers expose stable dunja_shelter and dunja_pasture IDs.
When the saved routine tick becomes due, AnimalCareSystem alternates to the
other site in stable-ID order without drawing RNG. The selected site ID, exact
target position, current position, and next due tick remain in
AnimalStateRecord.
tests/animal_routine_vertical_slice_test.gd proves the complete loaded-world
contract:
- the authored endpoints are connected by the Jajce navigation map;
- Dunja follows the returned path and reports authoritative position;
- a mid-route schema-v11 save restores the same checksum, destination, and NPC RNG streams;
- unloading and re-instantiating the goat scene rebinds that same moving state;
- arrival promotes the destination to the current site exactly; and
- hunger stops travel so feeding targets a stationary animal.
Structure refinement
The reusable goat scene, visual script, habitat, and lookdev scene now live
together under world/animals/goat/. Their file names use snake_case, while
scene node names remain PascalCase. docs/.gdignore keeps documentation and
review captures out of Godot's runtime import database, so baseline PNGs no
longer need tracked .import sidecars.
Capture command
HOME="$PWD/logs/quality/godot_profile" \
APPDATA="$PWD/logs/quality/godot_profile" \
LOCALAPPDATA="$PWD/logs/quality/godot_profile" \
/Applications/Godot.app/Contents/MacOS/Godot \
--path "$PWD" --script res://tools/capture_jajce_lookdev.gd -- \
--scene=res://world/animals/goat/dunja_lookdev.tscn \
--output=res://docs/baselines/jajce_dunja_habitat_08.png \
--hide-debug-labels