S.O.S. - SNES

De T.R.A.F - Wiki
Aller à : navigation, rechercher

Présentation

S.O.S (ou Septentrion dans la version originale) est un jeu sorti sur Super Nintendo qui peut s'apparenter à une simulation de Titanic. On incarne un personnage qui doit sauver différents passagers. Un remake existe pour Playstation, et il est disponible sur le Playstation Network.

Difficultés techniques

Le jeu utilise un texte compressé : le jeu utilise un index sur 5 bits qui permettra d'aller récupérer la bonne lettre grâce à un tableau ASCII situé dans la ROM. Selon cet index, la lettre sera en majuscule ou pas.

Les graphismes sont eux aussi compressés. Je n'ai pas analysé plus le format, m'étant borné à commenter le code assembleur de la routine de décompression.

Il n'existe pas de table de pointeur pour le texte compressé. Au lieu de ça, des adresses sont codées "en dur" pour chaque personnage pouvant être choisi (3), ainsi que 3 autres adresse correspondant à des noms de personnages, et d'autres dialogues appartenant à différents personnages.

Ce jeu, et le code source de mon extracteur de script, peut servir pour apprendre à décompresser des données en suivant exactement l'algorithme du jeu (et non en essayant de l'analyser pour faire son propre algorithme).

Cette technique a certains avantages :

  • On est sûr que les données seront bien extraites, à partir du moment où le code programmé est le même que le code du jeu.
  • Il n'est pas nécessaire de prendre du temps à analyser le code assembleur pour comprendre la logique de la routine.

Néanmoins, un problème à cette méthode est lors de la recompression : il faut absolument comprendre le format utilisé pour programmer le compresseur compatible. Mais il est plus facile d'analyser du code C (et de le debugger), que du code assembleur.

Extraits de code

La routine du texte de S.O.S en assembleur et en C

La routine de décompression des graphismes de S.O.S en assembleur

Fonte du jeu

Fonte.png