Difference between revisions of "Map Script Format"
Jump to navigation
Jump to search
(Created page with "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 reas...") |
|||
Line 70: | Line 70: | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
| | | 6 | ||
| | | | ||
|- | |- | ||
| 0xFF | | 0xFF | ||
Line 143: | Line 143: | ||
| 0x40 | | 0x40 | ||
| 1 | | 1 | ||
| Set | | Set palette index for map | ||
Byte<<1 | |||
|} | |} |
Revision as of 10:24, 13 April 2012
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
| ||||||||||||||||||||||||||||||||||||
0x08 | variable | run sub command
| ||||||||||||||||||||||||||||||||||||
0x10 | 4 | Load data
| ||||||||||||||||||||||||||||||||||||
0x40 | 1 | Set palette index for map
Byte<<1
|