Roland contra las cuerdas (edición turbo asistida por IA)

Hola a todos.

Después de estar trasteando con Sultan’s Maze, pensé en darle una oportunidad a Roland on the Ropes.

Le pedí a Claude a ver si podía cambiar el desplazamiento vertical/horizontal (scrolling) para pasar de esos grandes saltos horizontales a algo un poco mejor.
Y lo hizo. Ahora el desplazamiento horizontal se mueve en bloques de caracteres de modo 1 en lugar de bloques de modo 0, lo cual queda mucho mejor.

Esto provocó un parpadeo bastante feo en el propio Roland, lo que requirió varios intentos para solucionarlo.

Lo siguiente que quise probar fue acelerar la velocidad del juego.
Pasó por varias iteraciones e ideas, pero como veréis, ahora es muchísimo más rápido.

Por último, el parpadeo en los 4 bordes de la pantalla al hacer scrolling.
Esto ocurre por el uso del scrolling por hardware, y quería ver si Claude podía hacer algo para minimizarlo.
No ha desaparecido por completo (incluso tras varias mejoras), pero está mucho mejor.

Hubo algunos errores por el camino, pero con suficientes pruebas e iteraciones, ¡se llegó a un resultado bastante bueno!
Tened en cuenta que no he probado todos los aspectos del juego, pero parece funcionar bien.

[EDIT] Mmmm, qué raro. En el reproductor RVM del navegador, ¡va super lento!

[EDIT2] Parece que tiene algo que ver con el método de control seleccionado. Voy a quitar el .dsk por el momento.

10 Me gusta

(vale, estoy perplejo; ¿cómo conseguiste pasar el formulario sobre IA al publicar aquí? :grin:)

Estaba intentando averiguar cómo añadir todo el texto que había escrito a la publicación y pude pegarlo en «Project Notes & Prompts».

Me pareció raro no poder publicar algo sobre el juego dentro del tema.

¿Es intencionado que las publicaciones sobre cosas creadas con vibe coding estén limitadas en cuanto a lo que se puede publicar?

Además, tengo curiosidad, ¿por qué se cerró el hilo de Sultan’s Maze? (Quiero saber si hice algo mal y qué tipo de cosas debería tener en cuenta en el futuro). :slightly_smiling_face:

Me pregunto si usó mi información para evitar el parpadeo (shimmering) en los lados…

El otro día le pregunté a ChatGPT cómo hacer algo con el desplazamiento (scrolling) —tenía curiosidad de ver si podía inventar algo nuevo a partir de la información existente, pero no—, le pregunté de dónde había sacado la información y me estaba citando del antiguo foro de cpcwiki. Bueno, al fin y me cabo lo publiqué allí para que la gente lo usara…

Vale, no es el parpadeo del R3 en el que estaba pensando.

Es el desplazamiento por hardware habitual, sin usar el R3, y no está usando el búfer doble (double buffering), lo cual es interesante. Vale, parece que puede haber desplegado el dibujado de mosaicos (tiles) en LDIs.

Con respecto al uso de LDI, una de mis primeras instrucciones fue esta:

me gustaría estudiar la posibilidad de parchear el código del juego para mejorar el desplazamiento (scrolling). Y, si se puede hacer, generar un nuevo archivo .bin que se pueda volver a integrar en el dsk. En este momento el desplazamiento es muy brusco, se mueve a razón de lo que parece ser 1 carácter de modo 0 a la vez. Me gustaría que se moviera en saltos del tamaño de caracteres de modo 1

y Claude respondió:

Se puede hacer, y los archivos parcheados ROLANDC.BIN y ROLANDD.BIN están listos para agregarse al dsk con los mismos nombres. Solo los he ejecutado en mi propio entorno de prueba (un núcleo Z80 con llamadas de firmware simuladas), no en un CPC ni en un emulador real, así que tendrás que probarlos en el tuyo.

Cómo funciona el desplazamiento en el juego

  • El juego está en Modo 0, construido a partir de teselas (tiles) de 4×8 bytes (un carácter de Modo 0), con una ventana de 20×23 teselas más un panel de estado de 2 filas.
  • El desplazamiento utiliza el desplazamiento por hardware del firmware (SCR SET OFFSET): ±4 bytes horizontalmente, ±80 verticalmente, y luego se dibuja una nueva columna o fila de teselas.
  • Los pasos verticales son de 8 líneas de escaneo (scanlines), que ya es la altura de un carácter de Modo 1, por lo que no modifiqué el desplazamiento vertical.
  • Todo el renderizado pasa por un único renderizador de teselas (tile blitter) en &2AF8, lo que hizo que el parche fuera pequeño.

Qué hace el parche

  • Cada paso horizontal se compone ahora de dos pasos de 2 bytes. La lógica del juego no se ha tocado y sigue moviéndose una tesela por bucle.
  • Primer medio paso (gancho/hook en &A1DA, justo después de reconstruir el búfer de teselas): desplaza el offset en 2, dibuja la mitad de la columna entrante y vuelve a dibujar al jugador y el panel de estado.
  • Segundo medio paso (gancho/hook en &34EF, el punto de desplazamiento original): desplaza los otros 2 bytes, dibuja la columna completa y restaura las teselas debajo del jugador.
  • Renderizador más rápido: También reemplacé &2AF8 con una versión desenrollada basada en LDI para compensar el renderizado adicional. Esto afecta a todo el juego, no solo al desplazamiento.
  • Ubicación: 397 bytes en &A900 en el relleno de ceros al final de ROLANDC, y 118 bytes en &2A79 en el relleno debajo del antiguo renderizador. La longitud de los archivos y los encabezados se mantienen sin cambios.
