L'ideaThe idea
Pokémon Smeraldo non ha nessuna funzione per mostrare un altro giocatore che cammina sulla tua mappa: il cavo link serve solo a scambi e lotte in stanze dedicate. Questo progetto aggiunge quella funzione senza modificare né la cartuccia né il salvataggio: un piccolo programma viene caricato nella memoria volatile della console a ogni accensione, legge la posizione del tuo personaggio, la manda agli amici via internet, e disegna i loro personaggi nel tuo gioco usando le stesse funzioni con cui il gioco disegna i suoi abitanti. Allo spegnimento non resta traccia: la memoria di lavoro del GBA è volatile.
Pokémon Emerald has no feature to show another player walking on your map: the link cable is only used for trades and battles in dedicated rooms. This project adds that feature without modifying either the cartridge or the save file: a small program is loaded into the console's volatile memory at every power-on, reads your character's position, sends it to your friends over the internet, and draws their characters in your game using the same functions the game uses to draw its own NPCs. Nothing is left when you switch off: the GBA's working memory is volatile.
Supportati: Pokémon Smeraldo italiano e Pokémon Emerald inglese (USA/Europa), su GBA vero e in mGBA. Tutte e due le cartucce sono provate su un GBA vero.
Supported: Pokémon Emerald Italian and English (USA/Europe), on a real GBA and in mGBA. Both cartridges are tested on a real GBA.
La catena, da un GBA all'altroThe chain, from one GBA to another
… e da lì, al contrario, fino al GBA dell'amico.… and from there, in reverse, to your friend's GBA.
Ogni anello fa una cosa sola:Each link does one thing only:
Come entra il programma nel GBA (il multiboot residente)How the program gets into the GBA (resident multiboot)
Il GBA ha una funzione di fabbrica chiamata multiboot: se lo accendi senza cartuccia ma con il cavo link collegato, accetta un piccolo programma dal cavo e lo esegue dalla RAM. La sequenza per giocare è tutta qui:
The GBA has a built-in feature called multiboot: if you switch it on without a cartridge but with the link cable plugged in, it accepts a small program over the cable and runs it from RAM. This is the whole sequence to play:
- 1accendi il GBA con lo slot cartuccia vuoto e il cavo collegato;switch the GBA on with the cartridge slot empty and the cable plugged in;
- 2il PC (o il browser) carica via cavo il nostro programma (~15 secondi, schermo rosso);the PC (or the browser) loads our program over the cable (~15 seconds, red screen);
- 3inserisci la cartuccia a console accesa (schermo verde) e il gioco parte normalmente, con il nostro programma già residente in un angolo di memoria che il gioco non usa;insert the cartridge while the console is on (green screen) and the game boots normally, with our program already resident in a corner of memory the game doesn't use;
- 4da quel momento giochi e basta: niente da fare dentro il gioco, mai.from then on you just play: nothing to do inside the game, ever.
Il programma residente si aggancia al gioco riscrivendo un puntatore in RAM (il vettore delle interruzioni, che il gioco stesso mantiene in memoria scrivibile) e da lì viene eseguito una volta per fotogramma, accanto al gioco, senza toccare una sola istruzione della cartuccia — che è ROM a maschera, fisicamente non scrivibile.
The resident program hooks into the game by rewriting a pointer in RAM (the interrupt vector, which the game itself keeps in writable memory) and from there it runs once per frame, alongside the game, without touching a single instruction of the cartridge — which is mask ROM, physically unwritable.
Come vengono disegnati gli amiciHow your friends are drawn
Il programma non reimplementa niente: grazie alle decompilazioni del gioco (progetto pret) conosciamo l'indirizzo di ogni funzione originale, e il personaggio remoto viene creato e mosso chiamando le stesse funzioni che il gioco usa per i suoi abitanti. Per questo l'amico cammina con l'animazione vera del gioco. Si mandano azioni («ho fatto un passo verso nord»), non coordinate a raffica: bastano ~12 byte per aggiornamento e il sistema tollera bene la latenza di internet.
The program reimplements nothing: thanks to the game's decompilations (the pret project) we know the address of every original function, and the remote character is created and moved by calling the same functions the game uses for its NPCs. That's why your friend walks with the game's real animation. We send actions («I took a step north»), not a stream of coordinates: ~12 bytes per update are enough, and the system copes well with internet latency.
Cosa serve per giocareWhat you need to play
- un GBA (o GBA SP) e una cartuccia originale di Pokémon Smeraldo, italiana o inglese;
- l'adattatore USB-cavo link (Raspberry Pi Pico con il firmware in dotazione) e un cavo link GBA originale o compatibile;
- Chrome o Edge su un PC (per la via browser), con il driver WinUSB su Windows (si installa una volta con Zadig);
- in alternativa al GBA fisico: l'emulatore mGBA con lo script in dotazione, per la ROM italiana o inglese — GBA veri ed emulatori giocano insieme, nella stessa stanza.
- a GBA (or GBA SP) and an original Pokémon Emerald cartridge, Italian or English;
- the USB-to-link-cable adapter (Raspberry Pi Pico with the provided firmware) and an original or compatible GBA link cable;
- Chrome or Edge on a PC (for the browser route), with the WinUSB driver on Windows (installed once with Zadig);
- instead of a real GBA: the mGBA emulator with the provided script, for the Italian or English ROM — real GBAs and emulators play together, in the same room.
Cosa il progetto non faWhat the project doesn't do
Gli scambi e le lotte via internet passano dal Cable Club del gioco e si fanno sia dal pannello per PC sia dal browser (dal 26 agosto 2026; provati sul fisico il 27 agosto 2026), non da dentro l'emulatore. Il progetto non modifica la ROM (impossibile: è ROM a maschera) e non tocca il salvataggio. Non distribuisce il gioco né parti di esso: serve la propria cartuccia.
Online trades and battles go through the game's Cable Club and work both from the PC panel and from the browser (since 26 August 2026; tested on real hardware on 27 August 2026), not from inside the emulator. The project doesn't modify the ROM (impossible: it's mask ROM) and doesn't touch the save file. It doesn't distribute the game or any part of it: you need your own cartridge.
CreditiCredits
Questo progetto esiste perché si appoggia sul lavoro, pubblico e documentato, di molte persone e comunità. Grazie a tutte.This project exists because it builds on the public, documented work of many people and communities. Thanks to all of them.
Pokémon, Game Boy Advance e i nomi correlati sono marchi di Nintendo, Creatures Inc. e GAME FREAK inc. Questo è un progetto amatoriale senza fini di lucro, non affiliato né approvato da loro; non distribuisce il gioco e richiede una cartuccia originale.Pokémon, Game Boy Advance and related names are trademarks of Nintendo, Creatures Inc. and GAME FREAK inc. This is a non-profit fan project, not affiliated with or endorsed by them; it does not distribute the game and requires an original cartridge.
gen3-poke-multiplayer