A vueltas con el modo7

Started by Drumpi, June 09, 2010, 11:07:45 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

drumpi, he puesto el suelo en el suelo y el proceso en el suelo tambien (cero), y tambien qe el centro sea el proceso.

tenes un error conceptual en lo que estas haciendo, quizas debido a que las variables tampoco tienen nombres muy amigables.

sin embargo creo que algunas cosas estan al reves, por ejemplo, alturas negativas ponen los m7 arriba, lo mismo las z, z negativas dibujan por detras, creo que eso esa al revez, pero no estoy seguro, tengo que mirarlo con detenimiento.

te copio aca el codigo modificado de lo que me mandaste por pm, aun tengo que ver cosas como el color, para ver como se usan.

lo del proceso que vibra necesita correccion, ahora me pongo a ver que es.

con respecto al modulo, he visto cosas que hay que corregir, como variables demas que nunca se usan y fue por copy&paste.


program test_mode7;

GLOBAL
   int graficos1;
   int color;
BEGIN
   //scale_mode=scale_nofilter;
   set_mode(320,240,8);
   set_fps(50,0);

   graficos1=load_fpg("graf2.fpg");
   say(itoa(graficos1));

   start_mode7(0,graficos1,1,0,0,64);
   start_mode7(1,graficos1,2,0,0,64);
   //m7.color=rgb(0,128,255);
   m7[0].color=127;
   m7[0].camera=id;

   m7[0].height=1; //A cierta altura del fondo
   m7[0].distance=0; //A cierta distancia del fondo original
   m7[0].focus=256;

   m7[1].color=123;
   m7[1].camera=id;

   m7[1].height=-32; //A cierta altura del fondo
   m7[1].distance=0; //A cierta distancia del fondo original
   m7[1].focus=256;
   m7[1].z=m7[0].z+1;

   ctype=c_m7;

   //cflags=1;

   resolution=100;
   //coche(graficos1);
   //file=graficos1;
   //graph=3;
   write_int(0,0,0,0,&color);

   coche2(graficos1);

   while (!key(_esc))
       color=map_get_pixel(graficos1,2,x/resolution,y/resolution);
       if (key(_up)) x+=100; end
       if (key(_down)) x-=100; end
       if (key(_left)) y-=100; end
       if (key(_right)) y+=100; end
       if (key(_c_minus) && m7[0].height>9)
           m7[0].height--;
           m7[1].height--;
       end
       if (key(_c_plus))
           m7[0].height++;
           m7[1].height++;
       end
       if (key(_w)) advance(100); end
       if (key(_s)) advance(-100); end
       if (key(_a)) angle+=2000; end
       if (key(_d)) angle-=2000; end

       if (key(_f1)) m7[0].focus--; end
       if (key(_f2)) m7[0].focus++; end
       if (key(_z)) m7[0].distance--; end
       if (key(_x)) m7[0].distance++; end
       if (key(_c)) m7[1].height--; end
       if (key(_v)) m7[1].height++; end
       frame;
   end
   stop_mode7(0);
   let_me_alone();
END

process coche (file)
begin
   x=160;
   y=201;
   graph=3;
   signal(id,s_freeze);
   frame;
end

process coche2 (file)
begin
   y=100;
   graph=3;
   ctype=c_m7;
//    cnumber=0;
//    z=m7[0].z-2;
   height=0;

   resolution=100;

   loop
       /*while (x<320)
           x++;
           frame;
       end
       while (x>0)
           x--;
           frame;
       end*/
       x=father.x;
       y=father.y;
       xadvance(father.angle, 1000);
       //height=m7[0].height-9;
       frame;
   end
end


te copio el codigo para que lo compares, si me pongo a explicar va a ser largo e innecesario, ya que lo puedes ver por comparacion.

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

SplinterGU

Estuve trabajando bastante en el asunto, el problema de la vibracion es que tu camara no es un proceso c_m7 (a mi ya no me pasa desde que lo puse como c_m7).
Luego he encontrado y corregido un par de cosas, como ser que el centro de la rotacion no estaba posicionado correctamente, ya esta corregido, aun sigo teniendo el grafico que no se pone en el suelo.

y con respecto a los height de los planos creo que estan al revez, un positivo pone el plano por debajo y un negativo por arriba, no se si esto deberia ser asi o esta mal.

