Mois : septembre 2022

CrocoDS

Fin 2006, je m’achète une Nintendo DS et nostalgique de mon Amstrad CPC, j’aimerai pouvoir emporter mes vieux jeux sur cette petite console.

Je me met donc à chercher un émulateur Amstrad qui serait assez propre que pour être porté sur la Nintendo DS.

Je tombe assez rapidement sur WinCPC dont le code est très propre et bien structuré et contacte Demoniak, son auteur, pour avoir l’autorisation de porter son code sur la DS. Permission reçue, je sors vite une version qui tourne à 70% de la vitesse réelle du CPC.

Mais je ne suis pas seul, un concurrent arrive. Une compétition saine a lieu entre Alekmaul qui fera AmeDS et moi pour faire la version la plus jouable. Après de nombreuses optimisations, ma version atteint la première une vitesse de 100% mais je serai vite rejoint par Alekmaul.

Pendant cette période, j’enverrai quelques bug report à Demoniak qui en tiendra compte et améliorera WinCPC suite à mes retours (désolé – et merci – Ludo).

AmeDS utilisant le core de Caprice, sa version émule mieux l’Amstrad que CrocoDS (et possède une base de donnée en ligne – profitant du Wifi intégré de la DS).

Ma version à l’avantage d’avoir quelques options tel que le redimensionnement automatique et profite de meilleurs graphismes (icônes et clavier) grâce à Kukulcan.

Si vous possédez une Nintendo DS et êtes fans d’Amstrad, les deux versions sont absolument à avoir.

Le code source est disponible sur GitHub mais je n’arrive plus à le recompiler. Le devkit sur lequel il était basé a trop évolué et il y aurait beaucoup à modifier pour rendre cette version encore compilable. Avis à celui qui est tenté par le challenge.

Quelques années plus tard, je sortirai CrocoDS sur d’autres devices (dont la version OpenDingux – ma préférée), une version retroArch, une version iPad, iPhone, macOS et une version Web disponible sur crocods.org/web.

Du coeur d’origine de WinCPC, il ne reste presque plus rien. CrocoDS est devenu un Gloubi-boulga de Arnold, Caprice et de quelques restes de WinCPC.

Ayant fait en sorte que le code soit le plus portable possible, développer pour de nouveaux matériels est assez rapide.

J’ai un peu abandonné le développement de cet émulateur (d’autres en font de bien meilleur que moi) et j’ai rediriger mes envies Amstrad sur le développement de jeux pour Crazy Piri… mais ceci est une autre histoire, qui sera contée une autre fois.

Boulder dash

Introduction

J’ai eu mon premier ordinateur en 1987. Après avoir goûté à la programmation par le Logo sur le Thomson TO7 de l’école, il me fallait ma propre machine.

Mes parents ne voulant pas que j’utilise la télévision familiale pour cet usage, je devais donc m’orienter vers un ensemble clavier-écran (ou bien acheter un écran supplémentaire qui aurait dépassé mon budget). Cela m’arrangeait vu qu’il prendrait ainsi place dans ma chambre et me serait attribuer à temps plein.

Mon choix (ou plutôt celui de mes parents) s’est donc porté vers le Schneider CPC464 version monochrome (la version belge de l’Amstrad). Heureux choix avec le recul.

Mon premier jeu acheté avec le CPC fût Jumpman , un jeu « budget » basé sur le jeu d’arcade Q*Bert.

Quelques mois plus tard, mon meilleur ami a reçu un CPC6128 avec lecteur de disquette. Lecteur de disquette auquel je n’aurais accès que quelques années plus tard avec le Schneider EuroPC… Mais ceci est une autre histoire, qui sera contée une autre fois..

Vu que nous étions quelques un à avoir un CPC464 à l’école, mon meilleur ami pris donc un lecteur de cassette à connecter sur son 6128. Cela me permit d’avoir le jeu auxquels j’ai le plus joué sur le CPC: Boulder Dash !

