Animaties · bei.pm
De op deze pagina beschreven bestandsformaten zijn gebaseerd op de technische analyse van intellectueel eigendom van Dynamix, Inc. en Sierra Entertainment.
Het intellectueel eigendom maakt vandaag de dag deel uit van de massa van Activision Publishing, Inc. / Activision Blizzard, Inc. en is momenteel in bezit van Microsoft Corp..
De informatie is verzameld door middel van Reverse Engineering en data-analyse met als doel archivering en interoperabiliteit met historische gegevens.
Er zijn geen eigendomsrechtelijke of vertrouwelijke specificaties gebruikt.
Het spel is momenteel verkrijgbaar als download op gog.com.
Nu komen we bij de koningsklasse van de disciplines binnen de Outpost 2 dataformaten:
De animaties.
De animatielijsten worden ingeleid met een globale header, die primair dient voor dataverificatie. Vervolgens volgen de specifieke animatiedefinities, die zijn onderverdeeld in 3 niveaus:
-
Animatie
Een animatie is de hoogste instantie; het stelt een animatie van een eenheid, een gebouw of een 'deeltjesanimatie' (kometinslag, weer, explosie) in een bepaalde beginpositie voor. -
Frame
Een frame is een enkel beeld binnen een animatie. Een animatie kan één of meerdere frames bevatten. -
Subframe
Een subframe is de informatie dat een bepaalde bitmap onder bepaalde criteria op een specifieke positie van een frame moet worden getekend. Een frame kan één of meerdere subframes bevatten.
Vervolgens volgen direct de afzonderlijke animatiedefinities.
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Aantal animaties | Hoeveel animatiedatasets zijn er beschikbaar |
0x0004 | uint(32) | Aantal frames | Hoeveel frames zouden er in totaal aanwezig moeten zijn |
0x0008 | uint(32) | Aantal subframes | Hoeveel subframes er in totaal aanwezig zouden moeten zijn |
0x000c | uint(32) | Aantal optionele invoerwaarden | Hoeveel "optionele invoeren" zijn aanwezig. |
Animatie
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
0x0020 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(32) | Onbekend 1 | Onbekende informatie |
0x0004 | uint(32) | Afgebakende Box: Links | Geeft de linkse start (in pixels) van de Bounding Box aan. |
0x0008 | uint(32) | Bounding Box: Boven | Geeft de bovenste beginpositie (in pixels) van de Bounding Box aan. |
0x000c | uint(32) | Bounding Box: Breedte | Geeft de breedte (in pixels) van de Bounding Box aan. |
0x0010 | uint(32) | Bounding Box: Hoogte | Geeft de hoogte (in pixels) van de Bounding Box aan. |
0x0014 | uint(32) | Offset: X | Geeft het horizontale middenpunt van de animatie aan |
0x0018 | uint(32) | Offset: Y | Geeft het verticale middelpunt van de animatie aan |
0x001c | uint(32) | Onbekend 2 | Onbekende informatie |
0x0020 | uint(32) | Aantal frames | Geeft aan hoeveel animatieframes in deze animatie zijn opgenomen |
0x0024 | uint(32) | Aantal vensters | Geeft aan hoeveel vensters er bij het tekenen moeten worden toegepast |
De gegevens van de bovenste laag, de animatie, zijn voornamelijk beheergegevens - de Boundingbox geeft de coördinaten van de markering rondom het voertuig/gebouw aan, wanneer deze is geselecteerd en geeft tegelijkertijd aan welk gebied aanklikbaar moet zijn.
De offset bepaalt voornamelijk het "nulpunt"; het punt dat op de interne spelcoördinaten moet worden opgeteld of afgetrokken. Men zou ook wiskundig kunnen zeggen: de offset verwijst hier naar de coördinaten oorsprong.
De vensters bevatten, net als de offset, elk (per venster) 4 uint(32)-waarden, die een gebied aangeven dat voor individuele subframes als bruikbaar geldt. Buiten de vensters mag, voor zover dit voor de bitmap is voorzien, niet worden getekend.
Frame
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(8) | Subframe-aantal en Toggle voor Optioneel 1, 2 | Deze waarde bevat:
|
0x0001 | uint(8) | Onbekend 1 en Toggle voor Optioneel 3, 4 | Deze waarde bevat:
|
0x0002 | uint(8) | Optioneel 1 | Onbekend |
0x0003 | uint(8) | Optioneel 2 | Onbekend |
0x0004 | uint(8) | Optioneel 3 | Onbekend |
0x0005 | uint(8) | Optioneel 4 | Onbekend |
Subframe
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | teken | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Gegevenstype | Benaming | Uitleg |
---|---|---|---|
0x0000 | uint(16) | Bitmap-ID | Geeft aan welke bitmap voor dit subframe moet worden gebruikt |
0x0002 | uint(8) | Onbekend 1 | Het is onbekend - ik vermoed echter sterk dat het hier gaat om een renderprioriteit (Z-laag). |
0x0003 | uint(8) | Subframe-ID | Geeft aan in welk subframe we ons bevinden |
0x0004 | sint(16) | Offset - Horizontaal | Geeft aan waar binnen het frame het subframe geplaatst moet worden, of met hoeveel pixels de bitmap horizontaal verschoven moet worden. |
0x0006 | sint(16) | Offset - Verticaal | Geeft aan waar binnen het frame het subframe geplaatst moet worden, of met hoeveel pixels de bitmap verticaal verschoven moet worden. |
Zo kunnen we nu individuele frames evenals complete animaties samenstellen, hier exemplaarmatig gedemonstreerd aan een complexere animatie, de animatie met index 500.
Animatie 500
Animatie 500 laat zien hoe een Plymouth-vrachtwagen, die geladen is met gewone ertsen, wordt gelost. Dit is een van de weinige animaties die de vensterfunctionaliteit benut.
En zo kan de complete animatie worden samengevoegd.
Helaas is er nog een probleem met het bovenste laadluik, omdat hier de bijbehorende bit in de grafiektype-informatie niet is ingesteld.
Hier zijn nog een paar andere prachtig geanimeerde sprites uit het spel: