DIV icon indicating copy to clipboard operation
DIV copied to clipboard

El bug del Modo-8

Open vii1 opened this issue 5 years ago • 5 comments

El Modo-8 siempre tuvo un bug que permitía a la cámara salirse del mapa. VPE seguía creyendo que la cámara estaba en el último sector pisado, lo que hacía parecer que el sector se estirara hasta el infinito.

Creo recordar que una forma de evitarlo era teletransportar la cámara a otro sector y luego de vuelta a su lugar original, de forma que se obligaba a VPE a recalcular el sector actual. Lo que me hace pensar que el fallo está en la función que comprueba la colisión con las paredes y el paso de un sector a otro cuando se dan pasos pequeños.

vii1 avatar Jul 07 '19 19:07 vii1

He estado investigando este bug y creo que puede tener que ver con que el radius del proceso de la cámara sea 0. Voy a intentar hacer un programa que lo reproduzca y si es así quizá se podría poner un radius por defecto de 1 (y que no se pueda poner un radius menor).

AzazelN28 avatar Mar 05 '22 13:03 AzazelN28

Creo recordar que era mucho más fácil provocar el bug con radius=0, pero no es requisito. Acabo de reproducirlo en WLD_VIEW con radius=64.

vii1 avatar Mar 05 '22 16:03 vii1

Voy a intentar solucionarlo.

¿Puedes poner por aquí el programa .PRG con el que reproducir el bug? ¿Se puede reproducir trasladando el proceso cámara a una coordenada x e y fuera de cualquier sector?

Creo que en VPE se guardan tanto la coordenada actual como la coordenada anterior, quizá podría hacer algo como:

if (fuera_de_sector(new_x, new_y)) {
  int dx = new_x - old_x;
  int dy = new_y - old_y;
  // ...obtener el inc_x y el inc_y.
  int test_x = old_x; 
  int test_y = old_y;
  while (!fuera_de_sector(test_x, test_y)) {
    test_x += inc_x;
    test_y += inc_y;
  }
  new_x = test_x;
  new_y = test_y;
}

AzazelN28 avatar Mar 06 '22 09:03 AzazelN28

¿Puedes poner por aquí el programa .PRG con el que reproducir el bug?

Viene con DIV2, si no lo tienes aquí te lo paso. wld_view.zip Ve más o menos a las coordenadas (5736, 2264), en la cueva con las grietas de lava en el suelo. Moverse por encima de esas grietas suele provocar el bug.

¿Se puede reproducir trasladando el proceso cámara a una coordenada x e y fuera de cualquier sector?

No, porque entonces VPE hace una comprobación completa y detecta que la cámara no está en un sector válido. El bug sólo salta cuando mueves la cámara poco a poco. Por eso un workaround es teletransportar la cámara lejos y traerla de vuelta a su sitio.

vii1 avatar Mar 06 '22 11:03 vii1

Vale, he estado probando y he conseguido sacar unas coordenadas exactas para reproducir el error:

x=5815;
y=2466;
angle=270000;

AzazelN28 avatar Mar 07 '22 07:03 AzazelN28