# Isuldor UI theme refresh (March 2022 → May 2026)

This article records what changed in EverQuest’s stock UI between our last theme maintenance pass and this refresh, what we did to bring the **isuldor** minimal skin forward, and how to install and maintain it on the current client.

Paths for the local Steam/Linux install are in [steam-linux-paths.md](steam-linux-paths.md).

## What the theme does

The isuldor skin is a small set of patches against `uifiles/default/` (not a full skin replacement). It keeps only the windows that stay on screen most of the time and strips chrome so they fade into a dark layout:

| File | Purpose |
|------|---------|
| `EQUI_Templates.xml` | Adds `WDT_Def2_Minimal` and `WDT_Inner_Null` draw templates (dark tiled chrome, borderless inner panels) |
| `EQUI_Animations.xml` | Registers `dark_tile_64.tga` / `dark_tile_192.tga` and a 1×1 titlebar placeholder animation |
| `EQUI_HotButtonWnd.xml` | Replaces hotbar slot art with dark tiles; smaller 32×32 normal state |
| `EQUI_ChatWindow.xml` | Borderless chat shell; null inner template on input/output |
| `EQUI_CastSpellWnd.xml` | Transparent spell book shell; no close box or outer border |
| `EQUI_PlayerWindow.xml` | Compact player frame: overlaid HP/mana text, inline XP/AA XP bars, transparent shell |

Textures live in `ui/dark_tile_*.tga` and are copied beside the patched XML under `uifiles/isuldor/`.

The theme does **not** patch `uiresources/default/` (`AtlasSkin`). Modern HTML/Cohtml panels (guild, achievements, overseer, etc.) keep the stock look.

## Refresh summary (May 2026)

| Patch | Result against May 2026 `default` |
|-------|-----------------------------------|
| `EQUI_Animations` | Applies cleanly (line offsets shifted; hunks still match) |
| `EQUI_CastSpellWnd` | Applies cleanly |
| `EQUI_ChatWindow` | Applies cleanly |
| `EQUI_HotButtonWnd` | Applies cleanly |
| `EQUI_Templates` | Applies cleanly |
| `EQUI_PlayerWindow` | **Required rewrite** — see below |

`ui/install.sh` was updated to auto-detect the Steam Linux path (`~/.local/share/Steam/steamapps/common/Everquest F2P`) and honor `EQ_GAME_PATH`. The skin was rebuilt under `uifiles/isuldor/` on this machine.

## Why `EQUI_PlayerWindow` broke

The March 2022 patch set was generated against an older `EQUI_PlayerWindow.xml`. Three classes of drift caused `patch` to fail on hunks 5–7:

### 1. Label layout offsets

Stock UI moved percent labels (`HPPerLabel`, `ManPercLabel`, `FatiguePercLabel`) from `LeftAnchorOffset` **24** to **34**. Our diff still described the old coordinates, so context lines no longer matched.

### 2. New controls after the fatigue block

Daybreak added group-role buttons and aggro readouts **below** the fatigue labels, for example:

- `PW_GroupRoleTank`, `PW_GroupRoleAssist`, `PW_GroupRolePuller`, `PW_GroupRoleMarkNPC`
- `PW_AggroPctPlayerLabel`, `PW_AggroNameSecondaryLabel`, `PW_AggroPctSecondaryLabel`
- Parcel/mail icons and attack-indicator animations

The 2019 theme inserted custom **XP** and **AA XP** gauges in that slot. The refresh keeps those custom gauges but places them **immediately before** the group-role buttons so stock pieces are preserved.

### 3. Removed / relocated elements

- `PW_VoiceVolume` no longer exists; the old diff referenced it as a line anchor near the screen definition.
- `EQType` values for dynamic HP/mana text changed in stock UI (`19`/`20`); the theme uses `17` / `124` with shadow labels and live data from the client.

### 4. Line endings

Stock XML under `uifiles/default/` uses **CRLF**. Regenerating diffs from LF-only edits produces a whole-file diff and breaks `patch`. When updating `EQUI_PlayerWindow.diff`, normalize the built `isuldor` file to CRLF before `diff -u` (see [Maintenance](#maintenance)).

## Stock UI churn since March 2022

On this install, `uifiles/default/` still has **173** `EQUI_*.xml` window files (unchanged count), but **49** of them have filesystem dates after 2022-03-01. Notable areas touched by Daybreak in that window:

- **Player / target / pet** — `EQUI_PlayerWindow.xml`, `EQUI_TargetWindow.xml`, `EQUI_PetInfoWindow.xml`, blocked-buff windows
- **Inventory & loot** — `EQUI_Inventory.xml`, `EQUI_AdvancedLootWnd.xml`, `EQUI_LootWnd.xml`, `EQUI_DragonHoardWnd.xml`, banks, barter, tradeskill depot
- **Progression UI** — `EQUI_AAWindow.xml`, `EQUI_TaskWnd.xml`, `EQUI_TaskOverlayWnd.xml`, achievements
- **Social / commerce** — guild management/bank, overseer, real estate, merchant, purchase flows
- **Options & login** — `EQUI_OptionsWindow.xml`, character list/create, respawn selector

None of those files are in our patch set by design (see README: avoid maintaining rarely visible windows). After a major client patch, spot-check the six patched windows in-game; everything else stays on `Default`.

`uiresources/default/` (selected by `AtlasSkin`) continues to grow independently; expect modern panels to look stock even with `UISkin=isuldor`.

## Install and enable

From the repo:

```bash
cd ui
bash install.sh          # or: EQ_GAME_PATH="/path/to/EverQuest" bash install.sh
```

Set the skin on a character in the UI INI in the game install root:

```ini
UISkin=isuldor
AtlasSkin=Default
```

(`UI_Vulch_coirnav.ini` in this repo is an example.) Reload UI layout from that INI under **Options → General** if windows look wrong after the first login.

Fade amounts (0% on most windows, higher on hotbars/chat) remain in the per-character UI INI, not in the XML patches.

## Maintenance

**Rebuild skin from patches**

```bash
bash ui/install.sh
```

**Refresh patches after editing `uifiles/isuldor/` in-game or by hand**

```bash
bash ui/install.sh --update
```

**Regenerate only `EQUI_PlayerWindow.diff` after hand-merging**

```bash
GAME="$HOME/.local/share/Steam/steamapps/common/Everquest F2P"
sed 's/$/\r/' "$GAME/uifiles/isuldor/EQUI_PlayerWindow.xml" > /tmp/pw.crlf.xml
diff -u "$GAME/uifiles/default/EQUI_PlayerWindow.xml" /tmp/pw.crlf.xml \
  > ui/EQUI_PlayerWindow.diff
```

**Verify all patches before committing**

```bash
bash ui/verify.sh
bash ui/verify.sh --record   # after in-game smoke test; updates ui/.verified-build
```

## Testing checklist

After each client update:

1. Run `bash ui/install.sh` and confirm no `FAILED` hunks.
2. Log in with `UISkin=isuldor` — check player window (HP/mana/XP/AA), hotbars, chat, spell gem window.
3. Open group roles and aggro labels on the player window; confirm they still render and click.
4. Toggle a few rarely used stock windows (inventory, AA) — they should look like **Default**, not broken.

## References

- [steam-linux-paths.md](steam-linux-paths.md) — install root, `UISkin` / `AtlasSkin`, character INI files
- [README.md](../README.md) — general client tuning (fullscreen, lighting, chat colors)
- Screenshot of the minimal layout: [imgur mcO4oAA](https://i.imgur.com/mcO4oAA.jpg) (2019; layout is similar after refresh)
