M.A.C. : Mystery Adventure Creator
Guida per iniziare

Autore: Paolo Lucchesi
email: plucchesi@tin.it
Personal home page: http://www.paololucchesi.it
M.A.C. home page: http://mac.paololucchesi.it


0: Introduzione

Questa breve guida nasce dall'esigenza di fornire un punto di partenza a tutti coloro che vogliono imparare ad usare M.A.C. come programma per la realizzazione di avventure testuali. Infatti ho notato troppo spesso che, in contrasto con la sua vantata semplicità, M.A.C. ha una sintassi di linguaggio talvolta molto criptica e sfrutta delle convenzioni che non sono sempre di immediata comprensione. Per questo motivo ho deciso di realizzare queste brevi note che guidano passo dopo passo il lettore durante tutta la realizzazione di una piccola avventura testuale che sfrutti il più possibile le caratteristiche di M.A.C., sperando che questo sia di aiuto a tutti.
In questo modo vedremo come usare M.A.C., come creare stanze e oggetti, come gestire le azioni più complesse, come realizzare immagini grafiche e finalmente confezionare un prodotto completo e distribuibile.
Ovviamente questa guida non vuole spiegare tutte le caratteristiche di M.A.C., né vuole sostituire completamente il manuale. Vuole essere solo una semplice e chiara guida per iniziare, per imparare ad usare M.A.C. e a realizzare avventure.


1: Per iniziare

