feat: author discoverable forest edge
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user