Fix female dwarf hair positioning and add missing demon horn sprites #27

Merged
DasAoD merged 1 commit from fix-dwarf-female-hair-and-demon-horns into main 2026-08-10 01:53:05 +02:00
Owner

Was war kaputt

Zwei Muster aus dem zweiten Portrait-Check (Blutzirkel, Equilibrium):

  • Weibliche Zwerge: Haare saßen als kleiner, verschobener Fleck mitten im Gesicht statt den Kopf zu umschließen (z.B. Sumomo, Gwenyver).
  • Dämonen: Hörner fehlten komplett bei jedem Charakter (z.B. Lord Po, KreatywnyNick, sowie alle 7 Equilibrium-Dämonen) — das war bereits als bekannte Lücke dokumentiert.

Root Cause

Haare (Zwerg, weiblich): Die 32 geripten hair-dwarf_female_hair_{color}_{style}.png-Dateien (Farben 1–4, Stile 1–8) waren durchgängig nur ~59 % ihrer korrekten Größe (Faktor ~1,696, vermutlich SD- statt HD-Textur beim ursprünglichen Rip erwischt — alle anderen Körperteile derselben Rasse/Geschlecht-Kombination stimmen pixelgenau). Die Offsets in portrait_spriteoffsetmap.json waren die ganze Zeit korrekt (für die richtig große Grafik berechnet) — angewandt auf die zu kleine Grafik ergab genau den "verschoben"-Effekt.

Hörner (Dämon): Die Offset-Daten für alle Horn-Stile lagen bereits vollständig in portrait_spriteoffsetmap.json (jemand hatte sie schon mal korrekt hergeleitet) — es fehlten nur die eigentlichen Sprite-Dateien.

Beides via Live-Referenzvergleich verifiziert: sfportrait.12hp.de's eigenes PortraitMaker-Modul im Browser mit identischen Parametern instanziiert (Farbgruppe/Stil), daraus die tatsächliche Pixelgröße und Zeichenposition jedes Sprites ausgelesen und in unser Offset-vom-Zentrum-Format umgerechnet — das bestätigte, dass unsere Offsets bereits stimmten und nur die Bilddateien falsch/fehlend waren.

Fix

  • 32 hair-dwarf_female_hair_*.png durch korrekt große Varianten ersetzt.
  • 15 neue horn-demon_horn_*.png / horn-demon_female_horn_*.png (11 männliche + 4 weibliche Stile, Farbgruppe 1 — die einzige, die sfguildsv2 zeichnet, da sf-api keine eigene Hornfarbe liefert) ergänzt.
  • portrait_manifest.json um die neuen Horn-Dateinamen erweitert.
  • portrait_spriteoffsetmap.json unverändert — die Offsets waren bereits richtig.

Beide Asset-Sets stammen von sfportrait.12hp.de, genau wie schon die Sonderportraits (special-Ordner) dort vendored wurden.

Verifiziert gegen Live-Daten

Per SSH-Abfrage der sfguilds.sqlite: die einzigen 2 aktuell existierenden weiblichen Zwerge (Sumomo, Gwenyver) sowie der komplette Wertebereich von horns/hair_color bei allen Dämonen sind durch die neuen Dateien abgedeckt. Lokal mit Python/PIL nachgerendert (gleiche Kompositions-Logik wie portrait.js) — vorher/nachher für Sumomo, Gwenyver, Lord Po und KreatywnyNick geprüft, sieht jetzt korrekt aus.

Bitte nach dem Deploy (git pull auf dns1) im echten Charakter-Modal gegenprüfen.

🤖 Generated with Claude Code

