article

Interview Elmsoft

Elmar Krieger, également connu sous le nom d’Elmsoft / EGS dans la demoscene, était un programmeur réputé, actif sur la plateforme Amstrad CPC. Il a créé quelques demos qui valent le détour (dont Chain Demo), mais il est surtout connu pour les jeux suivants : Zap’t’Balls, Super Cauldron et bien sûr Prehistorik 2. Adolescent à l’époque, Prehistorik 2 m’a particulièrement marqué. J’étais vraiment curieux d’en savoir plus sur son travail sur CPC, je l’ai donc contacté pour une interview et il a gentiment accepté ! :)

Elmar Krieger (2013)
Elmar Krieger (2013)

1. Salut Elmar ! Peux-tu te présenter brièvement ? (âge, pays, ce que tu fais dans la vie, etc.).

Je suis né en 1974 en Autriche et je vis à Vienne. Je gagne ma vie en vendant le successeur de Zap’t’Balls, un programme appelé YASARA, où les boules représentent de vrais atomes et se déplacent de façon plus réaliste (ce qu’on appelle « simulation de dynamique moléculaire »), afin que les universités et les entreprises pharmaceutiques puissent s’en servir pour leurs recherches.

2. Quand as-tu rencontré l’Amstrad CPC pour la première fois ? Était-ce ton premier ordinateur ? En as-tu encore un ?

Mon premier ordinateur a été un TI-99/4A en 1984/85, mais l’essentiel du plaisir a commencé en 1986, quand mon père a acheté un CPC 664 avec écran vert. Plusieurs CPC traînent encore chez mes parents, malheureusement couverts de poussière.

Une configuration classique de TI-99/4A
Une configuration classique de TI-99/4A

3. Je suis intrigué. Tu as fait beaucoup de demos sur Amstrad CPC (la plus célèbre étant Chain Demo). Ton groupe de demos s’appelait « Elmsoft Game Service ». Il est facile de deviner d’où vient « ELMsoft », mais pourquoi mentionner le mot « game » dans EGS pour faire des demos ? Faisais-tu des demos à l’époque avec l’intention d’être repéré par les sociétés de jeux ? Cela a-t-il marché ?

Chain Demo
Chain Demo
Space Taxi par Elmar (1987)
Space Taxi par Elmar (1987)

Comme tous les gamins, je voulais jouer à des jeux vidéo ; mes deux premiers jeux CPC ont été Harrier Attack et Hunchback, et chacun coûtait autant que 100 litres d’essence. En monnaie d’aujourd’hui, cela fait la bagatelle de 150 EUR par jeu vidéo. J’ai donc eu la chance de grandir à une époque où les jeux vidéo étaient une ressource rare et où les gamins étaient encore obligés de programmer eux-mêmes. Pour moi, cela s’est résumé à plusieurs jeux en BASIC totalement nuls jusqu’en 1987, en partie avec Laser BASIC (c’était l’extension BASIC d’Ocean pour faire des sprites et du scrolling).

Le plus drôle, c’est que je viens de googler Space Taxi CPC et j’ai découvert qu’un masochiste avait même uploadé une image *.dsk (c’était un « port » d’un jeu C64 du même nom). Voilà d’où venait le « Game Service » ;-)

4. Tu as été présent aux deux demo-parties Euromeeting 1 & 2 (1991, 1992). Veinard ! :) As-tu des souvenirs, des anecdotes… à partager ?

La demo S&KOH d’Overflow

Euromeeting 1 a été mon premier contact personnel avec la scène CPC internationale, et chaque aspect, dans toute sa splendeur, s’est gravé à jamais dans mon cerveau. Aussi parce que j’ai totalement oublié de dormir, si bien qu’il a fallu me porter à la fin. Côté programmation CPC, mon souvenir le plus impressionnant est la demo S&KOH d’Overflow, avec son incroyable fond tordu qui défile verticalement et les sprites par-dessus. Pourrais-tu l’interviewer, lui, la prochaine fois ? ;-). Je me souviens aussi d’une demo de Logon avec un splitting de modes horizontal, où les moitiés gauche et droite de l’écran avaient des profondeurs de couleur différentes.

5. Toujours à propos des parties Euromeeting, une preview d’un shoot’em’up, Cyborgs, y a été montrée. Le jeu n’a jamais été terminé. Pourquoi ?

Parce que j’ai envoyé la preview à plusieurs sociétés, mais je n’ai pas trouvé d’éditeur. C’était en 1990, le CPC se portait encore bien, alors j’ai décidé d’essayer un autre projet.

