AWS 3.0, l'avventura sia con voi

Adventure Writing System

HomeBioEseguibiliManualiAvventureTutorial

                                   

 

 

Come scrivere le condizioni in AWS

Una delle cose più importanti di AWS sono le condizioni. Esse sono il cuore di ogni avventura perché dicono al programma, all’interprete, come comportarsi in base agli input del giocatore ed a come è stato previsto lo svolgimento della storia.
Prenderemo ad esempio una serie di condizioni che servono a risolvere un certo problema in Iunnuh2, La maledizione che viene dal passato.

Cominciamo

Il problema che ho creato, prevede come scendere in un buco che si trova sotto il sarcofago. Spostare il sarcofago rivela il buco ma poi? Il sarcofago si trova nella locazione 25 e decido di utilizzare il marker 9 come indicatore del fatto che il sarcofago sia stato spostato (e quindi il buco è presente).
La sequenza corretta è:

lega la corda al sarcofago
getta la corda nel buco

Questo presuppone di avere la corda e di aver spostato il sarcofago. Inoltre queste condizioni valgono solo nella locazione 25 perché al di fuori di essa non c’è un sarcofago e nemmeno un buco! Per semplificare un po’, ho deciso che fuori dalla locazione 25 non serva a nulla legare la corda (al sarcofago o meno) e gettare la corda nel buco. Getta la corda, ovviamente, ci fa … buttare la corda in terra!

Il foglio di carta nell’immagine è dove ho scritto, a penna, le istruzioni delle varie condizioni. Nella parte bassa ci sono le condizioni a bassa priorità (low), etichettate con “al di fuori della loc 25”.

Fate caso come, a fianco dell’input (es: lega corda al sarcofago) ci sia la sequenza di istruzioni da eseguire, in questo caso un semplice mess (stampa messaggio) che non abbiamo nemmeno scritto preferendo scrivere direttamente il messaggio con a fianco il numero d’ordine nell’elenco dei messaggi. Praticamente, nell’editor delle condizioni a bassa priorità abbiamo scritto:

IF VERB lega AND NOUN corda AND NO2EQ sarcofago THEN MESS 215 WAIT ENDIF

Il messaggio 215 è: E dove lo vedi un sarcofago?
Abbiamo giocato sul fatto che, come detto, al di fuori della locazione 25 non ci sono sarcofagi e certe azioni hanno poco senso. Inoltre scrivere così ci fa preparare tutti i messaggi prima di inserirli in AWS. In effetti possiamo fare così anche con i verbi e i nomi. Poi, una volta inseriti, riportiamo i loro numeri sul foglio di carta, che rimane come traccia leggibile di quel che abbiamo fatto. Anche perché è più semplice ricostruire il problema che non analizzando solamente il codice inserito nelle condizioni in AWS.

Ricordate che la parte IF delle condizioni viene eseguita una riga dopo l’altra finchè non se ne trova una che è soddisfatta. A quel punto si esegue la parte dopo il THEN, le azioni. Se c’è un WAIT si esce dal ciclo delle condizioni, altrimenti si continua. Notate come nelle condizioni ad alta priorità, che vanno eseguite tutte, non ci siano WAIT. In quelle locali e quelle a bassa priorità invece si.


Passiamo ora la cuore del problema, le condizioni locali. Ho bisogno di altri due marker, il 16 ed il 18. Il 16 sarà ON se la corda è stata legata al sarcofago, il 18 sarà on se la corda scende nel buco.
Le azioni da analizzare sono:


lega la corda
lega la corda al sarcofago
getta la corda
getta la corda nel buco


ovviamente diamo per scontato di avere la corda. Se diciamo LEGA LA CORDA e basta, ci becchiamo come risposta “E dove dovrei legarla?”. E’ un aiuto che diamo al giocatore, un suggerimento che implicitamente gli dice che manca qualcosa nella frase, molto meglio di un “Non posso”.
Scrivere invece LEGA LA CORDA AL SARCOFAGO ci da come risposta “Fatto. Ho legato la corda ad una delle zampe del sarcofago” ed imposta il marker 16 (corda legata) ad ON. Di nuovo, ricordate che nel codice andremo anche a scrivere la parte in cui diciamo la stessa frase ma non abbiamo la corda.


Passiamo ora a getta la corda e getta la corda nel buco.
GETTA LA CORDA, molto semplicemente, fa deporre la corda sul pavimento.

Simpatico è invece il caso di GETTA LA CORDA NEL BUCO. Se un capo è stato legato al sarcofago (marker 16 ON), allora l’altro capo finisce nel foro. Si imposta il marker 18 a ON (corda nel buco) e si scrive il messaggio “L’altro capo della corda cala nel buco”.
E se non ho legato l’altro capo (marker 16 off)? Leggete il messaggio di risposta e capirete: “La corda va giù per il buco ed atterra con un forte tonfo sul pavimento del piano inferiore.”. Insomma, avete perso la corda e non potete più risolvere il problema e continuare. E non dite che è l’equivalente di una morte improvvisa e senza ragione. Nel mondo reale, se butto una corda giù per un buco non la recupero certo. Perciò un po’ di logica, su!

Ora non ci rimangono che le condizioni ad alta priorità (HI). Perché? Perché abbiamo una serie di condizioni possibili, per la precisione quattro:

