Moteur open source · MIT

OPENPLATINUM

Pokémon Platine, réécrit en natif pour PC : un moteur C++/OpenGL qui lit les vraies données du jeu depuis ta propre ROM. Aucune émulation.

Gratuit · MIT · aucune ROM incluse
Écran-titre · in-enginePL.01
build v0.1.0-dev Windows x64 ROM .nds requise C++17 · SDL3 · OpenGL 3.3
ROM .NDSton dump · FR/US
FAT / FNTfilesystem Nitro
NARCarchives du jeu
NSBMD · SCR · MSGformats parsés
MOTEUR C++VM + rendu + SDAT
PIXELSton écran, 60 fps
Le dossier

Un moteur, pas un émulateur.

OpenPlatinum réécrit le moteur de terrain de Pokémon Platine (DS) en C++17 natif : le moteur lit lui-même le système de fichiers de la cartouche et les formats Nitro (cartes, modèles 3D, collisions, scripts d'événements, banques de texte chiffrées), puis exécute les scripts du jeu sur sa propre VM.

La décompilation pret/pokeplatinum sert de référence comportementale : chaque fonction du moteur pointe vers la fonction d'origine qu'elle reflète. Plus rapide qu'un émulateur, plus moddable qu'une ROM : une base propre pour les fan-projects de demain.

Émulateur DS
OpenPlatinum
Ce qui s'exécute
La console entière, traduite instruction par instruction
Uniquement le code du jeu, réécrit en C++17 natif
Modder le moteur
La ROM reste un binaire fermé
Source MIT, chaque fonction annotée sur pokeplatinum
ROM requise
Oui
Oui, la tienne, lue localement
La chaîne

La chaîne, de la ROM au pixel.

Quatre étapes, aucune magie : chaque couche est un composant réel du dépôt, et chaque sortie vient des données de ta cartouche.

01 · Lire

Le système de fichiers de la cartouche.

Le moteur ouvre le .nds comme le ferait la console : en-tête, table d'allocation FAT, table de noms FNT, puis les archives NARC (conteneur BTAF/BTNF/GMIF de Nintendo). Chaque sous-fichier est adressé par index, en mémoire, sans extraction.

FAT/FNT · accès direct aux membres NARC · conteneurs BTAF/GMIF parsés natifs Cache · membres déchiffrés à la demande
rom/platine.ndsNITRO FS
├── header.bin        · signature CPUF/CPUE
├── FAT / FNT         · tables de fichiers
└── data/
    ├── pl_msg.narc       · 361+ banques de texte
    ├── field/…           · scripts d'événements
    ├── pl_bag_gra.narc   · écran Sac (BTAF/GMIF)
    ├── pl_pokegra.narc   · sprites, déchiffré
    ├── fldtanime.narc    · boucles eau/fleurs
    └── sound_data.sdat   · SSEQ / SBNK / SWAR
02 · Comprendre

Chaque format Nitro a son parseur.

Les données brutes deviennent des structures utilisables : modèles, textures, hauteurs de collision, police bitmap, texte chiffré, partitions audio. Chaque parseur est écrit contre la spécification du format, vérifiée sur la décompilation pokeplatinum.

12+ formats couverts de bout en bout · zéro asset extrait : tout est lu à la volée.

NSBMDModèles 3D du terrain : meshes, matériaux, jointsGX display lists
BTX0 / TEX0Textures compressées et palettes, formats 0-7texels → RGBA
BDHCHauteurs de collision et comportements par tuileheightmap + flags
NFGRLa police bitmap de la DS, glyphe par glyphewidths + atlas
pl_msgBanques de texte chiffrées, charmap Gen 4XOR key → UTF-8
SDATSéquences SSEQ, instruments SBNK, samples SWAR→ mixeur PCM
03 · Exécuter

Une VM qui parle la langue des scripts.

Les événements de Platine sont du bytecode : chaque map embarque ses scripts, et le moteur les exécute opcode par opcode : dialogues, menus, mouvements, warps, captures. Le même script tourne ici comme sur DS, parce que la sémantique est reproduite à la fonction près.

~475 commandes implémentées Texte FR/US via pl_msg déchiffré Callbacks moteur : audio, mouvement, UI
script.cppScriptVM::step()
case 0x0040: case 0x0041: case 0x0044: case 0x0045: {
    // Init[Local|Global]TextMenu · DS field_menu.c
    menu_items.clear();
    menu_dest   = (int)_arg[4];  // var de sélection
    menu_cancel = (int)_arg[3];  // slot annuler
    menu_bank = (op == 0x0040 || op == 0x0044)
        ? 361 : -1;   // TEXT_BANK_MENU_ENTRIES
} break;
case 0x0042:  // AddMenuEntryImm text,slot
    menu_items.push_back({(int)_arg[1], (int)_arg[0]});
    break;
case 0x0043: case 0x0047:  // ShowMenu / ShowListMenu
    _st = MENU; break;
04 · Restituer

Le résultat : Sinnoh, en natif.

Tout converge vers la sortie : le terrain NSBMD passe par le renderer OpenGL 3.3 (éclairage GX, caméra DS, edge marking), l'interface se dessine avec la vraie police NFGR, et le séquenceur SDAT rejoue musiques, effets et cris depuis les banques SBNK/SWAR. Ce que tu vois et entends est produit par ta ROM, pas par des assets recréés.

Route 202 · in-engine256×192 ×2 · DS
Le moteur, en chiffres
0cmd
commandes de scripts exécutées
0%
d'émulation, tout est natif
0SYS
sous-systèmes suivis et documentés
0ROM
versions gérées : FR et US
Portfolio

Le jeu en images.

Chaque carte, PNJ, dialogue et cinématique ci-dessous est produit par les données de la ROM, chargées à l'exécution. Rien n'a été placé à la main.

Combat · stats réelles
Intro · cinématique
Bonaugure · monde 3D
Route 202 · déplacement
Options · écrans DS + natifs
Avancement

Le moteur tourne, le jeu suit.

Le moteur tourne de bout en bout : monde, scripts, combats sur le vrai layout deux écrans, stockage PC, et l'audio du jeu en natif.

20 implémenté · 3 en cours · 1 à faire20 / 24
Implémenté20 / 24
  • Système de fichiers NDS / NARCFAT/FNT, BTAF/BTNF/GMIF, membres cachés
  • Matrice de maps + streamingOverworld continu, cellules chargées autour du joueur
  • Modèles NSBMD / textures TEX0Terrain, bâtiments, props, sets de textures par zone
  • Collisions & comportements tuilesHauteurs BDHC, bits d'attributs, rebords
  • Déplacement joueurMachine à pas DS : turn, walk, run, bump, jump
  • Warps & transitionsPortes, tapis, escaliers ; facing à l'arrivée ; warps 0x100
  • VM de scripts d'événements~475 commandes : chemin de l'histoire couvert, systèmes optionnels comptés
  • Objets / PNJPlacement, flags de visibilité, scripts de mouvement
  • Événements coord / BGTriggers, panneaux, objets cachés
  • Texte du jeu (FR/US)Déchiffrement pl_msg, charmap Gen 4
  • Animations BCAPortes, valise, balls rebondissantes (NSBCA)
  • Scène de sélection du starterModèles ev_pokeselect réels, caméra DS
  • Sprites Pokémonpl_pokegra déchiffré, 2 frames 80×80 ping-pong
  • Blackout / respawnDernier Centre Pokémon mémorisé, soin au réveil
  • Options en jeuLignes DS + graphismes natifs, options.cfg
  • Capture PokémonFormule Gen 4 : balles, modifieurs, secousses, taux par espèce
  • Boucles de textures (fldtanime)Eau/fleurs animées BTX0 par zone
  • SauvegardeSave v8 : map, position, équipe, boîtes PC éparses, flags, respawn
  • Audio (SDAT)Séquenceur SSEQ + banques SBNK/SWAR : musiques, effets, cris
  • Stockage PCScript commun, menus DS, appli ; boîtes éparses, capture vers boîte
En cours3 / 24
  • Rencontres sauvagesTables et taux réels, capture fonctionnelle
  • CombatsLayout deux écrans DS, sprites dresseur, boutons ROM, XP, capture vers boîte ; doubles à venir
  • Menu X / Sac / ÉquipeVrais écrans DS (sac pl_bag_gra, équipe pl_plist_gra), polish en cours
À faire1 / 24
  • Pokédex, objets clés·
Journal

Dernières nouvelles.

Tout le journal
Pour jouer

Trois étapes vers Bonaugure.

01
Télécharger

La build Windows se prend sur la page releases du repo.

02
Ta ROM

Dépose ton propre dump .nds de Pokémon Platine (FR ou US) dans le dossier rom/.

03
Jouer

Lance OpenPlatinum.exe : la ROM est lue au démarrage, rien ne quitte ta machine.

Prise en main

Aux commandes.

Marcher↑↓←→ / ZQSD/WASD
CourirSHIFT (chaussures obtenues)
Interagir / validerENTRÉE ESPACE E
AnnulerRETOUR / Q
Menu XX · Pokédex, Sac, Save, Options
DebugF1 · téléports, flags, scripts
Rejoindre le projet

Le code est à toi.

Le code complet est sur GitHub : moteur C++17, SDL3, OpenGL 3.3, build Meson/Ninja pour Windows x64. Étoiles, issues et contributions bienvenues.

FAQ

Questions fréquentes.

C'est légal ?
OpenPlatinum ne contient aucune donnée Nintendo. Tu dois posséder le jeu et dumper ta propre cartouche. Les règles sur les copies privées varient selon les pays. Le projet ne lie vers aucune ROM.
Quelle ROM faut-il ?
Pokémon Platine, version française (CPUF) ou américaine (CPUE). Les formats de données sont identiques : cartes, scripts et combats sont les mêmes, et le texte suit la ROM chargée.
C'est fini ?
Pas encore : build de développement. Le moteur tourne (monde, scripts, combats, stockage PC, audio) mais la progression complète de l'histoire reste à faire. Attends-toi à des arêtes vives.
Sur quoi ça tourne ?
Windows 10/11 x64 pour l'instant. Le moteur est du C++17 / SDL3 / OpenGL 3.3 portable. D'autres plateformes sont envisageables.
Le jeu envoie-t-il des données ?
Rien. Pas de compte, pas de pub, pas de télémétrie. Ta ROM est lue localement et ne quitte jamais ta machine.
Comment aider ?
Le code est sous licence MIT sur GitHub : issues, PR et étoiles bienvenues. Voir le guide de contribution.
Par la même équipe

Pokémon Prism FR

Le patch français de Pokémon Prism : patcher en ligne, réparateur de sauvegarde, livreur dans les Centres Pokémon.

Téléchargerv0.1.0-dev