Map Script Format

From Terranigma Wiki
Revision as of 18:27, 23 February 2016 by Crediar (talk | contribs) (command 0x04 updated)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

When the game loads a map it looks at a pointer table at 0x06959C and runs a some kind of script to load the map parts.

There seem to be 1314(check) entries.

This code below is used to convert the ROM to a RAM address.

i.e. when loading map id 0 the first offset is 0x83FF05 which after the code is run turns into 0xA5FF83 (0x25FF83 ROM).


u32 Background::GetAddress()
{ 
	u32 AdrLow = GetBytei(); 
	u16 AdrHigh = GetWordi();

	u8 push = AdrHigh & 0x7F;
	
	AdrHigh = push ^ AdrHigh;
	AdrHigh<<= 1;
	AdrHigh |= 0x80;
	AdrHigh |= push;
	AdrHigh += (((ROMOffset|(1<<23)) & 0xFF0000) >> 8);

	if( (AdrHigh & 0xFF00) >= 0xC000 )
		AdrHigh &= 0xFF7F;
	
	return (AdrHigh<<8)|AdrLow;
}

Map script #0

This map script is used to select a song to be played by the 08 FC command

Commands

Opcode Argument length (byte) Function
0x00 2 Run map script
Offset Length (Byte) Name
0 2 Map ID


0x02 5 Play SPC data
Offset Length (Byte) Name
0 1 Unknown
1 1 Track ID
2 3 SPC data Offset


0x04 5 Load background using 2Bit format. Only used by map ID 0x106.
Offset Length (Byte) Name
0 3 Offset
3 1 Unknown
4 1 Layer
0x08 variable Run sub command
Opcode Argument length (byte) Function
0xF8 1 Return from sub function
0xF9 2 Call map script
0xFA 2 Push map script address
0xFC 2 Calls map script #0 which then plays the selected song id
0xFD 4 Call map script when flag is true
0xFE 2 Return from script
0xFF 0 End of script
0x10 4 Load map data
Offset Length (Byte) Name
0 1 0x01 - Map layer 0

0x02 - Map layer 1

1 3 Address
0x20 7 Load collision data or tile maps
Offset Length (Byte) Name
0 1 Seek
1 1 Size
2 1 Offset
3 1 Layer ID
0x80 set 0x80 clear
Collision data Map tiles
4 3 Address


0x40 6 Load palette
Offset Length (Byte) Name
0 1 Pal index
1 1 Pal size
2 1 Pal offset
3 3 Address


0x80 9 Load tile data
Offset Length (Byte) Name
0 1 Seek
1 1 Size
2 1 Tile mode
3 3 Address
6 2 Bank
7 1 Unknown