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

si se comporta como el scroll, 0 es en todos, y luego los numeros son los planos
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Definitivamente hay un bug en los modos 7 con el cnumber:

Con el código tal cual, con cnumber=0 se ve en todos los modos7, si pongo C_0 (1) se me ve en el modo7 del techo, el modo7 número 1, y si pongo C_1 (2) deja de verse.
Ahora, he cambiado el modo7 número 0 por el 1, y el 1 por el 2 (vamos, que en lugar de ejecutar los modos7 0 y 1, ahora lo hago con 1 y 2), y C_0 me lo pone en el modo7 del suelo y C_1 me lo pone en el del techo, y si pongo cnumber a 0 se me ve en ambos.

Sospecho que se tomó el valor 0 como "dibuja en todos los scrolls" y no se acordaron de que el modo7 número 0 existe a la hora de asignar un bit a cada uno. Se supone que cnumber se usa como flags sobre en qué scroll/modo7 debe dibujarse, no lo he mirado en scroll, pero definitivamente hay un planteamiento mal hecho en el modo7, los bits se han desplazado:

Actualmente:
0= dibujar en todos
1= dibujar en modo7[1]
2= dibujar en modo7[2]
4= dibujar en modo7[3]
8= dibujar en modo7[4]
3= dibujar en modo7[1] y modo7[2]
5= dibujar en modo7[1] y modo7[3]

Recomendado:
0= no dibujar (o dibujar en todos)
1= dibujar en modo7[0]
2= dibujar en modo7[1]
4= dibujar en modo7[2]
8= dibujar en modo7[3]
3= dibujar en modo7[0] y modo7[1]
5= dibujar en modo7[0] y modo7[2]
...
default= hx000003FF ó 0
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

drumpi, eso funciona bien, lo que te dije me parece que no esta bien es el height, si cambias el height vas a ver que se ven los que decis no se ven.

esto es y debe ser:

0 todos

luego los bits de c_number son:

1 = m7[0]
2 = m7[1]
4 = m7[2]
8 = m7[3]
16 = m7[4]
32 = m7[5]
64 = m7[6]
128 = m7[7]
256 = m7[8]
512 = m7[9]
1024 = m7[10]

referencia:

            if ( LOCDWORD( mod_m7, i, CNUMBER ) && !( LOCDWORD( mod_m7, i, CNUMBER ) & ( 1 << ( n - 1 ) ) ) )

n es el scroll a dibujar, ahi barre todos los procesos, y en caso de que esa condicion se cumpla, descarta ese proceso.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quiero que cojas el modo7.prg que adjunto y subas la cámara, y te acerques (no demasiado) al proceso coche2 que está quieto en el centro de la escena, abras la consola y le asignes diversos valores a coche.cnumber.
Luego haz lo mismo con modo7b.prg.

Con el primer código verás dos coche2 a distinta altura con cnumber a 0, y en la parte de arriba con cnumber a 1, y desaparecerá con cnumber=2.
En el segundo tambien verás ambos coches con cnumber a 0, pero si lo pones a 1 lo verás en el de abajo, y con 2 en el de arriba.
Siempre perfectamente alineados con el suelo de dicho modo7, ya que NO CAMBIAMOS HEIGHT.

A ver si de verdad estoy equivocado.
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

que mezcla te estas armando...

0 son todos los m7
c_0 es el primer m7 (m7[0])
c_1 es el 2do m7 (m7[1])

y asi...

seguis sin definir el proceso coche sin ctype.

estas cometiendo varios errores en tu ejemplo lo que no te permite ver claramente los problemas, no digo que no los haya, pero estas diagnosticando mal.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

No, no me estoy equivocando: coche no usa ctype=c_m7 porque si hago eso, al avanzar con ángulo, tiembla, y eso no está bien visto. Es un arreglo provisional mientras se soluciona, sobre todo para no meterte prisa.

Y te digo que, según mis pruebas y en eso no me equivoco:
c_0 es m7[1]
c_1 es m7[2]
c_2 es m7[3]
etc...
Comprobado con esos dos códigos, porque coche 2 aparece a altura 0, y no por debajo del scroll, porque si no, con c_2, en modo7b.prg debería verse y no lo hace
O con c_1, que no se ve en mode7.prg y sí en mode7b.prg a la altura del modo7-techo.
A menos que hicieses correciones a partir de la r131.
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

drumpi, a ver si me escuchas...

para que el proceso este dentro del m7, tiene que ser tipo c_m7, te guste o no, sino no esta dentro del m7, que vibre es otra cosa, pero si haces lo que queres entonces no pretendas que funcione.

el objeto vibra porque la camara va moviendose, entonces se aleja minimamente del objeto que sigue.

coche no lo estas poniendo dentro del sistema m7, y tampoco tiene c_number, el coche2, esta metido en el scroll c_1, o sea, m7[1] por eso es que no lo ves en el otro scroll, ya he probado los c_number, correctamente usados y correctamente seteadas las estructuras y funciona a la perfeccion.

