Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [inform] domanda

Abbiate pazienza...
Sto' cercando di implementare un'altra di quelle caratteristiche che 
probabilmente saranno mal viste da tanti, spero non tutti...
L'obbiettivo è fare in modo che il gioco una volta inserita l'azione 
mostri i risultati della stessa, quindi alla pressione del tasto pulisca 
lo schermo e ridia la descrizione della locazione e l prompt.
In MAC tale risultato lo otterrei semplicemente inserendo i comandi 
"pause 0 cls redesc" all'inizio della sezione Action.
In inform ho qualche difficoltà in più, non tanto nei comandi ma nel 
punto esatto in cui inserirli.
Al momento ho inserito il codice:
sub_aspetta(); !aspetta la pressione di un tasto
sub_pulisci(); !pulisci lo schermo
<<look>>; !ridai la descrizione della locazione
nella routine entry point "timepasses" che viene chiamata alla fine di 
ogni turno. La cosa funziona piuttosto bene ma il problema è che non 
tutte le azioni vengono considerate turni, così i salvataggi o anche i 
comandi non riconosciuti non richiamano il codice (credo).
Usando lo stesso codice nell'entry point "GamePostRoutine" invece il 
gioco crasha come se continuasse a ripetere le operazioni di pulizia 
schermo e ridescrizione in un loop senza uscita.
Suggerimenti su come posso intercettare anche i comandi che non sono 
turni (o non sono comandi riconoscibili?
grazie e scusate se rompo spesso ultimamente...
ciao

 turni (o non sono comandi riconoscibili?
nessuno?

 > turni (o non sono comandi riconoscibili?
Usare un daemon?
-- 
Paolo Vece - 
pv...@inwind.it
 - 
http://www.vece.net

 
non sono uno esperto quindi potrei sbagliare (anche perchè ho provato 
con un daemon semplice semplice), però mi sembra che  anche i demoni 
seguano i turni, se ad esempio do semplicemente un invio il programma mi 
risponde "scusa?!" e mi ridà il prompt, ma non esegue daemon.
Lo stesso se ad esempio do il comando "score"...
aiuto Aiuto AIUTO!!!
:(

 risponde "scusa?!" e mi ridà il prompt, ma non esegue daemon.
leggi il codice di scenic.h, in particolare i flag che attivano/disattivano il 
conto dei turni quando si "esamina" una proprietà scenic in base alle preferenze 
del programmatore

 <<look>>; !ridai la descrizione della locazione
Puoi postare il codice della tua GamePostRoutine? Altrimenti prova ad
inserirlo in una GamePreRoutine.
HAPPY INFORMING
Giovanni

 Puoi postare il codice della tua GamePostRoutine?
si certo, al momento ho solo tre routine entry point (più una 4° in 
scenic.h che se non ricordo male dovrebbe chimarsi ParseError):
! in questa routine alla fine di ogni turno aspetto la pressione
! di un tasto quindi pulisco lo schermo e ristampo la descrizione
! Ci sono 2 eccezioni: quando si cambia locazione non aspettare la
! pressione del tasto, ma pulisci lo schermo e ridai la descrizione
! direttamente. La seconda eccezione è per la prima mossa, ho dovuto
! inserirla non so nemmeno io perche', ma così funziona. (senza alla
! prima mossa non si fermava ad aspettare la pressione del tasto)
! sub_aspetta non fa altro che attendere la pressione di un tasto
! ho preferito scrivere una routine perchè mi è più facile ricordare
! il nome
[ TimePasses;
	if (var_spostamenti == 0) sub_aspetta();
	else var_spostamenti = 0;
	if (var_inizio == 1)
	{ var_inizio = 0; sub_aspetta(); glk_window_clear(gg_mainwin);}
	else glk_window_clear(gg_mainwin);
	<<look>>;! ridà la descrizione.
];
! questa funzione viene richiamata ogni qual volta si cambia stanza
! prima della descrizione:
[ NewRoom;
	var_spostamenti = 1;
! evita che al cambio di stanza si chieda la pressione del tasto per
! continuare.
	glk_window_clear(gg_mainwin); ! pulisce lo schermo
];
! al momento l'unica funzione di questa routine è quella di aggiornare
! la finestra dell'inventario, ho più o meno seguito lo schema di SCHIZO
[ GamePostRoutine;
	sub_inventario();
	rfalse;
];
! questa è la routine dell'inventario, l'ho messa per completezza
[ sub_inventario obj;
	if (~~player)
		return;
	glk_set_window(gg_inventarywin);
	glk_window_clear(gg_inventarywin);
	if (var_inventario == 1) { sub_stile(5); 
glk_image_draw(gg_inventarywin, inventary_pic, 0, 0); print "^"; 
sub_stile();}
	else glk_window_clear(gg_inventarywin);
	objectloop (obj in player) {
		sub_stile(5);
		glk_image_draw(gg_inventarywin, obj.image, imagealign_InlineCenter, 0);
		sub_stile();
	}
	glk_set_window(gg_mainwin);
];
Ho provato a inserire il codice nella GamePostRoutine ma con pessimi 
risultati. Hai qualche idea?
ciao

Stefano Gaburri ha scritto:

argh, ho paura di essere ben lontano da poter gestire un codice così 
nonostante i commenti...
l'unica cosa che mi sembra di capire è che
	InformLibrary.end_turn_sequence();
fa in modo che il comando dato non venga conteggiato tra i turni.
:(

"riktk" <rik...@NOSPAMtiscalinet.it> ha scritto nel messaggio
news:gtPba.49032$pG1.1...@news1.tin.it...

OK, ma qual è il codice che non funziona? Questo da come ho capito va bene.
Le istruzioni di TimePasses le metti in GamePostRoutine, vero? Ma prima o
dopo sub_inventario()? Non è che l'errore sta nel fatto che il codice viene
eseguito all'interno della finestra dell'inventario generando l'errore di
cui parli? Se togli sub_inventario() l'errore si verifica comunque?
HAPPY INFORMING
Giovanni

 cui parli? Se togli sub_inventario() l'errore si verifica comunque?
No, ho provato anche ad eliminare l'inventario ma non sembra essere 
quello a dar fastidio.
Inserendo il codice che ho in timepasses nella routine gamepostroutine
ho l'errore "Glulx error stack overflow in CallSub."
In pratica il prompt non viene mai visualizzato ed il gioco continua a 
stampare la descrizione (intervallata dalla richiesta della pressione di 
un tasto). Ho fatto qualche altra prova ed il problema sembra essere 
dato dal comando <look> (o <<look>> ho provato con entrambi) 
eliminandolo infatti il gioco non va in loop ma poi mi risulta 
impossibile vedere la descrzione della locazione anche dando il comando 
guarda (e vai a sapere perchè).
ciao