OpenPlatinum v0.1.0-dev Télécharger
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.

Télécharger Code source Discord
Gratuit · MIT · aucune ROM incluse
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

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.

Ta ROM reste en localLue sur le disque, jamais envoyée.
Aucune donnée NintendoLe moteur est réécrit de zéro.
Pensé pour le moddingC++ lisible, annoté sur pokeplatinum.
Sous le capot

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.

NSBMD

Modèles 3D du terrain : meshes, matériaux, joints

GX display lists
BTX0 / TEX0

Textures compressées et palettes, formats 0-7

texels → RGBA
BDHC

Hauteurs de collision et comportements par tuile

heightmap + flags
NFGR

La police bitmap de la DS, glyphe par glyphe

widths + atlas
pl_msg

Banques de texte chiffrées, charmap Gen 4

XOR key → UTF-8
SDAT

Sé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
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
Capturé depuis le moteur

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
État du développement

Avancement

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

Contrôles

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

Open source · MIT

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

Questions

FAQ

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.