Anzitutto scarichiamo l'archivio .zip che contiene M.A.C. e tutti i file correlati. L'archivio si chiama mac.zip e lo possiamo trovare all'indirizzo http://space.tin.it/giochi/ipsll/mac/mac.zip. Una volta scaricato, apriamo questo file con winzip (o con qualunque altro programma per decomprimere i file .zip), e estraiamo tutti i file dell'archivio in una cartella (altrimenti detta directory) di nostra scelta. A titolo di esempio supponiamo che questa cartella sia c:\advent\mac (ovvero la cartella mac, creata all'interno della cartella advent, a sua volta creata nell unità disco c:).

A questo punto possiamo iniziare a giocare un po' con M.A.C. e con l'avventura di prova (una piccola avventura horror semplice semplice), tanto per prenderci un po' la mano. Ma può nascere subito il primo piccolissimo ostacolo: M.A.C. nasce fondamentalmente come programma dos, e conserva ancora questa impostazione (anche perché io la ritengo comodissima). Quindi il modo più semplice per far partire M.A.C. é quello di usare il prompt di ms-dos (o prompt dei comandi); Basta cercarlo nel menù avvio di Windows, dovrebbe trovarsi sotto "programmi". Lanciamolo; non fa differenza se appare a schermo intero o in finestra (ma posso passare dall'una all'altra modalità premendo ALT-ENTER). A questo punto spostiamoci nella directory (cartella) dove é installato M.A.C. dando, ad esempio, i seguenti comandi:

c:\
cd c:\advent\mac
Ovviamente se M.A.C. é stato installato in una cartella differente da c:\advent\mac dovremo modificare opportunamente questi comando.
Ora che siamo nella directory giusta lanciamo l'avventura di prova che si trova, incredibilmente, nel file prova.adv. Visto che non ci sono immagini grafiche, usiamo mactxt.exe, la versione "solo testo" di M.A.C., e quindi diamo il comando: mactxt prova In questo modo ecco che il programma parte e ci permette di giocare alla piccola avventura di prova. Quando finalmente l'abbiamo risolta o ci siamo stufati, usciamo dal programma (QUIT) e facciamo qualche altro esperimento. L'avventura di prova non ha immagini grafiche, ma potremmo cercare di vedere che aspetto avrebbe se le avesse. Diamo il comando: mac prova e in questo modo riparte la stessa avventura, ma con un aspetto completamente differente. Questo potrebbe non funzionare sotto Windows NT, Windows 2000 o Windows XP. Proviamo questo: winmac prova e l'avventura di prova questa volta parte in una finestra, invece che a schermo pieno. Proviamo anche questo comando: macstd prova per far apparire la nostra avventura con un aspetto semplice, spartano. Non molto gradevole, ma forse in futuro potrebbe servirci per testare le nostre avventure.
Se ancora non siamo soddisfatti, e se siamo portati per l'inglese possiamo provare, ad esempio, questi due comandi: mactxt test
mac m9
Infatti il file test.adv contiene l'avventura di prova in inglese, mentre il file m9.adv contiene "Perseus & Andromeda", una vecchia avventura di qualche anno fa.


2: Una prima avventura

A questo punto, ora che abbiamo visto come giocare le avventure di prova, vorremmo iniziare a creare qualcosa. Per questo abbiamo bisogno di un editor, un programma che permette di scrivere file di testo. Al limite potrebbe anche andar bene il blocco note (notepad) di Windows, ma le sue funzionalità sono veramente ridotte al minimo. Su internet si possono trovare ottimi editor con licenza freeware o shareware; io posso consigliare di scegliere Crimson Editor (http://www.crimsoneditor.com/ ). Assolutamente sono da evitare programmi di word processing come Word e WordPad.

Scarichiamo, installiamo e lanciamo il nostro editor. Possiamo usare la combinazione di tasti ALT-TAB (tenete premuto ALT e premete TAB) per passare dall'editor al prompt di ms-dos e viceversa. Usiamo, ad esempio, l'editor per aprire il file prova.adv, ovviamente nella cartella c:\advent\mac e iniziamo a renderci conto di come viene fatta un'avventura per M.A.C., di come si articola il programma.

Per quanto l'avventura di prova sia interessante, noi vogliamo creare qualcosa di nostro. Quindi chiudiamo il file prova.adv senza salvare e apriamo un file vuoto. Iniziamo scrivendo le seguenti righe:

@ital.adh

[System]
StartLocation=1
CharSet=w
In questo modo abbiamo stabilito di usare l'insieme di definizioni standard in italiano (ovvero abbiamo inserito il file ital.adh all'interno della nostra avventura, abbiamo deciso che l'avventura inizierà nella locazione 1, e con l'ultima riga vogliamo informare M.A.C. del fatto che stiamo usando un editor windows per scrivere l'avventura (in questo modo M.A.C. interpreterà correttamente le lettere accentate e altri caratteri). E ora creiamo le nostre prime "locazioni" (ovvero gli ambienti dove si svolge l'avventura). Aggiungiamo di seguito: [Locations]
#1,Camera,,0,0,2,3,0
Sei in una vasta camera da letto arredata in modo
quasi spartano. Verso sud vedi un ripostiglio, mentre ad
est vedi una cucina.
Vediamo in dettaglio cosa abbiamo scritto. La prima riga, tra parentesi quadre, indica che stiamo definendo le locazioni. La seconda riga é sicuramente la più complessa: Il numero dopo il carattere # é il numero che identifica la locazione, questa é la locazione 1; subito dopo viene una descrizione breve seguita da due virgole (quando parleremo di grafica vedremo cosa va tra queste due virgole). Il numero subito dopo indica se la stanza é normalmente illuminata (se vale 0) o se é buia (se vale 1); in questo caso il numero é 0, la stanza é illuminata. I numeri di seguito indicano quali altre locazioni posso raggiungere muovendomi nelle varie direzioni: nord, sud, est, ovest, su, giù (lo zero vuol dire che non si può andare in quella direzione); in questo caso non posso andare a nord o a ovest, ma posso andare a sud, verso la locazione 2, o ad est, verso la locazione 3. Infine le righe che seguono riportano la descrizione "lunga" della locazione.

Con questo la nostra prima locazione é finita, ma noi ne vogliamo altre; aggiungiamo di seguito:

#2,Ripostiglio,,1,1,0,0,0
Sei in un piccolo ripostiglio polveroso. L'unica porta
conduce verso nord, alla camera.
#3,Cucina,,0,0,0,0,1
Sei in una cucina arredata in modo semplice ma
estremamente funzionale. Verso ovest c'é la camera.
Definiamo così altre due locazioni. La locazione 2 é un ripostiglio, una stanza buia (il numero dopo le due virgole é 1), da cui si può andare solo a nord, alla locazione 1 (giustamente). La locazione 3 é una cucina, illuminata, con una sola uscita, ad ovest, sempre verso la locazione 1.

A questo punto salviamo quello che abbiamo fatto con il nome prima.adv, ovviamente nella solita cartella c:\advent\mac. Ritorniamo al prompt di ms-dos e diamo il comando

mactxt prima e godiamoci lo scheletro della nostra prima avventura.


3: Aggiungiamo qualcosa

L'avventura che abbiamo provato é un po' scarna. Si può solo girare fra tre stanze (di cui una buia), e non si può fare niente altro. Usciamo dal gioco, ritorniamo all'editor e riapriamo il nostro file. A questo punto aggiungiamo qualche oggetto:

[Objects]
#1,un libro,1,1
Una copia della Divina Commedia.
#2,un letto,1,0
Un grosso letto sfatto.
#3,una penna,-1,1
Una penna stilografica. Purtroppo l'inchiostro é finito.
#4,una torcia spenta,3,1
Una torcia elettrica, spenta.
#5,una torcia accesa,0,5,4
Una torcia elettrica, accesa.
#6,un pulsante,2,0
Un grosso pulsante rosso sulla parete.

[Nouns]
#1,LIBRO,VOLUME,DIVINA,COMMEDIA
#2,LETTO
#3,PENNA,STILO,STILOGRAFICA
#4,TORCIA,LAMPADA
#6,PULSANTE,TASTO
Notiamo subito che la prima riga, tra parentesi quadre, indica che stiamo definendo gli oggetti dell'avventura; vediamoli con ordine. La prima riga di ogni oggetto infatti contiene il numero dell'oggetto (dopo il carattere #), una descrizione "breve" (quella usata normalmente) e due numeri: il primo indica la locazione dove si trova quest'oggetto all'inizio dell'avventura, mentre il secondo indica di che tipo di oggetto si tratta. In particolare quest'ultimo numero vale 1 per gli oggetti trasportabili, e vale 0 per gli oggetti immobili.
La riga o le righe successive contengono la descrizione lunga dell'oggetto, quella che viene mostrata se l'oggetto viene esaminato.
Quindi vediamo che l'oggetto n. 1 é un libro (la Divina Commedia, per la precisione), che all'inizio dell'avventura si trova nella locazione 1 (la camera) e che può essere preso, portato in giro e lasciato. E l'oggetto n. 2 é un letto che si trova in camera e che non può essere normalmente spostato.
L'oggetto n. 3 é una penna stilografica ed é particolare, in quando la sua locazione di partenza é -1; questo vuol dire che all'inizio dell'avventura questo oggetto si trova nell'inventario, in possesso del personaggio.
L'oggetto n. 4 é una normalissima torcia elettrica spenta, che inizia la sua esistenza in cucina (locazione n. 3) ed é trasportabile. Più interessante é l'oggetto n. 5, la torcia elettrica accesa: infatti notiamo subito che la sua locazione di partenza é zero, e questo vuol dire che l'oggetto non esiste all'inizio dell'avventura. Poi notiamo anche che il numero che indica il tipo di oggetto é 5; infatti se un oggetto é una fonte di luce, si aggiunge 4 al tipo (quindi per una fonte di luce trasportabile usiamo 5). Infine notiamo che dopo il tipo c'é un altro numero che il nome con cui viene chiamato questo oggetto; normalmente ogni oggetto viene riferito con il nome corrispondente (l'oggetto n. 3 viene riferito con il nome n. 3), ma in questo caso abbiamo un'omonimia tra la torcia spenta e la torcia accesa e quindi specifichiamo che l'oggetto n. 5 (la torcia accesa) viene riferito con il nome n. 4.
L'ultimo oggetto é un pulsante sulla parete dello sgabuzzino.

Dopo aver definito gli oggetti, definiamo i nomi associati a questi ultimi. Questo serve a far sì che, se giocando l'avventura viene dato il comando PRENDI LA PENNA, il programma capisca che ci si stà riferendo all'oggetto 3.
Quindi dopo la riga [Nouns] troviamo una lista di righe conenenti i vari sinonimi di ogni nome. Notiamo che manca il nome n. 5; questo perché il nome n. 4 vale sia per l'oggetto n. 4 che per l'oggetto n. 5.

A questo punto salviamo di nuovo il nostro file e rilanciamo l'avventura per osservare i nostri progressi


4: Qualcosa di più interattivo

A questo punto dobbiamo rendere un po' più interessante la nostra avventura. Per questo doveremo definirci i nostri verbi, i nostri messaggi, le nostre azioni e i nostri eventi. Andiamo con ordine.
Le definizioni standard definiscono già alcuni verbi (PRENDI, POSA, INDOSSA, etc.), ma a noi ne serve qualcun altro e quindi dobbiamo definirceli da soli. Apriamo il nostro file e aggiungiamo in fondo:

[Verbs]
#31,SPOSTA,MUOVI,TIRA
#32,PREMI,PIGIA,SPINGI
#33,ACCENDI
#34,SPENGI,SPEGNI
Tutte le parole sulla stessa riga sono considerate sinonimi. Abbiamo usato numeri "alti" (da 30 in su) per non confonderci con i verbi definiti nelle definizioni standard.
Abbiamo anche bisogno che il programma ogni tanto ci dia qualche risposta, qualche "messaggio". Definiamoli: [Messages]
#1,Sotto il letto non trovi nulla di interessante.
#2,Al buio? Non é facile...
#3,Come premi il pulsante senti il rumore.
di un macchinario che si mette in moto.
#4,Il rumore si fa sempre più forte.
#5,Il rumore del macchinario cessa di colpo.
#6,Complimenti, hai vinto.
#7,All'improvviso tutto intorno a te esplode. Muori sepolto dalle macerie.
Definiamo anche un paio di variabili, che ci serviranno per dopo: [Vars]
machine,timer
Adesso vogliamo che il programma reagisca al comando SPOSTA IL LETTO dicendo che non viene trovato nulla di interessante. Aggiungiamo di seguito: [Actions]
if verb SPOSTA noun LETTO present 2
then message 1
Ora il programma sa che se diamo un comando costituito dal verbo n. 31 (SPOSTA) e dal nome n. 2 (LETTO), mentre l'oggetto n. 2 si trova nella locazione corrente (quella dove si trova il personaggio), allora deve mostrare il messaggio n. 1.
Abbiamo una torcia spenta e una torcia accesa da gestire. Possiamo farlo aggiungendo queste righe: if verb ACCENDI noun TORCIA carried 4
then swap 4 5 sysmsg 10
if verb SPENGI noun TORCIA carried 5
then swap 5 4 sysmsg 10
Il programma ora reagirà al comando ACCENDI LA TORCIA, se la torcia spenta si trova nell'inventario, scambiando tra loro la torcia accesa e la torcia spenta (quindi la torcia spenta diventerà non esistente, mentre la torcia accesa verrà messa nell'inventario) e mostrando il messaggio di sistema n. 10 (OK!). La stessa cosa viene fatta se il comando é SPENGI LA TORCIA, ed é la torcia accesa a trovarsi nell'inventario.

Per ora basta così. Salviamo e rilanciamo il programma. Ora possiamo esplorare lo sgabuzzino.


5: Un po' più complicato

Per complicarci un po' la vita cerchiamo di ricreare questa situazione: se premo il pulsante nello sgabuzzino si accende un macchinario nascosto. Se ripremo il pulsante fermo tutto e, se il macchinario é andato per almeno 4 turni, l'avventura si conclude nel migliore dei modi. Altrimenti se lascio il macchinario acceso per 7 turni esplode tutto. Inoltre dopo che il macchinario é acceso da 3 o 5 turni viene mostrato un messaggio di avviso, e per di più non posso premere il pulsante al buio.
Vediamo come fare. Aggiungiamo in fondo al nostro file, sempre nella sezione [Actions]:

if verb PREMI noun PULSANTE present 6 dark 0
then message 2
if verb PREMI noun PULSANTE present 6 eq machine 0
then set timer 0 set machine 1 message 3
if verb PREMI noun PULSANTE present 6 gt machine 0 gt timer 3
then message 5 message 6 quit
if verb PREMI noun PULSANTE present 6 gt machine 0
then message 5 set machine 0
Tutte le azioni definite qui valgono solo se il comando é PREMI IL PULSANTE e l'oggetto n. 6 (il pulsante, appunto) é presente. Entrano inoltre in funzione le due variabili che abbiamo definito prima: machine vale 1 se il macchinario é in funzione, e zero altrimenti, mentre timer conta il numero di turni in cui il macchinario é rimasto in funzione.
Quindi se la locazione corrente é buia otteniamo solo il messaggio n. 2. Altrimenti se il macchinario é spento (se machine vale zero), allora viene azionato (assegnando il valore 1 alla variabile machine), azzero il timer e viene mostrato il messaggio n. 3.
Se invece il macchinario era già in funzione da almeno 4 turni (ovvero se timer é maggiore di 3), otteniamo i messaggi n. 5 e n. 6 e concludiamo così l'avventura. E se il macchinario era in funzione, ma da meno di quattro turni, viene fermato.

A questo punto dobbiamo gestire opportunamente il timer, e questo viene fatto usando la gestione degli eventi. Aggiungiamo:

[Events]
if gt machine 0
then add timer 1
if gt machine 0 eq timer 3
or gt machine 0 eq timer 5
then message 4
if gt machine 0 eq timer 7
then message 7 quit
In questo modo in tutti i turni in cui il macchinario é attivato, il programma incrementerà la variabile timer. Inoltre se il macchinario é attivato e timer vale 3 o vale 5, allora mostra il messaggio 4, e infine se il macchinario é attivato e timer vale 7, mostra il messaggio 7 e conclude (disastrosamente) l'avventura.

Finalmente la nostra piccola e insensata avventura ha una forma definitiva. Salviamo il file e proviamola.


5: Aggiungiamo la grafica

A questo punto vogliamo aggiungere le immagini grafiche alla nostra piccola avventura. Qualsiasi programma di grafica o per fotoritocco abbastanza potente può andare bene, l'importante é che possa salvare in formato .png (portable network graphic); quindi Paint di windows non va bene: non ha strumenti sufficienti per fare alcunché e salva solo in formato .bmp.
Creiamo anzitutto una cartella all'interno di c:\advent\mac, chiamandola (ad esempio) primaimg. In questa cartella salveremo le nostre immagini. Poi realizziamo le immagini che rappresentano la camera, la cucina, il ripostiglio e una stanza buia. Queste immagini dovranno avere una dimensione di 384 x 256 pixel, e possono essere in RGB (16 milioni di colori), con tavolozza fino a 256 colori (254, per essere precisi), in bianco e nero, o in scala di grigi. Salviamo queste immagini (ovviamente nella cartella c:\advent\mac\primaimg) in formato .png, chiamandole camera.png, cucina.pgn, ripost.png e buio.png (i primi tre nomi sono solo esempi, mentre buio.png é obbligatorio, essendo nelle definizioni standard).

A questo punto riapriamo il file della nostra avventura e apportiamo qualche modifica. Anzitutto andiamo all'inizio del file, e nella sezione [System] aggiungiamo la riga:

ImagePath=primaimg in modo che il programma sappia dove cercare le immagini. Poi modifichiamo qualche riga nella sezione [Locations] in questo modo: #1,Camera,camera.png,0,0,2,3,0

#2,Ripostiglio,ripost.png,1,1,0,0,0

#3,Cucina,cucina.png,0,0,0,0,1
Ovvero mettiamo il nome del file grafico fra quelle famose due virgole consecutive.

Salviamo e proviamo il tutto. Ora abbiamo anche la grafica quindi diamo il comando

mac prima o (se vogliamo la versione nativa windows) il comando winmac prima e beiamoci della vista del nostro capolavoro.


6: Come distribuire un'avventura

Se vogliamo distribuire un'avventura, non vogliamo che chiunque possa mettere le mani dentro il nostro file prima.adv e "rubare" la soluzione di tutti i nostri enigmi. Però se torniamo al nostro prompt di ms-dos e diamo questo comando:

mac -c prima apparentemente non succede nulla, ma in realtà il programma ha trasformato (lasciando intatto l'originale) il file prima.adv nel file prima.mac. Questo file é un file binario compresso corrispondente all'originale, ma é sensibilmente più piccolo e non può essere letto (per lo meno non facilmente). Per provarlo diamo il comando mac -b prima Se il gioco parte la conversione é andata a buon fine.

Inoltre noi non vogliamo che il giocatore debba dare comandi complessi per giocare con la nostra avventura. Quindi facciamo questa operazione: facciamo una copia del programma mac.exe (o winmac.exe per una versione windows, o mactxt.exe per un'avventura solo testo) e chiamiamo questa copia con lo stesso nome del nostro file, mantenendo però l'estensione .exe. Nel nostro caso, ad esempio, la chiameremo prima.exe. Possiamo fare questa operazione tramite windows, oppure più velocemente tramite prompt di ms-dos, dando il comando:

copy mac.exe prima.exe Proviamo ora a dare il comando prima o semplicemente ad aprire la cartella c:\advent\mac e a fare doppio click su prima.exe.

A questo punto possiamo distribuire la nostra avventura. Prepariamo un file prima.zip (usando ad esempio WinZip) contenente prima.exe, prima.mac e la cartella che contiene le nostre immagini in formato .png, e il gioco é fatto.


7: Conclusioni

Queste brevi note volevano solo aiutare il principiante ad iniziare. Molti argomenti non sono stati nemmeno nominati, come ad esempio i blocchi o i cicli while, e la maggior parte delle condizioni e dei comandi non sono stati spiegati. Però ritengo che, una volta che si é presa una certa familiarità con M.A.C., la consultazione del manuale (o del file riassuntivo sintassi.txt) diventi agevole e preziosa.

Non mi resta che augurare a tutti gli sviluppatori di avventure che hanno scelto il piccolo, umile M.A.C. buon lavoro e buon divertimento.