Wario Land: Super Mario Land 3/RAM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
No edit summary
 
(37 intermediate revisions by 2 users not shown)
Line 4: Line 4:
|'''RAM'''  || '''Purpose'''
|'''RAM'''  || '''Purpose'''
|-
|-
|A000-A017 || save game slot 1. The first 4 bytes (header) are always equals to 19 64 39 57. When player enters the pipe, the other bytes are copied over A804-A817.  
|A000-A017 || save game slot 1. The first 4 bytes (header) always equals to 0x19643957. When player enters the pipe, bytes in A004-A017 are copied to A804-A817.  
|-
|-
|A020-A037 || save game slot 1 (copy)  
|A020-A037 || save game slot 1 (copy)  
Line 26: Line 26:
|A0C4 || demo mode record index (00 - 06)
|A0C4 || demo mode record index (00 - 06)
|-
|-
|A100-A1FF || related to active actors on screen like A200-A2FF
|A100-DFFF || this range is cleared (set to 00) every time the game is started.
|-
|A100-A11F || current active actor, copied from A200-A2FF
|-
|-
|A200-A2FF || active actors on the screen (enemies, bonuses, throwed coins, ...).
|A200-A2FF || active actors on the screen (enemies, bonuses, throwed coins, ...).
Line 44: Line 46:
           +0A : y position (relative to screen)
           +0A : y position (relative to screen)
           +0B : x position (relative to screen)
           +0B : x position (relative to screen)
          +0C-0D : sprite data pointer
           +0E : orientation (01 : right - 02 : left)
           +0E : orientation (01 : right - 02 : left)
           +0F : animation counter
           +0F : animation counter
          +10 : tile index in VRAM
          +12-13 : enemy function pointer


|-
|-
|A375 || writing something here terminate level (player is teleported to bonus screen)
|A375 || trigger event
      01: level completion (player is teleported to bonus screen)
      02: world map event (huge [!] block at end of level)
      03: last boss fight
      XX: freeze player
|-
|-
|A376 || indicate if level exit (skull) is open (00 : closed, 01 : rising up, 02 : open)
|A376 || indicate if level exit (skull) is open (00 : closed, 01 : rising up, 02 : open)
|-
|-
|A600-A6?? || trigger sound effects and music
|A377 || indicate if treasure door (skull) is open
|-
|A382 || set during a warp (eg: room with a treasure key or chest). indicate treasure ID (between 00 - 0F). Used with A377.
|-
|A3B6 || indicate which item huge block will give (00 : coin, 01 : heart)
|-
|-
|A79C || current map
|A5E0-A5E1 || rice beach levels that contains a treasure (after game is completed). Ends with FF.
|-
|A5E2-A5E4 || mt. teapot levels with treasure
|-
|A5E5-A5E8 || sherbet land levels with treasure
|-
|A5E9-A5EB || stove canyon levels with treasure
|-
|A5EC-A5EF || ss tea cup levels with treasure
|-
|A5F0-A5F2 || parsely woods levels with treasure
|-
|A5F3-A5F5 || syrup castle levels with treasure
|-
|A600-A6?? || sound effects and music
|-
|A600 || trigger sound effect
|-
|A615 || trigger sound effect
|-
|A61C || trigger music (01-30 range)
|-
|A61D || current music played (used with A61C)
|-
|A795 || rice beach completed. once world is beaten (a flag is put on map and player is moved to next world), value in A80B is copied here.
|-
|A796 || mt. teapot completed
|-
|A797 || stove canyon completed
|-
|A798 || ss tea cup completed
|-
|A799 || parsely woods completed
|-
|A79A || sherbet land completed
|-
|A79C || current world
      01 : kitchen island (fade in)
       02 : kitchen island
       02 : kitchen island
      03 : rice beach (fade in)
       04 : rice beach
       04 : rice beach
      05 : mt. teapot (fade in)
       06 : mt. teapot
       06 : mt. teapot
      07 : during fade in
      08 : trigger map load (used with A79E + A7EE)
      09 : stove canyon (fade in)
       0A : stove canyon
       0A : stove canyon
       0E : parsely woods
       0B : syrup castle (fade in)
       0C : syrup castle
       0C : syrup castle
      0D : parsely woods (fade in)
      0E : parsely woods  
      0F : ss tea cup (fade in)
       10 : ss tea cup
       10 : ss tea cup
      11 : sherbet land (fade in)
       12 : sherbet land
       12 : sherbet land
