The current URL is datacrystal.tcrf.net.
Adventures of Lolo/ROM map: Difference between revisions
(Added sections for room length and bank number, and an explanation of room data. All of this together is the minimum amount of data that needs to be changed if editing rooms, the likely rom hack activity for this game.) |
m (small clarifying clause) |
||
Line 717: | Line 717: | ||
* <tt>0x3B00 - 0x3B31 (0032)</tt> = Room bank numbers B (levels 1-30 are in bank "5"; 31-50 are in bank "6") | * <tt>0x3B00 - 0x3B31 (0032)</tt> = Room bank numbers B (levels 1-30 are in bank "5"; 31-50 are in bank "6") | ||
When loading a level, the game switches in the appropriate bank B to the PPU, then reads L bytes from 0x0010+P into RAM 0x723 (see Room Data below) | When loading a level, the game switches in the appropriate bank B to the PPU, then reads L bytes from 0x0010+P of that bank into RAM 0x723 (see Room Data below) | ||
== Room Data == | == Room Data == |
Revision as of 22:41, 3 January 2017
The following article is a ROM map for Adventures of Lolo.
Data found: 63.63%
ROM Address | Bytes | The Data's usage |
---|---|---|
$0000 | 16 Bytes | Game's Header |
$004F | 2 Bytes | Kai 8x8 map Pointer |
$0076 | 2 Bytes | Kai Palette Pointer |
$0096 | 12 Bytes | Kai 8x8 map |
$00AC | 32 Bytes | Kai Palette |
$0132 | 2 Bytes | Lala Captured 8x8 map 1 Pointer |
$0196 | 2 Bytes | Lala Captured Palette 1 Pointer |
$01A2 | 1 Byte | Lala Captured SFX byte |
$01DA | 2 Bytes | Lala Captured Palette 2 Pointer |
$01E8 | 2 Bytes | Lala Captured Palette 1 Pointer (flash) |
$02F6 | Unknown | Lala Captured 8x8 map 1 |
$03B0 | 32 Bytes | Lala Captured Palette 1 |
$03D0 | 32 Bytes | Lala Captured Palette 2 |
$04C5 | 2 Bytes | Lala Captured 2 8x8 map Pointer |
$04EE | 2 Bytes | Lala Captured 2 Palette Pointer |
$04F5 | 1 Byte | GD laugh SFX Byte |
$058F | 1 Byte | GD Escape SFX Byte |
$06CE | 32 Bytes | Lala Captured 2 Palette |
$06F8 | 964 Bytes | Lala Captured 2 8x8 map |
$0B21 | 2 Bytes | Title Screen 8x8 map Pointer |
$0B56 | 2 Bytes | Title Screen invisible Palette Pointer |
$0BE9 | 1 Byte | Title Screen reveal SFX Byte |
$0BF8 | 2 Bytes | Title Screen reveal Palette Pointer 1 |
$0C02 | 2 Bytes | Title Screen reveal Palette Pointer 2 |
$0C0E | 2 Bytes | Title Screen Palette Pointer |
$0C5A | 32 Bytes | Title Screen Palette |
$0C7A | 32 Bytes | Title Screen invisible Palette |
$0C9A | 32 Bytes | Title Screen reveal Palette |
$0CBA | Unknown | Title Screen 8x8 map |
$1169 | 2 Bytes | Menu Palette Pointer |
$11EE | 32 Bytes | Menu Palette |
$1292 | 120 Bytes | Copyright Text |
$1342 | 2 Bytes | Game Over data Pointer |
$1394 | 1 Byte | Game Over Music byte |
$13A4 | 2 Bytes | Game Over Palette Pointer |
$13EE | 63 Bytes | Game Over data |
$142D | 32 Bytes | Game Over Palette |
$14FC | 2 Bytes | Password Palette Pointer |
$1503 | 1 Byte | Password Music |
$153A | 1 Byte | Move (Password) SFX Byte |
$154A | 1 Byte | Select (Password) SFX Byte |
$169B | 1 Byte | Incorrect SFX Byte |
$178E | 32 Bytes | Password Palette |
$17B2 | Unknown | Password 8x8 map |
$18CB | 2 Bytes | Starting Message text Pointer |
$1931 | 1 Byte | Level Music Byte |
$19B6 | 1 Byte | Cleared Floor Music Byte |
$1A71 | 2 Bytes | Level Palette Pointer |
$1A79 | 2 Bytes | Level Palette Lava Pointer |
$1A80 | 32 Bytes | Level Palette |
$1AA0 | 32 Bytes | Level Palette Lava |
$1AD3 | 2 Bytes | Big Castle 8x8 map Pointer |
$1AE1 | 1 Byte | Lolo Walking Music Byte |
$1B43 | 32 Bytes | Big Castle Palette |
$1B63 | 964 Bytes | Big Castle 8x8 map |
$1F73 | 2 Bytes | Big Castle Palette Pointer |
$01FF0 | 1 Byte | Vs GD Music Byte |
$02005 | 2 Bytes | Last Room Palette Pointer |
$02046 | 1 Byte | GD turn to egg SFX Byte |
$20DB | 1 Byte | GD turn to egg 2 SFX Byte |
$02126 | 1 Byte | GD shoot egg SFX Byte |
$02182 | 1 Byte | Lolo win Music Byte |
$2231 | 1 Byte | Ending Music Byte |
$223F | 2 Bytes | Castle Brighten Palette Pointer |
$234C | 32 Bytes | Last Room Palette |
$236C | 32 Bytes | Castle Brighten Palette |
$239A | 960 Bytes | Last Room 8x8 map |
$27F8 | 2 Bytes | Floor # Palette Pointer |
$27FF | 1 Byte | Floor # Music Byte |
$28B6 | 2 Bytes | Progress text 1 Pointer |
$28C0 | 2 Bytes | Progress text 2 Pointer |
$28D4 | 2 Bytes | Almost There text Pointer |
$28DC | 2 Bytes | Last Message text Pointer |
$2924 | 32 Bytes | Floor # Palette |
$2999 | 162 Bytes | Starting Message text |
$2A3B | 74 Bytes | Progress text 1 |
$2A85 | 38 Bytes | Progress text 2 |
$2AAB | 56 Bytes | Almost there text |
$2AE3 | 128 Bytes | Last Message text |
$2BC9 | 2 Bytes | Lolo & Lala Palette Pointer |
$2BD0 | 1 Byte | Lolo & Lala Music Byte |
$2BF7 | 32 Bytes | Lolo & Lala Palette |
$2F8D | 1 Byte | X2 Heart SFX Byte |
$2FA0 | 1 Byte | Heart Pickup SFX Byte |
$2FB9 | 1 Byte | All hearts obtained SFX Byte |
$2FCF | 1 Byte | Powerup obtained SFX Byte |
$302C | 1 Byte | Jewel SFX Byte |
$306E | 1 byte | Lolo shot SFX Byte |
$3198 | 1 Byte | Shoot egg SFX Byte |
$322B | 1 Byte | Death SFX Byte |
$335E | 1 Byte | Powerup SFX Byte |
$3370 | 1 Byte | Break Rock SFX Byte |
$39AD | 2 Bytes | Water/Lava auto Palette Pointer |
$39D2 | 20 Bytes | Water auto Palette |
$39E6 | 24 Bytes | Lava auto Palette |
$3A4C | 2 Bytes | Level data Pointers main Pointer |
$3A6A | 100 Bytes | Level data Pointers |
$4174 | 1 Byte | Egg on water SFX Byte |
$448C | 1 Byte | Leeper asleep SFX Byte |
$4781 | 1 Byte | Gol Fire SFX Byte |
$4E82 | 1 Byte | Medusa gaze SFX Byte |
$6543 | 13 Bytes | Main theme music data channels |
$6550 | 4 Bytes | Heart Pickup SFX data channel |
$6554 | 4 Bytes | Leeper asleep SFX data channel |
$6558 | 4 Bytes | Egg on water SFX data channel |
$655C | 7 Bytes | Use Powerup SFX data channels |
$6563 | 4 Bytes | Enemy can't respawn SFX data channel |
$6567 | 7 Bytes | Medusa gaze SFX data channels |
$656E | 4 Bytes | Break Rock SFX data channel |
$6572 | 7 Bytes | Jewel SFX data channels |
$6579 | 7 Bytes | Gol Fire SFX data channels |
$6580 | 4 Bytes | Shoot egg SFX data channel |
$6584 | 7 Bytes | Death SFX data channels |
$658B | 7 Bytes | All hearts obtained SFX data channels |
$6592 | 4 Bytes | Turn to egg SFX data channel |
$6596 | 4 Bytes | X2 Heart SFX data channel |
$659A | 7 Bytes | Powerup Obtained SFX data channels |
$65A1 | 4 Bytes | Move (Password) SFX data channel |
$65A5 | 7 Bytes | Select (Password) SFX data channels |
$65AC | 7 Bytes | Incorrect sound SFX data channels |
$65B3 | 10 Bytes | Game Over music data channels |
$65BD | 13 Bytes | Lala captured SFX data channels |
$65CA | 10 Bytes | GD Laugh SFX data channels |
$65D4 | 7 Bytes | GD escape SFX data channels |
$65DB | 4 Bytes | T screen reveal SFX data channel |
$65DF | 13 Bytes | Lolo win music data channels |
$65EC | 4 Bytes | Lolo walking music data channel |
$65F0 | 13 Bytes | Floor clear music data channels |
$65FD | 13 Bytes | Ending music data channels |
$660A | 10 Bytes | GD turned to egg SFX data channels |
$6614 | 10 Bytes | GD shoot egg SFX data channels |
$661E | 7 Bytes | Password music data channels |
$6625 | 13 Bytes | Vs GD music data channels |
$6632 | 13 Bytes | Floor # music data channels |
$663F | 10 Bytes | Lolo & Lala music data channels |
$6649 | 632 Bytes | Main theme music data |
$68C1 | 21 Bytes | Heart Pickup SFX data |
$68D6 | 57 Bytes | Leeper asleep SFX data |
$690F | 22 Bytes | Egg on water SFX data |
$6925 | 95 Bytes | Use powerup SFX data |
$6984 | 28 Bytes | Enemy can't respawn SFX data |
$69A1 | 69 Bytes | Medusa gaze SFX data |
$69E6 | 72 Bytes | Break Rock SFX data |
$6A2E | 76 Bytes | Jewel SFX data |
$6A7A | 64 Bytes | Gol Fire SFX data |
$6ABA | 61 Bytes | Shoot egg SFX data |
$6AF7 | 45 Bytes | GD shoot egg SFX data (related to 6ABA) |
$6B24 | 135 Bytes | Death SFX data |
$6BAB | 51 Bytes | All Hearts obtained SFX data |
$6BDE | 49 Bytes | Turn to egg SFX data |
$6C0F | 16 Bytes | GD turn to egg SFX data (related to 6BDE) |
$6C1F | 25 Bytes | X2 heart SFX data |
$6C38 | 152 Bytes | Powerup obtained SFX data |
$6CD0 | 13 Bytes | Move (Password) SFX data |
$6CDD | 39 Bytes | Select (Password) SFX data |
$6D04 | 36 Bytes | Incorrect SFX data |
$6D28 | 117 Bytes | Game Over music data |
$6D9D | 228 Bytes | Lala Captured SFX data |
$6E81 | 244 Bytes | GD Laugh SFX data |
$6F75 | 70 Bytes | GD Escape SFX data |
$6FBB | 107 Bytes | Title Screen reveal SFX data |
$7026 | 133 Bytes | Lolo Win music data |
$70AB | 28 Bytes | Lolo Walking music data |
$70C7 | 111 Bytes | Floor Clear music data |
$7136 | 2215 Bytes | Ending music data |
$79DD | 82 Bytes | Password Music data |
$7A2F | 198 Bytes | Vs GD Music data |
$7AF5 | 222 Bytes | Floor # Music data |
$7BD3 | 206 Bytes | Lolo & Lala music data |
$8010 | 20480 Bytes | Main art |
$D010 | 6876 Bytes | Level data |
$F010 | 960 Bytes | Lolo & Lala 8x8 Map |
$F410 | 3072 Bytes | Lolo & Lala CHR tiles |
In Depth Data
- 0x3A6A - 0x3ACD (0064) = Room data pointers P
- 0000 007C 00F4 016F 01EF
- 026B 02E5 0370 03E9 0472
- 04EE 057E 0604 0695 0705
- 0795 0822 08A6 091E 09A1
- 0A15 0A91 0B29 0BC9 0C4F
- 0CF3 0D8A 0E0C 0E97 0F2A
- 0000 00B0 0136 01AD 024F
- 02DC 0360 03F0 0470 04F9
- 0583 060E 06A4 071A 07A8
- 0839 08C5 095E 09E7 0A6D
- 0x3ACE - 0x3AFF (0032) = Room data lengths L
- 0x3B00 - 0x3B31 (0032) = Room bank numbers B (levels 1-30 are in bank "5"; 31-50 are in bank "6")
When loading a level, the game switches in the appropriate bank B to the PPU, then reads L bytes from 0x0010+P of that bank into RAM 0x723 (see Room Data below)
Room Data
Note that this data is stored in CHR-ROM.
- 0xD010 - 0xD08B (007C)
- 0xD08C - 0xD103 (0078)
- 0xD104 - 0xD17E (007B)
- 0xD17F - 0xD1FE (0080)
- 0xD1FF - 0xD27A (007C)
- 0xD27B - 0xD2F4 (007A)
- 0xD2F5 - 0xD37F (008B)
- 0xD380 - 0xD3F8 (0079)
- 0xD3F9 - 0xD481 (0089)
- 0xD482 - 0xD4FD (007C)
- 0xD4FE - 0xD58D (0090)
- 0xD58E - 0xD613 (0086)
- 0xD614 - 0xD6A4 (0091)
- 0xD6A5 - 0xD714 (0070)
- 0xD715 - 0xD7A4 (0090)
- 0xD7A5 - 0xD831 (008D)
- 0xD832 - 0xD8B5 (0084)
- 0xD8B6 - 0xD92D (0078)
- 0xD92E - 0xD9B0 (0083)
- 0xD9B1 - 0xDA24 (0074)
- 0xDA25 - 0xDAA0 (007C)
- 0xDAA1 - 0xDB38 (0098)
- 0xDB39 - 0xDBD8 (00A0)
- 0xDBD9 - 0xDC5E (0086)
- 0xDC5F - 0xDD02 (00A4)
- 0xDD03 - 0xDD99 (0097)
- 0xDD9A - 0xDE1B (0082)
- 0xDE1C - 0xDEA6 (008B)
- 0xDEA7 - 0xDF39 (0093)
- 0xDF3A - 0xE00F (00D6)
- 0xE010 - 0xE0BF (00B0)
- 0xE0C0 - 0xE145 (0086)
- 0xE146 - 0xE1BC (0077)
- 0xE1BD - 0xE25E (00A2)
- 0xE25F - 0xE2EB (008D)
- 0xE2EC - 0xE36F (0084)
- 0xE370 - 0xE3FF (0090)
- 0xE400 - 0xE47F (0080)
- 0xE480 - 0xE508 (0089)
- 0xE509 - 0xE592 (008A)
- 0xE593 - 0xE61D (008B)
- 0xE61E - 0xE6B3 (0096)
- 0xE6B4 - 0xE729 (0076)
- 0xE72A - 0xE7B7 (008E)
- 0xE7B8 - 0xE848 (0091)
- 0xE849 - 0xE8D4 (008C)
- 0xE8D5 - 0xE96D (0099)
- 0xE96E - 0xE9F6 (0089)
- 0xE9F7 - 0xEA7C (0086)
- 0xEA7D - 0xEAEB (006F)
As a point of trivia, 0xEAEC - 0xEFFF features an unused copy of the level data in 0xDAEC - 0xDFFF.
A "Room" consists of 16x16 tiles, of which only 11x11 are "inside the walls" where Lolo can walk. Tile types are listed on the RAM Page and take one byte each. Room data is mostly rasterized tile data, filling in left to right bottom to top. But it is partially compressed (as you can see above, no room's data is a full 0100 long). Bytes with high bit 1 (F0-FF) are not individual tiles, but instead RLE directives. For X in 0xF0..0xFE, the game will copy (X-0xF0+2) of tiles from the row below the current row (or 0x00==black, for the bottom-most row). 0xFF is distinct from these, and is followed immediately by two bytes, a length L, and a tile type T. The game will expand these three together into (L+2) T's in a row. No RLE directive crosses a row boundary (if editing the level data, attempts to do so will trigger a buffer overrun in the level decompression logic and corrupt ram, including that used immediately by the decompression routine itself).