Cyborgs (preview)
Cyborgs (preview)

6. Zap’t’Balls a été ton premier vrai jeu. Était-ce un succès de le publier en shareware ? Qu’en as-tu appris ?

Fiche descriptive du jeu Zap't'Balls (avec l'aimable autorisation de www.cpc-power.com)
Fiche descriptive du jeu Zap’t’Balls (avec l’aimable autorisation de www.cpc-power.com)

J’ai programmé Zap’t’Balls surtout parce que le magazine CPC allemand « Amstrad CPC International » avait accepté à l’avance de le mettre sur la disquette de couverture. Et je me suis dit que c’est bien plus amusant de programmer quand on sait que le résultat sera publié. Comme beaucoup de jeux de codeurs de demos, Zap’t’Balls a été fait « à l’envers ».

On commençait par trouver une technique de programmation intéressante, puis on réfléchissait à un jeu qui pourrait l’utiliser. Pour Zap’t’Balls, la technique consistait à dessiner rapidement de nombreuses boules énormes à 50 images par seconde. Cela ne marchait qu’avec des boules, puisque ce sont des objets ronds (on pouvait donc restaurer seulement une portion du fond en forme de donut, déplacer un peu la boule et la redessiner au nouvel emplacement) et, à part le reflet de la lumière, les boules n’étaient pas très colorées (on pouvait donc placer le pointeur de pile dans la mémoire vidéo et y « pusher » les graphismes, en les décompressant à la volée, avec un programme en assembleur pour chaque taille de boule).

Écran d'intro de Zap't'Balls 6225206 Menu de Zap't'Balls (Advanced Edition) 9765898 Zap't'Balls (World Of Ice)
Écran d’intro de Zap’t’Balls
Menu de Zap't'Balls (Advanced Edition)
Menu de Zap’t’Balls (Advanced Edition)
Zap't'Balls (World Of Ice)
Zap’t’Balls (World Of Ice)
Zap’t’Balls (World of Fire)

Cela a été terminé en 1991, et début 1992 j’ai commencé Zap’t’Balls - The Advanced Edition. En 1992, le CPC était déjà sur le déclin et les sociétés ne publiaient plus vraiment de titres exclusivement CPC, juste des titres multiplateformes avec une version CPC pour couvrir le marché. Je n’ai donc pas cherché d’éditeur, je l’ai vendu moi-même (ce n’était en fait pas du shareware) avec l’aide d’autres passionnés de CPC. C’était quand même un coup de chance, car après l’Euro Meeting 2 de Reims, j’ai fait un détour par Paris et j’ai montré le jeu à Titus Software, qui m’a engagé pour convertir Super Cauldron et Prehistorik 2 sur CPC.

7. Super Cauldron et Prehistorik 2, tous deux distribués par l’éditeur français Titus, sont sortis en 1993. Peux-tu décrire ton accord avec Titus Software, et quelle était ta relation avec eux pendant le développement ? Ont-ils été des succès commerciaux, avais-tu des chiffres sur les copies vendues, etc. ?

L’accord consistait à créer les versions CPC de ces deux jeux pour une somme fixe, sans autre question ;-). Je n’ai donc aucune idée du nombre de copies vendues, et 1993 était sans doute déjà trop tard pour un vrai succès commercial sur CPC. Si je me souviens bien, ce sont les deux derniers titres Titus pour le CPC.

Illustration

8. Super Cauldron et Prehistorik 2 utilisent tous deux la même technologie pour afficher de façon fluide d’immenses mondes. Peux-tu décrire les outils employés, ta façon de travailler à l’époque, etc. ? As-tu utilisé des outils de cross-development ? Les assets (sprites, images…) ont-ils été adaptés de la version PC ?

Prehistorik 2 faisait partie de la dernière fournée commerciale de jeux pour Amstrad CPC (1993).

Écran de chargement de Ghost’n’Goblins

Le CPU Z80A du CPC était bien trop lent pour faire défiler la scène de façon fluide en copiant dans la mémoire vidéo. La solution officielle consistait à laisser le matériel scroller en changeant simplement l’adresse de départ de la mémoire vidéo. Malheureusement, cela n’autorisait que des pas de 8 pixels dans chaque direction (à la résolution du Mode 1, 320x200 pixels). Donc si l’on voulait un scrolling vraiment fluide (à la fréquence de rafraîchissement de l’écran, 50 images par seconde), cela donnait des jeux d’une rapidité insensée ; le premier a été Roland in the caves, je crois, et le plus célèbre probablement Ghosts’n’Goblins. Mais en appliquant les astuces découvertes par la demo scene, un scrolling plus lent et donc plus agréable pour le joueur, de 4 pixels à l’horizontale et 1 pixel à la verticale, devenait possible, et c’est celui que j’ai utilisé pour les deux jeux.

