Ruined
This commit is contained in:
@@ -1,7 +1,203 @@
|
||||
# The Last Hearth — woodland travelers and botanical pixel catalogue
|
||||
|
||||
## Authoritative fauna-23 / catalogue-100 art contract (2026-11-03)
|
||||
|
||||
This section supersedes earlier catalogue counts and package totals, not the
|
||||
character-layer or legacy OBJ contracts. Original MIT procedural drawings and
|
||||
meshes only: no downloaded assets, fonts, libraries or engine launch. Runtime
|
||||
wildlife integration remains the Lua owner's responsibility; these generators
|
||||
do not register monsters, change spawning, collision boxes or gameplay.
|
||||
|
||||
### Exact animated fauna handoff
|
||||
|
||||
[The fauna generator](../scripts/fauna-art.mjs) exports frozen `FAUNA_NAMES`,
|
||||
`FAUNA_ANIMATIONS`, `FAUNA_ART_MANIFEST`, `FAUNA_MATERIALS` and pure methods
|
||||
`faunaB3D(id)`, `faunaTexture(id)`, `faunaBounds(id)`, `faunaPortraitSheet(frame=9)`.
|
||||
Unknown IDs and frames fail closed. Every result is deterministic and fresh.
|
||||
Exactly these **23** IDs, in manifest/portrait row-major order:
|
||||
|
||||
hare, deer, fox, rabbit, red_squirrel, bank_vole, wood_mouse, hedgehog, badger,
|
||||
roe_deer, stoat, weasel, otter, robin, blackbird, blue_tit, barn_owl, mallard,
|
||||
common_frog, smooth_newt, brown_trout, bumblebee, earthworm.
|
||||
|
||||
Each has **hearth_fauna_<id>.b3d** and
|
||||
**hearth_fauna_<id>.png**; the latter is an opaque **64×64** nearest-neighbor
|
||||
semantic atlas. These 23 PNGs are deliberately **not** worldArt tiles. Old
|
||||
hearth_hare.obj, hearth_fox.obj, hearth_deer.obj and their textures remain byte
|
||||
compatible and generated; runtime can migrate to the new names independently.
|
||||
|
||||
Every model has one root, one textured mesh, outward-wound flat-normal solids,
|
||||
half-texel inset UVs, normalized rigid bone weights, no scale animation and
|
||||
**100 real skeletal frames at 24 FPS**. B3D key indices 1–100 map to Luanti
|
||||
frames 0–99. `visual_size={x=1,y=1}`, **10 model units/node**, feet/lowest bind
|
||||
surface at **Y=0**, forward +Z. `faunaBounds(id).min/max` are authoritative
|
||||
**bind-mesh node bounds**, not guessed collision or conservative animated bounds.
|
||||
They are also serialized per animal; do not infer scale from portrait cells.
|
||||
|
||||
Bind bounds in nodes below are rounded to five decimals for review; the exported
|
||||
values and generated manifest retain full precision. All minimum Y values are 0.
|
||||
|
||||
| ID | Minimum X, Y, Z | Maximum X, Y, Z |
|
||||
| --- | --- | --- |
|
||||
| hare | -0.13750, 0, -0.34150 | 0.13750, 0.81400, 0.37004 |
|
||||
| deer | -0.31625, 0, -0.68300 | 0.31625, 1.59470, 0.65081 |
|
||||
| fox | -0.15000, 0, -0.86240 | 0.15000, 0.68560, 0.50280 |
|
||||
| rabbit | -0.15400, 0, -0.25954 | 0.15400, 0.55090, 0.31371 |
|
||||
| red_squirrel | -0.07500, 0, -0.46744 | 0.07500, 0.59240, 0.24266 |
|
||||
| bank_vole | -0.07000, 0, -0.17039 | 0.07000, 0.19600, 0.17507 |
|
||||
| wood_mouse | -0.06000, 0, -0.31045 | 0.06000, 0.23860, 0.16250 |
|
||||
| hedgehog | -0.11000, 0, -0.21173 | 0.11000, 0.25000, 0.23755 |
|
||||
| badger | -0.19000, 0, -0.45078 | 0.19000, 0.49240, 0.47589 |
|
||||
| roe_deer | -0.22375, 0, -0.49176 | 0.22375, 1.22850, 0.48443 |
|
||||
| stoat | -0.06000, 0, -0.45146 | 0.06000, 0.24620, 0.26954 |
|
||||
| weasel | -0.04250, 0, -0.26846 | 0.04250, 0.18080, 0.19111 |
|
||||
| otter | -0.12500, 0, -0.70711 | 0.12500, 0.38840, 0.39778 |
|
||||
| robin | -0.16460, 0, -0.21895 | 0.16460, 0.37210, 0.17388 |
|
||||
| blackbird | -0.18440, 0, -0.30653 | 0.18440, 0.41750, 0.20140 |
|
||||
| blue_tit | -0.12500, 0, -0.17516 | 0.12500, 0.31670, 0.13705 |
|
||||
| barn_owl | -0.28340, 0, -0.27369 | 0.28340, 0.64340, 0.27500 |
|
||||
| mallard | -0.27350, 0, -0.43790 | 0.27350, 0.47040, 0.25550 |
|
||||
| common_frog | -0.09900, 0, -0.15026 | 0.09900, 0.14750, 0.22272 |
|
||||
| smooth_newt | -0.04000, 0, -0.34231 | 0.04000, 0.10140, 0.16295 |
|
||||
| brown_trout | -0.10450, 0, -0.35520 | 0.10450, 0.30450, 0.24000 |
|
||||
| bumblebee | -0.14400, 0, -0.06500 | 0.14400, 0.12250, 0.10640 |
|
||||
| earthworm | -0.02000, 0, -0.19127 | 0.02000, 0.04000, 0.19127 |
|
||||
|
||||
| Clip | Inclusive engine frames | Authored action |
|
||||
| --- | --- | --- |
|
||||
| idle | 0–19 | breathing, looking, ear/tail attention; segmented worm motion |
|
||||
| locomotion | 20–39 | linked upper/lower limb strides, tail follow-through; worm joint wave |
|
||||
| feed | 40–59 | head/neck dip and bird peck; small head/segment sampling motion |
|
||||
| flight_swim | 60–79 | mirrored wing flaps with secondary flight feathers; aquatic tail beats/fins |
|
||||
| rest | 80–99 | settled head/limbs, low-amplitude breathing and tail/segment movement |
|
||||
|
||||
All five ranges loop with matching endpoint poses. No engine-side fake motion
|
||||
is needed. The shared `flight_swim` range on non-flying terrestrial mammals
|
||||
is an **alert looking reserve**, not invented flight/swimming. The rest range
|
||||
is a settled standing/perched posture, **not a speculative lying-down or curled
|
||||
skeletal deformation**. Frog/newt limbs paddle; fish have a hinged caudal fan,
|
||||
paired pectorals and dorsal fin; bees have six legs and thoracic wings; the
|
||||
earthworm has twelve serially parented body joints. No bones are driven merely
|
||||
because another species has similarly named appendages.
|
||||
|
||||
Hare ears and hind feet, compact rabbit, squirrel's raised brush, vole's short
|
||||
tail versus mouse's long tail, hedgehog spine blocks, broad badger, tall antlered
|
||||
deer versus short roe antlers, slender stoat/weasel, low otter with cream muzzle,
|
||||
robin breast, blackbird bill, blue tit cap, owl facial discs, duck neck/webbed
|
||||
feet/speculum and amphibian low profiles are authored species landmarks, not a
|
||||
single body recoloured. The restrained coat/cream/earth/mineral palette matches
|
||||
the Minecraft/Vintage Story-like block world without copying either game's art.
|
||||
|
||||
The sixteen **16×16** material patches occupy four row-major columns:
|
||||
|
||||
| Row | 0 | 1 | 2 | 3 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 0 | coat | belly | face | ear |
|
||||
| 1 | foot | tail | wing | eye |
|
||||
| 2 | nose | stripe | feather | beak |
|
||||
| 3 | fin | spot | horn | membrane |
|
||||
|
||||
Badger face stripes, cream otter underside, stoat black tail tip, fox cream tip,
|
||||
bee bands, trout spots, wing bars and feather veins are semantic markings, not
|
||||
whole-model tints. All atlas texels have alpha 255 (solid low-poly appendages).
|
||||
|
||||
`generateAssets()` writes **fauna-art.json** at package root: format 1,
|
||||
`animations`, `animals` (ID, exact filenames, dimensions, units, visual size,
|
||||
bind bounds, posture, clips, MIT provenance), and `portraitSheet` metadata.
|
||||
Every output uses the existing guarded staging writer and package hash inventory.
|
||||
The portrait path inside staging is
|
||||
**mods/hearth/textures/hearth_fauna_contact_sheet.png**: **512×768**, four
|
||||
columns of 128px cells, 23 animals plus one paper cell, frame 9. It is an actual
|
||||
CPU triangle rasterization of skinned geometry with atlas sampling and flat
|
||||
lighting, **not a texture swatch, font illustration or engine screenshot**.
|
||||
`faunaPortraitSheet(65)` previews the same geometry's flight/swim pose. Each cell
|
||||
fits its own posed bounds, so cells are an identity review, not relative scale.
|
||||
|
||||
### Catalogue 100 and three additional cube-tree material families
|
||||
|
||||
The JavaScript art catalogue now matches all **100 exact IDs and Latin names**
|
||||
in the read-only Lua BOTANY catalogue. Every taxon has active and dormant 32px
|
||||
sprites: **200** provenance records in **botany-art.json**, each including
|
||||
`botanicalLatin`, group, morphology, state, filename, dimensions and MIT author.
|
||||
Group counts: trees 13, shrubs 14, grasses 10, herbs 22, ferns_mosses 11,
|
||||
fungi 10, aquatic 10, lichens 10. The twenty additions are:
|
||||
|
||||
- crab_apple — Malus sylvestris; wild_cherry — Prunus avium;
|
||||
field_maple — Acer campestre.
|
||||
- honeysuckle — Lonicera periclymenum; ivy — Hedera helix;
|
||||
gorse — Ulex europaeus; broom — Cytisus scoparius.
|
||||
- dandelion — Taraxacum officinale; daisy — Bellis perennis;
|
||||
red_clover — Trifolium pratense; birdsfoot_trefoil — Lotus corniculatus;
|
||||
ribwort_plantain — Plantago lanceolata; selfheal — Prunella vulgaris;
|
||||
knapweed — Centaurea nigra; oxeye_daisy — Leucanthemum vulgare;
|
||||
field_scabious — Knautia arvensis; teasel — Dipsacus fullonum;
|
||||
cow_parsley — Anthriscus sylvestris; garlic_mustard — Alliaria petiolata.
|
||||
- holly_fern — Polystichum setiferum (catalogue contract ID; soft shield-fern).
|
||||
|
||||
Original 80 drawings and approved leaf PNG bytes are retained. New silhouettes
|
||||
have distinct flowerheads, twining honey tubes, climbing ivy rootlets, gorse
|
||||
spines, broom switches, ligulate dandelion rays, trifoliate clovers, plantain's
|
||||
anther ring, teasel cones, compound parsley umbels, brassica siliques and forked
|
||||
fern pinnae. Dormant specimens lose flowers and fruit, keeping species-specific
|
||||
dry structure. Existing runtime pixel-wind plant waving is unchanged.
|
||||
|
||||
All thirteen cube-tree IDs: oak, birch, pine, willow, alder, beech, aspen, rowan,
|
||||
hazel, spruce, crab_apple, wild_cherry, field_maple. Each has log_top, log_side,
|
||||
leaves and planks. Deciduous species also have leaves_spring, leaves_autumn and
|
||||
leaves_winter. Cherry has horizontal lenticels; crab apple fine fissures; maple
|
||||
interrupted cork diamonds. **46** compatibility bark/leaf atlases cover all
|
||||
species/seasons, including underscore IDs parsed by the anchored suffix contract
|
||||
`/_atlas(?:_(spring|autumn|winter))?$/`, never positional underscore splitting.
|
||||
No new unused irregular-tree OBJ meshes are generated; the 29 legacy flora OBJ
|
||||
exports and the 23 old species-stage meshes remain frozen.
|
||||
|
||||
The world contact sheet now has **421 tiles**, **512×864**, **16 columns**,
|
||||
sorted filenames as the row-major legend, height **ceil(count/16)*32**. The
|
||||
bounded **1–512** tile guard remains intact. Its 61 additions are 40 botanical
|
||||
sprites plus 21 cube-tree materials/seasonal leaves. Fauna never consumes those
|
||||
cells. The two-swatch minimal fixture closes at **675 PNGs and 63 models**:
|
||||
**37 OBJ + 26 B3D** (3 players and 23 fauna), with exact manifest-derived
|
||||
inventories and package-integrity verification, not loose minimum-count checks.
|
||||
|
||||
Validation is Node-only: independent B3D chunk parsing, winding, normals, UVs,
|
||||
weights, every keyed pose, forward-kinematic displacement for all five clips,
|
||||
loop seams, species landmarks, encoded texture pixels, botanical catalogue
|
||||
equality, unique silhouettes, approved old leaf hashes, package bytes and output
|
||||
link refusal. No engine render, performance, live animation or spawn claim.
|
||||
|
||||
Final focused run: **60 passed, 0 failed, 0 cancelled, 0 skipped**, Node
|
||||
**24.22.0**, **160.80 seconds**, exit 0 and empty stderr. Suites: fauna art,
|
||||
world art, flora art, existing assets and character art. Both actual skinned
|
||||
mesh sheets (idle frame 9 and flight/swim frame 65) and the 421-tile world sheet
|
||||
were visually inspected outside the source tree. No manual binary files added.
|
||||
CodeGuard boundaries: no credentials or certificates introduced; SHA256 is used
|
||||
only for deterministic integrity checks; positive ID/frame validation, bounded
|
||||
allocations and existing symlink/junction-safe staging writes are retained.
|
||||
Optional audio codec decode/regeneration was not configured; existing Ogg
|
||||
framing/CRC/hash checks passed. Directory-junction refusal passed; the existing
|
||||
file-symlink subcase lacked Windows symlink privilege.
|
||||
|
||||
## Authoritative character art contract (2026-11-03)
|
||||
|
||||
**Revision note (2026-11-04):** the 2026-11-03 option counts and rig/mesh-size
|
||||
figures in this section are superseded by the expanded character catalogue below.
|
||||
|
||||
### Expanded woodland traveler update (2026-11-04)
|
||||
|
||||
The current public body allowlist is `compact`, `lean`, `balanced`, `broad`,
|
||||
`sturdy`; all remain cosmetic, equal-height silhouettes using the same rig and
|
||||
collision. Added original face linework (`lined`), hair styles (`curly`,
|
||||
`topknot`, `undercut`), facial hair (`goatee`, `braided_beard`), garments
|
||||
(`hooded_cloak`, `travel_coat`, `wool_mantle`), accents (`satchel`, `tool_belt`,
|
||||
`pauldrons`, `hood`), and a `birthmark`. The current generated manifest is 258
|
||||
distinct validated filenames (including transparent `none` variants), and the
|
||||
expanded player B3D contains 384 vertices and 192 triangles. The model adds an
|
||||
original draped shoulder mantle, belt, back satchel, and projecting nose/ears;
|
||||
no player mechanics or tool attachment names are changed. Current Lua and art
|
||||
builders must use the exact texture order implemented by `C.preview()` and
|
||||
`characterLayers()`; hood accents intentionally overlay hair. See
|
||||
[character-creator.md](character-creator.md) for the current option list.
|
||||
|
||||
This section supersedes earlier **player** appearance and package-total statements
|
||||
below; botanical art itself is unchanged. Character work owns only
|
||||
[scripts/media.mjs](../scripts/media.mjs),
|
||||
|
||||
Reference in New Issue
Block a user