Appunti e memorie di Ivan Venturi

Fare Videogiochi

 

Scritto daadmin il 08/04/2009 in c64, caratteri, editor, koala, koalapaint, sid, sprites, vic con Nessun commento


…insomma: gli EDITOR e il KOALAPAINT.

Stiamo sempre parlando del periodo 8 bit, 1985 fino al 1991 circa.
Per fare i videogiochi su C64 (come per gli altri computer, ovviamente) era necessario produrre vari tipi di materiali digitali, quali
- i ‘caratteri’ (il termine ‘font’ si è cominciato ad usare solo più tardi), che potevano essere sia i caratteri alfanumerici, sia (e soprattutto) blocchetti di grafica 8×8 pixel utilizzati in maniera modulare per creare grafica hi-res o multicolor nelle normali schermate video. Il C64 funzionava in modalità ‘normale’ o in modalità ‘alta risoluzione’. In modalità ‘normale’ visualizzava solamente i ‘caratteri’. Quindi, modificando questi caratteri, si potevano ottenere belle immagini grafiche pur senza passare per le ‘costose’ (in termini di RAM) ‘schermate hi-res’;
- le ‘schermate hi-res’, che in realtà potevano essere in alta risoluzione (quindi sfruttare pienamente i 320 punti per 200 di risoluzione, ma con pochissimi colori utilizzabili. The Hobbit della Melbourne House usava schermate hi-res) oppure in multicolor, che dimezzava la risoluzione orizzontale, per utilizzare le informazioni delle coppie di bit che così si formavano per ottenere maggiore possibilità d’uso dei colori;
- gli ‘sprites’, ovvero le immagini grandi 24 x 21 pixel che si muovevano indipendentemente dal fondale. Ce n’erano 8. Per esempio, nei giochi di calcio, gli omini erano ovviamente sempre sprites;
- le musiche: utilizzando le 3 voci del SID si potevano creare armonie di vario tipo, con 4 forme d’onda a disposizione (triangolare-trombettata, sinusoidale-flautata, rettangolare-metallica, casuale-noise, rumore), Attack-Decay-Sustain-Release per definire la forma dell’onda e la durata delle sue parti, il volume, i filtri e altre cosette.

I videogiochi usavano gli elementi di cui sopra a quintali. Era necessario quindi poter disporre di adeguati strumenti per lavorare rapidamente e comodamente.

Inizialmente, quando dovevo disegnare dei caratteri o degli sprites, disegnavo sui miei bei quaderni a quadretti (prima o poi ne scannerizzerò alcune pagine e le posto – ne avevo almeno uno per ogni progetto) delle griglie delle dimensioni necessarie, quindi a multipli di 8 se dovevo disegnare dei caratteri, o di 24 (anzi, 8×3) x 21, se dovevo disegnare degli sprites.
Poi disegnavo con la mia biro ed eventuali pennarelli la grafica che dovevo fare.
Poi trasformavo ogni colore in una coppia di bit, 0 o 1.
Poi, a lato di ogni riga-byte calcolavo in esadecimale il byte che descriveva la riga. 00 per riga vuota, FF per riga piena. 81 per il primo pixel a sinistra e l’ultimo a destra accesi.
Poi, inserivo questi numeri da qualche parte nel codice.
Insomma, un procedimento piuttosto lunghetto.

Poi provai a utilizzare editor commerciali. Ricordo uno sprite editor laccatissimo (ma assolutamente non ricordo nè il nome nè la marca), che consentiva di fare varie cose, anche particolari, ma non consentiva di farne varie che servivano a me.

Per quanto riguarda le schermate hi-res, all’inizio usavo un programma che si chiamava… boh, non mi ricordo. Solo in hi-res. Ci giocherellavo ogni tanto. Ma non lo usai lavorativamente mai, perchè quando ebbi la possibilità tecnica di usare la grafica hi-res nei miei giochi, già avevo bisogno di usare più colori (multicolor) e arrivai presto al versatilissimo Koala Paint. Nome che mi è rimasto nel cuore…
Koala Paint era velocissimo da usare, semplice per gestire i file, e utilizzava la tastiera per posizionare il cursore in certi punti dello schermo. C’era lo schermo di ‘menu’, con 16 rettangoloni con le funzioni possibili (Fill-riempi, Draw-disegna, linee, curve, rettangoli, cerchi, gestione file ecc). Con spazio si passava dal menu alla schermata vera e propria. Si usava la tavoletta KoalaPad (che io usai sempre poco, perchè era molto imprecisa) oppure il joystick (che io usavo sempre per disegnare la grafica), spesso punto per punto…
La cosa bella del posizionamento del cursore tramite tastiera, era che funzionava anche nella schermata di lavoro, non solo sui menu. Quindi, premendo il tasto A potevo posizionare rapidamente il cursore in alto a sinistra, senza aspettare di ‘arrivarci’ muovendolo col joystick.

Per quanto riguarda la musica, ancora peggio. Facevo elementari liste di note (anche quelle scritte prima sul mio quaderno in un rudimentale pentagramma) che mettevo in ‘data’ e leggevo sequenzialmente, ‘pokando’ e poi’ storando’ i relativi valori (a due byte) nelle frequenze delle 3 voci audio.