Boulder Dash

Boulder Dash est un open-world.. Si, si… N’ayons pas peur des mots. C’est juste un petit vu que la cave n’est composées que de 40 blocs horizontaux sur 22 verticaux.

C’est en partie pour ça que j’adore ce jeu. Le joueur dispose d’une grande liberté de mouvement et chaque cave (les différents niveaux) peut être refaite plusieurs fois sans lassitude.

Aimant tellement ce jeu, j’ai voulu faire ma version sur mes devices Apple (à voir si je la sors un jour… comme beaucoup de mes développements).

Construction des niveaux

Boulder Dash comptant 64 (16 x 4) caves, si il fallait décrire chaque cave, il faudrait 70400 (16 x 5 x 40 x 22) octets. Il y aurait moyen d’optimiser cela étant donné qu’un octet est trop large pour la description d’un bloc mais cela resterait beaucoup trop pour un pauvre Amstrad avec ses 64ko (donc 16ko utilisé pour la gestion de l’écran).

En 2005, Arno Weber interviewa Peter Liepa à propos de son jeu:

[…] L’éditeur m’a mis en contact avec Chris Gray, qui avait soumis un jeu en Basic, mais qui à l’époque n’avait pas les compétences nécessaires pour le convertir en langage machine. Donc, cela semblait être un bon projet pour acquérir de l’experience et je me suis assis et j’ai commencé. Le jeu ressemblait à un jeu d’arcade appelé The Pit, mais après l’avoir examiné de plus près, je ne pensais pas que le jeu avait du potentiel – trop de choses étaient prédéterminées. Mais j’ai commencé à jouer avec des éléments de base tels que la terre, les rochers et les diamants et, en quelques jours, j’ai construit le « moteur physique » de base de ce qui allait devenir Boulder Dash. Je me suis rendu compte qu’en utilisant un générateur de nombres aléatoires, vous pouviez générer des grottes aléatoires, et qu’en contrôlant la densité de rochers et de diamants, vous pouviez jouer à des jeux intéressants. Le jeu était non seulement intéressant du point de vue des casse-tête, mais il faisait également appel à diverses motivations émotionnelles – non seulement psychotiques évidentes telles que la cupidité (collectionner des diamants), la destruction (déloger des rochers et tuer des lucioles) – mais aussi des névrotiques comme le nettoyage de toute les saletés de la grotte. Et je pense que le jeu avait un sens de l’humour – si vous trouvez quelqu’un qui s’ecrase par inadvertance sous un rocher délogé drôle. […] Peter Liepa (via boulder-dash.nl)

Les caves sont donc décrites via des primitives (remplissage de rectangles aléatoires, placement de lignes et de points, …), l’occupation mémoire est ainsi grandement réduite.

La cave I du premier Boulder Dash, par exemple, est décrite de cette façon en format BDCFF (Boulder Dash Construction Kit File Format)

[cave]
DiamondValue=5 10
DiamondsRequired=75 75 80 85 90
CaveTime=150 150 130 130 120
Colors=Orange Purple White
RandSeed=100 137 140 251 51
RandomFill=BOULDER 240 DIAMOND 120

[objects]
FillRect=5 8 17 20 WALL SPACE
Point=12 8 DIRT
FillRect=25 8 37 20 WALL SPACE
Point=31 8 DIRT
Line=17 16 25 16 WALL
Line=17 17 25 17 SPACE
Point=7 10 INBOX
Point=8 10 OUTBOX
[/objects]

[/cave]

Cela donne la cave suivante:

Attachment.png
Cave I

Le gain de mémoire est donc évident et en utilisant une routine de génération de nombres aléatoires avec une graine prédéfinie (RandSeed), les niveaux seront toujours les mêmes (et même sur des plateformes différentes telles que le C64 ou le PC)

