Lezione 04: SGDK ed il VDP (Parte 2)

 

Riprendiamo la nostra ROM compilata e lanciamola con il Gens

Adesso che abbiamo dimestichezza con alcune delle opzioni di debug del Gens, è interessante aprire con l'emulatore la ROM del nostro esempio di "Benvenuti al corso" ed analizzare i contenuti dei vari piani, della VRAM del VDP e le palette.
Aprendo i menu di debug introdotti a fine della lezione precedente, dovreste avere una situazione come questa:

 

 

 

 

 

Come potete vedere nell'immagine abbiamo che:

  • La scritta "Benvenuti..." è avvenuta sul Piano A, ovvero il primo piano, definito con un buffer di 64x32 tiles.
  • Le quattro palette sono inizializzate come ci aspettavamo, PAL0 con sfumature di grigio, PAL1 con sfumature di rosso, PAL2 con sfumature di verde e PAL3 con sfumature di blu.
  • I caratteri del font con cui si è scritto a video sono visibili nella finestra che evidenzia le tiles, scrollando verso il basso. Sono tiles a tutti gli effetti e che sono immagazzinate assieme alle tiles del fondale e/o degli sprite.
  • L'SGDK, tra le sue inizializzazioni, ha anche preparato spazio in VRAM sufficiente per 1310 tiles (+ 96 per il font)

E' importante capire che il VDP, per poter visualizzare qualcosa, deve averla nella VRAM che è di soli 64KB. Questo significa che per avere varietà di tiles e creare livelli differenti, varietà di nemici ed animazioni più complesse, spesso dovremo spostare le informazioni dalla ROM della cartuccia al VDP. Questa procedura ha chiaramente un limite, che è dato dalla velocità di trasferimento dati ed è di ca. 7KB/frame (7524 bytes per frame).

 


31

Esempio di come un font è contenuto nei tiles

Prendiamo il controllo della situazione

Tutte le impostazioni di default operate durante l'inizializzazione da parte dell'SGDK sono chiaramente modificabili a seconda delle nostre esigenze.
Vediamo quindi come stravolgere il nostro codice per:

  • Scrivere sul Piano B (sfondo) invece che sul Piano A.
  • Utilizzare una palette diversa dalla PAL0 (di default).
  • Caricare un nostro font.
  • Creare una palette dall'immagine del font.

Per scegliere il piano su cui scrivere mediante l'istruzione VDP_Drawtext, bisogna chiamare la funzione VDP_setTextPlan(piano); specificando il piano su cui operare. In questo caso vogliamo VDP_setTextPlan(PLAN_B);

Per impostare la palette da usare tra le quattro disponibili, esiste la funzione VDP_setTextPalette(NPalette); Per indicare quale palette utilizzare avremo PAL0, PAL1, PAL2 o PAL3.

Caricare un font, come visto prima, equivale a caricare delle tiles e l'SGDK facilita moltissimo questo compito. 
Per aggiungere ad una ROM una risorsa,  sia essa, ad esempio, un'immagine o di un file sonoro, occorre compilare un file RES da collocare nell'apposita cartella RES che avevamo creato nella Lezione 02, che è contenuta all'interno del cartella con il nostro progetto.
Sempre all'interno di quella cartella, od in una sua sotto-cartella, possiamo collocare i vari files BMP, PNG, WAV, etc... che vogliamo importare nella nostra ROM.

Come aggiungere una risorsa

Per aggiungere una risorsa occorre quindi il file che volete aggiungere e dobbiamo segnalare al compilatore che vogliamo importare questo file cosi, in fase di compilazione, questo sarà incluso nel nostro progetto.
Nel nostro caso vogliamo un font diverso.
L'immagine qui a destra contiene un font dove ho modificato i numeri e le lettere maiuscole, cliccate sull'immagine, e poi scaricate l'immagine (tasto destro sulla stessa) all'interno della cartella res dentro il vostro progetto.

myfont

Il nostro nuovo font

All'interno del file RES dobbiamo dichiarare per ogni risorsa il tipo, il nome con cui ci vogliamo riferire, il nome del file da cui leggerla ed un flag relativo alla compressione o meno della risorsa. Quest'ultimo, per ora, lasciamolo a zero.
Abbiamo quindi che resources.res conterrà:

Quando avvieremo nuovamente la compilazione, un file resources.h verrà creato all'interno della cartella res.

Occorre quindi, finalmente, modificare il nostro main.c con tutte le modifiche discusse, ricordandoci di includere in testa al codice anche il nuovo resources.h:

Compilate come al solito e lanciamo la ROM nel Gens così da poter verificare, con gli strumenti di debug, che  le modifiche al sorgente hanno sortito gli effetti attesi.
Ecco il risultato:

L'ultima modifica che vogliamo operare prima di chiudere questa lezione, è quella relativa alla capacità di leggere una palette dall'immagine che stiamo caricando, cosi da preservarne i colori con i quali era stata disegnata.

Prendiamo questa nuova immagine di un font multicolore e salviamola sempre nel folder res, assieme alla precedente. Per comodità chiameremo questa immagine myfont_mc.png.



Modifichiamo il file resources.res cosi che includa questa immagine e non la precedente ed infine aggiungiamo una riga al nostro codice nel main.c.