Acmlm's Board - I2 Archive - Rom Hacking - Got Crocomire?
User | Post |
Jigglysaint
Posts: 80/215 |
If I remember correctly, it works for basically every row. Since a row can be expressed via an array(to make more fine adjustments), or to a row of one tile or attribute(to compress empty space and solid bits better), basically this data I mentioned alters both. I am not sure if all rooms have this, as it could just be used in certain areas. There is still much uncharted data, but most of it's good to edit. |
Squash Monster
Posts: 390/677 |
Whee, data makes me happy!
Does the tileset group of bytes effect one of the 00-7F sets too, or only the 80-FF ones?
How that tileset thing works might complicate making a simple flawless compression algorithm a bit. |
Jigglysaint
Posts: 79/215 |
Okay, I got a small document outlining what I know so far.
Metroid Zero Mission ROM hacking data
By Jigglysaint
60C64A - beginning of the level data. First room in Brinstar(starting room) First few bytes
are the size of the room. The first 2 bytes control the size, but the third is unknown.
Each section of level data for the room has the same 3 bytes that begin the data. Following
this is the different level data pieces. First comes the clip data, or what part the player
interacts with. There are 2 formats: The first is 2 bytes, the first of which is always 80
+, is a simple RLE. The first byte tells how many times to repeat the contents of the second
byte. The second byte is what you interact with. 10, for example, is a solid block. The second format is different, a bit. The first byte is how many blocks, like the first,
except the value is from 00 to 7f. Now, what follows is a one block per space format, which
means that if the first byte is 05, then the following data would look like this: 10 10 00 00
10.
Certainly destroyable blocks do not come back, and also any block that acts like an upgrade
pickup(missles, for example). Some common values worth noting are 5B and 6B, the former being
a power bomb block that does not return, while the latter does return when you switch rooms.
5A and 6A, the former being a speed block that does not respawn, but does return when you
switch rooms, while the latter(I like saying latter for some reason ) respawns quickly.
Regular item pickups are from 5C to 5F. 5C is an energy tank, 5D is a missle tank, 5E is a
super missle pickup, and 5F are power bombs. 6C to 6F are hidden tanks.
The graphics work in the same manner, with the first 3 bytes being the size of the data in the
room, and the remainder being the same format as with the clip bytes. Some graphics to note
are 48 to 4B, which are item graphics. Of course if you combine an item graphic with the
right item clip byte, you get an item. 40 to 47 are the various special block tiles, without
being covered.
After this is what I noticed were a bunch of 00's, 01's and stuff. This data is what tileset
each graphic uses. This means you can grab tiles from more than just 256, by changing these
bytes. I haven't worked with it much, but it seems that one byte = one piece of data. So one
01 would cover an 8c 00(no graphic), or an array.
After, if present, would be the various layer data. I haven't worked much with other layers,
but the data should be there. Last, is sprite data, which is just a series of 3 bytes, each
being one sprite. The first 2 bytes are the postion, and the third is the object in the index
to use.
Room Header data:
340AD4 - room header of the starting room
Well first of all is a byte that determins what graphic is used for the room. Following that
seems to be controls for the various layers. I've managed to turn off some layers before, but
I am unsure how it works. After this are the various level data pointers. After this are
sprite pointers(apparently 2, one for normal and 1 for hard mode). After the sprite data is a
byte that is the enemy index for the room. This tells the game what objects are in the room.
A few indexes I have found are: 2F. 30. 4F These are for the 3 unknown items and their
blocks. The last one is the plasma beam while the first is the gravity suit. Also are
04(long beam), 10 to some byte or another(most item and location statues), and 4B(Crocomire).
It looks as if the byte after the enemy index might be some sort of switch or somthing that
makes those changes to the enemies thoughout the game. More testing is needed, however. After this is one more pointer untested. After is the location of the room on the map, and
then data that relates to extra layers that affect you(like water and acid), after is the
music data. That's the end of it there.
Door Data:
The first byte seems to determine whether or not the door acts like a door, or another kind of
room transition. It also seems to control if the door displays an intro(like for an area).
The second byte I don't know exactly what it does yet.
The third and 4th byte are the x positions of both where the door is located(in terms of
shootability), and where it lets you off after you go though it(from the other side) After
that is door index that's used. Changing it will make you go to different doors and warps
around the reigon. After that is where on the screen the door drops you off, and the last one
seems to be the y postion, but doesn't really seem used much.
On second though, it looks as if the second byte is the room number. Because of how the game
does its map and stuff, it's quite possible that there are only 256 rooms in the entire game.
Of course that seems a tad unlikely, but you never know.
3459c4 - item pickup data. 4 entries for each difficulty level. |
interdpth
Posts: 248/527 |
I tried Replacing Kraids Graphic pointer with Crocomires it was teh funny. |
Jigglysaint
Posts: 77/215 |
You guys are certainly welcome to my data.
I don't have the ASM offsets of croc, but he's easily put into the game just by changing the enemy index in the room header.
As for all the data that I found(minus the room header stuff), I'll have to compile it, along with sample offsets. |
Dylan
Posts: 845/1407 |
Jigglysaint, do you have the offsets for crocomire? |
interdpth
Posts: 232/527 |
Jiggly may I have your child or your data? |
Jigglysaint
Posts: 76/215 |
http://www.metroid2002.com/jigglysaint/
I got a new movie, just to see that I can place him anywhere.
There's also a movie of me getting the fabled 10th power bomb tank(although I didn't have 9 when I got it). |
Xin
Posts: 25/30 |
Yeah, he's a real pushover. Obviously the programming wasn't even close to finished and there were never any death sprites/animations made, so the last sprite just lingers on the screen.
The video of it I made is here to give a good idea of it all. You will need to download DivX if you don't have it and 7-zip to decompress the file. |
Skreename
Posts: 29/107 |
Pretty cool... But I'd expect it to be a bit stronger if it was in a better room. Crocomire has never been good for a piece of ground that barely fits it.
...This sounds bad, but... How exactly did you do it? I know you replaced the Chozo statue, and have a vague idea of how it works, but... Any specifics? |
Dart Zaidyer
Posts: 25/72 |
Wow! You know, I kind of figured they didn't leave his graphics in for nothing, but... wow! Too bad he's a wuss, though... But then again, so were those giant wasp larva things that probably took his place. You just gotta put this thing in your demo, man.
Oh, and didn't Squash Monster say before that he could build an editor as long as he had the necessary data to use? |
Jigglysaint
Posts: 75/215 |
Except I don't have the 1337 ASM skillz he does.
Who knows, my hacking skills might attract somebody who want's to build an editor. I think it would be the first of it's kind. |
MathOnNapkins
Posts: 405/2189 |
Heh you are sort of the deskjockey for ZM now. Well, that's a tough comparison but it works. |
KP9000
Posts: 140/261 |
What the hell? where did you find this at? id sure like to fight crocomire!!! |
Jigglysaint
Posts: 74/215 |
http://www.metroid2002.com/xin/1mzm_01.png
I just proved he exists beyond just a sprite sheet. He's kind of weak and not really much of a boss. |
|