Adventures of Lolo/ROM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
m (Caught a mistake I made a few months ago while writing a new level editor for the game: room data is 15x16)
 
(One intermediate revision by one other user not shown)
Line 775: Line 775:


A "Room" consists of 15x16 tiles (note - not 16x16 as in some other eggerland series instances), 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).
A "Room" consists of 15x16 tiles (note - not 16x16 as in some other eggerland series instances), 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).
{{Internal Data}}

Latest revision as of 14:26, 24 January 2024

Chip tiny.png 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 15x16 tiles (note - not 16x16 as in some other eggerland series instances), 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).