Files
docs/website/UOFIDDLER.md
wtclaude bbd69a8e2e docs(link): clilocs come over the bridge now, and UOFiddler's first job is gone
Phase 2 of the Asset Bridge is built, so the documentation stops telling an
operator to install a GUI tool.

`v8.md` gains §9.1 and §9.2 — what the port cost, what it measured, and where the
base table comes from now. The measurement worth keeping: **67,496 rows in
290 ms**, which is exactly what UOFiddler's own `Ultima.dll` produced from this
same client through the converter this phase deletes. An independent
implementation agreeing to the row is the strongest check available that a format
decoder is correct, and it is not something a subtly-wrong one produces.

§17 records the four shapes the org lead settled before any of it was written.
Two departed from the recommendation: **the bridge always wins** (no source
setting — there is no version of that question an operator benefits from
answering) and **import is admin-triggered** (boot does not call the shard at
all).

`CLILOCS.md` is rewritten around that: where the table comes from, what arrives
and in how many pieces, the refusals — including the two the file pipeline had no
equivalent of (a client patched mid-import, and the base's exemption from the
vanished-source rule, which exists so an upgraded install is not asked to approve
a change the upgrade itself made).

`UOFIDDLER.md` loses Part 1 entirely rather than having it rewritten. What is
left is creature art, which phase 5 takes, after which the page goes away. `v3.md`
§8.6 keeps its reasoning with a note saying what superseded it, because the
argument for why the manual step existed is still the argument for why this was
worth building.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
2026-09-10 11:13:56 -05:00

4.8 KiB

Extracting from your own UO client (UOFiddler)

Audience: the shard operator, once, at setup time. Related: SPAWN_ATLAS.md (where creature art fits), ../link/v8.md (the Asset Bridge, which is replacing this page).

The cliloc conversion is gone — you no longer do this by hand

Protocol 8, phase 2. The shard reads its own client's Cliloc.enu and serves the table over the bridge, so there is nothing to install, convert or copy. Press Admin → Shard → Import after you patch your client and that is the whole procedure; see CLILOCS.md.

Part 1 of this guide has been deleted rather than rewritten. If you already have a converted file it keeps working on an install with no uo-link configured, but nobody should make a new one.

Creature art is next (phase 5), after which this page goes away entirely.

What remains here reads data that only exists inside a UO client, and a UO client's files are EA's, not ours to redistribute. So neither this repo nor any image we publish can ship them — the operator extracts from their own client and points the site at the result.

Feature What it needs Required? Without it
Creature art (SPAWN_ATLAS.md) Sprites from .mul/.uop No Atlas pages render as text, which is the normal state

It is optional and it is not load-bearing. A shard that never does any of this is fully supported.

Everything you extract stays outside the repository: spawnAtlas.art.json and server/uploads/ are gitignored, so none of it can be committed by accident.


Part 0 — Get UOFiddler

UOFiddler is the community client-file editor. What is left here uses its GUI to export sprites; the Ultima.dll this guide used to reach for was the cliloc decompressor, and the shard has its own now.

  1. Download the latest release zip from https://github.com/polserver/UOFiddler/releases/latest — one asset, named UOFiddler-<version>.zip (4.22.2 is ~2 MB).

  2. Extract it. The zip contains a single top-level folder, and the two files that matter are at its root:

    UOFiddler-4.22.2/
      UoFiddler.exe     ← the GUI (Part 2 needs this)
      Ultima.dll
      plugins/
      …
    
  3. Runtime: UOFiddler 4.22.2 is built for .NET 10, so running UoFiddler.exe needs the .NET 10 Desktop Runtime (Windows only). Install from https://dotnet.microsoft.com/download/dotnet/10.0.

Finding your client files

The art files are in your UO client installation directory. Look for art.mul / artLegacyMUL.uop and the anim*.mul set. The EA Classic Client's default location is:

C:\Program Files (x86)\Electronic Arts\Ultima Online Classic\

If your shard distributes its own patched client to players, use that copy — it is what your players actually see. (It is also the copy the shard itself reads from, since a ServUO server resolves Config/DataPath.cfg into its own client path at boot, which is the premise the Asset Bridge is built on.)


Part 2 — Creature art for the spawn atlas (optional)

Goal: put sprites on atlas pages. Purely cosmetic — the atlas is fully functional as text, and art is NULL on every fresh import.

This project ships no art and no art-extraction tooling, and never will.

  1. Open UoFiddler.exe and point it at your client directory (Settings → Paths), then open the Animations tab for creature sprites — or Items for object art — find the creature, and export as PNG. Right-click an entry for its export options, or use the tab's Export All action for a batch. (4.22.2 added an export option to the Animation tab's thumbnail list, which is the convenient one here.)

  2. Put the images under server/uploads/atlas/.

  3. Copy server/db/data/spawnAtlas.art.example.json to spawnAtlas.art.json in the same directory and map creature slugs to file names:

    {
      "lizardman": "lizardman.png",
      "orc": "orc.png"
    }
    

    Keys are the slugs the atlas API reports, derived from the type names in your own shard's Spawns/*.xml — read them off the atlas rather than guessing. A creature with no entry renders without art, which is the default.

  4. Restart, or npm run atlas:import -- --force.

The art map is re-read on every atlas refresh, so adding one image is an edit plus a refresh. Both spawnAtlas.art.json and server/uploads/ are gitignored.


Licensing, briefly

UO's strings and sprites are EA's. Extracting from your own client for your own shard is the arrangement here; redistributing the extracted files is not something this project does or can advise on. That is the whole reason this page exists instead of a download link.