(Link to AcmlmWiki) Offline: thank ||bass
Register | Login
Views: 13,040,846
Main | Memberlist | Active users | Calendar | Chat | Online users
Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album
05-19-24 08:52 PM
0 users currently in ROM Hacking.
Acmlm's Board - I3 Archive - ROM Hacking - Megaman X level data
  
User name:
Password:
Reply:
 
Options: - -
Quik-Attach:
Preview for more options

Max size 1.00 MB, types: png, gif, jpg, txt, zip, rar, tar, gz, 7z, ace, mp3, ogg, mid, ips, bz2, lzh, psd

UserPost
Jigglysaint
Posts: 71/179
Originally posted by zhaDe
My editor is not really more helpful than a hex editor it only displays the bytes of one object per line.

if you are looking into changing enemies, the object type for enemies is 03 (not all 03 type objects are enemies tho..) for example the first enemy in the game is :

1E50B0 : 03 B0 04 08 01 98 8B 60

the 4th byte is the kind of enemy, 08 is for that round purple enemy with a canon on the head

Jigglysaint: 00 is used mostly for items like heart tanks, doors, teleporters, and the sprite that makes zero go bye-bye in the level. 01 I haven't figured out yet. 02 is used for scrolling, enemy gfx swapping, and tells the game to load areas with breakable walls and stuff. 03 is for enemies, including bosses and the sprite that sets up the Light Capsules.

the 5th byte is a tag depending on the kind of enemy, for example if 4th byte is 08 and 5th byte is 01 the purple enemy can jump around instead of only standing still

For things like heart tanks and sub tanks, the 5th byte are bitflags, each representing a level. For example, the heart tank in Blast Hornet's stage has the tag of 01, and Neon Tiger's is 80.

you can try to change the 4th byte to get different enemies but be sure the enemy is normally in the same level or else the graphic will be corrupted because the game only loads the graphics and pallettes of the needed ennemies for a level.

Jigglysaint: I covered that, sprites change what graphics are loaded. For example, you can't have a heart tank and a light capsule on the same screen, as they occupy the same graphics on the sheet.

I only know another enemy, 0B, its the second enemy encontered in the game that green thing which crawls on walls and shoots plasma or something like that.

Jigglysaint: I know several more, including bosses. It's interesting to note that a boss can't be in a different level than it's supposed to be or else it just lets you exit the level and get the weapon.

I have made a new version of my object editor ( the old one had tons of bugs.. ), I also added a level map display which shows the room arrangement but it is still incomplete.

~ et en passant ! c'est qui le 3e ?
zhaDe
Posts: 8/9
lol, always tought this boss looked quite tasty.
Raccoon Sam
Posts: 373/1040
Originally posted by Bio
0x9B110 is the start of the lunch octopus level data



Heehee
zhaDe
Posts: 7/9
Moi jai presque jamais rien hacké dautre que mmx3. jaime juste trop ste jeu la.. jlai passé tellement de fois, ca srais trop lfun pouvoir jouer dans des nouveaux levels !
C:/xkas bio.asm
Posts: 679/1209
Originally posted by zhaDe
~ et en passant ! c'est qui le 3e ? :p

moi ca fait beaucoup de temps que je n'ai pas touché au donné de MMX, mon hack de smb3 prend tout mon temps
zhaDe
Posts: 6/9
My editor is not really more helpful than a hex editor it only displays the bytes of one object per line.

if you are looking into changing enemies, the object type for enemies is 03 (not all 03 type objects are enemies tho..) for example the first enemy in the game is :

1E50B0 : 03 B0 04 08 01 98 8B 60

the 4th byte is the kind of enemy, 08 is for that round purple enemy with a canon on the head

the 5th byte is a tag depending on the kind of enemy, for example if 4th byte is 08 and 5th byte is 01 the purple enemy can jump around instead of only standing still

you can try to change the 4th byte to get different enemies but be sure the enemy is normally in the same level or else the graphic will be corrupted because the game only loads the graphics and pallettes of the needed ennemies for a level.

I only know another enemy, 0B, its the second enemy encontered in the game that green thing which crawls on walls and shoots plasma or something like that.

I have made a new version of my object editor ( the old one had tons of bugs.. ), I also added a level map display which shows the room arrangement but it is still incomplete.

~ et en passant ! c'est qui le 3e ?
zhaDe
Posts: 5/9
I think your right about what I thought was the scrolling for the intro level its only sprite data... As for the room order the format seems pretty weird, only changing 1 byte screw up the whole level. A strange thing also.. dont know why but changing a certain byte to 00 (think it was $1AFD6A) makes it so u cant shoot nor slide in the crush crawfish level and the only way to jump is to press L + R.
Jigglysaint
Posts: 64/179
I think what you found was sprite data that tells the game what scroll to cue up. I think the actual data is defined somewhere else. Do you have an offset? As for room order(most of my data is for Crush Crawfish), it's at $1AFD68. I think 4 bytes makes up one block of level data. If you find anything let me know. I think it corrosponds to the level data somehow but I am unsure.
zhaDe
Posts: 3/9
k0lpa@hotmail.com
..^ thats a zero

