Next SpacePocta Magic Systems

Domů / Co bylo na Next Space jedinečné

Co bylo na Next Space jedinečné

Vlastní videokodek, vlastní skriptovací jazyk, vlastní komprese hudby a herci vystřižení z videa a vlepení do malovaných scén. Všechno vyrobené doma, bez hotových nástrojů.

Next Space se dá popsat jednou větou: je to hra, kterou v 90. letech udělala malá bratislavská parta a která si skoro všechno vyrobila sama. Tady jsou věci, na které jsme při zkoumání hry narazili a které nás překvapily nejvíc.

Video, které se vešlo na CD

Hra obsahuje 25 celoobrazovkových 3D animací. Kdyby se uložily jako obyčejné obrázky, jeden snímek (640 × 300 bodů, 256 barev) by zabíral 192 000 bajtů. Při dvaceti snímcích za sekundu by to bylo téměř 4 MB za sekundu. CD-ROM tehdy zvládl 300 až 600 KB.

Autoři proto vyrobili vlastní formát videa, zvaný HVI. Přehrávač k němu podle vzpomínek Petra Hegyiho napsali Michal Weis a Michal Horka na úrovni strojového kódu, aby zvládl 20 snímků za sekundu přímo z CD. Formát funguje takto:

  1. Obrazovka se rozdělí na 12 000 čtverečků o velikosti 4 × 4 body.
  2. Pro každý čtvereček se uloží jen tři bajty místo šestnácti. Jeden vybere vzorek ze „slovníku“ o 256 položkách, druhý a třetí určují, která ze čtyř barev vzorku se kde použije a podle kterého z osmi vzorů (pruhy, úhlopříčky, rohy). Odborně se tomu říká vektorová kvantizace.
  3. Výsledek se ještě jednou zkomprimuje běžnou metodou typu LZSS.
  4. K tomu se přidá zvuk, vždy 1102 bajtů na jeden snímek, takže obraz a zvuk nikdy nevypadnou z rytmu.

Celková komprese vychází přibližně 10 : 1. Z oněch 192 000 bajtů zbyde v průměru asi 18 600. A přehrávač z toho dokáže na PC s procesorem z roku 1997 poskládat obraz 20krát za sekundu.

Pro srovnání: takto komprimovaná videa mají v průměru 395 KB za sekundu, ne 4 MB. Bez toho by 8,4 minuty animací zabraly 2 GB.

Slovník i paleta barev se v souboru mění po segmentech, takže se mohou přizpůsobit scéně.

Pravidla hry jako data

Hlavní rozhodnutí, které dělá z Next Space netypickou hru: logika hry není v programu. Program má 284 KB a neobsahuje jedinou hádanku. Všechny hádanky, rozhovory a pořadí dějů jsou uloženy v datech, v souborech místností, jako bajtkód pro interní jednoduchý jazyk.

Interpret zná 86 instrukcí a řídí 3 772 pravidel (3 596 v místnostech a 176 obecných odpovědí, jako je „Nevím, jak by se to mělo otevřít.“). Každé pravidlo má dvě části: POKUD (podmínky) a PAK (činy). Například takhle vypadá pravidlo z první obrazovky před barem, vyjádřené slovy:

POKUD je nastaven příznak „Frank právě vystoupil z lodi“ a Frank došel na místo (100, 320), PAK zruš příznak, ať Frank řekne „Co to jsem, kde to jsem?!“, dále „Sakra!“ a „Musím to tady pořádně prohlédnout!“ a vrať hráči ovládání.

Má to praktickou výhodu: hádanky se dají měnit bez překompilování programu. Skript je zároveň kompaktní: celá logika hry zabírá zhruba 87 kilobajtů (84 KB v místnostech a 3 KB obecných odpovědí). A co je dnes nejcennější: když jsme hru přepisovali do JavaScriptu, stačilo napsat interpret těchto 86 instrukcí a všechno ostatní přišlo z původních dat.

Hudba ve čtyřech bitech

Soubory s hudbou mají příponu .MOD, takže se na první pohled tváří jako klasické trackerové moduly z demoscény. Nejsou. Jsou to vlastní komprimované zvukové soubory, v nichž každý vzorek zabírá jen 4 bity místo 8. Metoda se jmenuje ADPCM a podobá se té, kterou používala Yamaha. Místo celé hodnoty vzorku se ukládá jen změna oproti předchozímu a krok se sám přizpůsobuje hlasitosti.

Výsledek: hudba zabere polovinu místa. 19 skladeb (a jeden tichý soubor) s celkovou délkou 34,34 minuty se vešlo do 23 MB. V kvalitě audio-CD (44,1 kHz, 16 bitů, stereo) by to bylo 360 MB, tedy víc než půl CD.

