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:
- Obrazovka se rozdělí na 12 000 čtverečků o velikosti 4 × 4 body.
- 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.
- Výsledek se ještě jednou zkomprimuje běžnou metodou typu LZSS.
- 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.
