A Pokémon Generation I/II to Generation III transfer tool
Go to file
Philippe Symons 9268cbd42e Reduce binary size by eliminating libstdc++
This commit removes all references to things in the libstdc++ library to remove a decent chunk of bloat.

This means every std::to_string() call, std::string and std::vector. (as well as iostream related stuff).

I replaced those with my own versions ptgb::to_string() and ptgb::vector. Especially the latter is not exactly the same,
but close enough.

I also replaced operator new and delete with my own implementation to avoid pulling in everything related to exceptions
from libstdc++

Another problem was the fact that libtonc uses siscanf, which pulls in everything related to the scanf family of functions
and locale support. The worst part of that was that it included a 13KB "categories" symbol from libc_a-categories.o,
which was pulled in because of the locale support integrated into newlibc's siscanf() function. To fix that, I created a
custom, extremely restricted implementation of siscanf. libtonc only used this function to parse at most 2 integers from a
string anyway.
2025-04-09 20:04:08 +02:00
audio/unused audio Last push before release (probably not actually though lol) 2024-08-20 23:31:07 -04:00
graphics Updating Dream Dex 2025-04-06 11:57:37 -04:00
include Reduce binary size by eliminating libstdc++ 2025-04-09 20:04:08 +02:00
loader Reduce binary size by eliminating libstdc++ 2025-04-09 20:04:08 +02:00
source Reduce binary size by eliminating libstdc++ 2025-04-09 20:04:08 +02:00
text_helper Modifying the remote multiboot loader 2025-04-06 17:09:52 -04:00
.gitignore Finalizing the mystery events, sans sprites/music 2024-06-28 11:08:47 -04:00
docker-compose.yml Add some comments and a README 2025-03-24 14:06:38 +01:00
LICENSE Create LICENSE 2023-12-06 08:14:21 -06:00
Makefile Reduce binary size by eliminating libstdc++ 2025-04-09 20:04:08 +02:00
modifications.md Update modifications.md 2024-08-27 11:26:41 -04:00
Poke_Transporter_GB_mb.sym Regenerate symbol table 2025-01-17 19:51:12 -05:00
README.md Update the main README in this branch to make the added support more explicit. 2025-03-24 14:24:55 +01:00
updateSYM.bat Updating tons of graphics 2024-08-19 14:47:29 -04:00
vbalink.ini continuing work on updated text engine 2025-03-04 11:33:02 -05:00

About

Poké Transporter GB is a tool created to transfer Pokémon from Pokémon Red, Blue, Yellow, Gold, Silver, and Crystal to Pokémon Ruby, Sapphire, FireRed, LeafGreen, and Emerald. Poké Transporter GB is designed to emulate what GameFreak may have released should they persued it. Many inspirations were taken from the Pal Park, PokéTransfer Lab, and PokéTransporter to keep a "GameFreak" feeling.

Poké Transporter GB WILL modify both your generation 3 and generation 1/2 save file. The program is designed to not corrupt anything, but if you do not wish to modify your save file then you should bypass this experience.

Please note that although Poké Transporter GB is no longer in beta, save file backups of both games are still recommended before using... just in case!.

Notes

Pokémon Transfered using Poké Transporter GB will be removed from Red, Blue, Yellow, Gold, Silver, or Crystal.

Currently the only release is in English. Releases supporting other languages is planned for the near future.

Currently English versions of Red, Blue, Yellow, Gold, Silver, Crystal are supported- plus English, Spanish, German, Italian, French versions of Ruby, Sapphire, FireRed, LeafGreen, and Emerald. Compatibility for other languages is currently in development and will be added in the near future.

Usage

Poké Transporter GB is a Multiboot program for the Game Boy Advance. There are 3 main ways to run the Poké Transporter GB ROM on a Game Boy Advance:

  • Use a program such as FIX94's GBA Link Cable ROM Sender on a GameCube or Wii running Homebrew along with a GBA GameCube Link Cable
  • Upload the Multiboot ROM to a GBA Flash Cart, launch the game in Multiboot mode (often by holding L when selecting the ROM), and swap the Game Pak after the program loads.
  • Copy the loader.gba file to a GBA Flash Cart and swap the Game Pak after the program loads. This is useful for flashcarts that don't support launching multiboot roms directly. (SuperCard SD for example)

