|
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
|
|