Weltkarte pixelexakt: gemessene Blit-Anker (Basis=(x,218-y)), Punkt steht + Kopf blinkt darueber, Segment/Name-Zuordnung um 1 korrigiert (W1L0 hat keinen Kartenpunkt)

This commit is contained in:
2026-07-25 14:52:49 +02:00
parent ac5c2c135a
commit ad53d11536
2 changed files with 65 additions and 27 deletions
+38
View File
@@ -1739,3 +1739,41 @@ Binary-KOORDINATEN stimmen, aber der BLIT-ANKER des Originals (topleft vs
zentriert) steht nicht im Binary -- wir hatten zentriert geraten. Fix:
empirische Offsets MAP_DX=5/MAP_DY=4 in worldmap._tf() (dort feinjustieren,
falls noch nicht exakt).
## 26.07.2026 (16) -- Karte PIXELEXAKT: Template-Matching statt Schaetzung
Stefans Nachmessung: immer noch daneben ("noch ein bisschen nach rechts
und weiter runter"). Diesmal richtig gemessen: KARTE-Sprites per
Template-Matching (mit Alpha-Maske) in den DOSBox-Referenzframes gesucht.
Ergebnis eindeutig (err ~10 = VGA-DAC-Rauschen, naechster Kandidat >200):
- KARTE0 (10x7) steht DAUERHAFT, Topleft (58,162) -- in BEIDEN Blinkphasen!
- KARTE4-Kopf (14x15) blinkt DARUEBER an/aus, Topleft (53,146) (steht auf
dem Punkt). Frueherer Befund "Punkt und Kopf wechseln sich ab" war
falsch (Diff-Region war die VEREINIGUNG beider Sprites).
- KARTE3 (kleine Punkte): am Spielstart NIRGENDS auf der Karte -- nicht
freigeschaltete Level sind unsichtbar (bestaetigt die Netz-Screenshots:
dort ist das Spiel durchgespielt).
Daraus die exakten Anker (Binary-Label (x,y)): Basis = (x, 218-y);
KARTE0-Topleft = Basis+(5,0); Kopf-Topleft = Basis+(0,-16); KARTE3
zentriert auf dem grossen Punkt = Basis+(7,2) (einzige verbleibende
Annahme -- kleine Punkte gibt es in keiner DOS-Referenzaufnahme).
WICHTIGER NEBENFUND -- Segment/Namens-Zuordnung war um 1 verschoben:
Das Start-Label (53,56) gehoert zu SEGMENT 0, und 21 Segmente = exakt
die 21 anwaehlbaren Level W1L1..W3L7 (3 Welten x 7). W1L0 (22. Name,
MAP existiert) hat KEINEN Kartenpunkt (Bonus-/Geheimlevel?). Also
segments[i] = names[i+1]; der "fehlende W3L7-Randfall" aus Eintrag (13)
war keiner. Cursorstart = Segment 0 = W1L1.
Disassembly-Check (Stefans Frage "bekommst du das nicht aus dem
Disassembler?"): einziges `mov ax,218` im Binary (Offset 0xf084) ist
eine HUD-ZIFFERN-Routine (X-Positionen 186/194/202, Spriteindex =
Ziffer+500 -- notiert fuer die Punkteanzeige!). Der Karten-Anker steht
nicht als Literal im Code -> Pixelmessung war der richtige Weg.
Verifikation: eigener Karten-Render vs. DOSBox-Frame, mittlerer
Pixelfehler 5.0 (identisch mit dem Ganzbild-Grundrauschen der
VGA-DAC-Quantisierung) in beiden Blinkphasen => pixelidentisch.
--once exit 0.