99 lines
4.1 KiB
Markdown
99 lines
4.1 KiB
Markdown
# Jajce Forest Edge 06
|
||
|
||
Captured: 2026-07-18
|
||
|
||
## Files
|
||
|
||
- [before forest edge](jajce_forest_edge_06_before.png)
|
||
- [authored forest edge](jajce_forest_edge_06_after.png)
|
||
- [finite trees depleted](jajce_forest_edge_06_depleted.png)
|
||
- `world/jajce/ForestEdgeResourceCluster.tscn`
|
||
- `world/jajce/TerrainResourceCluster.gd`
|
||
- `tests/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
|
||
|
||
```bash
|
||
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:
|
||
|
||
```text
|
||
--resource-amount=tree_forest_grove_01:0
|
||
--resource-amount=tree_forest_grove_02:0
|
||
```
|