Technical Info
Table of Contents
- Room Data
- Header
- BG Properties
- RLE BG Data
- LZ77 BG Data
- BG3 Scrolling
- Transparency
- Sprite Data
- Effects
- Tileset Data
- Header
- Level Graphics
- Palette
- BG3 Graphics
- Tile Table
- Animated Tileset
- Animated Graphics
- Animated Palette
- Graphics
- Graphics Format
- Palette Format
- Generic BG Graphics
- Generic BG Palette
- Generic Sprite Graphics
- Generic Sprite Palette
- Sprites
- Sprite Stats
- Sprite Graphics
- Sprite AI
- Spritesets
- Connections
- Area Door Lists
- Doors Format
- Area Connections
- Event Based Connections
- Scrolls
- Area Scroll Lists
- Scrolls Format
- Minimaps
- Text
Room Data
- Offsets
- [MF] 0x79B8BC
- [ZM] 0x75FAC4
Header
Offset | Size | Description |
---|---|---|
0x0 | 1 | Tileset |
0x1 | 1 | BG0 Properties |
0x2 | 1 | BG1 Properties |
0x3 | 1 | BG2 Properties |
0x4 | 1 | BG3 Properties |
0x8 | 4 | Pointer to BG0 Data |
0xC | 4 | Pointer to BG1 Data |
0x10 | 4 | Pointer to BG2 Data |
0x14 | 4 | Pointer to Clipdata |
0x18 | 4 | Pointer to BG3 Data |
0x1C | 1 | BG3 scrolling |
0x1D | 1 | Transparency |
0x20 | 4 | Pointer to default sprite data |
0x24 | 1 | Default spriteset |
0x25 | 1 | First spriteset event |
0x28 | 4 | Pointer to first sprite data |
0x2C | 1 | First spriteset |
0x2D | 1 | Second spriteset event |
0x30 | 4 | Pointer to second sprite data |
0x34 | 1 | Second spriteset |
0x35 | 1 | Map X coordinate |
0x36 | 1 | Map Y coordinate |
0x37 | 1 | Effect |
0x38 | 1 | Effect Y position |
0x3A | 2 | Music track number |
BG Properties
If the property value has 0x10, it is RLE compressed. If the value has 0x40, it is LZ77 compressed. Other special values are shown below.
Fusion
Value | Description |
---|---|
0x12 | Dark when power is out |
0x14 | Unknown |
0x40 | Normal BG3, water, snow, etc. |
0x41 | Nightmare's room |
0x43 | Always dark |
0x44 | SA-X room |
0x45 | Dark at beginning of game |
0x46 | Water drain room |
0x47 | Fog |
0x48 | Meltdown |
0x49 | Nightmare shadow |
0x4A | SR388 (Omega fight) |
Zero Mission
Value | Description |
---|---|
0x31 | Moving BG2 (Kraid, Chozo pillar) |
0x40 | Normal BG3, water, rain, etc. |
0x45 | Dark around Samus |
0x46 | BG starts from bottom |
RLE BG Data
Offset | Size | Description |
---|---|---|
0x0 | 1 | Room width (in blocks) |
0x1 | 1 | Room height (in blocks) |
0x2 | RLE compressed block data |
LZ77 BG Data
Offset | Size | Description |
---|---|---|
0x0 | 1 | BG size; 0 = 256x256, 1 = 512x256, 2 = 256x512 |
0x4 | 3 | Decompressed length |
0x8 | LZ77 compressed tile table |
BG3 Scrolling
Value | X Scroll | Y Scroll |
---|---|---|
0x0 | None | None |
0x1 | Relative to screen/2 | None |
0x2 | None | Relative to screen/2 |
0x3 | Relative to screen/2 | Relative to screen/2 |
0x4 | Relative to screen | Relative to screen/2 |
0x5 | Relative to screen/2 | Relative to screen |
0x6 | Relative to screen | Relative to screen |
0x7 | Relative to screen - 8px/frame | None |
0x8 | Relative to screen - 8px/frame | None |
0x9 | Relative to screen/4 | None |
0xA | Relative to screen - 8px/frame | Relative to screen |
Transparency
Position
Value | Description |
---|---|
0x0-0x3 | Over BG1, over Samus |
0x4 + 4n | Over BG1, over Samus |
0x5 + 4n | Over BG2, over Samus |
0x6 + 4n | Over BG2, under Samus |
0x7 + 4n | Over BG3, under Samus |
0x34+ | Over BG1, over Samus |
BLDALPHA
Value | EVA Coefficient | EVB Coefficient |
---|---|---|
0x0-0x7 | 16 | 0 |
0x8-0xB | 16 | 7 |
0xC-0xF | 16 | 10 |
0x10-0x13 | 16 | 13 |
0x14-0x17 | 16 | 16 |
0x18-0x1B | 0 | 16 |
0x1C-0x1F | 3 | 13 |
0x20-0x23 | 6 | 10 |
0x24-0x27 | 9 | 7 |
0x28-0x2B | 11 | 5 |
0x2C-0x2F | 13 | 3 |
0x30-0x33 | 16 | 0 |
0x34+ | 16 | 0 |
Sprite Data
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Y position |
0x1 | 1 | X position |
0x2 | 1 | Bits 0-3 = Sprite set number + 1 Bits 4-7 = Property |
Property
In Fusion, sprite properties are mostly used to determine how a sprite interacts with X parasites. The effects of each value are not fully understood, and some values behave differently for different sprites. The chart below is for normal enemies. Most non-enemies have a property value of 1. In Zero Mission, it seems all sprites have a property value of 1, since there are no X parasites in the game.
Value | Description |
---|---|
0x0 | Sprite ID = Sprite slot number |
0x1 | Spawns from X (if able) |
0x2 | Spawns |
0x3 | Spawns, X moves immediately |
0x4 | Spawns, X absorb ineffective |
0x5-0x7 | Doesn't die |
0x8 | Sprite ID = Sprite slot number |
0x9-0xA | Spawns from X |
0xB | Spawns from X, X moves immediately |
0xC | Spawns from X, X absorb ineffective |
0xD-0xF | Spawns from X, doesn't die |
Effects
Value | Fusion | Zero Mission |
---|---|---|
0x0 | None | None |
0x1 | Water | Water |
0x2 | Lava | Strong lava |
0x3 | Lava, heat damage, BG3 haze | Weak lava |
0x4 | Acid | Strong lava, heat damage, BG3 haze |
0x5 | Snowflakes, cold damage + knockback | Acid |
0x6 | Snowflakes, cold damage | Snowflakes, cold damage + knockback |
0x7 | Heat haze (BG3) | Snowflakes, cold damage |
0x8 | Heat haze (BG2+3) | Heat haze (BG3) |
0x9 | Gradient (BG3) | Heat haze (BG2+3) |
0xA | Gradient (BG2) | Gradient (BG3) |
0xB | Nightmare's room | Gradient (BG2) |
Tileset Data
- Offsets
- [MF] 0x3BF888
- [ZM] 0x33DFDC
Header
Offset | Size | Description |
---|---|---|
0x0 | 4 | Pointer to level graphics |
0x4 | 4 | Pointer to palette |
0x8 | 4 | Pointer to BG3 graphics |
0xC | 4 | Pointer to tile table |
0x10 | 1 | Animated tileset number |
0x11 | 1 | Animated palette number |
Level Graphics
See Graphics Format
Palette
See Palette Format
BG3 Graphics
See Graphics Format
Tile Table
Bits | Description |
---|---|
0-9 | Tile number (0-1023) |
10 | Horizontal flip |
11 | Vertical flip |
12-15 | Palette number (0-15) |
Animated Tileset
- Offsets
- [MF] 0x3C8F90
- [ZM] 0x35FA78
Offset | Size | Description |
---|---|---|
0x0 | 1 | Animated graphics number |
0x1 | 2 | Unused; always 0 |
Animated Graphics
- Offsets
- [MF] 0x3C8D58
- [ZM] 0x35F948
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Animation type |
0x1 | 1 | Frames per state |
0x2 | 1 | Number of states |
0x4 | 4 | Pointer to graphics data |
Animation type
Value | Description |
---|---|
0x0 | Not animated |
0x1 | Normal |
0x4 | Alternate |
Animated Palette
- Offsets
- [MF] 0x3E3764
- [ZM] 0x35FBFC
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Animation type |
0x1 | 1 | Frames per state |
0x2 | 1 | Number of states |
0x4 | 4 | Pointer to palette data |
Animation type
Value | Description |
---|---|
0x0 | Not animated |
0x1 | Normal |
0x2 | Alternate |
Graphics
Graphics Format
Each byte of graphics data represents two pixels. Bits 0-3 are used for the first pixel, and bits 4-7 are used for the second pixel. These each give a value from 0-15, which is used as a palette index (since palettes contain 16 colors). Graphics are arranged into 8x8 tiles, so there are 32 bytes per tile. Tiles are filled in from left-to-right and top-to-bottom, unless they are flipped horizontally or vertically.
Palette Format
There are 16 colors in a palette. During gameplay, there are 16 palettes for sprites and 16 palettes for backgrounds. Each color is represented by two bytes. There are 5 bits for each color component, so there are 32 possible values for each and 32,768 possible combinations. Bits 0-4 are the red component, bits 5-9 are the green component, bits 10-14 are the blue component, and bit 15 is unused. This gives the following binary format: 0BBBBBGGGGGRRRRR
Generic BG Graphics
- Offsets
- [MF] 0x3F28C8
- [ZM] 0x5D940C
0x1000 bytes of graphics data that is always loaded. It includes hatches, breakable blocks, and placeholder tank graphics.
Generic BG Palette
- Offsets
- [MF] 0x40805C
- [ZM] 0x5DFE20
Three rows of 16 colors each that are always loaded. It provides the colors for hatches, breakable blocks, and tanks.
Generic Sprite Graphics
- Offsets
- [MF] 0x3E419C
- [ZM] 0x32BAC8
0x3800 bytes of graphics data that is always loaded. It includes the HUD, beam graphics, enemy drops, and various graphical effects.
Generic Sprite Palette
- Offsets
- [MF] 0x3E40DC
- [ZM] 0x32BA08
Six rows of 16 colors each that are always loaded. It provides the colors for the HUD, beam graphics, enemy drops, and various graphical effects.
(top)Sprites
Sprite Stats
- Offsets
- [MF] 0x2E4D4C
- [ZM] 0x2B0D68
Fusion
Offset | Size | Description |
---|---|---|
0x0 | 2 | Health |
0x2 | 2 | Damage |
0x4 | 1 | Suit damage reduction |
0x6 | 1 | Weaknesses |
0x8 | 2 | Health X probability |
0xA | 2 | Missile X probability |
0xC | 2 | Red X probability |
Zero Mission
Offset | Size | Description |
---|---|---|
0x0 | 2 | Health |
0x2 | 2 | Damage |
0x4 | 1 | Weaknesses |
0x6 | 2 | No drop probability |
0x8 | 2 | Small health probability |
0xA | 2 | Large health probability |
0xC | 2 | Missile probability |
0xE | 2 | Super missile probability |
0x10 | 2 | Power bomb probability |
Weaknesses
Bits | Description |
---|---|
0 | Charge beam/pistol |
1 | Beam and bombs |
2 | Super missiles |
3 | Missiles |
4 | Power bombs |
5 | Speed booster and screw attack |
6 | Can be frozen |
7 | Unused |
Sprite Graphics
- Graphics Offsets
- [MF] 0x79A5D8
- [ZM] 0x75EBF8
- Palette Offsets
- [MF] 0x79A8D4
- [ZM] 0x75EEF0
Sprite graphics are uncompressed in Fusion, but are LZ77 compressed in Zero Mission
Sprite AI
- Offsets
- [MF] 0x79A29C
- [ZM] 0x75E8C0
Spritesets
- Offsets
- [MF] 0x79ADD8
- [ZM] 0x75F31C
Spritesets consist of a list of sprites. Each sprite has two bytes of data. The end of the list is marked with two 0 bytes.
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Sprite ID |
0x1 | 1 | Graphics row |
Connections
Area Door Lists
- Offsets
- [MF] 0x79B894
- [ZM] 0x75FAA8
Each area has its own list of doors. When a room is loaded, it searches through the list to find all doors that belong to the room.
Doors Format
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Door properties |
0x1 | 1 | Owner room |
0x2 | 1 | X position start |
0x3 | 1 | X position end |
0x4 | 1 | Y position start |
0x5 | 1 | Y position end |
0x6 | 1 | Connected door number |
0x7 | 1 | X exit distance |
0x8 | 1 | Y exit distance |
Door Properties
Bits | Description |
---|---|
0-2 | 1 = Area connection 2 = No hatch 3 = Open hatch 4 = Hatch (can lock) 5 = Remove mother ship [ZM only] 6 = Set mother ship [ZM only] |
4-5 | 1 = Always loads same room 2 = Loads event based room |
6 | Displays pop-up |
- Area connection - connects a door from one area to another
- No hatch - has an instant transition
- Open hatch - a hatch with no cover
- Hatch (can lock) - a hatch that always closes; can lock during certain events
- Remove mother ship - switches hatch graphics to normal graphics
- Set mother ship - switches hatch graphics to mother ship graphics
Area Connections
- Offsets
- [MF] 0x3C8B90
- [ZM] 0x360274
When a door's type is set to area connection, it looks through a list of area connections to see if it finds a match, based on the area and the door's number. The end of the list is marked with three 0xFF bytes.
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Source area number |
0x1 | 1 | Source door number |
0x2 | 1 | Destination area number |
Event Based Connections
- Offsets
- [MF] 0x3C8C68
- [ZM] 0x3601D0
When a door can load an event based room, it looks through a list of event based connections to see if it finds a match, based on the area and the door's number.
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Source area number |
0x1 | 1 | Source door number |
0x2 | 1 | Event value |
0x3 | 1 | Destination door number |
Scrolls
Area Scroll Lists
- Offsets
- [MF] 0x79BB08
- [ZM] 0x75FD28
Each area has its own list of scrolls. When a room is loaded, it searches through the list to find if the room is part of the list.
Scrolls Format
Format
Offset | Size | Description |
---|---|---|
0x0 | 1 | Room ID |
0x1 | 1 | Number of scrolls (NS) |
0x2 | 4 × NS | Scroll data |
Scroll Data
Offset | Size | Description |
---|---|---|
0x0 | 1 | X position start |
0x1 | 1 | X position end |
0x2 | 1 | Y position start |
0x3 | 1 | Y position end |
0x4 | 1 | Breakable block X position (0xFF if none) |
0x5 | 1 | Breakable block Y position (0xFF if none) |
0x6 | 1 | Extended bounds direction 0 = Left 1 = Right 2 = Up 3 = Down 0xFF = None |
0x7 | 1 | Extended bounds new value (0xFF if none) |
Minimaps
- Data Offsets
- [MF] 0x79BE5C
- [ZM] 0x7601EC
- Graphics Offsets
- [MF] 0x561FA8
- [ZM] 0x40E0C4
- Palette Offsets
- [MF] 0x5657A8
- [ZM] 0x411360
Minimap data is essentially stored as an LZ77 compressed tile table. The palette of each tile is used to determine its type.
(top)Text
- Graphics Offsets
- [MF] 0x682FAC
- [ZM] 0x415460
- Palette Offsets
- [MF] 0x565B28
- [ZM] 0x3FD030
- Character Widths Offsets
- [MF] 0x576234
- [ZM] 0x40D7B0
Text data is stored in several different lists, depending on its category. The character widths table is used to determine how wide each character is when drawn to the screen.
(top)