Comme promis voici quelques informations.
Le jeu est constitué de deux disquettes de 1,2 Mo :
- La première est formatée en FAT-16 et contient les binaires du jeu.
- La seconde est un disque de données ; il n'est pas possible de lancer le jeu avec uniquement la première disquette.
En ce qui concerne la première disquette, voici un bref résumé de son contenu :
Un ensemble de fichiers propre à MEG-DOS (un système d'exploitation compatible MS-DOS développé et vendu par la société SPS pour le PC98), comprenant :
-
IO98.SYS (équivalent à
IO.SYS dans DOS 2.x)
-
MEGDOS.SYS (équivalent à
MSDOS.SYS dans DOS 2.x)
-
CONFIG.SYS : Fichier de configuration pour MEG-DOS, 4 paramètres :
-
files : définit le nombre maximum de fichiers pouvant être ouverts simultanément
-
buffers : taille du tampon mémoire utilisé sur la disquette (numéro 2?) pour stocker les images et d'autres fichiers temporaires
-
device : permet de charger un pilote, ici
MMD2.SYS qui est le pilote audio du jeu, avec une allocation mémoire de 4kb
-
shell : le programme chargé à la place de
COMMAND.COM
D'autres fichiers sur la première disquette incluent :
-
MMD2.SYS : Pilote propriétaire développé en interne par Microcabin, assurant l'interface avec les puces YM2203/2608x (
Music Driver version 2.01 「あけみちゃん」(include 「チャーリーくん」) Copyright © 1987,1988 Microcabin co./Xtal soft co.) une entrevue concernant ce driver et son usage dans MSX :
https://www.msx.org/...rview-日本語
-
VOICE.BIN : FM
-
M00000.BIN : BGM1
-
M00001.BIN : BGM2
-
M00002.BIN : BGM3
-
M00003.BIN : BGM4
-
M00004.BIN : BGM5
-
M00005.BIN : BGM6
-
TRB.EXE : Le fichier exécutable principal du jeu, responsable, entre autres, du chargement des fichiers TBL et TBY (comme observé dans le dump ASM)
-
PIYO.EXE : Le moteur de scripting du jeu
-
PAT.COM : Il s'agit probablement d'un patch destiné à apporter des modifications ou des améliorations, l'analyse du code ASM n'a pas donné grand-chose, c'est un fichier COM donc pénible à reverse.
-
S00000.TBL : Tables des pointeurs pour le jeu, contient également le texte du menu d'action présent à droite de l'écran principal.
-
S00000.TBY : Renferme l'ensemble du texte du jeu, formaté avec le langage de script Piyo (qu'il faudra lui aussi reverse, au moins partiellement).
En ce qui concerne la deuxième disquette, je présume qu'elle contient les images et sert également à stocker des données temporaires pendant l'exécution du jeu.
Il faut savoir qu'à l'époque il était courant pour un dev de créer son propre format propriétaire pour un peu tout et n'importe quoi. C'est notamment le cas du format des données utilisé sur la seconde disquette, pour la musique (le MIDI n'était pas encore démocratisé) et ultimement des images (je ne pense pas que nous ayons besoin de changer le contenu des graphiques, du moins au début).
Dans l'immédiat le focus se portera donc sur les fichiers
S00000.TBL et
S00000.TBY.
S00000.TBL contient 2 tables, une pour le texte présent dans menu et une seconde pour le texte qui est affiché globalement dans le jeu.
La première table débute à 0x1C2, les adresses sont à lire en little-endian, par exemple 5C02 pointe sur l'adresse 0x25C, le texte de menu se trouve juste en dessous.
Comme une image vaut mille mots, voici à quoi cela ressemble (1ier pointeur en jaune, second en bleu, troisième en orange, séparateur en violet) :
La seconde table débute à 0x4BE, la lecture se fait de la même manière que pour les pointeurs du menu d'action, mais les adresses elles concernent le fichier
S00000.TBY.
Dans le cas du texte (et contrairement au menu), l'extraction du contenu propre à chaque pointeur retourne systématiquement le texte avec le formatage propriétaire du moteur Piyo, ex abrégé :
[/],!48,34,!,?48,{<0F><00>[#,"2,"55,/216],?34,{<11><00>[#,"32,"107,/232]],?75,{・00>[>@120,@145,{・00>["141,=144]一 弥 「とうとう見つけたぞ! 一弥!!」
La meilleure approche selon moi serait de recréer un fichier
TBL avec des pointeurs à jour et un fichier
TBY avec la traduction + le contenu binaire non modifié.
L'un des enjeux que j'anticipe c'est que du fait qu'ils ont eu la belle idée de concaténer dans le fichier TBL deux tables, traduire les menus en français pourrait décaler l'emplacement d'origine de la seconde table et provoquer un crash complet du programme.
Quant à la manière dont le jeu effectue le mapping sur les entrées du fichier TBL, cela reste une interrogation : est-ce séquentiel, calculé, ou statiquement défini quelque part dans le binaire ? (Auquel cas il faudra soit trouver une façon de ne pas trop allonger le texte du menu, il y a quelques leading zeros mais pas de quoi ajouter grand-chose OU aller modifier le code assembleur pour le faire pointer sur la nouvelle adresse).
@FrozenOwl, la logique des pointeurs et du language de script est identique dans le jeu MSX, mais tu comprendras que travailler sur le système de fichier de l'image de la disquette directement pose problème tant pour le calcul des adresses que pour faire de l'espace afin de déplacer les choses (cela doit être faisable mais je ne connais pas bien cette machine.)
Dans un prochain message, je vous fournirai le code que j'ai développé pour extraire le contenu de la seconde table (code qui pourra être adapté pour la première table), ainsi que les outils nécessaires pour manipuler les fichiers et tester les modifications.