pero ya tengo un m7 mejor, en prueba, debere por unos dias pararlo, porque ahora tengo trabajo por hacer.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Huy que emoción novedades en el modo 7... Recuerdo que me puse a usar Bennu3D cuando ví que el modo 7 no me ofrecía lo que quería, la verdad era complicadete, cualquier descarga para ver lo que andáis haciendo se agradecerá :D
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

SplinterGU

solo probando en linux.

igual no creo que te ofrezca gran cosa el modo 7, es poner planos horizontales con perspectiva, y dibujar procesos (que no rotan sobre si mismo, salvo como rotan en 2d) puestos en perspectiva 2d (o sea, se ven mas grandes o mas chicos y mas arriba o mas abajo)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Hombre, un modo7 siempre es un aire retro interesante, que bien aprovechado se pueden hacer cosillas en pseudo3D sin necesitar mucha máquina :)
Ahí está el Kario, Wacky Weels, Street Racer o el bonus de Sonic CD.

No he tenido tiempo de mirar lo que pusistes, Splinter, lo siento: mi equipo del concurso requiere que atienda otras peticiones más urgentes, y la librería ncurses hace cosas raras emitiendo por el telnet del puerto serie :S

En teoría, height indica la altura respecto al modo7, positivo arriba (creo, no he mirado la ayuda de div), y Z funciona igual que siempre en los m7: más negativo, más por encima se dibuja, en los procesos creo que va ligado la Z a las coordenadas X e Y (¿o era la altura del modo7?).
Lo siento, últimamente no pienso con claridad. ^^U

Tu tómate tu tiempo, a las malas, cambio el objetivo del nivel o cambio el nivel directamente, pero vamos, aun tengo más cosas por hacer de cara a final de mes ;)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

El modo 7 tiene que estar si o si.

Drumpi

Vale, he probado el código, y siguen los problemas de temblores. Si bien el proceso coche2 ahora si tiene un tamaño adecuado (tendré que jugar con focus) sigue teniendo los problemas que comentaba con el cambio de altura: en cuanto he levantado la cámara, el proceso coche ha "subido" durante los primeros pixels y al quedarse a media atura ha dejado de hacerlo, y al atravesar el techo ha aparecido el "segundo" coche2 (el eco para el segundo modo7).
También he visto que el techo se dibuja por detrás del suelo, dando un efecto extraño, por lo que las z de los modos 7 estaban bien definidas... y aun así se siguen tapando los procesos por encima del techo: no se ven hasta que m7[x].height>=0.

PD: comprobado, la variable local height no tiene ningún efecto sobre la altura de un proceso con c_type=c_m7, y z tampoco.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Drumpi

Buenas noticias: la variable local HEIGHT si que tiene efecto, sólo que prece que está mal calibrado: en la prueba que he hecho, con el m7[0].height=9, la posición correcta sería con height=-170 (a ojo, haciendo rotaciones cerca de él y comprobando que no se movía del pixel), pero con el m7[0].height=4 aproximadamente sería una HEIGHT=0, y con m7[0].height=0 no hace ni caso. Parece que a partir de m7[0].height=60 se comporta de forma más lineal, por lo que es posible que haya alguna función tangencial o exponencial por ahi mal calculada.

Esto probando con esto:
[code language="bennu"]program test_mode7;

GLOBAL
    int graficos1;
    int color;
