4XCPC, un juego 4X inspirado en Ascendancy para Amstrad CPC 6128

¡Hola! He creado la versión v1.1 de mi juego 4X, que añade un breve mensaje de ayuda. La verdad es que era un poco tosco si nunca antes habías jugado a Ascendancy.

Participación en código y lógica

Híbrido (rutinas clave generadas por IA; ensambladas/editadas por humanos)

Participación en recursos y pipeline

Historia, diálogos o texto del manual

Notas del proyecto y prompts

Claude Code + Arkos Tracker + RASM + algunas herramientas personalizadas escritas en Go para editar recursos, hacer fuzzing y compilar el juego.

Este juego hace un uso intensivo de split-rasters para mostrar una gran cantidad de colores en el modo 1. Se requiere un CPC real o un emulador preciso.

2 Me gusta

4xcpc.dsk (199.8 KB)

¡Este botón de «Jugar en el navegador» es genial! ¿Aparece automáticamente cuando se publica un DSK?

Los split rasters se ven muy bien.

Sí. Solo necesitas soltar el archivo en el cuerpo del mensaje.

1 me gusta

Por si a alguien le interesa:

  • El DSK se genera directamente mediante una librería de Go que escribí hace unos años. Permite colocar datos binarios directamente en cualquier sector. El cargador |cpm tiene una tabla que contiene la ubicación de los datos y su destino en la RAM del CPC (bancos, desplazamiento). Esto evita el uso del catálogo, que hace que el cabezal vuelva al principio del disco.
  • Los split rasters se apoyan en una librería de emulación de CPC escrita por Claude, usando GitHub - koron-go/z80: Z80 emulator written in Go · GitHub . Una vez calibrados los NOP en un CPC real, permite realizar pruebas unitarias automáticas de los split rasters.
  • La música y el teclado se gestionan antes del área de dibujado, donde se producen los rasters. Se ejecutan en tiempo constante, utilizando el reproductor FAP para la música.
  • Cuando la pantalla se oculta (blanking) para el cálculo del turno enemigo, la música se vuelve a conectar a las interrupciones normales del CPC para evitar tirones.
  • Puede mostrar los 27 colores simultáneamente en una sola pantalla. Cada línea tiene una paleta de 6 colores. Bueno, 5. El negro es fijo. Se configuran 3 «pens» (tinteros) durante el hsync (alrededor de 30 NOP), y luego el pen 1 y el pen 3 se vuelven a configurar durante el dibujado de la línea. Esto permite hacer parpadear un color tanto en la columna izquierda como en la derecha. El icono de la izquierda no se ve afectado por el ocultamiento.
  • Creo que esto podría usarse en cualquier juego tipo hoja de cálculo. Permite hacer parpadear una línea cambiando solo 8 valores en cada ciclo.

El juego se puede completar en unas 2 o 3 horas. O en unos pocos minutos si simplemente dejas pasar el tiempo hasta que el oponente gane…

1 me gusta

¡Ooooh, se ve genial! Me interesan mucho los detalles técnicos de los cambios en el raster.

(Es decir, quiero utilizarlos en mis propias producciones)

He usado AceDL para ver cómo se hizo en el juego Le Fugitif. La idea básica es crear una lista larga de plumas (pens), apuntarla con HL, y luego tener algo como:

    ; establecer color de fondo
    ld e, 0x54
    out (c), 0
    out (c), e

    ld c, 0x01
    ld d, 0x02
    ld e, 0x03

display_loop:
    out (c), c
    outi
    inc b
    out (c), d
    outi
    inc b
    out (c), e
    outi
    
    nop
    ...
    nop
    
    dec a
    jp nz, display_loop


Cada outi asignará el color apuntado por HL a la pluma seleccionada y luego lo incrementará. Es muy importante hacer inc b después, porque outi decrementa B.

Y, por supuesto, antes de eso, hay que esperar al VBL para sincronizarse.

    ; esperar VBL
    ei ; habilita las interrupciones (las necesitamos para el HALT)
    ld b,0xF5
novbl:
    in a,(c)
    rra
    jr nc,novbl

    halt ; estamos sincronizados 16 líneas antes de la pantalla
    di ; y ahora deshabilitamos las interrupciones hasta el final

    ; aquí puede ir cualquier código con temporización exacta como el reproductor FAP. O un montón de nops y bucles para consumir tiempo.

Y, por supuesto, puedes hacer outi;inc b varias veces para cambiar la misma pluma varias veces durante la línea, de ahí la división (split).

Mmm, ¿se me está yendo la olla? ¿Cómo das tu opinión?

¿En el juego? Usa las flechas y Enter (Return) para seleccionar un elemento en el menú. Luego, usa las letras resaltadas en rojo en los verbos para [Siguiente]. O [Pasar] para saltar al siguiente evento (fin de construcción, crecimiento de población, investigación completada…).\n\nQuizás debería añadir una pantalla de ayuda sobre los controles. :thinking: