Inform e Glulx/Inform e Glulx/La personalizzazione della Status Line

Wikibooks, manuali e libri di testo liberi.
Indice del libro

La personalizzazione della Status Line[modifica]

Così come per Inform, anche in Glulx è possibile personalizzare la status line. Diamo quindi un’occhiata al quinto e ultimo esempio (sgw_test_it_SLINE):

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

Constant NOGRAPHICS; Constant NOSOUND;
! Colori di default all’apertura di WinGlulxe Constant SCBACK $ffffff; Constant SCTEXT $000000; Constant SCEMPH $000000; Constant SCHEAD $000000; Constant SCINPU $000000; Constant SCSOFT $000000;
Replace DrawStatusLine;
Include "Parser"; Include "sgw.h"; ! Inclusione della libreria SGW Include "Infglk"; Include "VerbLib"; Include "Replace"; Include "sgw_test_it_SLINE.bli";
! ---------------------------------------------------------------------- Object room_1 "room 1" with description "Una semplice stanza di esempio. Stanza 1.", cant_go "Puoi muoverti solo a nord, verso la stanza 2.", n_to room_2, has light;
Object room_2 "room 2" with description "Una semplice stanza di esempio. Stanza 2.", 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 "Una semplice stanza di esempio. Stanza 3.", cant_go "Puoi muoverti solo a sud, verso la stanza 2.", s_to room_2, has light;
! ---------------------------------------------------------------------- [ Initialise; initializeSGW(0); location = room_1; ];
[ DrawStatusLine width height;  ! Se non abbiamo una riga di stato, non dobbiamo cercare di ridisegnarla. if (gg_statuswin == 0) return;
 ! Non dobbiamo farlo neanche se non esiste una locazione per il giocatore if (location == nothing || parent(player) == nothing) return;
StatusLineHeight(1); ! numero di righe della status line glk_set_window(gg_statuswin); glk_window_clear(gg_statuswin); glk_window_get_size(gg_statuswin, gg_arguments, gg_arguments+4); width = gg_arguments-->0; if (width == 0) width = 100; height = gg_arguments-->1; if (height == 0) height = 1;
glk_window_move_cursor(gg_statuswin, 1, 0); if (location == thedark) { print (name) location; } else { FindVisibilityLevels(); if (visibility_ceiling == location) print (name) location; else print (The) visibility_ceiling; }
glk_window_move_cursor(gg_statuswin, 74, 0); print "Punteggio: ", score; glk_window_move_cursor(gg_statuswin, 93, 0); print "Turni: ", turns; glk_set_window(gg_mainwin); ];
! ---------------------------------------------------------------------- Include "ItalianG";

Così come per Inform, anche in Glulx occorre rifarsi all’istruzione Replace DrawStatusLine; seguita poi dalla definizione della funzione DrawStatusLine. L’istruzione glk_window_move_cursor(gg_statuswin, 1, 0); posiziona il testo che segue (in questo caso il nome della locazione) alla posizione 1 della prima riga:

Il resto, a questo punto del manuale, dovrebbe ormai esservi abbastanza chiaro; comunque, per chi non l’avesse ancora letto, il paragrafo 5.1 contiene ulteriori informazioni sull’argomento.