Wario Land: Super Mario Land 3/RAM map

From Data Crystal
< Wario Land: Super Mario Land 3
Revision as of 14:19, 9 March 2018 by Tigrou (talk | contribs) (fix incorrect name : it's be called vblank not vsync)
Jump to navigation Jump to search

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-A1FF related to active actors on screen like 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 writing something here terminate level (player is teleported to bonus screen)
A376 indicate if level exit (skull) is open (00 : closed, 01 : rising up, 02 : open)
A600-A6?? trigger sound effects and music
A79C current map
      02 : kitchen island
      04 : rice beach
      06 : mt. teapot
      0A : stove canyon
      0E : parsely woods
      0C : syrup castle
      10 : ss tea cup
      12 : sherbet land
A79E wario position on current world map. there is a unique value for each course.
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)
A7D9 wario X position on map
A7DE wario Y position on map
A7E5 wario animation status on map (eg : hidden, going left, going right, ...)
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)
A804 current course id
A805-A807 total player money
A808 hearts
A809 lives
A80A wario status
    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 everytime a level check point is activated. value seems to be unique and different for each level.
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
A94B wario invicibility countdown timer
A964-A965 remaining level time
A97A-A97B level coins collected
A98E-A98F last door entered. Each door in the game has a unique ID.
A998 wario flying countdown timer
A9A8 if non zero, freeze all actors. set to 1 by the game while pause is enabled.
A9AB level animation mask. AC88 value is ANDed with that mask. This allow to control level animation speed (eg : lava).
A9E3 indicate if (!) block is active. There is two types of (!) blocks.
     00 : disabled 
     01 : (!) block A enabled
     10 : (!) block B enabled
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, ...
AC88 level animation counter (moving platform, water, ...)
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
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
FF82 indicate if vblank interrupt handler has just ended