Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [inform 6] il mistero delle torce in eccedenza

tree
bussola (6) 
  il nord
  il sud
  l
 est
  l
 ovest
  il nordest
  il nordovest
  il sudest
  il sudovest
  il sopra
  il sotto
  il fuori
  il dentro
Oscurità (19) 
(Inform Parser) (21) 
(Inform Library) (22) 
(Library Extensions) (23) 
(LibraryMessages) (24) 
Il tuo studio (39) 
  te stesso
  uno scrittoio
    un vecchio telefono
    una torcia elettrica
    due batterie
    una torcia elettrica
      due batterie
il codice...
Constant Story "BATTERIE & TORCE";
Constant Headline "^Una piccola IF con Inform, dove provo a far capire
al parser la differenza tra accesa e spenta in presenza di pi@`u
batterie e torce identiche.^";
Constant MANUAL_PRONOUNS;
Constant MAX_ITEM_COPIES = 4;
Replace WillRecurs; ! non distinguo due torce dal contenuto nelle
descrizioni
Replace WriteAfterEntry; ! non scrivo parentesi dopo le torce
Include "Parser";
Include "VerbLib";
Include "Replace";
[ Initialise; location = study; "^Ciao!^"; ];
Class Room
  with description "Una stanza vuota.",
  has light;
 
Class Furniture
  with before [; Take, Pull, Push, PushDir:
  			print_ret (The) self, " @`e troppo pesante.";
],
  has static supporter;
Class   Flashlight_(MAX_ITEM_COPIES) 
  with  short_name [;
  			if (self has on)
  				print "torcia elettrica accesa";
  			else
                                print "torcia elettrica";
  			rtrue;
  		],
        plural [;
        	if (self has on)
        		print "torce elettriche accese";
        	else
                        print "torce elettriche";
        	rtrue;
        ],
        name 'spenta' 'spente//p' 'elettrica' 'torcia' 'elettriche//p'
'torce//p' ! 'accesa' 'accese//p' 'spenta' 'spente//p'
             'flash' 'metallico' 'blu' 'blu-metallico',
        description "Una piccola torcia elettrica blu-metallico.",
        capacity 2,
        before [;
          Touch:
            print "Sfiori ", (the) self, " e ti sovviene il
                  numero delle torce in gioco: ", CountsF(), ".^";
            rtrue;
          SwitchOn:
            if (self has on)
                "@`E gi@`a accesa.";
            if (children(self) == 2) {
                give self on;
                self.&name-->0 = 'accesa';
                self.&name-->1 = 'accese//p';
                "Un raggio sottile di luce gelida brilla innanzi a
te.";
            }
            if (children(self) == 1) {
                "L'interruttore scatta, ma nessuna luce risplende.
                 Sembra che dovrai procurarti due batterie.";
            }
            if (children(self) == 0) {
                "L'interruttore scatta, ma nessuna luce risplende.
                 Non sorprende, considerato che le torce elettriche
solitamente
                 hanno bisogno di batterie.";
            }
          SwitchOff:
            self.&name-->0 = 'spenta';
            self.&name-->1 = 'spente//p';
            rfalse;
          Receive:
            if (~~(noun ofclass Battery_))
                print_ret (The) noun, " non ", (isorare) noun, "
adatt", (genderandnumber) noun, " alla torcia.";
        ],
        after [;
          LetGo:
            if (self has on) {
                print "Appena togli la batteria, la luce si spegne.^";
                give self ~on;
                self.&name-->0 = 'spenta';
                self.&name-->1 = 'spente//p';
                return false;
            }
        ],
  has container open switchable female;
Class   Battery_(MAX_ITEM_COPIES) 
  with  short_name "batteria",
        plural "batterie",
        name 'batteria' 'batterie//p' 'pila' 'pile//p' 'AA',
        description "Una batteria AA.",
        before [;
          Remove:
            <<Take noun>>;
        ],
  has female;
Room study "Il tuo studio";
Furniture -> desk "scrittoio"
  with name 'scrittoio' 'scrivania' 'tavolo';
 
Object -> -> phone "vecchio telefono"
  with name 'vecchio' 'telefono',
       description "Sembra vecchio ma funzionante.";
