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
121 lines
4.8 KiB
Markdown
121 lines
4.8 KiB
Markdown
# Extracting from your own UO client (UOFiddler)
|
|
|
|
**Audience:** the shard operator, once, at setup time.
|
|
**Related:** [`SPAWN_ATLAS.md`](SPAWN_ATLAS.md) (where creature art fits),
|
|
[`../link/v8.md`](../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`](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`](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](https://github.com/polserver/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:
|
|
|
|
```json
|
|
{
|
|
"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.
|