Fantasia (Genesis)/ROM map

From Data Crystal
Jump to navigation Jump to search

This is a sub-page of Fantasia (Genesis).

Mickey sprites and animation

Animations Frames

Informations about Mickey animations frames are stored in a table of pointers at 0xd89a:

 00ff27ac ; 00: idle
 00ff26a4 ; 01: walk
 00ff26d8 ; 02: cast big spell
 00ff272c ; 03: jump
 00ff282c ; 04: ? (corrupted?)
 00ff272c ; 05: jump
 00ff272c ; 06: jump
 00ff272c ; 07: jump
 00ff272c ; 08: jump
 00ff272c ; 09: jump
 00ff272c ; 0a: jump
 00ff270c ; 0b: ? (corrupted?)
 00ff2780 ; 0c: cast small spell
 00ff2760 ; 0d: cast spell while jumping
 00ff27cc ; 0e: ? (corrupted?)
 00ff27ec ; 0f: turnover
 00ff280c ; 10: ? (corrupted?)
 00ff2858 ; 11: afraid of falling
 00ff2858 ; 12: afraid of falling
 00ff272c ; 13: jump

These pointers are in RAM, but the 0xff0000 - 0xff3fff area in RAM is a copy of the 0x7f000 - 0x7ffff area in ROM. So, for example, data about animation #00 can be found at ROM offset 0x7e7ac:

 0003 ; number of frames in the animation
 00000000 ; used for static sprites (GUI)
 0039 ; number of patterns for the whole animation
 0001CF2E ; pointer to patterns data
 0000 ; 
 0000 ; 
 0020 ; bounding box width ?
 0028 ; bounding box height ?
 0001CEF8 ; pointer to frame description of frame #0
 0001CF0A ; pointer to frame description of frame #1 
 0001CF1C ; pointer to frame description of frame #2

Patterns data located in ROM at offsets 0x18354, 0x1d95e, 0x1928e, 0x1c480 and 0x1cf2e are compressed with a RLE scheme described below. Otherwise, they are uncompressed.

Frame description have the following format:

 0002 ; nb of hardware sprites
 ;
 ; hardware sprite #1
 0018 ; dy (counted upwards)
 0f   ; size (0000HHVV)
 01   ; id of the hardware sprite 
 0000 ; offset to first pattern
 0000 ; dx
 ;
 ; hardware sprite #2
 0020 
 08
 02
 0010
 0000
 0002

Gfx Compression scheme

Compressed data is a stream of instruction code with variable arguments. Each instruction decompress into one pattern (32 bytes).

  • `00`: end of the stream
  • `02`: copy the 32 next bytes (i.e. pattern is not compressed)
  • `04`: vertical RLE. The tile is built by columns (from top to bottom, then left to right). Each subsequent bytes is `nnnnvvvv` where n is the number of pixels and v their color index.
  • `06`: same, but horizontal (pattern is built from left to right, then top to bottom)

Mickey Physics

Music and Sfx