Mode démo

Développement de BriXen: épisode 5

Quand j’étais petit, j’adorais le mode démo dans les jeux. Cela permettait d’avoir une musique et une animation qui tourne en fond. 

Pour BriXen, il en fallait donc un.

Niveau développement, c’est assez simple. En gros, on joue à un niveau, chaque modification de touche est sauvée avec un compteur de frame et dans le mode démo, le programme utilise la séquence pour simuler le joueur qui joue.

J’ai donc deux fonctions à faire:

  • une qui enregistre (que je pourrais supprimer dans la version finale)
  • une qui joue.

Pour cela, j’ai crée une scène SC_DEMO qui est appelé après 30 secondes (soit 1500 frames).

Un chaine de replay se ressemble à ça (pour le level 1)

const u8 seq_level0[] = {22, 2, 18, 0, 14, 2, 10, 0, 17, 2, 9, 0, 14, 2, 9, 0, 10, 2, 11, 0, 14, 2, 17, 0, 21, 2, 8, 0, 78, 2, 11, 0, 36, 2, 8, 0, 51, 1, 84, 0, 15, 1, 5, 0, 16, 2, 16, 0, 21, 2, 19, 0, 23, 1, 7, 0, 11, 2, 24, 0, 10, 2, 17, 0, 19, 2, 21, 0, 37, 2};

Cela se traduit par:

  • 1er octet: nombre de frame avant d’executer la commande
  • 2éme octet: commande à executer (1: gauche, 2: droite, 0: on relache)

Arrivé à la fin de la chaine, j’aurai pu crée une commande 3… Mais vu que je ne fais que de la lecture et que cela n’influence qu’une simulation d’appui de touche, je laisse aller le pointeur au-delà de la chaine. De toute façon, il ne lira que quelques octets avant de compléter le niveau…

A suivre pour un prochain épisode très bientôt…

La compression

Développement de BriXen: épisode 4

Un des choses qui nous fait le plus vite défaut sur l’Amstrad, c’est le peu de mémoire dont nous disposons.

Actuellement, je préfère n’utiliser que les 64k de disponible afin de rendre nos jeux compatibles avec le plus de machine possible (c’est même une des conditions de la CPC Retrodev)

De nombreuses méthodes de compression existent pour notre Z80. La plus connues des demomakers est Shrinkler de par son haut taux de compression. Malheureusement, son temps de décompression est plus de 25 fois la vitesse de la commande assembleur LDIR (copie d’octets).

Pour un jeu, ce n’est pas acceptable.

Il m’a donc fallu trouver un compromis vitesse/taux de compression.

Mon choix s’est porté sur LZSA de Emmanuel Marty.

Il nous donne un taux de compression de 2 pour une vitesse de LDIR x2. C’est plus qu’acceptable.

Le meilleur, c’est que la fonction de décompression ne prend que 220 octets !

Il n’y a donc presque pas raisons de ne pas l’utiliser.

La fonction est disponible dans le template Crazy Piri.

A suivre pour un prochain épisode dimanche prochain…

Visual studio code

Développement de BriXen: épisode 3

Après quelques années d’utilisation de Sublime Text, j’utilise maintenant Visual Studio Code qui à toutes les qualités de mon précédent éditeur avec l’avantage d’être gratuit.

Pour developper une application Amstrad CPC en C, j’ai besoin au minimum:

  • d’un raccourci me permettant de compiler rapidement (via shift+cmd+b idéalement)
  • d’un raccourci me permettant de tester mon application (shift+cmd+r)
  • de coloration syntaxique
  • d’une indentation automatique de mon code

Visual Studio Code étant facilement personnalisable, rien de ceci ne lui est impossible.

1. Compilation

Notre fichier build.sh étant déjà disponible dans notre template, il suffit de créer un raccourci pour l’exécuter.

Pour cela, nous créons un fichier tasks.json dans le dossier .vscode présent à la racine de notre projet.

Ce fichier (disponible à la fin de l’article) sera constitué de:

Ce fichier json décrit une tâche qui:

  • tue les instances de Retro Virtual Machine qui seraient encore en train de fonctionner.
  • exécute notre commande build.sh (L’emplacement de votre projet doit être modifié).
  • prend le retour de la commande build.sh et en retire les warning et error pour une affichage plus propre

