Guida rapida · v1.0.0

La sintassi, in una panoramica.

La filosofia è una sola: il tuo codice è una storia. Scrivi frasi in italiano, ognuna chiusa da un punto . ; i commenti iniziano con #.

Per la trattazione organica di tutti i costrutti c'è il Manuale di Programmazione completo — 84 pagine, 21 capitoli, in PDF su GitHub.

Installare e avviare FAVELLA1. Il mondo: stanze e oggetti2. Proprietà e stato3. Le regole: «Invece di»4. Conseguenze dinamiche: «e adesso»5. Reazioni autonome: i «demoni»6. Personaggi e dialoghiDomande frequenti
§

Installare e avviare FAVELLA

Per scrivere una storia hai tre strade, dalla più immediata alla più completa.

Nel browser, subito. La pagina «Programma» di questo sito è il motore vero di FAVELLA, che gira nel tuo browser: scrivi a sinistra, premi «Compila e gioca», provi a destra. Non devi installare niente, e la storia te la porti via come file .fav.

Sul tuo computer, con l'installer. Dalle Release su GitHub scarichi l'installer per il tuo sistema — .exe per Windows, .dmg per macOS, .AppImage per Linux. Ti dà un unico comando, favella1:

  • favella1 gioca storia.fav — avvia l'avventura nel terminale.
  • favella1 compila storia.fav — controlla la storia e ne segnala errori e avvisi.
  • favella1 playground — apre un editor col motore, in locale e senza rete.
  • favella1 esporta storia.fav — crea una pagina HTML autoportante da condividere.

Il codice aperto. Se vuoi il motore Python — per studiarlo, estenderlo o usarlo come libreria — il repository è pubblico su GitHub.


01

Il mondo: stanze e oggetti

Una stanza è un luogo; una cosa è un oggetto con cui interagire.

La Grotta di Cristallo è una stanza.
La descrizione della grotta è "Stalattiti luminose pendono dal soffitto.".

Una spada antica è una cosa.
La spada antica è nella grotta.
La spada antica è prendibile.

Collegare le stanze

FAVELLA crea da sé il collegamento di ritorno.

La grotta collega nord a la Sala del Trono.

02

Proprietà e stato

Una proprietà è un aggettivo di stato; le proprietà opposte si escludono.

La porta di ferro è chiusa.
Accesa e spenta sono opposte.

Per la logica più ricca ci sono stati e contatori:

Il semaforo è uno stato.
Il punteggio è un contatore.
La forza è un contatore.
La forza parte da 3.

03

Le regole: «Invece di»

Una regola intercetta un'azione del giocatore e la sostituisce. Il verbo va all'imperativo, come lo digiterebbe il giocatore (apri, non aprire).

Invece di prendi la statua: dire "È troppo pesante.".

Regole condizionali

Si attivano solo se la condizione è vera (e hanno priorità sulle semplici):

Invece di apri la porta di ferro se il giocatore ha la chiave: dire "La porta si apre!".

Le condizioni si combinano con e / oppure / non e le parentesi:

Invece di esci se non ( il giocatore ha la chiave e la torcia è accesa ): dire "Ti manca qualcosa.".

04

Conseguenze dinamiche: «e adesso»

Una regola può cambiare il mondo aggiungendo e adesso …:

Invece di usa la chiave su la porta: dire "Click!" e adesso la porta è aperta.

Tra le conseguenze: spostare un oggetto (e adesso la chiave è in inventario), mutare uno stato o un contatore (e adesso aumenta il punteggio di 5), teletrasportare il giocatore (e adesso il giocatore è in la Sala del Trono) e chiudere la partita con un testo (e adesso vinci "Sei libero!").


05

Reazioni autonome: i «demoni»

Sentinelle che sorvegliano il mondo a ogni turno e scattano da sole:

La tensione è un contatore.
Ogni 1 turno: dire "La tensione cresce." e adesso aumenta la tensione.
Quando la tensione è almeno 8: dire "Il portale ti risucchia." e adesso perdi.

06

Personaggi e dialoghi

L'Anziano è un personaggio.
Il dialogo dell'Anziano comincia con "saluto".
L'Anziano al nodo "saluto" dice "Sei tu, finalmente.".
Al nodo "saluto" l'opzione "Chi sei?" conduce al nodo "verità".
Al nodo "saluto" l'opzione "Addio." chiude il dialogo.

?

Domande frequenti (FAQ)

*Domande raccolte da chi sta davvero scrivendo storie con FAVELLA. Riferite alla v1.0.0 (la grammatica è la stessa dalla 0.34.0).*

Posso far comparire un messaggio quando voglio, senza legarlo a un comando del giocatore?

Sì. FAVELLA ha tre modi per mostrare testo durante il gioco senza agganciarlo a un verbo o a un oggetto:

Al turno 3: dire "Qualcuno ti osserva da lontano.".
Ogni 5 turni: dire "Da qualche parte un orologio batte le ore.".
Quando lo smascheramento è sì diventa vera: dire "Adesso sei tu la talpa!".

Il primo scatta a un turno preciso, il secondo a intervalli regolari, il terzo quando si avvera una condizione che decidi tu (basta accendere uno stato).

Uno stato può prendere il valore di un altro stato?

Sì, dalla v0.34.0. Uno stato può copiare il valore corrente di un altro stato, ed essere confrontato con un altro stato — utile per impersonare un personaggio o ricordare una scelta:

e adesso il corteggiato diventa il preferito.
Invece di esamina lo specchio se il corteggiato è come il preferito: dire "Sono la stessa persona.".

La copia usa diventa; il confronto usa il marcatore è come (se X è come Y), per non confonderlo con è + un valore scritto a mano (se il corteggiato è anna resta il confronto con la *parola* «anna»). Vale solo fra stati: per copiare/confrontare due contatori usa il valore fra parentesi (il punteggio diventa [bonus], se la vita è [soglia]). Mescolare uno stato e un contatore è segnalato come errore.

Lo stato è una «variabile», come negli altri linguaggi?

