Skip to content
Moshu edited this page Oct 6, 2026 · 6 revisions

SpriteMotion

Make new Ultima Online equipment that animates like the original: drop in a 3D model, fit it on the classic body, get client-ready sprites for all 35 actions and 8 directions.

Fit Lab: a CC0 vest walking through all 8 facings, seen from the orbit, front, side and back views

▶ Watch the Fit Lab tour (MP4): the whole lab while the walk turns through all 8 facings.

SpriteMotion is a local, MIT-licensed content-authoring toolkit for the classic 2D Ultima Online client. You bring a 3D item (or a mapped asset pack), place it on the animated UO body in a browser, and Blender renders transparent equipment frames, a UOFiddler .vd file and client import packages. Your models, game data and generated content stay on your machine.

Status: public development preview. The tools are available now, but fitting and rendering still need broader animation coverage and in-game validation. This is not a one-click installer, and there is no guarantee yet that every item fits every animation. See UO Parity Roadmap.

What works today

Area State
Content Studio Import GLB/FBX/STL/BLEND items or pick a bundled CC0 starter, build a 5-action preview or a full 35-action build, review all 8 facings, download VD and import packages.
Fit Lab Live 3D body through the UO camera, per-slot offset/rotation/scale/binding, scoped corrections per item, group, action and direction, body hiding under clothes, Blender render pane, undo/redo with 100-step history, autosave and 3 recoverable disk saves.
Blender Build Pipeline 256x256 canvas with anchor (128,192), independent VD alpha/anchor validation, selective rebuilds that leave untouched blocks byte-identical.
Client staging Patched copies of anim.mul/anim.idx, art.mul, tiledata and a cosmetic ModernUO/ServUO item class. Your source client is never modified.
CC0 starter equipment Bundled, audited CC0 examples covering all 25 UO layer routes.
Sprite Pose Editor The original reconstruction workflow: annotate sprites, fit a rig, render, compare.

What "parity" still needs

The goal is equipment indistinguishable in motion from original UO art. Still open: a full acceptance matrix (three items per slot across all 35 actions), a complete multi-layer outfit, mounted poses, cloaks and weapons on the new weapon bones, and an in-game test in a real client. Details and status per action group: UO Parity Roadmap.

Quickstart (Windows)

You need your own, legally obtained Ultima Online client files. SpriteMotion ships no game data. Set SPRITEMOTION_UO_SOURCE to your UO client folder (the one with anim.mul / anim.idx), either in launchers\_shared\config.bat or as an environment variable. Without it, sprite extraction (original reference sprites), client staging and the outfit lab will not work.

You also need the UO_Model3D source folder (v13, created by Levy), obtained separately, plus Blender 4.2+ (SPRITEMOTION_BLENDER if not auto-detected) and Python 3.10+.

git clone https://github.com/DatMoshu/SpriteMotion.git
cd SpriteMotion
py -3 -m venv .venvs/spritemotion
.venvs/spritemotion/Scripts/python.exe -m pip install -e ".[test]"
.venvs/spritemotion/Scripts/python.exe tools/uo-content/pipeline.py setup --source "<extracted-UO_Model3D-folder>"
launchers/editor/workbench.bat cc0-starter

Content Studio opens at http://127.0.0.1:8772 and Fit Lab at http://127.0.0.1:8774. Full walkthrough, Linux/macOS notes and every setting: Installation, then Quick Tour: Workbench.

Guides

Step-by-step, per task: goal, prerequisites, exact commands, expected output and common mistakes.

Guide Use it when
Fit a slot in Fit Lab a part floats, pokes through or sits wrong in some animations or facings
Render an item end to end you want finished frames, a .vd and an import package
Clean up with masking the render has holes, or the body shows through the item
Troubleshoot a failing step something fails and you don't know which part
Take content into GUO you want SpriteMotion content staged for the GUO client and a private shard

Quick links

Get started Use the tools Under the hood Help out
Installation Content Studio Architecture Contributing
Quick Tour: Workbench Fit Lab Data Contracts UO Parity Roadmap
Gallery Blender Build Pipeline Asset Packs FAQ
Glossary Sprite Pose Editor

We're looking for contributors

SpriteMotion is a small project with a big target: every action, every facing, every slot, working in a real classic client. Useful help ranges from Blender/Python rigging work and web UI fixes to UO file-format knowledge, CC0 3D items, testing on Linux/macOS and equipping items on your own test shard.

Start with Contributing, pick an open item from the roadmap, and say hello in Discussions or the issue tracker.

Clone this wiki locally