mas alla de todo esto, no estas teniendo en cuenta los puntos de control del grafico, por eso tampoco se coloca sobre el piso, luego los height estan mal seteados, lo mismo que la distancia, son con respecto a la camara.

puf, ya me confundiste, c_0, c_1, c_... son de scroll, no de m7.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

jejeje, parece que igual esta mal tambien el cnumber... :D

ya lo acabo de corregir, el "-1" de la linea que puse arriba estaba demas... :D :D :D
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya tengo el m7 corregido!

por lo menos lo de la altura, y demas... voy a probar un poco mejor.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya actualice el svn, aca esta el programa de ejemplo, por favor drumpi, fijate bien como setee cada cosa en el codigo.

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

Drumpi

Okis, mañana hago la prueba con la nueva versión, a ver qué tal va.

Pero sigues empeñado con poner coche en el modo7 ¡yo no quiero que "coche" esté en el modo7 :D! y coche2 no es el proceso al que sigue la cámara.
Aun con todo y con eso, con mi r131, los dos procesos "coche" se pintan por encima del techo, en lugar de en el suelo, que es lo que trataba de decirte: tienen cnumber=1, y si intentas que se vean en el suelo, deberías poner cnumber a 0, y eso hace que salgan en todos los modos 7.

Ya digo, mañana pruebo con la nueva versión y te cuento lo que vea ;)
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

por favor, prueba esta version y luego vuelves a decir todo, pero por favor contesta y comenta como te fue, porque ahora que subi version se te acabo la actividad frenetica.

objetos que no son c_m7, son objetos que estan fuera del modo7, no tienen ni perspectiva (tamaño), ni estaran en el suelo, ni estaran volando ni nada, estaran fijos en la pantalla o moviendose en unas coordenadas que no tienen relacion con los objetos ni planos del modo 7, pero no me vuelvas a decir que el coche no esta en el piso si usas un objeto que no es c_m7, porque nada tiene que ver con el modo 7, son 2 sistemas diferentes.

con el ejemplo, solo te estoy mostrando, que el objeto esta centrado, en el suelo, que se dibuja en los planos correctos y que funciona perfectamente.

y si me lees cuando escribo, veras cosas como que dije que corregi tambien un comportamiento del uso de cnumber.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Ahora sí, con esta nueva versión va de LUJO: el temblor se ha reducido al mínimo (hay que estar con la lupa para notarlo), las alturas van perfectas y el cnumber funciona correctamente :)
¡¡¡YA TENEMOS UN MODO7 DIGNO DE BENNU!!!

Muchísimas gracias por el esfuerzo, ahora sí que da gusto trabajar con él, y ten por seguro que voy a sacar un nivel dedicado a este en mi próximo juego, pero de una forma que (por lo menos yo) no se ha visto en otros juegos :P
Karma up.

PD: siendo tiquismiquis (ya que me dijiste que dijera los fallos que encontrase), aun quedaría:
-El que no funcione a 16/32 bits de color.
-Que el color exterior no funcione (me refiero a m7[tal].color que hace que si no hay un gráfico de exterior se coloree todo con él).
-Que los procesos con ctype=c_m7 no se "corten" con el modo7.
-Que falle con los escalados 2x (2x_scale, scale_nofilter...).
-No lo he comprobado, pero con el Drajon Lol, el gráfico externo, pese a ser de 64x64, sólo se dibujaban los primeros 32x32 pixels (es en el nivel 3, por si quieres mirarlo, no puedo hacerte ahora un ejemplo).
De todas formas, esto ya no me hace falta, es sólo por perfeccionar el modo7, porque también está el tema del horizon, pero esos son cambios demasiado gordos ya ^^U

PD: respondiendo a lo que no está en el modo7, ya se que sin ctype=c_m7 sus coordenadas y demás son respecto a la pantalla, lo hice para evitar el temblor. Tampoco se ven los mapas de durezas en pantalla pero están ahí, o los focos de visión de los guardias. Esto que yo hacía, también se hacía antes, para meterle animaciones al prota, efectos gráficos (rotaciones y demás) y para reducir los cálculos de un nuevo proceso de modo7 (reescalados, cálculos de ángulos de visión (xgraph), etc)... pero no tiene mayor relevancia.
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

buenisimo!

- 16 y 32 no funciona porque el render se hace en el mod_m7, solo necesito tiempo para codificarlo.
- el color, funciona perfectamente, proba esto:

    start_mode7(0,graficos1,1,-1,0,64);
    start_mode7(1,graficos1,2,-1,0,64);

- no se a que te referis con "no se corten con el modo7", hablame en español neutro.
- los escalados no funcionan, porque un modo 8 bits escalado es un modo 16bits. (volvemos al primer tip de esta lista)
- no puedo verlo ahora, si que quieres pasar un codigo de pruebas, lo vere para cuando tenga tiempo en unas semanas.

gracias por los comentarios.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Vale, no había caido en que el gráfico NULL ahora era el -1 ^^U
Lo de cortarse me refiero a que si un objeto se "hunde" en el modo7, parte de él se tapa, se ve "cortado".
Y lo de la prueba, como dije, tendrá que esperar, no tengo tiempo ni para respirar.
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)