R-Type, reboot sur Amstrad CPC !

Publié le par Dr Floyd

Ça y est le fameux R-Type 128k de Easter Egg pour Amstrad CPC6128 est terminé ! Bien meilleur que le jeu original, en mode 0, et donc en 16 couleurs, il est vraiment sublime, et aurait fait un carton monstrueux en 1987 sur un ordinateur en manque réel de bonnes adaptations d'arcade ! La ROM du jeu est téléchargeable ici.

A noter qu'une version disquette est prévue pour plus tard !

Publié dans NEWS

Commenter cet article

Dr Floyd 11/02/2012 08:47

Celui ci par exemple :

http://www.gamopat-forum.com/t40171-le-hardware-du-cpc-face-aux-concurrents

Jackwa 10/02/2012 20:40

Doc, dans quel rubrique de préférence ?

pewpew 09/02/2012 14:27

merci pour les précisions, jackwa ça fait plaisir aux neurones pour une fois

Oli 09/02/2012 12:24

Merci pour la news. Jeu testé, et approuvé. Si j'avais encore eu un Amstrad sous la main, j'aurais sans doute acheté la disquette à venir...

Dr Floyd 09/02/2012 07:31

Jackwa il faut absolument que tu viennes discuter de tout ça sur le forum de Gamopat

Exxos 08/02/2012 22:33

Wahoo, elle est cool ta vie !

JackWa 08/02/2012 21:59

J'ai repris la programmation sur atari STe.

Pourquoi ?
* Le processeur 68000 (ST) c'est du bonheur face au Z80 (CPC)
* Enfin assez de mémoire disponible... ;-)

Mais aussi le STe n'a jamais réellement été exploité.
* son DMA
* Scrolling Hard
* Blitter (quoi que le CPU fait aussi vite voir plus, mais avec des sprites prédécallé et donc un "coût" en RAM)

J'ai actuellement un méga STE avec 4 Mo de RAM sur écran LCD (péritel) et 1 Go de disque dur sur carte SD (UltraSatan)

Thanatos 08/02/2012 21:16

Bon ben moi .....je retourne sur la version Amiga ....d'ailleurs chouette histoire à propose de cette version qui en fait a été développée par une firme allemande suite à la plainte de Konami pour
plagiat avec le fabuleux Katakis !

Fano 08/02/2012 21:05

Je ne suis pas sur que le dual playfield soit une meilleure garantie de performance dans ce cadre.En plus , on aurait perdu beaucoup de l'aspect graphique ce qui est pourtant le point fort du
CPC.Les sprites ne sont pas vraiment un problème , la difficulté ici est le scrolling au pixel qui , comme chacun le sait , est une plaie sur CPC (on pourrait d'ailleurs discuter longuement des
techniques qu'il est possible de déployer à ce propos)
A propos du framerate , j'en suis satisfait vu que le but était d'avoir quelque chose d'équivalent à la version Spectrum en terme de vitesse tout en ayant le double de données graphiques à traiter
(et sans avoir l'avantage d'un display à base de caractères).D'ailleurs ce n'est évidemment pas visible mais la vitesse est pondérée afin de garder un framerate le plus constant possible , surtout
dans les phases où il n'y a plus besoin de rafraichir le scrolling.
Enfin , on pourrait discuter à loisir des différentes options qu'il aurait été possible de choisir et des choix techniques qu'il a fallu faire sur ce projet.Ca serait même un plaisir de causer
technique sur CPC (voire autre) et je ne me refuse jamais à apprendre de nouvelles choses ou à partager de nouvelles idées ;)

@+

JackWa 08/02/2012 19:18

Je ne connais pas personnellement easter egg et je ne pense pas a avoir quelque chose a apprendre a un programmeur de son niveau.
Maintenant je peux rentrer en relation avec lui, pourquoi pas.

Olivier 08/02/2012 18:17

@JackWa : pourquoi ne pas soumettre cette idée à Easter Egg directement ?

MeRToN 08/02/2012 16:28

Perso je regrette les vagues de portages en 4 couleurs de l'époque. Cette nouvelle version de Rtype poutre du ponay! Ca me donne presque envie de refaire les brocantes pour dégoter un 6128.

JackWa 08/02/2012 15:07

Un inconvéniant tout de même :
Les sprites s'entre effacent quand ils se superposent, on vois les morts vivants qui clignotent quand ils se superposent.

JackWa 08/02/2012 15:04

Des "sprites" très rapide sur l’Amstrad ?




En temps normal, comment fait-on ?

1. On construit le décor

2. On efface les anciens "sprites" en reconstruisant le décor.

