Inform e Glulx/RUINS, l'avventura comincia/La sfera di pietra pomice (avete indossato il casco)?: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Gian BOT (discussione | contributi)
m Bot: sostituzione tag obsoleti
Riga 3:
 
==La sfera di pietra pomice (avete indossato il casco)?==
Sulla base di quanto abbiamo visto finora, il nuovo codice di Ruins non presenta delle grosse novità, a parte la funzione <ttcode>each_turn</ttcode> dell’oggetto <ttcode>chasm</ttcode>:
 
Object -> chasm "baratro pauroso"
Riga 33:
has scenery open container;
 
Se la sfera di pietra pomice si trova nel baratro (<ttcode>if huge_ball in parent(self)</ttcode>), a ogni mossa del giocatore la direzione sud dell’oggetto <ttcode>Canyon_S</ttcode> (l’estremità inferiore del canyon) punta alla nuova locazione <ttcode>On_Ball</ttcode> (la sporgenza di pietra pomice). Per quanto riguarda invece le descrizioni, se la sfera di pietra pomice non è ancora rotolata nel baratro, Inform stampa a video il messaggio "<ttcode>La sfera di pietra pomice rotola giù nel canyon senza controllo...</ttcode>" altrimenti viene stampato a video il messaggio "<ttcode>L'estremità sud del canyon continua ora sopra la sfera di pietra pomice incastrata nel baratro.</ttcode>". Ecco la dimostrazione "pratica":
 
{| style="width:100%;" class="wikitable"
|<ttcode>Estremità superiore del canyon<br>
La più alta e vasta estremità a nord del canyon sale soltanto verso una parete irregolare di roccia calcarea vulcanica.<br><br>
C'è un'enorme sfera di pietra pomice larga circa due metri e mezzo qui.<br><br>
Riga 59:
Una sporgenza improvvisa formata dalla sfera di pietra pomice è conficcata in un punto del baratro. Il canyon tuttavia termina qui.<br><br>
Di tutte le offerte sacrificali gettate nel baratro, nulla forse sarà recuperato: fatta eccezione per un osso inciso, più luminoso di quello che sembra, che sporge da una polla di limo bagnato nella parete del canyon.<br><br>
></ttcode>
|}
 
Qualcuno di voi può ancora confondersi con la nuova parte di codice relativa alla sfera di pietra pomice (l’oggetto <ttcode>huge_ball</ttcode>):
 
Object -> huge_ball "enorme sfera di pietra pomice"
Riga 94:
has female static;
 
Per quanto riguarda l’azione <ttcode>PushDir</ttcode> appartenente alla proprietà <ttcode>before</ttcode>, se il giocatore si trova all’incrocio di Xibalbá e cerca di spingere la sfera (che deve ovviamente trovarsi anch’essa lì) verso nordest, Inform stampa a video un messaggio che ci avvisa che l’entrata del Tempio non è abbastanza larga. Ricordo ancora per l’ennesima volta, che l’istruzione <ttcode>second</ttcode> si riferisce alla direzione inclusa nel comando (ad esempio "<ttcode>spingi la sfera a nordest</ttcode>", dove <ttcode>noun</ttcode> è la sfera e <ttcode>second</ttcode> è nordest)<ref>Cliccate [http://www.vincenzoscarpa.it/inform/manuale/Capitolo4_esercizi.zip qui] per scaricare il listato di questo esercizio (il file '''4.11.inf''').</ref>.
 
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
 
Tra le innumerevoli possibilità offerte da Inform, c’è anche quella di stabilire se un oggetto debba essere visibile o meno al buio. Ecco infatti quello che succede quando il giocatore si trova nella <ttcode>Sala del Tempio</ttcode> e prova a spegnere la <ttcode>lampada al sodio</ttcode>:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Il Tempio<br>
Questo magnifico tempio mostra segni di scavi da preesistenti miniere di calcare, specialmente verso il lato occidentale, dove due lunghi cornicioni si dirigono verso sud.<br><br>
La grande porta di pietra gialla è aperta.<br><br>
Riga 126:
>prendi la mappa<br>
Non vedi nulla del genere.<br><br>
></ttcode>
|}
 