Hudba se ve hře přehrává ve smyčce. Autoři vyřešili i bezešvé zacyklení: při návratu na začátek skladby se dekodér vynuluje, aby se hudba spojila bez zvukového skoku.

Herci v malovaných scénách

Lidské postavy Next Space jsou digitalizovaní skuteční lidé. Hra je do scény skládá takto:

  • Velikost podle hloubky. Každá místnost má mapu hloubky. Když Frank jde od diváka do pozadí, hra ho za běhu zmenšuje (výpočet s celými čísly, kvůli rychlosti) a přizpůsobuje mu i rychlost chůze.
  • Pořadí podle výšky. Postavy se seřadí podle toho, jak nízko stojí na obrazovce, aby se správně překrývaly s nábytkem a ostatními předměty.
  • Měkké hrany. Okraje postav se mísí s pozadím pomocí zvláštní tabulky 256 × 256 barev, aby nevypadaly jako vystřižené nůžkami. Každá místnost má vlastní.
  • Společná paleta. Prvních 56 barev je v celé hře stejných. Frank, který je složen jen z 22 odstínů, tak může stát v kterékoli místnosti a vypadá správně.

Dabing bez synchronizace rtů

Hry z 90. let někdy řešily dabing tak, že synchronizovaly pohyb rtů postavy s hlasem. Next Space to nedělá. Místo toho funguje takto:

  • Každá replika má číslo. Stejné číslo má text na obrazovce i nahrávka. Hra tedy ví, kterou nahrávku přehrát, aniž by je někdo musel spojovat ručně.
  • Dokud hlas zní, postava přehrává obecnou animaci mluvení.
  • Titulky a hlas se dají zapnout i samostatně.

Výhoda: hru lze lokalizovat bez překreslování postav. Slovenská a česká verze používají stejnou logiku, jen jiné texty a jiný dabing. Ve slovenské verzi je 2 935 replik, celkem 2 h 54 min. Česká jich má 2 935 a 2 h 48 min.

Cesty po místnostech, které fungují

Méně viditelné, ale stejně důležité:

  • Chůze postav. Každá místnost má masku „kde se dá chodit“ (320 × 200 bitů). Cesta se hledá zaplavováním (BFS) a pak se vyrovná na přímé úseky podle přímé viditelnosti. Funguje to, i když se po místnosti pohybují další aktéři.
  • Kreslení jen změn. Hra v každém snímku překresluje jen ty čtyřbodové úseky, které se změnily. Na pomalém počítači to rozhodlo o plynulosti.
  • Komprese místností. Všechno, co je v souborech ROOMn.DAT velké, je zkomprimováno metodou LZSS (Okumura), kterou autoři napsali i v assembleru. Všech 651 komprimovaných bloků se rozbalí přesně na deklarovanou velikost.
  • Uložené hry. Uložení hry je výpis 58 bloků paměti (příznaky, proměnné, inventář, stav objektů a postav).

Stopy, které autoři zanechali

Při čtení souborů je vidět i lidská stránka práce:

  • Poznámky v textech. V tabulkách zpráv se našly řádky, které nejsou určeny hráči: „--- keď prídeš za …“, „--- FIRE ---“, „--- loop“, „po zlom horeni hajzlu“. Autoři si tak značili, kde ve scénách co následuje.
  • Cesta v hlavičce animace. Do souboru s jednou z animací se zapsala původní cesta k souboru z počítače, na kterém animace vznikla (D:\ANIM-NOV\DOLE\POSUNUTE.CEL). Z toho je vidět, že se pracovalo pravděpodobně s programem Autodesk Animator Pro (formát FLC i přípona .CEL pocházejí z něj).
  • Nepoužité místnosti. Místnost 52 je kopie místnosti 1 s anglickými zkušebními hláškami (I don’t know how to open it). Místnost 54 není místnost, ale černá obrazovka pro smrt a titulky.
  • Opravy mezi vydáními. Slovenské CD je z června 1997, české ze září. Mezi nimi autoři opravili 14 místností, přičemž 631 ze 681 funkcí programu zůstalo instrukci po instrukci stejných a všech 86 instrukcí skriptu se chová stejně. Nejvážnější oprava: zamrznutí hry v místnosti 37.

Proč je to důležité

Každá z těchto věcí by sama stačila na článek. Dohromady ukazují, že se autoři Next Space nespoléhali na hotové nástroje: vlastní kodek, vlastní skriptovací jazyk, vlastní mixér zvuku, vlastní ovladač zvukové karty. A dělala to skupina studentů a nadšenců, pro niž to byl první projekt a která na něm pracovala víc než čtyři roky.

Proto lze hru dnes spustit v prohlížeči z původních dat: všechno, co potřebuje vědět, je v datech a v malém interpretu.

Nahoru