M.A.C. tutorials

Guida alla programmazione di una avventura con il Mystery Adventure Creator.

 

 

Introduzione.

Lo scopo di questo tutorial è mostrare la costruzione di una avventura testuale (at d'ora in poi) attraverso il Mystery Adventure Creator. Non è detto che sia il metodo seguito sia il migliore, ne quello più semplice o efficiente, è semplicemente quello con cui mi sono trovato meglio. E' indirizzato in particolare a coloro che sono al loro primo approccio da autori di at ed a digiuno di programmazione. Perciò chi ha un minimo lavorato con mac o con altri programmi di interactive fiction lo troverà assolutamente inutile e ridondante, ciononostante sono stato spinto a scriverlo dalle molte richieste che mi sono giunte in tal senso dopo la pubblicazione del principe dei ladri. Nell'esposizione del tutorial costruirò una piccola avventura sfruttando alcune delle possibilità offerteci dal m.a.c. non mostrerò tutte le possibili funzioni, ne quelle già presenti sui diversi esempi già disponibili. Semplicemente inseriro solo quegli elementi funzionali all’idea per questa mini avventura di esempio. Darò per scontata la lettura del manuale di Paolo Lucchesi.

 

Step 1.

Creiamo nella posizione che più ci aggrada, una cartella con il nome di macTutorial, qui poniamo una copia del file mactxt.exe ed una copia del file ital.adh associati nel pacchetto zip ufficiale di mac. Rinomianiamo ora il file mactxt.exe in macTutorial.exe, e creiamo con un editor di testo qualsiasi un file chiamato macTutorial.adv (posto sempre nella cartella macTutorial).

 

NOTA: Il file *.adv necessario per la creazione di una avventura con m.a.c. è un semplice file di testo, potrete utilizzare qualsisi editor di testo. Dall'edit.exe del DOS al notepad di windows o al wordpad o anche il word di office (sconsigliato); Se decidete però di creare una avventura piuttosto ampia potrebbe convenire ricorrere ad un editor adatto alla programmazione come editplus o ultraedit. Questi ultimi hanno la possibilità di visualizzare con colori diversi le parole chiave della programmazione facilitando l'analisi dello script. Qui potete trovare la personalizzazione per mac del wordfile.txt per ultraedit e le istruzioni per utilizzarlo, nel caso sceglieste questo editor.

NOTA: Per gli autori non vedenti si consiglia di utilizzare il file Macstd.exe al posto el Mactxt.exe poichè più adatto al riconoscimento dei programmi di videolettura.

Dal manuale del m.a.c. avrete appreso che lo script *.adv è diviso in varie sezioni, ognuna di esse cura un aspetto della vostra avventura. Apriamo perciò il file macTutorial.adv che adesso è completamente bianco e scriviamo le varie sezioni:

 

[System]
[Shows]
[Locations]
[verbs]
[nouns]
[objects]
[messages]
[vars]
[Actions]
[Events]

In ognuna di esse andremo a porre i comandi che riteniamo più opportuni nella creazione della nostra avventura. Cominciamo perciò ad arricchire il nostro script. Limitiamoci come inizio a voler creare solo la descrizione di una stanza. Ecco cosa aggiungeremo al nostro script:

 

| inizio script
| il carattere "|" segnala la presenza di un commento, la riga che inizia con "|" verrà ignorata dal m.a.c. e serve solo per
| spiegare i comandi che la seguono
||| importiamo il file ital.adh
:
@ital.adh

[System]
||| ogni oggetto, nome, locazione, verbo in m.a.c. viene numerato per essere identificato
||| impostiamo come locazione di partenza la locazione n° 1:
StartLocation=1
||| impostiamoa 5 il numero massimo di oggetti che può essere trasportato contemporaneamente dal giocatore:
MaxItems=5

[Shows]

[Locations]

||| ora creiamo la nostra prima stanza, sarà una semplice stanza vuota, senza alcuna uscita:
#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

[verbs]

[nouns]

[objects]

[messages]

[vars]

[Actions]

[Events]


| fine script

Salviamo il file macTutorial.adv .
Importiamo il file ital.adh poichè contiene alcune impostazioni di default per m.a.c. tra cui la gestione dei messaggi di errore, il movimento con le direzioni cardinali, ed i verbi fondamentali delle at (come esamina,prendi,lascia,salva etc...). Al momento ci basti sapere questo, poi, più avanti, vedremo di modificarlo per renderlo più adatto ai nostri scopi.
La sintassi per la definizione della locazione segue la seguente logica (attenzione alle virgole che sono molto importanti): 

#numero identificativo, descrizione breve, nomefileimmagine, stanza illuminata, stanza a nord di questa, a sud, ad est , ad ovest, sopra, sotto
descrizione lunga della locazione

se uno degli argomenti manca viene considerato con valore 0, come nel caso del tutorial, dove mancano il nome del file grafico associato alla locazione e l'indicazioni per le locazioni adiacienti alla locazione numero 1. Un ultima cosa a proposito dell'esempio, lo 0 posto subito dopo la virgola del filename, corrisponde al tipo di stanza: 0 se la stanza è illuminata ed 1 se la stanza è buia. Vedremo meglio questa impostazione quando tratteremo il problema dell'illuminazione degli ambienti.
A questo punto salviamo il file macTutorial.adv e lanciamo il file macTutorial.exe.

NOTA: il file macTutorial.exe cercherà automaticamente il file macTutorial.adv ; è importante che i due file siano nella stessa cartella ed abbiano lo stesso nome. Se non avete rinominato i file in tal modo allora dovrete utilizzare il prompt di dos (o il menu avvio di windows) digitando "...percorso/mactxt.exe vostrotutorial.adv".

Clicca qui per vedere l'immagine.

Avremo solo la descizione della stanza, potremo salvare e caricare partite, consultare l'inventario (per ora vuoto), tentare di muoverci (tutte azioni previste dalla libreria), ma a qualunque altro comando riceveremo la deludente risposta "Non capisco quello che intendi". Questo risultato naturalmente non può soddisfarci. Innanzi tutto vorremmo aggiungere un messaggio iniziale con il titolo dell'avventura ed in secondo luogo vorremo consentire qualche azione al giocatore. Aggiungiamo perciò qualche riga al nostro script:

 

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

[Shows]
||| inseriamo un messaggio di tipo show con il titolo dell'avventura e l'autore.
||| si ricorda che il carattere "\" posto all'interno del messaggio manda a capo il testo nel gioco.

#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\
| lascio qualche riga vuota

[Locations]

#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

[verbs]

[nouns]
||| aggiungiamo qualche nome "sensibile"
#100,STANZA
||| i nomi scritti sulla stessa riga (stesso numero) divisi da virgole sono considerati tutti sinonimi dal m.a.c.

#101,PARETI,MURI,PARETE,MURO

[objects]

[messages]

||| aggiungiuamo un paio di messaggi nel caso il giocatore voglia guardarsi intorno

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.


[vars]

[Actions]

||| aggiungiamo le azioni necessarie al fine di associare i messaggi alle azioni esamina/guarda-nome sensibile

if at 1
{+

if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2

}

[Events]

||| diciamo a mac di stampare sullo schermo il titolo dell'avventura

if begin
then show 1 halt


| fine script

Salviamo il file macTutorial.adv.
Quando scriviamo la descrizione di una locazione, dovremo aggiungere alla sezione "noun" tutti quelle parole che il giocatore considera rilevanti e con cui potrebbe voler interagire. Nella nostra prima locazione diamo davvero poche informazioni al giocatore. Gli diciamo che si trova in una STANZA vuota dalle PARETI bianche. In questa situazione è probabile che il giocatore cerchi di approfondire la propria conoscenza dell'ambiente cercando di esaminare quei pochi indizi che gli abbiamo fornito. Abbiamo perciò aggiunto un paio di messagi che verrano stampati dal gioco nel momento in cui il giocatore cercherà di esaminare la stanza o le pareti. Un giocatore con un poco di fantasia potrebbe immaginare che trovandosi in una stanza vi sia anche una porta e forse una finestra, sicuramente un pavimento ed un soffitto, per ora però supporremo che il giocatore sia un poco tardo e vada alla ricerca solo di ciò che vede :-).
Avrete notato che ho numerato i due nomi a partire dal numero 100 e non dal numero 1, spigherò tale motivo quando inseriremo il primo oggetto nel gioco.
Diamo invece un'occhiata alla sezione Actions, ecco come m.a.c. interpreta lo script: se il giocatore si trova nella locazione n° 1 allora esegui la prima istruzione utile all'iterno del blocco e fermati. Nel blocco, se il verbo scritto dal giocatore è "esamina" ed il complemento è "stanza" allora stampa il messagio n°1 se invece il complemento è "parete" allora stampa il messaggio n°2. Qualsiasi altro comando non previsto darà la solita frase "Non capisco quello che intendi". Abbiamo creato il blocco "locazione 1" per il semplice motivo che potrebbero esserci altre stanze più avanti nel gioco nelle quali potremmo volere che alla stessa frase "esamina parete" sia data una risposta diversa, non tutte le stanze infatti possono essere uguali.
Nella sezione Events invece abbiamo detto a mac che all'inizio del gioco vogliamo che stampi il messaggio di tipo show n° 1.

NOTA: M.A.C. riconosce tre tipi di blocchi: { } {+ } {/ } la differenza tra i tre è ben spiegata nel manuale. Qui ho utilizzato il secondo tipo perchè più adatto alla condizione "at 1".
NOTA: abbiamo utilizzato il messaggio di tipo show per il titolo, ma in realtà non avendo posto alcuna immagine avremmo potuto utilizzare al posto di questo un semplice messaggio di testo.

Lanciamo ancora una volta il file macTutorial.exe.

Clicca qui e qui per vedere le immagini.

Adesso il giocatore vedrà il titolo dell'avventura e potrà esaminare la stanza e le pareti, ottenendo risposte assolutamente inutili. Anch'esse però contribuiscono al gioco, infatti il giocatore comincerà a farsi un'idea di desolazione e comincerà a pensare di essere prigioniero nella stanza, visto che non riesce ad uscirne. Se vogliamo che la nostra avventura sia decente, non possiamo fermarci qui, dobbiamo prevedere una quantità di verbi e di azioni che il giocatore utilizzerà per interagire con lo scarso ambiente che lo circonda. La maggior parte di esse potrebbe dare risposte infruttuose (come abbiamo visto), ma altre provocheranno qualche evento che favorirà lo sviluppo del gioco, ma di questo parleremo nel prossimo step.

 

 

STEP 2.

Per migliorare l'interazione del nostro gioco dovremmo un poco aggiornare il vocabolario di m.a.c. , cominciamo dai verbi.
Al momento gli unici verbi che abbiamo definito sono quelli presenti nel file ital.adh (apritelo e dategli un'occhiata).
Facciamo perciò una lista di tutti i verbi utili che potrebbero essere utilizzati dal giocatore, non preoccupatevi se ne dimenticate qualcuno potrete sempre aggiornarla in seguito. In più scriviamo un messaggio di default per ogni verbo. Cos'è un messaggio di default? E' il messaggio che sarà mostrato durante il gioco quando il giocatore associerà quel verbo ad un "noun" che non abbiamo previsto. Ad esempio se tra i verbi abbiamo previsto ROMPI ed il giocatore cercasse di rompere qualunque cosa gli venisse in mente, invece di prevedere ogni possibile azione "Rompi" "oggetto" potremmo stampare un messaggio di default del tipo "la violenza è inutile in questo caso". Per ragioni di praticità (lo script diventerà sempre più lungo) sfrutteremo da subito il comando @ importa file. Ciò complicherà un poco l'apprendimento, ma ci metterà subito nella giusta ottica per creare una avventura degna di tal nome. Creeremo perciò tre file di testo *.adh: uno contente la sezione verbs (con l'elenco di tutti i verbi che intendiamo usare), un secondo file contenete le frasi di default, l'ultimo contenete le azioni necessarie per associare le frasi di default ai verbi. Infine li importeremo nel giusto posto dello script principale.

Creiamo il file di testo "verb.adh", sempre nella cartella macTutorial, e scriviamo al suo interno il seguente elenco di verbi:

[Verbs]
#31,ACCENDI,BRUCIA,APPICCIA
#32,ANNUSA
#33,APRI
#34,AIUTA
#35,AIUTO
#36,ASCOLTA,SENTI,AUSCULTA
#37,AVVOLGI
#38,BALLA,DANZA
#39,BEVI
#40,BUSSA
#41,BUTTA,LANCIA,GETTA
#42,CAGA
#43,CANCELLA,ANNULLA
#44,CANTA
#45,CHIUDI
#46,CHIEDI,DOMANDA
#47,COLPISCI,AGGREDISCI,SCAGLIATI,ATTACCA,CACCIA
#48,COMPRA
#49,CONTA,NUMERA
#50,DAI,CONSEGNA
#51,DORMI,RIPOSA
#52,ENTRA
#53,ESCI
#54,FERMA,ARRESTA,STOPPA
#55,GIOCA
#56,GIRA,RUOTA
#57,GUARDATI,GUARDAMI
#58,GUIDA,CONDUCI
#59,INCOLLA,ATTACCA,UNISCI,COLLEGA
#60,INFILA
#61,INSULTA,OFFENDI,STUPIDO,IDIOTA,STRONZO,VAFFANCULO,BESTEMMIA
#62,ISTRUZIONI,INFORMAZIONI
#63,LIBERA
#64,LECCA
#65,LEGA
#66,LEGGI,SFOGLIA
#67,MANGIA,ASSAGGIA,TRANGUGIA
#68,MOSTRA
#69,NASCONDITI,NASCONDIMI
#70,PARLA,RISPONDI,DISCUTI
#71,PERQUISISCI
#72,PULISCI
#73,PUNTEGGIO,PUNTI
#74,RIEMPI,COLMA
#75,ROMPI,FORZA,DISTRUGGI,DANNEGGIA,FRANTUMA,SPEZZA,BUCA
#76,RUBA,SOTTRAI,SGRAFFIGNA,SOLA
#77,SALI
#78,SALUTA,ADDIO
#79,SALTA,SCAVALCA,SUPERA,OLTREPASSA,BALZA
#80,SCENDI
#81,SCIOGLI,SLEGA,DIRIMI
#82,SCRIVI,COMPILA,REDAI,DISEGNA,SCARABOCCHIA
#83,SCUREGGIA
#84,SEPARA,DIVIDI
#85,SFILA
#86,SPINGI,SPOSTA,MUOVI
#87,SPEGNI
#88,SPORCA,INSUDICIA
#89,SPUTA,SCATARRA
#90,SUCCHIA,ASPIRA
#91,SVEGLIA
#92,SVUOTA,VERSA,COLA
#93,TAGLIA,SEGA,ABBATTI,STRAPPA
#94,TIRA
#95,TOCCA,TASTA,PALPA
#96,TROMBA,SCOPA,FOTTI
#97,TUFFATI,BUTTATI,LANCIATI
#98,UCCIDI,ACCOPPA,AMMAZZA
#99,UCCIDITI,SUICIDATI,MUORI
#100,USA,UTILIZZA
#101,VAI,TORNA,RAGGIUNGI
#102,BACIA,LIMONA

|||fine verbi

Notate che abbiamo cominciato l'elenco dal numero 31, le prime trenta posizioni le lascieremo infatti libere per il file ital.adh (vedremo poi come modificarlo).

NOTA: ogni sezione (ad eccezione di system, actions, events) ha una numerazione propria è importante che nella medesima sezione non vi siano più righe con il medesimo numero. Ciò può accadere per sbaglio nel momento in cui si importano altri file con pezzi di codice, come noi ci accingiamo a fare. Per tale motivo lascerò sempre un commento nel codice principale che ricordi i numeri già occupati in altri file.

Salviamo il file verb.adh e creiamo un altro file chiamato "msgdef.adh" nel quale andremo a scrivere i messaggi di default dei vari verbi. Numereremo i messaggi a partire dal 500. Ecco le frasi di default che ho scritto per l'elenco dei miei verbi:

[Messages]
||| messaggi di default dei verbi

#500,Non si può accendere.
#501,Non senti nulla.
#502,Non si può aprire.
#503,Non ha bisogno di aiuto.
#504,Silenzio assoluto.
#505,Non puoi avvolgerlo.
#506,Improvvisi un paio di passi di danza, col risultato di renderti ridicolo.
#507,Non puoi berlo.
#508,Toc Toc.
#509,Non puoi liberartene così.
#510,Sarebbe meglio trovare un bagno.
#511,Non si cancella.
#512,Sei stonato come una campana.
#513,Non si può chiudere.
#514,Chiedere non serve a nulla.
#515,La violenza non è la risposta giusta.
#516,Non è in vendita.
#517,Inutile contare.
#518,Sei troppo generoso.
#519,Chi dorme non piglia pesci.
#520,Non puoi entrare li.
#521,Uscire di li non è possibile.
#522,Non si può fermare.
#523,Trastulli per fanciulli.
#524,Non si gira.
#525,Bello come il sole.
#526,Non hai la patente.
#527,Impossibile unirli.
#528,Non si infila.
#529,Questo è un gioco per bene.
||| inizio istruzioni
#530,ISTRUZIONI\\1>Avventure testuali\2>Comandi\3>Credits\4>Torna al gioco.\ |
#531,AVVENTURE TESTUALI\La descrizione della vostra avventura\\(premi un tasto)\
#532,COMANDI\La descrizione dei comandi principali\\(premi un tasto)\
#533,CREDITS\L'autore della avventura ed un ringraziamento a Paolo Lucchesi\\(premi un tasto)\\

||| fine istruzioni

#534,Non si può liberare.
#535,Mettere la lingua ovunque non è bello.
#536,Non si può legare.
#537,Niente di interessante.
#538,Non è il momento di mangiare.
#539,Meglio non mostrarlo.
#540,Non vedi posti in cui nascondersi.
#541,Chiacchere inutili.
#542,Niente di particolare.
#543,Non è il momento per le pulizie di pasqua.

||| punteggio:

#544,Hai totalizato %varPunti% Punti in %varTurni% mosse.
#545,Non si può riempire.
#546,La violenza non è tutto.
#547,Questo è un gioco onesto.
#548,Non si può salire li.
#549,Fai un gesto con la mano.
#550,Non sei così atletico.
#551,Non si può scendere di li.
#552,Non si può sciogliere.
#553,Pessima grafia.
#554,Dovresti limitarti.
#555,Impossibile da dividere.
#556,Non si può sfilare.
#557,Non si sposta.
#558,Non si spegne.
#559,Non essere dispettoso.
#560,Splath....
#561,Bleah.
#562,Meglio lasciar stare.
#563,Non si può svuotare.
#564,Niente da fare.
#565,Non si muove.
#566,Niente di particolare al tatto.
#567,Questo è un gioco per bene.
#568,Non è il momento di fare acrobazie.
#569,Non vorrai finire in galera?
#570,Non ti abbattere.
#571,Sii più specifico.
#572,Andar di la non è possibile.
#573,Il bacio è un apostrofo rasa tra le parole "ti" ed "amo".
#574,Arrangiati.

||| fine messaggi di default

Salviamo il file msgdef.adh
Notate in questo script un messaggio in particolare, il numero 544. Esso presenta dei caratteri % al suo interno. In particolare questi caratteri contengono due parole: varPunti e varTurni queste sono due variabili numeriche che andremo più avanti a inserire nello script principale nella sezione [vars]. La prima misurerà i punti conquistati dal giocatore durante la partita, la seconda il numero di comandi da lui inseriti per raggiungere tale punteggio. Il punteggio torna utile al giocatore facendolo cosciente dei sui progressi nell'avventura e quindi incoraggiandolo ad andare avanti.

Creiamo un altro file chiamato "verbdef.adh" nel quale andremo a scrivere le seguenti azioni che associano ad ogni verbo il corrispettivo messaggio di default:

[Actions]
if verb ACCENDI noun 0
then message 500
if verb ANNUSA noun 0
then message 501
if verb APRI noun 0
then message 502
if verb AIUTA noun 0
then message 503
if verb AIUTO noun 0
then message 574
if verb ASCOLTA noun 0
then message 504
if verb AVVOLGI noun 0
then message 505
if verb BALLA noun 0
then message 506
if verb BEVI noun 0
then message 507
if verb BUSSA noun 0
then message 508
if verb BUTTA noun 0
then message 509
if verb CAGA noun 0
then message 510
if verb CANCELLA noun 0
then message 511
if verb CANTA noun 0
then message 512
if verb CHIEDI anynoun 0
then message 513
if verb CHIUDI noun 0
then message 514
if verb COLPISCI noun 0
then message 515
if verb COMPRA noun 0
then message 516
if verb CONTA noun 0
then message 517
if verb DAI anynoun 0
then message 518
if verb DORMI noun 0
then message 519
if verb ENTRA noun 0
then message 520
if verb ESCI noun 0
then message 521
if verb FERMA noun 0
then message 522
if verb GIOCA noun 0
then message 523
if verb GIRA noun 0
then message 524
if verb GUARDA noun 0
then message 525
if verb GUIDA noun 0
then message 526
if verb INCOLLA noun 0
then message 527
if verb INFILA noun 0
then message 528
if INSULTA verb noun 0
then message 529
||| ISTRUZIONI
if verb ISTRUZIONI noun 0
{

set varIstruzioni 1
while eq varIstruzioni 1
{

cls message 530 mchoiche varR 4
if eq varR 1
then cls message 531 pause
if eq varR 2
then cls message 532 pause
if eq varR 3
then cls message 533 pause
if eq varR 4
then cls set varIstruzioni 0
reset varR

}

}
|||FINE ISTRUZIONI

if verb LIBERA noun 0
then message 534
if verb LECCA noun 0
then message 535
if verb LEGA noun 0
then message 536
if verb LEGGI noun 0
then message 537
if verb MANGIA noun 0
then message 538
if verb MOSTRA anynoun 0
then message 539
if verb NASCONDITI noun 0
then message 540
if verb PARLA anynoun 0
then message 541
if verb PERQUISISCI noun 0
then message 542
if verb PULISCI noun 0
then message 543
if verb PUNTEGGIO noun 0
then message 544
if verb RIEMPI noun 0
then message 545
if verb ROMPI noun 0
then message 546
if verb RUBA noun 0
then message 547
if verb SALI noun 0
then message 548
if verb SALUTA noun 0
then message 549
if verb SALTA noun 0
then message 550
if verb SCENDI noun 0
then message 551
if verb SCIOGLI noun 0
then message 552
if verb SCRIVI noun 0
then message 553
if verb SCUREGGIA noun 0
then message 554
if verb SEPARA noun 0
then message 555
if verb SFILA noun 0
then message 556
if verb SPINGI noun 0
then message 557
if verb SPEGNI noun 0
then message 558
if verb SPORCA noun 0
then message 559
if verb SPUTA noun 0
then message 560
if verb SUCCHIA noun 0
then message 561
if verb SVEGLIA noun 0
then message 562
if verb SVUOTA noun 0
then message 563
if verb TAGLIA noun 0
then message 564
if verb TIRA noun 0
then message 565
if verb TOCCA noun 0
then message 566
if verb TROMBA noun 0
then message 567
if verb TUFFATI noun 0
then message 568
if verb UCCIDI noun 0
then message 569
if verb UCCIDITI noun 0
then message 570
if verb USA noun 0
then message 571
if verb VAI noun 0
then message 572
if verb BACIA noun 0
then message 573
|||finedefault

Salviamo il file verbdef.adh
Il "noun 0" sta per nome sconosciuto o nessun nome. Avrete notato in quest'ultimo script la presenza di un'azione particolare ossia quella associata al comando istruzioni. Essa presenta un ciclo while, ed un dialogo a scelta multipla con l'utente. Prendiamolo come è per il momento, più avanti spiegheremo il significato in particolare di questa scrittura. (lo so, lo so, sto rimandando tante cose, ma abbiate pazienza).

Ricapitolando, adesso abbiamo, nella nostra cartella macTutorial, 6 files: macTutorial.exe , macTutorial.adv , ital.adh , verb.adh , msgdef.adh , verbdef.adh ;
riprendiamo il file macTutorial.adv (nostro script principale) e vediamo come andare ad introdurre il lavoro che abbiamo fatto sui verbi:

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
#100,STANZA
#101,PARETI,MURI,PARETE,MURO

[objects]

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.

||| aggiungiamo i messaggi di default associati ai verbi
||| lasciamo anche un commento a ricordarci che essi vanno dal n°500 al n°574
||| #500-inizio messaggi di default

@
msgdef.adh
||| #574-fine messaggi di default

[vars]

||| definiamo le variabili che abbiamo utilizzato negli script importati (e che non abbiamo ancora spiegato)

varTurni
varPunti
varR


[Actions]
if at 1
{+

if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

||| diciamo a mac di stampare sullo schermo il titolo dell'avventura

if begin
then show 1 halt

||| ad ogni turno incrementiamo la variabile che li conta:

add varTurni 1


| fine script

Salviamo il tutto e lanciamo il file macTutorial.exe.

Clicca qui e qui per vedere l'immagini.

Abbiamo inserito i verbi, i messaggi di default e la loro associazione. La posizione in cui vengono inseriti tali file è importante. In particolare ricordate che il file verbdef.adh deve rimanere sempre come ultima istruzione della sezione actions. Questo perchè le risposte di default vanno visualizzate solo nel momento in cui non abbiamo associata alcun altra risposta/azione migliore. Ad esempio provate a dare ora il comando "ascolta" avrete la risposta di default "Silenzio assoluto", ogni stanza in cui non sia prevista una diversa risposta ci darà qualla di default. Ma se andiamo ad aggiungere un nuovo messaggio ed una nuova azione nella stanza uno avremo che il gioco al comando ascolta (nella stanza uno) ci darà la nuova risposta (e non stamperà quella di default, perchè successiva):

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
#100,STANZA
#101,PARETI,MURI,PARETE,MURO
||| aggiungiamo il noun musica
#102,MUSICA,MELODIA

[objects]

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.

||| aggiungiamo un messaggio relativo alla musica.

#3,Senti una musica dolce ed armoniosa, ma non riesci a capire da dove proviene.

||| #500-inizio messaggi di default

@
msgdef.adh
||| #574-fine messaggi di default

[vars]
varTurni
varPunti
varIstruzioni
varR


[Actions]
if at 1
{+

if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2
if verb ASCOLTA noun 0
or verb ASCOLTA noun MUSICA
then message 3

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

if begin
then show 1 halt


add varTurni 1


| fine script

Adesso al comando "ascolta" o "ascolta la musica" verrà visualizzato il messaggio numero 3 e non quello di default.

Ma ora, come promesso, occupiamoci delle variabili: m.a.c. riconosce unicamente variabili di tipo numeriche, esse possono poi contenere solo numeri positivi interi. Attraverso speciali comandi (li trovate nel manuale) è possibile variarne o controllarne il valore. Possono essere utilizzate per contare i punti ed i turni, ma il loro scopo principale è quello di fungere da flag (bandiere), segnali per dare il via, o consentire, una certa azione prima preclusa. Il loro utilizzo sarà più chiaro nel momento in cui inseriremo qualche enigma nell'avventura. Le variabili che vengono utilizzate vanno dichiarate nella sezione vars. Per praticità ed onde evitare qualsiasi confusione con nomi ed oggetti porrò davanti ad ogni variabile il suffisso var (come nello script). Al momento ho dichiarato 4 variabili. La variabile varTurni ha il compito di contare il numero di mosse del giocatore, essa incrementa di una unità ad ogni turno (sezione events); La variabile varPunti deve invece contare il numero di punti accumulati dal giocatore, al momento questa variabile non viene modificata nello script e rimane pari a 0 (valore iniziale di ogni variabile se non diversamente specificato); entrambi i valori possono essere visualizzati dal giocatore dando il comando "punteggio" (grazie al messaggio n°544 come abbiamo visto precedentemente). La varibile varR è stata utilizzata (per la scelta multipla) assieme alla variabile varIstruzioni (che funge da flag) al fine di gestire un menù esplicativo del gioco diviso in più sezioni, dove ognuna di esse è raggiungibile premendo il numero associato ad essa. Andiamo a vedere e a spiegare il ciclo while e il dialogo a scelta multipla usato all'interno del file verbdef.adh.

| se il giocatore da il comando "istruzioni"
if verb ISTRUZIONI noun 0
| allora
{

| impostiamo il valore di varIstruzioni (la nostra flag) pari ad 1
set varIstruzioni 1
| mentre il valore di varIstruzioni è pari ad 1
while eq varIstruzioni 1
| esegui le seguenti istruzioni e ripetile fin quando varIstruzioni sarà pari ad 1
{

| pulisci lo schermo e stampa il messaggio n° 530 (tale messaggio contiene i titoli delle sezioni del menu istruzioni ognuno associato ad un numero da uno a quattro) chiedi al giocatore un numero da uno a quattro ed assegna tale valore alla variabile varR (non accettare altri comadi all'infuori dei numeri da uno a quattro):
cls message 530 mchoiche varR 4
| se la risposta del giocatore è la uno (associata nel messaggio 530 alla descrizione dell'avventura) allora pulisci lo schermo stampa il messaggio 531 (descrizione dell'avventura) e aspetta che l'utente prema un pulsante per proseguire.
if eq varR 1
then cls message 531 pause

| se la risposta del giocatore è 2 allora pulisci lo schermo e stampa il messaggio 532 (descrizione dei comandi) e aspetta che il giocatore prema un pulsante qualsiasi per proseguire

if eq varR 2
then cls message 532 pause

| se la risposta è 3 mostra i crediti

if eq varR 3
then cls message 533 pause

| Se la risposta è quattro (torna al gioco nel messggio 530) allora imposta la variabile varIstruzioni uguale a 0

if eq varR 4
then cls set varIstruzioni 0

| poni a 0 la variabile varR

reset varR

| fine ciclo, se la condizione varIstruzioni è pari ad 1 allora ricomincia altrimenti esci dal ciclo e fermati
}

}

Da qui si evince l'importanza delle variabili come flags, senza il controllo operato sulla variabile varIstruzioni non sarebbe possibile uscire dal ciclo while ed esso si ripeterebbe all'infinito. La pausa impostata dopo la stampa dei messaggi a schermo serve a a fermare il ciclo prima che esso riparti pulendo lo schermo e chiedendo ancora un numero da 1 a 4. Questo sistema può essere utilizzato anche per creare dei dialoghi a scelta multipla con altri personaggi non giocatori come avviene nelle avventure grafiche, anche se non è un metodo utilizzato di frequente nelle at.

 

 

Step 3.

Aggiungiamo qualche optional al nostro gioco. Inseriremo un comando StatusLine al fine di avere sempre in primo piano il numero di mosse ed il punteggio, in più aggiungeremo un messaggio che appaia ogni tanto sullo schermo mentre il giocatore è nella stanza n° 1.

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

||| come potete vedere segue la stessa logica del messaggio associato all'azione "punteggio"

StatusLine=Hai realizzato %varPunti% punti in %varTurni% mosse.

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
#100,STANZA
#101,PARETI,MURI,PARETE,MURO
||| aggiungiamo il noun musica
#102,MUSICA,MELODIA

[objects]

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.

||| aggiungiamo un messaggio relativo alla musica.

#3,Senti una musica dolce ed armoniosa, ma non riesci a capire da dove proviene.

||| #500-inizio messaggi di default

@
msgdef.adh
||| #574-fine messaggi di default

[vars]
varTurni
varPunti
varIstruzioni
varR


[Actions]
if at 1
{+

if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2
if verb ASCOLTA noun 0
or verb ASCOLTA noun MUSICA
then message 3

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

if begin
then show 1 halt


add varTurni 1


||| frase random
if at 1 random 1 8
then message 3

| fine scrip

Clicca qui per vedere l'immagine.

Aggiungiamo ancora qualche frase di contorno, personalizziamo al gioco la risposta ai tentativi (inutili) di movimento nella stanza n°1:

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

StatusLine=Hai realizzato %varPunti% punti in %varTurni% mosse.

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
#100,STANZA
#101,PARETI,MURI,PARETE,MURO
#102,MUSICA,MELODIA
||| aggiungiamo due noun
#103,PAVIMENTO
#104,SOFFITTO

[objects]

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.
#3,Senti una musica dolce ed armoniosa, ma non riesci a capire da dove proviene.
||| aggiungiamo un paio di messaggi.
#4,Il pavimento ed il soffitto, come le pareti, sono perfettamente bianchi. Se non fosse per la gravità sarebbe impossibile stabilire quale sia il sopra ed il sotto
.
#5,Non sembra esservi modo di uscire di qui.
#6,Le pareti sono solide!
#7,Solido!
#8,Troppo duro da rompere a mani nude!
#9,Fai forza con tutto il tuo peso, ma non si muove di un millimetro.
||| #500-inizio messaggi di default
@
msgdef.adh
||| #574-fine messaggi di default

[vars]
varTurni
varPunti
varIstruzioni
varR


[Actions]
if at 1
{+

||| aggiungiamo qualche azione "inutile"
if verb ESAMINA noun PAVIMENTO
or verb ESAMINA noun SOFFITTO
then message 4
if verb TOCCA noun PAVIMENTO
or verb TOCCA noun SOFFITTO
then message 7
if verb TOCCA noun PARETI
then message 6
if verb ROMPI noun PARETI
or verb ROMPI noun PAVIMENTO
or verb COLPISCI noun PARETI
or verb COLPISCI noun PAVIMENTO
then message 8
if verb SPOSTA noun PARETI
then message 9
if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2
if verb ASCOLTA noun 0
or verb ASCOLTA noun MUSICA
then message 3
||| movimenti:
if move
or verb VAI noun 0
then message 5

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

if begin
then show 1 halt


add varTurni 1


if at 1 random 1 8
then message 3

| fine script

Oltre ad alcune risposte ad azioni ‘inutili’ abbiamo aggiunto anche un messaggio casuale, l’istruzione è l’ultima della sezione events, ad ogni turno ed indipendentemente dal comando del giocatore con una probabilità di 1 su 8 il gioco stamperà il messaggio numero tre informando il giocatore di una misteriosa melodia…

Ora che abbiamo un poco più di confidenza andiamo ad aggiungere alla nostra stanza un oggetto. Un oggetto si differenzia da un semplice "noun" per il fatto che m.a.c. ne gestisce automaticamente alcune proprietà come il suo trasporto, l'inventario, la descrizione, se sia o meno una fonte luminosa, se può essere indossato...
Il numero identificativo di un oggetto è strettamente correlato con il numero identificativo di un nome, ossia l'oggetto n° 1 sarà associato automaticamente al nome n°1 (con qualche eccezione che vedremo più avanti, non odiatemi). Ecco perchè nella sezione nouns abbiamo iniziato la numerazione da 100, ho infatti riservato le prime 100 posizioni ad eventuali oggetti (ma non ho intenzione di farne tanti, tranquilli). I nomi che ho definito fino ad ora, non avranno un oggetto corrispondente, infatti sarebbe del tutto inutile definire tanti oggetti, quando la loro funzione è unicamente quella di scenografia.
Aggiungerò allora un oggetto chiamato "sfera" con il numero identificativo 1 ed il corrispondente noun 1 = "sfera". La nostra sfera sarà un oggetto particolare, non potrà infatti essere raccolta ed è un oggetto luminoso.

NOTA: Utilizzo un oggetto per la sfera (e non la includo nella descrizione) poichè sarà possibile eliminarla dalla stanza. Se avessi incluso la sfera nella descrizione della stanza, alla sua eliminazione, avrei dovuto cambiare anche la descrizione della locazione, per fare ciò avrei dovuto creare una nuova locazione con la medesima descrizione ad eccezione della sfera e trasferirvi il giocatore. Un lavoro assai dispendioso quando si può invece sfruttare le caratteristiche degli oggetti.

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

StatusLine=Hai realizzato %varPunti% punti in %varTurni% mosse.

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

#1,stanza vuota,,0
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
|||| nouns associati ad oggetti
#1,SFERA,BOCCIA,PALLA
||| altri nouns
#100,STANZA
#101,PARETI,MURI,PARETE,MURO
#102,MUSICA,MELODIA
#103,PAVIMENTO
#104,SOFFITTO

[objects]

||| ecco il nostro primo oggetto

#1, la sfera,1,4
La sfera è sospesa a circa un metro e mezzo da terra, emana uno strano bagliore fluorescente che illumina tutta la stanza.

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.
#3,Senti una musica dolce ed armoniosa, ma non riesci a capire da dove proviene.
||| aggiungiamo un paio di messaggi.
#4,Il pavimento ed il soffitto, come le pareti, sono perfettamente bianchi. Se non fosse per la gravità sarebbe impossibile stabilire quale sia il sopra ed il sotto
.
#5,Non sembra esservi modo di uscire di qui.
#6,Le pareti sono solide!
#7,Solido!
#8,Troppo duro da rompere a mani nude!
#9,Fai forza con tutto il tuo peso, ma non si muove di un millimetro.
#10,E' troppo grande per metterla in tasca, e poi una volta presa non sapresti dove andare...
||| #500-inizio messaggi di default
@
msgdef.adh
||| #574-fine messaggi di default

[vars]
varTurni
varPunti
varIstruzioni
varR


[Actions]
if at 1
{+

||| aggiungiamo una risposta diversa a quella standard se il giocatore tenta di prendere la sfera
if verb PRENDI noun SFERA present 1
then message 10
if verb ESAMINA noun PAVIMENTO
or verb ESAMINA noun SOFFITTO
then message 4
if verb TOCCA noun PAVIMENTO
or verb TOCCA noun SOFFITTO
then message 7
if verb TOCCA noun PARETI
then message 6
if verb ROMPI noun PARETI
or verb ROMPI noun PAVIMENTO
or verb COLPISCI noun PARETI
or verb COLPISCI noun PAVIMENTO
then message 8
if verb SPOSTA noun PARETI
then message 9
if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2
if verb ASCOLTA noun 0
or verb ASCOLTA noun MUSICA
then message 3
||| movimenti:
if move
or verb VAI noun 0
then message 5

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

if begin
then show 1 halt


add varTurni 1


if at 1 random 1 8
then message 3

| fine script

Clicca qui per vedere l'immagine.

Notate l'inserimento della condizione "present 1" questo ci permetterà di evitare risposte inadeguate nel caso il giocatore cerchi di prendere la sfera anche quando essa non è presente. Parliamo ora, però, della problematica dell'illuminazione nei giochi creati con m.a.c. (ed in generale di tutte le at). [Probabilmente non è l'approccio migliore agli oggetti, sarebbe stato meglio vedere prima le altre proprietà più semplici]

NOTA: per la sintassi completa degli oggetti, consultate il manuale.

Spesso nelle at ci si trova all'interno di ambienti chiusi, qui sorge la problematica dell'illuminazione degli stessi, sia per una questione di verosimiglianza del mondo costruito, sia al fine di sfruttare tale possibilità per la creazione o complicazione di alcuni enigmi. M.a.c. ci aiuta a gestire tali situazioni attraverso l'impostazione di alcuni parametri. Nella definizione della locazione ricorderete che abbiamo impostato a 0 il parametro "tipo di stanza", esso indicava che la locazione è illuminata, diversamente il valore 1 indica al gioco che la locazione è buia, a meno che non vi sia una fonte di luce (oggetto luminoso). Cosa significa che la locazione è buia? Significa che m.a.c. sostituirà alla descrizione della stessa quella di locazione buia presente nel file ital.adh e solo quando in essa vi sarà un oggetto luminoso (o noi cambieremo l'impostazione della locazione) mostrerà la descrizione della locazione posta nello script principale. Rileggendo queste righe non ci ho capito niente neanche io, perciò, onde spiegarmi, andiamo a vedere il caso pratico: cambiamo il parametro nella locazione 1 affinchè venga cosiderata locazione buia (se non vi son fonti di luce). Ed aggiungiamo la possibilità di togliere la sfera dalla stanza (eliminando in tal modo la fonte di luce). All'inizio perciò il gioco considererà la locazione come buia, ma essendovi la sfera (oggetto luminoso), la locazione apparirà come in precedenza (illuminata) poi dando l'opportuno comando per togliere la sfera, essa verrà eliminata e con essa l'illuminazione della locazione.

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

StatusLine=Hai realizzato %varPunti% in punti %varTurni% mosse.

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

||| cambiamo il tipo di locazione (da illuminata a buia)

#1,stanza vuota,,1
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
|||| nouns associati ad oggetti
#1,SFERA,BOCCIA,PALLA
||| altri nouns
#100,STANZA
#101,PARETI,MURI,PARETE,MURO
#102,MUSICA,MELODIA
#103,PAVIMENTO
#104,SOFFITTO

[objects]
#1, la sfera,1,4
La sfera è sospesa a circa un metro e mezzo da terra, emana uno strano bagliore fluorescente che illumina tutta la stanza.

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.
#3,Senti una musica dolce ed armoniosa, ma non riesci a capire da dove proviene.
#4,Il pavimento ed il soffitto, come le pareti, sono perfettamente bianchi. Se non fosse per la gravità sarebbe impossibile stabilire quale sia il sopra ed il sotto
.
#5,Non sembra esservi modo di uscire di qui.
#6,Le pareti sono solide!
#7,Solido!
#8,Troppo duro da rompere a mani nude!
#9,Fai forza con tutto il tuo peso, ma non si muove di un millimetro.
#10,E' troppo grande per metterla in tasca, e poi una volta presa non sapresti dove andare...
#11,Spingi la sfera, ed essa, dopo una piccola, resistenza comincia a muoversi; acquistando velocità ti sfugge dalle mani e finisce contro la parete.\Incredibilmente essa non viene fermata dall'ostacolo, ma vi si tuffa dentro come una goccia nell'acqua e scompare lasciando sulla parete cerchi concentrici che subito però scompaiono.
||| #500-inizio messaggi di default
@
msgdef.adh
||| #574-fine messaggi di default

[vars]
varTurni
varPunti
varIstruzioni
varR


[Actions]
if at 1
{+

||| aggiungiamo la possibilità di eliminare la sfera
if verb SPINGI noun SFERA present 1
then message 11 destroy 1
if verb PRENDI noun SFERA present 1
then message 10
if verb ESAMINA noun PAVIMENTO
or verb ESAMINA noun SOFFITTO
then message 4
if verb TOCCA noun PAVIMENTO
or verb TOCCA noun SOFFITTO
then message 7
if verb TOCCA noun PARETI
then message 6
if verb ROMPI noun PARETI
or verb ROMPI noun PAVIMENTO
or verb COLPISCI noun PARETI
or verb COLPISCI noun PAVIMENTO
then message 8
if verb SPOSTA noun PARETI
then message 9
if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2
if verb ASCOLTA noun 0
or verb ASCOLTA noun MUSICA
then message 3
||| movimenti:
if move
or verb VAI noun 0
then message 5

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

if begin
then show 1 halt


add varTurni 1


if at 1 random 1 8
then message 3

| fine script

Clicca qui e qui per vedere le immagini.

Ora, spingendo la sfera, essa viene eliminata e subito la stanza si abbuia. Notate che siete sempre nella locazione n°1, è solo la descrizione della stanza ad essere sostituita, potrete perciò compiere ancora le azione previste in questo luogo. Per aggiungere veridicità al gioco, però, dobbiamo modificare lo script. E' infatti incoerente lasciare la possibilità di esaminare l'ambiente quando questo è buio. Perciò:

| inizio script
@ital.adh

[System]
StartLocation=1
MaxItems=5

StatusLine=Hai realizzato %varPunti% in punti %varTurni% mosse.

[Shows]
#1,
Benvenuti\\TUTORIAL per M.A.C\\scritto da riktik\\\

[Locations]

||| cambiamo il tipo di locazione (da illuminata a buia)

#1,stanza vuota,,1
Ti trovi in una stanza vuota dalle pareti bianche.

|||al posto della sezione [verbs] importiamo il file verb.adh che la contiene.
@
verb.adh

[nouns]
|||| nouns associati ad oggetti
#1,SFERA,BOCCIA,PALLA
||| altri nouns
#100,STANZA
#101,PARETI,MURI,PARETE,MURO
#102,MUSICA,MELODIA
#103,PAVIMENTO
#104,SOFFITTO

[objects]
#1, la sfera,1,4
La sfera è sospesa a circa un metro e mezzo da terra, emana uno strano bagliore fluorescente che illumina tutta la stanza.

[messages]

#1,La stanza è completamente vuota.
#2,Le pareti sono perfettamente bianche.
#3,Senti una musica dolce ed armoniosa, ma non riesci a capire da dove proviene.
#4,Il pavimento ed il soffitto, come le pareti, sono perfettamente bianchi. Se non fosse per la gravità sarebbe impossibile stabilire quale sia il sopra ed il sotto
.
#5,Non sembra esservi modo di uscire di qui.
#6,Le pareti sono solide!
#7,Solido!
#8,Troppo duro da rompere a mani nude!
#9,Fai forza con tutto il tuo peso, ma non si muove di un millimetro.
#10,E' troppo grande per metterla in tasca, e poi una volta presa non sapresti dove andare...
#11,Spingi la sfera, ed essa, dopo una piccola, resistenza comincia a muoversi; acquistando velocità ti sfugge dalle mani e finisce contro la parete.\Incredibilmente essa non viene fermata dall'ostacolo, ma vi si tuffa dentro come una goccia nell'acqua e scompare lasciando sulla parete cerchi concentrici che subito però scompaiono.
#12,E' troppo buio per scorgere alcunche.
#13,Procedi a tentoni, fino a scontrarti contro la parete.
#14,Silenzio assoluto.
||| #500-inizio messaggi di default
@
msgdef.adh
||| #574-fine messaggi di default

[vars]
varTurni
varPunti
varIstruzioni
varR


[Actions]
if at 1
{+

||| se la stanza è buia, allora è logico che non si possano guardare gli oggetti
||| è importante che il comando preceda gli altri "esamina":
if verb ESAMINA dark
then message 12
if move dark
then message 13
if verb ASCOLTA noun 0 dark
or verb ASCOLTA noun MUSICA dark
then message 14
if verb SPINGI noun SFERA present 1
then message 11 destroy 1
if verb PRENDI noun SFERA present 1
then message 10
if verb ESAMINA noun PAVIMENTO
or verb ESAMINA noun SOFFITTO
then message 4
if verb TOCCA noun PAVIMENTO
or verb TOCCA noun SOFFITTO
then message 7
if verb TOCCA noun PARETI
then message 6
if verb ROMPI noun PARETI
or verb ROMPI noun PAVIMENTO
or verb COLPISCI noun PARETI
or verb COLPISCI noun PAVIMENTO
then message 8
if verb SPOSTA noun PARETI
then message 9
if verb ESAMINA noun STANZA
then message 1
if verb ESAMINA noun PARETE
then message 2
if verb ASCOLTA noun 0
or verb ASCOLTA noun MUSICA
then message 3
||| movimenti:
if move
or verb VAI noun 0
then message 5

}

||| alla fine della sezione actions importiamo il file verbdef.adh

@
verbdef.adh

[Events]

if begin
then show 1 halt


add varTurni 1


if at 1 random 1 8
then message 3

| fine script

A questo punto lo script comincià ad essere un poco troppo lungo per essere seguito su questa pagina html, in più oramai si sarà presa confidenza col mezzo. Perciò da qui in poi metterò i collegamenti allo script macTutorial.adv nella sua evoluzione. Prima di ogni collegamento inserirò una descrizione di ciò che verrà aggiunto, mentre all'interno degli script troverete i commenti alle nuove linee inserite.

Step 4.

Inserita una introduzione all'avventura più corposa.
Clicca qui per lo script.

Step 5.

Inseriti alcuni miglioramenti all'ambiente e modifichiamo il file ital.adh con l’inserimento di alcune shortcut molto diffuse nella maggiorparte delle at.

Clicca qui per lo script adv e qui per lo script adh modificato.

Step 6.

Cambio di locazione. Inserito un personaggio non giocatore.
Clicca qui per lo script.

Step 7.

Inserimento di un dialogo con un personaggio non giocatore.
Clicca qui per lo script.

Step 8.

            Alcuni migliramenti qui e li. Clicca qui per lo script.

Step 9.

            Concludiamo l’avventura. Clicca qui per lo script.

Step  10.

            Eccoci dunque giunti alla conclusione di questo tutorial, questi sono i file completi utilizzati: mactutorial.adv verb.adh verbdef.adh msgdef.adh e ital.adh. Mentre qui potete trovare il sorgente riunito in un unico file. E qui potete ottenere l’avventura d’esempio compilata e pronta per essere giocata. Adesso tocca a voi! Create la vostra  avventura!!!

 

POST SCRIPTUM

Se avete suggerimenti o rilevate errori in questo tutorial, fatemelo sapere: riktik@tiscalinet.it