Per non confondere troppo le idee, ho preferito disattivare momentaneamente il daemon degli insetti carnivori . Come potete vedere, di default, se ci si trova al buio Inform non riconosce nessun oggetto all’infuori di quelli contenuti nell’inventario del giocatore. Quando però uno di essi viene posato a terra, diventa irriconoscibile come tutti gli altri. Ora, questa situazione mi sembra alquanto irreale ed esagerata; tenendo infatti conto che la lampada al sodio si trova accanto al nostro archeologo, non credo proprio che gli risulti così difficile riuscire ad accenderla anche se si trova al buio. La funzione di libreria <ttcode>InScope</ttcode>, posta subito dopo la funzione di libreria <ttcode>DeathMessage</ttcode>, è proprio quella che fa al caso nostro:
 
[ InScope temp;
Riga 140:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Oscurità<br>
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.<br><br>
>accendi la lampada<br>
La lampada deve essere ben posizionata prima di essere accesa.</ttcode>
|}
 
C’è un problema però: la lampada al sodio si può accendere solo se l’oggetto a cui appartiene ha l’attributo <ttcode>supporter</ttcode>. Occorre quindi fare una piccola modifica all’oggetto <ttcode>sodium_lamp</ttcode>:
 
if (location ~= thedark) {
Riga 153:
}
 
Così facendo, se si cerca di accendere la lampada in una locazione che è diversa da <ttcode>thedark</ttcode> (quando cioè non si è al buio), viene verificato che la lampada sia effettivamente posata a terra, altrimenti si procede normalmente alla sua accensione:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Oscurità<br>
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.<br><br>
>accendi la lampada<br>
Riga 165:
Il passaggio è bloccato da una massiccia porta di pietra gialla.<br><br>
C'è una preziosa statuetta maya qui!<br><br>
></ttcode>
|}
 
Possiamo anche fare in modo che la lampada possa essere riconosciuta al buio ed accesa solo in una locazione ben precisa (ad esempio il <ttcode>corridoio in pendenza</ttcode>):
 
[ InScope temp;
Riga 188:
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
 
In una situazione reale, se siamo al buio e procediamo a tentoni all’interno di una grande piramide sepolcrale, corriamo il serio rischio di farci male se non addirittura di perdere la vita cadendo in una buca molto profonda. Che ci crediate o no, Inform ci viene incontro anche in questo caso, mettendoci a disposizione la funzione di libreria <ttcode>DarkToDark</ttcode>. Per prima cosa, occorre definire una variabile globale denominata <ttcode>dark</ttcode>:
 
.
Riga 198:
Global dark;
 
che vale <ttcode>false</ttcode> anche se non viene esplicitamente dichiarato. Segue poi la parte di codice relativa alla funzione vera e propria, che va posizionata subito dopo la funzione di libreria <ttcode>DeathMessage</ttcode> (o eventualmente <ttcode>InScope</ttcode> se presente):
 
[ DarkToDark;
Riga 214:
];
 
La variabile <ttcode>dark</ttcode> viene immediatamente testata: se vale <ttcode>false</ttcode>, le viene allora assegnato il valore <ttcode>true</ttcode> e viene stampato a video il relativo messaggio; altrimenti, si passa alla seconda if, dove viene generato un numero casuale da 1 a 3 a ogni mossa del giocatore. Se non "esce" il numero 1 il gioco può proseguire:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Il Tempio<br>
Questo magnifico tempio mostra segni di scavi da preesistenti miniere di calcare, specialmente verso il lato occidentale, dove due lunghi cornicioni si dirigono verso sud.<br><br>
La grande porta di pietra gialla è aperta.<br><br>
Riga 235:
La Sala Quadrata<br><br>
Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.<br><br>
></ttcode>
|}
 
Riga 241:
 
{| style="width:100%;" class="wikitable"
|<ttcode>Oscurità<br>
L'oscurità intorno a te è opprimente e ti senti quasi soffocare.<br><br>
>s<br>
Riga 247:
&nbsp;&nbsp;&nbsp;&nbsp;*** Sei morto ***<br><br><br>
In questa partita hai totalizzato 0 punti su 30 possibili, in 28 turni, guadagnando il rango di Turista.<br><br>
Vuoi RICOMINCIARE, CARICARE una partita salvata o USCIRE ?</ttcode>
|}