Lancé esto EXACTAMENTE al mismo tiempo que cayeron los servidores de CPCWiki, así que nunca pude hablar sobre los detalles técnicos. El código usa una sincronización muy precisa (exact timing), por lo que, una vez más, sin querer creé una prueba para emuladores, como me voy dando cuenta cuando la gente publica videos donde no se ve bien…
Quité los modos de «Extra Sugar» porque todos esos marcadores y logros estaban diseñados para un sistema basado en disco que guardara tu progreso. Así que pensé en configurarlo para que se jugara como el juego de arcade y simplemente tener una sola tabla de puntuaciones para mantenerlo simple en un cartucho.
Poco antes de terminar el juego, se le añadió al PicoGX la capacidad de leer y escribir en la tarjeta SD, así que agregué el guardado de puntuaciones altas a último momento. Creo que habría sido el primer juego en usar esta función si el mod de Bloodwych no se me hubiera adelantado. Así que tal vez podría considerar volver a incluir el contenido de Extra Sugar, pero tendría que rediseñar todos los fondos nuevos que hice para Extra Sugar, que solo existen en 4 colores. Y para ser sincero, no mucha gente ha descargado Bomb Jack GX en comparación con Extra Sugar, lo cual es interesante.
El mapa de memoria es completamente diferente y hubo que retocar bastante código para eliminar lo que se automodificaba y así poder ejecutarlo desde la ROM. La pantalla ya no necesita doble búfer gracias a los sprites por hardware y la mayor parte del código se ejecuta desde la ROM, por lo que 64k de RAM son más que suficientes. Y la ROM es de solo 128k, así que de nuevo, espacio de sobra.
Los fondos obviamente están en Modo 0 esta vez y realmente usan más colores que el arcade porque usé tramado (dithering) siempre que pude para intentar que no se vieran tan toscos en Modo 0. Todos se retoquetearon a mano. También usan cambios de paleta por línea (colour splits) cuando es posible para lograr más de 16 colores. O 12 colores, ya que las plataformas siempre ocupan 4.
El sistema de interrupciones es mucho más complicado que en Extra Sugar, pero la estructura del juego fue mucho más fácil de escribir gracias a la PRI, que tal vez sea la característica más subestimada del GX. Cualquier código crítico en cuanto a sincronización se colocó en la cadena de interrupciones, lo que hizo que todo fuera mucho más simple y limpio.
El código de los sprites se rehizo por completo para usar sprites por hardware. El juego necesita un máximo de 12 sprites para los objetos del juego (1 jugador + 9 enemigos + bola P + moneda B). Me preocupaba cuánto tiempo llevaría actualizar el ASIC para animarlos, ya que la memoria de sprites no está indexada (lo cual es supermolesto). Así que, para que vayan más rápido, los datos de los sprites son todos sprites compilados y, siempre que es posible, se guardan como un delta; es decir, solo se cambian los píxeles que son diferentes respecto al sprite anterior. Todas las animaciones de los enemigos funcionan así y se van turnando para actualizarse, de 4 en 4. De hecho, la actualización de sprites se hace bastante rápido, por lo general antes de que la pantalla empiece a dibujar el fotograma visible. Y la lógica del juego ya era rápida, así que el juego corre a 50Hz sin problemas.
Donde se fue más tiempo fue en la multiplexación de sprites, que también se manejó mediante la interrupción. Después de los objetos del juego, me quedaban 4 sprites libres y quería multiplexarlos para hacer 24 bombas. Esto es pan comido cuando están apiladas verticalmente, pero el problema es que puede haber hasta 7 bombas en una misma línea. Por lo tanto, cuando hay más de 4, el juego hace una intrincada multiplexación horizontal donde los sprites se mueven de un lado a otro en cada línea de escaneo para que aparezcan dos veces. Esto requiere una sincronización precisa y es un punto de fallo para los emuladores.
El medidor de arcoíris en la parte superior de la pantalla también está hecho con dos de los sprites de las bombas. Estos se redibujan rápidamente como bombas en el tiempo que transcurre entre que termina la pantalla superior y comienza el área de juego. Por lo tanto, el juego a menudo tiene más de 30 sprites en pantalla a la vez y puede tener más de 16 sprites en una sola línea. Eso no lo puedes hacer en una Master System o una NES.
Las vidas extra en la parte inferior de la pantalla no son sprites, sino que se hacen con cambios de paleta (colour splits) como en Extra Sugar.
La pantalla de título es una solución completamente diferente al mismo problema: quiero que el logo esté en alta resolución, pero necesitas al menos 7 colores para dibujarlo y no se pueden separar fácilmente. Esta vez tenía los sprites por hardware de mi lado, pero las letras son demasiado grandes para cubrirlas por completo solo con ellos. Así que terminé dibujando el logo en Modo 1 usando dos tonos de azul, negro y naranja, y las letras están cubiertas con una disposición estratégica de sprites por hardware combinada con cambios de paleta en el canal naranja. Reescribe dos de los sprites por hardware mientras hace esto, por lo que se usan 18 sprites en total. Una vez más, esto requiere una sincronización precisa, así que, de nuevo, es algo que no se ve 100% correcto en todos los emuladores.
Aparte de eso, todo se armó bastante rápido. El GX es divertido y todavía tiene mucho potencial sin explotar.