|-
|-
|A79E || wario position on current world map. there is a unique value for each course.
|A79E || wario position on current world map. this is same as internal level ID.
|-
|-
|A79F || wario position on kitchen island
|A79F || wario position on kitchen island
Line 77: Line 136:
|-
|-
|A7A4 || world map timer (player, flags, water)
|A7A4 || world map timer (player, flags, water)
|-
|A7D1 || map scroll X
|-
|A7D2 || map scroll Y
|-
|-
|A7D9 || wario X position on map
|A7D9 || wario X position on map
|-
|-
|A7DE || wario Y position on map
|A7DE || wario Y position on map
|-
|A7E2 || joypad direction on map (similar to A7F1)
|-
|A7E5 || wario animation status on map
      00 : idle
      01 : right
      02 : left
      03 : up
      04 : down
      0C : water down
      0D : water up
      0E : hidden
|-
|A7E6 || wario animation direction on map
      E0 : up
      EE : down
      FE : left
      F0 : right
      FF : no move
|-
|A7E7 || wario animation timer countdown on map
|-
|-
|A7E8 || world map timer (navigation arrows)
|A7E8 || world map timer (navigation arrows)
|-
|A7EE || world to be loaded (see A79C)
|-
|A7F1 || joypad direction on map (similar to A7E2)
|-
|-
|A804 || current course id
|A804 || current course id
Line 92: Line 180:
|A809 || lives
|A809 || lives
|-
|-
|A80A || wario status (00 : small, 01 : normal, 02 : bull, 03 : eagle, 04 : dragon)
|A80A || wario status. To be used with A956.
    00 : small
    01 : normal
    02 : bull
    03 : eagle
    04 : dragon
|-
|-
|A80B || rice beach completion.  
|A80B || rice beach completion.  
Line 119: Line 212:
|A815 || indicate if level check point (skull) has been activated (00 : inactive, 01 : active). to use with A816.
|A815 || indicate if level check point (skull) has been activated (00 : inactive, 01 : active). to use with A816.
|-
|-
|A816 || this value is overwritten everytime a level check point is activated. value seems to be unique and different for each level.
|A816 || this value is overwritten with current course id (A804) when a check point is activated. to use with A815.  
|-
|-
|A817 || indicate if game have been completed at least once (pipe at file selection screen will blink)
|A817 || indicate if game have been completed at least once (pipe at file selection screen will blink)
Line 139: Line 232:
|A905 || game internal timer  
|A905 || game internal timer  
|-
|-
|A908 || if non zero, freeze wario and time.
|A908 || if non zero, freeze wario and time. set to 1 by the game while pause is enabled.
|-
|-
|A90F || wario animation frame (when walking, swimming, ...)
|A90F || wario animation frame (when walking, swimming, ...)
Line 155: Line 248:
|A93A || screen shaking countdown timer
|A93A || screen shaking countdown timer
|-
|-
|A94B || wario invicibility countdown timer
|A93E || set to 1 if wario is crouched
|-
|A93F || current block interacting with wario.
there is a table located at 1C69 that indicate which routine to call depending collided block. only blocks bigger or equal to 0x28 can interact with wario.
|-
|A94B || wario invincibility countdown timer
|-
|A956 || wario status (00 : big, 01 : small). To be used with A80A.
|-
|A957 ||
      01 : move player to the right
      02 : move player to the left
      04 : scroll up
      08 : scroll down
|-
|-
|A964-A965 || remaining level time
|A964-A965 || remaining level time
Line 161: Line 267:
|A97A-A97B || level coins collected
|A97A-A97B || level coins collected
|-
|-
|A98E-A98F || last door entered. Each door in the game has a unique ID.
|A984 || countdown timer (level intro, after dying)
|-
|A98E-A98F || last door/warp used.
|-
|-
|A998 || wario flying countdown timer
|A998 || wario flying countdown timer
|-
|-
|A9A8 || if non zero, freeze all actors.
|A9A7 || set to 1 before save. it prevent restarting the game by pressing A + B + Start + Select.
|-
|A9A8 || if non zero, freeze all actors. set to 1 by the game while pause is enabled.
|-
|A9AB || level animation mask. Internal timer (A905) is ANDed with that mask. If it's equal to zero, level animation counter (AC88) is incremented. This allow to control level animation speed (eg : lava).
|-
|A9E3 || indicate the type of (!) block to process after a door has been used. To be used with A9FE.
      01 : (!) block 0x39
      10 : (!) block 0x32
