Language…
11 users online:  Anorakun, bradcomp, DanMario24YT, DasFueller, DimeR, GRIMMKIN,  Shoujo, signature_steve, SMW Magic, steelsburg,  yoshi3706 - Guests: 290 - Bots: 412
Users: 64,795 (2,373 active)
Latest user: mathew

Super Mario Advance 3 hacking

Originally posted by Yakov
I'll gladly start the editor, but there's one problem: the offsets and instructions from both GBA and SNES version are all scrambled around. So if anyone would be willing to provide a document in one central location, I can look at it and start experimenting.

(image of "EggVine Advance")

I think that if it's a new editor, it should have a new title, as opposed to being associated with Eggvine. (Any ideas?)

YI info for editor.rtf (there was a link here to an older version of this document; the newest version can be found in the first post)

Is this a good start for a reference sheet? (The document is incomplete, but I'm uploading what I have so far so others can check it.)


(Edit: 101st post! Yay for numbers that have no real significance!)

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
How about "Yoshi's Mirror"? No idea, why this name came to my mind...
@Yakov: If you want, I can make a logo for the .exe-file.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
I'm thinking something like "ShyGuy" would be good.
AdvancedEgg would be great.
I've updated the reference sheet-- it now includes information on pointers, headers, object/sprite data, level/midway entrances, and text editing.

YI info for editor.rtf (updated 2010-3-28) (there was a link here to an older version of this document; the newest version can be found in the first post)

---

Edit: I made a mistake-- "GBA pointers to level names" was a copy of "GBA pointers to message blocks".

It should be
GBA pointers to level names: x2F9880 + 4 * (map icon number)

I re-uploaded the file, now containing the correction.


–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
Actually, I agree with Midna. "ShyGuy" sounds like a great possibly unique name.

Usually, I like the names without the word "advanced" or "editor" in them.

I'm not entirely sure how you got those values, Zeldara. I looked in the offsets of my ROM file (Super Mario Advance 3 - Yoshi's Island (U) [!].gba) and I can't seem to find those exact values you specified (e.g. you said that level names begin with FE 00 00 yet at x2F90AF it begins with C0 DC E3). Maybe I have the wrong ROM file? Or maybe I'm just stupid and can't realize something obvious?


Originally posted by Yakov
I'm not entirely sure how you got those values, Zeldara. I looked in the offsets of my ROM file (Super Mario Advance 3 - Yoshi's Island (U) [!].gba) and I can't seem to find those exact values you specified (e.g. you said that level names begin with FE 00 00 yet at x2F90AF it begins with C0 DC E3). Maybe I have the wrong ROM file? Or maybe I'm just stupid and can't realize something obvious?


...You didn't open the table file, right? For viewing text in Translhextion, I recommend this table file that I made.

Anyway, this should explain it.
Originally posted by Translhextion at x2F90AC
FE 00 00 C0 DC E3...


In the first post, I originally included the offsets of the first character of text. (For the level names, I recommend looking it up from the offsets if you really need an exact value.)

(By the way, I probably did this in the file for the credits/pre-title-screen text, of which I did not work out the separators.)

Where did you get the x2F90AF? Both my first post and the file I uploaded say x2F90AC. And I edited my first post a while ago...


–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3

Originally posted by RTF File
Level names:

SNES: x114C4C-x11552E
GBA: x2F90AF-x2F9880

Level names begin with FF 00 in the SNES version and FE 00 00 in the GBA version.
The line break is FE 10 00.


Originally posted by Yakov
Originally posted by RTF File
Level names:

SNES: x114C4C-x11552E
GBA: x2F90AF-x2F9880

Level names begin with FF 00 in the SNES version and FE 00 00 in the GBA version.
The line break is FE 10 00.

Hmmm... It seems you downloaded an older version of the file. Try redownloading it. (When I post something, I often make a few edits during the next 1 to 20 minutes or so.)

Originally posted by RTF file that I just redownloaded to check
Level names:

SNES: x114C4C-x11552E
GBA: x2F90AC-x2F9880

Level names begin with FF 00 in the SNES version and FE 00 00 in the GBA version.
The line break is FE 10 00.


Anyway, that solved the problem, right?

(Please tell me if there is a mistake on any other offsets.)

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3

Editor update:

Since it was practically impossible to make like a "confirmation dialog" in Qt, I switched to wxWidgets. Not that this information matters to anyone.

The more important thing is that the drag & drop support I'm implementing has some fucking retarded pointer bullshit, so it takes me 20 hours to find something suitable. So, there are two options: I can go on to something different, preferably how to open and interpret ROM files; or, I could keep bashing my head finding a suitable solution for drag & drop.

Your choice, people.


E: aaaaaaaaaaand found the answer two minutes later. By using only one trial & error method. WTF is wrong with C++?!

E2: without the use of table files, which offsets should I check for the proper header?


Originally posted by Yakov
E2: without the use of table files, which offsets should I check for the proper header?


