Formats de fitxer d'Outpost 2 · bei.pm

Aquest text ha estat traduït de manera automatitzada per OpenAI GPT-4o Mini.

Els formats de fitxer descrits en aquesta pàgina es basen en l'anàlisi tècnica de la propietat intel·lectual de Dynamix, Inc. i Sierra Entertainment.
La propietat intel·lectual forma part actualment de la massa d'Activision Publishing, Inc. / Activision Blizzard, Inc. i actualment és propietat de Microsoft Corp..

La informació s'ha recopilat mitjançant Enginyeria inversa i Anàlisi de dades amb l'objectiu d'arxivar i garantir la interoperabilitat amb dades històriques.
No s'han utilitzat especificacions propietàries ni confidencials.

El joc es pot adquirir actualment a gog.com com a descàrrega.

Obra d'art del joc

La següent sèrie d'articles documenta les meves conclusions sobre els formats de dades en el joc d'estratègia en temps real "Outpost 2: Divided Destiny", que va ser publicat per Sierra el 1997 i desenvolupat per Dynamix.

Em vaig dedicar principalment a l'anàlisi de les dades del joc - i el que se'n pot fer - aproximadament des de l'1 de novembre de 2015 fins al 14 de novembre de 2015.

Segons la informació que he pogut obtenir fins ara, Dynamix - com tants altres empreses comercials - no va desenvolupar alguns formats de dades específicament per a Outpost 2, sinó que també els va utilitzar en altres projectes com ara la sèrie Mechwarrior (modificats).
A més, es pot constatar que la capacitat d'innovació dels formats de dades es limita pràcticament i sovint es basa en conceptes més antics de formats habituals com JFIF i RIFF.

Per a la interpretació de les taules i formats de dades, hi ha més informació disponible a Què és què?.
Les dades aquí indicades s'han d'entendre generalment com a Little Endian.

En conclusió, es pot dir que l'enginyeria inversa va ser molt divertida, tot i que no és completa.
Naturalment, també recomano jugar al joc per si mateix, ja que ofereix mecàniques de joc interessants.

Introducció

Els formats de dades utilitzats per Outpost 2 tenen una estructura que recorda a JFIF / PNG - els blocs de dades individuals sempre tenen un capçal de 8 bytes. Per tant, m'estalvio documentar els caps individuals als llocs específics corresponents i només documentaré les desviacions.

El format és sempre el següent; les dades útils reals estan incrustades dins d'ell:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics

Conté la informació sobre què s'ha d'esperar al pròxim bloc de dades.

Valors coneguts:

  • 0x204C4F56 ('VOL '):
    Volum
  • 0x686C6F76 ('VOLH'):
    Capçalera del volum
  • 0x736C6F76 ('VOLS'):
    Cadenes del volum
  • 0x696C6F76 ('VOLI'):
    Informació del volum
  • 0x4B4C4256 ('BLCK'):
    Bloc del volum
  • 0x504D4250 ('PBMP'):
    Dades gràfiques
  • 0x4C415050 ('PPAL'):
    Paleta de colors
  • 0x4C415043 ('CPAL'):
    Contenidor de paletes de colors
  • 0x64616568 ('head'):
    Capçalera
  • 0x61746164 ('data'):
    Dades útils
0x0004 uint(24) Longitud del bloc

Conté la informació sobre quina mida (en Byte) té el següent bloc de dades.

En aquest cas, es refereix només a les dades útils - els 8 bytes d'encapçalat no s'inclouen.

0x0007 uint(8) Banderes?

Es desconeix per a què serveix exactament aquest bloc.

En els volums, aquest valor és freqüentment 0x80, mentre que en altres fitxers és sovint 0x00. Això suggereix que es tracta d'un conjunt de flags.

Volums

Els volums són un contenidor de dades per al joc, similar a un format d'arxiu com ara Tarball. Almenys a Outpost 2, el format només reconeix fitxers - no carpetes. Probablement, però, es podrien simular aquestes últimes mitjançant noms de fitxer adequats.

Un volum consta del capçalera del volum així com de diversos blocs de volum que corresponen als fitxers concrets.

"Volums" són els fitxers amb l'extensió 'vol' a la carpeta del joc.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 56 4f 4c 20 -- -- -- -- -- -- -- -- -- -- -- -- V O L . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

