Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [InfoLib] Hack pesante alla libreria 6/11 e comitato di sviluppo

 APRI IL LIBRO BIANCO
Il libro oppone una fiera ed innaturale resistenza.
Ora va molto meglio!
Va detto che questo tipo di intervento coinvolge pesantemente la libreria 6/11 e
fa si' che, di fatto, si ottenga una nuova versione che potremmo chiamare 6/11b,
o magari addirittura 6/12.
Ne parlavo con Paolo Lucchesi oggi pomeriggio e in quest'ottica il discorso
potrebbe farsi più ampio e implicare un comitato di mantenimento e sviluppo
della libreria 6/11 standard per Inform 6, dal momento che con Inform 7 si è
presa una strada diversa che taglia i ponti con il passato (o quantomeno con la
libreria 6/11 che noi utilizziamo con Inform 6.30).
Sto lavorando per arrivare ad una versione completa di questo hack, nella
speranza di proprlo e di provarlo assieme a voi per verificare effetti
collaterali e problemi di vario tipo.
Ciao,
PaoloM

 incorrere in effetti collaterali visibili al giocatore.
Sei sicuro che dietro non ci sia un errore docuto a qualche attributo mancante? 
Io ricordo che il container fosse una delle cose gestite bene da I6.
--
Inviato da X-Privat.Org - Registrazione gratuita 
http://www.x-privat.org/join.php

Io ricordo che il container fosse una delle cose gestite bene da I6.
Sicurissimo.
Durante lo sviluppo dei miei lavori ho sentito molto questo problema, in varie
forme.
Leggi queste considerazioni fatte su raif:
Before rules are carried out before anything else. Specifically,
visibility and touchability are not considered yet when a Before
rule is considered.  Instead rules take place specifically right
after touchabilty and visibility have been decided, but before
any check rules.
So it seems to me that Before rules won't be the right choice
very often, particularly when visibility and touchability will be
a common issue in your game. If there are transparent containers,
darkness, or weird visibility rules, then liberally using Before
seems likely cause bugs.
PaoloM

 collaterali e problemi di vario tipo.
La modifica dovrebbe essere semplice e dovrebbe essere limitata a 
BeforeRoutines in parserm.h.
Facci sapere.
HAPPY INFORMING!
Giovanni

Facci sapere.
No, in realtà non è così. Bisogna introdurre una nuova routine chiamata
InsteadRoutines, da affiancare a BeforeRoutines e AfterRoutines. E poi
introdurre una sua chiamata in ogni Sub. Per ottenere l'effetto che indico non
c'è altro modo, dal momento che ogni Sub esegue i controlli e modifica il world
model per conto proprio. (e infatti le chiamate a AfterRoutines sono effettuate
sempre manualmente in ogni sub).
PaoloM

 sempre manualmente in ogni sub).
Forse ho capito male la cosa (letto tutto molto di corsa), ma non puoi 
inserire la chiamata qui?
[ BeforeRoutines;
	if (GamePreRoutine() ~= 0) rtrue;
	if (RunRoutines(player, orders) ~= 0) rtrue;
		scope_reason = REACT_BEFORE_REASON; parser_one=0;
	SearchScope(ScopeCeiling(player), player, 0);
	scope_reason = PARSING_REASON;
	if (parser_one ~= 0) rtrue;
	if (location ~= 0 && RunRoutines(location, before) ~= 0) rtrue;
	! QUI INSERIRE L'HACK
	if (inp1 > 1 && RunRoutines(inp1, before) ~= 0) rtrue;
	rfalse;
];
Inserisci l'hack nel punto indicato. Dovresti:
1. Verificare se esiste una proprietà instead per inpl
2. Se sì, fare qualche verifica su parent(inpl) e eventualmente eseguire 
la before. altrimenti eseguire la instead.
3. se no, esegui la before come sempre
il problema è in RunRoutines(inpl, before) ~= 0 perché non solo verifica 
la presenza della before ma la esegue anche. Per quello che ho capito 
del problema, il punto è separare la verifica dell'esistenza della 
before dalla sua esecuzione.
Sicuramente il modo indicato da te è più elegante, ma forse è anche più 
invasivo sulla libreria. Se riuscissi a lavorare solo sulla 
BeforeRoutines, poi potresti semplicemente fare una estensione che fa un 
Replace BeforeRoutines sostituendo la routine di sistema con la tua. Non 
toccheresti minimamente la libreria originale. [naturalmente se riesci a 
fare una cosa del genere anche con l'approccio da te indicato, sarebbe 
anche meglio].
HAPPY INFORMING!
Giovanni

