Bennu Game Development

Foros en Español => Recursos => Topic started by: SplinterGU on February 02, 2010, 02:09:08 AM

Title: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on February 02, 2010, 02:09:08 AM
signal_misc.prg


import "mod_proc";

/* ---------------------------------- */

local
    saved_status ;
end

/* ---------------------------------- */

function save_state_and_signal( int pid, int sig )
begin
    if ( sig >= S_TREE )
        sig -= S_TREE;
    end

    if ( sig >= S_FORCE )
        sig -= S_FORCE;
    end

    if ( !pid )
        while ( pid = get_id(ALL_PROCESS) )
            if ( pid != id && pid != father )
                pid.saved_status = get_status( pid );
                signal( pid, S_FORCE + sig );
            end
        end
    else
        if ( pid != father )
            pid.saved_status = get_status( pid );
            signal( pid, S_FORCE + sig );
        end
    end
end

/* ---------------------------------- */

function restore_state( int pid )
begin
    if ( !pid )
        while ( pid = get_id(ALL_PROCESS) )
            if ( pid.saved_status > 0 && pid != id && pid != father )
                pid.reserved.status = pid.saved_status;
                pid.saved_status = 0;
            end
        end
    else
        if ( pid.saved_status > 0 && pid != father )
            pid.reserved.status = pid.saved_status;
            pid.saved_status = 0;
        end
    end
end

/* ---------------------------------- */


save_state_and_signal( int pid, int sig ) es igual a un signal, salvo que guarda el estado actual de cada proceso.

restore_state( int pid ) restaura el proceso/s indicado al estado antes de save_state_and_signal

es una estupides gigante, pero vi que muchos se complican con esto.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: DCelso on February 15, 2010, 10:00:04 AM
He añadido al wiki este código, ahora bien, no se si está todo correctamente explicado, a ver si Sandman y josebita pueden revisar la "english grammar".
http://wiki.bennugd.org/index.php?title=Global_signals
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: BoMbErLiNk on February 15, 2010, 01:26:22 PM
Antes de ponerlo en la wiki, al compilar he visto varios problemas  :

- pid ya esta declarado
function restore_state( int pid )
private
    pid;

- S_TREE y S_FORCE no me los reconoce, que debería ir aquí ?
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: DCelso on February 15, 2010, 03:27:15 PM
Anda, es verdad, eso me pasa por meter código sin probar :(.
A ve Spinter, en mod_proc tenemos definidas estas constantes


INT S_KILL = 0
INT S_WAKEUP = 1
INT S_SLEEP = 2
INT S_FREEZE = 3
INT S_KILL_TREE = 100
INT S_WAKEUP_TREE = 101
INT S_SLEEP_TREE = 102
INT S_FREEZE_TREE = 103
INT S_KILL_FORCE = 50
INT S_WAKEUP_FORCE = 51
INT S_SLEEP_FORCE = 52
INT S_FREEZE_FORCE = 53
INT S_KILL_TREE_FORCE = 150
INT S_WAKEUP_TREE_FORCE = 151
INT S_SLEEP_TREE_FORCE = 152
INT S_FREEZE_TREE_FORCE = 153
INT S_DFL = 0
INT S_IGN = 1
INT ALL_PROCESS = 0

¿Hay que insertar dos nuevas, o hay que cambiar por alguna de estas?
Gracias de antemano, en cuanto lo sepa lo cambio en la wiki.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on February 15, 2010, 03:56:08 PM
es cierto

#define S_FORCE             50
#define S_TREE              100
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on February 15, 2010, 04:00:00 PM
copialo de nuevo y probalo.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: DCelso on February 15, 2010, 05:29:30 PM
confío en tí :D.
Subido de nuevo al wiki.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on February 15, 2010, 09:25:21 PM
probalo please...
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 03, 2010, 11:24:31 PM
fixeado!
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Futu-block on September 26, 2011, 09:35:37 PM
vamos a ver que me aclare, ciertas discusiones que me han mandado por aqui y el tema es viejaco asi que resumiendo:

¿Con este codigo le podemos mandar señales a procesos que ya esten congelados??
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: KeoH on September 26, 2011, 09:42:19 PM
Quote from: Futublock on September 26, 2011, 09:35:37 PM
vamos a ver que me aclare, ciertas discusiones que me han mandado por aqui y el tema es viejaco asi que resumiendo:

¿Con este codigo le podemos mandar señales a procesos que ya esten congelados??

si se pueden mandar señales a los congelados ... son la unica manera de descongelarlos xD
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Futu-block on September 26, 2011, 10:04:30 PM
vale, entonces me he explicado mal, lo que quiero es cambiar el valor de una variable dentro de un proceso congelado...
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 26, 2011, 10:12:42 PM
a ver... las signals van a todo proceso, no importa el estado que este tenga... un signal le cambia el estado a un proceso... y no solo afecta a los que estan corriendo...

para cambiar las variables de un proceso, tenes que hacer idproceso.variable... eso creo que ya lo sabes.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Futu-block on September 27, 2011, 07:22:46 AM
ups
me ahorraré comentarios hasta que no tenga claro que es lo que me falla, que ya estoy liando la pita ;D
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Outlaw on September 28, 2011, 03:04:18 AM
Hola Splinter! Revivo este post debido a la búsqueda que realicé por todo el foro en busca de como pausar un juego, sin hacerlo directamente del main (antes existía al parecer la función signal_all para este fin), es decir, desde un proceso "menu pausa" que cito a continuación:



Process Menu_salida()
Private
int id_txt[1];
int id_cursor;
int n;
End
Begin
save_state_and_signal(0,s_sleep);      // Freezes all processes.
id_txt[0]=Write(fnt_titulos,300,100,4,"Volver");
id_txt[1]=Write(fnt_titulos,300,150,4,"Salir");
id_cursor=Cursor(300,100,fpg_hud,18,100,150,50);
Loop
If (id_cursor.y == 100 and key(_enter))
While (key(_enter)) Frame; End
From n=0 to 1;
Delete_text(id_txt[n]);
End
restore_state(0);  // restore all processes
Break;
End
If (id_cursor.y == 150 and key(_enter))
While (key(_enter)) Frame; End
Exit();
End
Frame;
End
End



Lo que sucede acá es que. habiendo usado las funciones que creaste, la cual la primera anda bien, al restaurar el estado inicial de todos los procesos, sucede que pareciera que hace un s_kill, porque me desaparecen todos menos el main, quedando a la vista solamente el fondo del mapa con los puntajes solos, sin el personaje, ni el hud, nada. ¿Alguien encontró este tipo de error? ¿Que estaré haciendo mal?
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 28, 2011, 03:28:21 AM
codigo completo por favor... yo no veo nada mal en tu codigo...
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Outlaw on September 28, 2011, 04:15:29 AM
link: borrado
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 28, 2011, 07:20:07 AM
claro, el problema es que estabas usando un codigo viejo... igual habia algun detalle que corregir en la funcion, volve al indice, bajate la nueva funcion y probalo.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 28, 2011, 07:20:49 AM
Quote from: DCelso on February 15, 2010, 10:00:04 AM
He añadido al wiki este código, ahora bien, no se si está todo correctamente explicado, a ver si Sandman y josebita pueden revisar la "english grammar".
http://wiki.bennugd.org/index.php?title=Global_signals

hay que corregir la wiki.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 28, 2011, 07:26:05 AM
Outlaw, el juego esta muy bueno, me enganche jugando un rato, hasta llegar donde esta un lobo o algo asi... :)
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Outlaw on September 28, 2011, 05:22:25 PM
Mil gracias por tu ayuda! Entonces el nuevo código está al principio de este post si mal no entiendo...
Y gracias también por haberlo jugado y que encima te haya enganchado!  :)  (En la ultima pantalla de la demo, hay un lobo, el asunto es que hay que usar un cuchillo, que se encuentra en cierto lugar...) Me faltan unos detalles para terminar esta versión, espero subirla lo antes posible, por supuesto karmazo para vos!
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 28, 2011, 05:49:33 PM
agarre el cuchillo, claro que si, lo que no se es como usarlo... tampoco me puse a revisar el codigo...

