From Hell n. 3 |
African Escape - 1982
|
A scopo didattico e divulgativo pubblichiamo il sorgente in Inform.
Questa versione è perfettamente giocabile e contiene tutti gli
elementi del gioco.
!===============================================================================
! Header
Constant Story "African Escape";
Constant Headline
"^Versione originale di Bruce Robinson, (c) 1982
^
^Portato in Inform per il progetto From Hell da Ignazio Di Napoli
<neclepsio@@64hotmail.com>, (c) 2003^^";
Constant MAX_CARRIED 100;
Constant DEATH_MENTION_UNDO true;
Constant MAX_SCORE 10;
Include "Parser";
!===============================================================================
! Messaggi di libreria personalizzati
Object LibraryMessages
with before [;
Miscellany:
if (lm_n == 17)
"È buio e la luce della luna è troppo debole per permetterti di
vedere qualcosa.";
if (lm_n == 19)
"Sei bellissimo, come al solito. Qualunque ragazza cadrebbe ai
tuoi piedi, specie con quel cappello alla Indiana Jones sulla
testa.";
];
!===============================================================================
! Header (continuazione)
Include "VerbLib";
Include "Replace";
Release 1;
Serial "040110";
!===============================================================================
! Classi
Class Room
has light;
Class DarkRoom;
!===============================================================================
! Globali
Global UsaDemoni;
Global SolVista;
!===============================================================================
! Oggetti già nell'inventario
Object coltello "coltello"
with description "Un coltello con la lama seghettata.",
name 'coltello',
before [;
Drop:
"Meglio di no: potrebbe servirti.";
];
Object cibo "cibo"
with description "La tua razione di cibo. Carne in scatola.",
name 'cibo' 'razione' 'carne',
before [;
Eat:
"Non hai fame ora: meglio conservare il cibo per dopo.";
Drop:
"Meglio di no: potrebbe servirti.";
];
!===============================================================================
! Introduzione
Constant Intro "Eravate partiti in due: tu e Dan. Sarebbe dovuto essere un
mese
da sogno, un safari indimenticabile. Dan ti ha svegliato:^
- Droopy è sparito, e con lui i soldi, le armi e le provviste. Lo
inseguo!^
È andato.^
Non ti è mai piaciuto Droopy, da quando te lo avevavo presentato
come la migliore guida della zona. Aveva qualcosa che non ti convinceva.
Avevi ragione.^^";
DarkRoom tenda "La vostra tenda"
with description "Sei nella tenda. Non c'è nulla di importante oltre le tre
brande, il tavolo ed il
baule vuoto. Fuori, la foresta.",
out_to [;
if (self.notte)
if (lampada notin player)
"Non uscirai al buio senza lampada.";
else
PlayerTo(foresta1);
else
PlayerTo(foresta2);
rtrue;
],
notte true;
Object brande "brande" tenda
with description "Tre brande molto basse e molto scomode. Hai dormito su una di
queste per quasi un mese.",
name 'brande' 'branda' 'letto' 'letti'
has scenery concealed;
Object tavolo "tavolo" tenda
with description "Un normale tavolo da accampamento, ripegabile. Non c'è nulla
su di esso.",
name 'tavolo' 'tavola' 'tavolino',
before [;
Open:
"È già aperto.";
Close:
"Non vedo perchè dovresti chiuderlo.";
]
has scenery concealed;
Object baule "baule" tenda
with description [;
print "È il baule che usate per mettere i fucili e le provviste. ";
if (self has open)
"È aperto e vuoto.";
else
"È chiuso.";
],
name 'baule' 'scatola' 'scatolo'
has scenery concealed openable;
Object tenda_oo "" tenda
with name 'tenda',
description [;<<Look>>;]
has scenery concealed;
Object lampada "lampada" tenda
with description "Una semplice lampada ad olio.",
name 'lampada',
before [;
SwitchOn:
if (self has light)
"È già accesa.";
give self light;
"Hai acceso la lampada.";
SwitchOff:
if (self hasnt light)
"È già spenta.";
give self ~light;
"Hai spento la lampada.";
]
has female light;
DarkRoom foresta1 "Foresta"
with description "La foresta si estende in tutte le direzioni. Non riesci a
distinguere le tracce di Droopy e Dan. Dietro le tue spalle c'è la tenda.",
n_to [;
if (lampada in self or player)
"Non è sicuro avventurarsi di notte nella foresta con la sola luce di
una lampada e senza sapere dove andare.";
"È troppo buio.";
],
nw_to [;PrintOrRun (self, n_to); rtrue;],
w_to [;PrintOrRun (self, n_to); rtrue;],
sw_to [;PrintOrRun (self, n_to); rtrue;],
s_to [;PrintOrRun (self, n_to); rtrue;],
se_to [;PrintOrRun (self, n_to); rtrue;],
e_to [;PrintOrRun (self, n_to); rtrue;],
ne_to [;PrintOrRun (self, n_to); rtrue;],
in_to [;
if (tenda hasnt light) {
print "Decidi di tornare dentro, senza sapere assolutamente cosa fare.
Improvvisamente
senti un dolore fortissimo dietro la nuca e cadi per terra, perdendo
conoscenza.^^
Sogni... Cristina... I suoi capelli...^^
Ti risvegli poche ore dopo. Porti la mano dietro la nuca, ancora indolenzita, e
massaggiandola cerchi di capire cosa sia successo: ti ricordi di Droopy, di
Dan...
Probabilmente è Droopy che ti ha colpito... Cominci a preoccuparti di Dan: devi
trovarlo adesso.^";
tenda.notte = false;
give lampada ~light;
give tenda light;
}
PlayerTo(tenda);
rtrue;
];
Object foresta1_oo "" foresta1
with name 'foresta',
description [;<<Look>>;]
has scenery concealed;
Object tenda_o "tenda"
with before [;
Enter:
PrintOrRun (foresta1, in_to);
rtrue;
],
found_in foresta1 foresta2,
name 'tenda'
has scenery concealed;
Object alberi "alberi"
with description "Decine di alberi altissimi e secolari.",
name 'alberi' 'albero' 'vegetazione' 'pianta' 'piante',
found_in foresta1 foresta2
has scenery pluralname;
Object tracce "tracce"
with description "Non ci sono tracce. È questo il problema.",
name 'tracce' 'orme' 'orma' 'traccia',
found_in foresta1 foresta2
has scenery pluralname female;
Room foresta2 "Foresta"
with description "La foresta si estende in tutte le direzioni. Non riesci a
distinguere le tracce di Droopy e Dan. Puoi vedere il
vostro aereo. Dietro le tue spalle c'è la tenda.",
in_to tenda,
n_to [;
print "Ti avventuri nella foresta alla ricerca di Dan. Improvvisamente
vedi la sua testa, conficcata in un palo. Maledetti cannibali.
Scappi. Una corsa disperata nella foresta. Finché un leone
ti para davanti. Maestoso, possente. Ha la testa enorme. Non hai
il tuo fucile: maledetto Droopy. Gli lanci la lampada contro,
lo ferisci col coltello, poi corri più veloce che puoi.
Sai che non puoi essere più veloce del leone... E invece lo sei:
evidentemente il tuo coltello l'ha ferito seriamente.^
Torni all'accampamento, sali sull'aereo e parti, mentre il leone
ti guarda da fuori. Appena in tempo.^
Tra poche ore sarai all'aeroporto.^";
remove lampada;
PlayerTo(aereo_l);
rtrue;
],
nw_to [;PrintOrRun (self, n_to); rtrue;],
w_to [;PrintOrRun (self, n_to); rtrue;],
sw_to [;PrintOrRun (self, n_to); rtrue;],
s_to [;PrintOrRun (self, n_to); rtrue;],
se_to [;PrintOrRun (self, n_to); rtrue;],
e_to [;PrintOrRun (self, n_to); rtrue;],
ne_to [;PrintOrRun (self, n_to); rtrue;];
Object foresta2_oo "" foresta2
with name 'foresta',
description [;<<Look>>;]
has scenery concealed;
Object aereo_o "aereo" foresta2
with description "Il vostro aereo. Avrebbe bisogno di una messa a punto
prima di ripartire.",
name 'aereo' 'areoplano' 'aeroplano',
before [;
Fix:
"Non ne sei in grado.";
Go, Enter, Climb:
"Non senza Dan...";
]
has scenery;
Room aereo_l "Nell'aereo"
with description [;
if (self hasnt visited && UsaDemoni == true)
StartDaemon(self);
if (self hasnt visited)
"L'aereo. Dan avrebbe dovuto mettere a posto il motore, che non
andava troppo bene. Tu non avevi idea di dove mettere mani. Preghi
soltanto che regga fino all'aeroporto. Se ci fosse stato Dan, sarebbe
stato ben diverso. Maledetto Droopy. Improvvisamente senti uno
scossone, poi vedi del fumo dal motore. Cerchi di controllare
l'aereo, ma è un'impresa inutile.";
"Sei nell'aereo e stai precipitando.";
],
before [;
Jump, Exit:
if (paracadute notin player) {
if (UsaDemoni) {
deadflag = 1;
"Salti nel vuoto. Ti sfracelli al suolo: perché non hai usato il
paracadute che era nell'aereo?";
} else
"Saltare senza paracadute?!";
}
print "Indossato il paracadute, ti lanci nel vuoto. Atterri pochi
interminabili istanti dopo, nel deserto. Il rottame del tuo
aereo, in fiamme, giace a poche decine di metri da te. È
impensabile recuperare qualcos'altro.^
Ti chiedi come farai a tornare a casa adesso. Hai paura dei
cannibali e dei leoni. Il sole picchia. Hai caldo e sete.
Devi trovare un modo per tornare a casa.^";
StopDaemon (self);
SolVista = 0;
PlayerTo (deserto);
remove paracadute;
rtrue;
],
high 5250,
daemon [;
self.high = self.high - 250;
if (self.high == 0) {
deadflag = 1;
"L'aereo si schianta al suolo. L'impatto è tremendo: muori sul colpo.
Chissà perché non sei saltato giù col paracadute...";
}
];
Object aereo_oo "" aereo_l
with name 'aereo' 'aereoplano' 'areoplano' 'aeroplano',
description [;<<Look>>;]
has scenery concealed;
Object strumentazione "strumentazione" aereo_l
with description [;
print "L'altimetro segna ";
print aereo_l.high;
" piedi.";
],
name 'strumentazione' 'altimetro'
has proper female static;
Object paracadute "paracadute" aereo_l
with description "Un normale paracadute.",
name 'paracadute'
has clothing;
!===============================================================================
! Gioco originale
!===============================================================================
! Deserto
Room Deserto "Deserto"
with description [;
if (self hasnt visited && UsaDemoni == true)
StartDaemon(self);
print "Sei nel deserto. Puoi vedere il rottame del tuo
aereo. Non lontano, il tuo paracadute. Devi trovare
un modo per tornare a casa.^";
if (oasi_o in self)
print "^In lontananza puoi scorgere un'oasi.";
else
print "Fa caldo. Hai sete. Hai la vista annebbiata.^";
],
e_to Deserto,
n_to Deserto,
s_to Deserto,
nw_to Deserto,
sw_to Deserto,
ne_to Deserto,
se_to Deserto,
w_to Deserto,
sete 10,
daemon [;
if (player in self)
self.sete--;
switch (self.sete) {
9: "Hai sete.";
7: "Hai molta sete.";
5: "Hai moltissima sete.";
3: "Sei gravemente disidratato.";
1: "Stai per morire di sete.";
0: deadflag = 1;
"Hai vagato nel deserto per ore senza risolvere nulla. Il sole
picchiava forte sulla tua testa, sudavi molto e la sete cresceva
sempre più. Quella che era sete si è lentamente trasformata in
disidratazione, finché non hai sentito le forze venire lentamente
meno. Ti accasci sulla sabbia. Con l'ultimo filo d'aria maledici
ancora quella guida, poi la tua testa cade indietro. I tuoi
ultimi pensieri, però, sono per Cristina.";
}
],
ee false,
before [;
Dig:
if (noun == sabbia or nothing)
if (self.ee == false) {
score++;
self.ee = true;
}
move anello to player;
"Scavi nella sabbia, trovando un anello. Chissà come si trova lì, chissà chi
sta piangendo per averlo perso...";
];
Object anello "anello"
with description "Un anello in oro, con un grande brillante.",
name 'anello' 'brillante' 'diamante';
Object aereo "aereo" Deserto
with name 'aereo' 'rottame' 'rottami' 'aeroplano',
description "Il tuo aereo. In fiamme. Come farai a tornare a casa ora?",
before [;
Go, Enter, Search:
"Non potresti recuperare nulla: rischieresti solo di ustionarti,
o magari peggio.";
Touch:
"Meglio di no: è in fiamme.";
]
has scenery;
Object paracadute2 "paracadute" deserto
with description "Un normale paracadute. Ti ha salvato la vita",
name 'paracadute',
before [;
Take: "Ormai è inservibile.";
]
has clothing scenery;
Object sabbia "sabbia" Deserto
with description "Sabbia. Comunissima, finissima sabbia dappertutto.",
name 'sabbia',
before [;
Take:
"Prendi un po' di sabbia, ma più la stringi più essa ti scivola tra
le dita. Esattamente come Cristina.";
]
has scenery;
Object Cactus "cactus" Deserto
with description "Dei comunissimi cactus.",
name 'cactus',
before [;
Cut:
if (Deserto.sete > 10)
"Non hai più sete.";
Deserto.sete = 20;
print "Tagli un cactus con il coltello e bevi l'acqua contenuta in
esso.";
if (oasi_o notin deserto) {
move oasi_o to Deserto;
score++;
if (SolVista < 1)
SolVista = 1;
! [OR] aha! water. now i can see straight.
"^^[OR] Finalmente la vista ti si schiarisce. Puoi scorgere un'oasi
in lontantanza.";
}
"";
Touch: "Perché? Vuoi pungerti?";
Eat: "Mangiare il cactus? Non hai così tanta fame!";
],
has static pluralname;
Object oasi_o "oasi"
with description "Un'oasi in lontanza. Puoi vedere la vegetazione, sicuramente
c'è dell'acqua. Quasi non ti sembra vero.",
name 'oasi',
before [;
Go, Enter:
PlayerTo(oasi_l);
return true;
]
has female scenery;
Object sabbia2 "sabbia" Deserto
with name 'sabbia',
description "Sabbia. Sabbia dorata finissima dappertutto."
has scenery;
Object deserto_o "" Deserto
with name 'deserto',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Oasi
Room oasi_l "Oasi"
with description [;
if (self hasnt visited && UsaDemoni == true)
StartDaemon(self);
if (SolVista < 2)
SolVista = 2;
if (leoni in self && palma_l has visited && UsaDemoni == true) {
print "Non è stata una buona idea: i leoni ti aspettavano.^";
self.turni_nell_oasi = 2;
PrintOrRun(self, daemon);
}
print "Ti trovi in un'oasi. Tra la vegetazione lussureggiante puoi
vedere un'alta palma. Sei su un sentiero che va da est, dove
c'è il deserto, verso ovest, all'interno dell'oasi";
if (self hasnt visited)
". Vedi dei leoni arrivare da ovest. Ti giri verso est, pronto a
scappare: leoni anche da lì.";
if (leoni in self)
", ma purtroppo dei leoni ti sbarrano la strada.";
else
".";
],
before [;
Yell:
if (leoni in self)
"Provi a fare le boccacce e urlare ma i leoni sembrano quasi
ridersela.";
],
e_to [;
if (leoni in self)
! [OR] lions won't let me by.
"[OR] I leoni ti sbarrano la strada.";
PlayerTo (deserto);
rtrue;
],
w_to [;
if (leoni in self)
! [OR] lions won't let me by.
"[OR] I leoni ti sbarrano la strada.";
PlayerTo (SabbieMobili);
rtrue;
],
u_to palma_l,
turni_nell_oasi 0,
daemon [;
self.turni_nell_oasi++;
switch (self.turni_nell_oasi) {
1: "I leoni ti guardano affamati.";
2: "I leoni cominciano a prepararsi ad avventarsi su di te.";
3: deadflag = 1;
"È un attimo. Il capobranco si getta su di te, senti un dolore
pazzesco mentre ti addenta la gola, ma non dura molto: muori quasi
all'istante, senza neanche il tempo di pensare al fatto che stai
morendo. Lasceranno poco di te attaccato al tuo scheletro.";
}
];
Object sentiero2 "sentiero" oasi_l
with description "Il sentiero che va da est, dove c'è il deserto, verso ovest,
all'interno dell'oasi.",
name 'sentiero'
has scenery;
Object leoni "leoni" oasi_l
with description [;
print "Maestosi leoni gialli, con una folta criniera scura. Sono ben
nutriti, evidentemente l'oasi offre parecchio cibo. Speri di non
essere il loro prossimo pasto";
if (UsaDemoni)
print ": devi sbrigarti a trovare una soluzione.";
else
print ", ma fortunatamente per adesso non sembrano volerti
mangiare.";
" Purtroppo però ti sbarrano ogni strada, ringhiando paurosamente ogni
volta che tenti di avvicinarti.";
],
name 'leoni'
has static pluralname;
Object palma "palma" oasi_l
with description [;
print "Un'alta palma da cocco.";
if (cocco in palma_l)
" In cima ad essa puoi vedere delle grosse noci.";
"";
],
name 'palma' 'albero' 'pianta',
before [;
Climb:
PlayerTo(palma_l);
return true;
Cut, Swing:
"Non ti porterebbe a nulla.";
]
has scenery female;
Object oasi_oo "" Oasi_l
with name 'oasi' 'vegetazione',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Palma
Room palma_l "Sulla palma"
with description [;
StopDaemon(Oasi_l);
if (SolVista < 3)
SolVista = 3;
print "Sei aggrappato sulla palma da cocco.";
if (leoni in oasi_l)
print " Puoi vedere i leoni giù nell'oasi.";
print "^";
],
before [;
Yell:
if (leoni in oasi_l)
"Provi a fare le boccacce e urlare ma i leoni sembrano quasi
ridersela.";
Exit:
<<Go oasi_o2>>;
Examine:
if (noun == d_obj)
if (leoni in oasi_l)
"I leoni ti aspettano nell'oasi.";
else
"Vedi l'oasi. I leoni sono fuggiti.";
],
d_to oasi_l;
Object oasi_o2 "oasi" palma_l
with description [;
print "L'oasi giù dalla palma.";
if (leoni in oasi_l)
"Purtroppo i leoni sono lì che ti aspettano.";
"";
],
name 'oasi',
before [;
Go, Enter:
PlayerTo(oasi_l);
return true;
]
has female scenery;
Object palma_f "palma" palma_l
with name 'palma' 'albero',
decription "Un'alta palma da cocco.",
before [;
Exit:
<<Go oasi_o2>>;
]
has scenery female;
Object cocco "noci di cocco" palma_l
with name 'cocco' 'noci' 'noce',
description "Delle grandi, solide e pesanti noci di cocco.",
before [;
ThrowAt, Drop, Insert, PutOn:
if (cocco in player) {
if (second == leoni_f) {
remove leoni;
remove leoni_f;
remove cocco;
if (SolVista < 4)
SolVista = 4;
score++;
! [OR] hit lions on head and they ran away!
"[OR] Lanci le noci di cocco contro i leoni ed
essi scappano impauriti. Via libera.";
} else
"Dove vorresti lanciarle?";
} else
"Non possiedi le noci di cocco.";
Open, Eat:
"Non hai fame adesso.";
]
has female pluralname;
Object leoni_f palma_l
with name 'leoni',
description "Li vedi. Sono ancora laggiù.",
has scenery pluralname;
!===============================================================================
! Sabbie mobili
Room SabbieMobili "Sabbie mobili"
with description [;
StopDaemon(Deserto);
if (self hasnt visited && UsaDemoni == true) {
StartDaemon(self);
if (SolVista < 5)
SolVista = 5;
"Sabbie mobili. Sabbie mobili nel deserto. Certo, vicino all'oasi,
che era ricca d'acqua, ma le sabbie mobili ti sembrano
un'esagerazione. Ti senti sfortunato, molto sfortunato. Eppure
l'Africa è così, terra di enormi contrasti ed eccessi, e per passare
dal deserto alla palude non devi poi camminare così tanto. Lo
dicevano anche le guide che hai letto prima di partire. Dicevano di
stare attenti nei pressi delle oasi. Saresti dovuto stare attento, ma
la gioia di avere messo in fuga i leoni era troppo grande. Maledetto
Droopy. Non fosse per lui, ora tu e Dan sareste in viaggio per il
ritorno. Dan avrebbe riparato l'aereo e sareste tutti e tre vivi e
vegeti. Maledetto Droopy. Ma poi, perché tornare a casa? L'unico che
ti è rimasto è zio Oscar. Non si è mai sposato zio Oscar. Non lo vedi
dal funerale di papà. Mamma è morta poco dopo, non ha retto al
dolore. Sei solo. Avevi Cristina, ma ora sei solo. Se non fosse andata
via, non saresti mai partito...^^
[OR] Intanto stai affondando nelle sabbie mobili.^^
Provi ad uscire dalla sabbia, ma non fai che
affondare di più.";
}
"Stai affondando nelle sabbie mobili.";
],
before [;
Yell, Ask:
! [OR] cannibals heard me, they're having me for dinner.
print "[OR] Gridi. Arriva qualcuno: ti hanno sentito.^^
Dio sia lodato. Sono neri, evidentemente
indigeni. Li guardi meglio. Sono vestiti solo di una pelle lacerata
attorno alla vita. Una lunga lancia in mano. Appesi alle loro cinte,
teschi. Umani. Cannibali! Probabilmente gli stessi che hanno mangiato
Dan. Non ti sei allontantato di molto con l'aereo e sei rimasto
comunque nel loro territorio. Qualcosa ti dice che sarai la loro cena.
Farai la fine di Dan. Ma forse meglio mangiato che annegato. Ti prendono,
ti legano e ti portano attraverso la savana per poche miglia, fino
ad arrivare al loro villaggio. Ti portano davanti allo stregone, dove
avviene una conversazione di cui non capisci una singola parola. Osservi le
bellissime
cicatrici decorative sul volto dello stregone: simmetriche, a spirali,
ricoprono le guance sostituendosi alla barba. Sulla maschera dello stregone,
adagiata per terra, vedi strane foglie messe a mo' di decorazione: sembrano di
vite... Ma è
vite! Che ci fa una pianta di vite a queste latitudini? Mentre
domande come questa ti ronzano nel cervello e senti che la tua vita
sta per finire in un pentolone, gli uomini che ti hanno catturato ti
strattonano e ti portano in una cella.^^
[OR] Magari ti avranno a cena. O meglio, per cena.^";
if (SolVista < 6)
SolVista = 6;
score++;
StopDaemon(self);
PlayerTo(Cella);
rtrue;
Swim:
! [OR] i can't swim!
"[OR] Non sai nuotare.";
Exit:
! [OR] the more i move the faster i sink!
"[OR] Più ti muovi, più affondi.";
],
turni_nelle_sabbie 0,
daemon [;
self.turni_nelle_sabbie++;
switch (self.turni_nelle_sabbie) {
1: "Sei immerso fino alle caviglie.";
2: "Sei immerso fino a metà coscia.";
3: "Sei immerso fino ai fianchi.";
4: "Sei immerso fino al torace.";
5: "Sei immerso fino al collo.";
6: deadflag = 1;
"Sei completamente immerso nella sabbia. L'aria comincia a mancarti, riesci
a restistere qualche interminabile minuto durante cui ripensi alla tua vita,
al safari, a Dan, a quel bastardo di Droopy, a Cristina. Soprattutto a
Cristina. Ai suoi capelli, alle sue labbra. Poi lentamente i
pensieri si appannano per la mancanza di ossigeno e dopo qualche secondo
perdi conoscenza. Muori pochi secondi dopo.";
}
];
Object sabbiemobili_o "" SabbieMobili
with name 'sabbie' 'mobili',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Cella
Room Cella "Cella"
with description [;
if (self hasnt visited && UsaDemoni == true)
StartDaemon(self);
"Sei in una capanna. Non ci sono finestre, ma solo una porta,
dove stanno di guardia due cannibali armati con delle lance. Il
soffitto di paglia è troppo alto per te, il pavimento è fatto
semplicemente da terra, più soffice di quella che ricopre il pavimento
del villaggio.";
],
before [;
Exit:
! [OR] guard won't let me!
"[OR] Le guardie non mi lascerebbero uscire!";
Examine:
if (noun == d_obj)
"Il pavimento è di terra. Sotto un piccolo strato di terra dura senti
che la terra diventa abbastanza morbida.";
if (noun == u_obj)
"Un semplice soffitto di paglia, troppo alto peché tu possa raggiungerlo.";
Dig:
if (~~((noun == coltello) || (noun == d_obj && second == coltello)))
"Con cosa vorresti scavare?";
! [OR] tunnelled into old silver mine.
print "Lentamente, col coltello, scavi nel pavimento. Un tentativo davvero
disperato: non riuscirai mai a scavare un tunnel abbastanza profondo
per uscire. Per fortuna almeno le guardie sono distratte dalle danze
fuori. Stanno preparando un rituale, magari vogliono sacrificarti a
qualche divinità. Senti battere sui tamburi, le voci, i canti:
una musica che avresti apprezzato molto in un altro contesto. Le danze
poi sono magnifiche, con le ragazze che danzano in cerchio attorno
al fuoco sacro e i guerrieri che, appena all'esterno, muovono le armi
e simulano duelli a ritmo del tamburo. Peccato che ti vogliano per cena.
Si, perché il pranzo ce l'hanno. Grida molto forte quando lo portano
sull'altare sacrificale. Conosci quella voce. È Droopy, quel grandissimo
bastardo. Chissà come si è fatto catturare con cinque fucili.
Lo uccidono lentamente aprendogli il ventre con un coltello
e strappandogli il cuore. Le sue urla di dolore, strazianti, riempono
il villaggio. Quando il suo cuore viene estratto, un urlo di gioia si
leva tra i cannibali. Quasi ti dispiace, poi ricordi che un uomo
è morto per colpa sua e che tu forse sarai il prossimo. Hai un
brivido quando pensi che ti squarceranno il ventre e lo maledici
ancora. Ha avuto quello che meritava, pensi. Anzi, avrebbe dovuto
soffrire di più.^
Intanto continui a scavare.^^
[OR] Dopo un po' senti il coltello affondare
nel nulla, il terreno cede e si apre un passaggio per le vecchie
miniere.^^
La tua cella è costruita proprio su di esse! Che colpo di
fortuna! Ringrazi il cielo, poi salti giù nell'apertura che hai
scavato, sperando che le guardie si accorgano il più tardi possibile
della tua fuga. Per fortuna, per ora, sono distratte dai riti festosi
che seguono il sacrificio.^";
if (SolVista < 7)
SolVista = 7;
score++;
StopDaemon(self);
PlayerTo (Miniere);
return true;
],
turni_nella_cella 0,
daemon [;
self.turni_nella_cella++;
switch (self.turni_nella_cella) {
2: "Senti che il tempo stringe.";
4: "Tra poco saranno qui per prenderti e sacrificarti.";
6: deadflag = 1;
"Lo stregone della tribù arriva davanti alla tua cella.
Stanno preparando un rituale, magari vogliono sacrificarti a
qualche divinità. Senti battere sui tamburi, le voci, i canti:
una musica che avresti apprezzato molto in un altro contesto. Le danze
poi sono magnifiche, con le ragazze che danzano in cerchio attorno
al fuoco sacro e i guerrieri che, appena dietro, muovono le armi
e simulano duelli a ritmo del tamburo. Peccato che ti vogliano per cena.
Gridi molto forte quando ti portano sull'altare sacrificale.
Ti uccidono lentamente aprendoti il ventre con un coltello
e strappandoti il cuore. Le tue urla di dolore, strazianti, riempono
il villaggio. Rivedi tutta la tua vita. Una sola immagine è degna di
soffermarsi a lungo tra i tuoi pensieri: Cristina. Quando il tuo cuore viene
estratto, un urlo di gioia si leva tra i cannibali.";
}
];
Object guardie "guardie" Cella
with description "Le guardie sono alte, nere, muscolose, con lunghe lance in
mano. Sembrano
decisamente troppo forti perchè tu le affronti, soprattutto
armato solo del tuo coltello, che per fortuna non ti hanno tolto.
Poi sono decisamente troppe: non ce la faresti mai a scappare.
Comunque non ti stanno guardando.",
name 'guardie' 'cannibali' 'indigeni',
before [;
Attack:
if (UsaDemoni == true) {
deadflag = 1;
"Prendi un respiro profondo, poi ti avventi sulle guardie col tuo coltello: ne
ferisci una, poi ne
arrivano decine richiamate dalle urla. Ti uccidono in pochi secondi:
forse è meglio così che sacrificato in chissà quale modo a chissà
quale dio...";
} else
"Devi essere pazzo...";
]
has scenery female pluralname;
Object lance "lance" Cella
with description "Lunghe lance di legno con una punta in metallo.",
name 'lance' 'lancie' 'armi'
has scenery female pluralname;
Object porta "porta" Cella
with name 'porta',
description "È semplicemente un'apertura nel muro della cella, fuori dalla quale
ti aspettano due guardie armate."
has scenery female;
Object finestre "finestre" Cella
with name 'finestre',
description "Non ci sono finestre qui."
has scenery female pluralname;
Object cella_o "" Cella
with name 'cella' 'capanna',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Miniere
Room Miniere "Miniere"
with description [;
if (self hasnt visited && UsaDemoni == true)
StartDaemon(self);
"Sei nelle vecchie miniere d'argento. I cunicoli delle miniere si
snodano verso est, ma sono troppo buie per avventurarvicisi. Vedi
l'uscita delle miniere ad ovest. Un architrave in legno sostiene
il soffitto, ma sembra piuttosto precaria.";
],
before [;
Tie:
if (noun ~= vite || second ~= architrave)
"Cosa vuoi legare a cosa?";
if (noun == vite && second == architrave) {
move vite to self;
move vite_o to EntrataMiniere;
vite.legata = true;
if (SolVista < 8)
SolVista = 8;
"Leghi la vite all'architrave. Riesci a fare un nodo abbastanza
stretto e forte, inoltre la vite sembra robusta quanto una corda.";
}
Pull:
if (noun == vite && vite in self) {
if (UsaDemoni == true) {
deadflag = 1;
"Tiri la vite. L'architrave cede, e con essa il soffitto della miniera.
Le rocce ti colpiscono violentemente, poi ti ricoprono. Intanto i cannibali
si sono accorti della tua assenza e si sono calati dall'apertura che hai
scavato. Non possono fare altro che vederti morire dissanguato.";
} else
"Sì, così ti crolla la miniera in testa.";
}
],
w_to EntrataMiniere,
out_to EntrataMiniere,
e_to "Meglio non rischiare di addentrarsi, soprattutto al buio.",
turni_fuori_da_cella 0,
daemon [;
self.turni_fuori_da_cella++;
switch (self.turni_fuori_da_cella) {
2: "I cannibali potrebbero cercarti da un momento all'altro.";
4: "Devi trovare un modo per scappare prima che i cannibali arrivino.";
6: "Pensa velocemente: i cannibali arriveranno tra poco.";
8: "Dovresti sbrigarti: tra poco i cannibali si accorgeranno della tua fuga.";
10: "Senti delle grida provenire dall'apertura nelle miniere: si sono accorti
della
tua fuga, ora verranno a prenderti.";
12: deadflag = 1;
"Due uomini si calano dall'apertura che hai scavato e vengono verso di te:
provi a scappare, ma non c'è nulla da fare. Ti afferrano. Provi a liberarti
usando il coltello, ferisci una guardia, ma ci mettono pochi attimi per
ucciderti.";
}
];
Object architrave "architrave" Miniere
with description "Un architrave in legno sostiene il soffitto, ma sembra
piuttosto precaria.",
name 'architrave' 'trave',
before [;
Push, Attack, Cut, Swing:
"Non risolverai nulla così: hai bisogno di uno strumento...";
]
has static;
Object miniere_oo "" Miniere
with name 'miniere' 'miniera',
description [;<<Look>>;],
before [;
Exit:
PlayerTo (EntrataMiniere);
return true;
]
has scenery concealed;
Object argento "argento" Miniere
with name 'argento',
description "Non c'è più argento in queste vecchie miniere, se non
per qualche minuscola pepita.",
before [;
Take:
PrintOrRun (self, description);
rtrue;
]
has scenery;
!===============================================================================
! Entrata delle miniere
Room EntrataMiniere "Entrata delle miniere"
with description "Sei davanti all'entrata delle miniere, ad est. Vedi un piccolo
fiume, quasi un ruscello, che scorre ad ovest. L'acqua del fiume
ha degli strani riflessi rossi fluorescenti e tutt'attorno al
letto del corso d'acqua c'è la desolazione più completa: niente
vegetazione, nemmeno un filo d'erba, per svariati metri. Al di là
del fiume vedi un sentiero nella savana.",
before [;
Swim:
PrintOrRun(EntrataMiniere, w_to);
Enter:
if (noun == fiume) {
PrintOrRun(EntrataMiniere, w_to);
return true;
}
Pull:
if (noun == vite_o) {
! move detriti to self;
move rocce to self;
remove vite_o;
StopDaemon (Miniere);
if (SolVista < 9)
SolVista = 9;
score++;
"Tiri la vite e rompi l'architrave. L'entrata della miniera crolla
e si forma una pila di detriti che ostruisce il passaggio. I cannibali
non potranno più venire a prenderti.";
}
ThrowAt, Insert, PutOn:
if (noun ~= rocce || second ~= fiume)
"Cosa vuoi mettere e dove?";
if (noun == rocce && second == fiume) {
move rocce to fiume;
"Costruisci una specie di ponte con le rocce. Fortunatamente il fiume e' poco
profondo.";
}
Drop:
if (noun == rocce)
"Dove?";
JumpOver:
if (noun == fiume)
if (fiume.messo_piede == false) {
PrintOrRun (EntrataMiniere, w_to);
} else {
if (rocce notin fiume)
"Non vuoi certo rischiare di cadere in quel liquido...";
else
PrintOrRun (EntrataMiniere, w_to);
}
],
w_to [;
if (rocce notin fiume)
if (fiume.messo_piede == false) {
fiume.messo_piede = true;
"Provi timidamente a mettere un piede nel fiumiciattolo ma lo ritrai subito
quando
noti che la suola in gomma sembra sciogliersi: sicuramente l'acqua del fiume è
contaminata. Magari contiene le scorie della produzione della misteriosa
sostanza
che permette alla vite di crescere in Africa...";
} else
"Non metterai di certo i tuoi piedi in quell'indefinita sostanza corrosiva...";
print "Camminando sulle rocce riesci ad attraversare il fiume. Cammini sul
sentiero
sull'altra riva per quasi mezz'ora, attraverso la savana, fino ad arrivare in
un villaggio verso nord. Esamini i nativi: no, questi per fortuna non sono
cannibali.^";
score++;
PlayerTo(Villaggio);
rtrue;
],
e_to [;
! if (detriti in self)
if (rocce in self)
"L'entrata è ostruita dai detriti.";
PlayerTo(Miniere);
rtrue;
],
in_to [;PrintOrRun(self, e_to);];
! Il gioco originale fa differenza tra rocce e detriti: preferisco eliminare questa 'incoerenza'
!Object detriti "detriti"
! with name 'detriti',
! description "Ci sono molte rocce qui, alcune delle quali molto grosse."
! has static pluralname;
Object rocce "rocce"
with name 'rocce' 'pietre' 'sassi' 'detriti' 'detrito',
description "Semplici rocce. Alcune molto grosse."
has female pluralname;
Object fiume "fiume" EntrataMiniere
with name 'fiume' 'ruscello' 'rigagnolo' 'acqua' 'fiumiciattolo',
description [;
print "Un piccolo fiume scorre ad ovest. L'acqua ha degli strani riflessi
rossi fluorescenti e tutt'attorno al letto del corso d'acqua c'è la
desolazione più completa: niente vegetazione, nemmeno un filo d'erba,
per svariati metri.";
if (self.messo_piede == true)
" Il perchè l'hai scoperto a spese di parte della tua suola destra: qualche
sostanza nell'acqua la rende altamente corrosiva. Magari contiene le scorie
della produzione della misteriosa sostanza che permette alla vite di crescere
in Africa...";
print " Al di là del fiume, un sentiero.";
if (rocce in fiume)
" Ci sono delle rocce che affiorano.";
"";
],
messo_piede false
has scenery container;
Object rocce2 "rocce"
with name 'rocce' 'pietre',
description "Le rocce adesso sono nel fiume e affiorano di poco
dall'acqua.",
before [;
Take:
"Non puoi più prenderle adesso.";
]
has female pluralname;
Object sentiero "sentiero" EntrataMiniere
with name 'sentiero' 'strada',
description "Un sentiero dall'altra parte del fiume."
has scenery;
Object vite "pianta di vite" EntrataMiniere
with name 'vite' 'pianta' 'rampicante',
description [;
if (self.legata == false)
"Incredibile: una pianta di vite in Africa! Quando Droopy te ne ha parlato ti
sembrava semplicemente un delirio, una leggenda. E invece no: la vite è lì
davanti
a te... Droopy ti ha parlato anche di una strana sostanza, una specie di
concime, che
permette alla pianta di sopravvivere alla calura africana. Purtroppo però la
fabbricazione di questo concime produce delle scorie altamente tossiche,
pertanto i nativi
sono in guerra con gli europei che hanno portato qui la pianta per far sì che la
produzione del concime finisca. Chissà se anche questo è vero... Intanto
la vite è vera. Incredibile, ma vera. I rami sono robusti ma flessibili. Tanto
robusti
e flessibili che potresti usarli come corda.";
else
"Vite legata all'architrave.";
],
before [;
UnTie, Take:
if (self.legata == false)
rfalse;
move vite to player;
remove vite_o;
self.legata = false;
"Sleghi la vite e la riprendi.";
],
legata false
has female;
Object vite_o "la vite legata all'architrave"
with name 'vite' 'pianta' 'rampicante',
description "La vite legata all'architrave della miniera.",
before [;
UnTie, Take:
move vite to player;
remove vite_o;
vite.legata = false;
"Sleghi la vite e la riprendi.";
]
has female proper;
Object Miniere_o "miniere" EntrataMiniere
with description "Le vecchie miniere d'argento.",
name 'miniere' 'miniera',
before [;
Go, Enter:
PlayerTo(Miniere);
return true;
]
has female scenery pluralname;
Object entrata_o "" EntrataMiniere
with name 'entrata',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Villaggio
Room Villaggio "Villaggio"
with description [;
if (SolVista < 10)
SolVista = 10;
"Sei in un tipico villaggio africano. Vedi l'oceano, finalmente, e il rottame
di una barca ad ovest. A est, una caverna. Le capanne in cui gli indigeni vivono
sembrano molto povere, certamente più povere di quelle in cui vivono i cannibali
che ti hanno catturato. Tutto il villaggio è fuori dalle capanne: gli uomini
sono
tornati dalla caccia, ma a mani vuote. Non deve essere la prima volta: i nativi
ti sembrano tutti un po' denutriti. Tra essi noti una ragazza che ti colpisce da
subito: ti ricorda Cristina.";
],
before [;
Give:
if (noun == cibo && second == nativi or ragazza) {
if (cibo notin player)
"Non hai più cibo.";
remove cibo;
nativi.affamati = false;
move flauto to player;
remove flauto_fake;
score++;
! [OR] grateful natives gave me a flute.
"[OR] Dai il poco cibo che ti rimane ai nativi e per riconoscenza
essi ti donano un flauto.";
}
if (noun == anello && second == ragazza) {
move anello to ragazza;
"Dai l'anello alla ragazza. Lei ti risponde con un sorriso, poi, con uno
slancio in avanti, ti dà un bacio sulla guancia.";
}
Feed:
if (noun == nativi or ragazza)
<<Give cibo nativi>>;
Play:
if (noun == flauto || flauto in player)
<<Charm serpenti_o>>;
Charm:
if (noun == serpenti_o) {
if (flauto in player) {
if (serpenti.incantati > 0)
"I serpenti sono già incantati.";
serpenti.incantati = 7;
if (UsaDemoni == true)
StartDaemon(serpenti);
if (SolVista < 11)
SolVista = 11;
"Suonando il flauto che gli indigeni ti hanno regalato riesci ad
ipnotizzare i serpenti.";
} else
"Come vorresti incantarli?";
}
],
w_to barca,
e_to [;<<Go caverna_o>>;],
s_to "Tornare indietro? Non ci penso proprio!";
Object oceano "oceano" Villaggio
with description "L'oceano. Un'interminabile distesa d'acqua.",
name 'oceano' 'acqua' 'mare'
has scenery;
Object barca_o "barca" Villaggio
with description "Una barca ridotta maluccio.",
name 'barca' 'nave' 'rottame' 'imbarcazione' 'vela' 'veliero',
before [;
Go, Enter, Climb:
PlayerTo(Barca);
return true;
]
has scenery container female;
Object caverna_o "caverna" Villaggio
with description [;
print "Una caverna. È piena di serpenti velenosi.";
if (serpenti.incantati > 0)
print " Per fortune incantati.";
if (catrame in Caverna)
print " Puoi vedere anche un bidone di catrame.";
"";
],
name 'caverna' 'grotta',
before [;
Go, Enter:
if (serpenti.incantati <= 0)
"Non mi sembra una buona idea: è piena di serpenti velenosi!";
PlayerTo(Caverna);
return true;
]
has scenery container female;
Object nativi "nativi" Villaggio
with description [;
print "I nativi sono denutriti. Saranno grossomodo una trentina in tutto. Sono
vestiti di pelli di animali accuratamente conciate ed hanno il corpo
decorato da bellissimi tatuaggi geometrici. Qualcuno ha un
flato attaccato alla cinta: chissà a cosa serve...";
if (self.affamati == true)
print " Alcuni di essi sembrano molto affamati.";
" Tra tutti ti colpisce una ragazza: ti ricorda Cristina...";
],
affamati true,
name 'nativi' 'uomini' 'indigeni' 'pelli' 'tatuaggi' 'corpo' 'corpi',
before [;
Tell, Ask, AskFor:
"Provi a parlare ai nativi, ma non riuscite proprio a capirvi.";
]
has scenery pluralname animate;
Object flauto_fake "flauti" Villaggio
with description "Alla cintura di alcuni dei nativi ci sono flauti simili a
quelli
usati dai fachiri per incantare i serpenti.",
name 'flauto' 'flauti' 'cinta' 'cinte' 'cintura' 'cinture',
before [;
Take:
"Non potresti mai rubare niente dalle loro cinture senza che se ne accorgano.";
]
has static concealed;
Object ragazza "ragazza" Villaggio
with description "In realtà non assomiglia per nulla a Cristina. Cristina è
bionda e ha gli
occhi verdi, lei è bruna con gli occhi molto scuri. In verità tutte
ti ricordano Cristina. Anche quelle che con lei non c'entrano nulla. Poi
Cristina
è molto più bella. Non hai mai incontrato una ragazza bella come lei.
Pensi spesso a Cristina...^
^
Mi perdo nel tempo^
dimentico chi sono,^
sogno che la luce mi accechi,^
cerco ogni tuo sguardo,^
sfioro il tuo sospiro,^
accarezzo la tua anima...^
^
Crudele mi uccide il reo tempo,^
spietato l'odio possiede il mio cuore...^
Ti amavo,^
vivevo per te,^
ripeterlo ancora una volta,^
e poi un'altra ancora...^
Quel sole si è spento^
la stella che eri non brilla più^
il calore che emanavi è gelo per me!^
Muoio nel ghiaccio in cui giace sepolto il nostro amore.^
(Sara Montorsi, (c) 2003)^
^
Ti ha lasciato così, un mese prima che ti chiedessero di partire. Sei stato
per un mese praticamente sempre chiuso nella tua stanza. Quando ti hanno
proposto
il safari, hai accettato solo perché volevi reagire. Un altro mese per i
preparativi, poi un mese in Africa. Ti ha lasciato da tre mesi. Ma tu puoi
fare a meno di lei, ormai non ci pensi quasi più... Cerchi di
convincerti di non pensarci più. L'hai implorata di rimanere con te, ma non
c'è stato verso. Hai cercato di convincerti che stare con lei era una scommessa
persa in partenza. Hai giocato, rubato e perso. Hai cercato di convincerti
che ne avresti trovate mille come lei. Che avresti vissuto momenti felici
con un'altra. Che saresti bastato a te stesso.^
Avevi puntato tutto su Cristina. Troppe volte ti sei sorpreso a masturbare la
tua mente con immagini di lei. Immaginavi di baciarla, immaginavi le sue
carezze,
le sue mani sul tuo corpo. Volevi smettere ma non ci riuscivi. Non potevi non
pensare a lei. Non puoi non pensare a lei.^
Le tue ali... Dove sono le tue ali? Le hai strappate via, non ti servivano
più. Era lei a farti volare. Le devi ritrovare. Le ritroverai, soffierai
sulla polvere e le riattaccherai. Farà male, farà male riaprire le cicatrici,
ma le riattaccherai. Devi volare ancora. Senza lei.^
Le lacrime. Sei bagnato, pesante. Troppo pesante per volare. Le asciughi, le
lacrime. Ma continuano a cadere.^
Quante volte hai guardato il telefono aspettando che ti chiamasse. Pregando
ti richiamasse. Non ti ha più richiamato.",
name 'ragazza' 'fanciulla' 'giovane',
before [;
Ask, Tell, AskFor:
"Vi guardate, provate a parlarvi, ma non riuscite a capire nemmeno
una parola di quello che die l'altro.";
Kiss:
if (self.kissed == false) {
self.kissed = true;
"Guardi la ragazza dritta negli occhi, cercando di capire come
potrebbe reagire, poi chiudi i tuoi occhi e avvicini la bocca
alla sua... Pensi a come sarebbe imbarazzante scoprire che lei
si sia ritirata, alla tua espressione stupita ed imbarazzata...
E invece no, trovi le sue labbra morbide. Solo pochi istanti,
poi torni indietro e la guardi: il suo sguardo è complice,
sorride... Insomma, sembra aver gradito il bacio.^
Tu, in compenso, rimani con l'amaro in bocca: sai benissimo che
non volevi baciare lei.";
}
"Ti avvicini con sicurezza, abbracci la ragazza e la baci con trasporto.";
Fuck:
"Se lo facessi senza sposarla, i suoi parenti ti ucciderebbero...";
Marry:
"Ti piace, ti piace moltissimo. Al diavolo Cristina. Decidi di sposarla. Il
problema è
come dirlo: non conosci una sillaba della loro lingua.";
Smile:
"Le sorridi. Lei ti sorride.";
],
kissed false
has scenery female animate;
Object flauto "flauto"
with description "Un flauto. Di quelli usati dai fachiri per incantare i
serpenti.",
name 'flauto';
Object serpenti_o "serpenti velenosi" Villaggio
with name 'serpenti' 'velenosi',
description [;
PrintOrRun(serpenti, description);
],
before [;
Take:
"Sono nella caverna.";
]
has scenery static pluralname;
Object villaggio_o "" Villaggio
with name 'villaggio' 'capanne',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Caverna
Room Caverna "Caverna"
with description "Una caverna. Non è molto profonda, né molto alta.
Probabilmente
un tempo è stata usata come deposito. Ci sono macchie di catrame
ovunque, oltre ad alcuni graffiti. L'uscita è ad ovest.",
ee false,
before [;
Xyzzy:
if (self.ee == false) {
score++;
self.ee = true;
}
PlayerTo (edificio);
rtrue;
],
w_to Villaggio;
Object graffiti "graffiti" Caverna
with description "Alcuni graffiti. Raffigurano scene di caccia, spirali,
serpenti.",
name 'graffiti' 'spirali' 'serpenti'
has scenery;
Object serpenti "serpenti velenosi" Caverna
with name 'serpenti' 'velenosi',
incantati false,
description [;
print "Nella caverna ci sono decine di serpenti velenosi";
if (self.incantati > 0)
", ma per fortuna li hai ipnotizzati.";
else
".";
],
before [;
Take:
"Perchè dovresti portarti dietro quelle bestiacce velenose?";
],
short_name [;
print "serpenti velenosi";
if (self.incantati > 0)
print " ipnotizzati";
rtrue;
],
daemon [;
self.incantati--;
if (self.incantati <= 0) {
StopDaemon(self);
self.incantati = 0;
if (player in Caverna) {
deadflag = 1;
"I serpenti cominciano a svegliarsi. Uno di essi ti morde alla
caviglia e subito cadi per terra. Gli altri ti si avventano addosso:
deve essere una specie molto velenosa, perché dopo pochi minuti
di totale immobilità muori. Il tuo ultimo pensiero va a Cristina: chissà
dov'è ora...";
} else {
"I serpenti, nella caverna, cominciano a svegliarsi.";
}
}
]
has static pluralname;
Object macchie "macchie di catrame" Caverna
with name 'macchie' 'macchia',
description "Ci sono alcune macchie di catrame sulle pareti."
has scenery concealed;
Object catrame "bidone di catrame" Caverna
with name 'bidone' 'catrame',
description "Un bidone di catrame nerissimo.",
before [;
Empty:
"Dove vorresti svuotarlo?";
Take:
if (SolVista < 12)
SolVista = 12;
rfalse;
];
Object caverna_oo "" Caverna
with name 'caverna' 'grotta',
description [;<<Look>>;]
has scenery concealed;
!===============================================================================
! Barca
Room Barca "Barca"
with description "Sei sulla barca. È messa maluccio: c'è una falla che ti
impedisce
di prendere il mare. Per fortuna però la vela non ha subito particolari
danni. Questa barca potrebbe essere la tua speranza di
salvezza: potresti raggiungere il porto più vicino e da lì salpare
finalmente verso casa. Ad est c'è il villaggio, tutt'attorno l'oceano.",
before [;
Exit:
PlayerTo (Villaggio);
rtrue;
Insert, PutOn, EmptyT:
if (noun == catrame && second == falla) {
if (SolVista < 13)
SolVista = 13;
score++;
deadflag = 2;
! [OR] congratulations! you fixed the hull and sailed home.
print "[OR] Ripari la falla usando il catrame. Finalmente sei pronto per partire
e tornare a casa.^^
I nativi ti salutano, e la ragazza ti manda un bacio volante. Per fortuna
sai come condurre una barca a vela: una delle cose che ti ha insegnato Cristina.
Sembrava un tutt'uno con la barca e con il vento quando ti portava in giro
per le isole greche... Quante volte l'hai baciata su quella barca, con le
labbra salate, e quante volte i vostri corpi bagnati si sono intrecciati...
Avete anche fatto l'amore sulla sua barca. Ricordi ogni particolare, ogni
dettaglio. Lei era splendida.^
Navigherai verso nord fino ad arrivare nel primo porto
che incontri sulla tua rotta, lì potrai trovare un mezzo più consono per tornare
a casa. Tornare a casa, ma perché? In fin dei conti non c'è nessuno che ti
aspetta, se non i tuoi domestici... Potresti fermarti in Africa ancora un po',
ma";
if (anello in ragazza)
"... Ma cosa? Cristina? Non merita il tuo stare male. Basta guardare la ragazza
a
cui hai donato l'anello, il suo sguardo triste: trattiene a stento le lacrime
guardando l'anello che le hai regalato. È così bella... Sì, resterai in Africa
per ora, e forse un giorno tornerai a casa con lei.";
else
" la nostalgia di vedere Cristina è troppa... La voglia di farti male è
troppa...";
}
Fix:
if (second ~= catrame)
"Con che cosa vuoi ripararla?";
<<Insert second noun>>;
Fill:
"Con che cosa vuoi ripararla?";
],
e_to Villaggio,
n_to [;<<Go oceano2>>;],
s_to [;<<Go oceano2>>;],
w_to [;<<Go oceano2>>;];
Object falla "falla" Barca
with description "Una brutta falla. Non puoi prendere il mare finché non la
ripari.",
name 'falla'
has female;
Object barca_oo "" Barca
with name 'barca' 'imbarcazione' 'rottame' 'nave' 'vela' 'veliero',
description [;<<Look>>;]
has scenery concealed;
Object oceano2 "oceano" Barca
with description "L'oceano. Un'interminabile distesa d'acqua.",
name 'oceano' 'acqua' 'mare',
before [;
Go, Enter:
"Non è una buona idea.";
]
has scenery concealed;
Object villaggio2 "villaggio" Barca
with description "Il povero villaggio della tribù del posto.",
name 'villaggio' 'capanne',
before [;
Go, Enter:
PlayerTo (Villaggio);
rtrue;
]
has scenery concealed;
Room edificio "Dentro l'edificio"
with description "Sei dentro un edificio, un pozzo per estrarre l'acqua di una
grande sorgente.",
before [;
Xyzzy:
PlayerTo (villaggio);
rtrue;
],
n_to "L'edificio non ha uscite. Almeno non in questo gioco.",
nw_to [;PrintOrRun (self, n_to); rtrue;],
w_to [;PrintOrRun (self, n_to); rtrue;],
sw_to [;PrintOrRun (self, n_to); rtrue;],
s_to [;PrintOrRun (self, n_to); rtrue;],
se_to [;PrintOrRun (self, n_to); rtrue;],
e_to [;PrintOrRun (self, n_to); rtrue;],
ne_to [;PrintOrRun (self, n_to); rtrue;];
!===============================================================================
! Entry point routines
[ Initialise i;
SolVista = -1;
@erase_window -1;
print "Puoi giocare a questo gioco in due versioni: quella originale e quella
migliorata. Nella prima non è possibile morire neanche nelle situazioni
più assurde, nella seconda si. Pertanto la versione migliorata è
decisamente più realistica.^";
print "Usare la versione migliorata? "; UsaDemoni = YesOrNo();
@erase_window -1;
print (string) Intro;
@read_char 1 -> i;
@erase_window -1;
box "Quel sole si è spento"
"la stella che eri non brilla più"
"il calore che emanavi è gelo per me!"
"Muoio nel ghiaccio in cui giace sepolto il nostro amore."
" Sara Montorsi";
@read_char 1 -> i;
@erase_window -1;
move coltello to player;
move cibo to player;
!location = Deserto;
print "^^";
print (string) Intro;
print "^^";
location = tenda;
Banner();
print "^Chiedi AIUTO se non sai come giocare.^";
return 2;
];
!===============================================================================
! Menu di aiuto
Include "menus_it";
[ HelpSub; helpmenu.select(); ];
Menu helpmenu "Aiuto e Informazioni:";
Option -> menuat "Introduzione alle Avventure Testuali"
with description [;
print "Le Avventure Testuali (A.T.), spesso chiamate Interactive Fiction (I.F.),
sono giochi o racconti (a seconda dei punti di vista) che ti permettono di
immedesimarti nel protagonista e destreggiarti così fra gli sviluppi della
trama, e fra gli enigmi e gli ostacoli che si frappongono fra te e la
conclusione della storia. Il programma ti presenta un testo che descrive la tua
situazione e aspetta che tu inserisca i comandi che diventeranno le azioni del
protagonista.^Vediamo un esempio:^^";
font off;
print " Sei su di un piccolo vialetto di campagna.^ Accanto a te vedi
un'automobile.^ All'interno dell'automobile vedi una donna priva di sensi.^
>^^";
font on;
print "A questo punto potrai intrudurre il tuo comando dopo il carattere >. Ad
esempio:^^";
font off;
print " > apri la portiera^^";
font on;
print "E il programma risponde^^";
font off;
print " Le portiere dell'automobile sono chiuse.^ >^^";
font on;
print "Senza darti per vinto potrai tentare una strada più efficace^^";
font off;
print " > sfonda un finestrino^^ Con attenzione rompi uno dei finestrini.^ >
apri portiera^^ Spalanchi la portiera dell'automobile.^ >^^";
font on;
print "E via proseguendo. Ovviamente non tutti gli ostacoli saranno così facili
da superare.^^Buona fortuna e buon divertimento.^";
];
Option -> menuhow "Come si giocano le Avventure Testuali"
with description "Di seguito elenchiamo i comandi convenzionalmente più usati
nelle A.T., premettendo che questa lista non è ne vuole essere completa.^^
Per muoversi da un ambiente all'altro in genere vengono usate le direzioni
cardinali (nord, sud, est e ovest, abbreviate in n,s,e,o, ma anche nord-est,
nord-ovest, sud-est e sud-ovest, a loro volta abbreviate in ne, no, se e so) e i
comandi su (u) e giù (d) per muoversi verso l'alto o verso il basso.^^
I comandi guarda (g) e esamina (x) sono quasi sinonimi, e permettono di avere
descrizioni approfondite degli oggetti presenti nell'ambiente che circonda il
personaggio; il comando guarda, usato da solo, permette di ripetere la
descrizione della stanza. Inoltre è possibile guardare sotto, dentro o dietro un
oggetto.^^
Gli oggetti, purchè non siano troppo pesanti o ingombranti, possono essere
raccolti e deposti usando i comandi prendi e posa (o lascia). Il comando
inventario (i) mostra una lista degli oggetti posseduti dal personaggio.^^
Ovviamente gli oggetti possono essere manipolati in ogni modo logico; una torcia
può essere accesa o spenta (accendi la torcia/spegni la torcia), un pulsante può
essere premuto (premi il pulsante), un mobile può essere spostato (sposta il
mobile), una porta può essere aperta usando la giusta chiave (apri la porta con
la chiave di ferro). E' anche possibile lasciar passare il tempo senza fare
niente, con il comando aspetta (z).^^
E' possibile usare frasi abbastanza complesse, facendo anche uso di pronomi. Ad
esempio comandi come ~prendi il pugnale e lancialo al troll~, ~posa tutto~,
~prendi la pietra e la lancia~ sono riconosciuti tranquillamente.^^
Se nel corso del gioco si incontrano altri personaggi, si pu@`o comunicare con
loro in vari modi; ad esempio si possono usare i comandi ~parla a <persona>~,
oppure ~parla a <persona> di <argomento>~ o ~chiedi a <persona> di <argomento>~.
Altrimenti, per chiedere un oggetto a qualcuno si pu@`o dare il comando ~chiedi
a <persona> <oggetto>~. Infine si possono dare ordini a qualcuno (che non è
assolutamente detto che obbedisca) usando il comando ~<persona>, <comando>~ (ad
esempio ~oste, portami da bere~).^^
Se capita di trovare dei libri (o qualcosa di simile) questi ultimi possono
ovviamente essere letti (~leggi il libro~), ma può capitare di dover effettuare
su questi libri delle ricerche più particolareggiate: in questo caso si puà
usare il comando ~consulta il libro su <argomento>.^^";
Option -> menucom "Comandi particolari"
with description "Ci sono alcuni comandi speciali che servono non tanto per
giocare, quanto per gestire il gioco. Eccone un elenco:^^
SALVA o SAVE: per salvare la situazione corrente.^
CARICA o RESTORE: per ripristinare una situazione precedentemente salvata.^
RICOMINCIA o RESTART: per ricominciare il gioco dall'inizio.^
BASTA o QUIT o Q: per uscire dal gioco.^^
PUNTEGGIO o SCORE: mostra il punteggio (che indica quanto si è vicini alla
soluzione) raggiunto in quel momento.^
PUNTEGGIO COMPLETO o FULLSCORE: mostra il punteggio in dettaglio.^
NOTIFICA ON e NOTIFICA OFF: attivano e disattivano la notifica di aumento o
diminuzione del punteggio.^
OGGETTI o OBJECTS: per avere una lista degli oggetti manipolati.^
LUOGHI o PLACES: per avere una lista dei luoghi visitati.^^
LUNGA o VERBOSE: passa in modalità lunga, ripetendo sempre la descrizione di
tutti gli ambienti.^
NORMALE o BRIEF: passa in modalità normale, descrivendo gli ambienti solo quando
vengono visitati la prima volta. Questa è la modalità standard.^
BREVE o SUPERBRIEF: passa in modalità breve, non descrivendo mai gli ambienti
(sconsigliata).^
SCRIPT ON e SCRIPT OFF: attivano e disattivano la trascrizione su file della
partita.^^
VERSION o VERSIONE: mostra informazioni sul gioco.^
HELP o AIUTO: per accedere a queste pagine di aiuto.^";
Option -> menualtre "Dove trovare altre Avventure Testuali"
with description "Se cercate altre avventure testuali e materiale relativo, ecco
un elenco di luoghi sulla rete dove trovarle.^^
IF Archive (http://www.ifarchive.org), forse in assoluto la più vasta raccolta
di materiale sulle Avventure Testuali.^
IF Italia (http://www.ifitalia.info), il punto di riferimento in Italia per le
Avventure Testuali.^
L'Avventura è L'avventura (http://www.avventuretestuali.com), ottimo sito
mantenuto da Francesco Cordella, con interviste, curiosità e altro ancora.^
Inform official home page (http://www.inform-fiction.org/), la pagina ufficiale
di Inform, tenuta da Graham Nelson in persona.^
Informazioni (http://www.composizioni.net/inform), la pagina di Inform in
italiano, mantenuta da Giovanni Riccardi.^
E non dimentichiamo alcuni newsgroup dedicati alle A.T.:
it.comp.giochi.avventure.testuali (gruppo di discussione italiano),
rec.games.int-fiction (dedicato a giocatori e appassionati di A.T.),
rec.arts.int-fiction (destinato invece a programmatori/autori).";
Option -> menuaiuto "Se si rimane bloccati"
with description "Anzitutto di fronte alle difficoltà è sempre consigliabile un
po' di perseveranza. Ma se proprio non riuscite ad andare avanti potete chiedere
aiuto sul newgroup it.comp.giochi.avventure.testuali. In alternativa, puoi usare
il comando SOLUZIONE (o SOL) per visualizzare la soluzione del gioco.";
Option -> menucred "Crediti, Ringraziamenti e Licenza"
with description "Quest'avventura è stata realizzata usando Inform, (c) Graham
Nelson, e la versione italiana delle librerie, Infit, realizzata da Giovanni
Riccardi. Inoltre è stata usata la libreria menus.h, di Graham Nelson. Il menu
di aiuto è basato su quello generico di Paolo Lucchesi.^^
~African Escape~ è un'avventura testuale realizzata da Ignazio Di Napoli
<neclepsio@@64hotmail.com> per il progetto From Hell di Roberto Grassi. Versione
originale di Bruce Robinson, (c) 1982.^^
Un particolare ringraziamento va a Roberto Grassi, che mi ha fornito i sorgenti
del gioco originale e ha dato preziosissimi consigli durante la scrittura del
codice, oltre ad aver effettuato il beta testing. Grazie anche a Luca Bertaiola
per aver segnalato alcuni bug.^^
Grazie a Sara Montorsi, che ha scritto la poesia inserita nel gioco e mi ha
permesso di pubblicarla.^^
Questo prodotto è libero, rilasciato sotto licenza GPL (Gnu Public License),
riportata nel file allegato gpl.txt, oppure consultabile sui siti
http://www.opensource.org o http://www.fsf.org. Chiunque può copiare,
distribuire, trasferire e modificare liberamente questo prodotto secondo i
termini di detta licenza. I file sorgente possono essere scaricati dalla home
page del progetto From Hell: <http://???>.^
Questo prodotto è distribuito senza alcuna garanzia. L'autore non può essere
ritenuto responsabile per qualsiasi danno dovuto direttamente o indirettamente
all'uso del prodotto.";
SwitchOption foo;
!===============================================================================
! Soluzione
[SolutionSub i;
print "Sei sicuro di voler visualizzare la soluzione? ";
if (YesOrNo() == false) {
return true;
}
i = -1;
while (1) {
i++;
print "^";
switch (i) {
0: print "La prima parte dell'avventura è solo un'introduzione giocabile:
è abbastanza semplice andare avanti. Basta prendere la lampada,
uscire, rientare, uscire, muoversi, prendere il paracadute e
saltare.";
1: print "Sei nel deserto. Hai sete. Tutti sanno che nei cactus è
contenuta acqua. Hai con te un coltello. Taglia il cactus.";
2: print "Adesso vedi un'oasi in lontananza. Vacci.";
3: print "Per scappare dai leoni devi salire sulla palma.";
4: print "Per fare fuggire i leoni devi prendere le noci di cocco e
lanciargliele contro.";
5: print "Ora la via è libera: scendi dalla palma e vai ad ovest.";
6: print "L'unico modo per uscire dalle sabbie mobili è chiedere aiuto:
grida.";
7: print "Per uscire dalla cella puoi scavare il pavimento col
coltello.";
8: print "Esci dalle miniere, prendi la vite, rientra nelle miniere e
lega la vite all'architrave.";
9: print "Esci dalle miniere, poi tira la vite.";
10: print "Prendi le rocce e gettale nel fiume, poi potrai andare verso il
sentiero.";
11: print "Dai da mangiare ai nativi, poi incanta i serpenti col flauto
che ti regaleranno.";
12: print "Entra nella caverna e prendi il catrame.";
13: print "Vai sulla barca e metti il catrame sulla falla.";
14: print "Questa è la lista completa dei comandi:^
prendi la lampada^
esci^
entra^
esci^
n^
prendi il paracadute^
salta^
(qui inizia il gioco originale)^
taglia il cactus^
vai nell'oasi^
sali sulla palma^
prendi il cocco
lancia il cocco ai leoni^
giu^
w^
grida^
scava con il coltello^
w^
prendi la vite^
e^
lega la vite all'architrave^
w^
tira la vite^
esamina i detriti^
prendi le rocce^
lancia le rocce nel fiume^
w^
sfama i nativi^
incanta i serpenti^
vai nella caverna^
prendi il catrame^
w^
vai sulla barca^
ripara falla con catrame^";
SolVista = 14;
return true;
}
if (i >= SolVista) {
SolVista = i;
print "^^Andare avanti? ";
if (YesOrNo() == false)
return true;
}
}
];
!===============================================================================
! Routine
[ InScope person item;
if (person == player && location == thedark && real_location == foresta1) {
PlaceInScope(tenda_o);
if (lampada in foresta1)
PlaceInScope(lampada);
}
if (person == player && location == thedark && real_location == tenda && lampada
in tenda) {
PlaceInScope(lampada);
}
if (person == player && location == thedark)
objectloop (item in parent(player))
if (item has moved) PlaceInScope(item);
return false;
];
!===============================================================================
! Grammatica
Include "ItalianG";
Verb meta 'aiuto' 'informazioni' 'help' * -> Help;
Verb meta 'soluzione' 'sol' * -> Solution;
Verb 'dona' = 'dai';
Verb 'urla' * -> Yell;
Extend 'chiedi' * 'aiuto' -> Yell;
Verb 'chiama' * 'aiuto' -> Yell
* 'qualcuno' -> Yell;
Extend 'grida' * -> Yell;
Extend 'grida' * 'aiuto' -> Yell;
Extend 'grida' * 'a'/'ad'/'al'/'alla'/'ai'/'alle' noun -> Yell;
Verb 'spaventa' * noun -> Yell;
[YellSub;
"Ti senti meglio ora?";
];
Extend 'scava' first * -> Dig
* noun -> Dig
* 'in'/'nel'/'nella'/'nello' noun -> Dig
* 'con'/'col' held -> Dig;
Extend 'tira' * held
'nel'/'nella'/'nei'/'nelle'/'in'/'verso'/'su'/'sul'/'sulla'
noun -> Insert;
Extend 'lancia' * held 'verso' noun -> Insert;
Verb 'getta' * held 'nel'/'nella'/'nei'/'nelle'/'in'/'verso'/'su'/'sul'/'sulla'
noun -> Insert;
Extend 'salta' * noun -> JumpOver;
Verb 'nutri' 'sfama' * noun -> Feed;
[FeedSub;
"Non ti sembra il caso.";
];
Verb 'incanta' 'ipnotizza' * noun -> Charm;
[CharmSub;
"Non servirebbe a nulla.";
];
Verb 'suona' * -> Play
* noun -> Play;
[PlaySub;
"Non servirebbe a nulla.";
];
Verb 'ripara' 'aggiusta' 'tappa' * noun -> Fix
* noun 'con'/'col' noun -> Fix;
[FixSub;
"Non servirebbe a nulla";
];
Extend 'riempi' * noun 'con'/'col' noun -> Fix;
Extend 'colma' * noun 'con'/'col' noun -> Fix;
Verb 'slega' 'snoda' * noun -> UnTie;
[UnTieSub;
"Non è legato.";
];
Extend 'cerca' * 'tra'/'fra' noun -> Search;
Extend 'ricerca' * 'tra'/'fra' noun -> Search;
Extend 'trova' * 'tra'/'fra' noun -> Search;
Extend 'vai' * 'verso' noun -> Enter;
Extend 'scendi' first * -> Exit;
Extend 'svuota' * noun 'in'/'nel'/'nell'/'nella'/'nei'/'nelle' noun -> EmptyT;
Verb 'abbatti' 'incidi' * noun -> Cut;
Verb 'scopa' 'tromba' * noun -> Fuck
* 'con'/'col' noun -> Fuck;
Extend 'fai' * 'l^' 'amore' 'con'/'col' creature -> Fuck;
[FuckSub;
"Sei solo un maniaco.";
];
Verb 'sorridi' * 'a'/'ad'/'al'/'alla'/'ai'/'alle' creature -> Smile;
[SmileSub;
"Sorridi. In fondo, la vita è bella.";
];
Verb 'sposa' * creature -> Marry;
[MarrySub;
"Chi vorresti sposare?!";
];
Verb 'xyzzy' * -> Xyzzy;
[XyzzySub;
"Non succede nulla...";
];
Verb 'lanciati' * -> Jump;
Extend 'salta' * topic -> Jump;
!===============================================================================