Écran d’intro de Super Cauldron

Le problème suivant à résoudre, c’était les sprites, et là les deux jeux différaient sensiblement. Le CPC n’avait pas de sprites matériels comme le C64, donc chaque pixel en mouvement devait être dessiné « à la main » par le CPU. Cela signifie que le processus de dessin (restaurer le fond et dessiner le sprite au nouvel emplacement) était en principe visible à l’écran. Beaucoup de jeux utilisaient le page flipping pour le masquer (c’est encore la méthode de référence aujourd’hui), mais cela aurait imposé de réduire la taille de l’écran de 50 % pour rester dans la limite de 64 kilo-octets de mémoire fixée par Titus (ils voulaient aussi supporter le CPC 464/664 sans extension de RAM, même sur cassette).

Le truc des sprites dans Super Cauldron fonctionnait donc ainsi :

  1. Garder trace des sprites qui se chevauchent et les regrouper en « paquets de sprites ».
  2. Estimer le temps nécessaire pour restaurer le fond commun et redessiner chaque paquet.
  3. Tenir compte de la position courante du rayon cathodique dans le moniteur et planifier le dessin des paquets de façon qu’aucun sprite à moitié terminé, et donc aucun effet de scintillement, ne devienne visible.
Super Cauldron
Super Cauldron
Écran d’intro de Prehistorik 2

Cette recette fonctionnait bien, mais pas trop bien. Surtout quand de grands sprites ou beaucoup de sprites se chevauchaient, le dessin pouvait prendre plus d‘1/50e de seconde, et un scintillement occasionnel devenait alors visible. Pour Prehistorik 2, qui avait en plus de plus grands sprites, j’ai donc changé la recette en ne gardant que l’étape 1 :

  1. Garder trace des sprites qui se chevauchent et les regrouper en « paquets de sprites ».
  2. Pour chaque sprite, déterminer le rectangle qui englobe l’ancienne et la nouvelle position du sprite.
  3. Dessiner les graphismes du fond situés dans ce rectangle vers un buffer hors écran.
  4. Dessiner dans le buffer hors écran les parties de tous les sprites du paquet qui croisent le rectangle.
  5. Copier le buffer hors écran vers l’écran.
Prehistorik 2 (version Amstrad CPC)

Cette approche était plus lente que la première, car elle exigeait une copie supplémentaire, mais elle était aussi 100 % sans scintillement. Si le rayon cathodique coupait l’opération de copie, le résultat n’était qu’un « effet de tearing », bien moins voyant qu’un scintillement. Le plus drôle, c’est que le tearing hante encore l’informatique graphique aujourd’hui, 20 ans plus tard ;-)

Concernant les graphismes, ils venaient pour l’essentiel de la version PC : Titus fournissait des graphismes VGA en résolution 320*200 pixels, je les retouchais pour le CPC avec Deluxe Paint sur PC, puis je convertissais le tout en 160*200 pixels (Mode 0), je le copiais sur une disquette 5.25” et je le relisais sur le CPC. Pour le développement, j’utilisais deux CPC : l’un faisait tourner l’assembleur Maxam pour écrire le code, l’autre servait à le tester, avec une MultifaceII branchée pour déboguer. Ce montage imposait un changement de disquette à la main à chaque essai. Un vrai cauchemar vu d’aujourd’hui ;-)

Prehistorik 2 (version Amstrad Plus)
Prehistorik 2 (version Amstrad Plus)

9. Prehistorik 2 a fait un usage avancé des fonctionnalités de l’Amstrad Plus. Que pensais-tu de cette machine à l’époque ? Que penses-tu de cette machine aujourd’hui ?

Je pensais ce que tout le monde pensait : l’Amstrad Plus aurait été une machine fantastique en 1986, mais elle arrivait bien trop tard en 1990, alors que l’Amiga 500 et son CPU 16 bits avaient déjà trois ans. Cela dit, c’était très amusant d’ajouter les effets CPC+ à Prehistorik 2, comme le scrolling parallaxe réalisé avec des sprites matériels au premier plan et le changement rapide de couleur à l’arrière-plan (fait avec un petit programme de dessin qui générait du code Z80 changeant rapidement la couleur de fond pour créer les graphismes d’arrière-plan).