2 Me gusta

Y más tarde, al intentar reducir el parpadeo causado por el desplazamiento por hardware, Claude dijo lo siguiente:

Lo que cambió

  • Desplazamiento del panel a través del cruce de límites (wrap): la longitud de las pasadas se calcula una vez por movimiento (hasta tres pasadas rectas por línea de escaneo, divididas donde la fuente o el destino coinciden con el final de sus 2K), luego cada línea se copia con LDIR/LDDR. Cuando no hay un cruce de límites de por medio, sigue utilizando la copia desenrollada.
  • Se eliminó la alternativa del primer medio paso: la redibujada del panel a medio estado ha desaparecido, ya que el desplazamiento ya no falla con el cruce de límites.
  • Pasos de la cuerda: el desplazamiento ahora también funciona en la zona en pasos verticales.
2 Me gusta

Es impresionante lo que puede hacer y lo rápido que lo hace.

Lo uso en el trabajo y el otro día estaba mirando el código que había generado y había utilizado un método de búsqueda rápida que no conocía, así que leí sobre él y aprendí algo nuevo.

Lo bueno del método utilizado en esta versión es que el desplazamiento horizontal puede ser más fluido que el vertical porque no hay desplazamiento diagonal en ninguna parte del juego.

2 Me gusta

¡Buenísimo! Nunca me gustó el juego por el desplazamiento de la pantalla. Ahora esto es «lo suficientemente bueno» para que lo disfrute. No hace falta un mejor desplazamiento.

Absolutamente increíble y una excelente manera de usar IA.

1 me gusta

Bueno, he estado un poco indeciso sobre el uso de la IA, pero tengo que admitir que ha resuelto muchos de los «problemas» en Roland On The Ropes.

Tras haberlo probado, debo decir que la velocidad tan rápida del «gameplay» (aunque impresionante) arruina un poco la jugabilidad general. Después de años jugando, todavía con cierta regularidad, hace que sea lejísimos de ser fácil calcular el tiempo para saltar sobre las ratas, por poner solo un ejemplo evidente. En niveles posteriores con múltiples enemigos como murciélagos, etc., va a ser una pesadilla de frustración.

¿Hay alguna forma de conservar las mejoras pero ajustar la velocidad para que sea un poco más lenta?

1 me gusta

Estoy totalmente de acuerdo, y sí pensé en el hecho de que hacer el juego demasiado rápido lo cambiaría significativamente.

Por supuesto que se puede hacer más lento. Manténganse al tanto. :smiling_face_with_sunglasses:

4 Me gusta

Vale, aquí tienes una versión más lenta.

No estoy seguro de si sigue siendo un poco demasiado rápida, pero definitivamente es más fácil de manejar. :slightly_smiling_face:

roland_on_the_ropes_classic_speed.dsk (190.3 KB)

5 Me gusta

A esta velocidad está perfecto, nunca había visto Roland OTR tan jugable. Tal vez sea el primer juego al que jugué en el CPC.

¿A que es divertido jugar con IA para mejorar juegos de CPC? :wink:

1 me gusta

De verdad que es muy divertido.

Ahora me pregunto qué juego podría ser el siguiente…

¿Galivan, Kick Off 2 o Space Harrier 2 con un área de juego más grande? :grin:

Sí, galivan fue terrible.

Galivan tiene una ventana de juego muy pequeña, por lo que hacerla más rápida haría que fuera demasiado difícil de jugar.

Ese juego realmente necesita una ventana más grande.

1 me gusta

Esta es una buena mejora y un excelente uso de la IA para realizar pequeños cambios específicos que mejoren las bases de código existentes, sin tener que pasar todo ese tiempo haciendo análisis y parches manuales. Creo que esto es bastante diferente a usar IA generativa para crear juegos desde cero con poca intervención de desarrolladores o diseñadores gráficos.

Lo que estaría muy bien es que el blitting del sprite del fantasma fuera transparente cuando atraviesa las paredes, en lugar de ese movimiento tan en bloque.

2 Me gusta

Hola:

No sé ni qué decir. Has transformado por completo la experiencia del juego. Venía en mi paquete de bienvenida cuando me compré el CPC. Me gustaba bastante, pero el desplazamiento (scrolling) daba un poco para atrás, pero ahora… ¡Es tan bueno y fluido! ¡Enhorabuena!

¿Crees que se podría mejorar el renderizado de los sprites usando IA? Se nota que no hay transparencias, ya que todos los sprites tienen un fondo negro. Estaría genial si se pudieran mejorar.

Un trabajo excelente de todas formas.

1 me gusta

Perdona @ervin, se me había pasado tu respuesta inicial.

¿Qué hilo se cerró?

Y además, no, no hay límite en lo que puedes publicar en la categoría, el único requisito es el formulario (que todavía no sé cómo te saltaste :grin:)

No hay problema, @Gryzor

Era sobre el hilo de Sultan’s Maze.

Al principio lo creé en el subforo equivocado y, después de que me dijeras que debía crearlo en un subforo adecuado sobre IA, lo moví a «Juegos creados con IA» (Vibe-coded games).

Luego se cerró el hilo y solo más tarde me di cuenta de que tal vez querías decir que debía volver a crearlo en el foro adecuado. :slightly_smiling_face:

Así que mi error fue simplemente moverlo a «Juegos creados con IA» en lugar de volver a crearlo allí.