feat(assets): import authored biome props as statics, scattered per biome (#137) #184
No reviewers
Labels
No labels
alpha:wave-0
alpha:wave-1
alpha:wave-2
alpha:wave-3
area:assets
area:combat
area:ecology
area:infra
area:render
area:scripting
area:ui
area:world
enhancement
epic
migration
post-alpha
roadmap
tech-debt
type:bug
type:chore
type:design
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
marco/IsoMmo!184
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/biome-props"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Imports the authored biome props (rocks and vegetation) as statics and scatters them across the biome each belongs to, so the world reads as dressed terrain rather than bare ground. Unblocks the prop half of #137 and clears the prerequisite for the per-biome scatter (#140).
The blocker recorded on #137 was "the source PNGs are RGB with no alpha, and props need a transparent cut-out (project forbids colour-key)". That turned out to be recoverable: the sources are fake-opaque — alpha is 255 everywhere and the transparency checkerboard is baked into the RGB, plus a soft grey drop-shadow painted under each object. Both are separable analytically, so no colour-key is involved.
What changed
E:\Assetsources intoart/static/*.png, named to the asset HARD GATE (<material>_<kind>):volcanic_rock_black,mossy_boulder,mossy_rock,salt_crystal,leafy_bush,dead_bush,desert_cactus,yellow_flower_patch,rotten_tree_stump,frosted_shrub,wheat_tuft,young_pine_tree,marsh_mushrooms.static/tree*did.static/item_*keeps the centre anchor, since those are carryable item icons drawn like a dropped thing. Covered by a new test. Note: this also re-anchors the existingstatic/lilyandstatic/reeds, which is the correct reading for ground scenery.static <id> <blocks>row each. Bulky things you can't walk through block (rocks, boulder, salt crystal, cactus, pine, stump); low ground cover is walkable decoration (small rock, bushes, flowers, wheat, mushrooms).The cut-out pipeline (why the first attempts had white rims)
Worth recording, because it bit repeatedly: an achromatic pixel is only part of the object when it is genuinely dark. Classifying "anything below mid-value" as object swallowed the painted drop-shadow (a grey ~190-250 band) and rendered it as an opaque pale ring around every base. The fix is
core = saturated OR very dark, holes filled (so pale interiors like salt facets survive), and everything outside the core un-matted against the white backdrop — which turns the painted shadow into a real translucent contact shadow that composites over any terrain.How it was tested
OwnArtanchor test.Cut-outs over grass
In-game detail — the bottom-centre anchor puts every prop on its tile.
Biome tour — each prop in the biome it belongs to.
Notes / follow-ups
world.statics. The generative per-biome scatter is still #140 — this PR unblocks it by supplying the art it was waiting on.marsh mushrooms.pngin the source folder has a space in its filename; the pack entry normalises it tomarsh_mushrooms.Second pass: the full prop set, forests, and a reforged world
The branch now carries the whole authored prop set (66 kinds) rather than the first 13, the trees grow as forests, and the world was reforged four times larger with clearly separated biomes so it can actually be toured.
World — regenerated at 256 x 192 = 49,152 tiles (4x the old map) via
scripts/genmap.py, with a majority filter that consolidates the noise classification into one contiguous region per biome. Distribution: tundra 21%, northern grassland 15%, desert and marsh 13% each, grass 10%, rocky + mountain 16%, salt plain 6%, savanna 5%, plus the volcanic caldera. The caldera is now constrained inland and nothing is placed within 8 tiles of the border ring, so no region is left clipped by the edge.Forests — trees are no longer sprinkled evenly: 32 groves of mixed species with tight in-grove spacing (7 pine woods in the northern grassland, 6 in tundra, 6 dead woods in savanna, 5 on rocky ground, 7 cactus stands, 1 burnt grove on the volcano). 1,344 props placed in total.
Scale — every prop is now sized against the measured human sprite (22x61 px). Trees were previously sized by width, which is why they looked stunted; they are now sized by height in human multiples: the snowy pine at 4.0x (5.5 tiles tall), young pine 2.9x, dead trees ~2.8x, cacti 1.7-1.8x. The pines are the only living trees in the set, so they deliberately tower over everything.
Cut-out fixes found by review
snowy_pine) and a frosted bush placed in the desert (renamedfrosted_twig_bush). Anything carrying snow or frost is now restricted to the cold biomes.Marked for the forest work — the 71 static rows in
content/tiledata.txtare grouped into 7 labelled categories, with the tree block headed as forest material, so #140 knows where to draw from. This is a readable grouping, not yet a machine-queryable column.Whole solution builds 0 warnings; all tests green (7/7 projects). Verified in the client on a fresh DB.
Known, tracked separately (rendering, not content): a yellow seam on the marsh / dry-savanna border, and square-block banding inside a biome where its 4 ground variants meet.
Approved by the owner — merging per owner decision. (Scope/description notes captured in review; body under-describes the change: 4x world regen + necropolis set + 66 assets vs the stated 13 props.)