4.1 KiB
Jajce Forest Edge 06
Captured: 2026-07-18
Files
- before forest edge
- authored forest edge
- finite trees depleted
world/jajce/ForestEdgeResourceCluster.tscnworld/jajce/TerrainResourceCluster.gdtests/jajce_forest_edge_cluster_test.gd
The images use the same 1280×720 camera, fixed daylight value, warmup, and Metal renderer. Debug labels are hidden. The before frame shows two generic resource boxes below disconnected south-edge trees. The authored frame uses the same finite IDs as the two central harvestable trees; the depleted frame shows those two as stumps while the decorative forest silhouette remains.
Visual reduction
The forest edge contains:
- 10 low-poly fern clumps;
- 8 oversized cream-stem, warm-cap mushrooms;
- 6 flattened forest stones;
- 2 decorative deciduous silhouette trees; and
- 2 finite harvestable trees with amount-derived crowns and stumps.
The 24 understory details use three MultiMeshInstance3D batches. The two
existing south-edge conifers remain outside the cluster and frame it at a
larger scale. This keeps the grove legible from the village without turning the
whole terrain into dense foliage.
Authority and shared authoring contract
ResourceAnchors contains only tree_forest_grove_01 and
tree_forest_grove_02, preserving their definitions and the existing total of
eighteen finite resources. DecorativeInstances contains no ResourceNode
descendants and never enters saves, reservations, checksums, or conservation.
The riverbank and forest edge are now the two concrete consumers of
TerrainResourceCluster. That small shared base owns only their proven scene
contract: terrain snapping for authored trees and interaction points, bounded
MultiMesh placement, fern mesh construction, resource-anchor enumeration, and
presentation statistics. Resource-specific palettes, offsets, and meshes stay
in each cluster.
Both finite trees reuse HarvestableTreePresentation. Depletion therefore
removes only the authoritative standing trees; the two decorative trees and
surrounding conifers remain, giving the living world an honest but not barren
silhouette.
Discovery, navigation, and restore proof
The trees moved roughly five metres deeper into the forest edge. Their
village-facing interaction points are approximately 26.5 m and 26.2 m from the
village origin, beyond the adapter's initial 24 m query. The focused scenario
confirms both IDs appear only in the farther query, disables every other wood
source, and resolves tree_forest_grove_01 after more than one range pass.
The same scenario asks the project-owned navigation map for real paths to both interaction points, verifies each endpoint is reached, and checks every route point against Terrain3D height. No terrain or navigation rebake was needed.
Finally, the test leaves the first tree at one configured yield, saves that low state, and completes a real reserved NPC gather. The exact yield enters NPC inventory and the tree becomes a stump. Restoring the snapshot rebinds the same stable ID and reconstructs the sparse standing crown from authoritative amount alone.
Next slice
Introduce one named goat as an identity-backed simulation entity rather than a resource prop. Its stable ID, position, and hunger/feed state should be saved; one NPC and the player should share an exact feed interaction that withdraws real pantry food. A herd, breeding, products, and animal spatial indexing stay deferred until that contract is proven.
Capture commands
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/jajce/JajceForestEdgeLookdev.tscn \
--output=res://docs/baselines/jajce_forest_edge_06_after.png \
--hide-resource-labels
For the depleted frame, append:
--resource-amount=tree_forest_grove_01:0
--resource-amount=tree_forest_grove_02:0