Once a door is used, the flag is reset to zero.
|-
|A9ED || similar to A9E3, but for (!) block 0x38. This type of block is not used in any level and does not seems to have any effect.
|-
|A9FE || indicate if any (!) block has been set
      00 : disabled (white)
      01 : enabled (black)
|-
|-
|AA0A || flame thrower countdown timer
|AA0A || flame thrower countdown timer
|-
|-
|AC88 || level animation counter (moving platform, water, ...)
|AB00-ABFF || animated tile data constantly copied to VRAM (to 9200-9230). For each of the 4 tiles, there is 4 frames. Used for animated stuff like water, fire, piranha flowers, ...
|-
|AC87 || previous wario status, before being hit (see AC87).
|-
|AC88 || level animation counter (sliding platform, lava, water, ...). Always between 0-3.
|-
|ACE0-ACFF || indicate scrolling bounds for each 32 16x16 sections of a level. 0 = no bounds, 1 = right, 2 = left, 3 = left and right.
|-
|-
|AD00-AEFF || this array maps level 16x16 blocks to hardware 8x8 tiles.  
|AD00-AEFF || this array maps level 16x16 blocks to hardware 8x8 tiles.  
Line 180: Line 309:
   +02 : sprite index
   +02 : sprite index
   +03 : h/v flip / palette
   +03 : h/v flip / palette
|-
|B17D || flags indicating which directions can be used on world map, depending completion
      01 : rice beach
      02 : teapot
      04 : stove canyon
      08 : ss tea cup
      10 : parsely woods
      20 : sherbet land
      40 : syrup castle
|-
|-
|B000-BFFF || array of actor indexes for each of the 256 x 32 level blocks. each actor index is 4 bits.
|B000-BFFF || array of actor indexes for each of the 256 x 32 level blocks. each actor index is 4 bits.
Line 185: Line 323:
|C000-DFFF || all indexes of 16x16 blocks (for current level) are decompressed here. level is 256 x 32 blocks.
|C000-DFFF || all indexes of 16x16 blocks (for current level) are decompressed here. level is 256 x 32 blocks.
bits 0-6 is the block index (between 0 and 127). bit 7 (msb) indicate if there is an actor at that block (see B000-BFFF).
bits 0-6 is the block index (between 0 and 127). bit 7 (msb) indicate if there is an actor at that block (see B000-BFFF).
|-
|C03A || (coin mini game only) indicate which round is active
  00 : 1st
  01 : 2nd
  02 : 3rd
|-
|C0F3-C0F4 || (coin mini game only) indicate what is in the left/right buckets.
  00 : money bag
  01 : 10 ton weight
|-
|FF80 || joypad input
      01 : A
      02 : B
      04 : select
      08 : start
      10 : right
      20 : left
      40 : up
      80 : down
|-
|FF81 || joypad input (delta)
|-
|FF82 || indicate if vblank interrupt handler has just ended
|}
|}
{{Internal Data}}

Latest revision as of 14:34, 24 January 2024

Chip tiny.png The following article is a RAM map for Wario Land: Super Mario Land 3.

RAM Purpose
A000-A017 save game slot 1. The first 4 bytes (header) always equals to 0x19643957. When player enters the pipe, bytes in A004-A017 are copied to A804-A817.
A020-A037 save game slot 1 (copy)
A040-A057 save game slot 2
A060-A077 save game slot 2 (copy)
A080-A097 save game slot 3
A0A0-A0B7 save game slot 3 (copy)
A0C0 save game 1 checksum
A0C1 save game 2 checksum
A0C2 save game 3 checksum
A0C3 last pipe entered by wario at save game selection screen
A0C4 demo mode record index (00 - 06)
A100-DFFF this range is cleared (set to 00) every time the game is started.
A100-A11F current active actor, copied from A200-A2FF
A200-A2FF active actors on the screen (enemies, bonuses, throwed coins, ...).

each actor take 32 bytes. there is a maximum of 8 actors.

