Another World
Présentation générale
Un jeu culte des années 90
Another World est un jeu d'aventure action cinématique sorti en novembre 1991 qui a marqué une génération de joueurs.
L'histoire
Un scientifique effectue des expériences avec un accélérateur de particules quand un orage frappe son expérience et le projette dans un monde parallèle. Le joueur doit s'échapper de ce monde.
Créateur : Éric Chahi
- Développeur, graphiste et game designer
- Développé pratiquement seul pendant 2 ans
- Éric Chahi n'avait que 23 ans au début du développement
- Publié par Delphine Software et Interplay aux États-Unis
Innovation
L'approche cinématographique était extrêmement innovante pour l'époque
Architecture remarquable et empreinte mémoire
Des chiffres impressionnants
Taille exceptionnelle
- Exécutable : 24 kilooctets seulement
- Données et ressources : 1,2 mégaoctet au total
- Totalité du jeu : tient sur une seule disquette 3,5 pouces (1,44 Mo)
Comparaison avec aujourd'hui : plusieurs centaines de gigaoctets
Les trois piliers technologiques
- Moteur graphique vectoriel avec polygones pour animations cinématiques
- Moteur sonore compressé PCM avec sources numérisées (innovant pour l'époque)
- Machine virtuelle complète avec bytecode gouvernant l'ensemble du jeu
Compression des ressources
- 13 banques de données + 1 fichier index
- Compression avec algorithme Pak Killer
- Gain total de compression : 33%
- Sons : 16% de gain
- Musiques : 89% de gain
Machine virtuelle - Le cœur du moteur
Architecture Harvard
Caractéristiques principales
- 64 threads en parallèle avec multithreading coopératif
- 256 registres (considérés comme 256 variables de 16 bits)
- 512 octets de mémoire vive totale pour gérer toute la logique du jeu
- Pile pour les appels de fonctions
Séparation mémoire : code distinct des données (pas d'auto-réécriture de code)
Jeu d'instructions
- 219 instructions organisées en 5 groupes
- Instructions de base (29) et instructions étendues
- Organisation par fréquence statistique d'utilisation
5 groupes d'instructions : 1. Store : manipulation de variables 2. Arithmétique et logique : additions, soustractions, décalages 3. Branches et appels : saut conditionnel, appel de fonctions 4. Gestion des threads 5. Gestion des ressources
Fonctionnement des threads
Chaque thread exécute son code jusqu'à rencontrer une instruction de yield, puis rend la main au thread suivant. Cela permet une simulation de parallélisation avec des processeurs peu puissants de l'époque.
Ressources, vidéo et son
Système de ressources
7 types de ressources compilées
Sons, musiques, images, palettes, bytecode, polygones, hiérarchies de polygones
- Compilées dans 13 banques de données
- Référencées par 1 fichier index
- Chaque ressource stockée avec : type, numéro de banque, offset, taille
- Gestion d'état : chargée, déchargée ou requise
Sous-système vidéo
4 pages graphiques
- 1 page affichée à l'écran
- 3 pages cachées pour préparation
Rendu des polygones
- Polygones avec nombre pair de points
- Algorithme simple et compact : rendu ligne par ligne
- Scènes rendues de l'arrière vers l'avant (algorithme du peintre)
- Mise en cache des décors pour accélérer le rendu
Gestion des couleurs et effets
- 32 palettes de 16 couleurs par niveau
- Palette alternative pour compatibilité multiplateforme
- Transparence : OU logique 8 sur la couleur 16
- Masquage : lecture de couleur sur page alternative
Sous-système audio
Technologie tracker
- 4 canaux stéréo
- Représentation textuelle compacte de la musique
- Effets spéciaux et musique mixés en temps réel
- Très économe en espace mémoire
Sous-système d'entrée
Lecture des périphériques (joystick, clavier) et remplissage des registres de la machine virtuelle pour contrôle du jeu