Capçalera de volum

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 76 6f 6c 68 -- -- -- -- -- -- -- -- -- -- -- -- v o l h . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

El volum header no conté cap dada útil.
Només serveix com a contenidor.

Com a primera dada al volum header s'han de trobar les cadenes del volum; a continuació hi ha les informacions del volum.

Cadenes de volum

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes
Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 76 6f 6c 73 -- -- -- -- -- -- -- -- -- -- -- -- v o l s . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes
0x0008 uint(32) Longitud del payload

Indica quants bytes de les dades següents són realment dades útils.

Les dades restants de la llista de cadenes de volum semblen ser considerades com a escombraries.

En fitxers amb data posterior, aquestes 'dades restants' són 0x00, la qual cosa podria indicar deficiències amb la cadena d'eines durant el desenvolupament del joc, és a dir, que un desenvolupador no es va preocupar de la correcta inicialització dels búfers fins molt tard, ja que no té cap influència en el joc si les dades estan inicialitzades o no.

0x000c uint(8)[] Llista de noms de fitxers

Aquí es tracta d'una llista terminada en 0 bytes de noms de fitxers que, almenys en el component de dades present, només sembla esperar caràcters ASCII.

No és necessari, en analitzar les dades, avaluar aquest bloc de dades amb més detall, ja que en la informació del volum es referencien directament els offsets dels noms de fitxers.

Les cadenes de volum són una llista de noms de fitxers que es troben dins del volum.

Informació del volum

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 76 6f 6c 69 -- -- -- -- -- -- -- -- -- -- -- -- v o l i . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

La informació de volum conté detalls més específics relacionats amb els fitxers. D'alguna manera, és una mena d'entrada de directori FAT (FAT = File Allocation Table).

El nombre de fitxers es calcula dividint la mida del bloc per la longitud de les entrades del directori - 14 bytes.

Les entrades de directori individuals tenen l'estructura següent:

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Desplaçament del nom del fitxer

Indica en quin desplaçament (!) dins de la llista de noms de fitxer (cadenes de volum) es troba el nom del fitxer.

Es refereix al començament del bloc de dades útils.

0x0004 uint(32) Desplaçament de fitxer

Indica en quin offset dins del fitxer de volum s'ubica el fitxer.

0x0008 uint(32) Mida del fitxer

Indica quina és la mida del fitxer en bytes.

0x000c uint(16) Banderes?

Ofereix aparentment informació addicional sobre la codificació de fitxers.

  • 0x03 està establert quan el fitxer està comprimit. Sembla que aquí s'utilitza un arbre de Huffman.
  • 0x80 sembla estar sempre establert.

Bloc de volum

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 56 42 4c 48 -- -- -- -- -- -- -- -- -- -- -- -- V B L H . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

Un volum de bloc és un contenidor que allotja fitxers. Conté només una vegada més - a causa del format del bloc - la mida del fitxer, i després segueixen directament les dades útils.

rajoles

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 50 42 4d 50 -- -- -- -- -- -- -- -- -- -- -- -- P B M P . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

Les fitxes són un format gràfic de bitmap específic d'Outpost-2. S'estenen a través de 13 conjunts de fitxes, anomenats "wells" (well0000.bmp fins well0012.bmp), que es troben dins del volum maps.vol.

Així, els conjunts de fitxes / wells contenen el següent:

Nom del fitxer Contingut
well0000.bmp Una gràfica de 32x32px, de color blau - ideal per provar si el teu carregador d'imatges funciona
well0001.bmp Conté roca clara, cadenes muntanyoses sobre roca clara i nombroses variants de cràters d'impacte en roca clara
well0002.bmp Conté 'Doodads' de roca clara - és a dir, elements que poden ser col·locats per decoració (o intencionadament com a estructura, com per exemple murs) sobre roca clara, incloent vegetació
well0003.bmp Conté una estructura semblant a una crosta sobre roca clara
well0004.bmp Conté roca fosca, cadenes muntanyoses sobre roca fosca i nombroses variants de cràters d'impacte en roca fosca
well0005.bmp Conté 'Doodads' de roca fosca - és a dir, elements que poden ser col·locats per decoració (o intencionadament com a estructura, com per exemple murs) sobre roca fosca
well0006.bmp Conté una estructura semblant a una crosta sobre roca fosca, així com transicions entre roca clara i roca fosca
well0007.bmp Conté lava, incloent 4-5 fotogrames d'animació de la mateixa
well0008.bmp Conté sorra i nombroses variants de cràters d'impacte en sorra
well0009.bmp Conté 'Doodads' de sorra - és a dir, elements que poden ser col·locats per decoració (o intencionadament com a estructura, com per exemple murs) sobre sorra
well0010.bmp Conté 48 transicions de sorra a roca clara i roca fosca
well0011.bmp Conté les capes polars del mapa, amb roca fosca com a substrat
well0012.bmp Conté les capes polars del mapa, amb roca clara com a substrat

