Genesi | Realizzazione | Illustrazioni | Versioni | Re-release  
  ANOTHER WORLD  
  Realizzazione  
  Equipment
Un Amiga 500 con 1 MB di ram + 20Mb hard drive
Una telecamera, un genlock e un video registratore per creare le animazioni tramite la tecnica del rotoscoping.
Un registratrore a cassette (tape) per registrare gli effetti sonori.


"I modellini utilizzati per il rotoscoping…"

Software
Applicazioni:
Deluxe Paint, ottimo programma per la pixel art, lo utilizzo ancora oggi per realizzare alcuni fondali.
Devpac assembler, utilizzato per programmare l'engine del gioco ed i  poligoni.
GFA basic, utilizzato specificatamente per creare l'editor del gioco Another World.

Con l'avvento delle macchine a 16-bit, il linguaggio C divenne più popolare nell'industria dei videogiochi, quest'ultimo infatti (C) aveva molti vantaggi rispetto all'Assembler (portabilità, strutturazione ed era più semplice da apprendere). Lo avevo provato senza alcun successo su Atari ST, tre anni prima di impegnarmi come designer grafico per qualche tempo. Il compilatore era precario, il minimo errore di programmazione mandava in crash la macchina, inoltre i tempi di compilazione erano esasperanti. Quell'esperienza mi ha estenuato. Mi è sempre piaciuta la semplicità, e l'evolversi di alcuni linguaggi di programmazione, che non necessitavano di compilare tutto attirò la mia attenzione, orientandomi verso il GFA basic. Semplice come lo standard Basic e molto ben strutturato, basato su un sistema che gestisce variabili locali, un pò come il C. GFA è un software eccellente. Inoltre e ampliabile tramite programmi esterni scritti in Assembler. Che fu proprio quello che feci: presi il meglio da entrambi, in un primo momento utilizzando GFA per programmare velocemente l'editor del gioco, e dopo passai all'Assembler, che utilizzai solamente per l'engine e le parti grafiche che necessitavano di migliori prestazioni. Tra le due cose, rimaneva ancora il Codice del Gioco da interpretare !

Game editor:
Ho voluto creare un tool completo che mi permettesse di creare e testare l'intero gioco, senza la necessità di compilare ogni cosa, o dovere cambiare applicazione continuamente.

Non mi piace sprecare tempo con la tecnologia, ed in modo particolare con un sistema operativo.

Così, ecco quali erano le priorità:

- La logica del gioco avrebbe dovuto essere programmata in un linguaggio indipendente dalla piattaforma, in modo da evitare processi di  compilazione o conversione di dati. Con questo concetto è venuto naturale orientarsi verso la creazione di un programma interprete di scripts. Ho sviluppato un mini-linguaggio strutturato in 64 canali eseguibili indipendentemente, con 256 variabili.

- Assemblaggio dei poligoni: ogni immagine visualizzata a schermo era composta da più poligoni, così era essenziale riuscire a riunirli per gestirli come unico oggetto, ne facilitava la manipolazione.

Per esempio; in un personaggio.



- Visualizzazione a struttura gerarchica: I gruppi di poligoni avrebbero potuto essere utilizzati insieme in modo da formare ulteriori oggetti. Questa struttura gerarchica ha evitato l'ideazione di un sistema che gestisse le priorità a schermo. Per esempio, costituire un gruppo specifico di poligoni per la testa del protagonista, permette di ri-utilizzarlo facilmente in tutte le altre fasi dell'animazione.


Rotoscoping :
Questa tecnica, utilizzata nelle animazioni tradizionali, consiste nel filmare attori reali, e dopo replicare ogni loro singolo movimento su celluloide. Così facendo si ottengono animazioni molto realistiche. E' stata utilizzata per creare diverse animazioni in Another World, specialmente quelle che avessero maggiore attinenza con la realtà, come la sbandata dell'auto, che è stata realizzata in scala filmando un modellino. Il movimento dei piedi nell'introduzione, la camminata e la corsa del personaggio.

Provare a realizzare una cosa del genere su un computer a quell'epoca, significava fare tutto da sè... era una tecnologia difficile da acquisire.

Il primo pensiero fu quello di utilizzare del cellophane come copia carbone. Cioè applicare il cellophane sullo schermo della TV per tracciare i contorni di un fermo immagine a schermo, con un pennarello, e  successivamente applicarlo allo schermo del computer e riprodurre l'immagine con un programma di grafica. Questo metodo non era poi così male per le immagini fisse, come ad esempio un'illustrazione. L'avevo già utilizzato in "Le Pacte" per Amstrad, ma utilizzarlo adesso per una sequenza video sarebbe stato da pazzi.

La seconda idea fu quella di collegare un GenLock all'Amiga. Si tratta di uno strumento che permette al computer di interpretare sequenze video in tempo reale, proveniente ad esempio da una telecamera... Sembra semplice, ma non era quello il caso, perchè a quel tempo non esistevano DVD, e nemmeno telecamere digitali che ti permettessero di freezare perfettamente un frame (creare un fermo immagine preciso). Così dovevo riversare tutte le sequenze registrate, dalla telecamera analogica al tape VHS...

