Language…
19 users online:  Ahrion, Anas, anonimzwx, autisticsceptile1993, Batata Douce, codfish1002, drkrdnk, Hammerer, LuigiTron, magianegra21, Mario's GameBase, Maw, NewPointless, playagmes169, ppp9q, sinseiga, Sokobansolver, Sparx, The_Uber_Camper - Guests: 266 - Bots: 337
Users: 64,795 (2,376 active)
Latest user: mathew

Mario & Luigi Superstar Saga (help thread)

Ok so I posted a mod request for M&L Superstar Saga on this website

http://s3.zetaboards.com/Lighthouse_of_Yoshi/topic/9011867/1/#new

We need some modders to help us get this thing going. It was originally my idea for a birthday gift that I could give to my little sister (and I'll repost what I typed in this thread). We don't have any helpers mainly because this site is dead. So myself and 'Teawater' talked it over and decided that this may be a good place to start asking for other modders' help. If you guys know of any other sites we could ask for help please let us know. Basically, we need help replacing Mario with Peach and Luigi with either Rosalina or Daisy. We still haven't decided who will take Peach's place yet (maybe Luigi or the unused princess)? We also need ideas for the story since Peach won't be the damsel in distress this time around. Anyways, so you guys can get the idea of what we're going for I'll repost the text on here. Alternatively, you guys can just click (or copy and paste) the link above and read the thread posted. It has links to princess sprites and whatnot so feel free to check it out please!

Hi everyone! I hope I'm not posting on the wrong board. So, this is more of a request than anything else. I've got an emulator for GBA on my laptop that I let my little sister play on. Some of her favorite games are Superstar saga and minish cap. She wishes that she could play as Zelda in minish cap or Peach & Rosalina in superstar saga. I was wondering if someone could edit one of these games to make this possible in time for Christmas or her birthday. Her birthday is on January 17. There aren't a lot of games (let alone nintendo games) with female protagonists so I thought it'd be cool to surprise her with one of her favorite games featuring one of her favorite characters. I don't have time to learn about modding and all that because I work and go to school. I tried asking someone to mod Ocarina of Time to replace Link with Zelda but the guys there don't seem interested and kinda seem like stuck up jerks. I figured it'd be easier to mod a gba game so I decided to ask on here. I hope it's not too much to ask or against board rules to post a request topic on here. Hope to hear from you guys soon.

Thank you for reading! :D
Okay so I asked Teawater what kind of modders we need for this project and he said this :

Good topic!

Basically just those two.

-Graphics Artist (#1 most needed.)
-And anyone who knows how to insert the animations... (Those who know the data formats and/or willing to learn them...) Otherwise, the pressures on me. Haha.

It's probably wise that the graphics be at least formatted in a certain way (e.g. spacing/etc.)... if someone were to decide to create an importer somehow. (May or may not need to know about sprite layers and their limits? Etc.)

So if anyone is willing to help us out that would be phenomenal of you.
Wow... That story is actually pretty amazing, really a creative christmas/birthday gift for your sister!

Unfortunately, I can't really draw sprites and I also never hacked any GBA game.

I don't know anything about GBA hacking actually, I don't know if ROMs can be expanded easily just by filling bytes (like you do with SNES ROMs). If the game has no room for the custom graphics you'd be trying to apply, the reasonable thing would to do would be expand the ROM, but tbh I have no idea how this works for a GBA ROM.


Hope someone helps you, and good luck!
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
Why thank you. She loves Nintendo games (particularly Mario and Zelda games) so I thought it'd be the perfect gift since I won't be able to buy her a game console or anything. Do you happen to know anyone who could help us out or maybe a website where I could ask for some help? We really need this to get some more attention.
Originally posted by CatadorDeLatas
Wow... That story is actually pretty amazing, really a creative christmas/birthday gift for your sister!

Unfortunately, I can't really draw sprites and I also never hacked any GBA game.

I don't know anything about GBA hacking actually, I don't know if ROMs can be expanded easily just by filling bytes (like you do with SNES ROMs). If the game has no room for the custom graphics you'd be trying to apply, the reasonable thing would to do would be expand the ROM, but tbh I have no idea how this works for a GBA ROM.


Hope someone helps you, and good luck!



Teawater replied to you on the other site. He said :

For the ROM... the entire ROM is mapped to memory / you can access all of it at any time. There is way more than enough room. Superstar Saga is 16 MB, but there's plenty of space in even what free space you can find within that much.... For all sakes and purposes, you can make GBA ROMs go to 32 MB... Just add the bytes where you need them / set up the pointers to point there is all you'd need to do... (@32 MB : Although, some movie related ROMs may support larger sizes, but that may or may not be because of the hardware in the ROM cartridge???)

He should be making an account on here sometime. Not sure when yet though. He should let me know when though.
Like right now? The message was kind of created ahead of time, yes. But posted it there until then. But thanks for moving them here!

(In the hypothetical scenario that anyone actually checked out YL, you could easily reply as a guest. Only needs a name, message (post contents), and captcha, I think.)


So is there anyone else here who is at least somewhat interested in contributing something to this project? (Or at the very least watching what happens/giving support/etc.)
Yeah.. I figured it would work like the SNES, but I just wanted to be sure. The GBA is essentially an "improved" (can be argumented) mini-portable SNES.

So 32MB is the limit.. Wow, Mother 3 is 32MB, I think mainly because there are a little over 250 music tracks in the game.


I'd like to help, but I'm no graphics artist by any means (anything I try to draw takes too long and doesn't end up nice) and I'm not familiar with GBA hacking.

But, does the sprite hacking even need ASM knowledge, or do we have the pointers for the sprite graphics already (so we make it point to a freespace where the new sprites will go)?
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
-Yeah, that would be a good way to think of it, I suppose.
-Pretty much, as far as I know.
-Okay. I'm at least happy to see that someone responded. And I'm sure ninsega is as well....
-Not really, it depends on certain variables. It helps with finding/learning formats. And pointers can be repointed to free space if need be... Have you ever opened VBA's memory viewer?

----- Superstar Saga (U) version. -----
A general outline of the things to know go like this:

Sprite indexes in Superstar Saga are 16-bits. In the format of (binary) AAAA.BBBB.BBBB.BBBB = A being the category, and B being the sprite in that category. Categories are like... 0x1000 = Overworld PC sprites, 0x2000 = Battle PC sprites... 0x3000 = Overworld NPC sprites... 0x4000 = Battle/Enemy Sprites, etc...

The sprite indexes can be found in the NPC banks of each map, and in the Sprite related table for battle/enemies/etc. I think that scripting might can contain sprite indexes too... For the most part, though, I think I'll skip the discussion on that part, since the bulk of what is most relevant relates more to the actual sprite-related data itself...

0839EE60 - Sprites Database Collection (Main) - This is the first table... it is a list of pointers. Each pointer is each category. (Starting at at sprite #s of 0x1000, then 0x2000, etc. So 0x0000 is skipped... And that should be the case for whenever the category number is used.)
Following the pointer of whatever you choose, will bring you to 32-bit data per sprite. (So each 32-bit is for each sprite in the category.)
The data contained here can be Animate, Graphic, Palette indexes (I forget if that was 9-10 bits each?) And there's also one bit for if the sprite is compressed or not. And possibly two(?) bits for if the sprite is 4-directional, 8-directional, etc. (The Palette indexes one might be ignored for Field sprites since map's NPC data also contains a list of Palette indexes for those, as well.)

0839EE8C - Sprites (Animate) (Index from Main) - Pointer of category # > Pointer of entry > Lots of data here, it'd take too much space to explain.

0839EEB8 - Sprites (Graphic) (Index from Main) - Pointer of category # > Pointer of entry > Uncompressed or compressed pixel data. (Should be in 4bpp format.)

0839EEE4 - Sprites (Palette) (Index from Main) - Pointer of category # > Pointer of entry > Uncompressed palette (16 entries. The first will always be transparent regardless of the color.

0839EF10 - Sprites (Palette Alternate) (Index from Main) (May be used with Gameboy Player / Gamecube feature.) - Pointer of category # > Pointer of entry > Uncompressed palette (16 entries. The first will always be transparent regardless of the color.

0839EF3C - Has something to do with Sprites. - I think it was the number of palettes a sprite contains. (The funny part is that I learned what this was from studying a Hamtaro(?) game by AlphaDream.)


Of course, a longer tutorial (with visuals.) would probably be a good idea as well...
VBA's memory viewer is where my GBA hex hacking first started... 7 and a half years ago. (I say "hex hacking"... because of course I did mess with Editors before that.)

Thanks.

@ 0001BBBB and 0010BBBB : So basically 0x1000 and 0x2000? (Or 0x1*** and 0x2*** if 0s confuses anyone.)
Those would be PC / Player Character sprites, yes.
Nice to see that you made it on here Teawater. Hey CatadorDeLatas do you know anyone on here who might be willing to help us out with this mod? Or at least support us? This thread isn't get much recognition. I am glad to see that you guys started discussing things over though.
Sorry not being able to reply earlier, this new year is a rush for me so I didn't have much time.
I don't know anyone who could help with the project, sorry.


--

I just got to look at the data right now, but it seems I'm editing the wrong bytes? When I went to change 0839EE60 from FC to EC on the memory viewer, just as a test, the game just started playing garbage sound data on an infinite loop.
I'm reverse-engineering and hacking F-Zero (SNES)!

My YouTube channel, with various hacking tests
@Garbage sound data: That's what you call a crash. And since these are pointers, what you just did was change the pointer to include data of four entries before its table. (And do to what that data is, may cause some screw-ups.)

The memory at that location is best viewed in 32-bit like this:

0839EE60 | 083CC2FC 084F4768 083CCC2C 084F5368
.... and so on....

Well, if you go to the address of the first pointer... (Which has the FC you were editing.) ... this is what you see: (I'll show the previous row as well.)

083CC2EC | 08215536 0821558C 082155FE 0821568C
083CC2FC | 00000000 40040201 40080402 000C0601

Now, if you were to take the data parts from all those number, it should be pretty clear that the ones in row 083CC2EC would have indexes that would go out of bounds. (These indexes are used to grab more pointers, but if these pointers are invalid, then some unexpected things can happen.)

So... if you were to try and change those pointers (@083CC2EC) to mitigate the issue, it still wouldn't work because now it is like the same thing all over again. (Sort of. I think.)

The recommended approach (if adding sprites to this category) would be to repoint the entire table somewhere where it wouldn't overlap needed data. Or if you're simply testing for fun, you can try... 0839EE60:083CC300... But I think it is better to follow the pointer and edit the indexes themselves. (You can test on the 2nd (shows 0x40040201) and third (shows 0x40080402) entries for Mario and Luigi's main field sprites respectively.)

Format: See these as binary (but I'm showing them in hex)
000001FF = Palette (9-bit) (Ignored for field maps, I think.)
0003FE00 = Sprite/pixel graphic (9-bit)
07FC0000 = Animate(9-bit)
78000000 = Contains the 4/8 directional bits discussed earlier. (And maybe other bit(s).
80000000 = Compression (1-bit) (Whether sprite/pixel data is compressed or not. I think Off=Compressed ; On=Uncompressed.)

Some examples of editing the 2nd entry. (Which is @083CC300, shows 0x40040201)... You could change it to 0x40040401 to change the sprite/pixel graphics index from 1 to 2. (Those are what they are when the data is extracted from the 32-bit. which is basically as simple as (0x40040201 >> 9) & 0x1FF in your Windows calculator ...) This will cause you to now see Luigi's graphics... But you see that the tiles are messed up? Right? Well, that's because of the Animate index... You could update that one in the same way to fix it. (To match the third entry... which is @083CC304.)

There's more, but I hope this tutorial helps!
Merry Christmas you guys!
Merry Christmas to both of you... and also a happy new year!

@Everyone: Anybody made any New Year's resolutions? ( *hint*hint* = You could make one about getting involved with ^ project. :P )


@Catador: So it's working for you now? That sounds good! :)
Happy New Years guys!
Hey guys. I'm just checking to see if there's any progress you guys made with the mod. As you already know it's my little sister's bday tomorrow. I'm not sure I'll be able to get her anything. I'll probably just take her out for dinner or something and buy her something cheap from Hot Topic or something if I can. I would really love to be able to surprise her with this mod sometime.
Guys? Where'd you go? D: