Zpět do nabídky

Popisy jednotlivých formátů ve Skeldalu:

Tento dokument obsahuje popisy všech používaných nestandartních formatů ve hře Brány Skeldalu. Formáty jsou rozebrány pouze do hloubky nutné jejich zpracování. Vnitřní struktury (tzn. struktury, jenž jsou sice součástí formátu, ale vystupují jako blíže nespecifikované bloky, jenž jsou zpracovány enginem) tady popsané nejsou.


MUS MUSic.

Hudební formát schopný uchovat zvuk (hudbu) v komprimovaném stavu.

Parametry:

16 - bitů
mono/stereo
samplovací frekvence libovolná
komprimační křivka libovolná.
8 - bitová komprimace.

Komprimace je založena na principu rozdílu hodnot dvou sousedních vzorku, přičemž sousední vzorky se berou s ohledem na pocet kanálů. Při komprimaci platí že přenesený výkon je stejný jako u originálního samplu.

Formát souboru:

<chans 2b>
<freq 4b>
<ssize 4b>
<blck 4b>
<resv 8b>
<amplt 512b>
.......
<blocks>
.......

chans - pocet hraných kanálů 1 - mono / 2 - stereo
freq - samplovací frekvence, např: 22050
ssize - originální velikost skladby v bajtech
blck - počet bloků (průměrná velikost bloku je (ssize/(blck*2))
resv - většinou 0
amplt - komprimační tabulka.

za hlavičkou následují bloky:
<csize 4b>
<osize 4b>
<data csize>

csize - délka bloku dat
osize - dekomprimovaná délka
data - data o délce csize.

Postup dekomprimace:

(mono)

  1. založ jednu proměnou (třeba A).
  2. Nechť je rovná A = 0.
  3. vem první byte do jiné proměnné (třeba X)
  4. vezmi X-té slovo z amplt (tabulka je organizovaná po znamínkových slovech) a vlož třeba do Y
  5. proveď A=A+Y
  6. výsledný vzorek je v A jako 16-bitové číslo. Zapiš si ho
  7. vem další byte a pokračuj bodem 3.

Při dekomprimaci stereo je postup obdobný s tím že je nutné mít dvě proměnné pro uložení hodnoty. Jednotlivé kanály se střídají :
... L P L P L P ...


HI HIcolor graphics

To je format používaný velice vyjímečně pro specialní obrázky v Hicoloru. Jinak jsou používány formáty PCX. Formát HI vypadá takto:

<Xsize 2b>
<Ysize 2b>
<Type 2b>
[<HIpal 512b>]
<data>

Xsize - velikost obrázku v X (v pixelech)
Ysize - velikost obrázku v Y
Type - 8 - 256 barevný obrázek (pak následuje HIpal), 15- 32768 barevný obrazek.
data - jsou organizována lineárně od zhora dolů zleva doprava bez komprimací.

Hicolor je uložen slovně, formát slova je 0RRRRRGG GGGBBBBB a stejným
způsobem je uložena HIpal


MAP, MAP file

Tento formát udržuje veškeré informace o mapách levelů používaných ve Skeldalu. Jeho organizace je jednoduchá, k načtení mapy stačí jedna rutina pro načtení bloku jenž má tvar:

<signature 8b>
<block_type 4b>
<block_size 4b>
<next 4b>
<data ..>

signature - "<BLOCK>",0
block_type - Typ bloku viz níže
block_size - Délka bloku bez hlavičky.
next - Seek pozice následujícího bloku
data - data bloku

Jednotlivé typy bloku jsou pro MAP soubory definovány takto:

8000h Konec souboru - je to vždy poslední blok (data ignorujte)
8001h Struktury stěn. Každý sektor tu má čtyři stěny. První čtyři patří sektoru 0, další sektoru 1.
8002h Struktury sektoru.
8003h Textový seznam všech souborů se stěnami zepředu.
8004h Textový seznam všech souborů se stěnami zboku (levá).
8005h Textový seznam všech souborů se stěnami zboku (pravá).
8006h Textový seznam všech souborů s obrázky stropů
8007h Textový seznam všech souborů s obrázky podlah.
8008h Textový seznam všech souborů s oblouky (levý).
8009h Rozvžení sektorů v mapě.
800Ah Globální informace o mapě.
800Bh Textový seznam všech souborů s oblouky (pravý)
800Ch Mapa ležících předmětů.
800Dh Tabulka Maker a Multiakcí.
800Eh Rezervován.
800Fh Tabulka potvor umistenych do mapy
8010h Tabulka výklenků
8011h Tabulka nestvur (prototypy)
8012h Textovy seznam zvuku k nestvuram

K některým strukturám:

Bloky 8001h, 8002h, 8009h jsou pole záznamů a tak jsou taky uloženy.

8009h má tvar <x 2b><y 2b><patro 2b><flags 2b> a nese informace o poloze sektoru který položka zastupuje.

Bloky 8003h až 8008h má jednoduchý tvar. Je to několik řetězců znaků a jednotlivé řetězce jsou odděleny znakem 0

Blok 800Ch ma tvar:

<poloha 4b>
<premet 2b>
<premet 2b>
.....
<nula 2b>
<poloha 4b>
<premet 2b>
<premet 2b>
.....
<nula 2b>
...
...
atd.

poloha má tvar - SSSS SSSS SSSS SSSS SSSS SSSS SSCC
S je číslo sektoru
C je číslo pozice na čtverci.

Blok 800Fh má tvar:

<sektor 2b>
<potvora 2b>
....

potvora je ještě rozdělena: SSMMMMMM MMMMMMMM
kde SS je směr otočení a M je číslo potvory.

Pokud bloky 8011h a 8012h nejsou v mapě, musí pro vzor nestvůr system
využit soubory ENEMY.DAT a SOUND.DAT, jenž má podobný formát.
ENEMY.DAT předsazuje 8 bajtu.
SOUND.DAT předsazuje 4 bajty.

Postup načtení souboru MAP.

1. Přečtěte blok.
2. Podle typu bloku dekodujte uložené informace. Bloky které nechcete
načítat přeskočte použitím ukazatele na další blok
3. Po přečtení bloku 8000h ukončete čtení (nenačítejte jeho data).
Jinak pokračujte bodem 1.


DDL Dynamic loaded Data Library

Formát drží veškerou grafiku a data jenž jsou čtena hrou. Je organizován do třech částí.

<Seznam skupin>
<Adresár>
<Data>

Seznam skupin - něco jako seznam podadresářů. Každá skupina má 8 bajtů. První čtyři je číslo skupiny, další pak seek pozice v souboru, kde leží příslušný adresář.

Adresář - Každá položka má 16 bajtů. 12 bajtů je použito na jméno souboru, a čtyři bajty na seek pozici v souboru.

Data - Od dané seekovací adresy podle adresáře leží čtyři bajty, jenž určují délku následujícího bloku a poté vlastní data.


Následující dokumentace je nezpracovaná dokumentace k souboru MGF. Je psána bez diakritických znamének

MGF Motion GIF ver 97

Tohle je docela slozity format. Ma podobnou strukturu jako FLC az na
nekolik trochu vetsich odchylek. Jednak je pro komprimaci vyuzita
metoda LZW pouzivana v souborech GIF a jednak je cely format
optimalizovan pro prehravani videosekvence v HICOLOR. Format je uvozen
hlavickou:

typedef struct mgif_header
{
char sign[4];
char year[2];
char eof;
word ver;
long frames;
word snd_chans;
int snd_freq;
short ampl_table[256];
short reserved[32];
};

_sign_ obsahuje text "MGIF"
_year_ pak rok vytvoreni formatu take jako retezec: zde "97"
_eof_ je znak 0x1b. Slouzi ke zmateni textovych editoru (tam se
zobrazi jen napis MGIF97
_ver_ je cislo verze ve formatu minor-major
_frames_udava celkovy pocet frames v animaci

a dale jsou udaje o zvuku:

snd_chans je rezevovan pro pripadny pocet kanalu. Soucasne je tam
vzdy cislo 2 (stereo)
snd_freq je samplovaci freqvence
ampl_table je stejna tabulka urovni jako u formatu MUS


Za touto hlavickou uz nasleduje prvni _frame_. Je taktez uvozen
hlavickou 'frame' ma celkem 4 bajty.

FRAME: <pocet chunku 1b><delka frame 3b>

DELKA FRAME je 3 bajtova!!!

Frame se dale deli do chunku'. Jejich pocet je uveden v hlavicce frame.
Kazdy chunk ma dale svou hlavicku:

CHUNK: <cislo akce 1b><delka chunku 3b>

Cela organizace formatu MGIF je teda nasledujici


MGIF (m=frames)
 FRAME 1: (n=chunks)
  CHUNK 1: (akce)
   data
  CHUNK 2: (akce)
   data
  CHUNK 3: (akce)
   data
   ...
   ...
  CHUNK n: (akce)
 FRAME 2: (n=chunks)
 ....
 FRAME m:

K teto organizaci je jeste nutne dodat toto. Frame je potreba cele
zpracovat (prozkoumat vsechny chunky) nez je zobrazeno. Obcas jsou
totiz chunky prehazene (napriklad chunk s paletou byva ulozen za
chunkem s obrazkem)

Kazdy chunk je nositelem dat a informaci o akci, kterou je treba s daty
provest. Tady jsou akce:

0 - PRADNY CHUNK
1 - LZW FULL SCREEN
2 - MGIF DELTA
3 - HICOLOR PALETE
4 - SOUND TRACK
5 - TEXT TRACK
6 - MGIF COPY

Popis akci:
PRAZDNY_CHUNK - muze obsahovat soukrome informace

LZW_FULL_SCREEN
- ihned za hlavickou nasleduje LZW komprimovany obrazek
v rozliseni 320x180 256 barev

MGIF_DELTA
- cely blok je LZW komprimovany. Po dekomprimace blok obsahuje
dva druhy informaci. Prvni DWORD je ofset od pocatku dat
ktery ukazuje na zacatek graficke informace. Po tomto
DWORDU jsou ulozeny data o umisteni grafickych bodu v obrazu
Prvni byte znaci, kolik je nutne preskocit slov. (tj *2 byte)
Dalsi byte znaci, kolik je nutne zapsat slov (tj *2 byte)
Po tomto bytu je nutne prenest presne tolik slov z
grafickeho bloku na obrazovku. Dvojice bajtu se opakuji
dokud ani jeden z nich nema nejvyssi 2 bity nastavene.
Pak tento byte znaci ze uz na radce nic vic neni. Dolni cast
byte (tj 6 bitu) pak udava pocet radku, ktere je treba pre-
skocit. (nula=zadny).

HICOLOR PALETTE
- Pak nasleduje
paleta ve formatu xRRRRRGGGGGBBBBB. Rozdil oproti vsem
beznym paletam je v tom ze neni treba v palete udrzovat
barvy, ktere uz na obrazovce jsou, protoze zmena palety
se neprojevi na jiz zobrazenem obrazku.

SOUND_TRACK
- Kazdy frame obsahuje zvukovou stopu. Je to RAW format.
Pro verzi MGIF97 zde je zvukova informace ulozena ve
zvukove kvalite 16-bit stereo 22050Khz, ovsem komprimovana
na 50% jako MUS.
TEXT_TRACK
- Navic je ve mozne ve frame umistit textovou zpravu (titulek)
Prvni WORD udava dobu zobrazeni (pocet frame).
Pote nasleduje text zakoncen znakem 0; 
(tato funkce neni podporovana)

MGIF_COPY - Za timto CHUNKEM je ulozen blok dat v nezakomprimovanem
tvaru(tj 57600byte);
Poznamka: Parametry pouzite LZW komprimace: 
	9-12 bitový kod
	Clear code: 100000000
	Puvodni data jsou navíc zakodovany diferencne.
Takze napriklad sekvence 1,4,4,4 je ve skutecnosti 1,5,9,13

Zpět do nabídky