Sì, e ne esistono due tipi. Lo stato è una variabile *simbolica*: contiene un valore di una sola parola, confrontabile solo per uguaglianza (come un'etichetta o un enum). Il contatore è la variabile *numerica*: ci fai aritmetica (aumenta, diminuisci, … diventa 5) e confronti d'ordine (almeno, più di, meno di, al massimo).

Ricevo «Entità sconosciuta» su una riga che mi sembra corretta. Perché?

Quasi sempre l'errore vero è nella riga precedente: una descrizione con il punto messo *dentro* le virgolette. Scrivi "…testo". (punto fuori), non "…testo.". Il punto interno viene rimosso insieme al testo, la frase si fonde con quella successiva e quest'ultima «sparisce», facendo scattare l'errore più in basso.

I nomi degli stati vanno messi tra virgolette?

No. Le virgolette "…" servono solo ai testi mostrati al giocatore (descrizioni, dialoghi). Un nome di stato si scrive nudo: Il nome di Backy è uno stato. — non Il "nome di Backy" è uno stato.

Che valori può avere uno stato?

Una sola parola, senza spazi né /. Quindi Nord Italia diventa NordItalia (oppure settentrionale), e non tatuato diventa nontatuato. Se ti serve un numero, usa un contatore.

Come faccio un combattimento a turni, con un nemico che attacca da solo?

Modella il combattimento come presenza nella stanza: il nemico ha un contatore di vita, e un demone lo fa colpire a ogni turno finché è vivo e tu sei lì. Tu attacchi con un verbo tuo.

La vita del troll è un contatore.
La vita del troll parte da 6.
La forza è un contatore.
La forza parte da 2.
"attacca" è un comando.
Invece di attacca il troll: dire "Lo colpisci!" e adesso diminuisci la vita del troll di [forza].
Ogni turno se il giocatore è in la cripta e la vita del troll è più di 0: dire "Il troll ti colpisce!" e adesso diminuisci la vita di 2.
Quando la vita del troll è al massimo 0: dire "Il troll crolla!" e adesso aumenta l'esperienza di 10.

Due accorgimenti: usa al massimo 0 (non è 0) per la morte, così regge anche se l'ultimo colpo «sfonda» lo zero; e ricorda che fuggire dalla stanza ti sottrae ai colpi. Lo vedi all'opera nella demo «La Cripta del Lich» su GitHub.

Il danno può variare a caso, o dipendere dalla forza del personaggio?

Sì, dalla v0.31.0. Una quantità (di …) può essere un numero scritto a mano, il valore di un contatore fra parentesi quadre, oppure un'estrazione casuale:

Invece di attacca il drago: dire "Colpisci!" e adesso diminuisci la vita del drago di [forza].
Invece di incanta il drago: dire "Magia!" e adesso diminuisci la vita del drago di un numero fra 2 e 6.

Le parentesi [forza] significano «il valore di questo contatore» — proprio come quando interpoli [forza] dentro un testo. Così il danno scala con la statistica (sali di livello → colpisci più forte) e i dadi sono finalmente possibili. L'estrazione casuale è riproducibile e ANNULLA la riavvolge.

Posso confrontare due contatori fra loro? (es. «se la mia vita è meno di quella del nemico»)

Sì, dalla v0.31.0. Il termine di confronto, oltre a un numero, può essere un altro contatore fra parentesi quadre:

Quando la vita del troll è meno di [vita] diventa vera: dire "Il troll esita: è più malconcio di te.".
Ogni turno se l'oro è almeno [prezzo]: dire "Te lo puoi permettere.".

Il confronto è dinamico: se la cella di destra cambia, cambia anche il risultato. Abilita soglie *relative* (gelosie, difficoltà che si adatta) senza batterie di regole a numero fisso.

Come gestisco una scorta (3 pozioni, le munizioni, le razioni…)?

Con un contatore. FAVELLA non ha oggetti «in molteplicità» (e non li avrà: i plurali e la concordanza automatica la trasformerebbero in un linguaggio di programmazione, contro lo spirito del progetto). Una scorta è semplicemente un numero che cala quando consumi:

Le pozioni sono un contatore.
Le pozioni partono da 3.
"bevi" è un comando.
Invece di bevi se le pozioni è almeno 1: dire "Bevi una pozione. (Ne restano [pozioni].)" e adesso aumenta la salute di 5 e adesso diminuisci le pozioni.
Invece di bevi se le pozioni è 0: dire "Non hai più pozioni.".

Il testo della scorta lo scrivi tu ([pozioni] interpola la quantità): così resta in italiano corretto, senza pluralizzazioni inventate dal motore.

Posso far cambiare il meteo (o un altro stato) a caso?

Sì, dalla v0.32.0. Oltre a dare a uno stato un valore fisso, puoi farglielo pescare a caso da un elenco:

Il meteo è uno stato.
Il meteo è sereno.
Ogni 3 turni: il meteo diventa uno fra sereno, pioggia, nebbia.

A ogni scatto il meteo diventa *uno fra* i valori elencati, scelto a sorte. È la casualità *simbolica* (valori di stato), gemella dell'estrazione *numerica* un numero fra 2 e 6 dei contatori. Come per quella, la scelta è riproducibile e ANNULLA la riavvolge.

Posso far succedere qualcosa solo «ogni tanto», con una probabilità?

Sì, dalla v0.32.0, con la condizione càpita (N su M) — vera *N volte su M*:

Ogni turno se càpita (1 su 4): dire "Un'auto sbuca dal nulla!" e adesso diminuisci la salute di 1.
Invece di scava se càpita (1 su 3): dire "Hai trovato una moneta!" e adesso aumenta l'oro.

1 su 4 scatta circa una volta ogni quattro; 3 su 3 sempre, 0 su 5 mai. Si combina con e/oppure/non come ogni altra condizione, e si usa in regole, demoni e dialoghi. Anche qui la pesca è seedata e ANNULLA la riavvolge: un imprevisto disfatto si ripresenta identico. È ciò che rende un simulatore (guida, sopravvivenza, GDR) davvero *rigiocabile*.

Posso far scendere la notte e spegnere la luce delle stanze?

Sì, dalla v0.33.0. Oltre al buio dichiarato all'avvio (La grotta è buia. + un oggetto che illumina), ora puoi commutarlo in scena: una stanza diventa buia o si rischiara a metà partita.

Al turno 5: dire "Cala la notte." e adesso la cantina diventa buia.
Quando l'alba arriva diventa vera: dire "Sorge il sole." e adesso la cantina diventa illuminata.

diventa buia spegne la luce (senza una torcia accesa, «È buio pesto.»); diventa illuminata (o chiara) la riaccende. È stato del mondo, quindi ANNULLA lo riavvolge. *Nota:* per uno spazio all'aperto la notte spesso non è buio pesto (ci sono le stelle, e vuoi mostrare le uscite): lì conviene ancora uno stato momento con descrizioni condizionali. Usa il buio commutabile quando la luce deve davvero mancare (una cantina, una torcia che si spegne).

La battuta di un personaggio può cambiare in base a quello che è successo?

Sì, dalla v0.33.0. Come le descrizioni, anche la battuta di un nodo di dialogo ammette varianti se: vince la prima la cui condizione è vera, e quella senza se fa da ripiego.

Anna al nodo "incontro" dice "Sei tornato, finalmente." se l'affinità di Anna è almeno 4.
Anna al nodo "incontro" dice "Oh. Ciao.".

Prima dovevi sdoppiare l'*opzione* (due righe con la stessa etichetta); ora puoi far variare direttamente ciò che il personaggio *dice*, senza toccare le scelte del giocatore.

Il gioco si chiude di colpo con un errore su un «carattere» (codec/charmap). Perché?

Capita su Windows se in un testo mostrato al giocatore metti un carattere «fantasia» fuori dal set occidentale standard — per esempio , , certe frecce o emoji. La console di Windows non riesce a stamparlo e la partita si interrompe. Soluzione: nelle stringhe usa lettere accentate, «», trattini (questi vanno bene) ed evita simboli decorativi esotici; in alternativa >>, ===, *. (Nei commenti # puoi scrivere qualsiasi cosa: non vengono mai stampati.)

Come do un nome a una direzione? «"sinistra" è come est.» non funziona.

è come serve per i verbi ("ghermisci" è come prendi.), non per le direzioni: con una direzione dà solo un avviso e non fa nulla. Per le direzioni l'idioma — più pulito — è dichiarare una coppia di opposte, che il motore tiene in coppia (andata e ritorno automatici):

Sinistra e destra sono direzioni opposte.
La piazza collega sinistra al vicolo.

Da quel momento il giocatore può digitare sinistra per muoversi, e destra lo riporta indietro.

Una regola «Invece di» deve sempre «dire» qualcosa?

No (dalla v0.30.0). Se una regola cambia solo lo stato del mondo, puoi omettere il testo, esattamente come per eventi e demoni:

Invece di riposa: aumenta le forze di 2.

Niente riga vuota a schermo: il gesto agisce in silenzio. Se invece vuoi una risposta, la metti come prima: … : dire "Ti riposi." e adesso aumenta le forze di 2..

Ho usato un carattere strano in un nome (es. «doppio/gioco») e il compilatore protesta. Cosa posso usare?

Nei nomi (di stanze, oggetti, stati, contatori) puoi usare solo lettere — anche accentate — cifre, spazi e l'apostrofo. Caratteri come /, -, % non sono ammessi: dalla v0.30.0 il compilatore te lo dice con un messaggio chiaro, riga e colonna del carattere incriminato (prima dava un errore interno oscuro). Scrivi doppiogioco o doppio gioco.


Questa è solo la punta dell'iceberg. Il Manuale di Programmazione completo (84 pagine, 21 capitoli, in PDF) tratta ogni costrutto nel dettaglio; codice, specifica della grammatica e la demo «Il Relitto Silente» sono tutti pubblici su GitHub.

Vai più a fondo.

Il Manuale di Programmazione completo — 84 pagine, 21 capitoli — tratta ogni costrutto nel dettaglio, con la Casa di Via Stradivari come esempio dall'inizio alla fine.

Privacy in breve: questo sito non usa cookie di profilazione e non ti traccia. I font sono ospitati da noi (nessuna chiamata a Google) e nessun dato viene condiviso a fini di marketing. Dettagli nella Privacy e nella informativa sui cookie.