• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

[Other✓] First Time Learning to Make ROM Hacks

Reginald Cosmic

Big Shot
  • 413
    Posts
    2
    Years
    • Age 27
    • He/Him/His
    • Seen today
    Hi. I'm a new user on the PokéCommunity forums. I hope I'm posting this in the right place. Basically, I'm not sure where to start for a tutorial. I have no reference point for what would make an intuitive and efficient tutorial from YouTube. I do have experience with Python and JavaScript, but it's not a lot.

    What I'd really like to do is get my toes wet in ROM hacking the Gen III games, most likely the Kanto remakes. I don't want to commit to a large project YET. One day, it'd be cool to develop a Leaf Green hack with lots of Hoenn Pokémon prior to the post-game, but I just want to learn right now.

    One big reason I'm afraid to just swim through YouTube search results to find a tutorial is that a lot of stuff seems out of date or irrelevant. To be honest, when I talked to my pen pal from England about this, he shared a tutorial about Advance Map, and I was making progress with understanding the basics of the tutorial. Then I found out Advance Map hasn't been updated in the better part of a decade. I don't even know where to find a download link anymore. I think an admin edited the post about it here to say "You probably shouldn't use it."

    Do you guys have any recommendations on tutorials for ROM hacking, preferably one made in the last one or two years?

    If you want more info about what I'm wanting to do in the long run, I'd like to edit wild Pokémon encounters, add new trainer encounters (maybe Team Rocket Executives in the main story of Leaf Green for instance, or maybe a new story altogether), etc. I'm a little afraid to do new graphics because whatever I make will probably stick out like a sore thumb among the existing graphics. I also don't plan on creating an entirely new region because that would be an exceptional amount of work to dedicate oneself to, but I can't completely rule that out. I would love to add custom music, but I don't know where I'd get my hands on such themes.

    That's about it. Sorry if I left out any important details. I just really don't know where to start.
     
    Last edited:
    There are two approaches to rom hacking now, namely binary and decomp.

    Binary is the rom hacking you've heard of already. You take the rom and edit its data through various tools. You basically have to keep the base engine as it is and only change the data surrounding it. These days, there's a tool called HexManiacAdvance which has rendered most old tools obsolete thanks to combining all their features together and also making the tool much safer and easier to handle without worrying about corrupting your rom like the old days. It does most of the heavy lifting for you and is an absolute necessity if you're binary hacking in 2023. You can make an entire hack using only HexManiacAdvance, AdvanceMap, and XSE (a scripting tool). HexManiacAdvance is currently being updated with its own map editor and script editor to replace those as well, so you'll really only ever need HMA to make an entire binary hack soon - I personally don't use XSE anymore and just use HMA's script editor. However since those are still a work in progress, a beginner should probably stick to AdvanceMap and XSE for a while, and use HMA for everything else.
    I will say right now that everything you want to change (pokemon, trainers, story, graphics, music) is entirely possible in basic Binary and is therefore an entirely valid choice. Many of those things will be more straightforward to change in binary than decomp too. HexManiacAdvance has its own large collection of tutorials continuosly being built so that would be a good place to start. While AdvanceMap and XSE tutorials are definitely very old by now, the general concepts are unchanged so you should be fine with them too. Just stick to those 3 tools. One downside of binary however is that most things are very geared towards FireRed. Some very specific things may have solutions in FireRed but not in LeafGreen which could get annoying for you if you must make a LeafGreen hack, but none of the basic things you've listed have that problem. HMA also fully supports both FireRed and LeafGreen.
    For more advanced edits in Binary you would need C-injections like the CFRU, but that seems out of your scope for now. It's not a necessity unless you're looking to make heavy engine changes, like adding Dynamaxing or something.

    Then there's decomp hacking, which is relatively new. You do not start with a rom here, you start with a fully decompiled codebase that you can edit and then build your rom. You mentioned you have some programming experience, so this could be a good place for you. The codebase is in C and allows you to change any part of the rom, even the engine itself. You're not limited to just changing the data surrounding the engine, anything you want can theoretically be programmed in with some effort. But that's again out of your scope. For editing the basic areas you want, you don't really have to program much. Decomp has its own map editor called PoryMap which is honestly much nicer to use than AdvanceMap, and many changes are more akin to "text-editing" than "programming". There are very very few tutorials out there for the decomps honestly, but this one on youtube is where you'd want to start. One downside here is that pokefirered (which is what you'd use for leafgreen too) is not the favourite. It's definitely usable, but is not 100% complete yet. Most of the resources and guides out there are for pokeemerald because that's what 99% of decomp hackers hack. You'd still manage with pokefirered just fine if you have the ability to navigate a codebase and compare between pokefirered and pokeemerald, but there will be fewer step-by-step tutorials you can just follow. There are other general benefits to decomp hacking though, like actual source-control using git (if you're in binary, you'd need to make backups by literally copy-pasting your rom). You also never worry have to worry about offsets and the like here, since you just have to write your code and the compiler will get it all into the rom by itself.

    So yeah, I'd strongly recommend exploring both options well before making your choice. In summary:

    Binary: edit your rom with HMA, AdvanceMap, and XSE. Edit your own version of pokemon but keep the game the same at the core (think Pokemon Gaia). Start with the HMA tutorials, an XSE scripting tutorial , and some AdvanceMap tutorial. Anthroyd on youtube has a great binary hacking tutorial series, but that is outdated because it was recorded before HexManiacAdvance existed. Maybe check it out solely for the mapping sections. Anthroyd's discord server is full of people who would help you out with any binary hacking questions.

    Decomp: edit code in C that is then compiled into a rom. Work just like a programmer working on an actual game. Enjoy the comforts that come with actual code rather than a binary file and never worry about accidentally overwriting a backup. Do crazy things if you want, it doesn't even have to be pokemon anymore (think Pokemon Voyager). Start with this tutorial series and try to figure out other specific solutions through exploration and googling. The PRET discord server is where you'd want to go for decomp help
     
    Last edited:
    Wow, thank you so much. That's a really helpful summary of binary vs. decomps. Before now, I just thought the decomp forum was not something I should mess around with at this time. I honestly might like the idea of doing the decomp now that this has been properly explained to me. I will explore both options in about a month. If not, something's gone horribly wrong with my computer.

    EDIT: I have follow-up questions that I really should've asked in my original reply.

    I'm leaning towards Decomp hacks because if I lose my whole ROM, I'm gonna go Super Saiyan and blow up the moon. Therefore, it'd probably be ideal to, you know, actually have proper backups... Wait. Did I read your post correctly? Is there a version history (like a wiki page's "history" where you can just say "Hey, I deleted an important part of this article. Go back to the previous version.") and an actual way to make backups that doesn't require me to have 375,000,000,000 pages of code saved to my external hard drive because I wanted to have frequent backups (because the only way was to copy and paste the whole thing).

    I was only planning on it being a Leaf Green hack because I know Kanto a lot better than Hoenn, despite liking Hoenn as a region just as much if not more. I know everyone loves Emerald over Ruby/Sapphire, but what about Pokéruby? (since I grew up with Sapphire) If I had to choose between a FRLG hack and a Sapphire hack, would the Sapphire hack be simpler (because everyone's hacking Hoenn) or more cumbersome (because everyone's hacking specifically Emerald) compared to a Kanto hack? (Note that I don't own a copy of Pokémon Emerald Version, and I have never played it in any capacity.)

    Also, I'm planning on watching some programming language C tutorials on LinkedIn Learning. Am I correct to assume you're talking about specifically C and not C++ or C#?
     
    Last edited:
    Wow, thank you so much. That's a really helpful summary of binary vs. decomps. Before now, I just thought the decomp forum was not something I should mess around with at this time. I honestly might like the idea of doing the decomp now that this has been properly explained to me. I will explore both options in about a month. If not, something's gone horribly wrong with my computer.

    EDIT: I have follow-up questions that I really should've asked in my original reply.

    I'm leaning towards Decomp hacks because if I lose my whole ROM, I'm gonna go Super Saiyan and blow up the moon. Therefore, it'd probably be ideal to, you know, actually have proper backups... Wait. Did I read your post correctly? Is there a version history (like a wiki page's "history" where you can just say "Hey, I deleted an important part of this article. Go back to the previous version.") and an actual way to make backups that doesn't require me to have 375,000,000,000 pages of code saved to my external hard drive because I wanted to have frequent backups (because the only way was to copy and paste the whole thing).

    Right, what you're talking about is Git. It's not a rom-hacking thing, it's used by all programmers so you should definitely look it up. It is something like you've described, you can commit your code whenever you want and roll back to a previous commit whenever you want to too. You can host this repository of code on a site like github and there will be zero chance of you ever losing your work.
    In binary, you'd have to copy and paste your rom to keep backups. Each rom is only like 8mb though, so storage isn't really gonna be your issue for either one. Git is just literally made for this sort of thing.

    I was only planning on it being a Leaf Green hack because I know Kanto a lot better than Hoenn, despite liking Hoenn as a region just as much if not more. I know everyone loves Emerald over Ruby/Sapphire, but what about Pokéruby? (since I grew up with Sapphire) If I had to choose between a FRLG hack and a Sapphire hack, would the Sapphire hack be simpler (because everyone's hacking Hoenn) or more cumbersome (because everyone's hacking specifically Emerald) compared to a Kanto hack? (Note that I don't own a copy of Pokémon Emerald Version, and I have never played it in any capacity.)

    Yeah it's not just a Kanto vs Hoenn thing, more the specific games themselves

    In binary:
    FireRed -> Most supported because everyone hacks FireRed
    LeafGreen -> No one hacks it so if you get stuck you're on your own
    Emerald -> Has decent support but nowhere near FireRed
    Ruby -> No one hacks it so if you get stuck you're on your own
    Sapphire -> No one hacks it so if you get stuck you're on your own
    However, HexManiacAdvance does fully support all these games so you're actually much more capable of picking whichever you want to binary hack now than you would have been a year ago.

    In decomp:
    Pokefirered (includes leafgreen) -> 99% ready, has good support but nowhere near Emerald
    Pokeemerald -> 100% ready, Most supported because everyone hacks Emerald
    Pokeruby (includes sapphire) -> Incomplete, no one hacks it so if you get stuck you're on your own. Not recommended.

    You can see the games the community has decided to focus on in either pathway are actually different

    Also, I'm planning on watching some programming language C tutorials on LinkedIn Learning. Am I correct to assume you're talking about specifically C and not C++ or C#?

    Yes, the Gen3 games are all written in C
     
    Last edited:
    I gotta be honest. I'm embarrassed because I completely forgot Moore's Law was a thing, so the uncompressed code would be a very small percentage of the available storage I have now. I guess I was more tired than I thought from my bad sleep schedule. I'm embarrassed cuz this seems like a very basic concept from computer science that I was absolutely taught not just at university but at a high school-level course.

    I knew Github is used by programmers; I've just never used it before. I am, however, familiar with the concept of committing code or rolling back, as opposed to figuatively running into a dragon's nest with no armor. This dude on YouTube stressed the importance of not doing acrobatics without a safety net because he did a find-and-replace with apostrophes instead of backticks, and the computer just absolutely nuked the whole team's hard work on moving a forum over.

    I don't think I have anything to add about the other concerns I expressed. The second one is "Yeah, that sounds right," so I guess I will stick to Kanto either way.

    Thank you so much for your help. It really means a lot.

    EDIT: I just realized that's not what Moore's Law says. It's a whole different law of coding.
     
    Back
    Top