With the release of Pokemon HOME, I've been thinking about how to make the best experience for transferring Pokemon form all of the games with a single device using as close to official means as possible. The 3DS is capable of playing every Gen 1-7 Pokemon game (with the use of GBARunner2 for Gen 3).
The transfers that are straight forward:
For Gen 5 (Rom) -> Bank, it feels like the best option would be some sort of slot-1 redirect while using Poke Transporter. This could probably be done as a Luma3DS firmware module, or NTR CFW Plugin, but I'm not totally sure (and nothing like this exists AFAIK).
Gen 4 -> Gen 5 would be more complicated. Interestingly, all the code for this transfer is located in the Gen 5 games which use a DS Download play app to extract the data from the Gen 4 save. A (heavy) ROM hack could possibly run the download play code in-process and redirect the slot-1 access, but this would require a ton of reverse engineering. Even with 2 devices, using Transfer Lab would be tricky, as you would need some sort of slot-1 redirect for the Download Play app.
Has anything like this ever been attempted, or is there anything obvious I'm overlooking?
Edit: It looks like Slot2 support in nds-bootstrap may not be that far off. There were actually a couple commits that started adding this functionality (https://github.com/ahezard/nds-bootstrap/commit/dfeff685cc8391e52d1840d8d7d6fc629b9ae08a and https://github.com/ahezard/nds-bootstrap/commit/e77b6e4f962493daa49778d41f91389e02851d69).
I've also been thinking more about the other transfers. For Gen 5 (Rom) -> Bank, an NTR CFW Plugin or patch to the binary probably isn't the best approach. It seems like a patch to the FS sysmodule that redirects that card commands would be best, but this would be complicated. Patching the existing FS module would be tricky, but neither Luma or Atmosphere has an open-source FS module. Creating a new FS module from scratch would have other potential benefits though (e.g. exfat support).
For the Gen 4 -> Gen 5, I've sort of given up on doing that with only one device. It would be doable, but prohibitively complicated, and require massive changes to the ROMs. A better more general approach may be to add slot-1 redirect to nds-bootstrap, then load download play with slot-1 redirected to the ROM.
Edit 2: Turns out binary patch to the Poke Transporter ROM was the simplest way to do Gen 5 -> Bank. A patch was created based on zaksabeast's Dream Radar redirect patch, and then implemented as a PKSM script that dynamically generates a patch now available in the latest PKSM release.
Now we just need Slot2 support in nds-bootstrap, and some sort of solution for Gen 4 -> Gen 5
The transfers that are straight forward:
- Gen 1 (VC) -> Bank: Poke Transporter
- Gen 2 (VC) -> Bank: Poke Transporter
- Gen 6 -> Bank: Poke Transporter
- Gen 7 -> Bank: Native
- Bank -> HOME: Native
- Gen 5 -> Bank: Poke Transporter
- Gen 3 -> Gen 4: Pal Park (3DS doesn't have a slot 2)
- Gen 4 -> Gen 5: Transfer Lab (Requires 2 devices and doesn't support ROMs)
- Gen 5 (ROM) -> Bank: Poke Transporter (doesn't support ROMs)
For Gen 5 (Rom) -> Bank, it feels like the best option would be some sort of slot-1 redirect while using Poke Transporter. This could probably be done as a Luma3DS firmware module, or NTR CFW Plugin, but I'm not totally sure (and nothing like this exists AFAIK).
Gen 4 -> Gen 5 would be more complicated. Interestingly, all the code for this transfer is located in the Gen 5 games which use a DS Download play app to extract the data from the Gen 4 save. A (heavy) ROM hack could possibly run the download play code in-process and redirect the slot-1 access, but this would require a ton of reverse engineering. Even with 2 devices, using Transfer Lab would be tricky, as you would need some sort of slot-1 redirect for the Download Play app.
Has anything like this ever been attempted, or is there anything obvious I'm overlooking?
Edit: It looks like Slot2 support in nds-bootstrap may not be that far off. There were actually a couple commits that started adding this functionality (https://github.com/ahezard/nds-bootstrap/commit/dfeff685cc8391e52d1840d8d7d6fc629b9ae08a and https://github.com/ahezard/nds-bootstrap/commit/e77b6e4f962493daa49778d41f91389e02851d69).
I've also been thinking more about the other transfers. For Gen 5 (Rom) -> Bank, an NTR CFW Plugin or patch to the binary probably isn't the best approach. It seems like a patch to the FS sysmodule that redirects that card commands would be best, but this would be complicated. Patching the existing FS module would be tricky, but neither Luma or Atmosphere has an open-source FS module. Creating a new FS module from scratch would have other potential benefits though (e.g. exfat support).
For the Gen 4 -> Gen 5, I've sort of given up on doing that with only one device. It would be doable, but prohibitively complicated, and require massive changes to the ROMs. A better more general approach may be to add slot-1 redirect to nds-bootstrap, then load download play with slot-1 redirected to the ROM.
Edit 2: Turns out binary patch to the Poke Transporter ROM was the simplest way to do Gen 5 -> Bank. A patch was created based on zaksabeast's Dream Radar redirect patch, and then implemented as a PKSM script that dynamically generates a patch now available in the latest PKSM release.
Now we just need Slot2 support in nds-bootstrap, and some sort of solution for Gen 4 -> Gen 5
Last edited by Supercool330,