3. On efface la zone où il y aura un "sprite" à l'aide d'un "masque" (sorte d'ombre du sprite qui va être affiché)
-> Avec la fonction logique : Destination = Destination AND (NOT masque)
-> remarque la fonction logique NOT masque peut être traité en avance.
-> Nous obtenons alors à l'écran un "trou" de la forme du "sprite"

4. Affichage du sprite avec la fonction logique :
-> Destination = Destination or source (source c'est le "sprite")


Il faut répéter l'opération pour chaque "sprite"
En général, la technique est tellement lente qu'il faut utiliser le "page flipping" (2 pages graphique) une page affiché à l'écran, l'autre page en construction, puis quand une page est construite
on "flip", c'est à dire la page affiché à l'écran devient la page que l'on vient de construire et l'ancienne page affiché devient la page à reconstruire.

Pour résumer :
============

* Nous avons 2 pages écran (16x2 = 32ko, la moitié de la ram d'un CPC)
* Chaque "sprite" occupe 2x sa taille en mémoire. (Le sprite + son masque)
>>Et si l'on veut faire du déplacement de "sprite" au pixel près, il faut prédécaller encore une fois le sprite et son masque d'un pixel.
>>Car dans 1 octet affiché à l'écran graphique il y a 2 pixels. Ce qui signifie que chaque sprite prend 4x sa taille en RAM au total ! ! !

Beaucoup de mémoire consommé et une routine lente pour l'affichage, vu le nombre d'opération logique à faire avec le pauvre Z80.




Et sur Ghost'n Goblins on fait comment ?

Il faut juste une petite astuce de mathématique des logiques...

En mode 0 (16 couleurs), l'encodage des couleurs se fait sur 4 bits.
On peut donc réserver 2 bits pour le décor et 2 bits pour les "sprites"...

Ce qui nous donne en :
4 couleurs (2 bits) pour le décor.
4 couleurs (2 bits) pour les sprites - 1 couleur pour la transparence des "sprites" = 3 couleurs.
Résultat un jeu en seulement 4+3=7 couleurs !

Mais alors comment on fait ?

Il faut faire un choix très astucieux pour les couleurs. On a dit 2 bits pour le décor et 2 bits pour les sprites
Si il y a une couleur dans les bits Sprites, affiché la couleur du sprite.


Pas compris ?


Pour le décor :

00 couleur décors 1
01 couleur décors 2
10 couleur décors 3
11 couleur décors 4

Pour le Sprite :


00 couleur sprite transparente (décors visible)
01 couleur sprite 1
10 couleur sprite 2
11 couleur sprite 3

Ce qui nous donne :
bit 3-2 pour le décors et bit 1-0 pour le sprite. Si les bits de sprite sont à 0, prendre la couleur du décor.

----------- 2 bits décors
||
||--------- 2 bits sprites (si 0 alors couleur = décors)
||||
3210 bits


0000 Décors couleur 0
0001 > Sprite couleur 1
0010 > Sprite couleur 2
0011 > Sprite couleur 3
0100 Décors couleur 1
0101 > Sprite couleur 1
0110 > Sprite couleur 2
0111 > Sprite couleur 3
1000 Décors couleur 2
1001 > Sprite couleur 1
1010 > Sprite couleur 2
1011 > Sprite couleur 3
1100 Décors couleur 3
1101 > Sprite couleur 1
1110 > Sprite couleur 2
1111 > Sprite couleur 3

Voilà comment il faut définir les 16 couleurs de la palette.



Mais comment on affiche maintenant ?


Très simple avec la fonction logique XOR (OU EXCLUSIF)
Mais pourquoi XOR ? (car la même routine va servir à afficher et à effacer les sprites à l'écran !)
Magique ?

Fonction logique XOR :

0 XOR 0 = 0 --> On ne fait rien.
0 XOR 1 = 1 --> Affichage du sprite
1 XOR 0 = 1 --> Affichage du sprite
1 XOR 1 = 0 --> si on réaffiche le même sprite sur un sprite existant, il s'efface.


Pour résumer :
============

1 seul page vidéo (16ko)
Sprite stocké en simple en mémoire sauf en cas d'affichage au pixel près alors stockage en double, mais sans masque.
Routine d'affichage rapide (une seule opération logique) qui sert en plus à effacer le sprite !
Inconvénient : seulement 7 couleurs (y'en a qui n'ont pas remarqué sur ghost'n goblins !!! tellement l'animation est bonne.)
Les sprites s'entre effacent quand ils se superposent.

Voilà, c'est une astuce simple, mais difficile à expliquer... lol

Pour des infos complémentaires, je suis dispos.

Ouais_supère 08/02/2012 14:47

Je viens de l'essayer, il est vraiment excellent, et la vidéo ne lui rend pas justice.

olivier 08/02/2012 12:46

Retour en 84, on vous propose le jeu commercial et celui-ci.
Lequel vous choisissez ?

Alors il faut saluer la prouesse technique de Easter Egg.

Quant aux autres, ... haters gonna hate, innit ?

baracouda 08/02/2012 12:07

Seul petit problème, on est plus en 1984...

Dr FLoyd 08/02/2012 07:55

Oui explique nous !

Sur la vidéo le rendu ultra saccadé est dû je pense à la mauvaise qualité de la vidéo.

JackWa 08/02/2012 07:05

Déjà il n'y a aucune prouesse technique,la quantité de donné a gérer est la même ...
Ahh bon ?
mode 1 : 320x200 en 4 couleurs pour l'original.
mode 0 : 160x200 en 16 couleurs pour le remake.
Et si l'on veux afficher des "sprites" avec un déplacement au pixel près, en génèral sur CPC on prédécale les "sprites" en mémoire. En mode 0, chaque sprite éxiste en double, en mode 1 il devrait
exister en quadruple !
Donc faire un jeu en mode 1 est même plus compliqué.

Il existe par contre un moyen de faire des "sprites" rapide en mode 0, on le trouve dans le jeu Ghost'n Goblin's

Vous voulez que je vous explique ?

atomickid 08/02/2012 02:01

y'a bon la vitesse d'animation de environ 4 fps ;)