docs(website): an operator runbook for extracting from your own UO client #75

Merged
whitlocktech merged 1 commits from docs/operator-uofiddler-guide into edge 2026-07-30 09:51:35 +00:00
Member

Why

CLILOCS.md and SPAWN_ATLAS.md each explain why the operator has to supply something out of their own UO client — but neither says how. Both stop at "use UOFiddler", which assumes you already know where to get it, which file inside it matters, and where your client's Cliloc.enu lives.

New website/UOFIDDLER.md is that missing procedure, covering both touchpoints in one place (they share the tool, and both are optional):

Feature Needs Without it
Item / title names Cliloc.enu, converted names render as raw ids
Creature art sprites from .mul/.uop atlas renders as text (the normal state)

What it covers

  • Part 0 — the release zip (one asset, UOFiddler-<version>.zip), the two files at its root that matter (Ultima.dll, UoFiddler.exe), the .NET 10 runtime requirement, and where client files actually are — including "if your shard ships a patched client, convert that one".
  • Part 1 — Route A (bundled converter, recommended) and Route B (GUI + fixup), pointing the site at the result, verifying the import, an error table, and a reminder that custom items take an overlay rather than a re-export.
  • Part 2 — creature art for the atlas, with the slug-mapping gotcha called out.

Verified, not assumed

Ran the whole chain on a stock Windows box before writing it down: UOFiddler 4.22.2 (Ultima.dll is net10.0), .NET SDK 9.0.312 building the net8.0 converter, RollForward carrying it onto runtime 10.0.8, and the site's own clilocParse.js reading the output back. Zip layout and the runtime version come from the actual release, not memory.

One correction

CLILOCS.md claimed a UOFiddler GUI export "works equally well". It does not. The Cliloc tab writes three columns with the flag last:

Number;Text;Flag
1023721;quarter staff;0

parseClilocText splits on the first separator only, so the flag is absorbed into the name and every item on the site renders as quarter staff;0. Confirmed against the real parser.

The parser does already handle number,flag,text with the flag in the middle. It is deliberately not extended to the trailing form: a final ;0 is indistinguishable from a name that genuinely ends that way, so a heuristic there would corrupt real names to save the operator one sed. Documented as a fixup step (both sed and PowerShell forms, both tested) and the reasoning recorded in CLILOCS.md.

Scope

Docs only — no code changes. Targets edge with the rest of the Protocol 3.0 line.

Possible follow-up, deliberately not bundled: website/server/tools/cliloc-export/README.md could link this runbook.

AI disclosure

Written with Claude Code (Opus 5); commits carry Co-Authored-By: Claude.

## Why `CLILOCS.md` and `SPAWN_ATLAS.md` each explain **why** the operator has to supply something out of their own UO client — but neither says **how**. Both stop at "use UOFiddler", which assumes you already know where to get it, which file inside it matters, and where your client's `Cliloc.enu` lives. New `website/UOFIDDLER.md` is that missing procedure, covering both touchpoints in one place (they share the tool, and both are optional): | Feature | Needs | Without it | |---|---|---| | Item / title names | `Cliloc.enu`, converted | names render as raw ids | | Creature art | sprites from `.mul`/`.uop` | atlas renders as text (the normal state) | ## What it covers - **Part 0** — the release zip (one asset, `UOFiddler-<version>.zip`), the two files at its root that matter (`Ultima.dll`, `UoFiddler.exe`), the .NET 10 runtime requirement, and where client files actually are — including "if your shard ships a patched client, convert *that* one". - **Part 1** — Route A (bundled converter, recommended) and Route B (GUI + fixup), pointing the site at the result, verifying the import, an error table, and a reminder that custom items take an overlay rather than a re-export. - **Part 2** — creature art for the atlas, with the slug-mapping gotcha called out. ## Verified, not assumed Ran the whole chain on a stock Windows box before writing it down: UOFiddler 4.22.2 (`Ultima.dll` is net10.0), .NET SDK 9.0.312 building the net8.0 converter, `RollForward` carrying it onto runtime 10.0.8, and the site's own `clilocParse.js` reading the output back. Zip layout and the runtime version come from the actual release, not memory. ## One correction `CLILOCS.md` claimed a UOFiddler GUI export "works equally well". **It does not.** The Cliloc tab writes three columns with the flag **last**: ``` Number;Text;Flag 1023721;quarter staff;0 ``` `parseClilocText` splits on the first separator only, so the flag is absorbed into the name and every item on the site renders as `quarter staff;0`. Confirmed against the real parser. The parser *does* already handle `number,flag,text` with the flag in the middle. It is deliberately **not** extended to the trailing form: a final `;0` is indistinguishable from a name that genuinely ends that way, so a heuristic there would corrupt real names to save the operator one `sed`. Documented as a fixup step (both `sed` and PowerShell forms, both tested) and the reasoning recorded in `CLILOCS.md`. ## Scope Docs only — no code changes. Targets `edge` with the rest of the Protocol 3.0 line. Possible follow-up, deliberately not bundled: `website/server/tools/cliloc-export/README.md` could link this runbook. ## AI disclosure Written with Claude Code (Opus 5); commits carry `Co-Authored-By: Claude`.
wtclaude added 1 commit 2026-07-30 08:35:10 +00:00
CLILOCS.md and SPAWN_ATLAS.md each explain WHY the operator has to supply
something out of their own client, but neither says how. UOFIDDLER.md is the
missing procedure: where to get UOFiddler, which two files in the zip matter,
which runtime it needs, where Cliloc.enu actually lives, the conversion, how to
point the site at the result, and how to confirm it took.

Verified end to end on a stock Windows box: UOFiddler 4.22.2 (Ultima.dll is
net10.0), .NET SDK 9.0.312 building the net8.0 converter, RollForward carrying
it onto runtime 10.0.8, and the site's own parser reading the output back.

Corrects one claim while doing it. CLILOCS.md said a UOFiddler GUI export
"works equally well"; it does not. Its Cliloc tab writes `Number;Text;Flag` --
three columns, flag LAST -- and parseClilocText splits on the first separator
only, so the flag is absorbed into the name and every item renders as
`quarter staff;0`. The parser already handles `number,flag,text` with the flag
in the middle, but a trailing `;0` is indistinguishable from a name that
genuinely ends that way, so this stays a documented `sed` on the operator's
side rather than a heuristic that would corrupt real names.

Co-Authored-By: Claude <noreply@anthropic.com>
whitlocktech merged commit 2e24427032 into edge 2026-07-30 09:51:35 +00:00
whitlocktech deleted branch docs/operator-uofiddler-guide 2026-07-30 09:51:37 +00:00
Sign in to join this conversation.
No description provided.