4XCPC, un jeu 4X inspiré d'Ascendancy pour Amstrad CPC 6128

Salut ! J’ai sorti une version 1.1 de mon jeu de 4X, qui ajoute un court message d’aide. C’était en effet un peu rude si vous n’aviez jamais joué à Ascendancy auparavant.

Implication dans le code et la logique

Hybride (routines clés générées par IA ; assemblées/éditées par un humain)

Implication dans les ressources et le pipeline

Scénario, dialogues ou texte du manuel

Notes de projet et invites (prompts)

Claude Code + Arkos Tracker + RASM + quelques outils personnalisés écrits en Go pour éditer les ressources, fuzzer et compiler le jeu.

Ce jeu fait un usage intensif des split-rasters pour afficher de nombreuses couleurs en mode 1. Un véritable CPC ou un émulateur précis est requis.

2 « J'aime »

4xcpc.dsk (199,8 Ko)

Ce bouton « Jouer dans le navigateur » est génial ! Est-ce automatique lorsqu’un DSK est publié ?

Les split rasters passent très bien.

Oui. Il vous suffit de glisser-déposer le fichier dans le corps du message.

1 « J'aime »

Si jamais ça intéresse quelqu’un :

  • Le DSK est généré directement par une bibliothèque Go que j’ai écrite il y a quelques années. Elle permet de placer des données binaires directement sur n’importe quel secteur. Le loader |cpm possède une table contenant l’emplacement des données et leur cible dans la RAM du CPC (banques, offset). Cela évite d’utiliser le catalogue, ce qui renverrait la tête de lecture au début du disque.
  • Les split rasters s’appuient sur une bibliothèque d’émulation CPC écrite par Claude, en utilisant GitHub - koron-go/z80: Z80 emulator written in Go · GitHub . Une fois les NOP calibrés sur un vrai CPC, cela permet des tests unitaires automatiques des split rasters.
  • La musique et le clavier sont gérés avant la zone d’affichage, là où les rasters se produisent. Ils sont exécutés en temps constant, en utilisant le lecteur FAP pour la musique.
  • Lorsque l’écran est masqué pour le calcul du tour ennemi, la musique est reconnectée sur les interruptions normales du CPC pour éviter les saccades.
  • Il peut afficher les 27 couleurs en même temps sur un écran. Chaque ligne dispose d’une palette de 6 couleurs. Enfin, 5. Le noir est fixe. Il y a 3 encres définies pendant le hsync (environ 30 NOP), puis l’encre 1 et l’encre 3 sont redéfinies pendant le tracé de la ligne. Cela permet de faire clignoter une couleur sur la colonne de gauche ou de droite. L’icône de gauche n’est pas affectée par le masquage.
  • Je pense que cela pourrait être utilisé sur n’importe quel jeu de type tableur. Ça permet de faire clignoter une ligne en modifiant seulement 8 valeurs à chaque cycle.

Le jeu est faisable en 2 ou 3 heures environ. Ou en quelques minutes si vous passez simplement votre tour jusqu’à ce que l’adversaire gagne…

1 « J'aime »

Ooooh, c’est superbe. Je suis très intéressé par les détails techniques des modifications de trame.

(c’est-à-dire que je veux les utiliser dans mes propres productions)

J’ai utilisé AceDL pour regarder comment cela a été fait dans le jeu Le Fugitif. L’idée de base est de créer une longue liste d’encres, de la pointer avec HL, puis d’avoir quelque chose comme :

    ; définir la couleur de fond
    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


Chaque outi va appliquer la couleur pointée par HL à l’encre sélectionnée, puis l’incrémenter. Il est très important de faire inc b après, car outi décrémente B.

Et, bien sûr, avant cela, il faut attendre la VBL pour se synchroniser.

    ; attendre la VBL
    ei ; active les interruptions (nous en avons besoin pour le HALT)
    ld b,0xF5
novbl:
    in a,(c)
    rra
    jr nc,novbl

    halt ; nous sommes synchros 16 lignes avant l'écran
    di ; et maintenant on coupe les interruptions jusqu'au bout

    ; ici peut se placer n'importe quel code au timing précis comme le lecteur FAP. Ou beaucoup de nops et de boucles pour consommer du temps.

Et, bien sûr, vous pouvez faire outi;inc b plusieurs fois pour changer la même encre plusieurs fois au cours de la ligne, d’où le split.

Euh, j’ai un trou de mémoire ou quoi ? Comment est-ce qu’on donne son avis ?

Dans le jeu ? Utilise les flèches et Entrée pour sélectionner un élément dans un menu. Ensuite, utilise les lettres surlignées en rouge dans les verbes pour [Next]. Ou [Pass] pour passer à l’événement suivant (fin de construction, croissance de la population, recherche terminée…).\n\nJe devrais peut-être ajouter un écran d’aide pour les commandes. :thinking: