problemas con el código de bennugd del SVN

Started by DCelso, January 30, 2011, 11:50:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Hola Splinter, me he bajado el código completo que hay actualmente en SVN, he compilado con tu script build-std-unix.
Y he probado este código y me da errores en las colisiones.


Global
profundidad = 16;
FPSteoriocos = 60;
ancho = 480;
alto = 272;
duracion_maxima = 80000;
tiempo_ini, tiempo_actual;
duracion_restante;
int ganar = 0;
function keyjoy(int id)
begin
if (key(id))
return 1;
end
return 0;
end
Begin
    set_mode(ancho,alto,profundidad);
    set_fps(FPSteoriocos,0);
    tiempo_ini = get_timer() + duracion_maxima;
   <b> globos(140,150,RGb(255,0,0));</b>
    globos(200,150,RGb(255,255,0));
    globos(260,150,RGb(0,0,255));
    cohete(ancho/2,alto - alto/5);
    write_var(0,ancho/2,5,0,duracion_restante);
    while (!keyjoy(_esc))
        duracion_restante =  (tiempo_ini- get_timer())/1000;
        if (duracion_restante <= 0)
            write(0,100,100,0,"se acabó el tiempo");
            while (!keyjoy(_enter)) frame; end;
            break;
        end
        if (ganar)
            write(0,100,100,0,"Has cazado el anillo");
            write(0,80,140,0,"Pulsa enter para terminar");
            while (!keyjoy(_enter)) frame; end;
            break;
        end
        if (keyjoy(_f))
            full_screen = !full_screen;
            set_mode(ancho,alto,profundidad);
        end
        frame;
end
let_me_alone();
end

process cohete(x,y)
private
    horizonte ;
    id_colision;
    colision_x;
    colision_y;
begin
    horizonte = alto - alto/5;
    graph = new_map(50,50,profundidad);
map_clear(0,graph,RGB(255,0,0));
while (!keyjoy(_esc) )
        if (ganar)
           while (!keyjoy(_enter)) frame; end;
            break;
        end
        if (keyjoy(_left))
            x--;
end
        if (keyjoy(_right))
            x++;
end
        if (keyjoy(_down))
            y++;
end
        if (keyjoy(_up))
            y--;
        end
        id_colision = collision(type globos);
        if (id_colision)
            ganar = 0;
    colision_x =  x - id_colision.x;
    colision_y =  y - id_colision.y;
            if ( colision_x  > -4 and  colision_x < 3 )
                if ( colision_y > 46 and  colision_y < 51 )
                    ganar = 1;
                end               
            end
        end
        Frame;
end
unload_map(0,graph);
end

process globos(x,y, color)
private
    int direccion = 1;
begin
    graph = new_map(30,30,profundidad);
map_clear(0,graph,color);
while (!keyjoy(_esc) )
        if (ganar)
           while (!keyjoy(_enter)) frame; end;
            break;
        end
        Frame(100);
end
unload_map(0,graph);
end


Si colisionamos con el cuadrado azul o amarillo, nos da segmentation fault.

Si colisionamos con el cuadrado rojo, nos da:ERROR: Runtime error in COHETE(65543) - Process 65537 not active (curiosamente es el primer proceso globo definido siempre)

Si bajamos los fps teóricos de 60, a 30, nos da el segmentatión fault justo al mover el personaje principal cuadrado rojo grande.

, el Segmentation fault lo he logrado quitar cambiando la línea 466 de instance.c por esta
        if ( brother  && LOCDWORD( r, BIGBRO )  )

(esto ya te lo comenté en otro post, pero pasaste un poco de mí)

El error de process 65537 not active no logro saber como arreglarlo, supongo que no se metió en la tabla de hashs ids bien o get_instance me dió un proceso equivocado, pero no logro solventar el problema.

Prueba tu el código adjunto a ver si también te pasa a ti en tu versión local de bennu, o es que estoy compilando yo algo mal :'(.
Monstruos Diabólicos

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

DCelso

umn, :o el mismo código en fenix, no falla.

no se, se me ocurre downgradear bennu, para ver qué cambio produjo este error.
Monstruos Diabólicos

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

SplinterGU

el cambio que has puesto no tiene sentido...

una pregunta, me da la sensacion que no queda claro el uso de LOCDWORD (o cualquier otra del grupo), cierto?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

a verg...

id es una variable reservadas, que el motor usa para asignar un identificador unico a cada proceso, y se apoya en esta variable para hacer cosas como busquedas de procesos, asignacion de variable, colisiones, y un sin fin de operaciones... si vos usas esa variable dentro de un proceso para asignarle un valor, entonces estas en un serio problema...

reemplaza la funcion keyjoy, por esta

function keyjoy(int key_id)
begin
   if (key(key_id))
      return 1;
   end
   return 0;
end

ahi vas a dejar de tener cuelgues, saludos...

PD: en fenix andara de casualidad, en algunos casos en concreto, pero si haces eso, no dudes que tarde o temprano va a reventar todo por los aires.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Monstruos Diabólicos

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

DCelso

jo, que malo soy, me suena que esto ya me pasó antes, caí dos veces ya. :'(, ayudaría si diera un warning al compilar :D.
Monstruos Diabólicos

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

SplinterGU

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

SplinterGU

Quote from: DCelso on January 31, 2011, 01:35:17 AM
jo, que malo soy, me suena que esto ya me pasó antes, caí dos veces ya. :'(, ayudaría si diera un warning al compilar :D.

el core no sabe que variables son solo de escritura o de lectura o ambos, si supiera eso, directamente no seria necesario un warning.

no se puede poner un warning por cada vez que alguien quiere usar una variable definida en un modulo, porque muchas veces son validos... la cosa es que el usuario debe saber que variables tocar y que no... las variables que actualiza solo el sistema no deben ser tocadas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

Por cierto... ¿dónde se descargan los fuentes de Bennu?, pues fallan los enlaces a estos que hay en http://www.bennugd.org/node/2...

Necesito documentación de ciertas funciones así como novedades del lenguaje y me temo que ésta es la más explicativa :-)

Saludos.

DCelso

Hombre MythomizeR tu por aki,  en sourceforge
Monstruos Diabólicos

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

MythomizeR

#10
Qué pasa DCelso? por aquí ando de nuevo de cuando en cuando desde hace un tiempo :-P

Por Sourceforge ando pero la cosa es que he encontrado los fuentes pero sin empaquetar, y no en un .tar o algo así para bajarlos de una :-)

Pero miraré mejor a ver...


ATENCIÓN: EDICIÓN...

Asociando tu respuesta con un post de un hilo que he ledio antes donde alguien cuenta que sourceforge anda caida porque no sé que está haciendo, deduzco que eso mismo, que está caida la página y no voy a poder descargar de momento... ¿me equivoco? :-)

DCelso

pues parece que tienes razón, habrá que esperar un poco.
Monstruos Diabólicos

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

SplinterGU

el svn por linea de comandos funciona... o por lo menos a mi no me da error.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Por lo que he leído, han cerrado el servidor que se encargaba de la visualización por web del repositorio, pero los creo qeu el servidor de SVN como tal está funcional, sólo sigue las instrucciones que te vienen en la página del proyecto en SF.

MythomizeR

Ok, gracias a todos.

De todas formas ayer, viendo el panorama, ya me estuve bajando uno a uno los fuentes de los módulos que me interesaban :-)

¡Saludos!