Inform e Glulx/RUINS, l'avventura comincia/La fine di RUINS è giunta (ma con Inform siete solo all'inizio): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m tag obsoleti
Riga 1:
''Vi dirigete verso l’alto e vi ritrovate dentro la gabbia di ferro (questa volta senza scheletri). Dal pavimento della gabbia, un pozzo di terracotta scende nella cripta, ma voi non ne volete assolutamente sapere di tornare là sotto; c’è troppa umidità, che fa solo male alle vostre povere ossa. Uscite dalla gabbia e spingete la lampada al sodio verso nordovest. Dovete fare presto, perché la luce da essa emessa diventa sempre più debole: procedete allora verso nord più velocemente che potete, fino poi a ritrovarvi nella Sala Quadrata. Qui, la lampada al sodio si affievolisce e improvvisamente si spegne. Siete letteralmente disperati: la vostra cara lampada è morta e non potete neanche farle un funerale. La raccogliete con le lacrime agli occhi e salite finalmente verso la superficie. Vi dirigete verso la vostra cassa da imballaggio, depositate tutti i tesori che avete trovato e vi lasciate infine cadere, esausti come non mai, per terra.''<br>
''Un macao dalla coda rossa fluttua giù dalle cime degli alberi, con le piume appesantite dalla pioggia recente. Il battito delle sue ali è quasi assordante, e delle pietre crollano una sull'altra. Come il cielo si schiarisce, una luna crescente sorge sopra una tranquilla giungla. È la fine di marzo del 1938, ed è l'ora di tornare a casa...''<br>
 
 
==La fine di RUINS è giunta (ma con Inform siete solo all'inizio)==
Spesso, non basta assegnare una semplice direzione a una stanza. È quello che accade in questa "nuova" versione della <ttcode>Cripta</ttcode>:
 
Object Burial_Shaft "La Cripta"
Line 29 ⟶ 28:
 
Quando il giocatore si dirige verso l’alto (quando tenta, cioè, di uscire dalla cripta), accadono diverse cose:
* la variabile locale <ttcode>floor_open</ttcode> (vedremo fra poco a cosa serve) appartenente all’oggetto <ttcode>cage</ttcode> (la gabbia di ferro) vale <ttcode>true</ttcode>;
* l’istruzione <ttcode>u_to</ttcode> punta alla funzione <ttcode>opened_u_to</ttcode>;
* il giocatore viene, come abbiamo già visto nel paragrafo precedente, trasformato da facocero in archeologo.
 
La funzione <ttcode>opened_u_to</ttcode>, a sua volta, "teletrasporta" il giocatore nella gabbia di ferro<ref>Quest’azione è possibile perché l’oggetto <ttcode>cage</ttcode> ha l’attributo <ttcode>enterable</ttcode>.</ref>:
 
Object -> cage "gabbia di ferro"
Line 77 ⟶ 76:
has female enterable transparent container openable open static;
 
Per quanto riguarda la proprietà <ttcode>inside_description</ttcode>, se la variabile locale <ttcode>floor_open</ttcode> vale <ttcode>true</ttcode>, allora Inform stampa a video il messaggio "<ttcode>Dal pavimento della gabbia, un pozzo di terracotta scende nella cripta.</ttcode>". Altrimenti (se, cioè, <ttcode>floor_open</ttcode> vale <ttcode>false</ttcode>), stampa a video il messaggio alternativo ("<ttcode>Sei circondato dalle sbarre della gabbia.</ttcode>"):
 
{| style="width:100%;" class="wikitable"
|<ttcode>Anticamera (dentro la gabbia di ferro)<br>
I cornicioni formano, a sudest del Tempio, una curiosa anticamera.<br><br>
La lampada al sodio, posata a terra, si sta lentamente consumando.<br><br>
Dal pavimento della gabbia, un pozzo di terracotta scende nella cripta.<br><br>
></ttcode>
|}
 
Dal momento che la proprietà <ttcode>after</ttcode> vale <ttcode>zero</ttcode> gli scheletri non appaiono più, mentre la proprietà <ttcode>react_before</ttcode> fa sì che, quando il giocatore si dirige verso il basso con la variabile <ttcode>locale floor_open = true</ttcode>, sia possibile accedere alla <ttcode>Cripta</ttcode><ref>Cliccate [http://www.vincenzoscarpa.it/inform/manuale/Capitolo4_esercizi.zip qui] per scaricare il listato di questo esercizio (il file '''4.15.inf''').</ref>.
 
Una volta raccolti e depositati tutti i tesori nella <ttcode>cassa da imballaggio</ttcode>, viene assegnato il valore <ttcode>2</ttcode> alla variabile di libreria <ttcode>deadflag</ttcode> nella classe <ttcode>Treasure</ttcode>:
 
Class Treasure
Line 117 ⟶ 116:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Il Grande Altopiano<br>
La tua cassa d'imballaggio giace qui, pronta per contenere eventuali scoperte di alto valore culturale da riportare alla civiltà.<br><br>
>posa il favo nella cassa<br>
Line 126 ⟶ 125:
In questa partita hai totalizzato 30 punti su 30 possibili, in 117 turni, guadagnando il rango di Direttore della Fondazione Carneige.<br><br>
Vuoi RICOMINCIARE, CARICARE una partita salvata o USCIRE ?<br>
>uscire</ttcode>
|}
 
Line 150 ⟶ 149:
has supporter enterable;
 
Questo oggetto, come potete facilmente vedere, si trova nella <ttcode>Sala Quadrata</ttcode>. Ecco come funziona:
 
{| style="width:100%;" class="wikitable"
|<ttcode>La Sala Quadrata<br>
Sei in una sala di pietra oscura e profonda, larga circa dieci metri. Un raggio di sole, proveniente dalla cima della scalinata, la illumina diffusamente, ma le ombre del livello più basso rivelano dei passaggi verso est e sud, che conducono verso la più profonda oscurità del Tempio.<br><br>
Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.<br><br>
Line 167 ⟶ 166:
>alzati dal trono<br>
Questo è un verbo che non conosco.<br><br>
></ttcode>
|}
 
Il primo problema da risolvere è che in Infit (v2.5) manca di fatto la definizione del verbo <ttcode>alzati</ttcode>, ma, come dice un vecchio detto, a tutto c’è rimedio:
 
Verb 'alzati' = 'esci';
 
Grazie a questa riga di codice (da posizionare alla fine del listato di Ruins, subito sotto la riga di codice <ttcode>Verb 'fotografa' * noun...</ttcode>, abbiamo il nostro verbo funzionante e pronto per essere usato:
 
{| style="width:100%;" class="wikitable"
|<ttcode>La Sala Quadrata (sopra il trono di pietra)<br>
Sei in una sala di pietra oscura e profonda, larga circa dieci metri. Un raggio di sole, proveniente dalla cima della scalinata, la illumina diffusamente, ma le ombre del livello più basso rivelano dei passaggi verso est e sud, che conducono verso la più profonda oscurità del Tempio.<br><br>
Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.<br><br>
Line 189 ⟶ 188:
Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.<br><br>
Alcuni gradini di pietra, bassi e squadrati, portano verso un trono maestoso, anch'esso di pietra.<br><br>
></ttcode>
|}
 
Volendo, è possibile fare in modo che il giocatore non sia costretto a digitare tutte le volte i comandi "<ttcode>siediti sul trono</ttcode>" e "<ttcode>alzati dal trono</ttcode>" ma, più semplicemente, "<ttcode>siediti</ttcode>" e "<ttcode>alzati</ttcode>". Ecco allora le modifiche da apportare all’oggetto <ttcode>throne</ttcode>:
 
Object -> throne "trono di pietra"
Line 209 ⟶ 208:
has supporter enterable;
 
L’uso più comune della proprietà <ttcode>react_before</ttcode>, come abbiamo già visto nel quarto paragrafo di questo capitolo, è quello di evitare le azioni senza oggetto. Per quanto riguarda l’azione <ttcode>Enter</ttcode>, se <ttcode>noun == nothing</ttcode> (se cioè il giocatore digita solo "<ttcode>siediti</ttcode>"), Inform fa sedere l’archeologo sul trono; per quanto riguarda invece l’azione <ttcode>Exit</ttcode>, se <ttcode>noun == nothing</ttcode> (se cioè il giocatore digita solo "<ttcode>alzati</ttcode>"), Inform fa alzare l’archeologo dal trono, solo però se è seduto su di esso (<ttcode>&& player in self</ttcode>). Ma c’è ancora un piccolo problema:
 
{| style="width:100%;" class="wikitable"
|<ttcode>La Sala Quadrata<br>
Sei in una sala di pietra oscura e profonda, larga circa dieci metri. Un raggio di sole, proveniente dalla cima della scalinata, la illumina diffusamente, ma le ombre del livello più basso rivelano dei passaggi verso est e sud, che conducono verso la più profonda oscurità del Tempio.<br><br>
Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.<br><br>
Line 222 ⟶ 221:
>alzati<br>
Ora sei di nuovo in piedi.<br><br>
></ttcode>
|}
 
Come potete vedere, il comando "<ttcode>siediti</ttcode>" non funziona ancora da solo. Il problema è relativo alla definizione del verbo <ttcode>siediti</ttcode> in Infit:
 
Verb 'siedi' 'siediti' 'sdraiati'
Line 239 ⟶ 238:
Extend 'siediti' first * -> Enter;
 
che va inserita alla fine del listato di Ruins subito sotto la riga di codice <ttcode>Verb 'alzati' = 'esci';</ttcode><br>
Provare per credere...
 
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
 
L’ultima parte di codice da esaminare in Ruins, è la funzione <ttcode>TitlePage</ttcode>:
 
[ TitlePage i;
Line 268 ⟶ 267:
[[Immagine:Inform_e_glulx-301.gif|centre|516 px|]]
 
Siamo quindi di fronte a una sorta di "presentazione" dell’avventura. L’istruzione <ttcode>ClearScreen</ttcode>, come abbiamo già visto, pulisce lo schermo. Per quanto riguarda invece gli stili<ref>Gli stili del testo possono essere gestiti più comodamente con la libreria <ttcode>style.h</ttcode>. Ulteriori informazioni sul suo utilizzo potete trovarle nel prossimo capitolo.</ref>, Inform ne mette a disposizione cinque:
 
[[Immagine:Inform_e_glulx-302.jpg|centre|115 px|]]
Line 274 ⟶ 273:
che corrispondono alle seguenti istruzioni:
 
<ttcode>style roman;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;! (normale)</ttcode><br>
<ttcode>style bold;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;! (grassetto)</ttcode><br>
<ttcode>style underline; ! (corsivo)</ttcode><br>
<ttcode>style reverse;&nbsp;&nbsp;&nbsp;! (reverse)</ttcode><br>
<ttcode>style fixed;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;! (preformattato) – equivalente a font off</ttcode><br>
 
L’istruzione <ttcode>font off</ttcode> attiva il font a spaziatura fissa, dove i singoli caratteri hanno la stessa distanza fra di loro (il Times New Roman, uno dei font che ho utilizzato per scrivere questo manuale, è ad esempio uno di quelli che non ha questa caratteristica). Detto questo, occorre capire che '''in inform, azioni come la centratura del testo rispetto allo schermo sono possibili solo con un font a spaziatura fissa, e quindi solo in modalità <ttcode>font off</ttcode>'''<ref>In realtà queste azioni sono teoricamente possibili anche con i font a spaziatura variabile ma, poiché i valori delle coordinate di riferimento cambiano di volta in volta a seconda del font utilizzato, non sono fattibili da un punto di vista "pratico" perché in Inform non si può stabilire uno specifico font da utilizzare di default.</ref>.
 
L’istruzione <ttcode>spaces(i)</ttcode> sposta il testo alla destra dello schermo di <ttcode>n</ttcode> posizioni. L’istruzione <ttcode>if</ttcode> relativa alla variabile <ttcode>i</ttcode> è un sistema piuttosto contorto per far sì che il testo appaia sempre in una specifica posizione tenendo però conto della larghezza dello schermo (che è di fatto il valore restituito alla variabile locale <ttcode>i</ttcode> dall’istruzione <ttcode>ScreenWidth</ttcode>), che varia al variare della dimensione della finestra di Windows Frotz 2002 (o di qualsiasi altro interprete Z-code). La larghezza della mia finestra di Windows Frotz 2002 è, tanto per fare un esempio, 70: questo significa che il numero massimo di posizioni consentite per un singolo carattere è 69, mentre per quanto riguarda una parola o addirittura un’intera frase, il numero massimo di posizioni consentite cambia a seconda del numero di caratteri che compongono queste ultime. A ogni modo, se il numero di posizioni supera il "limite" consentito, Inform continua la visualizzazione del testo alla riga successiva, come accade nel seguente esempio:
 
[[Immagine:Inform_e_glulx-303.jpg|centre|658 px|]]
 
Per questa frase il limite massimo di posizioni onde evitare che una parte del testo possa andare a capo, è 43. Comunque, vi consiglio di posizionare il vostro testo nella posizione in cui vi piace, mantenendo però l’istruzione <ttcode>if</ttcode> come riferimento:
 
[ TitlePage i;
Line 300 ⟶ 299:
.
 
aggiungendo ad esempio il valore 10 alla variabile locale <ttcode>i</ttcode> nella prima istruzione spaces, la scritta "<ttcode>RUINS</ttcode>" risulterà spostata un po’ più a destra, ma verrà sempre presa in considerazione la larghezza dello schermo. Se la si vuole invece centrare si deve allora ricorrere all’istruzione <ttcode>Centre</ttcode>:
 
[ TitlePage;
Line 318 ⟶ 317:
[[Immagine:Inform_e_glulx-304.jpg|centre|790 px|]]
 
Quando invece non si vuole più usare il font a spaziatura fissa previsto da Inform, l’istruzione <ttcode>font on</ttcode> ripristina il font precedentemente usato da Windows Frotz 2002 per visualizzare il testo del gioco. L’istruzione <ttcode>box "..."</ttcode> apre un riquadro al cui interno viene visualizzato il testo racchiuso tra le virgolette<ref>La libreria <ttcode>boxclever.h</ttcode> permette di creare dei riquadri con, oltre al testo normale, anche il grassetto e il corsivo. Ulteriori informazioni sul suo utilizzo potete trovarle nel prossimo capitolo.</ref>, mentre l’istruzione <ttcode>KeyCharPrimitive</ttcode>, come abbiamo già visto, aspetta la pressione di un tasto qualsiasi da parte dell’utente (o meglio, del giocatore).
 
Se vogliamo fare in modo che il giocatore, anziché premere un tasto qualsiasi, debba aspettare un certo periodo di tempo prima di procedere con l’avventura, si deve ricorrere all’utilizzo dell’istruzione <ttcode>KeyDelay</ttcode>. Sostituendo quindi l’istruzione <ttcode>KeyCharPrimitive</ttcode> con <ttcode>KeyDelay(40)</ttcode> il giocatore aspetterà 40 decimi di secondo; a ogni modo, se è "impaziente", potrà comunque premere un tasto qualsiasi per andare avanti.
 
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
Line 344 ⟶ 343:
.
 
così come di prevedere, ad esempio, il comando "<ttcode>aiuto</ttcode>"<ref>I suggerimenti possono essere gestiti anche attraverso le librerie <ttcode>flags_it.h</ttcode> e <ttcode>tutor.h</ttcode>. Ulteriori informazioni sul loro utilizzo potete trovarle nel prossimo capitolo.</ref>:
 
[ PhotographSub...
Line 361 ⟶ 360:
Verb 'aiuto' 'help' * -> Aiuto;
 
Se il giocatore digita questo comando quando si trova nel <ttcode>Grande Altopiano</ttcode> e l’entrata della piramide è bloccata dalle macerie, Inform stampa a video il relativo consiglio, altrimenti lo informa che nessun aiuto è disponibile in quel punto del gioco:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Il Grande Altopiano<br>
I tuoi appunti menzionano qualcosa circa questa bassa scarpata di calcare, ma la foresta pluviale ne ha rivendicato il possesso. Cupi ulivi crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.
La "Struttura 10" è un cumulo di materiali da costruzione, che una volta avrebbero potuto costituire una piramide sepolcrale, ma della quale ora nulla rimane, eccetto alcuni gradini scolpiti nella nuda roccia che portano giù, nell'oscurità.<br><br>
Line 373 ⟶ 372:
>s<br>
Non riesci a rimuovere le macerie? Prova a mangiare il fungo...<br><br>
></ttcode>
|}
 
Line 396 ⟶ 395:
];
 
Alla richiesta di aiuto, se il giocatore non digita la password corretta il suggerimento non viene visualizzato. Naturalmente, oltre alla password corretta, il giocatore si deve trovare nel <ttcode>Grande Altopiano</ttcode> e l’entrata della piramide deve essere bloccata dalle macerie:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Il Grande Altopiano<br>
I tuoi appunti menzionano qualcosa circa questa bassa scarpata di calcare, ma la foresta pluviale ne ha rivendicato il possesso. Cupi ulivi crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.
La "Struttura 10" è un cumulo di materiali da costruzione, che una volta avrebbero potuto costituire una piramide sepolcrale, ma della quale ora nulla rimane, eccetto alcuni gradini scolpiti nella nuda roccia che portano giù, nell'oscurità.<br><br>
Line 423 ⟶ 422:
Inserisci la password: fungo<br>
Spiacente... nessun aiuto qui.<br><br>
></ttcode>
|}
 
Il comando "<ttcode>informazioni</ttcode>":
 
[ PhotographSub...
Line 448 ⟶ 447:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Dopo giorni di inutili ricerche, passati senz'acqua attraversando i rovi della foresta, alla fine la tua pazienza è stata ricompensata: hai fatto una scoperta!<br><br>
RUINS<br>
Un esempio di lavoro interattivo.<br>
Line 464 ⟶ 463:
Traduzione in italiano a cura di Vincenzo Scarpa e Raffaello Valesio.<br>
Per segnalazioni e contatti scrivete all'indirizzo e-mail scarvin@libero.it.<br><br>
></ttcode>
|}
 
Un altro comando piuttosto importante da implementare è "<ttcode>istruzioni</ttcode>", con lo scopo di spiegare ai non esperti come giocare a un’avventura testuale, argomento che non deve mai essere dato per scontato. Il codice è praticamente identico al comando precedente tranne, ovviamente, che per il nome.
 
== Note ==