Insomma un delirio! E un procedimento estremamente lento per fare qualsiasi cosa. Oltretutto, ciò non consentiva di fare grosse modifiche a ciò che si era fatto. Una volta che lo sprite o i caratteri erano disegnati su carta, chiuso il discorso, fine dell’ideazione. Dopo aver elaborato la traduzione numerica, non mi veniva in mente neanche di striscio di poter ‘migliorare’ la grafica, rifacendo tutto il procedimento da zero.

Finchè, pian pianino, cominciai a crearmi i miei editor, per automatizzare tutta una serie di operazioni manuali.
Nel ‘char-editor’ e nello ‘sprite-editor’, il primo passo fu poter muoversi nella griglia (che prima disegnavo sul quaderno…) col joystick e premere il bottone per accendere/spegnere un pixel, e avere a fianco, magicamente e automaticamente calcolata, la descrizione numerica esadecimale.
Poi l’opzione per copiare uno sprite, un carattere, ‘flippare’ in X e in Y. All’inizio ridisegnavo uno sprite girato verso sinistra o destra a seconda di come serviva. Allucinante!
Sono quelle cose talmente lente, talmente assurde, che dopo un po’ ti costringi per forza a inventare quello che ti serve!

Fatto sta che, aggiunta dopo aggiunta, anno dopo anno, arrivai a crearmi degli editor di tutto rispetto, che quando potevo facevo utilizzare anche da altri miei colleghi che lavoravano su C64.
Arrivai allo ‘sprite-char’ editor integrato, un unico editor col quale potevo fare tutto e in maniera combinata, nel senso che potevo lavorare su una schermata grafica composta da caratteri e completata da sprites, con funzioni di zoom, di animazione, di salvataggio e gestione file eccetera.
Insomma tutte le cose che il buon senso di produzione richiedeva. Intercettavo il raster (cioè il pennello elettronico del televisore) per moltiplicare le porzioni di video a diverse risoluzioni e il numero di sprite contemporaneo (per averne più di 8).

Realizzai anche un editor piuttosto complesso per la musica, ispirato al pro-tracker per Amiga. Ma questo lo scrissi piuttosto avanti, nel ’91, e l’ho usato anche relativamente poco.
La (elementarissima) musica di F1 Manager fu scritta più o meno casualmente. Cioè: prima feci una base di batteria (chiamiamola così…) , poi gli misi sopra una prima base armonica, poi una seconda. Erano due brevi strofe piuttosto simili, piuttosto rombati, che alla fine marchiavano bene F1 Manager. Ancora potrei fischiettarla.
Onestamente, ero partito da un’idea completamente diversa e più articolata, ma quella musica fu l’unica cosa che riuscii a produrre.

Spesso utilizzai i miei editor per produrre gli elementi grafici anche per i giochi che non programmavo io. Ricordo la simbiosi tecnica raggiunta con Stefano Balzani (quando lavorava ai giochi su C64, prima di passare all’Amiga, quindi GP Tennis Manager C64, 500 cc Motomanager C64, dei quali io feci la grafica oltre la direzione di produzione. E anche Big Game Fishing C64) e il grande Nicola Ferioli (per I play 3D Soccer C64, Football Champ, Dylan Dog). Per Dylan Dog, ricordo però che, per per passare l’enorme quantità di grafica del finale a Nicola, gli passavo direttamente le schermate Koala Paint, dato che lui era autonomo a dir poco nel ‘ritagliarle’ al meglio. “Mandami pure le schermate, poi ci penso io” ricordo che mi diceva quando ci sentivamo al telefono. E quel “ci penso io” era per me una sicurezza assoluta di lavoro perfetto. Grande Nicola Ferioli.
r />Concludo dicendo che programmare gli editor era per me il massimo del divertimento. Raggiunto un certo livello tecnico di programmazione, nel quale potevo scrivere in assembler tutto quello che mi serviva e in basic (poi compilato) tutto ciò che non richiedeva troppa velocità, unito a una conoscenza ormai approfonditissima del C64, lavorare agli editor era assolutamente facile. Quindi in una mattinata di lavoro riuscivo ad aggiungere funzioni rivoluzionarie (per i miei usi interni, naturalmente). Con il massimo della soddisfazione. Sia per essere ‘avanzato di un passo’ con i miei strumenti, sia perchè sapevo che per creare ‘caratteri’ o ‘sprites’, con la nuova versione dell’editor, ci avrei messo ancora meno, e avrei quindi potuto fare ancora di più.

Bookmark and Share

