Problema con Bennugd

Started by oriun, October 01, 2010, 03:14:06 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Splinter como te vas a lo fácil :D.
Yo veo varias cosillas en el código
1.- ¿Que quieres hacer con  marcador() ?,  a mi me parece que no debería ir en el loop del prota, porque sino crearás un proceso de tipo marcador cada vez que se llame a marcador().

        if (key(_space))
            disparo();
            idmarcador=marcador();
        end

A lo mejor tienes que ponerlo antes de loop, pero vamos lo digo sin conocer el código de lo que quieres hacer con éste al completo :D.

        disparo();
      LOOP    //Repeticion
        if (key(_space))
            idmarcador=marcador();
        end

luego, veo que marcador solo lo instancias en protagonista, osea que puedes solventar el problema de process not active haciendo referencia al padre en vez de a id_prota

PROCESS marcador()
PRIVATE
int tempor;
BEGIN
    graph=25;
    x=father.x;
    y=father.y-16;
    LOOP
        if (exists(0))
            say("ok");
        else
            break;
        end
        if (father.flags==1)
            x=x+24;father
        end
        if (father.flags==0)
            flags=1;
            x=x-24;
        END
        tempor=tempor+1;
        if (tempor==2)
            tempor=0;
            break;
        END
        frame;
    END
END

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

oriun

Bien, el marcador es un proceso que sirve para indicar dónde va el disparo, porque este último es invisible.
Quote from: DCelso on November 15, 2010, 07:22:00 PM
luego, veo que marcador solo lo instancias en protagonista, osea que puedes solventar el problema de process not active haciendo referencia al padre en vez de a id_prota

PROCESS marcador()
PRIVATE
int tempor;
BEGIN
    graph=25;
    x=father.x;
    y=father.y-16;
    LOOP
        if (exists(0))
            say("ok");
        else
            break;
        end
        if (father.flags==1)
            x=x+24;father
        end
        if (father.flags==0)
            flags=1;
            x=x-24;
        END
        tempor=tempor+1;
        if (tempor==2)
            tempor=0;
            break;
        END
        frame;
    END
END



Ahora, creo que esta parte si es para SplinterGU. Error de BennuGD:

bgdi: interpreter.c:348: instance_go: Assertion `i' failed.
Cancelado

SplinterGU

posiblemente tengas versiones diferentes de dlls, o versiones mezcladas.

por algun motivo no es posible crear un nuevo proceso, aparentemente no se encuentra el tipo de proceso que se quiere crear, o quizas tengas demasiados tipos de procesos definidos.

tambien puede ser algun pise de memoria.

podrias dar mas detalles?

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

        if (exists(0))
            say("ok");
        else

0 es invalido en exists, eso no esta permitido... retorna 0

el error esta en algun otro lado, intenta correrlo con log.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

oriun

#49
Frente a lo de las DLL's mezcladas no creo, porque uso Ubuntu 64bits, y no he instalado ninguna libreria adicional, excepto la libimage para el fpgeditor ese programado en bennu, el resto son del script.

Y con respecto al log: ¿Como se hace eso?
y otra cosa con respecto al crasheo del interprete: eso solo ocurre cuando en el marcador pongo father en vez de idprota.

DCelso

que quieres hacer con exists(0)? a ver si es eso.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

#51
más fallos, falta un frame al siguiente proceso:


PROCESS start ()
BEGIN
   LOOP
       idprota=protagonista();
       start_scroll (0, 0, 24, 0, 0, 0);
       bloques();
   END
END

a mi parecer, según creo que quieres hacer, sobra el loop end


PROCESS start ()
BEGIN
       idprota=protagonista();
       start_scroll (0, 0, 24, 0, 0, 0);
       bloques();
END

estabas creando infinitos procesos prota y bloques, por eso seguro que peta todo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

PROCESS start ()
BEGIN
    LOOP
        idprota=protagonista();
        start_scroll (0, 0, 24, 0, 0, 0);
        bloques();
    END
END


Con eso se podría terminar el mundo, ese fragmento de código debería estar prohíbido.

Nada, simplemente ten en cuenta que lo que hay dentro del LOOP se invoca unas 25 veces por segundo, hay que distinguir entre lo que quieres que suceda una vez y lo que quieres que suceda 25 veces por segundo :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

no, esto es más de 25 veces, porque no tiene la palabra frame, esto es las veces que pueda el procesador,jajaja.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind


SplinterGU

no tiene que ver con contador, pero si puede ser esto que dicen aca.

la linea mencionada es cuando se lanza un proceso o llama a una funcion, cuando se quiere crear la instancia esta falla, no por memoria porque la memoria tiene un assert, sino cuando se intenta busca el tipo de proceso a crear, quizas algo se pisa al hacer semejante loop sin un frame.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

oriun

Crucificadme!!  ;D. Fallo de principiante.
Cuando lo pruebe os cuento.

oriun

¡¡¡Solucionado!!! Ahora solo hace falta la música y los highscores.

oriun

Por fin solo puedo preguntar cosas ¡¡Jaja!!
Mi pregunta es: Cuanto pulsas una tecla esa acción se repite como el Rapidfire en los emuladores. ¿Cómo puedo hacer que cuando le das a una tecla solo coja una pulsación?

DCelso

dos formas:
1.- la que te puse en el menú.
     if (key(_1))
        //lo que sea que haga el _1
       while(key(_1)) frame;end
    end
2.-
    global
     misteclas[200];
    end
    ....
     if (key(_1)&& misteclas[_1]==0)
      // lo que sea que haga el _1
      misteclas[_1] =1;
    else
      misteclas[_1] =0;
    end
    frame
    ...
En el primer caso el proceso queda bloqueado hasta que se suelte la tecla (bueno para menues)
En el segundo caso el proceso no se bloquea pero tiene que estar haciendo asignaciones en todos los frames.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/