What do you mean the proper header? The level header?

Originally posted by RTF file
The first 10 bytes of the level data are the header.

Originally posted by RTF file
SNES - Pointers to level data (3 bytes): xBF9C3 + 6 * (level number)
GBA - Pointers to level data: x1EF1A4 + 4 * (level number)


Or are you referring to another header, for identifying the ROM itself?

The 0x200 bytes at the start of the SNES ROM are just... there. I do not believe it matters what they are.

Edit: Or is this something to do with programming?


Edit 2: Level 5... However that level formula works, it's been a fairly constant 26-27 posts per level so far. I sort of expect a quadratic equation to be... non-linear?

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
How can we easily find out which pointer leads to the data of what level? I'm tired of scrolling up and down.Free counters!
Originally posted by Jeorge535
How can we easily find out which pointer leads to the data of what level? I'm tired of scrolling up and down.

I'm not entirely sure what you're asking, but I'll try to help...

- To not have to scroll back to the pointers? You could take a screenshot of the section with the pointers...

- The level/sprite data appears to be in order by world-- meaning, as far as I've checked, World 1 levels are in the x1Cxxxx range, World 6 levels are in the x1Exxxx range, and the other levels are in between (except for 36 and 37 at the end, and 38 and 39 at the beginning). If you're looking at the pointers, you can sort of notice the pattern (and save some time calculating which pointer you need)-- for example, the pointers to level 6C (part of 6-Extra) and level 6D (part of 1-3) look pretty different from each other.

- If you are at a particular section of level/sprite data and are looking to find out which pointer leads to it, you can take the offset of that data (the first byte of data always comes right after one or more FF bytes), reverse the bytes, and search for it.

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3

OK, so I have decided to use as my ROM header offsets xA0-xAF, just so that I can have readable text and avoid creating mess in the program.

E: awesome, so I have two checks for a proper header:
  1. Making sure the size is exactly 4X1024X1024 bytes (4MB)
  2. Reading 15 bytes at offset 160 (xA0) and making sure the value is SUPER MARIOCA3A


Originally posted by Yakov
1.  Making sure the size is exactly 4X1024X1024 bytes (4MB)

This may not be a good idea... It may be possible to add bytes to the end of the ROM, to allow using more bytes for each level. (This is not possible on the SNES version, but I have not tested this on the GBA version...)

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3

Well, there is about x2000 unused bytes at end. And anyways, I think that as the editor matures more implementations can be made. At the moment, let's just stick to the basics.

I still need to complete the GUI though. It's hard to find flexible windows, so I used static ones.


Originally posted by Yakov
Well, there is about x2000 unused bytes at end. And anyways, I think that as the editor matures more implementations can be made. At the moment, let's just stick to the basics.

I still need to complete the GUI though. It's hard to find flexible windows, so I used static ones.

I personally believe it's not a good idea to add restrictions (unless they're restrictions to prevent crashing/etc.) while the program is in progress... Does the program still load the ROM if the checks don't work out?

And are you making it compatible with both versions (the obvious way to tell the difference is by extension), or just GBA for now while you make the GUI?

I hope you can work out the GUI, anyway. After all, that's the most essential part of an editor.


Can I just say... I really like the way Eggvine displays all objects and sprites in one large window (with a search feature, even though the search feature crashes a lot). It's much easier to deal with than Lunar Magic's object/sprite windows.

---

Edit: I was asking about compatibility with both versions because it's not confirmed that the GBA version stores every object the same way as the SNES version.
---

Edit 2:

It's confirmed that the GBA version can handle data past x400000!

I copied level 1's level data to x4001AC (somewhat random choice of offset there), set level 0's level data offset to AC 01 40 08, and it loaded! (Though it was a bit strange due to having level 0's sprite data.)

This gives the potential for huge levels...

I wonder how far the SMA3 ROM can be expanded without problems... According to some Google searches, the technical maximum GBA ROM size is 32MB. Though even 8MB should be more than enough for hacking purposes...

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3

Alright, I'll lift the filesize restriction, although I still made it available to load a ROM if the filesize or header is incorrect.

For the time being, I'll support only the GBA version. In the future, preferably after the basic features will be implemented, I'll try to support the SNES version.

By the way, I still need a good name for the editor if you find EggVine Advance insufficient.


First of all...

(Requested by Mippish.)


Originally posted by Yakov
By the way, I still need a good name for the editor if you find EggVine Advance insufficient.

It seems some people like the name ShyGuy, but I would find it confusing. (I doubt people would get "Lunar Magic" or "Eggvine" confused with a common in-game enemy...)

As for "Yoshi's Mirror", it sounds OK, but it reminds me of file mirroring, making it sound like it's a copy of something else.

How about adding another word to Shyguy to make it more distinctive (so you can tell if someone is talking about the editor or not)?

Or any other suggestions?

Originally posted by Mue
Usually, I like the names without the word "advanced" or "editor" in them.
I agree with this by the way.


–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3