És molt recomanable per a una implementació acurada no renderitzar les fitxes amb antelació per tal de fer-ne la memòria cau, ja que les dades per al cicle de dia/nit encara s'han de processar - i s'acumularien moltes dades.

Les fitxes són gràfics de 8bpp amb paleta indexada de 32x32 píxels de resolució, que estan disposades de manera col·locada. En un conjunt de fitxes així creat, però, es poden obtenir moltes més

El contenidor principal consta de 2 seccions: head i data.

Capçalera de les Fitxes

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes
0x0008 uint(32) Versió / Banderes?

Això podria ser una indicació de la versió del format de fitxer; en tots els fitxers que tinc, aquí apareixia el valor 0x02

0x000c uint(32) Amplada (Resolució horitzontal)

Indica quina és l'amplada del fitxer d'imatge (en píxels).

En tots els pous d'Outpost 2 s'espera aquí el valor 0x20 o bé 32.

0x0010 uint(32) Alçada (Resolució vertical)

Indica quina és l'alçada del fitxer d'imatge (en píxels).

En tots els pous d'Outpost 2 s'espera aquí el valor 0x20 o 32.

0x0014 uint(32) Profunditat de color?

La importància d'aquest valor és desconeguda.

Com que apareix amb el valor 8 en tots els fitxers examinats, podria tractar-se d'una indicació de la profunditat de color.

0x0018 uint(32) Profunditat de color 2?

La importància d'aquest valor és desconeguda.

Possiblement es tracta d'una profunditat de color 'objectiu'.

Després d'aquests detalls, es presentarà un fitxer de paleta en format RIFF estàndard. La especificació exacta es pot trobar - ja que les paletes apareixen en altres llocs - a Paletes.

Dades de les fitxes

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

Finalment, segueixen les dades de píxels en brut, de dalt a l'esquerra a baix a la dreta, línia per línia.
El valor de les dades en les gràfiques que normalment es presenten com a imatges de 8bpp correspon a l'índex del color a la paleta de colors.

Les dades de píxels comencen a dalt a l'esquerra i acaben a baix a la dreta.

El motor del joc dibuixa els tiles *probablement* sota demanda.
Això sembla ser degut, entre altres coses, al cicle dia-nit, que coneix 32 graduacions de tiles individuals. Sembla que es resta 'una mica' del valor de brillantor. Encara no s'han pogut determinar els valors exactes, estic treballant sobre la base de càlcul

v *= (daylight / 48) + 0.25;

amb les dades HSV dels píxels, on daylight és un valor de 0-31 i v és un valor entre 0-1. A més, cal tenir en compte que al mapa hi ha un marge de 16 tiles cap a l'esquerra i cap a la dreta (que serveix per aparèixer unitats de manera invisible).

A més, sembla que el cicle dia-nit actualitza només una columna del mapa per cada cicle del joc.
Un cicle dia-nit accelerat és, per tant, així:

Visualització del cicle dia-nit

PRT

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 43 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- C P A L . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud de palets

Indica, a diferència del format de bloc normal, el nombre de paletes que es poden trobar en aquest fitxer - no la longitud del bloc en bytes.

0x0007 uint(8) Banderes

Probablement, com és habitual, banderes.

Tanmateix, no conec cap bandera; ja que tots els valors que conec corresponen a 0x00, també seria potencialment possible que el nombre de paletes fos simplement un uint(32).

