Mario vs. Donkey Kong 2: March of the Minis:Notes
note for self: bit 0 is the rightmost bit. research was done with USA rev 0 ROM. the order object instances are in their respective array defines their location in the levels' "grid". object instances can be half-way between two "grid points" - they don't have to fit 1:1 with a "square". background, titleset and music is per world, not per level. the tile "patterns" used for each world are in the floorXX_patterns.bin files (where XX is the world id) 0x0-0x35 seems to be a header or array of dummy/control objects. starting at 0x30, at the latest, is the array of interactive objects. the last instance in this array in 1-1 seems to be at 0x7B6. instances are pairs of bytes. first byte is object type. second byte is parameter. object types: 01 = nothing? 02 = nothing? 03 = mini mario parameters: 00T0000D D = is mini mario direction 0 = right 1 = left T = mini mario type 0 = normal 1 = gold 04 = crash 05 = nothing? 2B = nothing? (used) B1 = nothing? B2 = glitchy enemy that catches mini mario when touched? (glitchy graphics in setup i tried it) B3 = nothing? B4 = starman powerup unused, but haven't checked if its offscreen in some level or anything no obvious parameters B4 = bouncing fireball maybe the one spawned by fire mario. don't know if its placed in a level or not. B5 = yellow spring files: data\anims\spring_anim.bin 6A = piranha plant files: data\anims\pirahna_plant1_anim.bin data\anims\pirahna_Plant1_Ball_anim.bin parameters: 30 0110000 up ? 68 1101000 down ? 60 1100000 right ? 70 1110000 up ? 38 0111000 up fireball 18 0011000 up no fireball 08 0001000 down no fireball 73 = bouncing candle [world 4] 9F = blue spring FF = nothing? 0x7b0-0x7ff in 1-1 is part of the array of tile objects. the first instance in this arrway in 1-1 seems to be at 0x7B8. its not clear how many bytes makes up an instance, but the first byte of each instance seems to describe the object type. object types: see /tile_objs/ roughly 0x16b8-0x1a77 in 1-1 seems to be the array of collision tiles. some kind of object array 2B = goal
Alright so we will be look at 1-9 as a guide. As of right now, I barely know anything but I will tell you what I have learned so far. The first few lines of code I believe is the header data for the level. The only thing I understand from it so far is the sprite data. In level 1-9 you should see some lines of code in a hex editor that look like this : 03 00 00 00 96 00 00 00 9C 00 00 00 A6 00 00 00 AE 00 00 00 B5 00 00 00 All of this is the sprite data in the level. If the sprite you are trying to put in a level isn't one of these values, the sprite will be invisible in the level. It seems like the sprite values count in 8 bytes. Meaning the six 0's after each value has to be that way. In case if you are wondering what each value is. 03 is for Mini Mario 96 is for the elevator platform itself (yes it's a sprite) 9C is for Shy Guy's A6 is for Hammers AE is for Toss/Circus Kong B5 is for the Yellow Springboard As of right now, I don't know how you can add more sprite data to a level since what I have tried has crashed the game so far. But we will be looking at two things you can do if you want to edit the sprites. After the header data, you will see a bunch of 00's. All of this is where the sprites are stored in levels. This is usually very long and will go on until you see things such as 1B a few 00's and then 1B again and so on. For how sprites work in the levels themselves all I know is that it goes by XX (sprite number itself) and the value after that is it's facing position. 00 is facing right and 80 is facing left. When scrolling in the level data for 1-9, the first sprite you should find is is A6 00, which is the hammer powerup. If we were to change this to 9C 00, it will become a Shy Guy. We could also use this sprite as a guide if we wanted to add another sprite next to it in a level. The 00 00's next to this can have sprites on them, they just are empty. You will notice that all of the levels in the sprite section of the data has a lot of 00 00's since all levels have more sprite positions without sprites instead of vice versa. If we want to add a sprite from another level here, we are able to but there are things we need to consider. The method we will have to do is replace a sprite slot with the one we want. If we want to replace the Circus/Toss Kong with the Capture Kong in the level. What we would need to do is change the AE 00 00 00 to B2 00 00 00 in the sprite header data section. When we do this the Circus/Toss Kong's in the level will now be invisible if we were to test the level. What we could do is either get rid of the Circus/Toss Kong's in the level or replace them with Capture Kong's.
03 - Mini Mario 63 - Bob-omb (From the Shy Guy Minigame) 65 - Spark (no generator) 66 - Oil Drum (Jumps up and down) unused? 67 - Fireball 68 - Thwomp 69 - Crab 6A - Piranha Plant (Mouth Open) 6B - Piranha Plant's Fireball 6C - crashes game 6D - Blooper 6E - Bomb-fish (From Special Kit 3) 6F - Podoboo 73 - Candle 74 - Snapjaw 75 - Vertical Snapjaw 76 - Jumpstand? 96 - Elevator Platform 97 - Donut Block (Doesn't Fall?) 98 - Water/Lava Platform 9A - Bomb Block 9B - Bomb (From Gray Blocks) 9C - Shy Guy 9D - Small Brown Barrel?? 9E - Brown Box 9F - Blue Springboard A2 - Balance Board Platform A4 - Vertical Facing Yellow Switch Door A5 - Yellow Switch Button A6 - Hammers A7 - Vertical Facing Switch Door A8 - Yellow Switch Button A9 - Vertical Facing Yellow Switch Door (Again?) AA - Yellow Switch Button (Again?) AB - Yellow Switch Door AC - Yellow Switch Door (Again..) AD - Yellow Switch Door (Again?) AE - Toss Kong B2 - Capture Kong B3 - Weird Brown Egg B4 - Starman powerup (Gives you the blue shield ability) * unused B5 - Yellow Springboard B7 - Gray Shy Guy B8 - Firebar B9 - Crush Kong BA - Cool Kong BB - Lift Platform (From Floor 6 and 8) BF - Kong Thwomp C0 - Donut Block C1 - Phantom Guy (Yellow) C2 - Boo (unused) C3 - Skeleton Guy C4 - Blue Shy Guy (Shoots a Snifit Bullet sometimes) C5 - Snifit C9 - Starman (unused) D0 - Blue Shield (From DK Basement Stage 2)
Note: European ROM was used
These are always found at the very beginning of every level file. These codes are needed to load primary files.
0x00 = Unknown (always set on 0A 00 00 00)
0x04 = Loads actor values (always set on 14 00 00 00)
0x08 = Loads tileset values
0x0C = Links to hex that loads level size values
0x10 = Links to hex that loads level special features (pipes, water, etc)
Example from Room G-1
|Internal Data for Mario vs. Donkey Kong 2: March of the Minis|