Skip to content

UO Parity Roadmap

Moshu edited this page Oct 5, 2026 · 1 revision

UO Parity Roadmap

Goal: equipment that looks and moves like original Ultima Online art: every action, every facing, correct layering, and a working import into a classic client.

This page is the wiki view of ROADMAP.md and the detailed acceptance plan in docs/render-release-roadmap.md. Status reflects what the repository docs record as verified (as of October 2026).

Legend: done = verified locally with evidence · partial = works on targeted cases, not full coverage · open = not started or not yet proven.

Already working

  • Fit Lab editing: undo/redo, 100-step history, autosave, browser crash recovery, three recoverable disk saves.
  • Scoped corrections (pack, slot, group, item; per action and/or direction), resolved identically by the lab and Blender builds.
  • Torso-aware back-attachment masking, separate clothing masking, per-part body hiding under clothes.
  • Lab builds and selective rebuilds: untouched VD blocks stay byte-identical; mixed-version rebuilds are refused.
  • The October 2026 UO_Model3D update: 112-bone rig, native 256x256 canvas, anchor (128,192).
  • CC0 starter equipment for all 25 UO layer routes.

Render acceptance gates

Gate Status What is left Where help is wanted
1. Final renders are authoritative partial Side-by-side cases showing the Blender renderer and the live lab agree on worn-part rules, outline correction, torso mask, push-out and mounted holdout. Reproducible front/back/side comparisons; labelling preview-only differences.
2. Every animation, every slot open At least three representative items per slot across all 35 actions, five stored directions plus three mirrored views, including large weapons, shields, cloaks, skirts, hair, falls and mounted poses. Running and reviewing the acceptance matrix; filing parity gaps.
3. Fix exceptions locally partial Corrections exist; twist, finger, shield and cloak/skirt chain targets (proposed_target in mappings) are not yet used by pack_fit.py. Rig targets for twist bones, fingers and cloth chains; A/B evidence on failing poses.
4. A complete outfit open Combined layers with body hiding, straps, back items, weapons, paired pieces and garment intersections across the full action set. Building and reviewing one full outfit; reporting layer-order or double-hiding issues.
5. Client compatibility open Full VD output staged into a copy of a classic client, animation/static IDs and body/equipment conversions handled, then equipped in game. In-game tests on your own client/server; documenting Body.def / Bodyconv.def / Equipconv.def routing.

Action coverage matrix

UO "people" bodies have 35 actions. Content Studio's preview build renders actions 0, 4, 9, 22 and 25; a full build renders all 35. Recorded evidence so far:

  • One forearm item rendered all 35 actions x 5 stored directions (175 blocks, 1,050 frames) with a passing VD alpha/anchor round trip and no clipped or empty frames; representative composites were inspected, not every frame.
  • Chest, leg and back items each covered actions 0, 4, 9, 22, 25 in all five stored directions (125 frames each), file-validated and visually spot-checked.
  • Not yet verified: a full 35-action lab build, mounted actions, cloaks with the torso mask, weapons on the new weapon bones. No in-game test of the current renderer yet.

Status per group against gate 2 (three items per slot, visually reviewed):

Group Actions Status Evidence / gap
Walk / run 0 walk, 1 walkstaff, 2 run, 3 runstaff partial Walk (0) is in every preview and checked on several slots. 1–3 only in the single full forearm build.
Idle / fidget 4 idle, 5 idle_anim, 6 yawn partial Idle (4) in every preview. 5–6 only in the full forearm build.
Melee combat 7 combat1, 8 combat2, 9 slash1h, 10 pierce1h, 11 bash1h, 12 bash2h, 13 slash2h, 14 pierce2h, 15 combatadvance, 30 block, 31 punch partial 9 is in every preview and was used in scoped-correction and rebuild tests. The rest only in the full forearm build. Weapons on the new weapon bones are unverified.
Spells 16 spell1, 17 spell2 open Only in the full forearm build; no targeted review.
Bow / crossbow 18 bow_attack, 19 crossbow_attack open No targeted review; bows on the new bow.L bone unverified.
Hit / death 20 get_hit, 21 death_back, 22 death_forward partial 22 is in every preview and has the only approved reconstruction poses. 20–21 only in the full forearm build.
Mounted 23 mounted_walk, 24 mounted_run, 25 mounted_idle, 26 mounted_slash1h, 27 mounted_bow, 28 mounted_crossbow, 29 mounted_slash2h open 25 is rendered in previews, but mounted actions are listed as not verified; mounted holdout uses a horse proxy that needs visual review.
Emotes 32 bow_gesture, 33 salute, 34 eat open Only in the full forearm build; no targeted review.

No group is done yet: that needs three representative items per slot, all directions including mirrored ones, and a visual review.

Open technical problems

  • Preview vs final render. The lab's poke metric does not model the renderer's 1 cm holdout margin or 6 mm push-out; counts run high. The live preview also lacks exact-outline edge correction.
  • Rig targets not used yet. proposed_target bones (twist, fingers, shield, cloak/skirt chains) are ignored by pack_fit.py, so deformation those bones should carry cannot be fixed by a transform.
  • Cloth. Cloak/skirt binding uses cloth templates; a fresh physics bake is not automated, and cloaks with the torso mask are unverified.
  • Mounted poses. Mounted occlusion relies on the source project's horse proxy and masks.
  • Client routing. Body.def, Bodyconv.def, Equipconv.def, paperdoll gumps and female-body conversion are not authored automatically; artLegacyMUL.uop can shadow MUL art.
  • Untested contributed outfit-lab options: merge_items.py, make_gump_cloak.py, build_item.py --planar/--cut, atlas_to_vd.py --body/--outline.
  • Extraction gaps: anim2–anim5.mul, Body.def / Bodyconv.def substitutions and hues are not read by the adapter yet.
  • Reconstruction annotations: only 6 approved poses exist (action 22, SE).

Release path

  1. Developer preview (now): reviewed code and docs, redistributable examples only.
  2. Reproducible setup: clean-checkout test, documented Python/Blender versions, actionable missing-prerequisite messages.
  3. Automated release checks: schema/unit tests, fit-parity and save/recovery tests, file scanning, and a procedural Blender regression scene in CI.
  4. Alpha: a tagged release with a tested compatibility matrix and an outside tester completing setup.
  5. Beta: gates 1–5 complete on the supported client/body combinations, with in-game outfit tests.

The next highest-value work is a full-action, three-items-per-slot acceptance matrix, followed by one complete outfit imported into a real client.

How to help

  • Read Contributing first: never commit game data, extracted frames, commercial pack files or machine paths.
  • Report a mismatch with original art as a Parity gap issue (new issue): action id, direction, slot, item, expected versus actual, and a screenshot of SpriteMotion output only (never original client art).
  • Pick a row above marked partial or open and say which one you're taking in Discussions.

Clone this wiki locally