C’erano tanti Commodore 64 quanti Sinclair Spectrum. Il mondo degli homecomputeristi era equamente diviso tra Commodoristi e Sinclairisti.
Io ero un commodorista convinto.
Il Commodore 64 era una splendida macchina per la sua compattezza e per le tante risorse che offriva. Vale la pena di soffermarcisi per capire la base dell’architettura hardware di un computer.
Era un computer a 8 bit basato sul microprocessore MOS Technology 6510 [nda: grazie Roberto Ready64!...], evoluzione del 6502 che già aveva animato il suo predececessore VIC20.
Il microprocessore offriva una buona quantità di istruzioni a basso livello (linguaggio macchina) che permetteva varie operazioni utilizzando tre variabili di sistema, l’Accumulatore, il Registro X e quello Y. Ogni istruzione di linguaggio macchina era identificata da un numero esadecimale di un byte (da 0 e 255, o meglio da 0 a FF).
Il basic offriva una gamma di istruzioni che consentivano con molta immediatezza di operare sulle variabili, sugli array, sull’input-output, sul testo e altro. Per manipolare anche in maniera semplice la grafica o l’audio bisognava invece operare direttamente sui registri, quindi andando ad ‘accendere’ e ‘spegnere’ i singoli interruttori-bit di sistema.
Il VIC era il circuito video, quella che adesso nei PC è la scheda grafica. Si avevano a disposizione 8 sprites, oggetti indipendenti dallo sfondo che si potevano muovere, colorare o ingrandire agendo su certi registri. Per indicare al circuito video la forma che dovevano assumere lo sprite, bisognava inserire un valore (anzi ‘pokare’, dall’istruzione POKE, cioè metti il tale byte nella tal locazione di memoria) in un certo registro per determinare a quale pagina (così era indicata una sezione di memoria da 256 byte) fare riferimento. Il VIC così sapeva dove andare a pescare i dati per dare forma allo sprite.
C’erano 16 colori e una risoluzione di 320×200, anche se, volendo usare in maniera abbastanza completa la palette disponibile, si era costretti a lavorare in modalità multicolor, 160×200. Praticamente, prendete un paio di icone di Windows Vista, affiancatele e avrete la risoluzione utilizzata nei giochi del C64!
Per fare grafica di un certo livello, bisognava usare diversi trucchi per superare i limiti imposti dall’hardware.
Lo Spectrum aveva sempre 16 colori e 320×200 punti che definivano lo schermo, e permetteva di lavorare più facilmente in alta risoluzione. Ma aveva alcuni grossi handicap: aveva un pessimo audio (simile al beep mono dei primi PC), non aveva sprites e non aveva la possibilità di utilizzare il joystick, costringendo i poveri utenti Sinclair a usare quei tastini ricavati da un unico foglio di gomma.
Il SID era invece il circuito sonoro. C’erano 3 voci indipendenti che si potevano far suonare con un onda di forma sinusoidale (come un flauto), triangolare (come una tromba), rettangolare (come un pianoforte), oppure come rumore (noise). Di ogni voce poteva essere regolata la frequenza (la nota), potevano essere applicati dei filtri e si poteva modificare il volume.
Il basic aveva a disposizione 38k circa di memoria. Ma lavorando in linguaggio macchina si aveva accesso anche alle aree ‘alte’ della memoria, non utilizzabili in basic, nonché alla ‘memoria fantasma’..
Agendo col linguaggio macchina e imparando un po’ di trucchi era possibile intercettare la posizione del raster, cioè del pennello elettronico che, 24 volte al secondo, punto per punto, spara gli elettroni sul video della televisione o del monitor illuminandoli e formando l’immagine. Modificando rapidamente, in linguaggio macchina, i registri del circuito video, si poteva raddoppiare o triplicare il numero di sprites disponibili, aumentare il numero di colori sullo schermo, eliminare i bordi, far scorrere lo schermo in maniera fluida e un milione di altre cose.
Per quanto riguarda l’hardware, il computer si collegava tramite un normale cavo coassiale alla televisione o a un monitor. La memoria di massa era costituita da un registratore a cassette, che presto fu sostituito dal floppy disk da 5,1/4 pollici. Per alcuni addetti ai lavori o appassionati (il che era uguale) tra i quali io, circolavano anche schede e cavi particolari, che consentivano di duplicare, triplicare la velocità di tali dischi.

Gli homecomputer furono questo: la scoperta di un mondo virtuale ma assolutamente concreto, da esplorare, smanettare e utilizzare in un modo che all’inizio dava quasi l’impressione di essere magico. Non era particolarmente difficile. Ma il fatto che non lo facessero in molti, né che molti eminenti esperti ne sapessero un’acca, rendeva chi utilizzava gli homecomputer una sorta di misteriosi guru.
Personalmente immaginavo il computer come un mondo a parte, in un’altra dimensione, dove le informazioni scorrevano come luce e i programmi si animavano di vita propria. Avete presente Tron?

Bookmark and Share

Nel 1987 ho fatto il primo videogioco della Simulmondo, prima software house italiana. Da allora ne ho fatti altre migliaia.
Dalla fine del millennio scorso faccio videogiochi educativi ed ora anche simulatori di guida e avventure di inquisitori medievali.
Poi nel 2003 ho fondato Koala Games, ora diventatata TIconBLU. E mi occupo di un bel po' di altre cose videoludiche varie.
E...VIVA I VIDEOGIOCHI ITALIANI!