10. Il a été mentionné quelque part (dans la demo Voyage 93, peut-être ?) que tu as ensuite quitté l’Amstrad CPC pour les jeux GameBoy (les deux plateformes partageant le même processeur Z80). Peux-tu nous parler de tes activités sur GB, de ce qui est sorti publiquement, etc. ? Après cela, as-tu poursuivi une carrière de programmeur de jeux vidéo professionnel ?

Une fois Prehistorik 2 terminé sur CPC, j’ai aussi porté le jeu sur Nintendo Gameboy, où il s’appelle Prehistorik Man. C’était la GameBoy d’origine, avec une résolution de 160*144 pixels et quatre nuances de gris. Et je me suis beaucoup amusé à transposer certains de nos trucs de demo Amstrad CPC sur GameBoy, comme les messages qui défilent en plein écran grâce aux split-rasters, voir par exemple cette intro ou le premier niveau. Étonnamment, j’ai pu réutiliser les algorithmes de sprites logiciels du CPC, car même si la GameBoy possède des sprites matériels de 8*16 pixels, ceux-ci ont de sérieuses limitations (10 au maximum par ligne, mauvaises priorités). Donc, chose amusante, notre bon vieux CPC a permis à la GameBoy d’afficher de plus grands sprites ;-)

Prehistorik Man (Nintendo Gameboy)
Prehistorik Man (Nintendo Gameboy)
Stunt Race FX (Nintendo Gameboy)
Stunt Race FX (Nintendo Gameboy)

Toute la musique que j’ai utilisée sur Gameboy était en réalité de la vraie musique CPC, puisque j’ai fait un player Gameboy pour le célèbre SoundTrakker de BSC.

Après cela, les graphismes 3D étaient déjà en plein essor, et j’ai travaillé sur un moteur 3D pour la GameBoy avec du texture mapping, destiné à un jeu appelé StuntRaceFX. Vu la faiblesse du CPU de la GameBoy, le faire en logiciel était totalement sans espoir, je l’ai donc fondé sur des astuces matérielles comme le « pixel line splitting » (où l’adresse de départ de la mémoire vidéo et les couleurs sont changées à chaque ligne de pixels). Merci à celui qui l’a uploadé ici (ça commence à la minute 1:10). Au passage, le passage devant le logo « FX » et les montagnes n’utilisait pas d’astuces matérielles, mais était réalisé en décompressant des graphismes précalculés développés par mon ami Mark Piffer. Toute la musique que j’ai utilisée sur Gameboy était en réalité de la vraie musique CPC, puisque j’ai fait un player Gameboy pour le célèbre SoundTrakker de BSC.

Malheureusement, ce moteur 3D n’a jamais atterri dans une cartouche GameBoy, et ce fut mon dernier projet de divertissement. Juste après, j’ai fait quelque chose de très « lame » et je suis passé des jeux aux logiciels applicatifs. Depuis, je travaille sur YASARA, que j’ai mentionné plus haut. Mais — quelle chance — cela s’est révélé être exactement le même défi de bidouille en langage assembleur que sur le bon vieux CPC (aujourd’hui avec par exemple MMX/SSE/AVX), donc je m’amuse toujours au bas niveau ;-)

11. Penses-tu que le piratage a tué la plateforme ? Ou, au contraire, qu’il a contribué à la popularité de l’Amstrad CPC ?

C’est simplement le temps qui a essayé de tuer le CPC, et le piratage qui l’a sauvé. Tous mes jeux ont été « crackés », et c’est la seule raison pour laquelle ils sont encore vivants aujourd’hui et jouables dans des émulateurs. La plupart des disquettes originales, protégées contre la copie, ont pourri, tout comme le code source et les outils.

Une cracktro de Chany/NPS
Une cracktro de Chany/NPS
Wolfenstrad de Dirty Minds, une demo récente (2012)
Wolfenstrad de Dirty Minds, une demo récente (2012)

12. Jettes-tu encore un œil de temps en temps à l’actualité de la scène Amstrad CPC ? Que penses-tu de ses progrès ?

Bien sûr, je guette les nouveautés CPC tous les quelques mois, surtout les demos, et je trouve extraordinaire que des passionnés comme toi maintiennent ce navire à flot, alors qu’il aurait sombré il y a 20 ans. MERCI BEAUCOUP !

Un immense merci Elmar pour cette interview et pour toutes les belles choses que tu as faites pour le CPC !!