From 9fd1ab248802c0d2a1e7b03a3b4828cc2afb605f Mon Sep 17 00:00:00 2001 From: Eva Date: Sat, 30 May 2026 20:24:15 +0700 Subject: [PATCH] fix(openworlds): add aasimar lineage to RACES (Closes #375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #369 added Dame Aylin to PORTRAIT_GALLERY with `race: "aasimar"`, but "aasimar" was not a valid RACES key (11 races shipped; aasimar was missing). Result: the race-filter at screen-create.jsx:548 never matched her entry, leaving her unreachable from any race selection — PR #369's body acknowledged this as intentional "lore-only via the filter," but it's a visible drift that the --ui-gate `gallery_per_race` probe (PR #386) surfaces as `unknownRaces: ["aasimar"]`. Fix per option (1) in #375 — add aasimar as a first-class lineage. Why option (1) and not option (2) (re-tag Aylin → human) ------------------------------------------------------- Aasimar IS a canonical 5e lineage (PHB-adjacent, Volo's Guide, also in BG3 lore as a planetouched lineage). Players coming from D&D Beyond / Kingmaker / BG3 will expect it on a character-creation screen. Re-tagging Aylin would patch the drift but cost real CRPG- canon fidelity. 5e canon mapping ---------------- - Size: Medium - Life: ~160 years (Volo's: "live longer than humans") - ASI: CHA +2, WIS +1 — matches Protector tradition (the most common Aasimar subrace in BG3 lore + the closest fit for the existing flat-RACES bonus style). Subraces (Protector / Scourge / Fallen) deferred to #377 (subrace handling). Smoke test (post-fix, against the new RACES table) -------------------------------------------------- $ node -e '' Counts per race: human 4 halfling 0 ← still empty (next PR — #379 empty-state) dwarf 0 ← still empty elf 2 half 2 tiefling 1 dragonborn 0 ← still empty drow 1 githyanki 1 gnome 0 ← still empty half-orc 0 ← still empty aasimar 1 ← Dame Aylin now reachable ✓ Unknown race tags: [] ← drift CLOSED ✓ Out of scope ------------ - Empty galleries for dwarf / halfling / gnome / dragonborn / half-orc (#379 — separate PR with empty-state fallback) - Subrace handling (#377) - Aasimar trait set beyond ability bonuses (Celestial Resistance, Healing Hands, Light cantrip) — defer until traits land for the other 11 races - Updating CREATE_RACE_IDS in qa/ui_gate_probe.js — that lives on the #386 branch (unmerged); will rebase that branch to include 'aasimar' once this lands. Refs: #375 (this fix), #386 (the gate that surfaces this drift class), PR #369 (introduced the drift) --- viewer/openworlds/screen-create.jsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/viewer/openworlds/screen-create.jsx b/viewer/openworlds/screen-create.jsx index 51fd1f7f..42d1c0d8 100644 --- a/viewer/openworlds/screen-create.jsx +++ b/viewer/openworlds/screen-create.jsx @@ -863,6 +863,19 @@ const RACES = { body: "Strong enough to end the argument and stubborn enough to outlast it. Refuses to fall when a lesser frame would, and rises angrier.", bonus: { str: 2, con: 1 }, }, + // Aasimar — added Loop-10 to make Dame Aylin's PORTRAIT_GALLERY entry + // (race: "aasimar") validate. Per 5e canon (Protector tradition): CHA +2, + // WIS +1. Closes #375 (the race-tag drift the --ui-gate `gallery_per_race` + // probe flags as `unknownRaces: ["aasimar"]`). Subraces (Protector / Scourge / + // Fallen) deferred to #377. + aasimar: { + name: "Aasimar", + size: "Medium", + life: "160 years", + glyph: "aasimar", + body: "Touched by something brighter once. Bears a heritage older than empires, and the unsettling habit of catching candle-light at the wrong angles. Born to the Upper Planes' echo; walks the world unsure whether to atone or to lead.", + bonus: { cha: 2, wis: 1 }, + }, }; const CLASSES = {