Animationer · bei.pm

Udgivet den 19/11/2015·Opdateret den 13.02.2025·da
Denne tekst blev automatiseret oversat af OpenAI GPT-4o Mini

De filformater, der er beskrevet på denne side, er baseret på den tekniske analyse af intellektuel ejendom fra Dynamix, Inc. og Sierra Entertainment.
Den intellektuelle ejendom er i dag en del af Activision Publishing, Inc. / Activision Blizzard, Inc. og ejes i øjeblikket af Microsoft Corp..

Oplysningerne er indsamlet gennem Reverse Engineering og dataanalyse med henblik på arkivering og interoperabilitet med historiske data.
Der er ikke anvendt nogen proprietære eller fortrolige specifikationer.

Spillet kan i øjeblikket købes som download på gog.com.

Nu kommer vi til kongeklassen af discipliner inden for Outpost 2 dataformater:
Animationerne.

Animationslisterne indledes med en global header, der primært tjener til dataverifikation. Herefter følger de konkrete animationsdefinitioner, der er opdelt i 3 niveauer:

  1. Animation
    En animation er den øverste instans; den repræsenterer en animation af en enhed, en bygning eller en 'partikel-animation' (kometnedslag, vejr, eksplosion) i en bestemt udgangssituation.
  2. Frame
    Et frame er et enkelt billede inden for en animation. En animation kan indeholde et eller flere frames.
  3. Subframe
    Et subframe er informationen om, at et bestemt bitmap skal tegnes på en bestemt position i et frame under bestemte kriterier. Et frame kan indeholde et eller flere subframes.

Herefter følger de enkelte animationsdefinitioner.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tegn
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datatype Betegnelse Forklaring
0x0000 uint(32) Antal animationer

Hvor mange animationsdatasæt er der?

0x0004 uint(32) Antal rammer

Hvor mange rammer bør der i alt være

0x0008 uint(32) Antal subrammer

Hvor mange subframes der i alt bør være til stede

0x000c uint(32) Antal valgfrie poster

Hvor mange "valgfri poster" der er tilgængelige.

Animation

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tegn
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datatype Betegnelse Forklaring
0x0000 uint(32) Ukendt 1

Ubekendte oplysninger

0x0004 uint(32) Afgrænsningsboks: Venstre

Angiver venstre start (i pixel) af Bounding Box.

0x0008 uint(32) Afgrænsningsboks: Ovenfor

Angiver den øverste begyndelse (i pixel) af Bounding Box.

0x000c uint(32) Afgrænsningsboks: Bredde

Angiver bredden (i pixel) af Bounding Box.

0x0010 uint(32) Bounding Box: Højde

Angiver højden (i pixel) af Bounding Box.

0x0014 uint(32) Offset: X

Angiver den horisontale midtpunkt for animationen

0x0018 uint(32) Offset: Y

Angiver den vertikale midtpunkt for animationen

0x001c uint(32) Ukendt 2

Ukendt information

0x0020 uint(32) Antal rammer

Angiver, hvor mange animationsrammer der er i denne animation

0x0024 uint(32) Antal vinduer

Angiver, hvor mange vinduer der skal anvendes ved tegning

Dataene fra det øverste lag, animationen, er primært administrationsdata - Boundingbox angiver koordinaterne for markeringen omkring køretøjet/bygningen, når det er valgt, og angiver samtidig, hvilket område der skal være klikbart.

Offsettet bestemmer primært "nulpunktet"; det punkt, der skal lægges til eller trækkes fra de interne koordinater. Man kunne også sige mere matematisk, at offsettet her angiver koordinatursprunget.

Windowsene består, ligesom offsettet, af 4 uint(32)-værdier pr. vindue, der angiver et område, der betragtes som anvendeligt for enkelte subframes. Uden for vinduerne må der, hvis det er relevant for bitmap'en, ikke tegnes.

Ramme

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tegn
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datatype Betegnelse Forklaring
0x0000 uint(8) Subframe-antal og toggle for valgfri 1, 2

Denne værdi indeholder:

  • 0x7F (Bitmaske): Antallet af subrammer, der anvendes i denne ramme
  • 0x80: Oplysningen om, hvorvidt Optional 1 og 2 er til stede
0x0001 uint(8) Ukendt 1 og Toggle for Valgfri 3, 4

Denne værdi indeholder:

  • 0x7F (Bitmaske): Ukendt - Jeg mistænker stærkt, at dette er antallet af gameticks, der går, indtil næste frame vises
  • 0x80: Oplysningen om, hvorvidt Optional 3 og 4 er til stede
0x0002 uint(8) Valgfri 1

Ukendt

0x0003 uint(8) Valgfri 2

Ukendt

0x0004 uint(8) Valgfri 3

Ukendt

0x0005 uint(8) Valgfri 4

Ukendt

Underramme

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF tegn
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datatype Betegnelse Forklaring
0x0000 uint(16) Bitmap-id

Angiver hvilken bitmap der skal bruges til denne subframe

0x0002 uint(8) Ukendt 1

Det er ukendt - jeg formoder dog stærkt, at det handler om en render-prioritet (Z-lag).

0x0003 uint(8) Subframe-id

Angiver, i hvilken subramme vi befinder os

0x0004 sint(16) Offset - Vandret

Angiver, hvor inden for rammen subrammen skal placeres, eller med hvor mange pixel bitmap'en skal flyttes horisontalt.

0x0006 sint(16) Offset - Vertikal

Angiver, hvor inden for rammen subrammen skal placeres, eller hvor mange pixels bitmap’en skal flyttes vertikalt.

Med dette kan vi nu samle individuelle rammer såvel som komplette animationer, her vist som eksempel med en mere kompleks animation, animationen med indeks 500.

Animation 500

Animation 500 viser, hvordan en Plymouth-transportør, der er lastet med almindeligt mineral, bliver tømt. Dette er en af de få animationer, der bruger vinduesfunktionaliteten.

Og sådan kan den komplette animation samles.
Desværre er der stadig et problem med den øverste lastelem, da det relevante bit i grafiktypen-informationen ikke er sat.

Her er nogle flere, smukt animerede sprites fra spillet:

Rendering af animation 500 illustreret

Animation 500 færdig samlet

Plymouth Bygning-Fabrik

Eden Rumhavn

Eden Medicinsk Center

SCAT

Plymouth Rumhavn

Easteregg:
Julemand

Easteregg:
Dans Hund