Pour lier la tache à notre raccourci (cmd+shift+b), il faut modifier le fichier keybindings.json (cmd+shift+p pour afficher la Command Palette et entrez ‘open keyboard shortcuts (JSON)’)

Dans ce fichier json, créez l’entrée suivante

{
"key": "shift+cmd+b",
"command": "workbench.action.tasks.runTask",
"args": "SDCC - make"
}

2. Execution

Pour notre tâche d’execution, le principe est le même que pour la compilation, le shortcut étant juste:

{
"key": "shift+cmd+r",
"command": "workbench.action.tasks.runTask",
"args": "SDCC - Retro Virtual Machine"
}

3. La coloration syntaxique

Visual Studio Code dispose déjà (évidemment) d’un plugin de coloration syntaxique pour le source code. J’ai pris celui que propose Microsoft, c’est à dire C/C++. En plus de la coloration syntaxique, il propose aussi:

  • l’Intellisense (code completion, information sur les paramètres des fonctions, …),
  • le debugging (que je n’utilise pas encore)
  • et la navigation dans le code (pratique pour trouver la definition d’une fonction par exemple)

Pour l’installer, cmd+shift+x, recherche de C/C++ et bouton vert ‘install’. Trop facile.

Pour la facilité, j’ai ajouté le « format on save » à configurer dans les settings via le menu Text Editor/Formatting.

4. L’indentation automatique

Là non plus, nous n’allons pas nous compliquer la vie. Uncrustify a fait ses preuves et il existe un module pour VS Code.

J’utilise celui de Laurent Tréguier que je configure avec mon fichier uncrustify.cfg kivabien.

A suivre pour un prochain épisode dimanche prochain

Hello World!

Développement de BriXen: épisode 2

Exercice d’aujourd’hui: créer notre première application Amstrad. Rien de moins.

Tout d’abord, il est nécessaire d’installer Docker.

Ensuite, nous allons compiler le docker contenant le dernier toolchain CPTC (Crazy Piri Toolchain).

git clone git@github.com:Crazy-Piri/cptc-docker.git
cd cptc-docker
docker build -t cptc -f cptc.Dockerfile .

Actuellement, ce docker contient les outils suivants:

  • sdcc: compilateur C (et assembleur via sdasz80)
  • idsk: création d’image disk pour l’Amstrad
  • hex2bin: conversion de la sortie du compilateur vers un fichier lisible par l’Amstrad
  • nocart: conversion d’une image disque vers un fichier GX4000 / Amstrad plus
  • 2cdt: création d’un image cassette
  • Disark: convertisseur de source assembleur (rasm -> sdcc par exemple)
  • addhead: pour jouer avec les header AMSDOS d’un fichier
  • bin2c: convertisseur de fichier binaire vers un source .c
  • lzsa: compression de fichier binaire avec LZSA
  • rasm: assembleur de Roudoudou (utilisé actuellement pour convertir le player de ArkosTracker)

Je reviendrai plus en détail plus tard sur chacun de ces outils.

Une fois que le docker est compilé, le répertoire cptc-docker peut être effacé.

Ensuite, nous pouvons télécharger le template à partir duquel sera réalisé notre futur jeu.

git clone git@github.com:Crazy-Piri/cptc-template.git
cd cptc-template
./toolchain.sh
cd cptc-template
./build.sh

La commande toolchain.sh lance une session Docker dans notre environnement de developpement. Elle fonctionne sous linux et macOS. Il a donc lieu de l’adapter pour une utilisation sous Windows.

La commande build.sh crée le disque cptc-template.dsk dans lequel se trouve votre première application pour l’Amstrad CPC.

Ouvrez le fichier cptc-template.dsk dans votre émulateur préféré et lancez la commande

run"main.bin

Maintenant, comment interfacer tout cela avec Visual Studio Code ?

A suivre pour le prochain épisode dimanche prochain…

Ma chaine de compilation Amstrad CPC

Développement de BriXen: épisode 1

Introduction

Jusqu’il y a un peu de 6 mois, je n’avais jamais développé sur Amstrad CPC (mis à part en Basic il y a… plus de 30 ans). Lorsque Pascal Visa a lancé la CPC Gamedev Contest 2020 dans le groupe Facebook Amstrad CPC pour toujours and beyond !, je me suis dis que c’était l’occasion d’enfin m’y mettre. Le développement de mon émulateur CrocoDS m’a beaucoup appris sur les possibilités de notre ordinateur préféré.

