Adventures of Lolo 3/RAM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png 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
  • %---1---- Set if ally is captured / Clear if both characters active
  • %----1--- Set if rainbow bridge cutscene viewed / Clear otherwise
  • %-----1-- Set if rainbow bridge cutscene playing / Clear otherwise
  • %-------1 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
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
$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:
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)