Bug GORDO!

Started by Noivern, January 05, 2011, 05:34:21 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Noivern

#30
Solo les tiro freeze cuando sale el contador de tiempo para continuar. Y los descongelo cuando continuas...
Y no tienen sig_ign (que por cierto, no se que es :$)

Es jodidamente extraño, ya que el proceso enemigo (process malo()) es único para todos los enemigos excepto el jefe, cambian sus lógicas de movimiento y atributos iniciales, pero las condiciones de colision/recibir daño/muerte es la misma para todos... no entiendo por que falla solo 1 caso :S

--edit--

Olvidé mencionar que no uso punteros creados por mi... ni siquiera para mostrar datos, ahora uso todo con write_var

SplinterGU

por favor, intenta deshabilitar todos los enemigos y objetos y solo deja los escuadrones y ahi probamos nuevamente.

solo nave y escuadrones con problemas... a ver que pasa.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Noivern

Ok, me voy a demorar unos minutos... En cuanto lo tenga lo subo

SplinterGU

en windows me paso lo que te pasa a vos...

comente la linea que dice      invulnerable = false; y ahora puedo probar en windows bien...

me suena que si mueren antes de que peguen el primer giro, aparecen in-eternum.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Noivern

#34
:o
¿En el proceso nave() comentaste eso?
A un primo que le pedí que probara y  tambien le pasa.
Comenté todos los enemigos, nubes y gran nube; solo se crean las formaciones con problemas (las que llamo looperos)
Eso si, deje todo lo demas (items, indicadores en pantalla, etc)
¿sirve asi? ¿lo subo?

Noivern

Filo, me voy a acostar, asi que lo subo :P
link:
http://www.mediafire.com/?n24o1ks20by27qo

Esta compilado en modo test (fijate en el compilar_test.bat), te permite cambiar de arma con el tabulador, cambiar el poder del arma con las teclas del 1 al 4, llenarte de misiles con el 0 y ser inmortal con la espaciadora. Además se puede sacar la consola debug.

SplinterGU

ya lo estaba haciendo yo, luego te aviso si encuentro algo...

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

Noivern

¡Gracias!
A todo esto, mi primo también me confirmó que en su equipo la que esta compilada con el RC19 va bien, no asi la RC20.
¡¡No estoy solooo!! jajajaja... me tiene realmente loco el bug u.u
Ahora si me marcho :P

SplinterGU

no me doy cuenta del bug...

mira si en el proceso malo, al inicio pongo

    if ( tipoMalo != MALO_LOOPERO ) return; end

aparecen los loopero y nunca falla.

ahora si comento esa linea pasa el problema...

y solo pasa en windows.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Quote from: Noivern on January 05, 2011, 07:05:26 PM
Te subo el mismo código, compilado uno con la RC19(r189) y el otro con la RC20(r200).
Ahi verás que el mismo código tiene comportamientos distintos, errático totalmente en la RC20 con los enemigos que giran en los bordes de la pantalla.
Link:
Deadly Eye: RC19(r189) vs RC20(r200)

PD: Confirmo que el debug ahora funciona correctamente, pero solo eso :P

Lo he probado y no consigo ver diferencias, es cierto que los enemigos salen de forma distinta o en puntos distintos, pero me imagino que será por el random, pero eso podria ocurrir en la misma version ejecutada 2 veces seguida.
He puesto las 2 versiones ejecutandose en paralelo una al lado de la otra, y en el how to play todo funciona igualito, ya difiere despues en los enemigos pero será por lo comentado, las velocidades en todo me parecen identicas, y tanto en una como en otra los enemigos que van en cola, así lo hacen, y tampoco veo que se dupliquen sin fin. Tambien es cierto que con tantos enemigos es dificil visualizar algun error que exista, me imagino que para ti es mucho más fácil que para nosotros, ya que conoces todos los cantos de la casa :)

SplinterGU

ahora tambien me pasa en linux, ahora me doy cuenta...

pero la verdad no se si es un bug de bennugd o del juego...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Noivern

#41
@Free
mira si te sucede esto -> infinitos enemigos, no es normal.

-------
@Splinter

Utilizo mucho vars de tipo byte y shorts, además tengo que hacer castings en algunos calculos, ¿puede ser que esto "maree" al motor ahora?


El tipoEnemigo originalmente era un byte, ahorita no recuerdo si lo cambie a int por probar cosas.

Y hasta hace poco se mareaba más, por ejemplo en la línea 585 del enemigos.prg donde pone:
[code language="bennu"]
while (disparoRecibido = get_id(type disparo))         
   if (!disparoRecibido.deboMorir && (fget_dist(disparoRecibido.x, disparoRecibido.y, x, y) <= (radioColisionDisparo + radioColisionNave - 4)) )
       if ( (short)((float)dañoRecibido * multiplicadorDaño[nivelDaño]) >= energia)
           break;
       end
       //logica
   end
end
[/code]

Tenía puesto esto, con lo que los enemigos esfericos (grandes y pequeños) y las naves azules gordas tambien salían infinitamente:
[code language="bennu"]
while (disparoRecibido = get_id(type disparo))         
   if ( (fget_dist(disparoRecibido.x, disparoRecibido.y, x, y) <= (radioColisionDisparo + radioColisionNave - 4)) )
       if ( (short)((float)dañoRecibido * multiplicadorDaño[nivelDaño]) >= energia || disparoRecibido.deboMorir)
           break;
       end
       //logica
   end
end
[/code]

La idea del disparoRecibido.deboMorir esque nunca un disparo que haya chocado con un enemigo le haga daño a otro distinto. Solo los misiles, el laser y el bombazo le pueden hacer daño a multiples enemigos.

Prueba copiando el segundo fragmento de código y ahi si queda la cagá con ganas xD
Claro que lógicamente para lo que quería hacer es incorrecto, pues deja de tomar en cuenta las colisiones con el resto de los disparos en ese frame en cuanto pille uno marcado para morir. De todos modos, esto no debería reanimar a los muertos como sucedia D:

SplinterGU

no veo quien setea dañoRecibido a los procesos Malo.

parece que hay algun problema en el motor... pero por mas que vuelvo los cambios atras no funciona... seguro que te funciona con la 189?

por otro lado, gracias a esto encontre un bug en algo de lo ultimo que meti, pero que no afecta a tu proceso porque no pasa por ahi, pero bueno, lo encontre.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Noivern

Sep, en la r189 va como la seda, confirmado en 5 equipos.
El daño recibido por los malos se los asignan ellos mismos en los while como los que puse arriba. El valor de ese daño esta en los procesos disparo/splitshot/laser/misil como variable short pública. Lo hice así y no global para que fuesen levemente variables, tipo un golpe en un rpg o rts a lo warcraft 3. Luego ese daño es procesado un poco más abajo en el mismo proceso malo(), donde hago los cambios de paleta a rojo y se le resta la energia.

Por lo menos has pillado otro bug, si no hay mal que por bien no venga :D, a pensar positivo.

FreeYourMind

A mi no se me repiten los enemigos esos!!!! No encuentro diferencias.