No sé exactament què significa PRT; una possibilitat podria ser 'Palette and Resource Table' - ja que aquest fitxer - que es troba com a op2_art.prt dins de maps.vol - és un d'aquest tipus, o això descriuria força bé la seva funció.

Aquest fitxer conté una llista de paletes, una taula sobre totes les imatges de mapa utilitzades, totes les definicions d'animació i una sèrie de dades desconegudes. Segueix de manera laxa el format de contenidor anterior, ja que no tots els registres segueixen aquest esquema.

La secció CPAL (que probablement significa contenidor de paletes) només envolta les dades de paleta, especificant quantes de les habituals paletes de 8 bits de 1052 bytes hi ha disponibles.

La indicació de 1052 bytes no es considera vinculant, ja que el format de paleta podria preveure diferents mides de paleta. Només s'aplica al conjunt de dades amb el qual es lliura Outpost 2.

Després de les llistes de paletes, segueix immediatament i sense un encapçalament introductori, la llista d'imatges de mapa; igualment, immediatament segueixen les llistes d'animacions.
Ambdues s'inicien amb un uint(32) (o de nou uint24 + uint8 flags?) que conté el nombre de registres.

Paletes

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 50 50 41 4c -- -- -- -- -- -- -- -- -- -- -- -- P P A L . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud de palets

Indica, a diferència del format de bloc normal, el nombre de palets que es poden trobar en aquest fitxer - no la longitud del bloc en bytes.

0x0007 uint(8) Banderes

Probablement, com és habitual, banderes.

No obstant això, no conec cap bandera; com que tots els valors que conec corresponen a 0x00, també seria potencialment possible que el nombre de paletes fos simplement un uint(32).

La informació de les palets és molt fàcil de llegir.
Consisteix en un encapçalament i un segment de dades.

Capçalera de paletes

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 68 65 61 64 -- -- -- -- -- -- -- -- -- -- -- -- h e a d . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud de palets

Indica, a diferència del format de bloc normal, el nombre de palets que es poden trobar en aquest fitxer - no la longitud del bloc en bytes.

0x0007 uint(8) Banderes

Probablement, com és habitual, banderes.

No obstant això, no conec cap bandera; com que tots els valors que conec corresponen a 0x00, també seria potencialment possible que el nombre de paletes fos simplement un uint(32).

0x0008 uint(32) Versió del format de paleta?

Probablement defineix quina versió del format de paletes segueix la paleta.

Totes les paletes d'Outpost2 semblen tenir la versió 0x01.

Dades de palets

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 64 61 74 61 -- -- -- -- -- -- -- -- -- -- -- -- d a t a . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Bytes màgics
0x0004 uint(24) Longitud del bloc
0x0007 uint(8) Banderes

La secció de dades inclou les entrades de palets individuals. El nombre d'entrades de palets es calcula a partir de la longitud del bloc / 4.

Les entrades individuals tenen l'estructura següent, senzilla;

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- 04 -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(8) Component de vermell

Indica la proporció de color vermell

0x0001 uint(8) Component verd

Indica la proporció de color verd

0x0002 uint(8) Component blau

Indica la proporció de blau del color

0x0003 uint(8) Desconegut - Bandes?

És poc clar què significa aquest valor, ja que aparentment és fonamentalment 0x04.

Respecte a les paletes, només cal dir que per a les paletes que s'utilitzaran en les animacions, s'apliquen les següents normes:

  • El primer color és SEMPRE transparent, independentment del valor que s'hi indiqui.
  • Les entrades de paleta 1-24 es consideren com a color del jugador en les paletes 1-8.
    On proven exactament els colors fora del jugador 1, no ho sé.
    Sospito que els colors restants estan codificats de manera fixa.

Referència de paletes

Imatges de píxels

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Amplada alineada

Indica l'amplada de les línies de dades de píxels en bytes - ja que estan alineades a múltiples de 4 bytes.

Així és ràpidament possible accedir a una línia d'imatge específica.

Per què aquest valor es desa per separat, tot i que es podria calcular, no està clar.
Possiblement es tracta d'una optimització per al codi de renderització.

0x0004 uint(32) Compensació

Indica l'offset de la primera línia en el bitmap

0x0008 uint(32) Alçada

Indica l'alçada de la imatge en píxels

0x000c uint(32) Ample

Indica l'amplada de la imatge en píxels

