feat(ecology): F5 — render natural nodes (trees/rocks visible in-game) #258

Merged
panda merged 1 commit from feat/ecology-f5 into main 2026-08-02 15:30:36 +02:00
Collaborator

Summary

F5 of the ecology foundation (epic #250 / #251; on F1–F4 + #255): the client renders natural nodes — trees and rocks are finally visible in-game.

A node is just "an art at a cell," so it reuses the existing depth-sorted static path in WorldRenderer (~8 lines): each ClientWorld.Nodes entry (from F4) is added to the same WorldSprite pass as map statics, getting foot-anchor + Z-lift + depth-sort + occlusion-fade for free. The slice-design's two render gaps close by construction: occlusion-fade is geometric (works on any tall sprite, including a pine), and a node's anchor is its fixed cell (stable). A stage whose art is missing from the pack simply isn't drawn (assets policy).

How it was tested

No unit test (rendering has none) — verified by piloting the client on asterra, fresh DB (per the screenshot rule): teleported onto a northern_grassland island and the spawner's deterministic pines reconciled via AoI and drew correctly — foot-anchored, depth-sorted, occluding the coastline behind them. Whole solution builds 0 warnings.

F5 — natural nodes rendered on asterra

Remaining (tracked, not blocking): the rock art ore_outcrop is a generate asset not yet in the pack — a rock node's stage is simply not drawn until it's added (I'll ask the owner for it with an Imagegen prompt). Node line-of-sight is the #255 follow-up.

Checklist

  • Whole solution builds, 0 warnings · [x] Screen HARD GATE (render in WorldRenderer, state in ClientWorld)
  • Real pack art (missing art = not drawn, no placeholder) · [x] Screenshot from a fresh DB, assistant-piloted
  • Completes the ecology foundation's visible slice · [x] Linked #251 (epic #250)
## Summary **F5 of the ecology foundation** (epic #250 / #251; on F1–F4 + #255): the client **renders natural nodes** — trees and rocks are finally **visible in-game**. A node is just "an art at a cell," so it **reuses the existing depth-sorted static path** in `WorldRenderer` (~8 lines): each `ClientWorld.Nodes` entry (from F4) is added to the same `WorldSprite` pass as map statics, getting **foot-anchor + Z-lift + depth-sort + occlusion-fade for free**. The slice-design's two render gaps close by construction: occlusion-fade is geometric (works on any tall sprite, including a pine), and a node's anchor is its fixed cell (stable). A stage whose art is missing from the pack simply isn't drawn (assets policy). ## How it was tested No unit test (rendering has none) — **verified by piloting the client on asterra, fresh DB** (per the screenshot rule): teleported onto a `northern_grassland` island and the spawner's deterministic pines reconciled via AoI and drew correctly — foot-anchored, depth-sorted, occluding the coastline behind them. Whole solution **builds 0 warnings**. ![F5 — natural nodes rendered on asterra](https://git.homelab.devncode.it/attachments/5d1ba476-2256-42ae-9343-e63383c5b834) **Remaining (tracked, not blocking):** the rock art `ore_outcrop` is a *generate* asset not yet in the pack — a rock node's stage is simply not drawn until it's added (I'll ask the owner for it with an Imagegen prompt). Node line-of-sight is the #255 follow-up. ## Checklist - [x] Whole solution builds, 0 warnings · [x] `Screen` HARD GATE (render in `WorldRenderer`, state in `ClientWorld`) - [x] Real pack art (missing art = not drawn, no placeholder) · [x] Screenshot from a fresh DB, assistant-piloted - [x] Completes the ecology foundation's visible slice · [x] Linked #251 (epic #250)
feat(ecology): render natural nodes (reuse the depth-sorted static path) (F5 of #251)
All checks were successful
ci / Lua content lint (pull_request) Successful in 10s
ci / Lint & Test (pull_request) Successful in 4m42s
2add13bf1b
panda merged commit 8fc3437e1b into main 2026-08-02 15:30:36 +02:00
panda deleted branch feat/ecology-f5 2026-08-02 15:30:37 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
marco/IsoMmo!258
No description provided.