Accueil · L'histoire · Solution · Galerie · English
Tout ce qui a été découvert en rétro-ingénierie de Maupiti Island (Lankhor, version PC) : le fonctionnement des programmes, chaque format de fichier, et les preuves. Ces pages révèlent l'intrigue. Les tables de symboles et les outils restent en anglais.
État. Les conteneurs, le codec LZ/Huffman, les
polices et l'encodage du texte sont décodés. Les 1 589 chaînes du jeu
sont dans game-text.txt, réparties dans les sept banques
qu'utilise MAUPITI1.EXE. Le format d'images est porté et
contrôlé par rapport au code du jeu, et chaque scène est rendue
(scenes/). Le moteur de parole est porté. La structure et
les principales règles de MAUPITI1.EXE sont cartographiées,
y compris le parcours gagnant, mais pas encore certaines parties de ses
réactions scriptées ni certains des 51 services INT 0FEh.
| Chapitre | Sujet |
|---|---|
| Les deux programmes | Comment maup.exe et MAUPITI1.EXE se
partagent le travail, démarrent et communiquent par
INT 0FEh. |
| Logique de jeu | Commandes, temps, conversations, ce qui décide chaque phrase, sympathie, fin. |
| Formats de fichiers, scènes et palettes | Archives, format d'images, calques d'une scène, système exact des palettes VGA. |
| Le codec de compression | Huffman adaptatif et LZ77. |
| Vidéo | Pages, planche de sprites, copies, code des adaptateurs. |
| Texte et polices | Codage des glyphes, chaînes sur 5 bits, banques de texte, polices proportionnelles. |
| Parole | La célèbre voix : données, règles du pilote, lecture, et un outil de synthèse à partir du texte. |
| Noms | Les noms dans les bases IDA et Binary Ninja. |
| Affirmations réfutées | Ce qu'on a cru, puis réfuté. |
| Questions ouvertes | Ce qui reste inconnu. |
La galerie contient chaque scène, les portraits, les documents, les icônes d'objets et tous les sons.
| Base | Règle |
|---|---|
| EA d'IDA, utilisée dans toute cette documentation | EA = file offset + 0xF800 |
Adresse Binary Ninja (maup.exe.bndb, projection à plat
du fichier) |
BN = EA - 0xF800, soit le décalage de fichier |
Décalage DS: |
EA = 0x1A420 + offset (paragraphe d'image
0xA42) |
cible far seg:ofs dans le fichier |
EA = 0x10000 + seg*16 + ofs ; les segments sont
relatifs à l'image |
| adresse à l'exécution | dépend du chargement ; DS = 298Ch n'était vrai que dans
une session capturée |
MAUPITI1.EXE a sa propre base,
EA = file offset + 0xEA00.
Générées à partir des tables du jeu.
| Fichier | Contenu |
|---|---|
| Dialogues | Chaque réponse pour chaque personnage et question, et ce qui la change |
| Actions | Par lieu et par zone : la réponse de chaque verbe, les objets, les contenants |
| Sujets débloqués | Ce qui débloque chaque sujet de conversation |
| Événements datés | Messages et changements de scène selon l'heure |
| Horaires | Où se trouve chaque personnage, à chaque demi-heure |
| Lieux | Sorties des lieux et coûts de déplacement |
| Questionnaire | Le questionnaire final, avec toutes les réponses |
| Documents | Chaque objet lisible avec ses pages, les journaux, les airs du piano |
| Tout le texte du jeu | Les 1 589 chaînes décodées, y compris un langage d'époque aujourd'hui offensant |
| Atlas des polices | Les deux polices, sous forme de texte |
Entrées de l'enregistrement
0x2A |
Chaque entrée de la table de données du jeu, avec ses appelants |
Symboles de
maup.exe |
Tous les noms, avec leurs adresses |
Symboles de
MAUPITI1.EXE |
Tous les noms, avec leurs adresses |
| Script | Usage |
|---|---|
maup_parse.py |
Lecteur des conteneurs et du codec : selftest,
extract-all --dir-out maupiti_out |
tools/verify_docs.py |
Contrôle les principales affirmations de la documentation, à l'octet près |
tools/render_font.py |
Régénère font-atlas-99.txt |
tools/mauptext.py |
Décode les chaînes : --out docs/game-text.txt |
tools/decode_image.py |
Décodeur d'images vers PNG : G3.CON 0x27 2 out.png, ou
G1.CON 0x1A 0 out.png --room (nécessite Pillow) |
tools/m1calls.py |
Lit MAUPITI1.EXE sous forme d'appels nommés avec
arguments : 0x1EBC8 0x1EF37 |
tools/game_logic.py |
Régénère logic/ depuis
l'enregistrement 0x2A |
tools/build_site.py |
Reconstruit le site web à partir de la documentation et des fichiers du jeu |
tools/render_scene.py |
Rend une scène avec tous ses calques, à n'importe quelle heure |
tools/verify_image.py |
Compare le décodeur d'images au code du jeu dans un émulateur
(nécessite unicorn) |
tools/maup_speech.py |
Fait dire n'importe quel texte français avec la voix du jeu |
tools/verify_speech.py |
Compare cet outil au code du jeu dans un émulateur (nécessite
unicorn) |
tools/m1index.py |
Liste les fonctions de MAUPITI1.EXE avec leurs
appelants et leurs tables |
tools/rec2a.py |
Découpe l'enregistrement 0x2A et indique qui utilise
chaque entrée |
tools/disasm.py |
ndisasm par EA : 0x11590 0x116A0 ; ajoutez
--m1 pour MAUPITI1.EXE |
tools/m1xref.py |
Appelants far et near de MAUPITI1.EXE, et stubs INT
0FEh |
tools/unlzexe91.py |
Décompresse MAUPITI1.olz et le compare à
MAUPITI1.EXE |