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 on CPC-POWER

BriXen is available on CPC-POWER !

For the rare people who don't know it yet, the site CPC-POWER (in capital letters) is the encyclopedia of all programs (games and applications included) released on Amstrad CPC since its creation.

A must therefore.

It is also integrated into the emulator CrocoDS.

Thanks Kukulcan

BriXen demo is available

Hi Amstrad CPC Lovers,

You could download now the demo of the first Amstrad game from Crazy Piri!

BriXen was one of the ten competitors for the CPC Gamedev Contest 2020.

Destroy all the bricks and avoid the BriXen !

Beware, when the treasure open, it only remains for a short time.

Description of the bricks

Each brick has its functionality!

  • ENTRAP
    • these bricks must be destroyed at the very start of the game. If you hit a SLIME, GAS, LAVA or ACID switch before destroying them, the only solution will be to kill yourself (esc or fire2)
  • GEM LOCK
    • these bricks can be considered as key / lock. You touch the GEM, your ball carries it and opens one of the locks.
  • SLIME, GAS, LAVA, ACID
    • these bricks can only be destroyed after touching the corresponding switch.
  • INVERT DIR
    • reversal of ball direction.
  • BRIXEN
    • death! Do not touch it !
  • LIFE
    • extra life

Credits

This game couldn’t be done without all these people:

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

Download it from DoubleSide Games (or play online on CrocoDS).

And vote for us on Facebook! A physical version of the game will be available soon…