• 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.

How to Make Your Own ROM Hack Cartridges - Tutorial

Introduction:

Hello! For the past year or so, I've been making my own ROM hack cartridges. I love the idea of playing on original hardware and there's just something that feels special about pulling a cartridge out, putting in a new one, and starting up a new game. It forces me to carry around only a few games at a time, and enjoy them all, rather than wasting time choosing from an infinite library of games. Here is an image on my collection so far... with more coming:

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial


I've gotten many questions on how exactly I make my rom hack cartridges, so I wanted to share my methodology in hopes that others who would like to do the same can have a clear understanding of the process so they can do it themselves!

Materials :

Physical:

  1. Windows PC - Not sure how this would work on a Mac or Linux machine.
  2. Joey Jr v2++ (https://bennvenn.myshopify.com/products/usb-gb-c-cart-dumper-the-joey-jr) - or other cart flashing device such as a GBxCart.
  3. An official physical copy of FireRed, Emerald, or Ruby, from which you will dump the rom to use as a base for patching.
  4. GBA cartridge Shell - can be purchased cheap on Aliexpress for about $1.
  5. Art for the label - Can be your own art, or art from the web. You can print yourself, or have a seller on Etsy print it for you. I've used this seller (fireandclarity) before and it turned out great IMO. (https://www.etsy.com/listing/1540039997/gameboy-advanced-gba-replacement-label).
  6. Triwing/Phillips head screwdriver - Y1 triwing or 0 phillips head sizes work for the screws you will encounter on GBA carts.
  7. Flashable cartridge of choice - Bootleg or InsideGadgets, depends on your budget/scope of your project. If you would like RTC, you will need an insidegadgets cart (https://shop.insidegadgets.com/prod...with-rtc-flash-cart-works-with-pokemon-games/). For bootleg carts, I would recommend buying Quetzel from aliexpress. It should cost around $5, and you can request the seller send you one of these board configurations (VERY IMPORTANT):

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial

This board configuration has 1M flash save instead of SRAM, and is the only one that works with lesserkumas Custom 1M Flash save patching tool. The 1M flash has 128kb save space, enough for two Pokémon save files which allows the game to not delete your save upon beating the elite 4. If you are using a bootleg I would highly recommend this one.

There are other ways to get other board configurations to work, but this is by far the cleanest way to use a bootleg.


Software:

  1. ROM you would like to flash to the cart - This should be acquired through patching a copy of your own, legally obtained base ROM. For patches, I always recommend downloading the patch from the devs official link, and patching yourself using a tool like Rom Patcher JS (https://www.marcrobledo.com/RomPatcher.js/)
  2. JoeyGUI/other Joey Jr v2++ firmware (download from bennvenn's server - https://discord.com/invite/F5ckxM2) - FlashGBX (https://github.com/lesserkuma/FlashGBX) should also work well.
  3. Lesserkumas Custom 1M flash Patcher tool. (https://github.com/lesserkuma/Custom_1M_FLASH_Patcher)

Methods:

Patching your own ROM (borrowed from my discord): - Skip this if you are familiar with patching and have already patched your ROM and have your .gba file.


Example: Patching SWSH Ultimate Plus to Fire Red.

1: Dump a Fire Red ROM from your own official physical cartridge.

This can be done in the Joey software by inserting a FireRed Cart and clicking "Backup ROM".


2: Download the patch.
You should now have two files:

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial


3: Navigate to https://www.marcrobledo.com/RomPatcher.js/legacy/

The website should look like this:

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial


4: for "ROM file", select your .gba file. For "Patch file", select the .bps file

Should look like this and have a checkmark:


[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial


5: Click Apply patch.
A .gba file should appear in your downloads.
Note: it may download as a .txt file, just rename the .txt to .gba and continue on.

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial


6: Rename this file to 'Pokemon Sword and Shield Ultimate Plus'
or something similar so you keep track of it.


Save Patching the ROM for use on a bootleg cartridge - skip this step if you are using an InsideGadgets cart.

This is very specific to the PCB pictured above. This will not work for other PCBs. If you are looking to use bootlegs, I would HIGHLY recommend you get your hands on one of the PCB configurations in the image under the 'materials' section.
  1. Ensure that you have Lesserkuma's Custom 1M Flash Patcher downloaded
  2. Open it up, you should see this:
[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial

3. Copy your rom into the folder:

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
4. Drag and drop the .gba file into the .exe file. This window should appear:

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
5. Now you should have a patched ROM in the same folder:
[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
This will be the ROM that you will flash to your cart.

Flashing the ROM to the Cart:

  1. Plug in your cart flasher into your computer:
[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
2. Open up your cart flashing software - in my case it is JoeyGUIv1_14:
[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial

3. Click OK to dismiss the message. Select Overdump and the '128K (A4) Flash Save' option circled below: - overdump not necessary if rom is 16mb., if using an insidgegadgets cart, you may need to select a different option ('128k Flash Save' option rather than the '128K (A4) Flash Save').
[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
4. Click 'Upload ROM' and select the ROM that you have patched in the previous section. - if using InsideGadgets cart, use the non-save patched version of the ROM.
5. Wait for the ROM to flash to the cartridge - there should be a green loading bar at the bottom telling you the progress. This should take 5-10 mins.

Once this is complete, you now have a cartridge with your ROM on it, which will save properly!

Swapping the PCBs to a new shell:

1. Use the proper screwdriver to unscrew this screw to be able to slide down and remove the front cover of the cartridge shell. Then pull the PCB out.
[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
2. Place the cartridge in the new shell, replace the front cover and slide into place.
3. Replace the screw.

Now you have your own flashed ROM hack cart that not only functions, but is in a cool new shell!

Making/printing a label:

I have made about half of my labels, the other half I have either grabbed from online artists or purchased. You can buy label printing paper or purchase the labels from the seller I listed in the materials section.
If you're going to make your own labels, you'll need additional software such as Photoshop or GIMP. I used GIMP for all of my labels that I made.
  1. Set the canvas size to Width: 1380 x Height: 687 Pixels (sets the proper ratio, you may need to modify if you are printing yourself)
  2. Create your own label. Be creative!
  3. Print the label using label paper. Make sure you have a good enough printer to do this! If not, again, I'd recommend the Etsy seller (fireandclarity) I linked!
    1. If you do purchase, be sure to send the seller your art in .png format via message after your purchase!
Once you have your label. Apply it to your new cartridge and be sure to center it carefully!


Conclusions:

Now you have a personalized, functional rom hack cartridge that you made yourself! The will play on anything that plays GBA, so OG GBA, GBA-SP, NDS, and even the Analogue Pocket! If you used the Bootleg cart, you will not have RTC, so if that is important to the rom hack, I will again say that the inside gadgets cart is a better option for that. If RTC is not required, the bootlegs are a perfectly suitable option that are very affordable and works well with the save patched using Lesserkuma's tool.

Thanks for reading and I hope this is easy to follow. I'm happy to clarify any points and answer any questions that folks might have!

Note: The items pictured are for personal use only. Any cartridges made following this guide should strictly be kept for personal use and never sold. I do not condone any misuse of this guide for nefarious purposes.
 

Attachments

  • [PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial
    1724989745212.png
    13.2 KB · Views: 10
Last edited:
Hey, thanks for this guide! I have a question:

I'm trying to get this to work with Pokemon Elite Redux 2.5. After the initial UPS patch to the Emerald ROM, I get this when I apply the 1M patcher tool:

[PokeCommunity.com] How to Make Your Own ROM Hack Cartridges - Tutorial

What does this indicate ("Stubbed function or already patched")? I've been using GBABF to flash ROMs successfully onto the same carts you have in your example above; however, Elite Redux wasn't working for me and I figured it could be because it was SRAM patched and not 1M patched. Right now, if I use the Elite Redux ROM as is, I get a white screen after the GBA logo. If I use the 1M patch like above, then I still get the white screen after the GBA logo after patching.

For reference, this doesn't happen with Pokemon Emerald Rogue. Pokemon Emerald Rogue seemingly works right out the gate with these cartridges. What could be going on?
 
Hey, thanks for this guide! I have a question:

I'm trying to get this to work with Pokemon Elite Redux 2.5. After the initial UPS patch to the Emerald ROM, I get this when I apply the 1M patcher tool:

View attachment 169569

What does this indicate ("Stubbed function or already patched")? I've been using GBABF to flash ROMs successfully onto the same carts you have in your example above; however, Elite Redux wasn't working for me and I figured it could be because it was SRAM patched and not 1M patched. Right now, if I use the Elite Redux ROM as is, I get a white screen after the GBA logo. If I use the 1M patch like above, then I still get the white screen after the GBA logo after patching.

For reference, this doesn't happen with Pokemon Emerald Rogue. Pokemon Emerald Rogue seemingly works right out the gate with these cartridges. What could be going on?
This is rom specific. The dev of that hack likely modified the save code in their hack such that it doesn't use the normal save routine. The tool doesn't account for custom save functions.

It looks like that dev used emerald decomp for the project. You could reach out to them and see if they can explain what they did to the save function.

The white screen is a consequence of the save not working. If it's broken, you will get a white screen on emerald.

Edit: wait! Did you already patch the rom with a sram patch? You need to use the base rom for patching, not one that you SRAM patched.
 
This is rom specific. The dev of that hack likely modified the save code in their hack such that it doesn't use the normal save routine. The tool doesn't account for custom save functions.

It looks like that dev used emerald decomp for the project. You could reach out to them and see if they can explain what they did to the save function.

The white screen is a consequence of the save not working. If it's broken, you will get a white screen on emerald.

Edit: wait! Did you already patch the rom with a sram patch? You need to use the base rom for patching, not one that you SRAM patched.
No, I didn't already patch the ROM with a SRAM patch; I just applied the mod's UPS to the ROM and that was my starting point.

It's interesting that Pokemon Emerald Rogue just works flat out, I guess it was already M1 patched? I can see you've done Emerald Rogue too, did it just work for you or did you have to M1 patch it? Weird lol. But yeah, I can reach out to the modder and learn what they did to the save file; I'll share it if they do. I'd love to get these mods on my GBA.
 
No, I didn't already patch the ROM with a SRAM patch; I just applied the mod's UPS to the ROM and that was my starting point.

It's interesting that Pokemon Emerald Rogue just works flat out, I guess it was already M1 patched? I can see you've done Emerald Rogue too, did it just work for you or did you have to M1 patch it? Weird lol. But yeah, I can reach out to the modder and learn what they did to the save file; I'll share it if they do. I'd love to get these mods on my GBA.
Emerald rogue works because they save routine was not altered and can be recognized by lesserkumas tool. It is not already patched.

The tool works on GBA ROMs compiled using agbcc compilation (standard for the gba era) and modern compilation.

I can test redux to see if i can get it to compile, but the most likely thing is that the redux dev altered the save routine in their hack.
 
Emerald rogue works because they save routine was not altered and can be recognized by lesserkumas tool. It is not already patched.

The tool works on GBA ROMs compiled using agbcc compilation (standard for the gba era) and modern compilation.

I can test redux to see if i can get it to compile, but the most likely thing is that the redux dev altered the save routine in their hack.
That'd be awesome, thanks. I reached out to the Devs, didn't get an answer, but I suspect you're correct that they altered the save. At minimum, saving is done by opening the start menu in game and pressing select, which is different then other games. I wonder if there's a way to determine if this is all that's different and if there's a work around? But either way, I can just put my Elite Redux dreams to rest. I was excited for the possibility.
 
That'd be awesome, thanks. I reached out to the Devs, didn't get an answer, but I suspect you're correct that they altered the save. At minimum, saving is done by opening the start menu in game and pressing select, which is different then other games. I wonder if there's a way to determine if this is all that's different and if there's a work around? But either way, I can just put my Elite Redux dreams to rest. I was excited for the possibility.
I actually talked to some of the devs myself. I learned that they did some overhauling of the save blocks and how they are handled. Since the project isn't open source, I'd say it's quite unlikely that you'll be able to get it working on a cheap bootleg cart that requires a save patch. Inside gadgets carts/ clones of those carts are the way to go.

I've thought about looking into the hex code across a few branches of emerald decomps to see where this function lives, and how changing the save function code modifies the hex but it's a pretty big undertaking and I've got limited time. I do believe the modifications of the save are a feature branch, and that might be public, if you wanted to start digging yourself.

I don't think it makes sense to have the devs change their hack to cater towards this application, but at this point I'd say that elite redux is currently incompatible with this method (for cheap bootleg carts at least). Sorry.
 
so i just got a GB operator by epilogue for Christmas is there a specific boot leg cart you would suggest i use for making my own carts
 
Shot in the dark here, but wanted to see if you could help shine some light on an issue with a specific ROM and flashing. Your method is great and seems to work well for most things, but for the life of me, I cannot get Pokemon Sweet to load on my GameBoy with a physical cart. It loads all day with an emulator (you pick which one) but it never makes it to the title screen when on a cart; just gives a blank, black screen after the date splash screen. In addition to your method, I have tried patching for SRAM / batteryless, patching for flash save (outside of the 1M Flash patcher tool), combining some of these methods, but everything I seem to throw at it (systematically, of course) is met with that same, blank screen. Context: I am also using a GBxCart 1.4 Pro, which hasn't given any issues to this point, and can still flash about anything else with it. I have tried other carts as well, but no dice. Anyway, if you have some time (or even see this) would love to pick your brain more about it. Maybe I'm just completely overlooking the obvious. Thanks!!!
 
Back
Top