Moin Moin,
ich bin dabei die Super Mario Advance 4 Strukturdaten zu suchen damit ich an meinem Map Editor weiter arbeiten kann
WIEDER AKTIV !
--= 01.04.2018 =--
* Beitrag in Markdown Code umgewandelt
* Worldmap Strukur aufgenommen
* Paletten Berechnung aufgenommen
--= 08.02.2016 =--
Objectbanks aufgenommen
Map-Aufbau aktualisiert
Map-Offset für W 1-Festung hinzugefügt
--= 05.02.2016 =--
Gegnermap & Gegner-Pointer für Welt 1-1 hinzugefügt
--= 04.02.2016 =--
* 4. Map-Aufbau hinzugefügt
--= 21.09.2013 =--
*Welt 3 Level 1-5 hinzugefügt
*Updatelog eingefügt
Der Einfachheit als Markdown umgeschrieben:
Code
- # Super Mario Advance 4 Research
- ## 1. Rom Infos
- ```
- Dump: 1190
- Rom-Name: SUPER MARIOD
- Rom-Code: AX4P
- Rom-Version: 01
- Sprache: Multi5 - Europa
- ```
- ## 2. Level Pointer
- Offset des Pointers zur Liste der Level Pointer (universal): `0x9C88`
- Im VBA sind die folgenden Daten unter diesen RAM-Offsets zu finden:
- - `0x03003B0A` Level Id (2 Bytes, Little Endian)
- - `0x03003B0C` Level Adresse (3 Bytes, Little Endian; gefolgt von 08)
- - `0x03003B10` Gegner Adresse (3 Bytes, Little Endian; gefolgt von 08)
- - `0x03003B14` Gegner Gegner Id
- | Welt | Level | Level ID (BE) | Gegner ID (BE) | Offset | Gegner-Map | Bemerkung |
- | ---: | :----------------- | -------------: | -------------: | ---------: | ---------: | :----------- |
- | 1 | 1 | `0x0022` | `0x004F` | `0x155303` | `0x16C24D` | |
- | 1 | 1 | `0x0023` | `0x0002` | `0x155460` | `0x16BA5C` | Bonusbereich |
- | 1 | 2 | ` ` | ` ` | `0x1567F4` | | |
- | 1 | 3 | ` ` | ` ` | `0x154216` | | |
- | 1 | 4 | ` ` | ` ` | `0x15A5BC` | | |
- | 1 | 5 | ` ` | ` ` | `0x157CF0` | | |
- | 1 | 6 | ` ` | ` ` | `0x15A44D` | | |
- | 1 | Festung | ` ` | ` ` | `0x15F3D7` | | |
- | 1 | Schloss | ` ` | ` ` | | | |
- | 2 | 1 | ` ` | ` ` | `0x15E30E` | | |
- | 2 | 2 | ` ` | ` ` | `0x1573CD` | | |
- | 2 | 3 | ` ` | ` ` | `0x15E7FF` | | |
- | 2 | 4 | ` ` | ` ` | `0x15EC83` | | |
- | 2 | 5 | ` ` | ` ` | `0x15E5B6` | | |
- | 2 | Festung | ` ` | ` ` | | | |
- | 2 | Schloss | ` ` | ` ` | | | |
- | 3 | 1 | ` ` | ` ` | `0x15BBBB` | | |
- | 3 | 2 | ` ` | ` ` | `0x1596D0` | | |
- | 3 | 3 | ` ` | ` ` | `0x15572E` | | |
- | 3 | 4 | ` ` | ` ` | `0x1590C5` | | |
- | 3 | 5 | ` ` | ` ` | `0x15B86E` | | |
- | 3 | 6 | ` ` | ` ` | | | |
- | 3 | 7 | ` ` | ` ` | | | |
- | 3 | 8 | ` ` | ` ` | | | |
- | 3 | 9 | ` ` | ` ` | | | |
- | 3 | Festung 1 (Links) | ` ` | ` ` | | | |
- | 3 | Festung 2 (Mitte) | ` ` | ` ` | | | |
- | 3 | Schloss | ` ` | ` ` | | | |
- | 4 | 1 | ` ` | ` ` | | | |
- | 4 | 2 | ` ` | ` ` | | | |
- | 4 | 3 | ` ` | ` ` | | | |
- | 4 | 4 | ` ` | ` ` | | | |
- | 4 | 5 | ` ` | ` ` | | | |
- | 4 | 6 | ` ` | ` ` | | | |
- | 4 | Festung 1 (Rechts) | ` ` | ` ` | | | |
- | 4 | Festung 2 (Mitte) | ` ` | ` ` | | | |
- | 4 | Schloss | ` ` | ` ` | | | |
- | 5 | 1 | ` ` | ` ` | | | |
- | 5 | 2 | ` ` | ` ` | | | |
- | 5 | 3 | ` ` | ` ` | | | |
- | 5 | 4 | ` ` | ` ` | | | |
- | 5 | 5 | ` ` | ` ` | | | |
- | 5 | 6 | ` ` | ` ` | | | |
- | 5 | 7 | ` ` | ` ` | | | |
- | 5 | 8 | ` ` | ` ` | | | |
- | 5 | 9 | ` ` | ` ` | | | |
- | 5 | Turm zu den Wolken | ` ` | ` ` | | | |
- | 5 | Festung 1(Boden) | ` ` | ` ` | | | |
- | 5 | Festung 2(Wolken) | ` ` | ` ` | | | |
- | 5 | Schloss | ` ` | ` ` | | | |
- | 6 | 1 | ` ` | ` ` | | | |
- | 6 | 2 | ` ` | ` ` | | | |
- | 6 | 3 | ` ` | ` ` | | | |
- | 6 | 4 | ` ` | ` ` | | | |
- | 6 | 5 | ` ` | ` ` | | | |
- | 6 | 6 | ` ` | ` ` | | | |
- | 6 | 7 | ` ` | ` ` | | | |
- | 6 | 8 | ` ` | ` ` | | | |
- | 6 | 9 | ` ` | ` ` | | | |
- | 6 | 10 | ` ` | ` ` | | | |
- | 6 | Festung 1(Links) | ` ` | ` ` | | | |
- | 6 | Festung 2(Mitte) | ` ` | ` ` | | | |
- | 6 | Festung 3(Rechts) | ` ` | ` ` | | | |
- | 6 | Schloss | ` ` | ` ` | | | |
- | 7 | 1 | ` ` | ` ` | | | |
- | 7 | 2 | ` ` | ` ` | | | |
- | 7 | 3 | ` ` | ` ` | | | |
- | 7 | 4 | ` ` | ` ` | | | |
- | 7 | 5 | ` ` | ` ` | | | |
- | 7 | 6 | ` ` | ` ` | | | |
- | 7 | 7 | ` ` | ` ` | | | |
- | 7 | 8 | ` ` | ` ` | | | |
- | 7 | 9 | ` ` | ` ` | | | |
- | 7 | Festung 1(Links) | ` ` | ` ` | | | |
- | 7 | Festung 2(Rechts) | ` ` | ` ` | | | |
- | 7 | Schloss | ` ` | ` ` | | | |
- | 8 | 1 | ` ` | ` ` | | | |
- | 8 | 2 | ` ` | ` ` | | | |
- | 8 | Festung | ` ` | ` ` | | | |
- | 8 | Schloss | ` ` | ` ` | | | |
- ## 2. Map header
- `AA AA BB BB CD EE FG HH IJ KL MM`
- | Block | Was? |
- | -----: | ---------------------------------------------------------------------------------------- |
- | `AA AA` | Level ID des nächsten Bereichs. (Big Endian) |
- | `BB BB` | Gegner ID des nächsten Bereichs. (Big Endian) |
- | `C` | Start Position Y |
- | `D` | Maplänge, ein Nibble entspricht einem Block á 256px, also 0 = 256px, 1 = 512px usw... |
- | `EE` | Startposition X |
- | `F` | Scrolltyp |
- | `G` | Objekt Set des nächsten Bereichs |
- | `HH` | GFX |
- | `I` | Objekt Set des nächsten Bereichs |
- | `J` | Musik |
- | `K` | "Extra" Farbe |
- | `L` | "Extra" Typ |
- | `MM` | Hintergrund |
- ### 2.1 Musik
- | Nibble | Musik |
- | -----: | ------------------------ |
- | `0x0` | Standard Overworld 1 |
- | `0x1` | Untergrund Theme #1 |
- | `0x2` | Unterwasser Theme #1 |
- | `0x3` | Festung Theme |
- | `0x4` | Festung Kampf |
- | `0x5` | Schiff Theme |
- | `0x6` | Einzelkampf gegen Kooper |
- | `0x7` | P-Button betätigt |
- | `0x8` | Overworld 2 Theme |
- | `0x9` | Nach Kampf gegen Kooper |
- | `0xA` | Über den Wolken |
- | `0xB` | Untergrund Theme #2 |
- | `0xC` | Classic Theme |
- | `0xD` | Untergrund Theme #3 |
- | `0xE` | Unterwasser Theme #2 |
- | `0xF` | Kampf gegen Bowser |
- ### 2.2 Extra Farbe
- | Nibble | Extra |
- | -----: | -------------------------------- |
- | `0x0` | Schwarz |
- | `0x1` | Blau |
- | `0x2` | Weiß 1 |
- | `0x3` | Dunkel blau |
- | `0x4` | Dunkel grün |
- | `0x5` | Dunkel braun |
- | `0x6` | Dunkel grau und dunkel grün |
- | `0x7` | Blau |
- | `0x8` | Schwarz |
- | `0x9` | Dunkel grau |
- | `0xA` | Weiß 2 |
- | `0xB` | ?? |
- | `0xC` | ?? |
- | `0xD` | ?? |
- | `0xE` | ?? |
- | `0xF` | ?? |
- ### 2.4 Extra Typ
- | Nibble | Extra |
- | -----: | -------------------------------- |
- | `0x0` | Nichts |
- | `0x1` | Nebel #1 |
- | `0x2` | Wolken #1 |
- | `0x3` | ?? |
- | `0x4` | Nichts?? |
- | `0x5` | Wasser #1 |
- | `0x6` | Wasser #2 |
- | `0x7` | Neben #2, versetzter Hintergrund |
- | `0x8` | Wolken #2 |
- | `0x9` | Geisterhaus Säulen |
- | `0xA` | Untergrund Hintergrund? |
- | `0xB` | Wolken #3, Animiert |
- | `0xC` | Nichts?? |
- | `0xD` | Wasser #3? |
- | `0xE` | Wolken #4 |
- | `0xF` | Festung Hintergrund |
- ### 2.5 Hintegrund
- | Byte | Hintegrund |
- | ------------: | ------------------------------------- |
- | `0x00` | Nichts |
- | `0x01` | Unterwasser #1 |
- | `0x02` | Blitze |
- | `0x03` | Kooperschiff mit Blitzen |
- | `0x04` | Untergrund |
- | `0x05` | Overworld #1 |
- | `0x06` | Geisterschloss #1 |
- | `0x07` | Szene vor Schiff |
- | `0x08` | Bäume mit Schnee |
- | `0x09` | Röhren |
- | `0x0A` | Hügel #1 |
- | `0x0B` | Untegrund #2 |
- | `0x0C` | Berge mit Bäumen |
- | `0x0D` | Wüste #1 |
- | `0x0E` | Wüste #2 Mit Pyramiden |
- | `0x0F` | Hügel #2 Über den Wolken |
- | `0x10` | Steine |
- | `0x11` | Vulkan |
- | `0x12` | Wolken #1 |
- | `0x13` | Bonusbereich |
- | `0x14` | Kristalle |
- | `0x15` | Untergrund #3 |
- | `0x16` | Wasserfälle #1 |
- | `0x17` | Toads Haus |
- | `0x18` | Hügel #3 Mit Schnee |
- | `0x19` | Hintergrund in Pyramiden |
- | `0x1A` | Overworld #2 |
- | `0x1B` | Bowsers Schloss |
- | `0x1C` | Waldhintegrund |
- | `0x1D` | Hügel #4 Über den Wolken bei Abend |
- | `0x1E` | Wasserfälle #2 |
- | `0x1F` | Glühende Steine |
- | `0x20` | Schwarz-Rote Steine |
- | `0x21` | Underwater 2 |
- | `0x22` | Bowser's Castle 2 |
- | `0x23` | *Weird (Coin ship?) |
- | `0x24` | Ship boss room (without lightning) |
- | `0x25` | Underwater 3 |
- | `0x26` | Underwater 4 |
- | `0x27` | Orange clouds |
- | `0x28` | Orange bricks |
- | `0x29` | Bowser's Castle 3 |
- | `0x2A` | Night Sky |
- | `0x2B` | Prison 3 |
- | `0x2C` | Ghost House 1 |
- | `0x2D` | Ghost House 2 |
- | `0x2E` | Bowser's Castle 3 |
- | `0x2F` | *Weird |
- | `0x30` | Minigames 1 |
- | `0x31` | Minigames 2 |
- | `0x32` | Minigames 3 |
- | `0x33` | Colored Block |
- | `0x34` | Cave entry (without sky) |
- | `0x35` | Pipe |
- | `0x36` | Hills (high position) |
- | `0x37` | Cave |
- | `0x38` | Snow Hills (high position) |
- | `0x39` | Blue Hills |
- | `0x3A` | Prison 4 |
- | `0x3B` | WaterFall (different position) |
- | `0x3C` | Prison 5 |
- | `0x3D` | Leaves (without night sky) |
- | `0x3E` | WaterFall (different position) |
- | `0x3F` | WaterFall (different position) |
- | `0x40`-`0xFF` | *Crash* |
- ## 3. Map Aufbau
- Nach dem Mapheader folgen die einzelnen Elemente.
- Diese werden so lange gelesen bis die Bytefolge `0x29 0xFF` das Ende der Map markiert.
- **Anmerkung**: Blockdaten(Coinboxen), Gegnerdaten (Gumbas) sowie Warp-Daten(Röhren) befinden sich in verschiedenen "Maps"!
- ### 3.1 Blockdaten
- Man unterscheidet hierbei zwischen 4 Byte und 5 Byte Elementen.
- Das erste Byte gibt zusätzlich die Object-Bank an, 0x00 = Bank 1, ab 0x40 = Bank2
- `AA BB CC DD [EE]`
- | Byte | Was |
- | ---: | ---------------------------------------------------------- |
- | `AA` | Länge des Blocks (40 = 1, 41 = 2... bzw 00 = 1, 01 = 2...) |
- | `BB` | Y-Position des Elements (von Oben) |
- | `CC` | X-Position des Elements (von Links) |
- | `DD` | Elementtyp (Coinbox, Röhre usw, Liste folgt) |
- | `EE` | Zusätzlicher Wert bei 5 Byte Elementen (z.B. zweite Länge) |
- ### 3.1.1 Objekte in den Banks
- | Byte | Beschreibung | Bank | 5. Byte? |
- | ------------: | ---------------------------------------- | ---: | :---------------------- |
- | `0x00` | Busch | 0 | |
- | `0x01` | Busch 2 | 0 | |
- | `0x02` | Busch 3 | 0 | |
- | `0x03` | ??? | 0 | |
- | `0x04` | Tür | 0 | |
- | `0x05` | ??? | 0 | |
- | `0x06` | Ranke | 0 | |
- | `0x07`-`0x0F` | ??? | 0 | |
- | `0x10` | Box mit Feuerblume | 0 | |
- | `0x11` | Box mit Blatt | 0 | |
- | `0x12` | Box mit Stern | 0 | |
- | `0x13` | Box mit Münze | 0 | |
- | `0x14` | Box mit Münzen | 0 | |
- | `0x15` | Muncher | 0 | |
- | `0x16` | Block mit Feuerblume | 0 | |
- | `0x17` | Block mit Blatt | 0 | |
- | `0x18` | Block mit Stern | 0 | |
- | `0x19` | Block mit Münze | 0 | |
- | `0x1A` | Block mit Münzen | 0 | |
- | `0x1B` | Block mit 1-Up | 0 | |
- | `0x1C` | Block mit Ranke | 0 | |
- | `0x1D` | Block mit P-Switch | 0 | |
- | `0x1E` | Unsichtbare Box mit Münze | 0 | |
- | `0x1F` | Unsichtbare Box mit 1-Up | 0 | |
- | `0x20` | Unsichtbarer Notenblock | 0 | |
- | `0x21` | Notenblock mit Feuerblume | 0 | |
- | `0x22` | Notenblock mit Blatt | 0 | |
- | `0x23` | Notenblock mit Stern | 0 | |
- | `0x24` | Steinblock mit Feuerblume | 0 | |
- | `0x25` | Steinblock mit Blatt | 0 | |
- | `0x26` | Steinblock mit Stern | 0 | |
- | `0x27` | Unsichtbarer Roter Notenblock | 0 | |
- | `0x28` | P-Switch | 0 | |
- | `0x29` | Zielhintergrund | 0 | |
- | `0x2A`-`0x42` | ??? | 0 | |
- | `0x43` | Box mit Schuh | 0 | |
- | `0x44` | Box mit Feder | 0 | |
- | `0x45` | Teil vom Ziel | 0 | |
- | `0x46` | Tür | 0 | |
- | `0x47` | Block steuerbaren Münzen | 0 | |
- | `0x48` | Stachel 1 | 0 | |
- | `0x49` | Stachel 2 | 0 | |
- | `0x4A` | ??? | 0 | |
- | `0x4B` | Schild mit Pfeil (rechts) | 0 | |
- | `0x4C` | Schild mit Pfeil (links) | 0 | |
- | `0x4D` | Roter Stachel | 0 | |
- | `0x4E` | ??? | 0 | |
- | `0x4F` | Blockelement | 0 | |
- | `0x50` | Blockelement | 0 | |
- | `0x50` | Wandrennblock (unten rechts) | 0 | |
- | `0x51` | Wandrennblock (unten links) | 0 | |
- | `0x52` | Wandrennblock (oben rechts) | 0 | |
- | `0x53` | Wandrennblock (oben links) | 0 | |
- | `0x54` | Weißes Tile | 0 | |
- | `0x55` | Box mit P-Wing??? | 0 | |
- | `0x56` | Leere Box??? | 0 | |
- | `0x57` | ??? | 0 | |
- | `0x58` | ??? | 0 | |
- | `0x59` | POW-Block | 0 | |
- | `0x5A`-`0xFE` | ??? | 0 | |
- | `0x00` | Weißer Block | 1 | |
- | `0x01` | Orangener Block | 1 | |
- | `0x02` | Grüner Block | 1 | |
- | `0x03` | Blauer Block | 1 | |
- | `0x04` | Weißer Block (schwebend) | 1 | |
- | `0x05` | Orangener Block (schwebend) | 1 | |
- | `0x06` | Grüner Block (schwebend) | 1 | |
- | `0x07` | Blauer Block (schwebend) | 1 | |
- | `0x08` | Büsche | 1 | |
- | `0x09` | Lücke im Boden | 1 | |
- | `0x0A` | Wolkenblöcke | 1 | |
- | `0x0B` | Boden | 1 | Länge des Boden |
- | `0x0C` | Boden | 1 | Länge des Boden |
- | `0x0D` | ??? | 1 | |
- | `0x0E` | Abstand im Boden mit Wasser | 1 | |
- | `0x0F` | Zerstörbare Blöcke | 1 | |
- | `0x10` | Coinbox | 1 | |
- | `0x11` | Zerstörbarer Block mit Münze | 1 | |
- | `0x12` | Steinblock | 1 | |
- | `0x13` | Notenblock | 1 | |
- | `0x14` | Notenblock | 1 | |
- | `0x15` | Leerer Steinblock | 1 | |
- | `0x16` | Münze | 1 | |
- | `0x17` | Röhre nach unten (begehbar) | 1 | |
- | `0x18` | Röhre nach unten | 1 | |
- | `0x19` | Röhre nach unten (begehbar) | 1 | |
- | `0x1A` | Röhre nach oben (begehbar) | 1 | |
- | `0x1B` | Röhre nach oben | 1 | |
- | `0x1C` | Röhre nach rechts (begehbar) | 1 | |
- | `0x1D` | Röhre nach rechts | 1 | |
- | `0x1E` | Röhre nach links (begehbar) | 1 | |
- | `0x1F` | Röhre nach links | 1 | |
- | `0x20` | "Kugelwilli ""rohr""" | 1 | |
- | `0x21` | Brücke | 1 | |
- | `0x22` | ??? | 1 | |
- | `0x23` | Wasserfall | 1 | Breite des Wasserfalls |
- | `0x24` | Wasserfläche 1 | 1 | Breite der Wasserfläche |
- | `0x25` | Wasserfläche 2 | 1 | Breite der Wasserfläche |
- | `0x26` | Wasserfläche 3 | 1 | Breite der Wasserfläche |
- | `0x27` | ??? | 1 | ??? |
- | `0x28` | Stahlblock | 1 | Breite des Stahlblocks |
- | `0x29` | ??? | 1 | ??? |
- | `0x2A` | ??? | 1 | ??? |
- | `0x2B` | Blauer zerstörbarer Block | 1 | |
- | `0x2C` | Doppelseitige Röhre (begehbar, vertikal) | 1 | |
- | `0x2D` | Wolken | 1 | |
- | `0x2E` | Bonusbereich Block | 1 | Breite des Blocks |
- | `0x2E` | Büsche | 1 | |
- | `0x2F` | ??? | 1 | |
- | `0x51` | SMA Pilzblock | 1 | Anzahl der Reihen |
- | `0x52` | SMA Zahlblock | 1 | Anzahl der Reihen |
- | `0x53` | SMA Zahlblock | 1 | Anzahl der Reihen |
- | `0x54` | SMA Zahlblock | 1 | Anzahl der Reihen |
- | `0x55` | Grauer Steinblock | 1 | Anzahl der Reihen |
- | `0x56` | Unsichtbarer Block | 1 | |
- | `0x57` | Beschleunigung Block | 1 | |
- | `0x58` | Blau-Weiße Platform aus SMW | 1 | |
- | `0x59` | Seil | 1 | |
- | `0x5A` | ??? | 1 | |
- | `0x5B` | ??? | 1 | |
- | `0x5C` | ??? | 1 | |
- | `0x5D` | Fallende Stachelplatform | 1 | |
- | `0x5E` | Spikes | 1 | |
- | `0x5F` | SMA Block | 1 | Anzahl der Reihen |
- | `0x60` | Treppe aus Geisterhaus (ul.or.) | 1 | |
- | `0x61` | Platform??? | 1 | |
- | `0x62` | ??? | 1 | |
- | `0x63` | ??? | 1 | |
- | `0x68` | Unsichtbarer Block | 1 | |
- | `0x69` | ??? | 1 | |
- | `0x6A` | ??? | 1 | ??? |
- | `0x6B` | Bonusbereich Block | 1 | |
- | `0x6C` | Treppe aus Geisterhaus (ol.ur.) | 1 | |
- | `0x6D` | ??? | 1 | |
- | `0x6E` | "Kugelwilli ""rohr"" von oben" | 1 | |
- | `0x6F`-`0x71` | ??? | 1 | ??? |
- | `0x72` | Diagonale Münzenreihe (ul.or.) | 1 | Anzahl der Münzen |
- | `0x73`-`0x77` | ??? | 1 | |
- | `0x78` | Zielbereich | 1 | |
- | `0x79`-`0x7E` | ??? | 1 | |
- | `0x7F` | Fahnenstange | 1 | |
- | `0x80` | Weiße Blöcke | 1 | Anzahl der Reihen |
- | `0x81` | Gebüsch | 1 | |
- | `0x82` | Gebüsch | 1 | |
- | `0x83` | Gebüsch | 1 | |
- | `0x84` | ??? | 1 | |
- | `0x85` | Tür | 1 | |
- | `0x86` | ??? | 1 | |
- | `0x87` | Ranke | 1 | |
- | `0x88`-`0x90` | ??? | 1 | |
- | `0x91`-`0xA7` | Block aus Zielbereich | 1 | |
- | `0xA8` | ??? | 1 | |
- | `0xA9` | ??? | 1 | |
- | `0xAA` | Zielbereich | 1 | |
- | `0xAB`-`0xC8` | ??? | 1 | |
- | `0xC9` | Wasserblock | 1 | |
- | `0xCA` | Wasserblock | 1 | |
- | `0xCB` | Wasserblock | 1 | |
- | `0xCC`-`0xCE` | ??? | 1 | |
- | `0xCF` | Wasserblock | 1 | |
- | `0xD0` | Bonusbereich Ecke ol. | 1 | |
- | `0xD1` | Wasserblock | 1 | |
- | `0xD2`-`0xD5` | ??? | 1 | |
- | `0xD6` | Coinbox mit P-Wing??? | 1 | |
- | `0xD7` | Leere Coinbox??? | 1 | |
- | `0xD8`-`0xFE` | ??? | 1 | |
- ## 4. Worldmaps
- Der Pointer zu der Worldmap Liste findet man am Offset `0x0094B4`.
- Navigiert man zu dem dort angegebenen Offset (in meinem Fall`0x135AAC`),
- findet man 9 weitere Pointer, welche zu den einzelnen Worldmaps führen.
- Die Reihenfolge entspricht der Reihenfolge im Spiel, also der erste Pointer = Welt 1, der zweite = Welt 2...
- Nummer 9 ist die Warpzone.
- Die Worldmaps selber sind immer 12 Tiles hoch, in den Hexdaten entspricht ein Tile 2 Bytes.
- Die Map Endet mit `0xFF 0x00`
- Die Breite der Worldmap entspricht somit `(Anzahl der Bytes der Map - 2) / 2 (bytes pro tile) / 12 (tiles pro Spalte)`
- Beispiel: Welt 1 hat eine Länge von 386 Bytes (einschl. `0xFF 0x00`)
- Demnach `(386 - 2) / 2 / 12 = 16`
- In meinem ROM haben die Worldmaps folgende Offsets:
- | Welt | Offset |
- | -------: | ---------: |
- | 1 | `0x133B18` |
- | 2 | `0x133C9A` |
- | 3 | `0x133F9C` |
- | 4 | `0x13441E` |
- | 5 | `0x134720` |
- | 6 | `0x134A22` |
- | 7 | `0x134EA4` |
- | 8 | `0x1351A6` |
- | Warpzone | `0x1357A8` |
- ## 5. Paletten
- Die Paletten werden ingame nochmal berechnet was die Suche verkompliziert - aber nicht unmöglich - macht :-)
- Sturmvogel hat die ASM routine extrahiert und ich konnte folgendes daraus ableiten:
- Um an die Palette im ROM zu finden, müssen wir die Farbe in VBA nehmen und in Binär umwandeln
- und die einzelnen Farbwerte anhand dieser Auflistung umwandeln (einige Farben haben leider mehrere mögliche ursprungswerte):
- | Manipuliert (VBA) | Original 1 | Original 2 |
- | ----------------: | ---------: | ---------: |
- | `00000` | `00000` | |
- | `00011` | `00001` | |
- | `00100` | `00010` | |
- | `00101` | `00011` | |
- | `00110` | `00100` | |
- | `01000` | `00101` | |
- | `01001` | `00110` | |
- | `01010` | `00111` | |
- | `01011` | `01000` | |
- | `01100` | `01001` | |
- | `01101` | `01010` | |
- | `01110` | `01011` | |
- | `01111` | `01100` | |
- | `10000` | `01101` | |
- | `10001` | `01110` | `01111` |
- | `10010` | `10000` | |
- | `10011` | `10001` | |
- | `10100` | `10010` | |
- | `10101` | `10011` | |
- | `10110` | `10100` | |
- | `10111` | `10101` | |
- | `11000` | `10110` | |
- | `11001` | `10111` | |
- | `11010` | `11000` | |
- | `11011` | `11001` | |
- | `11100` | `11010` | |
- | `11101` | `11011` | `11100` |
- | `11110` | `11101` | `11110` |
- | `11111` | `11111` | |
- Als Beispiel:
- ```
- Farbe im VBA: 0x149E
- Blau Grün Rot
- Zerlegt in Farben (binär): 00101 00100 11110
- Ersetzen der Farben:
- 00101 -> 00011
- 00100 -> 00010
- 11110 -> 11101 ODER 11110
- Umwandeln in Hex:
- 00011 00010 11101 -> 0C5D -> 5D0C (Little endian)
- 00011 00010 11110 -> 0C5E -> 5E0C (Little endian)
- Macht man das mit mehreren aufeinander folgenden Farben findet man mit dem Ergebnis
- die Palette im ROM.
- ```
- Die komplette Story dazu ist hier zu finden:
- [https://board.romhackersworld.eu/thread/13317](https://board.romhackersworld.eu/thread/13317)
Das Markdown gibts auch als HTML: 2018-04-01.zip
Gruß,
Julian