feat: asset-extraction tooling + natural-size placed fixtures #131
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
marco/IsoMmo!131
Loading…
Reference in a new issue
No description provided.
Delete branch "chore/uo-art-extraction-ankh"
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
Follow-up to #112: build the asset-extraction tooling to bring UO art into the pack, fix how
placed fixtures render, and give the ankh a UO-static placeholder (better than the flat colour
tile) while the true ankh art is still being tracked down.
GroundItemnow carriesPlaced, and the client draws a placed fixture at its art's naturalsize, anchored bottom-centre (standing on its tile like a tree). Protocol bumped to 7.
findart <client> <name>— searchtiledata.mulfor statics by name (the authoritativeway to locate art), backed by
TileDataReader.multiscan <client> <tileId>— find whichMulti.mulmulti contains a tile (MultiMulReader,classic 12-byte records), for houses/shrines/arena props (#89).
composite— preview a multi-tile static composite to a PNG (find offsets before baking).docs/asset-extraction.mddocuments the whole pipeline (classic.mulsource,just pack,finding/adding an art id, the tools above, natural-size fixtures, the
.uopcaveat) and isreferenced from
CLAUDE.md.item_ankh = 0x1D98, but that idturned out to be a decorative (gore) UO static, not a real ankh — and
findartfinds nostatic named "ankh" in this client, so the true ankh art isn't pinned yet. The owner chose to
keep this UO-static placeholder for now (it reads better than the flat colour tile). The real
ankh static + the resurrect-sparkle FX stay tracked in #130 (this PR does not close it).
Design note (reviewed via
critical-design-review): asset + client-render only — the server isunchanged, no gameplay rule touched; the one wire change (
GroundItem.Placed) carries therequired protocol bump; multi-platform and the asset-fallback invariant hold (no pack →
placeholder).
Screenshots / recording
Captured via the debug harness (
docs/debug-harness.md),login debugnext to a persisted ankh.The placed fixture now renders at natural size, standing on its tile (versus the earlier squished
pickup-sized sprite). The art itself is the placeholder UO static described above.
How it was tested
just test— all green (189 GameServer, 17 AssetExtractor incl. newMultiMulReadertests,72 Client.Core, 54 Shared, 12 Auth, 4 Assets).
just lint— build succeeds, 0 warnings.assets.isoafrom~/Games/UO(classic.mul) and confirmedstatic/item_ankhispresent; validated
findartagainst known ids (finds swords) andmultiscan(classic 12-byte).Checklist
just lintpasses (CSharpier + analyzers, zero warnings)just testis greenMultiMulReader; discovery commands are dev tooling like the existingstatics/landones)feat: real UO ankh art + natural-size placed fixtures (#130)to feat: asset-extraction tooling + natural-size placed fixtures