sempre manualmente in ogni sub).
Dico questo perché il controllo di visibilità e toccabilità di cui parlo in
realtà è eseguito in modo personalizzato da ogni Sub. E' tutta la parte di
codice che viene eseguita prima della modifica del world model; non è sempre la
stessa. E inoltre in questa fase di controllo le Sub spesso effettuano anche
altri controlli di coerenza (stai parlando con una persona? stai aprendo un
oggetto apribile? stai indossando un oggetto già indossato?), tutti effettuati
in loco dalla Sub in questione.
Agire in fase di BeforeRoutines generalizzando i controlli può provocare diverse
incongruenze, e comunque non sarebbe del tutto congruente.
PaoloM

inserire la chiamata qui?
Gio, sto uscendo or ora. Al ritorno controllo bene il tuo messaggio e il tuo
suggerimento. Una cosa posso dirti: ho iniziato ad imbastire l'hack per come ve
l'ho proposto (magari posto tutte le modifiche fatte) e i primi esperimenti
funzionano molto bene. Certo, è invasivo ma decisamente coerente dal punto di
vista della gestione del world model da parte delle routine Sub.
Comunque ne parliamo, grazie di tutto.
PaooM

 tagliato i ponti col passato. 
Ma chi si sta occupando della libreria 6/12? Graham in persona?
E c'e' un modo di collaborare/suggerire modifiche?
Perche', ad esempio questa di PaoloM mi pare che sia abbastanza 
importante, e difficilmente ottenibile con un'estensione (devo 
rifletterci, ma la soluzione che Giovanni propone nell'altro post non mi 
convince (o non l'ho capita)). Forse sarebbe una cosa da implementare 
nella libreria.
bye
-- 
Paolo Lucchesi
email: plucchesi(at)tin(dot)it
 

 Ma chi si sta occupando della libreria 6/12? Graham in persona?
Non e' dato sapere.
Il Codice da Vinci, al confronto e' una cosa da pivelli... ;)
Rob

 nella libreria.
Mi sono certamente espresso male. Quello che volevo intendere è che se 
l'hack di PaoloM modifica una o più funzioni di parserm.h (oltre a 
introdurne di nuove come la InsteadRoutines) queste possono essere 
sostituite fuori della libreria utilizzando un "Replace". Di fatto non 
modifichi il file originale e hai creato un'estensione.
HAPPY INFORMING!
Giovanni

modifichi il file originale e hai creato un'estensione.
Beh, sì, ma se l'hack coinvolge tutte le Sub della libreria standard capisci
anche tu che forse stiamo introducendo un comportamento talmente massiccio da
stare stretto in un'estensione.
Comunque nulla vieta di suggerire questa cosa direttamente alle alte sfere dello
sviluppo della libreria.
Io poi ho un sospetto: se è vero che I7 prevede questa "Instead" (che, a quanto
mi pare di intuire, proponga proprio la funzionalità di cui sto parlando), non è
che forse la libreria 6/10 che viene utilizzata da I7 sia già stata modificata
in tal senso?
PaoloM

 in tal senso?
La sto guardando proprio in questo momento.... :-)
Giovanni

 in tal senso?
Sto studiando un po' la situazione. A quanto pare dallo scorso 9 giugno 
la versione MAC di Inform già utilizza la libreria 6/11 e il compilatore 
è biplatform (la cosa non vale per la versione Windows). Vedendo la 
libreria (la versione Windows) sembra che non ci sia modifica nel senso 
del supporto per Instead. Ma analizzando il file delle Standard Rules 
(dentro Extension) si legge chiaramente che le regole per Istead sono 
implementate a livello di compilatore NI. Bisognerebbe fare un test: una 
piccola stanza in i7 in cui si usa instead e vedere il codice inform 6 
generato da NI. Sicuramente c'è qualcosa lì.
HAPPY INFORMING!
Giovanni

libreria 6/11 che noi utilizziamo con Inform 6.30).
spero che non vengano tagliati del tutto i ponti... e i follovap del
riccardi rincuorano.
max "torredifuoco" bianchi

una nuova orlibrary o platypus? ;)
No, la portata di questo hack sarebbe inferiore: la semplice aggiunta di una
proprietà "instead", da affiancare a "before" e "after". Comunque non è mia
intenzione forzare questa modifica. Io ne ho sentito molto la mancanza durante
lo sviluppo di Forma Mentis, anche perché in un'avventura One Room gli oggetti
sono stipati in spazi angusti e i problemi sopra esposti emergono più
facilmente.
Ho intenzione di concludere il lavoro; poi verificheremo assieme se la cosa
risulterà utile alla collettività o meno, senza problemi.
Ciao,
PaoloM