Super Mario Advance 4 Research Thread

    • [Research]
    • Super Mario Advance 4 Research Thread

      Moin Moin,

      ich bin dabei die Super Mario Advance 4 Strukturdaten zu suchen damit ich an meinem Map Editor weiter arbeiten kann :P

      WIEDER AKTIV !

      Updates

      --= 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:

      Quellcode

      1. # Super Mario Advance 4 Research
      2. ## 1. Rom Infos
      3. ```
      4. Dump: 1190
      5. Rom-Name: SUPER MARIOD
      6. Rom-Code: AX4P
      7. Rom-Version: 01
      8. Sprache: Multi5 - Europa
      9. ```
      10. ## 2. Level Pointer
      11. Offset des Pointers zur Liste der Level Pointer (universal): `0x9C88`
      12. Im VBA sind die folgenden Daten unter diesen RAM-Offsets zu finden:
      13. - `0x03003B0A` Level Id (2 Bytes, Little Endian)
      14. - `0x03003B0C` Level Adresse (3 Bytes, Little Endian; gefolgt von 08)
      15. - `0x03003B10` Gegner Adresse (3 Bytes, Little Endian; gefolgt von 08)
      16. - `0x03003B14` Gegner Gegner Id
      17. | Welt | Level | Level ID (BE) | Gegner ID (BE) | Offset | Gegner-Map | Bemerkung |
      18. | ---: | :----------------- | -------------: | -------------: | ---------: | ---------: | :----------- |
      19. | 1 | 1 | `0x0022` | `0x004F` | `0x155303` | `0x16C24D` | |
      20. | 1 | 1 | `0x0023` | `0x0002` | `0x155460` | `0x16BA5C` | Bonusbereich |
      21. | 1 | 2 | ` ` | ` ` | `0x1567F4` | | |
      22. | 1 | 3 | ` ` | ` ` | `0x154216` | | |
      23. | 1 | 4 | ` ` | ` ` | `0x15A5BC` | | |
      24. | 1 | 5 | ` ` | ` ` | `0x157CF0` | | |
      25. | 1 | 6 | ` ` | ` ` | `0x15A44D` | | |
      26. | 1 | Festung | ` ` | ` ` | `0x15F3D7` | | |
      27. | 1 | Schloss | ` ` | ` ` | | | |
      28. | 2 | 1 | ` ` | ` ` | `0x15E30E` | | |
      29. | 2 | 2 | ` ` | ` ` | `0x1573CD` | | |
      30. | 2 | 3 | ` ` | ` ` | `0x15E7FF` | | |
      31. | 2 | 4 | ` ` | ` ` | `0x15EC83` | | |
      32. | 2 | 5 | ` ` | ` ` | `0x15E5B6` | | |
      33. | 2 | Festung | ` ` | ` ` | | | |
      34. | 2 | Schloss | ` ` | ` ` | | | |
      35. | 3 | 1 | ` ` | ` ` | `0x15BBBB` | | |
      36. | 3 | 2 | ` ` | ` ` | `0x1596D0` | | |
      37. | 3 | 3 | ` ` | ` ` | `0x15572E` | | |
      38. | 3 | 4 | ` ` | ` ` | `0x1590C5` | | |
      39. | 3 | 5 | ` ` | ` ` | `0x15B86E` | | |
      40. | 3 | 6 | ` ` | ` ` | | | |
      41. | 3 | 7 | ` ` | ` ` | | | |
      42. | 3 | 8 | ` ` | ` ` | | | |
      43. | 3 | 9 | ` ` | ` ` | | | |
      44. | 3 | Festung 1 (Links) | ` ` | ` ` | | | |
      45. | 3 | Festung 2 (Mitte) | ` ` | ` ` | | | |
      46. | 3 | Schloss | ` ` | ` ` | | | |
      47. | 4 | 1 | ` ` | ` ` | | | |
      48. | 4 | 2 | ` ` | ` ` | | | |
      49. | 4 | 3 | ` ` | ` ` | | | |
      50. | 4 | 4 | ` ` | ` ` | | | |
      51. | 4 | 5 | ` ` | ` ` | | | |
      52. | 4 | 6 | ` ` | ` ` | | | |
      53. | 4 | Festung 1 (Rechts) | ` ` | ` ` | | | |
      54. | 4 | Festung 2 (Mitte) | ` ` | ` ` | | | |
      55. | 4 | Schloss | ` ` | ` ` | | | |
      56. | 5 | 1 | ` ` | ` ` | | | |
      57. | 5 | 2 | ` ` | ` ` | | | |
      58. | 5 | 3 | ` ` | ` ` | | | |
      59. | 5 | 4 | ` ` | ` ` | | | |
      60. | 5 | 5 | ` ` | ` ` | | | |
      61. | 5 | 6 | ` ` | ` ` | | | |
      62. | 5 | 7 | ` ` | ` ` | | | |
      63. | 5 | 8 | ` ` | ` ` | | | |
      64. | 5 | 9 | ` ` | ` ` | | | |
      65. | 5 | Turm zu den Wolken | ` ` | ` ` | | | |
      66. | 5 | Festung 1(Boden) | ` ` | ` ` | | | |
      67. | 5 | Festung 2(Wolken) | ` ` | ` ` | | | |
      68. | 5 | Schloss | ` ` | ` ` | | | |
      69. | 6 | 1 | ` ` | ` ` | | | |
      70. | 6 | 2 | ` ` | ` ` | | | |
      71. | 6 | 3 | ` ` | ` ` | | | |
      72. | 6 | 4 | ` ` | ` ` | | | |
      73. | 6 | 5 | ` ` | ` ` | | | |
      74. | 6 | 6 | ` ` | ` ` | | | |
      75. | 6 | 7 | ` ` | ` ` | | | |
      76. | 6 | 8 | ` ` | ` ` | | | |
      77. | 6 | 9 | ` ` | ` ` | | | |
      78. | 6 | 10 | ` ` | ` ` | | | |
      79. | 6 | Festung 1(Links) | ` ` | ` ` | | | |
      80. | 6 | Festung 2(Mitte) | ` ` | ` ` | | | |
      81. | 6 | Festung 3(Rechts) | ` ` | ` ` | | | |
      82. | 6 | Schloss | ` ` | ` ` | | | |
      83. | 7 | 1 | ` ` | ` ` | | | |
      84. | 7 | 2 | ` ` | ` ` | | | |
      85. | 7 | 3 | ` ` | ` ` | | | |
      86. | 7 | 4 | ` ` | ` ` | | | |
      87. | 7 | 5 | ` ` | ` ` | | | |
      88. | 7 | 6 | ` ` | ` ` | | | |
      89. | 7 | 7 | ` ` | ` ` | | | |
      90. | 7 | 8 | ` ` | ` ` | | | |
      91. | 7 | 9 | ` ` | ` ` | | | |
      92. | 7 | Festung 1(Links) | ` ` | ` ` | | | |
      93. | 7 | Festung 2(Rechts) | ` ` | ` ` | | | |
      94. | 7 | Schloss | ` ` | ` ` | | | |
      95. | 8 | 1 | ` ` | ` ` | | | |
      96. | 8 | 2 | ` ` | ` ` | | | |
      97. | 8 | Festung | ` ` | ` ` | | | |
      98. | 8 | Schloss | ` ` | ` ` | | | |
      99. ## 2. Map header
      100. `AA AA BB BB CD EE FG HH IJ KL MM`
      101. | Block | Was? |
      102. | -----: | ---------------------------------------------------------------------------------------- |
      103. | `AA AA` | Level ID des nächsten Bereichs. (Big Endian) |
      104. | `BB BB` | Gegner ID des nächsten Bereichs. (Big Endian) |
      105. | `C` | Start Position Y |
      106. | `D` | Maplänge, ein Nibble entspricht einem Block á 256px, also 0 = 256px, 1 = 512px usw... |
      107. | `EE` | Startposition X |
      108. | `F` | Scrolltyp |
      109. | `G` | Objekt Set des nächsten Bereichs |
      110. | `HH` | GFX |
      111. | `I` | Objekt Set des nächsten Bereichs |
      112. | `J` | Musik |
      113. | `K` | "Extra" Farbe |
      114. | `L` | "Extra" Typ |
      115. | `MM` | Hintergrund |
      116. ### 2.1 Musik
      117. | Nibble | Musik |
      118. | -----: | ------------------------ |
      119. | `0x0` | Standard Overworld 1 |
      120. | `0x1` | Untergrund Theme #1 |
      121. | `0x2` | Unterwasser Theme #1 |
      122. | `0x3` | Festung Theme |
      123. | `0x4` | Festung Kampf |
      124. | `0x5` | Schiff Theme |
      125. | `0x6` | Einzelkampf gegen Kooper |
      126. | `0x7` | P-Button betätigt |
      127. | `0x8` | Overworld 2 Theme |
      128. | `0x9` | Nach Kampf gegen Kooper |
      129. | `0xA` | Über den Wolken |
      130. | `0xB` | Untergrund Theme #2 |
      131. | `0xC` | Classic Theme |
      132. | `0xD` | Untergrund Theme #3 |
      133. | `0xE` | Unterwasser Theme #2 |
      134. | `0xF` | Kampf gegen Bowser |
      135. ### 2.2 Extra Farbe
      136. | Nibble | Extra |
      137. | -----: | -------------------------------- |
      138. | `0x0` | Schwarz |
      139. | `0x1` | Blau |
      140. | `0x2` | Weiß 1 |
      141. | `0x3` | Dunkel blau |
      142. | `0x4` | Dunkel grün |
      143. | `0x5` | Dunkel braun |
      144. | `0x6` | Dunkel grau und dunkel grün |
      145. | `0x7` | Blau |
      146. | `0x8` | Schwarz |
      147. | `0x9` | Dunkel grau |
      148. | `0xA` | Weiß 2 |
      149. | `0xB` | ?? |
      150. | `0xC` | ?? |
      151. | `0xD` | ?? |
      152. | `0xE` | ?? |
      153. | `0xF` | ?? |
      154. ### 2.4 Extra Typ
      155. | Nibble | Extra |
      156. | -----: | -------------------------------- |
      157. | `0x0` | Nichts |
      158. | `0x1` | Nebel #1 |
      159. | `0x2` | Wolken #1 |
      160. | `0x3` | ?? |
      161. | `0x4` | Nichts?? |
      162. | `0x5` | Wasser #1 |
      163. | `0x6` | Wasser #2 |
      164. | `0x7` | Neben #2, versetzter Hintergrund |
      165. | `0x8` | Wolken #2 |
      166. | `0x9` | Geisterhaus Säulen |
      167. | `0xA` | Untergrund Hintergrund? |
      168. | `0xB` | Wolken #3, Animiert |
      169. | `0xC` | Nichts?? |
      170. | `0xD` | Wasser #3? |
      171. | `0xE` | Wolken #4 |
      172. | `0xF` | Festung Hintergrund |
      173. ### 2.5 Hintegrund
      174. | Byte | Hintegrund |
      175. | ------------: | ------------------------------------- |
      176. | `0x00` | Nichts |
      177. | `0x01` | Unterwasser #1 |
      178. | `0x02` | Blitze |
      179. | `0x03` | Kooperschiff mit Blitzen |
      180. | `0x04` | Untergrund |
      181. | `0x05` | Overworld #1 |
      182. | `0x06` | Geisterschloss #1 |
      183. | `0x07` | Szene vor Schiff |
      184. | `0x08` | Bäume mit Schnee |
      185. | `0x09` | Röhren |
      186. | `0x0A` | Hügel #1 |
      187. | `0x0B` | Untegrund #2 |
      188. | `0x0C` | Berge mit Bäumen |
      189. | `0x0D` | Wüste #1 |
      190. | `0x0E` | Wüste #2 Mit Pyramiden |
      191. | `0x0F` | Hügel #2 Über den Wolken |
      192. | `0x10` | Steine |
      193. | `0x11` | Vulkan |
      194. | `0x12` | Wolken #1 |
      195. | `0x13` | Bonusbereich |
      196. | `0x14` | Kristalle |
      197. | `0x15` | Untergrund #3 |
      198. | `0x16` | Wasserfälle #1 |
      199. | `0x17` | Toads Haus |
      200. | `0x18` | Hügel #3 Mit Schnee |
      201. | `0x19` | Hintergrund in Pyramiden |
      202. | `0x1A` | Overworld #2 |
      203. | `0x1B` | Bowsers Schloss |
      204. | `0x1C` | Waldhintegrund |
      205. | `0x1D` | Hügel #4 Über den Wolken bei Abend |
      206. | `0x1E` | Wasserfälle #2 |
      207. | `0x1F` | Glühende Steine |
      208. | `0x20` | Schwarz-Rote Steine |
      209. | `0x21` | Underwater 2 |
      210. | `0x22` | Bowser's Castle 2 |
      211. | `0x23` | *Weird (Coin ship?) |
      212. | `0x24` | Ship boss room (without lightning) |
      213. | `0x25` | Underwater 3 |
      214. | `0x26` | Underwater 4 |
      215. | `0x27` | Orange clouds |
      216. | `0x28` | Orange bricks |
      217. | `0x29` | Bowser's Castle 3 |
      218. | `0x2A` | Night Sky |
      219. | `0x2B` | Prison 3 |
      220. | `0x2C` | Ghost House 1 |
      221. | `0x2D` | Ghost House 2 |
      222. | `0x2E` | Bowser's Castle 3 |
      223. | `0x2F` | *Weird |
      224. | `0x30` | Minigames 1 |
      225. | `0x31` | Minigames 2 |
      226. | `0x32` | Minigames 3 |
      227. | `0x33` | Colored Block |
      228. | `0x34` | Cave entry (without sky) |
      229. | `0x35` | Pipe |
      230. | `0x36` | Hills (high position) |
      231. | `0x37` | Cave |
      232. | `0x38` | Snow Hills (high position) |
      233. | `0x39` | Blue Hills |
      234. | `0x3A` | Prison 4 |
      235. | `0x3B` | WaterFall (different position) |
      236. | `0x3C` | Prison 5 |
      237. | `0x3D` | Leaves (without night sky) |
      238. | `0x3E` | WaterFall (different position) |
      239. | `0x3F` | WaterFall (different position) |
      240. | `0x40`-`0xFF` | *Crash* |
      241. ## 3. Map Aufbau
      242. Nach dem Mapheader folgen die einzelnen Elemente.
      243. Diese werden so lange gelesen bis die Bytefolge `0x29 0xFF` das Ende der Map markiert.
      244. **Anmerkung**: Blockdaten(Coinboxen), Gegnerdaten (Gumbas) sowie Warp-Daten(Röhren) befinden sich in verschiedenen "Maps"!
      245. ### 3.1 Blockdaten
      246. Man unterscheidet hierbei zwischen 4 Byte und 5 Byte Elementen.
      247. Das erste Byte gibt zusätzlich die Object-Bank an, 0x00 = Bank 1, ab 0x40 = Bank2
      248. `AA BB CC DD [EE]`
      249. | Byte | Was |
      250. | ---: | ---------------------------------------------------------- |
      251. | `AA` | Länge des Blocks (40 = 1, 41 = 2... bzw 00 = 1, 01 = 2...) |
      252. | `BB` | Y-Position des Elements (von Oben) |
      253. | `CC` | X-Position des Elements (von Links) |
      254. | `DD` | Elementtyp (Coinbox, Röhre usw, Liste folgt) |
      255. | `EE` | Zusätzlicher Wert bei 5 Byte Elementen (z.B. zweite Länge) |
      256. ### 3.1.1 Objekte in den Banks
      257. | Byte | Beschreibung | Bank | 5. Byte? |
      258. | ------------: | ---------------------------------------- | ---: | :---------------------- |
      259. | `0x00` | Busch | 0 | |
      260. | `0x01` | Busch 2 | 0 | |
      261. | `0x02` | Busch 3 | 0 | |
      262. | `0x03` | ??? | 0 | |
      263. | `0x04` | Tür | 0 | |
      264. | `0x05` | ??? | 0 | |
      265. | `0x06` | Ranke | 0 | |
      266. | `0x07`-`0x0F` | ??? | 0 | |
      267. | `0x10` | Box mit Feuerblume | 0 | |
      268. | `0x11` | Box mit Blatt | 0 | |
      269. | `0x12` | Box mit Stern | 0 | |
      270. | `0x13` | Box mit Münze | 0 | |
      271. | `0x14` | Box mit Münzen | 0 | |
      272. | `0x15` | Muncher | 0 | |
      273. | `0x16` | Block mit Feuerblume | 0 | |
      274. | `0x17` | Block mit Blatt | 0 | |
      275. | `0x18` | Block mit Stern | 0 | |
      276. | `0x19` | Block mit Münze | 0 | |
      277. | `0x1A` | Block mit Münzen | 0 | |
      278. | `0x1B` | Block mit 1-Up | 0 | |
      279. | `0x1C` | Block mit Ranke | 0 | |
      280. | `0x1D` | Block mit P-Switch | 0 | |
      281. | `0x1E` | Unsichtbare Box mit Münze | 0 | |
      282. | `0x1F` | Unsichtbare Box mit 1-Up | 0 | |
      283. | `0x20` | Unsichtbarer Notenblock | 0 | |
      284. | `0x21` | Notenblock mit Feuerblume | 0 | |
      285. | `0x22` | Notenblock mit Blatt | 0 | |
      286. | `0x23` | Notenblock mit Stern | 0 | |
      287. | `0x24` | Steinblock mit Feuerblume | 0 | |
      288. | `0x25` | Steinblock mit Blatt | 0 | |
      289. | `0x26` | Steinblock mit Stern | 0 | |
      290. | `0x27` | Unsichtbarer Roter Notenblock | 0 | |
      291. | `0x28` | P-Switch | 0 | |
      292. | `0x29` | Zielhintergrund | 0 | |
      293. | `0x2A`-`0x42` | ??? | 0 | |
      294. | `0x43` | Box mit Schuh | 0 | |
      295. | `0x44` | Box mit Feder | 0 | |
      296. | `0x45` | Teil vom Ziel | 0 | |
      297. | `0x46` | Tür | 0 | |
      298. | `0x47` | Block steuerbaren Münzen | 0 | |
      299. | `0x48` | Stachel 1 | 0 | |
      300. | `0x49` | Stachel 2 | 0 | |
      301. | `0x4A` | ??? | 0 | |
      302. | `0x4B` | Schild mit Pfeil (rechts) | 0 | |
      303. | `0x4C` | Schild mit Pfeil (links) | 0 | |
      304. | `0x4D` | Roter Stachel | 0 | |
      305. | `0x4E` | ??? | 0 | |
      306. | `0x4F` | Blockelement | 0 | |
      307. | `0x50` | Blockelement | 0 | |
      308. | `0x50` | Wandrennblock (unten rechts) | 0 | |
      309. | `0x51` | Wandrennblock (unten links) | 0 | |
      310. | `0x52` | Wandrennblock (oben rechts) | 0 | |
      311. | `0x53` | Wandrennblock (oben links) | 0 | |
      312. | `0x54` | Weißes Tile | 0 | |
      313. | `0x55` | Box mit P-Wing??? | 0 | |
      314. | `0x56` | Leere Box??? | 0 | |
      315. | `0x57` | ??? | 0 | |
      316. | `0x58` | ??? | 0 | |
      317. | `0x59` | POW-Block | 0 | |
      318. | `0x5A`-`0xFE` | ??? | 0 | |
      319. | `0x00` | Weißer Block | 1 | |
      320. | `0x01` | Orangener Block | 1 | |
      321. | `0x02` | Grüner Block | 1 | |
      322. | `0x03` | Blauer Block | 1 | |
      323. | `0x04` | Weißer Block (schwebend) | 1 | |
      324. | `0x05` | Orangener Block (schwebend) | 1 | |
      325. | `0x06` | Grüner Block (schwebend) | 1 | |
      326. | `0x07` | Blauer Block (schwebend) | 1 | |
      327. | `0x08` | Büsche | 1 | |
      328. | `0x09` | Lücke im Boden | 1 | |
      329. | `0x0A` | Wolkenblöcke | 1 | |
      330. | `0x0B` | Boden | 1 | Länge des Boden |
      331. | `0x0C` | Boden | 1 | Länge des Boden |
      332. | `0x0D` | ??? | 1 | |
      333. | `0x0E` | Abstand im Boden mit Wasser | 1 | |
      334. | `0x0F` | Zerstörbare Blöcke | 1 | |
      335. | `0x10` | Coinbox | 1 | |
      336. | `0x11` | Zerstörbarer Block mit Münze | 1 | |
      337. | `0x12` | Steinblock | 1 | |
      338. | `0x13` | Notenblock | 1 | |
      339. | `0x14` | Notenblock | 1 | |
      340. | `0x15` | Leerer Steinblock | 1 | |
      341. | `0x16` | Münze | 1 | |
      342. | `0x17` | Röhre nach unten (begehbar) | 1 | |
      343. | `0x18` | Röhre nach unten | 1 | |
      344. | `0x19` | Röhre nach unten (begehbar) | 1 | |
      345. | `0x1A` | Röhre nach oben (begehbar) | 1 | |
      346. | `0x1B` | Röhre nach oben | 1 | |
      347. | `0x1C` | Röhre nach rechts (begehbar) | 1 | |
      348. | `0x1D` | Röhre nach rechts | 1 | |
      349. | `0x1E` | Röhre nach links (begehbar) | 1 | |
      350. | `0x1F` | Röhre nach links | 1 | |
      351. | `0x20` | "Kugelwilli ""rohr""" | 1 | |
      352. | `0x21` | Brücke | 1 | |
      353. | `0x22` | ??? | 1 | |
      354. | `0x23` | Wasserfall | 1 | Breite des Wasserfalls |
      355. | `0x24` | Wasserfläche 1 | 1 | Breite der Wasserfläche |
      356. | `0x25` | Wasserfläche 2 | 1 | Breite der Wasserfläche |
      357. | `0x26` | Wasserfläche 3 | 1 | Breite der Wasserfläche |
      358. | `0x27` | ??? | 1 | ??? |
      359. | `0x28` | Stahlblock | 1 | Breite des Stahlblocks |
      360. | `0x29` | ??? | 1 | ??? |
      361. | `0x2A` | ??? | 1 | ??? |
      362. | `0x2B` | Blauer zerstörbarer Block | 1 | |
      363. | `0x2C` | Doppelseitige Röhre (begehbar, vertikal) | 1 | |
      364. | `0x2D` | Wolken | 1 | |
      365. | `0x2E` | Bonusbereich Block | 1 | Breite des Blocks |
      366. | `0x2E` | Büsche | 1 | |
      367. | `0x2F` | ??? | 1 | |
      368. | `0x51` | SMA Pilzblock | 1 | Anzahl der Reihen |
      369. | `0x52` | SMA Zahlblock | 1 | Anzahl der Reihen |
      370. | `0x53` | SMA Zahlblock | 1 | Anzahl der Reihen |
      371. | `0x54` | SMA Zahlblock | 1 | Anzahl der Reihen |
      372. | `0x55` | Grauer Steinblock | 1 | Anzahl der Reihen |
      373. | `0x56` | Unsichtbarer Block | 1 | |
      374. | `0x57` | Beschleunigung Block | 1 | |
      375. | `0x58` | Blau-Weiße Platform aus SMW | 1 | |
      376. | `0x59` | Seil | 1 | |
      377. | `0x5A` | ??? | 1 | |
      378. | `0x5B` | ??? | 1 | |
      379. | `0x5C` | ??? | 1 | |
      380. | `0x5D` | Fallende Stachelplatform | 1 | |
      381. | `0x5E` | Spikes | 1 | |
      382. | `0x5F` | SMA Block | 1 | Anzahl der Reihen |
      383. | `0x60` | Treppe aus Geisterhaus (ul.or.) | 1 | |
      384. | `0x61` | Platform??? | 1 | |
      385. | `0x62` | ??? | 1 | |
      386. | `0x63` | ??? | 1 | |
      387. | `0x68` | Unsichtbarer Block | 1 | |
      388. | `0x69` | ??? | 1 | |
      389. | `0x6A` | ??? | 1 | ??? |
      390. | `0x6B` | Bonusbereich Block | 1 | |
      391. | `0x6C` | Treppe aus Geisterhaus (ol.ur.) | 1 | |
      392. | `0x6D` | ??? | 1 | |
      393. | `0x6E` | "Kugelwilli ""rohr"" von oben" | 1 | |
      394. | `0x6F`-`0x71` | ??? | 1 | ??? |
      395. | `0x72` | Diagonale Münzenreihe (ul.or.) | 1 | Anzahl der Münzen |
      396. | `0x73`-`0x77` | ??? | 1 | |
      397. | `0x78` | Zielbereich | 1 | |
      398. | `0x79`-`0x7E` | ??? | 1 | |
      399. | `0x7F` | Fahnenstange | 1 | |
      400. | `0x80` | Weiße Blöcke | 1 | Anzahl der Reihen |
      401. | `0x81` | Gebüsch | 1 | |
      402. | `0x82` | Gebüsch | 1 | |
      403. | `0x83` | Gebüsch | 1 | |
      404. | `0x84` | ??? | 1 | |
      405. | `0x85` | Tür | 1 | |
      406. | `0x86` | ??? | 1 | |
      407. | `0x87` | Ranke | 1 | |
      408. | `0x88`-`0x90` | ??? | 1 | |
      409. | `0x91`-`0xA7` | Block aus Zielbereich | 1 | |
      410. | `0xA8` | ??? | 1 | |
      411. | `0xA9` | ??? | 1 | |
      412. | `0xAA` | Zielbereich | 1 | |
      413. | `0xAB`-`0xC8` | ??? | 1 | |
      414. | `0xC9` | Wasserblock | 1 | |
      415. | `0xCA` | Wasserblock | 1 | |
      416. | `0xCB` | Wasserblock | 1 | |
      417. | `0xCC`-`0xCE` | ??? | 1 | |
      418. | `0xCF` | Wasserblock | 1 | |
      419. | `0xD0` | Bonusbereich Ecke ol. | 1 | |
      420. | `0xD1` | Wasserblock | 1 | |
      421. | `0xD2`-`0xD5` | ??? | 1 | |
      422. | `0xD6` | Coinbox mit P-Wing??? | 1 | |
      423. | `0xD7` | Leere Coinbox??? | 1 | |
      424. | `0xD8`-`0xFE` | ??? | 1 | |
      425. ## 4. Worldmaps
      426. Der Pointer zu der Worldmap Liste findet man am Offset `0x0094B4`.
      427. Navigiert man zu dem dort angegebenen Offset (in meinem Fall`0x135AAC`),
      428. findet man 9 weitere Pointer, welche zu den einzelnen Worldmaps führen.
      429. Die Reihenfolge entspricht der Reihenfolge im Spiel, also der erste Pointer = Welt 1, der zweite = Welt 2...
      430. Nummer 9 ist die Warpzone.
      431. Die Worldmaps selber sind immer 12 Tiles hoch, in den Hexdaten entspricht ein Tile 2 Bytes.
      432. Die Map Endet mit `0xFF 0x00`
      433. Die Breite der Worldmap entspricht somit `(Anzahl der Bytes der Map - 2) / 2 (bytes pro tile) / 12 (tiles pro Spalte)`
      434. Beispiel: Welt 1 hat eine Länge von 386 Bytes (einschl. `0xFF 0x00`)
      435. Demnach `(386 - 2) / 2 / 12 = 16`
      436. In meinem ROM haben die Worldmaps folgende Offsets:
      437. | Welt | Offset |
      438. | -------: | ---------: |
      439. | 1 | `0x133B18` |
      440. | 2 | `0x133C9A` |
      441. | 3 | `0x133F9C` |
      442. | 4 | `0x13441E` |
      443. | 5 | `0x134720` |
      444. | 6 | `0x134A22` |
      445. | 7 | `0x134EA4` |
      446. | 8 | `0x1351A6` |
      447. | Warpzone | `0x1357A8` |
      448. ## 5. Paletten
      449. Die Paletten werden ingame nochmal berechnet was die Suche verkompliziert - aber nicht unmöglich - macht :-)
      450. Sturmvogel hat die ASM routine extrahiert und ich konnte folgendes daraus ableiten:
      451. Um an die Palette im ROM zu finden, müssen wir die Farbe in VBA nehmen und in Binär umwandeln
      452. und die einzelnen Farbwerte anhand dieser Auflistung umwandeln (einige Farben haben leider mehrere mögliche ursprungswerte):
      453. | Manipuliert (VBA) | Original 1 | Original 2 |
      454. | ----------------: | ---------: | ---------: |
      455. | `00000` | `00000` | |
      456. | `00011` | `00001` | |
      457. | `00100` | `00010` | |
      458. | `00101` | `00011` | |
      459. | `00110` | `00100` | |
      460. | `01000` | `00101` | |
      461. | `01001` | `00110` | |
      462. | `01010` | `00111` | |
      463. | `01011` | `01000` | |
      464. | `01100` | `01001` | |
      465. | `01101` | `01010` | |
      466. | `01110` | `01011` | |
      467. | `01111` | `01100` | |
      468. | `10000` | `01101` | |
      469. | `10001` | `01110` | `01111` |
      470. | `10010` | `10000` | |
      471. | `10011` | `10001` | |
      472. | `10100` | `10010` | |
      473. | `10101` | `10011` | |
      474. | `10110` | `10100` | |
      475. | `10111` | `10101` | |
      476. | `11000` | `10110` | |
      477. | `11001` | `10111` | |
      478. | `11010` | `11000` | |
      479. | `11011` | `11001` | |
      480. | `11100` | `11010` | |
      481. | `11101` | `11011` | `11100` |
      482. | `11110` | `11101` | `11110` |
      483. | `11111` | `11111` | |
      484. Als Beispiel:
      485. ```
      486. Farbe im VBA: 0x149E
      487. Blau Grün Rot
      488. Zerlegt in Farben (binär): 00101 00100 11110
      489. Ersetzen der Farben:
      490. 00101 -> 00011
      491. 00100 -> 00010
      492. 11110 -> 11101 ODER 11110
      493. Umwandeln in Hex:
      494. 00011 00010 11101 -> 0C5D -> 5D0C (Little endian)
      495. 00011 00010 11110 -> 0C5E -> 5E0C (Little endian)
      496. Macht man das mit mehreren aufeinander folgenden Farben findet man mit dem Ergebnis
      497. die Palette im ROM.
      498. ```
      499. Die komplette Story dazu ist hier zu finden:
      500. [https://board.romhackersworld.eu/thread/13317](https://board.romhackersworld.eu/thread/13317)
      Alles anzeigen
      Das Markdown gibts auch als HTML: 2018-04-01.zip


      Gruß,
      Julian
      Ich bin nicht vergesslich, in meinem Hirn werden nur Pointer zu den Leuten angelegt, auf die ich dann nur zurück greifen muss um die Information zu erlangen :)

      Dieser Beitrag wurde bereits 24 mal editiert, zuletzt von Devtronic ()