In pratica, ogni immagine del video veniva replicata manualmente sottoforma di poligoni all'interno dell'editor. Dovevo fare il tutto in maniera abbastanza veloce  poichè il videoregistratore non rimaneva in pausa a lungo, a un certo punto si fermava (stop) automaticamente per preservare lo stato della videocassetta. Era una corsa contro il tempo, alla fine i benefici di tale tecnica furono soprattutto evidenti  nell'introduzione.

Due sequenze video realizzate durante la creazione del gioco con la tecnica del rotoscoping :
Extract 1 , extract 2.


Descrizione dettagliata dell'engine del gioco :

I. L'editor a poligoni :



Clicca sull'immagine per vedere la descrizione delle icone.



II. Script editor:


Questo gioco è stato programmato con un linguaggio composto da Basic e Assembler. Nella finestra in alto puoi vedere le funzioni di editing, nella finestra in basso invece il codice da editare linea per linea. Il set di comandi a disposizione del linguaggio è molto ridotto, solamente trenta "parole".  E tramite questo è stata programmata la logica del gioco, inclusi i comandi del joystick.


Set di istruzioni :

Instruzioni relative ai media, grafica, suono, palette:

Load "file number"

Carica un file in memoria, come un suono, livello o un'immagine.

Play "file number" note, volume, channel
Riproduce il suono del file, in uno dei quattro canali audio a disposizione del gioco, specificandone altezza e volume.

Song "file number" Tempo, Position

Avvia una song.

Fade "palette number"
Cambia il colore della palette.

Clr "Screen number", Color
Cancella uno schermo con un colore.
Nel gioco ci sono 4 screen buffers..

Copy "Screen number A", "Screen number B"

Copia lo screen buffer A sullo screen buffer B.

Show "Screen number" :
Mostra lo screen buffer specificato nel frame successivo.

SetWS "Screen number" :
Imposta lo schermo di lavoro, che è quello dove verranno disegnati i poligoni di default.

Spr "'object name" , x, y, z

Utilizza il tool grafico sullo schermo di lavoro, secondo le coordinate x,y e il fattore di zoom z. Un poligono, un gruppo di poligoni...

Text "text number", x, y, color

Mostra il testo specificato sullo schermo di lavoro, alle coordinate x,y.


Variabili e loro manipolazione :
Set.i variable, value
Inizializza la variabile con un valore intero a partire da -32768 to 32767.


Set variable1,variable2
Inizializza la variabile 1 con la variabile 2.
Variabile1 = Variabile2


Addi Variable, Value
Variabile = Variabile + valore intero


Add Variable1, Variable2

Variabile1 = Variabile 1 + Variabile2


Sub Variable1, Variable2
Variabile1 = Variabile1 - Variabile2


Andi Variable, Value
Variabile = Variabile AND valore


Ori Variable, Value
Variabile = Variabile OR valore


Lsl Variable, N
Effettua una rotazione N a sinistra sulla variabile. Zero a destra.


Lsr Variable, N
Effettua una rotazione N a destra sulla variabile. 


Istruzioni di collegamento :

Jmp Adresse
Continua l'esecuzione del codice all'indirizzo specificato.


Jsr Adress
Esegue la subroutine situata all'indirizzo specificato.


Return

Fine della subroutine.


Istruzioni condizionali :
Si (Variable) Condition (Variable ou value) jmp adresse
Collegamento Condizionale,
Se (=Si) la comparazione delle variabili va bene, l'esecuzione continua all'indirizzo specificato.


Dbra Variable, Adress
Decrementa la variabile, se il risultato è diverso da zero l'esecuzione continua all'indirizzo specificato.


Infine, non per ordine di importanza, le istruzioni strutturali :

Setvec "numéro de canal", adresse
Inizializza un canale con un codice indirizzo da eseguire

Vec début, fin, type
Cancella, blocca o sblocca una serie di canali.

Break
Ferma temporaneamente il canale in esecuzione e passa al successivo.

Bigend
Ferma permanentemente il canale in esecuzione e passa al successivo.

L'esecuzione del gioco è strutturata in 64 canali eseguibili indipendentemente e 256 variabili.

Ogni canale esegue una specifica parte del codice. Ad esempio, un canale gestisce la logica ed i movimenti del personaggio, mentre un altro canale ne gestisce la visualizzazione a schermo. Un altro canale mostra gli uccelli sullo sfondo, ed un altro ancora lancerà una specifica animazione durante il dato evento.

I canali vengono eseguiti in ordine, e l'istruzione Break indica il passaggio al canale successivo. Una volta raggiunti i 64 canali, il frame del gioco viene visualizzato ed il ciclo ricomincia. Ogni canale può azionarne un altro tramite istruzioni Setvec. Nell'esempio sotto riportato, supponiamo che il canale 2 gestisca un personaggio, il canale 2 decide di sparare, innescando il canale 64 che verrà visualizzato tramite il codice caricato, in uno sparo laser.



Posiziona il cursore sull'immagine per osservarne l'evoluzione.


Il laser diventa autonomo e scompare una volta uscito dallo schermo, o quando colpisce qualcosa, ad esempio una porta, inizializzando una variabile che farà esplodere la porta.

Il flusso dati (codice) che attraversa i canali costituisce 254 variabili globali per l'intero gioco. Compresi i comandi del joystick.


>> Pagina Illustrazioni