14. 4. 2020

Another World /Éric Chahi, 1991/


V severnej amerike sa predávala pod menom Out of This World. Ikonický, adventúrny 2D platfomer portovaný na každú relevantnú 16 bit plus platformu. Natívne ide o 2 ročný projekt jednej osoby postavený okolo hardvéru Amiga 500. Vojde sa na dvojicu 880KB amiga floppy diskiet alebo iba na jednu jedinú 1.44MB HD pri PC verzii napriek skvelému intru a úmyselne "filmovému" vzhľadu. Celá hra je vytvorená z polygónov. Túto vetu, keď som pozeral na malé obrázky v herných časopisoch, som vtedy nechápal. Videl som limitovanú farebnú paletu a pozadia, síce štýlové ale statické alá Prince of Persia. Avšak naozaj je celá grafika vytvorená z polygónov. A hra sa dá prejsť pod 20 minút, s čím mal distribútor PC verzie celkom morálny problém.

verzia pre Amiga 500: rozlíšenie 320x200 pixelov v 16 farbách, 981 polygónov !!

Super úsporná vektorová grafika. V rozlíšení 320x200 v 16 farbách by každá miestnosť hry ako bitmapa /kreslený pixel art/ zaberala 32KB. Nakreslite 94 obrazoviek a už máte plné ruky amiga diskiet. Pridajte skoro trojminutové intro, samplovanú hudby a zvuky a začína sa žonglovanie s disketami, známa "diskotéka". Éric Chahi však nevyriešil dizajnom grafiky radikálne len tento problém. Pri rozborke jeho amiga kódu zistíte, že smotná herná logika má iba 6000 riadkov kódu, menej ako vírus. Pri pohľade na PC verziu tiež nebudete veriť vlastným očiam, že exe súbor má iba 20KB, zvyšok sú dáta pre "polohu vektorov" a nejaké audio.

Pointou je, že to "exe" vlastne nie je samotná hra ale VM /virtual machine/ vytvorené vnútri vašej mašiny s 256 registrami, 64 pracovných vlákien, asi 30 vlastných inštrukcií, 4 x video framebuffer a pomocou "syscalls" si volá služby pod sebou bežiaceho OS a ním vykresľuje tie "vektory a polygóny" a prehráva zvuky. Akýkoľvek stroj dokáže spustiť túto VM na 20fps tak dostane hrateľnú verziu Another World /AW/. Samozrejme hra voliteľne umožňuje aj JIT /just in time/ rekompiláciu bajtkódov VM do natívneho prostredia procákov motorola alebo intel, ARM.

Amiga verzia. Motorola CPU 68000 na 7.1Mhz s trojicou pomocných čipov Paula /4 kanálové samplované audio/, Denise /videočip, až 4096 farieb naraz, herne štandardne 32-64/ a Agnus /najdôležitejší z nich kontroluje Blitter - presúvanie dát v RAM bez asistencie CPU, Copper a DMA/. Zdieľaná, bežne 0.5-1 megová RAM medzi CPU a GPU, tzv. chip RAM. Amiga mala podporu aj pre dokupiteľnú "fast" RAM, ktorú malo CPU iba samo pre seba. Prvé amigu boli 512 kilové, čo sa ukázalo ako žalostné málo /veľké samplíky hudby a zvukov/ a 1 megabajt bol praktickým, zlatým štandardom. Another World si na PC vystačil asi s 600 kilobajtami RAM. Vykresľovanie polygónov pri amige mal na starosti Blitter /funkcia fill a draw line/.

Atari ST verzia vznikala paralelne s tou pre Amigu. Detto Motorola CPU 68000 ale rýchlejšia na 8 Mhz. Hra viacmenej zámerne používa iba 16 farieb naraz /aj na amige, aj keď by táto zvládla aj 4 krát toľko/ práve s ohľadom na Atari ST. Hra neuvyužívala rozšírené možnosti málo rozšírenej Atari STE, ktoré by ju viac priblížili ku amige ale mierila na chudobnejšiu ST. To znamená, že kód hry sa nemohol spoliehať na Blitter alebo DMA. Ako to teda ST vôbec dokázalo ?  Maximalizovala sa softvérová optimalizácia až na úroveň jednotlivých inštrukcií s využitím množstva programátorských trikov /aj variabilný "shader" algoritmus/. Hra ma technicky čiste softvérový blitting a efektívne sa využíva odlišný spôsob adresovania pamäte ST, ktorý je pomalší v 2D ako pri amige, ale rýchlejší pri "3D". Amiga teda hru utiahne pod 25fps a ST iba o trošku pomalšie, ale v tom istom rozlíšení 320x200px a kvalite animácie.