enemies with throwable items (eg : boomerang) need a second actor to manage the item.

actors slots that are not used anymore (status = 00) are reused when need of a new actor.

only actors that have status = 02 are drawn.

          +00 : status 
                00 : inactive
                01 : out of screen (not visible) but still active
                02 : visible
          +01-02 : x position 
          +03-04 : y position 
          +0A : y position (relative to screen)
          +0B : x position (relative to screen)
          +0C-0D : sprite data pointer
          +0E : orientation (01 : right - 02 : left)
          +0F : animation counter
          +10 : tile index in VRAM
          +12-13 : enemy function pointer
A375 trigger event
      01: level completion (player is teleported to bonus screen)
      02: world map event (huge [!] block at end of level)
      03: last boss fight
      XX: freeze player
A376 indicate if level exit (skull) is open (00 : closed, 01 : rising up, 02 : open)
A377 indicate if treasure door (skull) is open
A382 set during a warp (eg: room with a treasure key or chest). indicate treasure ID (between 00 - 0F). Used with A377.
A3B6 indicate which item huge block will give (00 : coin, 01 : heart)
A5E0-A5E1 rice beach levels that contains a treasure (after game is completed). Ends with FF.
A5E2-A5E4 mt. teapot levels with treasure
A5E5-A5E8 sherbet land levels with treasure
A5E9-A5EB stove canyon levels with treasure
A5EC-A5EF ss tea cup levels with treasure
A5F0-A5F2 parsely woods levels with treasure
A5F3-A5F5 syrup castle levels with treasure
A600-A6?? sound effects and music
A600 trigger sound effect
A615 trigger sound effect
A61C trigger music (01-30 range)
A61D current music played (used with A61C)
A795 rice beach completed. once world is beaten (a flag is put on map and player is moved to next world), value in A80B is copied here.
A796 mt. teapot completed
A797 stove canyon completed
A798 ss tea cup completed
A799 parsely woods completed
A79A sherbet land completed
A79C current world
      01 : kitchen island (fade in)
      02 : kitchen island
      03 : rice beach (fade in)
      04 : rice beach
      05 : mt. teapot (fade in)
      06 : mt. teapot
      07 : during fade in
      08 : trigger map load (used with A79E + A7EE)
      09 : stove canyon (fade in)
      0A : stove canyon
      0B : syrup castle (fade in)
      0C : syrup castle
      0D : parsely woods (fade in)
      0E : parsely woods	  
      0F : ss tea cup (fade in)
      10 : ss tea cup
      11 : sherbet land (fade in)
      12 : sherbet land
A79E wario position on current world map. this is same as internal level ID.
A79F wario position on kitchen island
      00 : rice beach
      01 : mt. teapot
      02 : stove canyon
      03 : parsely woods
      04 : ss tea cup
      05 : sherbet land      
      06 : syrup castle
      07 : bridge to sherbet land
A7A4 world map timer (player, flags, water)
A7D1 map scroll X
A7D2 map scroll Y
A7D9 wario X position on map
A7DE wario Y position on map
A7E2 joypad direction on map (similar to A7F1)
A7E5 wario animation status on map
      00 : idle
      01 : right
      02 : left
      03 : up
      04 : down
      0C : water down
      0D : water up
      0E : hidden
A7E6 wario animation direction on map
      E0 : up
      EE : down
      FE : left
      F0 : right
      FF : no move
A7E7 wario animation timer countdown on map
A7E8 world map timer (navigation arrows)
A7EE world to be loaded (see A79C)
A7F1 joypad direction on map (similar to A7E2)
A804 current course id
A805-A807 total player money
A808 hearts
A809 lives
A80A wario status. To be used with A956.
    00 : small
    01 : normal
    02 : bull
    03 : eagle
    04 : dragon
A80B rice beach completion.

each bit indicate if a specific level of the map have been completed

total number of bits used can be different for each world.

last bit generally indicate if world have been completed (a flag is then show on map)

A80C mt. teapot completion
A80D numbers of levels completed (shown on pipe at file selection screen)
A80E-A80F treasures collected (1 bit per treasure, since there is 15 treasures one bit is unused)
A810 stove canyon completion
A811 ss tea cup completion
A812 parsely woods completion
A813 sherbet land completion
A814 syrup castle completion
A815 indicate if level check point (skull) has been activated (00 : inactive, 01 : active). to use with A816.
A816 this value is overwritten with current course id (A804) when a check point is activated. to use with A815.
A817 indicate if game have been completed at least once (pipe at file selection screen will blink)
A8C4 control level transition
      01 : show level title
      02 : warp player to start of level   
      03 : normal gameplay
      0A : warp to last door used (if no door entered, crashes). to use with A98E-A98F.     
