A way to get a single rom out of a compilation/collection pack?

Discussion in 'GBA - Game Development, ROM Hacks and Translations' started by ShadowOne333, Jun 9, 2014.

  1. ShadowOne333
    OP

    ShadowOne333 GBAtemp Guru

    Member
    6,473
    4,021
    Jan 17, 2013
    Mexico
    Good day, community!

    I have always wondered if there is a way to "extract" a single rom out of a compilation package like the 2 in 1 packages from the GBA or the Konami Collection packages seen in the Gameboy Color.

    I always wanted to just get the roms of the Castlevania Adventure games (since they are colourized) and have them as single roms instead of the Collection rom.

    Does anyone know a way on how to do that?
    Or even a way to just boot directly into the game I want without going to the selection menu?
     
  2. FAST6191

    FAST6191 Techromancer

    pip Reporter
    23,204
    8,967
    Nov 21, 2005
    Singling out a game on a GBA or earlier system (one without a filesystem) is very hard to do effectively. Making it boot to a given screen/game is usually far easier though seldom done, there are some oddities (something like the phantasy star collection on the GBA would have to be approached slightly differently) but for the most part it should not be that hard.
    If it is a straight up emulation of a game (as happened on a lot of Wii virtual console stuff, also a lot of what sega have done over the years) then it is more viable to extract a game. I will note quite a few devs have somewhat odd ROM formats compared to scene and whatever.

    Equally if it is a 2 in 1 game then most of the time you will be told to just get the originals, if for not other reason than a lot of those ? in 1 games are 256Mbit which makes things harder to fiddle with on flash carts and rarely fix bugs or add anything new.

    Anyway the very first GBA assembly hack anybody really does is finding the binary, other than a few oddities (like the phantasy star collection mentioned earlier) it is quite easy and works the same for basically every game. I reckon you are looking at doing something similar to that, or possibly similar to those doing an scene style intro for a game (wait for the game to set itself up and then jump somewhere else, in this case to the start screen of the secondary game).
    The first bytes in a game are the first instruction run by the GBA. This is usually a jump to the end of the binary, in your disassembler there will some instruction some 8 or so after that first jump lands to something in the 08?????? region. That 08?????? region is the binary proper. What will happen at some point after the menu is it will jump to the game you selected and that will be done with a jump to somewhere. Find this somewhere and make a jump to that happen earlier in the game (like just before it would have shown the selection menu) and you have your hack.

    There are a few variations on the theme that some might do (mainly playing a macro or subverting button presses to always end up at the same thing) but first of all I would go for the method I just described, it should work and if it does not (sometimes a selection screen is more than a selection screen, just like a FMV can mask a load screen).

    I am waffling. The short version is you are going to need basic assembly (know what a jump is and the basic ideas of assembly and program IO) and tracing skills (basically http://www.romhacking.net/documents/361/ ) to try this.
     
  3. ShadowOne333
    OP

    ShadowOne333 GBAtemp Guru

    Member
    6,473
    4,021
    Jan 17, 2013
    Mexico
    Wow, thank you so much for the answer.
    I see most of your explanation is referring to GBA games, could the same principle be applied to GBC compiled games and just make the direct jump to one of the games through assembly?
     
  4. FAST6191

    FAST6191 Techromancer

    pip Reporter
    23,204
    8,967
    Nov 21, 2005
    Other than the specifics on how to find the binary it pretty much applies to any hack like this for a multipack game, a bonus mode you want to jump to*, a level skip (though there are often better options here as the game should allow you to launch such things from within software) or even something like you want to jump directly to a sound test for any game on any console. For the most part you want to jump to a game or jump to the command sequence that leads to that part of the game.

    *I probably should make one for that English GBA tetris game. The game was not great but the bonus mode was more or less classic tetris.
     
    ShadowOne333 likes this.
  5. ShadowOne333
    OP

    ShadowOne333 GBAtemp Guru

    Member
    6,473
    4,021
    Jan 17, 2013
    Mexico
    Great, so I will start to read some more and then try it out in one game.
    Don't forget to let me know how the GBA Tetris hack goes for you.
     
  6. ShadowOne333
    OP

    ShadowOne333 GBAtemp Guru

    Member
    6,473
    4,021
    Jan 17, 2013
    Mexico
    Oh also, I think it would be cool to implement such idea to the Super Mario Advance titles, to just cut the BS and boot straight to the game without having to choose between the actual main game and the Mario Bros. remake (which all 4 Advance games have and is in no way "unique").

    So yeah, just the 4 MArio Advance games and the Konami Collection titles (to boot directly into the Castlevania games) are in my plans. :)
    Let's see how well I can do with the assembly...