PC MS-DOS verzia. Projekt rátal s použitím i386 na 16Mhz s 2 megami RAM. PC nemá DMA použiteľné pre grafiku, nemá blitter, nemá samplované ani PSG audio /ako Atari ST/, grafický adaptér je často iba na 8bit zbernici. PC je teda rýchle CPU s veľmi pomalou "2D" grafikou zavesené na kope RAM. Konverzia hry preto prešla rovnako intenzívnou liečbou ako na Atari ST. Využilo sa veľmi rýchle "3D" mapovanie pamäte a optimalizovalo o dušu. Výsledkom bolo zníženie odporúčanej konfigurácie pre plynulé hranie na i286 na 10Mhz CPU s 640 KB RAM vo farebných paletách pre TGA, EGA a 256 farebnú VGA grafické karty.

vkusná európska a nevkusná americká obálka

Sega Megadrive /MD/ a Super Nintedo /SNES/. Obe sú prvý jasne výkonnejšie ako Amiga alebo Atari ST, takže sa žiadne veľké problémy neočakávali. MD má overené CPU 68000 na 7.61Mhz, veľmi výkonné DMA /fill, copy/, skvelú grafiku v podobe VDP čipu. Bohužiaľ sa ukázalo a testy potvrdili, že je to všetko hrubo nevhodné pre vektorovú grafiku AW a MD nemá dosť grafickej pamäte /iba 64KB/ na uloženie štyroch framebufferov. Musíme teda využiť aj hlavnú pracovnú RAM /tiež 64 kilo/ a celá grafika sa preklopí do tile map 8x8 pixel formátu. Kopa transferov medzi RAM a VRAM nie je zadarmo a je problémom, lebo MD nie je stavané na riešenie "full screen" grafiky týmto spôsobom. Matematika. Grafický H32 mód s 32x28 bunkami, aktívných bude iba 28x22 /necháme tam čierny okraj a ušetríme trochu priepustnosť/ a teda 224x176 pixelov/19 KB na frame, tri frejmy teda vieme natlačiť do 64KB  pracovnej RAM, v VRAM je uložený 2 x "double" buffer. SNES riešenie vyzerá v podstate rovnako. Výhodou je väčšia hlavná RAM /128KB vs 64 pri MD/ a jednou z nevýhod oveľa pomalšie CPU. Výsledné rozlíšenie hry - iba 224x160 pixelov !!

3DO konzolka - "nevektorové", kreslené fujky pozadia

Another World teda zjavne ku dobrému behu potrebuje hlavne rýchle CPU a veľa RAM. Po všetkých tých trampotách si položme otázku, ako by sme tu hru dnes, v modernej súčasnosti dostali aj na staré či nové 8 bity. Odpoveď je - vcelku ľahko. Éric Chahi totiž ešte počas vývoja Amiga/Atari ST verzie pridal do kódu špecialny "bit", ktorý umožňuje zbaviť sa vektorovej grafike a nahradiť ju kompletne bitmapami samozrejme na úkor razantného navýšenie celkovej veľkosti hry. Presne tak to urobila aj naozaj hnusná verzia pre inak dostatočne výkonnú konzolku 3DO. Elegantné vektory skončili ako rozpatlané vodovkové fantázie. Pri 8 bitoch /vrátane ninja rýchleho ZX Spectrum Next/ však môžte zachovať aj v bitmapách pôvodnú estetiku, len to musíte celé umiestniť na dnes už štandardné, rýchle SD flashky /ZX Spectrum Next ju má v sebe aj s radičom a optimalizovanými inštrukciami pre transfer zabudovanú rovno od výroby/. A hra môže žiť ďalej - C64 Another World koncept v bitmapovom móde.