Animations · bei.pm
Les formats de fichiers décrits sur cette page sont basés sur l'analyse technique de la propriété intellectuelle de Dynamix, Inc. et Sierra Entertainment.
La propriété intellectuelle fait aujourd'hui partie de l'actif de Activision Publishing, Inc. / Activision Blizzard, Inc. et est actuellement détenue par Microsoft Corp..
Les informations ont été collectées par Reverse Engineering et Analyse de données dans le but d'archivage et d'interopérabilité avec des données historiques.
Aucune spécification propriétaire ou confidentielle n’a été utilisée.
Le jeu peut actuellement être acheté en téléchargement sur gog.com.
Maintenant, nous arrivons à la classe maîtresse des disciplines au sein des formats de données d'Outpost 2 :
Les animations.
Les listes d'animations commencent par un en-tête global, qui sert principalement à la vérification des données. S'ensuivent les définitions concrètes des animations, qui se divisent en 3 niveaux :
-
Animation
Une animation est la plus haute instance ; elle représente une animation d'une unité, d'un bâtiment ou d'une 'animation de particules' (impact de comète, météo, explosion) dans une situation donnée. -
Frame
Une frame est une image unique au sein d'une animation. Une animation peut contenir une ou plusieurs frames. -
Subframe
Un subframe est l'information indiquant qu'une certaine bitmap doit être dessinée à une position spécifique d'une frame selon certains critères. Une frame peut contenir un ou plusieurs subframes.
Ensuite, suivent directement les définitions des animations individuelles.
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractères | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Décalage | Type de données | Désignation | Explication |
---|---|---|---|
0x0000 | uint(32) | Nombre d'animations | Combien de jeux de données d'animation sont disponibles |
0x0004 | uint(32) | Nombre de frames | Combien de cadres devraient être présents au total |
0x0008 | uint(32) | Nombre de sous-trames | Combien de sous-cadres devraient être présents au total |
0x000c | uint(32) | Nombre d'entrées optionnelles | Combien de "entrées optionnelles" sont présentes. |
Animation
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractères | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0020 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Décalage | Type de données | Désignation | Explication |
---|---|---|---|
0x0000 | uint(32) | Inconnu 1 | Informations inconnues |
0x0004 | uint(32) | Boîte englobante : Liens | Indique le début gauche (en pixels) de la Bounding Box. |
0x0008 | uint(32) | Boîte englobante : Haut | Indique le début supérieur (en pixels) de la Bounding Box. |
0x000c | uint(32) | Boîte englobante : Largeur | Indique la largeur (en pixels) de la Bounding Box. |
0x0010 | uint(32) | Boîte englobante : hauteur | Indique la hauteur (en pixels) de la Bounding Box. |
0x0014 | uint(32) | Décalage : X | Indique le point central horizontal de l'animation |
0x0018 | uint(32) | Décalage : Y | Indique le centre vertical de l'animation |
0x001c | uint(32) | Inconnu 2 | Informations inconnues |
0x0020 | uint(32) | Nombre de frames | Indique combien de cadres d'animation sont inclus dans cette animation |
0x0024 | uint(32) | Nombre de fenêtres | Indique combien de fenêtres doivent être utilisées lors du dessin |
Les données de la couche supérieure, de l'animation, sont principalement des données administratives - la Boundingbox désigne les coordonnées de la marque autour du véhicule/bâtiment, lorsque celui-ci est sélectionné, et indique également quelle zone doit être cliquable.
L'offset détermine principalement le "point zéro" ; le point à additionner ou à soustraire aux coordonnées internes du jeu. On pourrait également dire de manière mathématique : l'offset désigne ici l'origine des coordonnées.
Les fenêtres, tout comme l'offset, se composent chacune de 4 valeurs uint(32), qui définissent une zone considérée comme utilisable pour des sous-images individuelles. En dehors des fenêtres, il ne doit pas être dessiné, sauf si cela est prévu pour la bitmap.
Cadre
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractères | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Décalage | Type de données | Désignation | Explication |
---|---|---|---|
0x0000 | uint(8) | Nombre de sous-châssis et bascule pour option 1, 2 | Cette valeur contient :
|
0x0001 | uint(8) | Inconnu 1 et bascule pour optionnel 3, 4 | Cette valeur contient :
|
0x0002 | uint(8) | Optionnel 1 | Inconnu |
0x0003 | uint(8) | Optionnel 2 | Inconnu |
0x0004 | uint(8) | Optionnel 3 | Inconnu |
0x0005 | uint(8) | Optionnel 4 | Inconnu |
Sous-châssis
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | caractères | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Décalage | Type de données | Désignation | Explication |
---|---|---|---|
0x0000 | uint(16) | Bitmap-Id | Indique quelle bitmap doit être utilisée pour ce sous-cadre |
0x0002 | uint(8) | Inconnu 1 | C'est inconnu - je soupçonne cependant fortement qu'il s'agit d'une priorité de rendu (couche Z). |
0x0003 | uint(8) | Id de sous-châssis | Indique dans quel sous-élément nous nous trouvons |
0x0004 | sint(16) | Décalage - Horizontal | Indique où le sous-frame doit être placé à l'intérieur du cadre, ou de combien de pixels la bitmap doit être décalée horizontalement. |
0x0006 | sint(16) | Décalage - Vertical | Indique où le sous-cadre doit être placé à l'intérieur du cadre, ou de combien de pixels l'image bitmap doit être déplacée verticalement |
Nous pouvons désormais assembler des cadres individuels ainsi que des animations complètes, comme démontré ici par un exemple d'une animation plus complexe, l'animation avec l'index 500.
Animation 500
L'animation 500 montre comment un fourgon Plymouth, chargé de minéraux ordinaires, est déchargé. C'est l'une des rares animations qui utilise la fonctionnalité de fenêtrage.
Voici comment l'ensemble de l'animation peut être assemblé.
Malheureusement, il y a encore un problème avec la trappe de chargement supérieure, car le bit correspondant dans les informations de type graphique n'est pas défini.
Voici quelques autres sprites magnifiquement animés du jeu :