0x0010 uint(16) Tipus

Indica el tipus d'imatge. Aquí sembla que es tracta d'una màscara de bits:

  • 0x04 està establert si es tracta d'un gràfic de 1bpp.
  • 0x40 està establert si es tracta d'un gràfic que ha de dur a terme el Windows.
0x0012 uint(16) Paleta

Defineix quina paleta s'ha d'utilitzar del fitxer PRT

Estructura de dades d'arxiu PRT que indica com estan formats els bitmaps que s'utilitzen per als sprites. Aquests bitmaps serveixen com un component individual, del qual es munten diversos en un fotograma d'animació d'un sprite.

Les dades d'imatge concretes es troben a la op2_art.BMP a la carpeta del joc.
Per què aquest arxiu bitmap té un capçalera RIFF (en la seva majoria correcta) és desconegut. Probablement Outpost 2 utilitza API de sistema per carregar les gràfiques, agafant temporalment aquest capçalera i sobreescrivint els camps corresponents i variables.

Les dades de píxels es troben a l'arxiu BMP en la posició Offset + l'offset uint32, que es pot localitzar a l'arxiu BMP a l'adreça 0x000A (offset de dades RIFF-Bitmap), i corresponen de nou a l'organització fila per fila d'esquerra a dreta i de dalt a baix.

Gràfics monocroms de 1bpp es poden dibuixar de tal manera que el color 0 sigui totalment transparent, així com el color 1 sigui un negre/gris semi-transparent, ja que els gràfics monocroms s'utilitzen habitualment per a ombres de vehicles i edificis en les animacions.

Així es poden combinar ja moltes gràfiques.

Mòdul d'habitatge protegit (Plymouth)

Animacions

Ara arribem a la classe reina de les disciplines dins dels formats de dades d'Outpost 2:
Les animacions.

Les llistes d'animacions s'inicien amb un encapçalament global, que serveix principalment per a la verificació de dades. A continuació, seguixen les definicions concretes d'animacions, que es divideixen en 3 nivells:

  1. Animació
    Una animació és la instància més alta; representa l'animació d'una unitat, d'un edifici o d'una 'animació de partícules' (impacte de cometes, temps, explosió) en una situació inicial determinada.
  2. Fotograma
    Un fotograma és una imatge única dins d'una animació. Una animació pot incloure un o més fotogrames.
  3. Subfotograma
    Un subfotograma és la informació sobre que una determinada imatge bitmap s'ha de dibuixar en una posició específica d'un fotograma segons uns criteris determinats. Un fotograma pot incloure un o més subfotogrames.

A continuació, es presenten directament les definicions d'animacions individuals.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Nombre d'animacions

Quants conjunts de dades d'animació hi ha disponibles

0x0004 uint(32) Nombre de fotogrames

Quants fotogrames haurien d'estar presents en total

0x0008 uint(32) Nombre de subframes

Quants subframes haurien d'estar presents en total

0x000c uint(32) Nombre d'entrades opcionals

Quants "entrades opcionals" hi ha.

Animació

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(32) Desconegut 1

Informacions desconegudes

0x0004 uint(32) Quadre delimitador: Esquerres

Indica l'inici esquerre (en píxels) de la Bounding Box.

0x0008 uint(32) Quadre delimitador: Dalt

Indica l'inici superior (en píxels) de la Bounding Box.

0x000c uint(32) Caixa de delimitació: Amplada

Indica l'amplada (en píxels) de la Bounding Box.

0x0010 uint(32) Quadre delimitador: Altura

Indica l'alçada (en píxels) de la Bounding Box.

0x0014 uint(32) Desviació: X

Indica el punt mitjà horitzontal de l'animació

0x0018 uint(32) Desplaçament: Y

Indica el punt mitjà vertical de l'animació

0x001c uint(32) Desconegut 2

Informació desconeguda

0x0020 uint(32) Nombre de fotogrames

Indica quants fotogrames d'animació hi ha en aquesta animació

0x0024 uint(32) Nombre de Windows

Indica quantes finestres s'han d'aplicar al dibuix

Les dades de la capa superior, de l'animació, són principalment dades de gestió - la Boundingbox indica les coordenades de la marca al voltant del vehicle/edifici, quan aquest està seleccionat i també indica quina àrea ha de ser clicable.