Please note that transfering Pokémon will only work with a Game Boy Color Link Cable. Game Boy Advance Link Cables will not work.

Modifications to Transfered Pokémon

Due to limitations of the transfer process, some Pokémon will not be considered legal until they reach certain generations:

Pokémon Generation III Generation IV Generation V Passes through Pokémon Bank Generation VI Generation VII+ Passes through Pokémon HOME
Standard Pokémon from Generation I No
(Illegal Met Location)
Yes Yes Yes Yes Yes Yes
Standard Pokémon from Generation II No
(Illegal Met Location, Illegal Game of Origin)
No
(Illegal Encounter type)
No
(Illegal Encounter type)
Yes No
(Illegal Encounter type)
Yes Yes
Legendary Pokémon from Generation I No
(Illegal Met Location)
Yes Yes Yes Yes Yes Yes
Legendary Pokémon from Generation II No
(Illegal Met Location, Illegal Game of Origin)
No
(Illegal Encounter type)
No
(Illegal Encounter type)
Yes No
(Illegal Encounter type)
Yes Yes
Mew from Generation I/II No
(Does not match event)
No
(Does not match event)
No
(Does not match event)
?
(? if Shiny)
No
(Does not match event)
No
(Does not match event)
?
Celebi from Generation II No
(Does not match event)
No
(Does not match event)
No
(Does not match event)
?
(? if Shiny)
No
(Does not match event)
No
(Does not match event)
?
Stabilized Mew Yes Yes Yes Yes Yes Yes Yes
Stabilized Celebi Yes Yes Yes Yes Yes Yes Yes

Due to Mew and Celebi being illegal, an option is given to the player to "stabilize" them. This will convert the Pokémon into a legal event version of the mythical Pokémon. This event will be randomly generated and will not copy any of the data from generation 1/2- including shininess. The mythical Pokémon will still be removed from the generation 1/2 game.

A full list of modifications made to transfered Pokémon can be found here!

Screenshots and Video

Poke_Transporter_GB_mb-0 Poke_Transporter_GB_mb-1 Poke_Transporter_GB_mb-5

Poke_Transporter_GB_mb-2 Poke_Transporter_GB_mb-4 Poke_Transporter_GB_mb-7

A video showcasing Poké Transporter GB can be found here, and a video detailing some of the development process can be found here!

Why?

One of my favorite aspects of the Pokémon franchise is the ability to send Pokémon forward into the most recent generation. Of course, this isn't possible from the Gameboy games into the Gameboy Advance era- and I wanted to fix that. A handful of people have bridged the gap before, but Poké Transporter GB is the first tool designed to transfer Pokémon like the Pal Park, PokéTransport Lab, and PokéTransporter for Generation 1 and 2 to Generation 3. Documentation detailing the design process of Poké Transporter GB can be found here!

Credits

Inspired by the works of:

Programs used:

Open Source Code and Libraries:

Research Resources:

ROM Data:

Pokémon Data:

Discord Community Assistance:

Custom Graphics:

Gen 2 Icon Sprite Artists:

Arbitrary Code Execution Assistance:

License

All Pokémon names, sprites, names of related resources are © Nintendo/Creatures Inc./GAME FREAK Inc.

Everything else, and the programming code, is governed by the MIT license

This project is not endorsed or supported by GameFreak or Nintendo. Please support the original developers.

Special Mentions

A huge thank you to Goppier for being the first one to bridge the gap between generation 2 and generation 3 and for providing extremely useful documentation about both versions of the Link Cable, and a huge thank you to Lorenzooone for being the direct inspiration for this project, as well as answering questions I had during development. This project would never have happened without either of them, and I cannot thank them enough.