Technical Info

Table of Contents

Room Data

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)
(top)

Tileset Data

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

Offset Size Description
0x0 1 Animated graphics number
0x1 2 Unused; always 0

Animated Graphics

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

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
(top)

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

0x1000 bytes of graphics data that is always loaded. It includes hatches, breakable blocks, and placeholder tank graphics.

Generic BG Palette

Three rows of 16 colors each that are always loaded. It provides the colors for hatches, breakable blocks, and tanks.

Generic Sprite Graphics

0x3800 bytes of graphics data that is always loaded. It includes the HUD, beam graphics, enemy drops, and various graphical effects.

Generic Sprite Palette

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

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

Sprite graphics are uncompressed in Fusion, but are LZ77 compressed in Zero Mission

Sprite AI

Spritesets

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
(top)

Connections

Area Door Lists

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 Connections

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

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
(top)

Scrolls

Area Scroll Lists

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)
(top)

Minimaps

Minimap data is essentially stored as an LZ77 compressed tile table. The palette of each tile is used to determine its type.

(top)

Text

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)