La description du format BDCFF est disponible sur ce site: http://www.gratissaugen.de/erbsen/bdcff.html

Génération de nombres aléatoires

Pour ceux qui sont interressé par la génération des nombres aléatoires pour la création des niveaux, cela se passe comme cela:

void boulderdashRandom(int *RandSeed1, int *RandSeed2) // Random generator used on C64
    {
    short TempRand1;
    short TempRand2;
    short carry;
    short result;

    TempRand1 = (*RandSeed1 & 0x01) * 0x80;
    TempRand2 = (*RandSeed2 >> 1) & 0x7F;
    result = (*RandSeed2) + (*RandSeed2 & 0x01) * 0x80;
    carry = (result > 0xFF);
    result = result & 0xFF;
    result = result + carry + 0x13;
    carry = (result > 0xFF);
    *RandSeed2 = result & 0xFF;
    result = *RandSeed1 + carry + TempRand1;
    carry = (result > 0xFF);
    result = result & 0xFF;
    result = result + carry + TempRand2;
    *RandSeed1 = result & 0xFF;
    }

Heritage

Si vous voulez rejouez à cet excellent jeu, je vous conseille d’essayer Rocks’n’Diamonds qui contient tous les niveaux originaux de Boulder Dash, mais aussi ceux de Emerald Mine ou de Sokoban.

Source:

Module

Est-ce que les noms de Jugi, Scorpik, Captain, Lizardking ou Jogeir Liljedahl ? Si vous êtes au courant de la scène démo des années 1990, la réponse est forcément oui !

Ces personnes (et bien d’autres) nous ont fourni des modules (les .mod, .s3m ou .xm) qui ont enchantées nos oreilles.

Mes principales sources étaient le CD du magazine PC Team, les partages lors de demoparty et les BBS (saviez-vous qu’il en existe encore ? cela fera l’object d’un futur article)

Mon player préféré était (et reste) Cubic Player du groupe Cubic Team & $eeN (regardez leur intro 64k Lasse Reinbøng quand vous aurez le temps). Je l’ai encore beaucoup utilisé lors de l’arrivée du mp3 jusqu’à mon passage à Windows 95 et son Winamp… Fan de la ligne de commande, il m’a fallu très longtemps pour passer à Windows et abandonner mon cher MS-DOS.

J’ai été agréablement surpris lorsque j’ai vu que Cubic Player continuait à vivre sous Linux (et sur d’autres OS aussi) sous la forme de Open Cubic Player et qu’il est encore bien suivi.

apt-get install opencubicplayer
ocp -dcurses  # pour le lancer en ligne de commande dans la fenêtre active

Mon top 5 (pas facile de choisir)

  • Space Debris – Markus « Captain » Kaarlonen (SPACEDEBRIS.mod). Captain nous raconté de la genèse sur son site. A lire absolument !
  • Onward Ride – Jukka Jugi Kaartinen (onward.xm). Extrait de la demo Dope du groupe Complex
  • Fountain of Sighs – Adam « Scorpik » Skorupa (FOUNTAIN.mod). Gagnant de la 4channel music à la The Party 1995
  • Lasse Reinbøng – Dirk « Doj » Jagdmann (INTRO15C). Musique de l’intro Lasse Reinbøng
  • Dance of the goblins – Maarten « Crystal Score » van Strien (DANCE.IT). Souvenir de la Wired 1997.

Et si vous vous allez plus loin, sachez que FastTracker II a été refait en SDL2 aussi !

AC 2021

Le virus est là depuis 1 an et demi. Le monde se meurt. Nous avons besoin de sortir de chez nous !

J’ai fais beaucoup de démoparty auparavant, mais n’avais jamais fait de conventions. M’étant remis sur Amstrad depuis peu, l’AC 2021 ne pouvait que m’attirer.

C’est donc le weekend du 27 et 28 novembre 2021 que je suis parti, seul loin de ma famille, à cette convention dans le petit village de Congis pas loin de Paris.

C’est l’occasion de rencontrer IRL tout des gens avec qui je parle sur les forums, groupe facebook et autres Discord.

L’occasion aussi de présenter la dernière version de notre remake de Puzzle Bobble.

L’association RGC organise, depuis 2006, deux conventions retrogaming. La plus grande, la RGC, est dédié principalement aux consoles. Celle-ci, l’AC, est plus dédiée aux ordinateurs (Amiga/Commodore, Atari, Amstrad, MSX, Thomson, Oric, etc).

Je ne me souvenais plus avoir vu autant d’Amstrad CPC. Même aux démoparty il y a 25 ans, il n’y en avait pas autant. Quand on voit les productions qui sortent sur cette machine actuellement, ce n’est pas étonnant. Le CPC est plus en forme que jamais.

Les époques ont changé, Covid oblige, nous ne pouvons plus dormir sous les tables. De toute façon, avec mon grand age, je n’en avais pas l’intention. Une nuit d’hôtel (même spartiate) m’était nécessaire. Les pizzas ont disparu aussi, nous nous faisons un beau restaurant en fin de journée. L’embourgeoisement nous a rattrapés.

Beaucoup de belles rencontres. Je ne citerai personne de peur d’oublier quelqu’un, mais ils se reconnaitront.

Je n’avais qu’une envie à la fin de cette convention: d’assister à la prochaine !

Flipper Zero

J’adore Kickstarter même si les délais pour recevoir la récompense sont souvent très longs. (J’attend toujours mon Spectrum Next commandé en octobre 2020).

Fin juillet 2020, j’ai commandé le Flipper Zero. Le couteau suisse pour les hackers (dixit les créateurs) et il est enfin arrivé !

Cet petit accessoire, de la grandeur d’une grosse clef usb (oui, une bien grosse de 98 x 39 x 24 mm et 140 grammes) est bourré de fonctionnalités :

  • un lecteur et émulateur RFID et NFC
  • un lecteur et émulateur de iButton Reader & Emulator (Dallas)
  • un émetteur-récepteur infrarouge (800-950 nm)
  • un émetteur-récepteur Gigahertz (300-928 Mhz)
  • un module Bluetooth LE
  • des GPIO
  • un port USB
  • un slot MicroSD
  • un écran monochrome de 128×64 pixels
  • un buzzer
  • une batterie de 2000 mAh
  • un processeur STM32 ARM Cortex-M4
  • un firmware totalement open source et totalement scriptable

Tellement de trucs que cela en est abusé.

Je ne pourrais évidemment pas faire le tour du module avec un seul article mais vous pouvez déjà imaginer tout ce qu’il permet.

Nous commencerons par la copie de code infrarouge. Histoire d’en faire un télécommande d’arrêt d’urgence de TV par exemple 😉

Mais ceci est une autre histoire, qui sera contée une autre fois.

Edito – Septembre 2022

Plus de 3 mois sans rien poster.. alors que j’ai plein de textes déjà écrits… J’abuse vraiment !

Beaucoup de raisons à tout cela. Des bonnes mais aussi des mauvaises (Qui a dit procrastination ?)

Le secteur technologique souffre. Rupture de stock partout, inflation galopante. Une impression que l’innovation n’est plus la priorité pour beaucoup.

Mais sinon, de mon côté, que c’est-il passé ces 3 derniers mois ?

J’ai enfin eu mon Flipper Zero, je vous en parle plus en détail rapidement.
J’ai aussi eu une nouvelle console portable qui mérite que l’on s’attarde sur elle (la Miyoo Mini)
Le GPD Pocket 3 a remplacé mon GPD Pocket 2. Et j’ai remplacé tous mes claviers Azerty par des Qwerty.
J’ai découvert avec plaisir (oui, oui) Windows 11

De quoi vous gaver jusqu’au bout de l’année sans problème.