Inform e Glulx/Inform e Glulx/La grafica e il sonoro

Indice del libro

La grafica e il sonoro

modifica

Ora che sappiamo come compilare ed eseguire un listato in Glulx, possiamo finalmente esaminare il primo file di esempio (sgw_test_it.inf):

Constant Story "Test per sgw";
Constant Headline
            "^Simple Glulxe Wrapper (sgw)
            ^di Alessandro Schillaci^^";

Include "Parser"; Include "sgw.h"; ! Inclusione della libreria SGW Include "Infglk";
Object LibraryMessages with before [; LMODE1 : lookmode = 2; Message_lmode(1); rtrue; LMODE2 : lookmode = 2; Message_lmode(2); rtrue; LMODE3 : lookmode = 2; Message_lmode(3); rtrue; ];
Include "VerbLib"; Include "Replace"; Include "sgw_test_it.bli";
! ---------------------------------------------------------------------- Object room_1 "room 1" with description [; print "Una semplice stanza di esempio. Stanza 1.^"; viewImageLeft(room1); rtrue; ], cant_go "Puoi muoverti solo a nord, verso la stanza 2.", n_to room_2, has light;
Object room_2 "room 2" with description [; print "Una semplice stanza di esempio. Stanza 2.^"; viewImageLeft(room2); rtrue; ], cant_go "Puoi muoverti a nord verso la stanza 3 oppure a sud, verso la stanza 1.", n_to room_3, s_to room_1, has light;
Object room_3 "room 3" with description [; print "Una semplice stanza di esempio. Stanza 3.^"; viewImageLeft(room3); rtrue; ], cant_go "Puoi muoverti solo a sud, verso la stanza 2.", s_to room_2, has light;
! ---------------------------------------------------------------------- [ Initialise; initializeSGW(240); ! Imposta la finestra grafica alta 240 pixel location = room_1; lookmode = 2; viewImageLeft(room1); playSound(chan1,rumble,1,VOLUME_HIGH); playSound(chan2,heart,-1,VOLUME_NORMAL); ];
[Message_lmode x; if (x == 1 or 3) print " supporta solo la modalit@`a ~completa~, che d@`a descrizioni lunghe per tutti i luoghi (anche se gi@`a visitati).^"; else print " @`e gi@`a in modalit@`a completa.^"; ];
! ---------------------------------------------------------------------- Include "ItalianG";

Il risultato è quello visto nella figura del paragrafo precedente. Nella funzione Initialise, l’istruzione initializeSGW inizializza gli oggetti della libreria e crea una finestra grafica per le immagini con altezza uguale a n pixel. Ovviamente, è possibile utilizzare un altro valore per cambiare le dimensioni delle immagini, a condizione però che queste siano nel formato JPG o PNG e che abbiano un’altezza uguale al valore specificato (le immagini usate in questo esempio hanno una dimensione di 620x240 pixel – da qui il valore 240).

L’istruzione playSound è invece dedicata ai suoni, che devono essere nel formato aif; per funzionare, ha bisogno di ben quattro parametri nell’ordine: il tipo di canale (music per la musica oppure chan1 e chan2 per gli effetti), il nome del suono che deve essere eseguito, il numero di volte che il suono deve essere riprodotto (-1 = all'infinito) e il volume che può essere a sua volta alto (VOLUME_HIGH), normale (VOLUME_NORMAL) o basso (VOLUME_LOW).

L’istruzione viewImageLeft, infine, è quella che visualizza l’immagine alla sinistra dello schermo[1]. Attenzione però: poiché Glulx in modalità standard (quella cioè normale), considera la description di una stanza una sola volta, per la visualizzazione delle immagini occorre necessariamente impostare la modalità completa nella funzione Initialise (assegnando il valore 2 alla variabile di libreria lookmode) e disabilitare in maniera permanente le altre due modalità (la breve e la normale)[2]. Solo così si ha la certezza che le immagini vengano visualizzate sempre (e non solo una volta come accade nella modalità normale o addirittura mai nella modalità breve).

  1. In realtà, tutte queste istruzioni non esistono di default in Glulx, perché fanno parte della libreria realizzata da Alessandro Schillaci (la sgw.h, per l’appunto) ma in compenso semplificano di parecchio la gestione della grafica e del sonoro (e vi consiglio quindi di usarle).
  2. In realtà è anche possibile inserire l’istruzione viewImageLeft nelle funzioni di direzione di una stanza anziché nella sua description. Purtroppo però, l’immagine non viene più visualizzata se il giocatore usa il comando "guarda" o "g".