I found the scrolling data for the first room too, its in the same place as the enemies and objects, tho I never found how to make it scroll in another way.. I was just able to disable it so u were stuck in the 1st room or make it so u could come back in the first room after going in the 2nd.. anyway nothing really usefull. Could you give me the address where the level order data maybe I could find how it works.
Jigglysaint
Posts: 62/179
It's the data where the level is organized into what you see in the game. Instead of per room, the rom takes chunks of level data and organizez them into rows of screens. So it would grab like 5 screens in order and stuff. I haven't been able to decode it yet, so I can't really say much else. What I can say that it's vital information nessicary to making a good quality level hack. Unfortuantly though, without the scrolling data, things are still rather limited
zhaDe
Posts: 2/9
elixirnova's editor source code should be helpful. Jigglysaint whats that you call "level order" ?
Jigglysaint
Posts: 60/179
For megamanx3, I have a fair bit of information, although not palletes unfortuantly. I also can't seem to find the scroll data, although I found level order, and the starting screen's scrolling.
zhaDe
Posts: 1/9
I have started making a mmx3 editor since the gfx compression algorithm has been found, tho I still have a problem.. I cant find the palettes so I can only display hardly recognizable gfx.

I have made a small app in vb which can edit enemies and objects in intro level. Its tough to use tho cuz you need to know how the objects are stored in the rom.

anyway if someone can find the pallettes I think I could make an editor to edit tiles and later enemies and objects

btw sorry for bringing back an old thread
C:/xkas bio.asm
Posts: 444/1209
I already found them but I didn't noted them they start at the end of each level data and work the same way

Edit:found the data that already been found link
Edit2:more
insectduel
Posts: 512/768
I hope you find the level layer backgrounds.
Jigglysaint
Posts: 48/179
Well maybe the best way to encourage somebody to build an editor is to find as much data as possible. Since you said you are familar with ASM, try to find as much data as possible, including enemy placement, upgrade capsule locations, scroll data, and the like.
C:/xkas bio.asm
Posts: 437/1209
Originally posted by NetSplit
the format is similar to that used in the NES Mega Man games. I'm unsure as to whether the TSA data had been found before, though, so that's good to see. Regarding how it works, usually what Capcom tends to do with their TSA data (at least in NES games) is define 16x16 blocks which are then used to construct 32x32 blocks

I never hacked a megaman game before, I just noticed it when I disasambled the level loading routine as see here:

A,X and Y are 16 bit, Y is the tile number and X the location of the tile

LDA [$20],y
STA $7E2000,x
INY
INY
LDA [$20],y
STA $7E2002,x
INY
INY
LDA [$20],y
STA $7E2020,x
INY
INY
LDA [$20],y
STA $7E2022,x

...and that how the 32x32 block are assambled from 16x16 tile
Originally posted by NetSplit
I do know that MMX level data had already been gathered at one point, but sadly no one ever created an editor to make use of the data

I would have started making a editor but...I don't know other programming language than 65816 ASM

Edit:screenshot:


in case you wonder, that water in the top of screen is a unused beta tile
Jigglysaint
Posts: 47/179
It's basically the same as the nes, except the way levels are put together are a lot different. It's not done screen by screen, but is basically lengths of level that are bound together with scrolling events of some sort. So far nobody has been able to fully decode the scroll data to make a level fit enough for a hack. Also, the sprite data still has yet to be found.
NetSplit
Posts: 89/144
I do know that MMX level data had already been gathered at one point, but sadly no one ever created an editor to make use of the data. As you found, the format is similar to that used in the NES Mega Man games. I'm unsure as to whether the TSA data had been found before, though, so that's good to see. Regarding how it works, usually what Capcom tends to do with their TSA data (at least in NES games) is define 16x16 blocks which are then used to construct 32x32 blocks. Although I would not be surprised if it were different because this is SNES, it may still use that very same format (especially since its level data is done that way).

Good luck in finding more.
C:/xkas bio.asm
Posts: 433/1209
the first time I hack a game wich there no editor for...

here the stuff I found:
0x9B110 is the start of the lunch octopus level data(I used it for testing since tile are easy to reconize). the data aren't compressed and use a simple tilemap system(each tile are 2 byte long and byte are shifted)
exemple:
|0000|0000|0000|0000|0000|0000|
|0000|0000|0000|0000|0000|0000|
|0007|0007|0007|0007|0007|0007|
|0008|0008|0008|0008|0008|0008|
|0003|0003|0003|0003|0003|0003|
|0003|0003|0003|0003|0003|0003|

give this:


Each tile are 32x32 in size, the 16x16 tile used for making the 32x32 is determined by something I call the 'Map32'(cause it renember me LM Map16)

the start of the Map32 data for the intro level is at 0xB442B, the format got like this

|0002|0003|
|0008|0009|

I didn't fully experimented with it yet but I believe map32 data for tile start at: starting adress of data+number of tilex8

that all for now, I will continue to gather data
Edit:removed transparancy in my layout for better picture viewing
Acmlm's Board - I3 Archive - ROM Hacking - Megaman X level data


ABII

Acmlmboard 1.92.999, 9/17/2006
©2000-2006 Acmlm, Emuz, Blades, Xkeeper

Page rendered in 0.003 seconds; used 373.70 kB (max 438.49 kB)