Il restait donc à savoir comment programmer sur un Amstrad en 2020. Pas question évidemment de développer directement sur l’Amstrad mais plutôt de s’aider des outils modernes.

Comme beaucoup de développeurs actuellement, je suis passé sous Visual Studio Code,  l’éditeur de code multi plateforme et extensible développé par Microsoft.

Lorsque j’ai commencé à developper pour l’Amstrad CPC, il était donc évident que je puisse utiliser cette éditeur.

Mon langage de prédiléction étant depuis toujours le C pour sa simplicité et du fait qu’il soit un langage de très bas niveau. Je comptais donc developper en ce langage (avec évidemment l’ajout de code assembleurs pour les routines ayant besoin de plus d’optimisation).

Comment donc mélanger tout cela ?

Les outils

J’ai essayé divers environnements de developpement tels que CPCtelera, cpc-dev-tool-chain mais aucun ne m’a satisfait à 100%.

Ils m’auront au moins permis de me donner des idées sur plusieurs de mes futures outils. Ces outils auront leurs prochains articles détaillés à l’avenir.

  • SDCC comme compilateur C (et asm dans un premier temps). J’avais commencé avec Z88DK mais le codé généré par ce compilateur étaient beaucoup moins optimisé que celui de SDCC.
  • cpcrslib comme librairie de fonctions assembleur.
  • Arkos Tracker 2 pour la musique
  • Visual studio code (déjà évoqué auparavant)
  • Docker (je ne voulais pas devoir reinstaller un environnement de développement chaque fois que je change de machine)
  • Retro Virtual Machine comme émulateur multi-plateforme. J’ai mon propre émulateur (que j’utilise aussi au niveau developpement pour certaines de ces fonctionnalités) mais RVM va beaucoup plus loin au niveau debug.
  • Divers outils tels que convimgcpc, RGAS, iDSK…

Tout cela m’a permis de faire un template qui sera disponible sur GitHub dans les jours qui viennent qui me permet:

  • Via la commande SHIFT-CMD-B de faire un build de mes sources,
  • Via la commande SHIFT-CMD-R d’executer l’application directement dans Retro Virtual Machine.

A suivre pour l’épisode 2 très bientôt…

BriXen sur CPC-POWER

BriXen est disponible sur CPC-POWER !

Pour les rares personnes qui ne le connaitraient pas encore, le site CPC-POWER (en majuscule) est l’encyclopédie de tous les programmes (jeux et applications comprises) sorties sur Amstrad CPC depuis sa création.

Un incontournable donc.

Il est d’ailleurs intégré dans l’émulateur CrocoDS.

Merci Kukulcan 😉

BriXen démo disponible

Bonjour les adorateurs de l’Amstrad CPC,

Vous pouvez télécharger maintenant la demo du premier jeu de Crazy Piri !

BriXen est un des 10 compétiteurs de la CPC Gamedev Contest 2020.

Détruisez toutes les briques et évitez le BriXen !

Attention, lorsque le trésor s’ouvre, il reste juste ouvert un court moment.

Description des briques

Chaque brique a ses propres fonctionnalités !

  • ENTRAP
    • ces briques doivent être détruites au tout début du jeu. Si vous touchez un interrupteur SLIME, GAS, LAVA ou ACID avant de les avoir détruites, la seule solution sera de vous suicider (esc ou fire2)‌
  • GEM LOCK
    • ces briques peuvent être considérées comme des clé/verrou. Vous touchez la GEM, votre boule la porte et permet d’ouvrir un des verrous.
  • SLIME, GAS, LAVA, ACID
    • ces briques ne peuvent être détruites qu’après avoir touché l’interrupteur correspondant.
  • INVERT DIR
    • inversion de direction de la balle.
  • BRIXEN
    • la mort ! Ne le touchez pas !‌
  • LIFE
    • vie supplémentaire

Credits

Ce jeu n’aurait pas pu être fait sans ces personnes:

  • Cedric « leZone » Grandemange (gfxs),
  • Alexis « KOOPA » Lambin (sfxs),
  • Bruno « Kukulcan » cpc-power.com (title code),
  • Matéolion (add levels),
  • Miguel « RedBug » Vanhove (code).

Téléchargez le sur DoubleSide Games (or jouez en ligne sur CrocoDS).

Et votez pour nous sur Facebook! Une version physique du jeu sera disponible bientôt…