Skip to content

Add 7 missing job icons from XIVAPI (#8) - #9

Merged
avandenberghe merged 1 commit into
mainfrom
issue-8-job-icons
Sep 24, 2026
Merged

avandenberghe merged 1 commit into
mainfrom
issue-8-job-icons

Conversation

@avandenberghe

Copy link
Copy Markdown
Collaborator

Refs #8 — 7 of the 12 gaps. Kept open for the 5 that need a decision or authoring.

class_images/ and roster_classes/ each covered only 17 of the 28 seeded classes, so 11 real jobs and class_id 0 had no icon at all.

Added

Astrologian, Dancer, Dark Knight, Gunbreaker, Machinist, Red Mage, Samurai — in both sets.

Source matching was verified, not assumed

The existing 17 came from XIVAPI v1 (/cj/1/<job>.png) with a box downscale. Evidence: a v1 icon box-downscaled to 24x24 differs from the shipped ffxiv_gladiator.png by a mean 11.1 per pixel, against 31.0 for Lanczos and 41+ for every raw game-icon range probed on the v2 asset API. So new icons go through the same pipeline and sit indistinguishably next to the old ones.

  • class_images/ — 24x24, transparent
  • roster_classes/ — 40x40, art at 38x38 on the set's gradient plate. That plate is horizontally uniform (a pure vertical gradient with rounded corners), so it's reconstructed per row from an existing icon's background columns plus its alpha; the 38x38 inset was fitted against ffxiv_gladiator, ffxiv_archer and ffxiv_bard rather than eyeballed.

Deliberately not included

  • Reaper, Sage (Endwalker) and Viper, Pictomancer (Dawntrail) — absent from v1, whose tone the set matches. The v2 raw range (ui/icon/062000/0620<job_id>) has them, confirmed same artwork and job-id-indexed, but in a visibly darker, higher-contrast tone; a per-channel tone fit calibrated on Samurai failed to reconcile it. Shipping them would reproduce the exact inconsistency Race icons inconsistent for Au Ra, Hrothgar, Viera #4 complains about for the race icons.
  • ffxiv_unknown — no upstream source in either API; needs authoring (tracked family-wide in avathar/bbguild#391).

All five are listed in the new test's KNOWN_GAPS with the reasoning, and stay open on #8.

Tests

ffxiv_icon_coverage_test parses the installer's seeded imagename values and asserts both directories cover all of them except those five, so a new gap can't appear unnoticed. A third test pins the seeded count at 28 so the parser can't silently match nothing.

Full bbguildffxiv unit suite: 92 tests, 753 assertions, green.

🤖 Generated with Claude Code

class_images/ and roster_classes/ each covered only 17 of the 28 seeded
classes, so 11 real jobs and class_id 0 had no icon at all.

Adds Astrologian, Dancer, Dark Knight, Gunbreaker, Machinist, Red Mage
and Samurai to both sets, sourced from XIVAPI v1 (/cj/1/<job>.png) —
the same source the existing 17 came from. Matching was verified rather
than assumed: a v1 icon box-downscaled to 24x24 differs from the shipped
ffxiv_gladiator.png by a mean 11.1 per pixel, against 31.0 for Lanczos
and 41+ for every raw game-icon range tested, so the pipeline is v1 plus
a box filter.

- class_images/: 24x24, transparent, matching the set
- roster_classes/: 40x40, art at 38x38 on the set's gradient plate. The
  plate is horizontally uniform, so it is reconstructed per row from an
  existing icon's background columns and alpha; the 38x38 inset was
  fitted against ffxiv_gladiator/archer/bard rather than guessed.

Reaper, Sage, Viper and Pictomancer are deliberately left out: XIVAPI
v1 predates them and the v2 raw range has them in a visibly darker tone
that would break the set's consistency. ffxiv_unknown has no upstream
source. All five stay listed on #8 and in the new test's KNOWN_GAPS.

ffxiv_icon_coverage_test asserts both directories cover every seeded
imagename except those five, so a new gap can't appear unnoticed.

Refs #8

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@avandenberghe
avandenberghe merged commit ca5b74f into main Sep 24, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant