Contra revient sur Amstrad CPC 6128 avec du défilement continu

Implication du code et de la logique

100 % Vibe-Code (l’IA a généré presque tout le code du jeu)

Implication des assets et de la chaîne de production

Outils de build / Scripts de conversion d’assets

Notes de projet et prompts

Claude

Gryzor (Ocean / Konami, 1987) est l’adaptation Amstrad CPC de Contra. Le jeu a super bonne allure, mais l’arrière-plan ne défilait jamais vraiment ; il avançait plutôt par sauts de demi-écran, en marquant une courte pause à chaque fois.

CONTRA 6128 est une version remaniée du jeu original pour l’Amstrad CPC 6128, proposant un défilement continu et fluide de l’arrière-plan.

Ce qui a changé

Défilement continu dans la jungle et le niveau final : l’arrière-plan suit le joueur au lieu de sauter par incréments d’un demi-écran.
Ascension de la cascade en douceur : le saut d’un tiers d’écran de l’original est remplacé par un mouvement animé vers le haut.
Plus aucune pause lors des transitions d’écran.
Affichage propre : chaque image est préparée hors écran puis affichée instantanément.
Nouvel écran de titre et nouveau titre : CONTRA.

Ce qui reste inchangé

Les graphismes, les ennemis, les règles et le rythme du jeu sont identiques à l’original.
Les niveaux à écran fixe (les couloirs de la base) sont exactement les mêmes que dans le jeu de 1987.
La musique originale de la version 128 Ko est incluse : appuie sur ÉCHAP à l’écran de titre pour basculer entre les effets sonores et la musique.

5 « J'aime »

Waouh, Gryzor est un tel monument dans le monde de l’CPC ! Voir une IA le modifier uniquement à l’aide de prompts est une démonstration impressionnante de ses progrès.

Plus de pause lors des transitions d’écran.

Il y avait de grands sauts, évidemment, mais il n’y a jamais vraiment eu de « pause » à mon humble avis : le gameplay restait « fluide » selon moi (dans le sens où il n’y avait pas d’attente). C’est sûr que le grand saut à chaque changement d’écran obligeait à savoir un peu à l’avance où l’on allait atterrir, mais il y avait quand même un chevauchement et c’est le genre de limite qu’on acceptait à l’époque, d’autant plus que tout le reste du jeu était pratiquement irréprochable.

Un exploit impressionnant de la part de Claude Fable. Merci à M. Louvet d’avoir essayé ça et d’en avoir fait part au monde entier !

2 « J'aime »

Vachement impressionnant, dis donc !

Qu’est-il advenu de cette ancienne démo technique de Gryzor qui est apparue il y a des lustres ?

Tu veux parler de Gryzor Reloaded ?

Hm, je crois bien ?

Les nouveautés de la version 1.1

Cette mise à jour corrige des problèmes de gameplay découverts en jouant à la version 1.0, et ajoute un bouton de saut.

Correctifs de gameplay

  • Les ennemis apparaissent au bon moment. Dans la version 1.0, certains ennemis apparaissaient trop tard avec le nouveau défilement fluide, en particulier les tourelles intégrées au décor et meuble de bonus qu’il faut détruire. Chaque ennemi apparaît désormais au moment exact où sa partie du décor apparaît à l’écran, au même endroit que dans le jeu d’origine.
  • La capsule d’arme volante est de retour. La capsule qui arrive par l’arrière au début du premier niveau, transportant le tir étalé, était supprimée par le défilement avant d’atteindre l’écran. Elle traverse désormais l’écran comme elle le faisait en 1987.
  • L’entrée de la base s’ouvre à nouveau. À la fin du premier niveau, la porte détruite est à présent correctement remplacée par le trou, au lieu de voir la porte fermée réapparaître.
  • Fini les ennemis disparus. Le jeu ne peut afficher que sept ennemis à la fois. Dans le dernier niveau, la version 1.0 pouvait en perdre un lorsque la mémoire était pleine ; un ennemi attend désormais qu’une place se libère au lieu d’être simplement supprimé.

Nouveautés

  • Sauter avec le deuxième bouton. Le deuxième bouton de tir du manette permet désormais de faire sauter le joueur, même en tirant. Pousser vers le haut permet toujours de sauter comme avant, et haut + tir permet toujours de viser vers le haut.
  • Numéro de version affiché en bas à gauche de l’écran titre.
1 « J'aime »

le quoi ? :smiley:

Ouais… ce défilement n’est PAS fluide, c’est même tout le contraire en fait. C’est un défilement horrible.

Et quand l’écran est rempli de sprites et de projectiles (surtout quand tu tires avec ton arme à dispersion), le taux de rafraîchissement s’effondre complètement. Contrairement à la version originale où le nombre d’FPS était stable.

Bien essayé quand même.

3 « J'aime »

Dans la prochaine version, je suis sûr qu’il va trouver le bon truc héhé :laughing:

Je pense au contraire que le défilement est une bonne chose, le jeu est plus jouable.

Bien joué !

Le plus intéressant là-dedans, c’est la rapidité avec laquelle ils ont réussi à extraire et à abstraire une grande partie de la logique du jeu, ainsi que ses ressources graphiques et sonores. Le faire défiler sur un CPC était probablement beaucoup trop en demander (ce n’est pas pour rien que l’original ne le fait pas), mais arriver à ce stade aussi vite signifie qu’il serait sans doute plus envisageable de viser le matériel Plus — qui en est largement capable — sans devoir fournir un effort colossal de réimplémentation.

1 « J'aime »

Le sprite du héros semble trembler lorsque le défilement se produit. Ça va me donner mal à la tête.
Peut-être qu’un défilement par poussée (pushscroll) serait préférable, comme dans Ghosts’n’Goblins ? Je ne suis pas sûr.

Sur CPC, c’est le taux d’rafraîchissement (frame rate) qui le limite (en logiciel, la méthode la plus rapide que j’ai étudiée est celle d’Ocean, utilisée dans Batman : 2 pixels horizontalement, 2 lignes verticalement), et cela prend environ 2 images pour dessiner les tuiles. Les sprites et le gameplay s’ajoutent ensuite au temps processeur pour chaque mise à jour. Le défilement de Shinobi est similaire mais pas aussi rapide, Extreme est bon mais pas aussi rapide non plus, et d’autres jeux sont soit souvent plus lents, soit choisissent de réduire la zone pour essayer de maintenir un certain nombre d’IPS.

Les défilements logiciels semblent tous se faire octet par octet, et certains comme Golden Axe font même du défilement basé sur des caractères (caractères texte/motifs).

Celui d’Ocean couvre aussi souvent une plus grande partie de l’écran. La taille du panneau est d’ailleurs conçue pour limiter le temps de dessin des tuiles et tout faire tenir dans un intervalle de 2 images :wink:

Je ne vais pas expliquer ici comment Ocean s’y prend parce que l’IA ne sait pas comment c’est fait et je ne veux pas gâcher le secret ; c’est du code humain très ingénieux (mais avec leur méthode, ils ne peuvent pas avoir un panneau dans un mode différent de la zone de jeu principale…). Et je parle bien ici de l’équipe interne d’Ocean, pas d’un studio tiers à qui ils auraient confié le travail.

Avec le défilement logiciel, on peut dessiner les sprites par-dessus les tuiles sans avoir à se soucier de restaurer l’arrière-plan derrière, contrairement à ce qu’impose le défilement matériel.

On dirait que cette version de Gryzor utilise le défilement matériel, mais à ce rythme, c’est beaucoup trop rapide pour le mouvement du sprite qui se fait pixel par pixel. Du coup, ça va forcément trembler ou, si l’on veut éviter cette saccade, il faut faire comme Ghosts 'n Goblins : quand on s’approche du bord, on fait défiler une grande section d’un coup pour minimiser la fréquence des sauts d’écran.

La réponse classique d’une IA, c’est de déplacer pixel par pixel comme ceci et de laisser trembler, en affirmant que c’est acceptable et que ça ne se voit presque pas, exactement comme ce qu’on a là… Sur MSX1 avec un défilement continu comme dans Salamander, oui ça passe parce que les sprites s’y prêtent bien, mais pas comme ça.

Avec un défilement logiciel, ça pourrait aussi sauter un peu parce que ça se fait souvent octet par octet horizontalement. On pourrait créer un défilement logiciel pixel par pixel, mais très peu de jeux le font et je suis sûr que ce ne serait pas rapide. (En fait, je n’ai pas encore essayé, c’est une chose à ajouter à ma liste de tests).

Avec le défilement matériel horizontal, le registre R3 du CRTC donne le même rythme que le logiciel (mais avec du scintillement sur les côtés), et ce n’est toujours pas assez fluide quand les sprites bougent pixel par pixel. On peut faire du pixel par pixel en matériel avec du double buffering (pour éviter le scintillement), mais il faut réduire la taille de l’écran pour faire tenir toutes les pages mémoire dans la mémoire principale — à moins de le faire exclusivement pour le Plus.

Pour Gryzor, ils ont donc choisi la meilleure solution à l’époque pour obtenir un nombre d’IPS raisonnable, un déplacement pixel par pixel et un jeu amusant.

(Oui, j’ai essayé plein de méthodes différentes pour le défilement, en logiciel comme en matériel. Si le déplacement du personnage se fait au rythme du défilement matériel (R3 compris), on n’a pas de sauts et le défilement peut être continu sans faire comme Ghosts 'n Goblins. Mais dès qu’on ralentit le personnage en dessous du rythme du défilement matériel, il faut faire des compromis, comme G&G).

9 « J'aime »

Ça m’a fait réfléchir : si les gens le souhaitent, on pourrait créer une catégorie fermée, inaccessible aux bots, pour ce genre de discussions.

1 « J'aime »

Dis donc, il en touche une sacré couche @Arnoldemu , je suis impressionné, ce qu’on en apprend :distorted_face::distorted_face::distorted_face::distorted_face: