Parallasse, chi era costui?

Torna all’indice

di Andrea Pompili

Catalypse e Parallasse, chi era costui? sono la storia di uno dei più famosi giochi per il Commodore64, pensato e realizzato da un (all’epoca) giovanissimo programmatore e musicista italiano, Andrea Pompili, che nel corso degli anni – suo malgrado – sarebbe diventato un protagonista di una delle più clamorose vicende legate alla sicurezza informatica in Italia. La sua storia è raccontata nel libro Le Tigri di Telecom pubblicato da Stampa Alternativa.

Nel mondo della grafica bidimensionale non esiste quel concetto di profondità di campo tipico dei giochi 3D. La dinamica di gioco viene vista dall’alto o dal lato, con una visuale panoramica del proprio giocatore e uno sfondo che scorre opposto alla direzione di movimento per dare la sensazione di spostamento.

I nemici e lo sfondo sono quindi un elemento solidale che si muove sullo stesso piano del giocatore, lasciando ad un anonimo colore nero o azzurro il compito di rappresentare il resto dello scenario. Alcuni giochi avevano anche uno scenario sottostante, anch’esso però solidale con lo sfondo principale e quindi con un fastidioso effetto legato all’assenza di una profondità di campo che a volte confondeva il giocatore sulle manovre corrette da effettuare.

I giochi di rango introducevano quindi il concetto del “parallasse”, niente a che vedere con l’astronomia, ma che risulta essere una delle tecniche fondamentali dei vecchi videogiochi bidimensionali. Uno sfondo dotato di parallasse o parallattico, presenta diversi livelli di sfondo che si muovono a velocità differenti per dare l’effetto di una profondità di campo. Si immagini uno scenario parallattico in cui sul primo livello troviamo il terreno dove si muove il giocatore e quindi gli alberi e le case con cui può interagire, poi un secondo livello, che si muove più lentamente sempre nella stessa direzione del precedente e che riporta una foresta e qualche casolare in secondo piano, quindi un terzo livello, ancora più lento dei precedenti due, che rappresenta un tramonto lontano con nuvole e montagne di sottofondo. Mentre il giocatore si muove lungo la mappa di gioco noterò un bellissimo effetto pseudo-tridimensionale dovuto a particolari di sottofondo che si muovono più lentamente esattamente come avviene nella realtà.

Le vecchie console bidimensionali e i computer degli anni ’90 come Amiga e Atari ST potevano garantire questo effetto attraverso le capacità hardware del proprio processore grafico. Molti si ricorderanno l’effetto flipper di Sonic the Hedgehog (realizzato nel 1991 su Sega Megadrive, due livelli di parallasse a sedici colori) o l’atmosfera di Shadow of the Beast (realizzato nel 1989 su Amiga, il livello principale aveva ben 12 livelli di parallasse, anche se alla fine si trattava di un trucco che sfruttava al massimo i due livelli hardware forniti dall’Amiga stesso). Il C64 ovviamente non aveva nulla di questo, era già tanto che riusciva a spostare lo schermo principale di qualche pixel nelle quattro direzioni cardinali.

La prima generazione di parallasse si basava sulla possibilità di “scorrere” il contenuto di uno o più caratteri di sfondo in direzione opposta alla direzione dello schermo in modo da generare l’effetto di un secondo strato fisso rispetto allo scenario principale. Il trucco era possibile in quanto il C64 non gestiva la grafica a video in modalità “bitmap”, come avviene per i moderni calcolatori, ma mediante un’interfaccia a caratteri basata su tabelle ASCII. Attualmente, infatti, se vuoi disegnare qualcosa sullo schermo, devi sempre indirizzare direttamente il pixel che vuoi accendere impostando una locazione di memoria specifica.

Anche se era possibile farlo per il C64, questa modalità di tracciamento era improponibile a causa della lentezza del processore e il dispendio di memoria grafica che ne sarebbe derivato. Era meglio quindi fare grafica usando la più banale interfaccia a caratteri, che si basava sulla possibilità di tracciare a video 80 colonne e 24 righe di caratteri indirizzando un set predefinito sempre allocato in memoria. Bastava quindi sostituire i caratteri ASCII standard, corrispondenti alle lettere alfabetiche, con porzioni grafiche di scenario, e poi ricostruire lo sfondo di gioco accostando sapientemente questi caratteri fittizi per ottenere un effetto adeguato ad un videogioco. I caratteri avevano dimensione fissa di 8×8 pixel ed erano ovviamente limitati al numero totale previsto dalla tabella ASCII, ma con un po’ di inventiva e di fantasia si potevano lo stesso creare sfondi di rango che non avevano nulla da invidiare alla controparti presenti in sala giochi.

Grazie a questa modalità grafica, era possibile modificare il contenuto di uno o più caratteri ASCII prima della visualizzazione dello schermo per ottenere l’animazione dei proiettili o di alcune parti dello sfondo, ad esempio punte che fuoriescono o il fuoco che brucia. Bastava quindi riservare uno o due caratteri di sfondo con un motivo grafico anonimo, ad esempio qualche stella, un mattone o un motivo geometrico generico, e ad ogni ciclo video spostare l’intero contenuto di uno o due pixel nella direzione opposta allo scorrimento dello schermo principale perché si avesse l’effetto di un doppio livello di parallasse: uno mobile e uno fisso.

Con le stelle si poteva fare di più: posizionando opportunamente i caratteri era possibile ottenere anche tre livelli di scorrimento (Armalyte, Salamander, IO e anche lo stesso Catalypse), anche se alla fine si trattava più di un effetto visivo che un vero e proprio parallasse.

La palma di miglior parallasse su C64 fu comunque di Hawkeye, pubblicato nel 1988 dalla Thalamus. Il gioco, graficamente e musicalmente accattivante, vantava un parallasse composto da due livelli in cui lo sfondo sottostante non era il classico carattere a scorrimento, ma un vero e proprio scenario con caverne, montagne, tramonti e altre amenità grafiche. Mentre il primo livello schizzava nelle due direzioni orizzontali, il secondo rimaneva fisso generando uno strano effetto di immersione tridimensionale, unico del suo genere.

In realtà il trucco era sempre lo stesso, solo che invece dei classici due caratteri a scorrimento se ne utilizzavano molti di più. Anzi, per evitare di perdere preziosi cicli macchina spostando discrete quantità di byte, i programmatori avevano deciso di generare ben quattro diversi set di caratteri, ciascuno con i caratteri dedicati allo sfondo spostati di un paio di pixel verso destra. All’inizio di ogni ciclo video, mentre veniva spostato di un paio di pixel lo schermo principale, veniva opportunamente impostato uno dei quattro set di caratteri in modo che lo sfondo sembrasse effettivamente fermo (in realtà i caratteri che componevano il secondo livello erano i precedenti spostati di un paio di pixel in direzione opposta allo scorrimento).

Il problema si manifestava dopo quattro spostamenti verso la stessa direzione: tutto il primo livello doveva infatti essere spostato di un carattere verso la direzione di scorrimento, ma il secondo doveva rimanere nella stessa posizione ricominciando con il set di caratteri iniziale. Pensare di spostare i caratteri uno per uno sarebbe stato un suicidio di cicli macchina, quindi i programmatori scelsero di spostare tutto e quindi ridisegnare il secondo livello all’interno degli spazi trasparenti del primo livello. Lo sforzo, anche se inferiore, era comunque impossibile per un’area di gioco grande quanto lo schermo video, ecco perché l’azione di Hawkeye si svolgeva in un’area più stretta (16 righe contro le 24 dello schermo intero).

Successivamente ad Hawkeye fu il turno di Flimbo’s Quest, Rubicon e Turrican 2, basati su tecniche simili, in grado di mostrare persino un secondo livello in movimento. Il trucco era sempre lo stesso, anche se raffinato in termini di istruzioni utilizzate e tempi di scorrimento dei caratteri che consentivano anche aree di gioco superiori. Onore comunque a Mario Van Zeist dei Boys without Brains per aver per primo mostrato l’efficacia di questa tecnica a tutti i sessantaquattristi del mondo.

La nuova generazione: Amiga e il parallasse

Chi ha giocherellato un po’ con le specifiche del processore grafico Amiga saprà che è possibile generare due livelli indipendenti di sfondo che possono essere disegnati e spostati separatamente per ottenere, ad esempio, l’effetto del parallasse. Tutti sapevano che il vecchio Amiga aveva una sera limitazione hardware che imponeva l’assegnazione di otto colori per livello, che per quello in primo piano si riducevano a sette perché l’ultimo era, appunto, il colore trasparente.

Il terzo livello della versione Amiga di Turrican, era un bellissimo shoot-em-up verticale che, incredibilmente, aveva uno sfondo fatto da due livelli di parallasse con 16 colori ciascuno. Era impossibile.

Mentre stava programmando i tre livelli di parallasse di Deux, Andrea decise di dare una sbirciatina per capire come riusciva Holger Schmidt a duplicare i colori su schermo. Interruppe il gioco mediante una delle tante cartucce in grado di effettuare il “freeze” del programma in esecuzione e visualizzò la memoria video che in quel momento rappresentava lo schermo di gioco. C’era tutto: i nemici, i proiettili, i grovigli tecnologici che componevano lo scenario, ma lo sfondo era completamente nero: non c’era alcun secondo sfondo parallattico. Dove era finito?

Il trucco ricalcava molto quello descritto precedentemente, solo che adesso gli interrupt venivano impostati anche su posizionamento orizzontale. Si riservavano due sprite a sedici colori per lo sfondo, che affiancati garantivano un’altezza pari all’intero schermo e una larghezza di 32 pixel (come da specifiche Hardware Amiga). Il lavoro duro lo faceva quindi il Copper, il coprocessore Amiga in grado di vedere e modificare le aree di memoria riservate alle impostazioni audio e video degli altri processori. Tale coprocessore aveva un funzionamento indipendente dal processore principale e aveva un suo slot temporale di attivazione, chiamato DMA, in cui poteva eseguire le operazioni di impostazione della posizione orizzontale degli sprite o del contenuto degli stessi.

Durante il disegno di ogni riga video, il Copper attendeva la posizione orizzontale in cui terminavano i primi due sprite e quindi li spostava in modo da forzarne di nuovo il disegno, questo fino al termine della riga video per ricominciare alla riga successiva. Un lavoro immane semplificato dalla semplicità di programmazione del Copper e dalla possibilità di scrivere facilmente codice auto-modificante.

Come faceva il Copper a non perdere il sincronismo con il tracciamento video? Bastava infatti un micro-secondo di esitazione per ottenere un effetto disastroso. La genialità dei Factor 5 stava proprio nella scelta del numero di colori visualizzati sullo schermo principale. Tutti si erano sempre chiesti perché Turrican non avesse 32 colori su schermo, una scelta orami consueta da parte di tutti i migliori giochi su Amiga in quanto consentiva un maggior impatto cromatico e una migliore differenziazione tra colori dei nemici e colori dello sfondo.

Turrican usava 16 colori perché in quella modalità il numero di DMA assegnati al Copper era sufficiente per non perdere i colpi durante il riposizionamento orizzontale degli sprite. Una scelta necessaria una volta studiato a fondo il modello dei timeslot temporali descritto nel manuale hardware Amiga. Con 32 colori il processore grafico avrebbe dovuto utilizzare un DMA in più, levandolo quindi al Copper e quindi introducendo quel fattore di esitazione in più che non garantiva un’adeguata risposta al termine del tracciamento orizzontale di ciascuna riga di sprite.