If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Motocross Maniacs/Notes: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 29: | Line 29: | ||
==== Track data structure ==== | ==== Track data structure ==== | ||
In the ROM data, a <b>track</b> is defined by a sequence of 3-byte words <b>YY XX ZZ</b>: | In the ROM data, a <b>track</b> is defined by a sequence of 3-byte words <b>YY XX ZZ</b>: | ||
* <b>YY XX</b> = coordinates from top left of the level | |||
* <b>ZZ</b> = objectID | * <b>ZZ</b> = objectID | ||
Below is a sample of level 1 data, with 3-byte word highlighted. | Below is a sample of level 1 data, with 3-byte word highlighted. | ||
[[Image:Motocross_Maniacs_Level1Data.png|600px]] | [[Image:Motocross_Maniacs_Level1Data.png|600px]] | ||
The first floor object (ID=x0F) is at (x00,x00), the second small triangular ramp object (ID=x0E) is at (x0A,x01), etc. | The first floor object (ID=x0F) is at (x00,x00), the second small triangular ramp object (ID=x0E) is at (x0A,x01), etc. | ||
==== Track data location in ROM ==== | ==== Track data location in ROM ==== | ||
* 0x4760-0x476F - table of 8 pointers to the 8 tracks | * <b>0x4760-0x476F</b> - table of 8 pointers to the 8 tracks | ||
* 0x4770-0x4908 - track 1 data | * <b>0x4770-0x4908</b> - track 1 data | ||
* 0x4909-0x4AE3 - track 2 data | * <b>0x4909-0x4AE3</b> - track 2 data | ||
* 0x4AE4-0x4C8E - track 3 data | * <b>0x4AE4-0x4C8E</b> - track 3 data | ||
* 0x4C8F-0x4E9C - track 4 data | * <b>0x4C8F-0x4E9C</b> - track 4 data | ||
* 0x4E9D-0x5062 - track 5 data | * <b>0x4E9D-0x5062</b> - track 5 data | ||
* 0x5063-0x52A0 - track 6 data | * <b>0x5063-0x52A0</b> - track 6 data | ||
* 0x52A1-0x54C0 - track 7 data | * <b>0x52A1-0x54C0</b> - track 7 data | ||
* 0x54C1-0x56CB - track 8 data | * <b>0x54C1-0x56CB</b> - track 8 data | ||
Note that each chunk of track data ends with <b>xFF</b>. | Note that each chunk of track data ends with <b>xFF</b>. | ||
=== Track object data === | === Track object data === | ||
Line 55: | Line 55: | ||
* The small triangular ramp object is a 2x2 array of metatiles <b>x0A</b>, <b>x0B</b>, <b>xC</b> and <b>x0D</b>. | * The small triangular ramp object is a 2x2 array of metatiles <b>x0A</b>, <b>x0B</b>, <b>xC</b> and <b>x0D</b>. | ||
==== Track object data location in ROM ==== | ==== Track object data location in ROM ==== | ||
* x56CC-x5793 - table of 100 pointers to track object definitions | * <b>x56CC-x5793</b> - table of 100 pointers to track object definitions | ||
* x5794-x579F - 1x9 floor | * <b>x5794-x579F</b> - 1x9 floor | ||
* x57A0-x57A5 - 2x2 small triangular ramp | * <b>x57A0-x57A5</b> - 2x2 small triangular ramp | ||
* ... | * <b>...</b> | ||
* x5A19-x5A1E - 2x2 something (todo) | * <b>x5A19-x5A1E</b> - 2x2 something (todo) | ||
=== Metatile data === | === Metatile data === | ||
==== Metatile data structure ==== | ==== Metatile data structure ==== | ||
Line 69: | Line 69: | ||
==== Metatile data location in ROM ==== | ==== Metatile data location in ROM ==== | ||
* x5A1F-5C8E | * <b>x5A1F-5C8E</b> | ||
=== Item data === | === Item data === | ||
<b>Items</b> are the various power-ups you can collect throughout a level: <b>N</b> for Nitrous boost, <b>T</b> for tires, <b>S</b> for speed, etc. | <b>Items</b> are the various power-ups you can collect throughout a level: <b>N</b> for Nitrous boost, <b>T</b> for tires, <b>S</b> for speed, etc. | ||
Line 75: | Line 75: | ||
==== Item data structure ==== | ==== Item data structure ==== | ||
In the ROM data, items are defined by 3-byte words <b>YY XX ZZ</b>: | In the ROM data, items are defined by 3-byte words <b>YY XX ZZ</b>: | ||
* <b>YY XX</b> = coordinates from top left of the level | |||
* <b>ZZ</b> = itemID | * <b>ZZ</b> = itemID | ||
Possible IDs are: | Possible IDs are: | ||
* x02 = S for speed | * <b>x02</b> = S for speed | ||
* x03 = T for tire | * <b>x03</b> = T for tire | ||
* x04 = N for nitro | * <b>x04</b> = N for nitro | ||
* x05 = R for traction | * <b>x05</b> = R for traction | ||
* x06 = mini-bikers (invisible) | * <b>x06</b> = mini-bikers (invisible) | ||
* x07 = jet (invisible) | * <b>x07</b> = jet (invisible) | ||
==== Item data location in ROM ==== | ==== Item data location in ROM ==== |
Revision as of 22:21, 20 April 2023
Motocross Maniacs | |
Internal Name | xxx |
Region Code | xxx |
Type | Grayscale Game |
SGB Support | xxx |
Cartridge Type | xxx |
License Code | xxx |
ROM Size | xxx |
ROM Checksum | xxx |
SRAM Size | xxx |
Header Checksum | xxx |
The goal of these notes is to provide enough elements for someone to hopefully write a basic level editor.
This tiny ROM only contains 2 banks. And no bank swaps = less headaches!
Level data
General idea
The track of levels 1 to 8 are simply a sequences of track objects, such as ramps, bumps, etc. Below is the level 1 track: floor, small triangular ramp, floor, etc.
A track object is an array of metatiles, where each metatile is 16x16px (each metatile is a 2x2 array of regular 8x8px tiles). Below is a small triangular ramp object: it's made of 4 metatiles (each in a different color), and each metatile is made of 4 tiles.
Track data
Track data structure
In the ROM data, a track is defined by a sequence of 3-byte words YY XX ZZ: * YY XX = coordinates from top left of the level * ZZ = objectID Below is a sample of level 1 data, with 3-byte word highlighted. The first floor object (ID=x0F) is at (x00,x00), the second small triangular ramp object (ID=x0E) is at (x0A,x01), etc.
Track data location in ROM
* 0x4760-0x476F - table of 8 pointers to the 8 tracks * 0x4770-0x4908 - track 1 data * 0x4909-0x4AE3 - track 2 data * 0x4AE4-0x4C8E - track 3 data * 0x4C8F-0x4E9C - track 4 data * 0x4E9D-0x5062 - track 5 data * 0x5063-0x52A0 - track 6 data * 0x52A1-0x54C0 - track 7 data * 0x54C1-0x56CB - track 8 data Note that each chunk of track data ends with xFF.
Track object data
Track object data structure
In the ROM data, a track object is defined by a sequence of bytes XX YY AA BB.... * XX YY define the metatile array's dimensions: XX rows and YY columns. * AA BB... are the metatileIDs that will fill the array, one line at a time. Below are the first two objects of level 1: a floor object, followed by a small triangular ramp object. * The floor object is a row of x0A metatiles with ID x09. * The small triangular ramp object is a 2x2 array of metatiles x0A, x0B, xC and x0D.
Track object data location in ROM
* x56CC-x5793 - table of 100 pointers to track object definitions * x5794-x579F - 1x9 floor * x57A0-x57A5 - 2x2 small triangular ramp * ... * x5A19-x5A1E - 2x2 something (todo)
Metatile data
Metatile data structure
Metatiles are 16x16px, and are made from 2x2 arrays of 8x8px tiles. They are defined with 4 consecutive bytes, the first two are the top half of the array, the last two are the lower half. The top-left metatile (in red) is defined by x7F x7F x7F x1E, where x7F is blank and x1E is a chunk of ramp. The bottom-left metatile (in yellow) is defined by x1E x1A x8E x8E, where x1A is an inner chunk of ramp, and x8E is floor.
Metatile data location in ROM
* x5A1F-5C8E
Item data
Items are the various power-ups you can collect throughout a level: N for Nitrous boost, T for tires, S for speed, etc.
Item data structure
In the ROM data, items are defined by 3-byte words YY XX ZZ: * YY XX = coordinates from top left of the level * ZZ = itemID Possible IDs are: * x02 = S for speed * x03 = T for tire * x04 = N for nitro * x05 = R for traction * x06 = mini-bikers (invisible) * x07 = jet (invisible)
Item data location in ROM
* 0x5EAB-0x5F0A - table of 8 pointers to item data for each of the 8 tracks * 0x5F0B-0x5F53 - track 1 item data * 0x5F54-0x5F90 - track 2 item data * 0x5F91-0x5FBE - track 3 item data * 0x5FBF-0x5FF8 - track 4 item data * 0x5FF9-0x603B - track 5 item data * 0x603C-0x60AC - track 6 item data * 0x60AD-0x6078 - track 7 item data * 0x6079-0x60E9 - track 8 item data Note that each chunk of item data ends with xFF.
Text data
Text data structure
Below are various text elements from the game, as well as their respective ROM locations. Text data is a sequence of words, each word structured as follows: * 2 bytes for the display address * a sequence of text tiles for the word * a terminal xFE when the word is finished * a terminal xFF when the text is finished
Text data location in ROM
Pre-race screen
* x0F37-x0F91 -