Asteroids: el reto de los asteroides que siempre se expanden

Una curiosidad que me llamó la atención al probar la versión 18 del proyecto es que, al comienzo del juego, había asteroides grandes y pequeños. Sin embargo, según iba pasando el tiempo parecía que cada vez había más asteroides grandes (expandidos) y menos pequeños (sin expandir). Al final sólo los había grandes.

¿Cómo es posible esto, si la expansión la determino aleatoriamente a partir del Jiffy Clock?

Asteroids - Expansión aleatoria

No os imagináis la de vueltas que le habré dado. Y la de pruebas que habré hecho… ¿Os ha pasado lo mismo?

El gazapo ya está descubierto, y también corregido en la versión 19 del proyecto, que no publicaré hasta la siguiente entrada, dedicada a meter niveles de dificultad progresivos.

Mientras tanto, un reto para el que quiera animarse: el primero que dé con el gazapo y lo documente como un comentario en el blog, recibirá gratis un ejemplar del libro “Programación Retro del Commodore 64”. Y si ya lo tiene, ya veremos lo que hacemos; como poco se llevará el honor de haber pillado el gazapo 🙂 .


Código del proyecto: Asteroids18

2 comentarios en «Asteroids: el reto de los asteroides que siempre se expanden»

  1. Yo creo que el motivo por el que todos los asteroides salen expandidos es porque el Jiffy Clock no tiene la suficiente resolución temporal. Su byte menos significativo ($a2) siempre toma un valor impar y, al hacer «and #%00000001» siempre arroja un valor 1. ¿Puede ser?

    Me gusta

  2. Hola, Paco.

    Muchas gracias por tu comentario.

    Yo también llegué a pensar eso, que quizás el problema era que el reloj no tenía la suficiente resolución, que el bit 0 siempre tomaba el mismo valor (1 en este caso), y que por eso los asteroides siempre salían expandidos.

    De hecho, por eso en alguna versión intermedia del proyecto (creo que la 18) veréis que dejo de usar el bit 0 de $a2 («and #%00000001») y paso a usar el bit 1 con «and #%00000010» y «lsr a». Sin embargo, el resultado fue el mismo.

    Es más, si la explicación fuera la falta de resolución temporal del reloj, entonces todos los asteroides tendrían que salir expandidos desde el comienzo del juego. Pero lo curioso del asunto es que al comienzo hay mezcla (expandidos y no expandidos) y, según avanza el juego, todos se van convirtiendo en expandidos.

    El gazapo está un poco más oculto en el código. No lo encontraréis en «Asteroides.asm». Tenéis que buscar en las librerías de rutinas…

    ¡¡Ánimo!!

    Saludos, HVSW.

    Me gusta

Deja un comentario