BEGIN
    //scale_mode=scale_nofilter;
    set_mode(320,240,8);
    set_fps(50,0);
   
    graficos1=load_fpg("graf2.fpg");
    say(itoa(graficos1));
   
    start_mode7(0,graficos1,1,0,0,64);
    //start_mode7(1,graficos1,2,0,0,64);
    //m7.color=rgb(0,128,255);
    m7[0].color=15;
    m7[0].camera=id;
   
    m7[0].height=9; //A cierta altura del fondo
    m7[0].distance=12; //23; //A cierta distancia del fondo original
    m7[0].focus=256; //128;
   
    m7[1].color=15;
    m7[1].camera=id;
   
    m7[1].height=-6; //A cierta altura del fondo
    m7[1].distance=12; //23; //A cierta distancia del fondo original
    m7[1].focus=256; //128;
    m7[1].z=m7[0].z-1;
    ctype=c_m7;
    //cflags=1;
   
    resolution=100;
    coche(graficos1);
    //file=graficos1;
    //graph=3;
    //write_int(0,0,0,0,&color);
   
    coche2(graficos1);
   
    while (!key(_esc))
        color=map_get_pixel(graficos1,2,x/resolution,y/resolution);
        if (key(_up)) x+=100; end
        if (key(_down)) x-=100; end
        if (key(_left)) y-=100; end
        if (key(_right)) y+=100; end
        if (key(_c_minus) && m7[0].height>9)
            m7[0].height--;
            m7[1].height--;
        end
        if (key(_c_plus))
            m7[0].height++;
            m7[1].height++;
        end
        if (key(_w)) advance(100); end
        if (key(_s)) advance(-100); end
        if (key(_a)) angle+=2000; end
        if (key(_d)) angle-=2000; end
       
        if (key(_f1)) m7[0].focus--; end
        if (key(_f2)) m7[0].focus++; end
        if (key(_z)) m7[0].distance--; end
        if (key(_x)) m7[0].distance++; end
        if (key(_c)) m7[1].height--; end
        if (key(_v)) m7[1].height++; end
        frame;
    end
    stop_mode7(0);
    let_me_alone();
END

process coche (file)
begin
    x=160;
    y=201;
    size=200;
    graph=3;
    signal(id,s_freeze);
    frame;
end

process coche2 (file)
begin
    x=100;
    y=100;
    graph=3;
    ctype=c_m7;
    cnumber=0;
    z=m7[0].z-2;
    height=-170;
   
    //resolution=100;
    loop
        /*while (x<320)
            x++;
            if (key(_o)) height--; end
            if (key(_p)) height++; end
            frame;
        end
        while (x>0)
            x--;
            if (key(_o)) height--; end
            if (key(_p)) height++; end
            frame;
        end*/
        if (key(_o)) height--; end
        if (key(_p)) height++; end
        /*x=father.x;
        y=father.y;
        xadvance(father.angle, 1000);
        height=m7[0].height-9;*/
        frame;
    end
end[/code]

Acercate al coche2 que está parado en medio, gira la cámara con A y D y verás lo que te digo de mantenerse en el pixel (también es verdad que el centro del triángulo no está a los pies de este) y haz pruebas cambiando la altura del coche2 con O y P a distintas alturas del modo7 (+ y - del teclado numérico).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

ya lo del centro esta corregido, cuando tanga tiempo tengo que resolver lo del height, y ajustar eso, es correcto lo que decis, esta descalibrado, eso era lo que intente decir, por si no se entendio
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

blostec

Tus tests son de gran utilidad para mejorar el modo 7, muchas gracias Drumpi.

Drumpi

Quote from: blostec on June 16, 2010, 09:29:06 AM
Tus tests son de gran utilidad para mejorar el modo 7, muchas gracias Drumpi.

Ojalá fuera un test, en estos momentos es una de mis pesadillas :D :D :D
Si todo va bien, lo vereis en un par de semanas en vuestras WIZ (si Anarchy permite publicar, si no tendréis que esperar al resultado). Por bien se entiende que nos de tiempo y que funcione bien (eso incluiría las correcciones de bennu si le da tiempo a Splinter a sacar una nueva versión en 7 días).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

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

Drumpi

El concurso acaba el 30 de julio, pero yo me voy todo el mes de vacaciones, por lo que no voy a poder programar, así que debo tener toda la parte de código lista para el día 1, luego que se las arreglen mis compañeros de fatigas para sustituir todos los gráficos de los FPG y los sonidos y músicas ^^U
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

dudo que yo en 7 dias tenga esto listo, ya que los proximos 10-15 dias tengo que trabajar a toda maquina, para hacer una entrega.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

#29
No importa, de momento lo hago a ratos. Sólo me falta conseguir que los otros coches puedan saltar de un modo7 al otro y listo. Si tengo re recurrir a alguna argucia gráfica, pues nada, se hará, aunque sea sólo cambiar el cnumber para que hagan un "salto fantasma".

Por cierto, lo del cnumber no lo entiendo: lo pongo a 0 y se ese proceso en ambos modos7, y si lo pongo a 1 se ve en el m7[1] y no en el m7[0]. Tendré que mirarlo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)