Flashlight_ -> ->;
Battery_ -> ->;
Battery_ -> ->;
Flashlight_ -> ->;
Battery_ -> -> ->;
Battery_ -> -> ->;
[CountsF n x;
    n = 0;
    objectloop (x ofclass Flashlight_) {
       n++;
    }
    return n; ! ritorna il numero delle torce in gioco
];
[CountsFOn na x;
    na = 0;
    objectloop (x ofclass Flashlight_) {
       if (x has on)
          na++;
    }
    if (na > 0)
       rtrue; ! se c'e' gia' almeno una accesa in gioco
    else
       rfalse;
];
[CountsFOff ns x;
    ns = 0;
    objectloop (x ofclass Flashlight_) {
       if (x hasnt on)
          ns++;
    }
    if (ns > 0)
       rtrue; ! se c'e' gia' almeno una spenta in gioco
    else
       rfalse;
];
[ WillRecurs o;
    if (c_style & ALWAYS_BIT ~= 0) rtrue;
    if (c_style & RECURSE_BIT == 0) rfalse;
    if ((c_style & FULLINV_BIT) && (o has transparent || o has
supporter || o has on || (o has container && o has open))) rtrue; !
distingue torce che contengono cose diverse e che sono accese/spente
nell'inventario
    if ((c_style & PARTINV_BIT) && (o has transparent || o has
supporter || o has on)) rtrue; ! distingue torce che sono
accese/spente nelle descrizioni
    rfalse;
];
[ WriteAfterEntry o depth stack_p
    p recurse_flag parenth_flag eldest_child child_count combo;
    inventory_stage = 2;
    if (c_style & PARTINV_BIT) {
        if (o.invent && RunRoutines(o, invent))                 !
These lines
            if (c_style & NEWLINE_BIT) ""; else rtrue;          !
added
        combo = 0;
        if (o has light && location hasnt light) combo=combo+1; !
aggiungi || o has on se vuoi (accesa/e) nelle descrizioni
!        if ((o has light && location hasnt light) || o has on)
combo=combo+1;
        if (o has container && o hasnt open)     combo=combo+2;
!        if ((o has container && (o has open || o has transparent)) !
ho sostituito queste due linee
!            && (child(o)==0))                    combo=combo+4;    !
per evitare parentesi dietro torce vuote
        if ((o has container && o has transparent)
            && (child(o)==0))                    combo=combo+4;
        if (combo) L__M(##ListMiscellany, combo, o);
    }   ! end of PARTINV_BIT processing
    if (c_style & FULLINV_BIT) {
        if (o.invent && RunRoutines(o, invent))
            if (c_style & NEWLINE_BIT) ""; else rtrue;
        if (o has light && o has worn) { L__M(##ListMiscellany, 8);
parenth_flag = true; }
        else {
            if (o has light)           { L__M(##ListMiscellany, 9, o);
parenth_flag = true; }
            if (o has worn)            { L__M(##ListMiscellany, 10,
o); parenth_flag = true; }
        }
        if (o has container)
            if (o has openable) {
                if (parenth_flag) print (string) AND__TX;
                else              L__M(##ListMiscellany, 11, o);
                if (o has open)
                    if (child(o)) L__M(##ListMiscellany, 12, o);
                    else          L__M(##ListMiscellany, 13, o);
                else
                    if (o has lockable && o has locked)
L__M(##ListMiscellany, 15, o);
                    else
L__M(##ListMiscellany, 14, o);
                parenth_flag = true;
            }
            else
                if (child(o)==0 && o has transparent)
                    if (parenth_flag) L__M(##ListMiscellany, 16, o);
                    else              L__M(##ListMiscellany, 17, o);
        if (parenth_flag) print ")";
    }   ! end of FULLINV_BIT processing
    if (c_style & CONCEAL_BIT) {
        child_count = 0;
        objectloop (p in o)
            if (p hasnt concealed && p hasnt scenery) { child_count++;
eldest_child = p; }
    }
    else { child_count = children(o); eldest_child = child(o); }
    if (child_count && (c_style & ALWAYS_BIT)) {
        if (c_style & ENGLISH_BIT) L__M(##ListMiscellany, 18, o);
        recurse_flag = true;
    }
    if (child_count && (c_style & RECURSE_BIT)) {
        if (o has supporter) {
            if (c_style & ENGLISH_BIT) {
                if (c_style & TERSE_BIT) L__M(##ListMiscellany, 19,
o);
                else                     L__M(##ListMiscellany, 20,
o);
                if (o has animate)       print (string) WHOM__TX;
                else                     print (string) WHICH__TX;
            }
            recurse_flag = true;
        }
        if (o has container && (o has open || o has transparent)) {
            if (c_style & ENGLISH_BIT) {
                if (c_style & TERSE_BIT) rtrue; !
L__M(##ListMiscellany, 21, o); ! modificata per non stampare il
contenuto delle torce
                else                     L__M(##ListMiscellany, 22,
o);
                if (o has animate)       print (string) WHOM__TX;
                else                     print (string) WHICH__TX;
                }
            recurse_flag = true;
        }
    }
    if (recurse_flag && (c_style & ENGLISH_BIT))
        if (child_count > 1 || eldest_child has pluralname) print
(string) ARE2__TX;
        else                                                print
(string) IS2__TX;
    if (c_style & NEWLINE_BIT) new_line;
    if (recurse_flag) {
        o = child(o);
        #Ifdef TARGET_ZCODE;
        @push lt_value; @push listing_together; @push listing_size;
        #Ifnot; ! TARGET_GLULX;
        @copy lt_value sp; @copy listing_together sp; @copy
listing_size sp;
        #Endif;
        lt_value = 0;   listing_together = 0;   listing_size = 0;
        WriteListR(o, depth+1, stack_p);
        #Ifdef TARGET_ZCODE;
        @pull listing_size; @pull listing_together; @pull lt_value;
        #Ifnot; ! TARGET_GLULX;
        @copy sp listing_size; @copy sp listing_together; @copy sp
lt_value;
        #Endif;
        if (c_style & TERSE_BIT) print ")";
    }
];
Include "ItalianG";
Extend 'rimuovi' first
    * multiinside                 -> Remove;

];
-- 
max "torredifuoco" bianchi