Merged feature/backup cartridge save to flashcart sd Summary: * Add menu options to backup/restore a save from a pokémon gen I/II cartridge to the N64 flashcarts' SD card. This is only compatible with 64Drive, Everdrive64, ED64Plus and SummerCart64! * Add menu option to wipe a save from a cartridge * Add menu option to reset the in-game clock of gen II cartridges. This will let the game prompt to update the clock on the next time you try to load the save file. Before it was quite hard to reset the game clock without starting a new save. Especially for crystal you had to calculate some kind of password to make it work. Not anymore. PokeMe64 now makes this easy! Commits: * Write a hello world of sorts for writing to SD card. This just writes a file sd://helloworld.txt to the sd card. It will form the basis for implementing save backup * Implement save file backup functionality. It works! But it needs some UI work (progress bar or something), because it takes > 5 seconds * Add ProgressBarWidget and SceneWithProgressBar * Add DataCopyScene and implement backup/restore with progress indication properly Added a new DataCopyScene which takes care of displaying a progress bar while we're backup'ing or restoring data. I also implemented cartridge Rom and Save backup to (micro)SD card and Save restore from (micro)SD card to the cartridge. And it works! I verified it with my Pokémon Blue cartridge: I can back up its save, play the game, release almost all pokémon, go to a different location and save again and then restore the previous save using PokeMe64 Rom backup also works: I can play the resulting rom in VisualBoyAdvance without any issue. I can also use the save that I backed up in VisualBoyAdvance. So right now, you can take an emulator save/pkhex save and transfer it to an actual (original) pokémon cartridge and it will work! However, it's not ready for release yet for a few reasons: - It will currently always output to sd:/gb_out.sav and sd:/rom.gb. I want it to output to sd:/<cartridgetitle>_<trainername>.sav and sd:/<cartridgetitle_<trainername>.gb instead. In fact I want PokeMe64 to add numbers to the save file in case one already exists with that name. - libdragon currently doesn't have the functionality to create directories. I wish PokeMe64 to backup to a directory called PokeMe64, even if the directory doesn't exist yet. - I want a file selector so you can select which save file to restore. This way you could have multiple saves. In theory that would also allow you to transfer a pokémon red save to a pokémon blue cartridge and so on. - I want to have a wipe save option - I need to safeguard PokeMe64 for corrupted save data. Right now, for reproduction carts PokeMe64 crashes while trying to decode the trainerName. This is because the actual save file is not accessible on a reproduction cart. If I'm going to allow people to restore random saves (even from different versions alltogether), I need PokeMe64 to be robust enough for people to be able to wipe the save file or restore a different one. (in order for them to be able to correct their mistake without having to take out the battery). In order to be robust enough, I should make sure to check the CRC checksum of the save file before going to the main menu. And if it doesn't match, I should offer a reduced menu to the user. So... no release of this feature until I resolve all the topics above. But man, it's so satisfying to see it work in the current form already! The functionality itself just works on first try! * Add FileBrowserWidget and rework TestScene to use it for testing purposes * Add SelectFileScene and connect everything together. * Generate unique save file names <gameName>_<trainerName>_<uniquenumber>.sav (the last part is optional) This allows you to backup your save multiple times without overwriting the pre-existing ones. * Add option to wipe save and validate save CRC before continuing to main menu If an invalid/corrupt save is found, the user will only be offered the backup/restore options The wipe save option exists in case the user messes up and restores a save that makes the gameboy crash on bootup. (I don't know if that can actually happen, but just in case) After all: the backup/restore options allow for restoring saves of different games than the cartridge you're restoring to. (a red save to a blue cartridge, ...) Therefore the user could also -accidentally- restore a gold save to a blue cartridge (for example). So yeah, that option is only there to fix theoretic accidents without the user having to take out the battery. * Add "Reset clock" function so you can easily reconfigure your game clock in gen 2 There's no straightforward in gen 2 to reconfigure the in-game clock. There's an arcane key combination that's the worst on Pokémon Crystal and requires you to calculate some kind of password. Now PokeMe64 makes it easy: the "Reset Clock" function sets a flag that will let the game prompt you in the main menu to reconfigure the date/time again. * Update README.md * Move Reset Clock option to the main menu * Some usability tweaks of the SelectFileScene - Add title - Add scroll arrows - Make it possible to go back to the previous scene - Increase PokeMe64 version to 0.2 * Ask confirmation before wiping the save |
||
|---|---|---|
| .libdragon | ||
| assets | ||
| docs/images | ||
| include | ||
| libdragon@208f4eadf7 | ||
| libpokemegb@de5381da81 | ||
| src | ||
| .gitmodules | ||
| CREDITS.md | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
Introduction
This project lets you acquire past Distribution Event Pokémon in Gen1/Gen2 Pokémon gameboy games specifically using a Nintendo 64 with a Transfer Pak. You can run it by using a flashcart, such as an Everdrive64, ED64Plus and others.
The rom is based on libpokemegb and libdragon.
Right now the UI is still barebones. I aim to improve this in future versions.
I'm happy to accept pull requests if the community wants to do them.
Current Features
- Inject Generation 1 Distribution event Pokémon into Gen 1 cartridges. In practice, this just means all kinds of variants of Mew.
- Inject Generation 2 Distribution event Pokémon into Gen 2 cartridges. This includes the Pokémon Center New York (PCNY) Distribution event ones.
- Inject GS Ball into an actual Pokémon Crystal gameboy cartridge
- Teach Pikachu Surf/Fly on Gen 1 cartridges
- You don't have to use the transfer pak in controller 1. You can have it in a separate controller if you want. But the UI is still controlled with controller 1.
- Unlock Mystery Gift decorations like the Pikachu Bed and Tentacool Doll that were left inaccessible in Gold/Silver/Crystal due to bugs in Pokemon Stadium 2 (suggested by /u/MermaidRaccoon on reddit)
- Make it possible to backup your cartridge save file onto the flashcart PokeMe64 is running from.
- Make it possible to restore a save file on the N64 flashcart to an actual Pokémon gameboy cartridge. You can even restore emulator saves!
- Be able to wipe the save file from a game cartridge (mostly added as a feature in case you mess up and restore a save file from a completely different game)
- Make it easy to reset/reconfigure the Generation II game clock
Limitations
- Right now, this rom only supports the international (English) versions of the games.
But I've heard from /u/bluemooncinco on reddit that PokeMe64 crashes on gen 1 French and Spanish, but Spanish gen 2 games appear to work. But your mileage may vary, as I haven't personally tested any games besides the international (English) ones. The main reason why other languages may or may not work is because the relevant data is at different positions inside the game data.
Build
To build it, set up a build environment for libdragon.
#Build with 12 threads (Change the thread number to what you want):
libdragon make -j 12
Usage
WARNING: Do not insert or remove your gameboy cartridge, N64 transfer pak or controller while the Nintendo 64 is powered on. Doing so might corrupt your save file or just plainly won't work! (header validation check may fail)
- Copy PokeMe64.z64 to your Nintendo 64 flash cartridge. (such as Everdrive64, Super 64, ED64Plus, SummerCart 64, ...)
- Have your Nintendo 64 powered off. (IMPORTANT)
- Connect your N64 transfer pak to your original (OEM) Nintendo controller. Third party controllers possibly don't work. You can verify this by testing with Pokémon Stadium 1 or 2 first.
- Insert your pokémon gameboy cartridge into your N64 transfer Pak
- Now power on your Nintendo 64
- Load the PokeMe64.z64 rom
- Follow the instructions
NOTE: It's been reported that Everdrive 64 users may have to disable the CRC check to get the rom to run. This is a per-game setting you can enable in the Everdrive 64 menu. So far, it's only been reported for Everdrive 64 v3, but it likely applies to other variants as well. (reported by /u/bluemooncinco on reddit)
Goal
This project was created to preserve/improve access to the original Distribution event pokémon from Gen1 and Gen2 for actual Pokémon gameboy cartridges. You could kinda do this with a gb operator and a pc. But having it done with a Nintendo 64 feels more "real"/"official" and is easier if you have the console and Transfer pak.
Future potential improvements (ideas/roadmap)
UI ideas
- In the pokémon list, show the mini menu sprite that you would also see in the party menu in the gameboy games
- add some background images and potentially sprites here and there.
- add some acquisition sound effects from the gameboy games
- add a skippable "trade" 3D animation sequence when you receive a distribution pokémon. The idea is to have a pokéball go into a green mario pipe on either a Nintendo 64 3D model or Nintendo 64 3D logo model. Then follow the pipe with the camera and have the pokéball drop onto a huge 3D representation of the gameboy cartridge before opening the pokéball which then triggers the stats screen.
- Have a 3D intro animation that shows a pokeball opening, a Nintendo 64 logo appearing, slightly jumping and playing the "NINTENDO sixtyfoouuuuuuuuur" meme sound
- Add a menu item to let you buy missing version exclusive pokémon from other versions of the generation with in-game currency. (such as Mankey for Blue or Vulpix for Red). The original games are getting expensive, so this would be a good help for people who can only afford/are willing to buy/play a single game for the generation.
- Add some background music (Creative commons remakes/remixes of the original music (Maybe a looped chunk of Ramstar - Route 24?)
- Have a "music" widget that shows up to name the song(s) that I end up using when it/they start(s) playing. (similar to how Need For Speed - Most Wanted (original) used to show this)
Feature ideas
- Support reproduction cartridges
- Support other language versions (in libpokemegb)
- Make it possible to display your cartridge save file as a QR code and contribute to the 3DS' PKSM project to migrate the save file easily from gameboy cartridge to 3DS.
- Make it possible to swap gameboy cartridge after using the reset button on the N64. (suggested by /u/bluemooncinco on reddit)
I'm likely going to postpone the 3D stuff (intro and "trade" sequence) until I have implemented a lot of the other ideas here.
Maybe at some point I might introduce a professor character in PokeMe64. I originally had this idea when starting the project, but when I discovered the existence of the Poke Transporter GB project by GearsProgress, I kinda let that go.
Anyway, how many of these ideas actually get implemented kinda depends on how quickly I get burned out of the project. We'll see how far we get.
Credits
You can find the Credits and special thanks section here: Credits
Help wanted
Hi! I would very much like some people to join the project and add some sprites/graphics design to this rom. I'm not asking you to edit the code for those things. But I don't exactly have the skillset to effectively design images or create music.
So if you're good at those things, I would very much appreciate your contributions to bring this project to the next level!
It goes without saying that I'd also happily accept code contributions. :-)






