Annexe technique

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.

Chapitres

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.

Images et sons

La galerie contient chaque scène, les portraits, les documents, les icônes d'objets et tous les sons.

Conventions d'adresses

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.

Niveaux de confiance

  • vérifié : lu dans le désassemblage à l'adresse citée, ou contrôlé sur un fichier.
  • déduit : la meilleure lecture des indices, sans preuve.
  • non vérifié : hérité de travaux antérieurs et pas recontrôlé.

Données de référence

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

Outils

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