dimanche 26 février 2012

Pang sur Canoo, Wiz, dingoo ?



Je viens de tomber par pur hasard sur des versions de Pang sur Canoo, dingoo and co. Je n'ai pas ces consoles portables, donc je ne sais pas comment ça fonctionne, mais je sais qu'elles sont basées sur mon code source de l'époque GP32/Dreamcast :)

Si ça intéresse quelqu'un voici quelques liens :

http://dl.openhandhelds.org/cgi-bin/caanoo.cgi?0,0,0,0,27,766
http://dl.openhandhelds.org/cgi-bin/dingoo.cgi?0,0,0,0,27,514


Par curiosité j'ai cherché plus loin il semble qu'il existe aussi sur Amiga : http://os4depot.net/index.php?function=showfile&file=game/action/pangos4.lha


samedi 25 février 2012

Détente


Programmer Pang sur Coleco m'a vidé ... J'ai décider de m'offrir quelques jours de détente avec mes dernières acquisitions ! A savoir Gorf et Subroc sur Coleco.

Autant je connaissais Gorf, avec une version Coleco qui est pour moi largement supérieure à la version Arcade, autant je ne connaissais pas SubRoc, une sorte de Rail Shooter / FPS !!

Voici une vidéo de NewColeco qui vous présente en vidéo ces 2 jeux !

jeudi 23 février 2012

Pang, version sonorisée

Maj : Version avec 2 octaves de moins :



Voici ce que Pang donne avec musique et SFX. Je vais tenter de baisser les mélodies principales d'un octave pour voir ce que cela donne. Les premiers avis ne sont pas supers positifs ... Je sens que je vais encore ramer.


mercredi 22 février 2012

Merci !

Merci aux personnes m'ayant envoyé des tuyaux pour faire la musique de Pang ! Le jingle "Next level" est fait, le "Game Over" aussi, et je teste des musiques de niveaux ! Bref, Pang sera sonorisé, pas aussi bien que Bomb'n Blast, je n'ai pas le talent de Daniel Bienvenu, mais je pense que ça sera correct !!

Merci à Youki, Horeus et Hectore aka Axis pour leur aide !

mardi 21 février 2012

Pang : Etat du développement et annonce

Bon, c'est officiel, le développement de Pang est terminé ! En gros, on peut consider que le jeu est en version Béta. SAUF ...

JE RECHERCHE TOUTE PERSONNE POUVANT ME FOURNIR UN FICHIER MOD OU MIDI DU PREMIER NIVEAU DE PANG ARCADE.

Que ce fichier provienne de la version Arcade, Amiga, Atari ST, Amiga voire ZX81 ( :) :) :) ), je m'en fiche ! Je veux passer le fichier dans un soundtracker pour me permettre de déterminer la partition principale de la musique et ainsi tenter de la reproduire sur la ColecoVision !

Les autres blogs rétro qui me suivent, si jamais vous pouviez relayer mon "message in a bottle" je vous devrais "une reconnaissance éterrrrnneeellllle" :) :)

Contact : bfg.gamepassion@gmail.com

dimanche 19 février 2012

Pang : test sur console réelle

Ca y est, j'ai pris mon courage à 2 mains, et j'ai transféré Pang sur ma vrai Coleco. A priori, vous pouvez faire confiance à mon tuto sur le NMI à 100%. En effet, c'est la première fois qu'un de mes jeux, passe sans aucun plantage ni glitch dès le 1er test réel !!

Il ne m'a fallu pas moins de 4 jeux, pour réussir ! :) Vieux motard que jamais !!!

Pas de vidéo à vous proposer de ce test ce jour, mon courage n'étant pas extensible à l'infini !! :) :)

vendredi 17 février 2012

Pang Colecovision : Les bonus

J'ai implémenté 20 niveaux et pour le moment 4 bonus :

- Vie supplémentaire
- Freeze
- Invincibilité
- Bombe

Voici le résultats de ces bonus sur les premiers niveaux en vidéo.


Je vais continuer à débugger les niveaux, et à en implémenter des nouveaux. Pour le moment 20 niveaux sont paramétré et au moment ou j'écrit ces lignes, débuggués.

mercredi 15 février 2012

Pang Colecovision : quelques screenshots

J'ai commencé à implémenter les niveaux de Pang sur Colecovision. Voici quelques images de ce que cela donne.













lundi 13 février 2012

Pang Colecovision : Echelles et plateformes cassantes

Ça vient bon, tout les éléments pour créer les niveaux sont en place. Reste quelques animations de sprites et les bonus et tout va s'assembler. Puis l'éternel problème de la musique et du son va intervenir ...

dimanche 12 février 2012

Pang, Work of the day

Je bosse toujours pour éviter les ralentissements sur le jeu, ça semble être pas mal correct pour le moment. Il faut vraiment que je vois ce que ça donne en réel :) (Fainéantise quand tu nous tiens !!). Aujourd'hui donc grosse dose d'optimisation de taille de rom, de ram et de perf + ajout de nouveaux graphismes de Youki et développement des plateformes verticales.


