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…

Projets en cours

Pendant que BriXen est en cours de finalisation pour une sortie physique, nous ne chômons pas.

Nous avons quelques production en cours.

Comme vous pouvez le voir dans la suite de l’article, il y a surtout des projets de portage (mais pas que).

Mais, pourquoi perdre son temps à faire des portages alors qu’il existe déjà les versions originales qui sont meilleures ?

Les raisons sont multiples:

  • Notre machine de coeur est l’Amstrad CPC.
  • Le challenge: cela permet de montrer que l’Amstrad a souvent été mal exploité (ce qui nous amène à la raison suivante)
  • Réparer une erreur du passé pour un jeu qui n’a eu droit qu’à un mauvais port Speccy
  • L’amusement/nostalgie (appeler cela comme vous voulez). Nous nous remettons dans la peau des développeurs des années 80 qui portaient les jeux d’arcade ou d’Amiga/AtariST.
  • Et finalement, personnellement, j’apprend à maitriser cette superbe machine. Et à voir ce qui sort chez les grands groupes actuellement, j’ai encore de quoi apprendre. (rhaa… le scrolling au pixel !). J’essaye dans chaque port d’apprendre une nouvelle technique.

Nos portages en cours

XX play Tetris

Fini à 95% (nous sommes dans la phase betatest pour corriger quelques petits détails)

Il s’agit du portage de la version Gameboy de Tetris. Les graphismes et le gameplay ont été refaits à l’identique.

Pour la musique, un guest nommé Cyrille « Ayor61 » Gouret nous a repris toutes les musiques du jeu dans une version plus Amstradienne.

XX play Puzzli

Fini à 60% (le code est presque fini mais le graphisme n’est nulle part)

Portage d’un jeu d’arcade de Banpresto. Déjà porté par Michel Louvet sur Colecovision et par Alekmaul sur Nintendo DS, Megadrive (et bientôt sur SNES). C’est d’ailleurs Alekmaul qui m’a donné cette envie de faire le port sur l’Amstrad.

Après l’avoir montré à l’ami Bruno Kukulcan, celui-ci m’a dit qu’il désirerait faire ce port depuis quelques années… Trop tard. Mon code était déjà presque fini 😉 Ce projet bénéficiera cependant de son aide pour la direction artistique.

XX play Pirka

Fini à 80% (code presque fini, manque les graphismes et la musique)

J’ai sorti ce jeu sur iPhone il y a quelques mois. Il s’agit du portage d’un jeu Flash sorti en 2005: Blix from Lightforce Game – Nick Kouvaris.

Le jeu est jouable, les « graphismes » existent mais est-il suffisamment intéressant que pour bénéficier d’une sortie.

Aurait-il plus se place en tant que mini-jeu dans un party game à la Mario Party ? A voir.

XX play Tawbiboun

Fini à 60% (code presque fini, manque les graphismes et la musique)

Encore un port mais je ne sais plus de quel jeu… Je l’avais commencé sur Pocket PC (déjà en tant que port), il y a plus de 15 ans.

Il s’agit d’un jeu de pousse-pousse un peu amélioré où il faut reconstruire des lignes en faisant des permutations de 4 cases.

Même conclusion que Pirka… Est-ce suffisant pour en faire un jeu complet ?

Nos développements en cours

8bitwars

Fini à 5% (le héros se déplace de manière convaincante)

Pas vraiment un portage vu qu’il n’y a pas de jeu original mais plutôt un jeu multiplateforme dont la version Amstrad sera faite par nous.

Ce jeu est le résultat d’un objectif de la campagne Kickstarter de Andy Remic pour son documentaire « the 8 bit wars ».

The 8-BIT WARS – THE GAME on MULTIPLE FORMATS! – A completely brand new 8-BIT computer game. All backers will receive downloads of the finished game(s). It is intended they are available for multiple 8-BIT platforms. Here are several screenshots… concept below.

Nous avons tout à créer. Beau challenge en perspective.

BriXen

Plus besoin de le présenter. 90% des articles du blog lui sont actuellement consacrés…

Que dire sur lui actuellement ?

Il avance bien. Par rapport à la démo:

  • un mode de démo a été rajouté. Cela peut donc faire office d’économiseur d’écran 😉
  • les 28 niveaux supplémentaires ont été crées.

La version physique se précise mais il y a encore du boulot. Il doit être parfait !

Conclusion

C’est tout pour l’instant même si d’autres jeux sont aussi en reflexion et que nous avons aussi plein d’autres idées hors developpement.

A bientôt

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…