Map Script Format

From Terranigma Wiki
Revision as of 10:24, 13 April 2012 by Crediar (talk | contribs)
Jump to navigation Jump to search

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.

For some reason offsets are not directly read but calculated via this code: (don't ask!)

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;
}

Commands

Opcode Argument length (byte) Function
0x02 5 Load data
Offset Length (Byte) Name
0 1 Unknown
1 1 Entry ID?
2 3 Offset (Unknown)
0x08 variable run sub command
Opcode Argument length (byte) Function
0x00 6
0xFF 0
0xFC 2
0xFD 4
Offset Length (Byte) Name
0 3 Offset (Unknown)
3 1 Unknown
0xFA ?
0xF9 ?
0xF8 ?
default 2 ?
0x10 4 Load data
Offset Length (Byte) Name
0 1 0x00 - Tiles

0x01 - Map Layer 0

0x02 - Map Layer 1

1 3 Offset of data
0x40 1 Set palette index for map
Byte<<1