Ce qui m'étonne c'est que j'ai au moins divisé la complexité de mon code PC/Dreamcast par 10 et j'arrive à obtenir quelque chose d'aussi jouable pour le moment :) Comme quoi, quand on à plein de mémoire et de vitesse processus, on programme comme un cochon sans réfléchir ...

samedi 11 février 2012

Tutoriel : Quand écrire dans la VRAM sur Coleco ?

Retrouvez ce tuto sur : http://perso.numericable.fr/michel.louvet/

Pang Coleco : Major Slowdown !!

Ca y est, ils sont déja là, les ralentissements !! :) :) Soit le jeu est trop rapide, soit il est trop lent. Enfin, ça dépend aussi sur quel machine je teste le jeu émuler. Seul le test sur la vrai console me donnera la vérité !!

En attendant, j'ai implémenté un "trick" que j'ai utilisé sur Ozma wars pour déja éviter les ralentissements. En effet 16 boules * (3 plateforme + 1 tir) + (16 boules * 1 joueurs) = 80 tests de collisions , ça fait ramer la Coleco :) Pour l'instant no stress, le jeu est optimisé à la truelle (autant dire quasi pas !). Et j'ai quelques idées pour éviter de faire à chaque tour les tests de collisions, sans perdre en précision (enfin j'espère.)

Quand je pense qu'il faut que j'ajoute les échelles, les bonus et les obstacles verticaux (et les cassables), y'a un processeur qui va chauffer (ainsi que mon malheureux crane :) ).

Au passage, les sprites du joueurs viennent de crapahute, et le 1er fond de cette nouvelle vidéo provient de Youki ! Merci à eux !!

vendredi 10 février 2012

Pang Coleco la vidéo

Chose promise, chose due voici en vidéo un tout premier jet de Pang sur Coleco. Les saccades comme d'hab sont liés à la capture vidéo, le jeu est fluide, voire trop rapide (et ce sans optimisations), mais c'est plutôt une bonne nouvelle, car j'ai encore pas mal de choses à implémenter qui pourrait faire ralentir le tout ...

[Colecovision] PANG


Ca y est, c'est officiel, j'ai commencé l'adaptation de PANG sur Colecovision. Voici 2 screenshots d'une version très peut avancée. Une vidéo suivra incessamment sous peu !



jeudi 9 février 2012

Tutorial : Les sprites sur Coleco

La mémoire Colecovision :

Sur Coleco il y à en gros 3 zones de mémoire :
La RAM : 1 ko au total, mais beaucoup moins (600 octets ?) avec la librairie de Daniel Bienvenue 
La ROM : 32 ko, ou on va stocker les graphismes, la musiques, les données que l'on a besoin mais qui n'évoluent pas.
La VRAM : la mémoire vidéo qui est composée ainsi :


#define chrtab  0x1800 /* écran en linéaire */
#define chrgen  0x0000 /* table des caractères */
#define coltab  0x2000 /* couleur des caractères */
#define sprtab  0x3800 /* sprite_pattern_table */
#define sprgen  0x1b00 /* sprite_attribute_table */
#define buffer  0x1c00 /* écran 2 en linéaire */

Ce qui nous intéresse pour les sprites c'est : 

sprtab : zone de mémoire qui va contenir les dessins (composé de patterns) des sprites
sprgen : zone de mémoire qui va contenir la définition des sprites (x,y,pattern,colour)

Dessiner des sprites :

On utilise l'outil de Daniel Bienvenu ICVGM303.exe qui permet de dessiner des dessins de sprites de 16x16 pixels. Un dessin de sprite de 16x16 est composé en fait de 4 patterns.
Un pattern est une zone de 8x8 pixels.

Donc, le 1er dessin commence au pattern 0 et est composé des patterns 0,1,2,3
Le second dessin commence au pattern 4 et est composé des patterns 4,5,6,7
et ainsi de suite.


Injecter les sprites en mémoire :

Avec l'outil de Daniel, il faut générer un fichier C, compressé en RLE (case à cocher). Ce qui nous intéresse c'est la zone :

byte SPATTERNRLE[] = {
  0x88, 0x00, 0x06, 0x01,...};

C'est la définition des patterns de sprites. IMPORTANT : injecté dans notre programme on doit ABSOLUMENT ajouter un const.

const byte SPATTERNRLE[] = {
  0x88, 0x00, 0x06, 0x01,...};

Sinon à terme il y auras des plantages, car les patterns seront n'importe ou en mémoire, et pas en ROM.

Maintenant, il faut injecter ce tableau en VRAM avec la commande :

rle2vram(SPATTERNRLE,sprtab);

NMI :

Dans le programme en C, il faut absolument créer une fonction

void nmi()
{
}

Mème si elle est vide, cette fonction va s’exécuter 50 fois par seconde sur une Coleco PAL et 60 fois par seconde sur une Coleco NTSC. On va voir ensuite à quoi ça va nous servir.


Manipuler les sprites en RAM :

Dans la librairie de Daniel les sprites ont déjà leur objet définit à savoir :

typedef struct
{
        byte y;
        byte x;
        byte pattern;
        byte colour;
} sprite_t;

sprite_t sprites[32];

il n’y à donc pas besoin de redéclarer le tableau !! Par contre il est conseillé de rendre invisible les sprites.

Void initSprites()
{
         byte i ;
         for (i=0 ;i<32 ;i++) sprites[i].y = 204 ;
}

En fait, au dessus d’un y > 192, le sprite est invisible. Attention : Eviter y=203, en effet cette valeur signale à la Coleco qu'il n'y à plus de sprites à traiter après celui-ci.

Ensuite, on définit comme on veux les sprites :

sprites[0].p = 8 ; // Le sprite 0 aura le dessin n°2 (Dessin 0 = 0 ;Dessin 1 = 4 ; Dessin 2 = 8)
sprites[0].colour = 3 ; // Avec un code couleur 3
sprites[0].x = 0 ;
sprites[0].y = 100 ;

Puis on le fais bouger

while(1)
{
         sprites[0].x ++ ;
}

Problème, avec ça on ne vois rien bouger … NORMAL !!

Transférer les informations de la RAM vers la VRAM :

Pour afficher les sprites à l’écran, il va falloir transférer le tableau sprites[] vers la VRAM. A savoir la commande :

put_vram (0x1b00,sprites,128) ; // copie le tableau sprites vers la sprgen 4 attributs (x,y,colour,p) * 32 sprites = 128 octets

Sauf, qu’il faut faire cela, à chaque changement dans le tableau en RAM . Et donc pour faire simple, il suffit de faire cela, 50 ou 60 fois pas seconde.
Bref, on claque ça dans la NMI et on est tranquille !!


void nmi() 
{
put_vram (0x1b00,sprites,128) ;
}

Le flickering :

La Coleco à une sale contrainte c’est qu’elle ne peut pas afficher plus de 4 sprites en simultané sur une ligne horizontale.
Si on veux afficher les sprites suivants sur la même ligne :

0 1 2 3 4 5

seul les sprites 0 1 2 3 seront affiché, en fait, les sprites avec les n° les plus petits sont prioritaires !

En gros si tu veux faire afficher plus de 4 sprites par ligne, il va falloir changer la priorité des sprites. J’utilise une technique, qui permet d’afficher au moins 8 sprites par lignes
  
D'abord une routine qui ramène le n° d'un sprite libre (y==204), on recherche à chaque fois à partir d'une position de début différente. Ramène -1 si il n'y à plus de sprites de libre.

#define INACTIF 204
byte odd ; // variable globale a mettre en dehors du main
byte currentFlicker;
sprite_t bsprites[32]; // seconde Zone de sprites en RAM

char getFreeSprite()
{
    byte i;
    odd+=8;
    if (odd>=32) odd = 0;

    for (i=odd;i<32;i++)
       if (sprites[i].y==INACTIF)
          return i; 

    for (i=0;i<odd;i++)
       if (sprites[i].y==INACTIF)
         return i;

   return -1;
}

Dans la Nmi on va copier en VRAM, une fois les sprites dans l'ordre
0......31


Et une fois

16,17....31 0,1,2,...15

Ca suffit dans 99% des cas pour afficher correctement 8 sprites par lignes. Sauf si les 8 sprites ont pour numéro 1,2,3,4,5,6,7,8, c'est pour cela que le getFreeSprite() choisit une position de début différente à chaque tour pour trouver un sprite de libre. Ca ne règle pas tout les cas, mais cela m'a toujours suffit.
void nmi()
{
         // Si currentFlicker = 2 alors on copie les sprites de 0 à 31, priorité normale
         if (currentFlicker==0) {put_vram (0x1b00,sprites,128); currentFlicker=1;}
         else  // Sinon les sprites 16 à 31 sont copié à partir de 0 et le reste à partir de 16, on intervertit les priorités.
         {
                   memcpyb(bsprites,sprites+16,64);
                   memcpyb(bsprites+16,sprites,64);
                   put_vram (0x1b00,bsprites,128);           
                     currentFlicker = 0;
         }
}


Voilà, j'essayerais de faire un autre tuto pour déterminer quand écrire dans la VRAM sans risque, chose plutôt délicate à appréhender sur Coleco.
A bientôt !

mercredi 1 février 2012

Réception de Bomb'n Blast et Ozma wars

Ca y est !! J'ai enfin les exemplaires de mes bébés à savoir Bomb'n blast et Lock'n chase. Et je vous propose une vidéo du déballage de mes 2 nouveaux enfants :) :)