non ho legato la corda al sarcofago (marker 16 off)
ho legato la corda al sarcofago (marker 16 on)
ho gettato l’altro capo nel buco (marker 18 on)
non ho gettato l’altro capo nel buco (marker 18 off)

La prima è la condizione iniziale e non devo fare nulla.
La seconda fa scrivere “C’è una corda legata ad una delle gambe del sarcofago”. In effetti il giocatore potrebbe non avere ancora completamente risolto il problema.
La terza fa scrivere “L’altro capo della corda cala nel buco”.
L’ultima fa scrivere “La corda è sul pavimento”.
In questo modo caratterizziamo completamente la locazione 25 e abbiamo anche dei suggerimenti nascosti su cosa fare.
Di seguito trovate il codice completo che ho scritto per questo problema. Ovviamente le condizioni locali possono essere molte di più, riferite a più problemi.

Condizioni alta priorità
IF set? 16 THEN mess 212 ENDIF
IF set? 16 AND res? 18 THEN mess 213 ENDIF
IF set? 16 AND set? 18 THEN mess 214 ENDIF

Condizioni locali per la locazione 25
IF verb 219 AND noun 8 AND no2eq 19 AND avai 8 AND res? 16 THEN mess 211 set 16 WAIT ENDIF LEGA CORDA SARCOFAGO ho la CORDA
IF verb 219 AND noun 8 AND no2eq 19 AND res? 16 THEN mess 218 WAIT ENDIF LEGA CORDA SARCOFAGO no CORDA
IF verb 219 AND noun 8 AND no2eq 19 AND set? 16 THEN mess 217 WAIT ENDIF LEGA CORDA SARCOFAGO già legata
IF verb 219 AND noun 8 AND no2eq 408 AND avai 8 AND res? 16 THEN mess 211 set 16 WAIT ENDIF LEGA CORDA zampe ho CORDA
IF verb 219 AND noun 8 AND no2eq 408 AND res? 16 THEN mess 218 WAIT ENDIF LEGA CORDA zampe no CORDA
IF verb 219 AND noun 8 AND no2eq 408 AND set? 16 THEN mess 217 WAIT ENDIF LEGA CORDA SARCOFAGO già legata
IF verb 55 AND noun 8 AND no2eq 221 AND avai 8 AND set? 9 AND set? 16 THEN set 18 mess 221 WAIT ENDIF GETTA CORDA BUCO ho CORDA
IF VERB 55 AND NOUN 8 AND NO2EQ 221 AND AVAI 8 AND SET? 9 THEN MESS 222 TO 8 27 WAIT ENDIF GETTA CORDA BUCO ho CORDA non legata
IF verb 219 AND noun 8 AND avai 8 THEN mess 210 WAIT ENDIF LEGA CORDA
IF verb 220 AND noun 8 AND set? 16 THEN mess 220 WAIT ENDIF SLEGA CORDA è legata
IF verb 220 AND noun 8 AND res? 16 THEN mess 219 WAIT ENDIF SLEGA CORDA non è legata
IF verb 50 AND noun 8 AND avai 8 AND res? 16 THEN get 8 OKAY ENDIF PRENDI CORDA e c’è CORDA e non è legata
IF verb 85 OR verb 215 AND noun 221 AND set? 18 THEN mess 223 res 121 goto 27 look WAIT ENDIF SCENDI BUCO e c’è corda legata e che scende nel buco
IF verb 85 OR verb 215 AND noun 221 AND res? 18 THEN mess 224 quit ENDIF SCENDI BUCO e non c’è corda legata
IF verb 85 OR verb 230 AND noun 8 AND set? 18 THEN mess 223 res 121 goto 27 look WAIT ENDIF SCENDI corda
IF verb 85 OR verb 230 AND noun 8 AND res? 18 THEN mess 224 exit ENDIF SCENDI corda
IF verb 85 THEN mess 227 WAIT ENDIF giù, basso

Condizioni bassa priorità
IF verb 55 AND noun 8 AND no2eq 221 THEN mess 216 WAIT ENDIF GETTA CORDA BUCO
IF verb 219 AND noun 8 AND no2eq 19 THEN mess 215 WAIT ENDIF LEGA CORDA SARCOFAGO
IF verb 219 AND noun 8 THEN mess 177 WAIT ENDIF LEGA CORDA
IF verb 85 OR verb 215 AND noun 221 THEN mess 216 WAIT ENDIF SCENDI SALTA BUCO
IF verb 85 AND noun 8 THEN mess 177 WAIT ENDIF SCENDI CORDA
IF verb 230 AND noun 8 THEN mess 225 WAIT ENDIF USA CORDA
IF verb 215 THEN mess 134 WAIT ENDIF SALTA
IF verb 407 AND noun 8 THEN mess 233 WAIT ENDIF TAGLIA CORDA

Un ultimo consiglio: usate i commenti dopo ENDIF.

AWS li trascura ma a voi possono fare tanto comodo quando dovete raccapezzarvi tra tutte le condizioni scritte per capire come mai non viene preso in considerazione un certo comando che invece dovrebbe funzionare.

 

 

 

 




Per contattarmi (bug, info, consigli, richieste, altro) scrivimi a: aws@aristidetorrelli.it