A8C6 indicate if demo mode is enabled
A8C7 indicate if debug mode is enabled
A900-A901 level scroll y
A902-A903 level scroll x
A905 game internal timer
A908 if non zero, freeze wario and time. set to 1 by the game while pause is enabled.
A90F wario animation frame (when walking, swimming, ...)
A911-A912 player position y
A913-A914 player position x
A915 player animation frame (walking, swimming etc...)
A916 player horizontal or vertical flip, invert palette or half visible (bit 4-7)
A917 player blinking eyes timer (reset to zero if player make any move)
A93A screen shaking countdown timer
A93E set to 1 if wario is crouched
A93F current block interacting with wario.

there is a table located at 1C69 that indicate which routine to call depending collided block. only blocks bigger or equal to 0x28 can interact with wario.

A94B wario invincibility countdown timer
A956 wario status (00 : big, 01 : small). To be used with A80A.
A957
      01 : move player to the right
      02 : move player to the left
      04 : scroll up
      08 : scroll down
A964-A965 remaining level time
A97A-A97B level coins collected
A984 countdown timer (level intro, after dying)
A98E-A98F last door/warp used.
A998 wario flying countdown timer
A9A7 set to 1 before save. it prevent restarting the game by pressing A + B + Start + Select.
A9A8 if non zero, freeze all actors. set to 1 by the game while pause is enabled.
A9AB level animation mask. Internal timer (A905) is ANDed with that mask. If it's equal to zero, level animation counter (AC88) is incremented. This allow to control level animation speed (eg : lava).
A9E3 indicate the type of (!) block to process after a door has been used. To be used with A9FE.
     01 : (!) block 0x39 
     10 : (!) block 0x32 

Once a door is used, the flag is reset to zero.

A9ED similar to A9E3, but for (!) block 0x38. This type of block is not used in any level and does not seems to have any effect.
A9FE indicate if any (!) block has been set
     00 : disabled (white)
     01 : enabled (black)
AA0A flame thrower countdown timer
AB00-ABFF animated tile data constantly copied to VRAM (to 9200-9230). For each of the 4 tiles, there is 4 frames. Used for animated stuff like water, fire, piranha flowers, ...
AC87 previous wario status, before being hit (see AC87).
AC88 level animation counter (sliding platform, lava, water, ...). Always between 0-3.
ACE0-ACFF indicate scrolling bounds for each 32 16x16 sections of a level. 0 = no bounds, 1 = right, 2 = left, 3 = left and right.
AD00-AEFF this array maps level 16x16 blocks to hardware 8x8 tiles.

there is 128 blocks in total, each defined by the 4 indexes of 8x8 tiles.

AF00-AFFF 8x8 visible sprites for actors (4 bytes for each). wario seems to be always the first.
 +00 : x position
 +01 : y position
 +02 : sprite index
 +03 : h/v flip / palette
B17D flags indicating which directions can be used on world map, depending completion
     01 : rice beach 
     02 : teapot
     04 : stove canyon
     08 : ss tea cup 
     10 : parsely woods 
     20 : sherbet land
     40 : syrup castle
B000-BFFF array of actor indexes for each of the 256 x 32 level blocks. each actor index is 4 bits.
C000-DFFF all indexes of 16x16 blocks (for current level) are decompressed here. level is 256 x 32 blocks.

bits 0-6 is the block index (between 0 and 127). bit 7 (msb) indicate if there is an actor at that block (see B000-BFFF).

C03A (coin mini game only) indicate which round is active
 00 : 1st
 01 : 2nd
 02 : 3rd
C0F3-C0F4 (coin mini game only) indicate what is in the left/right buckets.
 00 : money bag
 01 : 10 ton weight
FF80 joypad input
      01 : A
      02 : B
      04 : select
      08 : start
      10 : right
      20 : left
      40 : up
      80 : down
FF81 joypad input (delta)
FF82 indicate if vblank interrupt handler has just ended