El desfasament determina principalment el "punt zero"; el punt que s'ha de sumar o restar a les coordenades internes del joc. Es podria dir també de manera més matemàtica: el desfasament indica aquí l' origen de les coordenades.

En les finestres, igual que en el desfasament, hi ha respectivament (per finestra) 4 valors uint(32), que indiquen una àrea que es considera utilitzable per a submarcs individuals. Fora de les finestres no es pot, sempre que estigui destinat per a la bitmap, dibuixar.

Marc

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(8) Nombre de subxassís i commutador per a Opcional 1, 2

Aquest valor conté:

  • 0x7F (Màscara de bits): El nombre de subframes que s'utilitzen en aquest frame
  • 0x80: La informació sobre si l'Optional 1 i 2 estan presents
0x0001 uint(8) Desconegut 1 i Toggle per Opcional 3, 4

Aquest valor conté:

  • 0x7F (Màscara de bits): Desconegut - Sospeito fortament que es tracta del nombre de gameticks que passen fins que es mostra el següent fotograma
  • 0x80: La informació sobre si Opcional 3 i 4 estan presents
0x0002 uint(8) Opcional 1

Desconegut

0x0003 uint(8) Opcional 2

Desconegut

0x0004 uint(8) Opcional 3

Desconegut

0x0005 uint(8) Opcional 4

Desconegut

Subxassís

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF caràcter
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Desplaçament Tipus de dada Designació Explicació
0x0000 uint(16) Bitmap-ID

Indica quina Bitmap s'ha de fer servir per aquest Subframe

0x0002 uint(8) Desconegut 1

És desconegut - però sospito fortament que es tracta d'una prioritat de renderització (Z-Layer).

0x0003 uint(8) Subframe-Id

Indica en quin submarco ens trobem

0x0004 sint(16) Desplaçament - Horitzontal

Indica on dins del marc s'ha de col·locar el submarco, o bé quants píxels s'ha de desplaçar horitzontalment la imatge de bitmap.

0x0006 sint(16) Desplaçament - Vertical

Indica on dins del frame s'ha de col·locar el subframe, o bé quants píxels s'ha de desplaçar verticalment la bitmap.

Així podem ara muntar frames individuals, així com animacions completes, aquí es mostra un exemple d'una animació més complexa, l'animació amb l'índex 500.

Animació 500

La animació 500 mostra com es descarrega un transportador Plymouth carregat amb mineral comú. Es tracta d'una de les poques animacions que utilitza la funcionalitat de finestres.

Així és com es pot combinar tota l'animació.
Desafortunadament, hi ha un problema amb la tapa de càrrega superior, ja que aquí el bit corresponent a la informació del tipus de gràfic no està establert.

Aquí teniu alguns altres sprites animats magnífics del joc:

Renderització de l'animació 500 il·lustrada

Animació 500 completament combinada

Fàbrica d'edificis de Plymouth

Port espacial d'Eden

Centre mèdic d'Eden

SCAT

Port espacial de Plymouth

Easteregg:
Pare Noel

Easteregg:
Cansó del gos

Interfície d'usuari

Només falta la interfície d'usuari del joc, que té un aspecte de metall polit.

Però aquí també és evident que Dynamix no va haver de reinventar la roda; aquí no només s'utilitzen simplement les API User32 i GDI32 proporcionades per Windows, sinó que també s'aplica la gestió de recursos de User32.

Aquests es poden extreure, per exemple, mitjançant programes com el Resource Hacker, que va desenvolupar Angus Johnson com a programari gratuït, o - si es té por d'utilitzar Wine sota Linux / Mac OS - amb l'ajuda de wrestool que es troba dins icoutils.

Nom del fitxer Contingut
Outpost2.exe Conté només la icona del joc, que mostra l'estació espacial davant de New Terra
op2shres.dll Conté a més de gràfics per a elements de control com contorns, botons, botons de ràdio i caselles de selecció, també fons de diàlegs, imatges d'acompanyament per als textos de les missions de la història i la gràfica de fons del menú principal
out2res.dll Conté la decoració de finestres en el joc, icones per a metall comú i especial, la pantalla de càrrega, gràfics per a diàlegs i altres gràfics de cursor, a més dels animats al directori del joc