pero me gusta el trabajo que estas llevando... felicitaciones!
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: FreeYourMind on September 28, 2011, 06:25:32 PM
Es que sois unos artistas, por suerte me baje el juego esta mañana antes de salir de casa, asi que voy a ver si lo encuentro y probar el juego, ya que me estais haciendo babear de curiosidad  ;D
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Outlaw on September 28, 2011, 07:27:37 PM
Gracias Splinter creeme que me pone mas las pilas para terminarlo... Free te cuento que estoy por subir la demo completa en estos dias, por lo tanto les recomiendo jueguen a esa version, ya que a la que subi ahora le faltan dialogos por ejemplo... De todas maneras gracias por el interes!
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: FreeYourMind on September 28, 2011, 08:29:11 PM
Esta muy chulo el juego, yo si encontré el cuchillo :) Pero el perro todavia no muere. Muy buenos gráficos.

Por cierto te comento un bug:

La primera vez que jugue he ido por arriba, entre los arvoles, al pasar el primer mapa se salio.
La segunda vez que jugue, fui por el camino y ya salio el texto, en este caso si paso al segundo mapa, deduzco que ha sido por no activarse el texto en la primera partida.
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: KeoH on September 28, 2011, 08:40:08 PM
Quote from: FreeYourMind on September 28, 2011, 08:29:11 PM
entre los arvoles


Mis ojoooooooooooooooooooooooooooooooos xDDDDD
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Outlaw on September 29, 2011, 12:19:18 AM
Gracias Free por tu aporte, la verdad tendré que revisarlo a ese bug, nunca lo había visto, pero por eso testean los juegos no? jajaja! Estoy por subir la versión demo completa, ese error lo corregiré después, tengo los ojos cuadrados ya!  ;)
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: SplinterGU on September 29, 2011, 02:43:06 AM
si, bueno, cuando estaba con el lobo, lo deje trabajo entre unas piedras o algo asi... y luego yo me fui por el camino que va para abajo y se salio el juego, yo supuse que era intencional, que ahi terminaba el demo...
Title: Re: [CODE] funcion para enviar signals globales y luego recuperar su estado original
Post by: Outlaw on September 29, 2011, 05:29:12 PM
Exacto, termina ahi la demo, lo que pasaba con esa versión es que faltaba agregar una pantalla más que explica lo que sucede cuando se toma ese camino...en la versión que subí ayer ahora si está todo completo...gracias por jugarlo!