## Was war kaputt Zwei Muster aus dem zweiten Portrait-Check (Blutzirkel, Equilibrium): - **Weibliche Zwerge**: Haare saßen als kleiner, verschobener Fleck mitten im Gesicht statt den Kopf zu umschließen (z.B. Sumomo, Gwenyver). - **Dämonen**: Hörner fehlten komplett bei jedem Charakter (z.B. Lord Po, KreatywnyNick, sowie alle 7 Equilibrium-Dämonen) — das war bereits als bekannte Lücke dokumentiert. ## Root Cause **Haare (Zwerg, weiblich):** Die 32 geripten `hair-dwarf_female_hair_{color}_{style}.png`-Dateien (Farben 1–4, Stile 1–8) waren durchgängig nur ~59 % ihrer korrekten Größe (Faktor ~1,696, vermutlich SD- statt HD-Textur beim ursprünglichen Rip erwischt — alle anderen Körperteile derselben Rasse/Geschlecht-Kombination stimmen pixelgenau). Die Offsets in `portrait_spriteoffsetmap.json` waren die ganze Zeit korrekt (für die richtig große Grafik berechnet) — angewandt auf die zu kleine Grafik ergab genau den "verschoben"-Effekt. **Hörner (Dämon):** Die Offset-Daten für alle Horn-Stile lagen bereits vollständig in `portrait_spriteoffsetmap.json` (jemand hatte sie schon mal korrekt hergeleitet) — es fehlten nur die eigentlichen Sprite-Dateien. Beides via Live-Referenzvergleich verifiziert: sfportrait.12hp.de's eigenes `PortraitMaker`-Modul im Browser mit identischen Parametern instanziiert (Farbgruppe/Stil), daraus die tatsächliche Pixelgröße und Zeichenposition jedes Sprites ausgelesen und in unser Offset-vom-Zentrum-Format umgerechnet — das bestätigte, dass unsere Offsets bereits stimmten und nur die Bilddateien falsch/fehlend waren. ## Fix - 32 `hair-dwarf_female_hair_*.png` durch korrekt große Varianten ersetzt. - 15 neue `horn-demon_horn_*.png` / `horn-demon_female_horn_*.png` (11 männliche + 4 weibliche Stile, Farbgruppe 1 — die einzige, die sfguildsv2 zeichnet, da sf-api keine eigene Hornfarbe liefert) ergänzt. - `portrait_manifest.json` um die neuen Horn-Dateinamen erweitert. - `portrait_spriteoffsetmap.json` **unverändert** — die Offsets waren bereits richtig. Beide Asset-Sets stammen von sfportrait.12hp.de, genau wie schon die Sonderportraits (special-Ordner) dort vendored wurden. ## Verifiziert gegen Live-Daten Per SSH-Abfrage der `sfguilds.sqlite`: die einzigen 2 aktuell existierenden weiblichen Zwerge (Sumomo, Gwenyver) sowie der komplette Wertebereich von `horns`/`hair_color` bei allen Dämonen sind durch die neuen Dateien abgedeckt. Lokal mit Python/PIL nachgerendert (gleiche Kompositions-Logik wie `portrait.js`) — vorher/nachher für Sumomo, Gwenyver, Lord Po und KreatywnyNick geprüft, sieht jetzt korrekt aus. Bitte nach dem Deploy (`git pull` auf dns1) im echten Charakter-Modal gegenprüfen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Two portrait bugs reported after a second round of live guild checks:

1. Female dwarf hair rendered as a small misplaced patch instead of
   covering the head (e.g. Sumomo, Gwenyver in Blutzirkel). Root cause:
   the 32 ripped hair-dwarf_female_hair_{color}_{style}.png files
   (colors 1-4, styles 1-8) were extracted at ~59% of their correct
   size (a consistent ~1.696x scale mismatch vs. the true sprite,
   likely an SD-vs-HD source mixup during the original asset rip -
   confirmed by comparing every other dwarf-female body part, which
   matched pixel-for-pixel). portrait_spriteoffsetmap.json's offsets
   were already correct for the properly-sized sprite; applying them
   to the undersized image is exactly what produced the "shifted"
   look. Replaced the 32 files with correctly-sized ones sourced the
   same way the special-portrait images already are (vendored from
   sfportrait.12hp.de, whose own live PortraitMaker module was used
   to confirm both the correct pixel dimensions and, by converting
   its absolute canvas coordinates to our offset-from-center
   convention, that our existing offset numbers needed no changes.

2. Demon horns never rendered for any Demon character (Lord Po,
   KreatywnyNick in Blutzirkel; all 7 Demons in Equilibrium) - a
   previously known/documented gap where the horn sprite bundle
   couldn't be located during the original Unity asset rip. The
   offset data for all horn styles was already present in
   portrait_spriteoffsetmap.json (someone had derived it correctly
   before, just never sourced the images). Added the actual sprite
   files - 11 male styles + 4 female styles, color group 1 (the only
   one sfguildsv2 ever draws, since sf-api doesn't expose a separate
   horn color) - via the same sfportrait.12hp.de vendoring approach,
   and registered them in portrait_manifest.json so the compositor
   can find them.

Verified against the live sfguilds.sqlite data: the only 2 female
Dwarf characters that currently exist (Sumomo, Gwenyver) and the full
range of Demon horns/hair_color values in use are all covered by the
newly added files.
DasAoD merged commit 4cefc31998 into main 2026-08-10 01:53:05 +02:00
Sign in to join this conversation.
No description provided.