The current URL is datacrystal.tcrf.net.
Adventures of Lolo 3/RAM map: Difference between revisions
(A lot of memory expanded and notes added about how memory varies based on game state - Step 1) |
m (Hawk moved page Adventures of Lolo III/RAM map to Adventures of Lolo 3/RAM map) |
||
(9 intermediate revisions by 3 users not shown) | |||
Line 9: | Line 9: | ||
This is memory when in the main game (i.e. solving puzzles) | This is memory when in the main game (i.e. solving puzzles) | ||
{| border="1" cellpadding="1" | {| border="1" cellpadding="1" class="wikitable" style="width:100%;" | ||
! '''RAM Address''' !! '''Function''' !! '''Details''' | |||
|- | |- | ||
| 0000 || PPU Control Clone || | | $0000 || PPU Control Clone || | ||
|- | |- | ||
| 0001 || PPU Mask Clone || | | $0001 || PPU Mask Clone || | ||
|- | |- | ||
| | | $0006 || PPU Mask Alternate Clone || | ||
|- | |- | ||
| | | $0007 || Vblank Flag || Will be 0 when waiting for vblank, non-zero when in vblank | ||
|- | |- | ||
| | | $0008-$0009 || Buttons Being Held || Global | ||
|- | |- | ||
| | | $000a-$000b || Buttons Being Pressed || Global | ||
|- | |- | ||
| | | $0015 || Misc/Scratch memory || | ||
|- | |- | ||
| | | $0016 || 〃 || | ||
|- | |- | ||
| | | $0017 || 〃 || | ||
|- | |- | ||
| | | $0018 || 〃 || | ||
|- | |- | ||
| | | $0019 || 〃 || | ||
|- | |- | ||
| | | $001a || 〃 || | ||
|- | |- | ||
| | | $001b || 〃 || | ||
|- | |- | ||
| | | $001c || 〃 || | ||
|- | |- | ||
| | | $001d || 〃 || Generally for backing up A register | ||
|- | |- | ||
| | | $001e || 〃 || Generally for backing up X register | ||
|- | |- | ||
| | | $001f || 〃 || Generally for backing up Y register | ||
|- | |- | ||
| | | $0020 - $0021 || Pointer used by music engine || | ||
|- | |- | ||
| | | $0022 || Misc/Scratch memory || Used by the music engine | ||
|- | |- | ||
| | | $0023 || 〃 || Used during controller reads | ||
|- | |- | ||
| | | $0025 || PPU Queue End Index || Used when writing things to the PPU | ||
|- | |- | ||
| 0052 || Character/Misc Flags || Bitwise flags | | $0026 || PPU Read Queue Current Index || 〃 | ||
|- | |||
| $0027 || PPU Write Queue Current Index || 〃 | |||
|- | |||
| $0028 || PPU Queue Current Index Before Writing || 〃 | |||
|- | |||
| $002b || Global Frame Counter || Is incremented every NMI | |||
|- | |||
| $002c || Misc/Scratch memory || | |||
|- | |||
| $002d || 〃 || | |||
|- | |||
| $0049 || Controller Buttons Being Held (Gameplay only) || Buttons that constantly repeat actions when held (D-pad) | |||
|- | |||
| $004a || Controller Buttons Being Pressed (Gameplay only) || Buttons that trigger upon press and require a release/re-press to trigger again | |||
|- | |||
| $004c || Misc/Scratch memory for interacting with objects || Relates to the object's X position | |||
|- | |||
| $004d || Misc/Scratch memory for interacting with objects || Relates to the object's Y position | |||
|- | |||
| $004e || Power Heart Blink Animation flag || When the next heart yields a power, will indicate which hearts should blink. Alternates between columns every frame. | |||
|- | |||
| $0051 || Level's Room ID || Acts as a lookup index for the room among all the rooms in the game. (Will be a value of 0-109) | |||
|- | |||
| $0052 || Character/Misc Flags || Bitwise flags | |||
* <tt>%---1----</tt> Set if ally is captured / Clear if both characters active | |||
* <tt>%----1---</tt> Set if rainbow bridge cutscene viewed / Clear otherwise | |||
* <tt>%-----1--</tt> Set if rainbow bridge cutscene playing / Clear otherwise | |||
* <tt>%-------1</tt> Set if controlling Lala / Clear if controlling Lolo | |||
|- | |||
| $0053 || Scripted Button Timer || If giving up in a training level, it's possible to have the game show the solution. This is a timer between scripted button presses | |||
|- | |||
| $0054 || Scripted Button Current Index || Index for the pointer of scripted button presses | |||
|- | |||
| $0055 - $0056 || Scripted Button Pointer || Pointer to scripted button press data | |||
|- | |||
| $0057 || Magic Shot Quantity || | |||
|- | |||
| $0058 || Available Power (Slot 1) || Will be<br>0: None<br>1: Arrow<br>2: Bridge<br>3: Hammer | |||
|- | |||
| $0059 || Available Power (Slot 2) || 〃 | |||
|- | |||
| $005a || Available Power (Slot 3) || 〃 | |||
|- | |||
| $005b || Hearts Needed for Power (Slot 1) || | |||
|- | |||
| $005c || Hearts Needed for Power (Slot 2) || | |||
|- | |||
| $005d || Hearts Needed for Power (Slot 3) || | |||
|- | |||
| $005e || Treasure Chest X Position || | |||
|- | |||
| $005f || Treasure Chest Y Position || | |||
|- | |||
| $0060 || Treasure Chest has Been Taken flag || | |||
|- | |||
| $0061 || Level Frame Timer || Unlike the global frame timer, this starts counting once the level actually starts (i.e. Lolo has moved at least once) | |||
|- | |||
| $0062 || Lolo Has Not Moved flag || Acts as pause until Lolo makes a move. Will be 1 if Lolo hasn't moved or 0 if he has | |||
|- | |||
| $0063 || Level Timer Paused flag || Acts as a freeze flag for most enemies/objects in the level. Will be 1 if active (i.e. no enemies/objects will move) or 0 if inactive (i.e. enemies/objects will move). Gets set to 0 once Lolo makes his first move. | |||
|- | |||
| $0064 || Lolo is Frozen flag || Gets set when entering the line of sight of a Medusa/Don Medusa | |||
|- | |||
| $0065 || Lolo State index || Will be<br>0: Standard<br>1: Playing death animation<br>2: Giving up the level | |||
|- | |||
| $0066 || Egg is in Water flag || | |||
|- | |||
| $0067 || Lolo Riding Egg in Water Enemy index || Will be a value between $00-$1f if true, signifying which enemy is being ridden<br>Will be $ff if false | |||
|- | |||
| $0068 || Lolo Transitioning to/from egg in water || Will be 0 for false<br>Will be between $01-$10 for getting on an egg and count down until fully on the egg<br>Will be between $81-$90 for getting off an egg and count down until back on land | |||
|- | |||
| $0069 || Next Heart will Contain Power flag || Will be $ff if true<br>Non-negative value if false. If non-negative and not zero, will count down to zero and turn off heart flashing after a power is collected. | |||
|- | |||
| $006a - $0089 || Misc Enemy/Object Memory (slot 1) || Role varies by enemy/object | |||
|- | |||
| $008a - $00a9 || Misc Enemy/Object Memory (slot 2) || 〃 | |||
|- | |||
| $00aa - $00c9 || Misc Enemy/Object Memory (slot 2) || 〃 | |||
|- | |||
| $00ca || Lolo Slow X Speed Value || Normally $80. When in sand gets toggled between $80 and $00 | |||
|- | |||
| $00cb || Lolo X Position || Pixel value for where Lolo's sprite is | |||
|- | |||
| $00cc || Lolo Slow Y Speed Value || | |||
|- | |||
| $00 cd || Lolo Y Position || Pixel value for where Lolo's sprite is | |||
|- | |||
| $00ce || Lolo's Occupying X Position || Which square Lolo is occupying on the grid. Lolo moves in increments of $08(8) and this memory aligns with 00cb | |||
|- | |||
| $00cf || Lolo's Occupying Y Position || Same as Occupying X square. Aligns with 00 cd | |||
|- | |||
| $00d0 || Lolo Moving Direction || Will be: 0 = up, 1 = right, 2 = down, 3 = left | |||
|- | |||
| $00d1 || Lolo Facing Direction || 〃 | |||
|- | |||
| $00d2 || Lolo Walk Animation Timer || | |||
|- | |||
| $00d4 || Rocky Push Lolo Direction || $ff if false. If Lolo's being pushed by a Rocky enemy then $00 for up, $02 for down (they only push vertically) | |||
|- | |||
| $00d5 || Lolo Death Animation Timer 1 || | |||
|- | |||
| $00d6 || Lolo Death Animation Timer 2 || | |||
|- | |||
| $00da || Magic Shot Move Direction || | |||
|- | |||
| $00db || Magic Shot X Position || | |||
|- | |||
| $00dc || Magic Shot Y Position || | |||
|- | |||
| $00dd - $00de || Magic Hit Enemy Indexes || Temp/scratch memory for magic shots potentially hitting an enemy. Magic shots are divided into two halves and both halves must hit the same enemy in order for it to be egged | |||
|- | |||
| $00df || Decode Level Iterator Index || Used when decompressing room data | |||
|- | |||
| $00e1 || Crossed Breaking Bridge X Position || When Lolo goes across breaking bridges | |||
|- | |||
| $00e2 || Crossed Breaking Bridge Y Position || 〃 | |||
|- | |||
| $00ec || Room Liquid Animation Frame || For animating water/lava palettes in rooms | |||
|- | |||
| $00ed || Room Liquid Animation Timer || 〃 | |||
|- | |||
| $00ee || Room Liquid Type || 0 = water, 1 = lava | |||
|- | |||
| $00ef || Use Bridge Power On Lava Count || How many bridges are currently on lava? (only applies to bridge powers Lolo used and not regular bridge tiles) | |||
|- | |||
| $00f0 - $00f2 || Bridges on Lava X/Y Coordinates || | |||
|- | |||
| $00f3 - $00f5 || Bridges on Lava Countdown Timers || | |||
|- | |||
| $00f6 - $00f8 || Bridges on Lava Countdown States || 0 = Fully disappeared, 1 = About to disappear, 2 = Active | |||
|- | |||
| $00f9 || Heart Frames in the Room || | |||
|- | |||
| $00fa || Heart Frames Collected || If 00fa = 00f9 then the chest opens, etc. | |||
|- | |||
| $00fa || Heart Frames Collected || If 00fa = 00f9 then the chest opens, etc. | |||
|- | |||
!colspan="3"|$0100-$01ff | |||
|- | |||
| $014d || Current Overworld ID || | |||
|- | |||
| $014f || Current Level ID || | |||
|- | |||
| $0150-$0159 || Cleared Level Flags || All of these will be set to $11 at the start of the game indicating the first room of the level. These are nibble-based, so one byte covers two levels. | |||
Nibble values typically range from $1-$5 or $1-$a depending on how many rooms the level has. | |||
Other nibble values: $0 = Special (typically some special room at end of level), $e = Level is exploding, $f = Level is cleared | |||
|- | |||
| $015a || Current PRG Bank || | |||
|- | |||
| $01c3 || Number of Warp Holes (alternate respawn points) in a level || Can be 0-8 | |||
|- | |||
| $01c4-$01cb || Warp Holes Coordinates || | |||
|- | |||
!colspan="3"|$0400-$04ff | |||
|- | |||
| $0400-$04ff || Sprite/OAM Memory || | |||
|- | |||
!colspan="3"|$0600-$06ff | |||
|- | |- | ||
| | | $0600-$06ef || Decompressed Room Data || 16x15 Individual tiles of the room | ||
|- | |- | ||
| | | $06f0-$06ff || Decompressed Room Temp/Scratch || When decompressing the room, stores whatever tiles were in the previous row. | ||
|- | |- | ||
| | !colspan="3"|$0700-$07ff | ||
|- | |- | ||
| | | $0700 || Enemy/Object Iteration Index || Used when updating all enemies/objects. Will be a value of $00-$1f | ||
|- | |- | ||
| | | $0701-$0720 || Enemy/Object IDs || The lowest 2 bytes signify direction moved/faced. 0: Up, 1: Right, 2: Down, 3: Left | ||
Valid Values<br> | |||
$80: Leeper, $84: Rocky, $88: Alma, $8c: Gol, $90: Don Medusa, $94: Medusa, $98: Skull, $9c: Snakey, $a0: Moby, $a4: Gol Fireball, $a8: Medusa Shot, $ac: Don Medusa Shot, $b0: Emerald, $b4: Enemy destroyed explosion | |||
|- | |- | ||
| | | $0721-$0740 || Enemy/Object Statuses || Role by Value:<br>0-2: Varies by enemy, 3: Is egged, 4: Is egged (cracking), 5: Is egged in the water, 6-8: Is sinking in water, 9: Is egged flying off screen, 10: Is off-screen waiting to respawn, 11: Is respawning square | ||
|- | |- | ||
| | | $0741-$0760 || Enemy/Object X Positions || Pixel value of where enemy/object is | ||
|- | |- | ||
| | | $0761-$0780 || Enemy/Object Y Positions || 〃 | ||
|- | |- | ||
| | | $0781-$07a0 || Enemy/Object Occupying X Positions || Which square is enemy/object occupying? Relates to display position and is in increments of 8. | ||
|- | |- | ||
| | | $07a1-$07c0 || Enemy/Object Occupying Y Positions || 〃 | ||
|- | |- | ||
|} | |} | ||
=== RAM During Overworld === | === RAM During Overworld === | ||
{| border="1" cellpadding="1" | Address values here may be repeated from those during gameplay. If so, the the function of memory also changes. | ||
{| border="1" cellpadding="1" class="wikitable" | |||
! '''RAM Address''' !! '''Function''' !! '''Details''' | |||
|- | |- | ||
| 0079 || Lolo's X Position (Overworld) || | | $0079 || Lolo's X Position (Overworld) || | ||
|- | |- | ||
| 007A || Lala's X Position (Overworld) || | | $007A || Lala's X Position (Overworld) || | ||
|- | |- | ||
| 0081 || Lolo's Y Position (Overworld) || | | $0081 || Lolo's Y Position (Overworld) || | ||
|- | |- | ||
| 0082 || Lala's Y Position (Overworld) || | | $0082 || Lala's Y Position (Overworld) || | ||
|- | |- | ||
| 008A || Lolo's Sprite Frame (Overworld) || | | $008A || Lolo's Sprite Frame (Overworld) || | ||
|- | |- | ||
| 008B || Lala's Sprite Frame (Overworld) || | | $008B || Lala's Sprite Frame (Overworld) || | ||
|- | |- | ||
|} | |} | ||
{{Internal Data}} |
Latest revision as of 20:28, 28 January 2024
The following article is a RAM map for Adventures of Lolo 3.
Foreword
The role of certain memory addresses varies and depends on whether one is in the main game or is on other screens such as the world map, training levels, etc.
RAM During Gameplay
This is memory when in the main game (i.e. solving puzzles)
RAM Address | Function | Details |
---|---|---|
$0000 | PPU Control Clone | |
$0001 | PPU Mask Clone | |
$0006 | PPU Mask Alternate Clone | |
$0007 | Vblank Flag | Will be 0 when waiting for vblank, non-zero when in vblank |
$0008-$0009 | Buttons Being Held | Global |
$000a-$000b | Buttons Being Pressed | Global |
$0015 | Misc/Scratch memory | |
$0016 | 〃 | |
$0017 | 〃 | |
$0018 | 〃 | |
$0019 | 〃 | |
$001a | 〃 | |
$001b | 〃 | |
$001c | 〃 | |
$001d | 〃 | Generally for backing up A register |
$001e | 〃 | Generally for backing up X register |
$001f | 〃 | Generally for backing up Y register |
$0020 - $0021 | Pointer used by music engine | |
$0022 | Misc/Scratch memory | Used by the music engine |
$0023 | 〃 | Used during controller reads |
$0025 | PPU Queue End Index | Used when writing things to the PPU |
$0026 | PPU Read Queue Current Index | 〃 |
$0027 | PPU Write Queue Current Index | 〃 |
$0028 | PPU Queue Current Index Before Writing | 〃 |
$002b | Global Frame Counter | Is incremented every NMI |
$002c | Misc/Scratch memory | |
$002d | 〃 | |
$0049 | Controller Buttons Being Held (Gameplay only) | Buttons that constantly repeat actions when held (D-pad) |
$004a | Controller Buttons Being Pressed (Gameplay only) | Buttons that trigger upon press and require a release/re-press to trigger again |
$004c | Misc/Scratch memory for interacting with objects | Relates to the object's X position |
$004d | Misc/Scratch memory for interacting with objects | Relates to the object's Y position |
$004e | Power Heart Blink Animation flag | When the next heart yields a power, will indicate which hearts should blink. Alternates between columns every frame. |
$0051 | Level's Room ID | Acts as a lookup index for the room among all the rooms in the game. (Will be a value of 0-109) |
$0052 | Character/Misc Flags | Bitwise flags
|
$0053 | Scripted Button Timer | If giving up in a training level, it's possible to have the game show the solution. This is a timer between scripted button presses |
$0054 | Scripted Button Current Index | Index for the pointer of scripted button presses |
$0055 - $0056 | Scripted Button Pointer | Pointer to scripted button press data |
$0057 | Magic Shot Quantity | |
$0058 | Available Power (Slot 1) | Will be 0: None 1: Arrow 2: Bridge 3: Hammer |
$0059 | Available Power (Slot 2) | 〃 |
$005a | Available Power (Slot 3) | 〃 |
$005b | Hearts Needed for Power (Slot 1) | |
$005c | Hearts Needed for Power (Slot 2) | |
$005d | Hearts Needed for Power (Slot 3) | |
$005e | Treasure Chest X Position | |
$005f | Treasure Chest Y Position | |
$0060 | Treasure Chest has Been Taken flag | |
$0061 | Level Frame Timer | Unlike the global frame timer, this starts counting once the level actually starts (i.e. Lolo has moved at least once) |
$0062 | Lolo Has Not Moved flag | Acts as pause until Lolo makes a move. Will be 1 if Lolo hasn't moved or 0 if he has |
$0063 | Level Timer Paused flag | Acts as a freeze flag for most enemies/objects in the level. Will be 1 if active (i.e. no enemies/objects will move) or 0 if inactive (i.e. enemies/objects will move). Gets set to 0 once Lolo makes his first move. |
$0064 | Lolo is Frozen flag | Gets set when entering the line of sight of a Medusa/Don Medusa |
$0065 | Lolo State index | Will be 0: Standard 1: Playing death animation 2: Giving up the level |
$0066 | Egg is in Water flag | |
$0067 | Lolo Riding Egg in Water Enemy index | Will be a value between $00-$1f if true, signifying which enemy is being ridden Will be $ff if false |
$0068 | Lolo Transitioning to/from egg in water | Will be 0 for false Will be between $01-$10 for getting on an egg and count down until fully on the egg Will be between $81-$90 for getting off an egg and count down until back on land |
$0069 | Next Heart will Contain Power flag | Will be $ff if true Non-negative value if false. If non-negative and not zero, will count down to zero and turn off heart flashing after a power is collected. |
$006a - $0089 | Misc Enemy/Object Memory (slot 1) | Role varies by enemy/object |
$008a - $00a9 | Misc Enemy/Object Memory (slot 2) | 〃 |
$00aa - $00c9 | Misc Enemy/Object Memory (slot 2) | 〃 |
$00ca | Lolo Slow X Speed Value | Normally $80. When in sand gets toggled between $80 and $00 |
$00cb | Lolo X Position | Pixel value for where Lolo's sprite is |
$00cc | Lolo Slow Y Speed Value | |
$00 cd | Lolo Y Position | Pixel value for where Lolo's sprite is |
$00ce | Lolo's Occupying X Position | Which square Lolo is occupying on the grid. Lolo moves in increments of $08(8) and this memory aligns with 00cb |
$00cf | Lolo's Occupying Y Position | Same as Occupying X square. Aligns with 00 cd |
$00d0 | Lolo Moving Direction | Will be: 0 = up, 1 = right, 2 = down, 3 = left |
$00d1 | Lolo Facing Direction | 〃 |
$00d2 | Lolo Walk Animation Timer | |
$00d4 | Rocky Push Lolo Direction | $ff if false. If Lolo's being pushed by a Rocky enemy then $00 for up, $02 for down (they only push vertically) |
$00d5 | Lolo Death Animation Timer 1 | |
$00d6 | Lolo Death Animation Timer 2 | |
$00da | Magic Shot Move Direction | |
$00db | Magic Shot X Position | |
$00dc | Magic Shot Y Position | |
$00dd - $00de | Magic Hit Enemy Indexes | Temp/scratch memory for magic shots potentially hitting an enemy. Magic shots are divided into two halves and both halves must hit the same enemy in order for it to be egged |
$00df | Decode Level Iterator Index | Used when decompressing room data |
$00e1 | Crossed Breaking Bridge X Position | When Lolo goes across breaking bridges |
$00e2 | Crossed Breaking Bridge Y Position | 〃 |
$00ec | Room Liquid Animation Frame | For animating water/lava palettes in rooms |
$00ed | Room Liquid Animation Timer | 〃 |
$00ee | Room Liquid Type | 0 = water, 1 = lava |
$00ef | Use Bridge Power On Lava Count | How many bridges are currently on lava? (only applies to bridge powers Lolo used and not regular bridge tiles) |
$00f0 - $00f2 | Bridges on Lava X/Y Coordinates | |
$00f3 - $00f5 | Bridges on Lava Countdown Timers | |
$00f6 - $00f8 | Bridges on Lava Countdown States | 0 = Fully disappeared, 1 = About to disappear, 2 = Active |
$00f9 | Heart Frames in the Room | |
$00fa | Heart Frames Collected | If 00fa = 00f9 then the chest opens, etc. |
$00fa | Heart Frames Collected | If 00fa = 00f9 then the chest opens, etc. |
$0100-$01ff | ||
$014d | Current Overworld ID | |
$014f | Current Level ID | |
$0150-$0159 | Cleared Level Flags | All of these will be set to $11 at the start of the game indicating the first room of the level. These are nibble-based, so one byte covers two levels.
Nibble values typically range from $1-$5 or $1-$a depending on how many rooms the level has. Other nibble values: $0 = Special (typically some special room at end of level), $e = Level is exploding, $f = Level is cleared |
$015a | Current PRG Bank | |
$01c3 | Number of Warp Holes (alternate respawn points) in a level | Can be 0-8 |
$01c4-$01cb | Warp Holes Coordinates | |
$0400-$04ff | ||
$0400-$04ff | Sprite/OAM Memory | |
$0600-$06ff | ||
$0600-$06ef | Decompressed Room Data | 16x15 Individual tiles of the room |
$06f0-$06ff | Decompressed Room Temp/Scratch | When decompressing the room, stores whatever tiles were in the previous row. |
$0700-$07ff | ||
$0700 | Enemy/Object Iteration Index | Used when updating all enemies/objects. Will be a value of $00-$1f |
$0701-$0720 | Enemy/Object IDs | The lowest 2 bytes signify direction moved/faced. 0: Up, 1: Right, 2: Down, 3: Left
Valid Values |
$0721-$0740 | Enemy/Object Statuses | Role by Value: 0-2: Varies by enemy, 3: Is egged, 4: Is egged (cracking), 5: Is egged in the water, 6-8: Is sinking in water, 9: Is egged flying off screen, 10: Is off-screen waiting to respawn, 11: Is respawning square |
$0741-$0760 | Enemy/Object X Positions | Pixel value of where enemy/object is |
$0761-$0780 | Enemy/Object Y Positions | 〃 |
$0781-$07a0 | Enemy/Object Occupying X Positions | Which square is enemy/object occupying? Relates to display position and is in increments of 8. |
$07a1-$07c0 | Enemy/Object Occupying Y Positions | 〃 |
RAM During Overworld
Address values here may be repeated from those during gameplay. If so, the the function of memory also changes.
RAM Address | Function | Details |
---|---|---|
$0079 | Lolo's X Position (Overworld) | |
$007A | Lala's X Position (Overworld) | |
$0081 | Lolo's Y Position (Overworld) | |
$0082 | Lala's Y Position (Overworld) | |
$008A | Lolo's Sprite Frame (Overworld) | |
$008B | Lala's Sprite Frame (Overworld) |
Internal Data for Adventures of Lolo 3
| |
---|---|