DramaticShapeVoxelMod archival mirror · read-only
d94b4dcf75a3c18becced9665e92f7a08c31aba4

grow Viridian Forest real trees, stumps and signs

DramaticShape · 2026-07-27 · parent 7b727aa684

grow Viridian Forest real trees, stumps and signs

The forest was raw detector output: ragged mixed-height tree boxes
with 0px rim collars, stump rows fused into crate walls, and signs
broken by the $32 water-fallback trap. Every tile of the tree drawing
and the stumps now takes the per-cell voxel hull the border forest
wears (a tree's four quarter-hulls tile into one lumpy canopy), signs
take the signpost slab, and the white filler is flat ground.

Changed files

CHANGELOG.md           | 18 ++++++++++++++++++
 data/voxel_heights.lua | 25 +++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

Diff

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 59541dc..074c15e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,24 @@
 
 ### Added
 
+- **Viridian Forest grows real trees.** Nearly everything drawn in the
+  forest is ROUND, and the detector was boxing all of it: the big trees
+  came out as ragged mixed-height volumes (their sparse canopy-rim
+  tiles read 0px against 32px bodies, leaving gap-toothed hedge walls),
+  the stump rows merged into 16px crate walls wearing folded stump art,
+  and the trail signs were broken piles -- their $32 tile is the
+  water-fallback trap and recessed into a pond lip in the middle of the
+  woods. All of it is now profile-pinned to the treatments the rest of
+  the world already uses: every tile of the tree drawing (ball, rim
+  wisps, feet) and the stumps take the per-cell voxel HULL the overworld
+  border forest wears -- a tree spans 2x2 cells, so its four
+  quarter-hulls tile into one big lumpy canopy, and each stump becomes a
+  round bollard; the signs take the standing thin-slab `signpost`
+  treatment every town sign gets; and the white sparkle filler inside
+  the tree masses is flat ground instead of an invisible zero-height
+  box. The whole map now resolves to hulls, signs, ledges and ground --
+  a detector sweep finds no stray boxed column anywhere.
+
 - **Flowers stand up, and keep swaying.** The animated meadow tile
   ($03, the one tile the overworld animates by frame rewrite) now
   renders as a billboard one voxel deep: the drawing's darkest tones
diff --git a/data/voxel_heights.lua b/data/voxel_heights.lua
index a8e477e..16b3352 100644
--- a/data/voxel_heights.lua
+++ b/data/voxel_heights.lua
@@ -178,8 +178,33 @@ return {
     CAVERN = {
       ledge = { 5 },
     },
+    -- Viridian Forest.  Nearly everything drawn here is ROUND, and the
+    -- detector was boxing all of it: the big trees came out as ragged
+    -- mixed-height volumes (their sparse canopy-edge tiles read 0px,
+    -- their bodies 32px), the stump rows merged into 16px crate walls
+    -- wearing folded stump art, and the trail sign was a broken pile --
+    -- its $32 tile is the water-fallback trap and recessed into a pond
+    -- lip in the middle of the woods.
     FOREST = {
       ledge = { 46 },
+      -- the big trees -- the ball ($05/$06/$15/$16/$25/$26), its rim
+      -- wisps ($04/$07/$17/$23/$24/$27) and its feet ($35/$36) -- and
+      -- the stumps ($02/$03/$12/$13): one voxel hull per 16x16 cell,
+      -- cut from the cell's own art, the treatment the overworld border
+      -- forest already wears.  A tree spans 2x2 cells, so its four
+      -- quarter-hulls tile into one big lumpy canopy.  Every tile of
+      -- the drawing is listed: the cell-rounding is per TILE, and a rim
+      -- tile left out keeps its detector reading -- which is exactly
+      -- the ragged 0/8/16/32px box collar the trees wore
+      cylinder = { 2, 3, 4, 5, 6, 7, 18, 19, 21, 22, 23,
+                   35, 36, 37, 38, 39, 53, 54 },
+      -- the white sparkle filler inside the tree masses: flat, not an
+      -- invisible zero-height box
+      ground = { 0 },
+      -- the trail signs: the standing thin-slab treatment every town
+      -- sign gets ($32 pinned is also what lifts it out of the water
+      -- trap)
+      signpost = { 33, 34, 49, 50 },
     },
 
     -- Oak's Lab (the tileset also serves the Fighting Dojo and Lance's