jeudi 24 novembre 2011

Bleemcast enfin hacké !


Vous vous souvenez certainement qu'il y à quelques années, une équipe de développement promettait plusieurs disques Dreamcast, permettant chacun de passer une 100 aine de jeux Playstation. Quelques mois plus tard c'était la douche froide, car seul 3 disques sortirent émulant chacun un seul et unique jeu.

Les développeurs n'ont ensuite jamais voulu lâcher code source ou autre binaire. Seul une beta version leakée est apparue, mais ne jouant pas les vidéos FMV, et ne supportant pas la sauvegarde.

C'est aujourd'hui terminé, un hacker à réussit à "déplomber" les 3 Bleemcast existant pour leur permettre de passer d'autres jeux Playstation, et ça se télécharge ici : http://www.multiupload.com/JI9P0LFCUI

Et une vidéo de la chose en démonstration :


lundi 21 novembre 2011

Assassin's creed revelations : l'épisode de trop


Moins de 15 heures de jeu, c'est ce qu'il m'a fallu pour torcher cet épisode d'Assassin's creed. Et je n'ai pas chomé, toutes les "points de vue" ont été trouvés, tout les assassins recrutés, dont certains au niveau 15, les niveaux Desmond fait ... En fait, c'est tout ce qu'il y à autour de l'histoire principale qui m'a pris le plus de temps, parce que sinon, en 6 heure ça aurait été torché ...

Parlons de l'aventure principale ... Trouver 5 clés pour ouvrir la bibliothèque d'Altaïr ... passionnant ... Les niveaux à la "Tomb raider" pour trouver ces 5 clés sont ... enfantins. Aucune difficultée, c'est jolie, mais n'offre AUCUN challenge. Ce sont des couloirs, ou il est impossible de se perdre, voir de mourir. En parrallèle, on déjoue de nouveau un complot de templier ... bidon.



Dans les nouveautés on trouve également des phases de tower defense de nos guildes. Hélas cette partie est super mal équilibrée, on passe les doigts dans le nez les 20 premières vagues, puis vient le tank ennemi final qui détruit tout sur son passage en 20 secondes sans qu'on arrive à lui retirer la moitié de son énergie.

Bon, bref, vous l'aurez compris, j'ai adoré assassin's creed 1 et j'ai surkiffé le 2 ainsi que sa suite directe Brotherhood. Mais alors celui là ... De plus, je pensais que j'aurais eu des "Revelations" comme le nom l'indique ... Il y à autant de révélation dans cet épisode que dans le dernier épisode de "Twin peaks" ... (Bref on comprends pas grand chose ... enfin, je suis peut être pas assez intelligent pour comprendre cette "explication" abracabrantesque).

Bref à 70 Euros ... fuyez et patientez la version à 20 Euros, c'est le prix de ce data disk à Assassin's creed Brotherhood.

mercredi 9 novembre 2011

Carnet de dev 8 : Erratum


Mame 0.143 permet de jouer sans soucis à HeliFire !! La conversion Coleco n'en sera que plus précise !!

Mame0.143 se télécharge ici : http://mamedev.org/release.html

Les roms ... je vous laisse chercher ;) ;)

lundi 7 novembre 2011

Carnet de dev 7 : premières vagues d'attaques


Je ne vais pas détailler en vidéo cette partie, ça risque de faire une vidéo somnifère !! Depuis le dernier billet, j'ai implémenté le scrolling d'étoile. Technique pipo, 10 étoiles avec coordonnées x et y, avec 8 caractères pour chaque position de l'étoile pour un scrolling fluide. Quand l'étoile à joué ses 8 animations, on la décale vers la droite bref ...

Ensuite, j'ai codé les 2 premières vagues d'attaques aériennes. Tant que les hélicos ne sont pas détruits, on ne passe pas à la vague suivante. Il va falloir que j'implémente rapidement les 2 dernières, pour m'attaquer aux "vagues" d'attaques sous-marines. Quand tout les ennemis apparaîtront simultanément, je risque d'avoir des surprises genre ralentissements.

Quand les soucis techniques seront réglés, il ne restera qu'à régler le gameplay et l'augmentation de la difficultée. Pour le moment rien qu'avec les vagues aériennes, c'est hyper trop simple ...

Voici ce que ça donne sous BlueMsx :


dimanche 6 novembre 2011

Carnet de dev 6 : Putain de scrolling !!


Développer le scrolling des vagues ... J'avais toute la technique en tête, simplement recopier 16 fois les 2 caractères d'une vagues et les décaler à chaque fois d'un pixel. Simple en théorie. Normalement ça aurait du être simple en pratique ...

16 lignes de vagues avec chacune un couple de caractères forment le mouvement.

const byte vague1[] = {car1,car2,car1,car2,...};
const byte vague2[] = {car3,car4,...};

const *byte animation[] =
{
  vague1,
  vague2,
  ...
  vague16
};

Ce dernier tableau est un tableau de pointeur sur les différentes lignes de l'animation.

Puis, on utilise la commande put_frame du kit Coleco avec un index pour afficher l'une après l'autre les 16 animations de la ligne de vague.

signature :
void put_frame(void *table, unsigned char x, unsigned char y, unsigned char width, unsigned char height);

donc :

put_frame(animation[0],0,11,32,1); pour afficher la ligne d'animation 0 en position 0,11 pour une ligne de 32 caractères en largeur et 1 caractère en hauteur. L'animation[0] renvoyant bien un pointeur sur un tableau de caractères ...

A noter que j'utilise ceci pour le scrolling de Commando, en plus complexe. Chacun de mes objets à faire défiler dans Commando a une taille différente.

Et bien, sur HeliFire ... ça ne marche pas !!

Voici donc en vidéo, comment j'ai contourné le soucis, parce que au bout de 2 heures de recherche, je n'ai pas trouvé de solution ... Alors soit, je ne comprends rien en programmation, et je ne sais pas pourquoi le tableau de pointeur fonctionne sur Commando, soit c'est encore le compilo Coleco qui fait encore des siennes comme lorsqu'il me perd des valeurs d'attribut de structure ... (J'y ai le droit à chaque projet ...).

samedi 5 novembre 2011

Carnet de dev 5 : Attack Wave

Me voici donc en train d'analyser la vidéo d'HeliFire pour comprendre les attacks wave du jeu. Et bien il s'avère que c'est plutôt simple.



Le jeu est composé de 4 vagues d'attaques d'hélicoptèrse. On ne passe pas à la vague suivante tant que les hélicoptères ne sont pas détruits. 

Vague 1 Loop 1 : 10 hélico lent
Vague 2 Loop 1 : 10 hélico moyen
Vague 3 Loop 1 : 10 Hélico rapide


Vague 4 Loop 1 : 4 ou 5 hélicos avec mouvements spécifiques qui tirent des "mines" qui elles mème dans l'eau tirent des missiles horizontaux.

Tant que la vague n'est pas détruite, non seulement les hélicos tirent, mais des bateaux, sous-marin, torpilles sont lancés sous l'eau. Les 4  niveaux passé on revient au niveau 1, avec des hélicos qui tirent de plus en plus, et de mieux en mieux.

Bref du classique. J'arrête pour le moment l'analyse, j'ai tout ce qu'il me faut pour réfléchir à comment coder préciséer la routine generateEnnemy(), qui va devoir gérer les attack wave et leur ordonnancement.

Prochaine vidéo ? Peut-être le scrolling le temps que je me creuse la tête pour trouver une définition d'attack wave simple à implémenter !!

@++

mercredi 2 novembre 2011

Carnet de dev 4 : Heli ?! FIRE !!!


Ca y est, la structure de base d'implémentation des ennemis et des collisions est prête. Rien se bien méchant et de complexe. Tout d'abord, une structure pour les ennemis qui seront représentés par des sprites :


typedef struct
{
byte type; // Type d'ennemie (INACTIF possible)
byte sprno;
byte timer; // Timer qui va servir à pas mal de chose ...
} s_ennemySprite;


s_ennemySprite ennemySprite[MAXENNEMYSPRITE];

Puis 3 routines à compléter :


generateEnnemy(); pour générer les vagues d'attaques

                moveEnnemySprite(); pour l'IA et les animations des ennemis

checkCollision(); pour gérer les diverses collisions

Le résultat est visible dans la vidéo ci dessous :

mardi 1 novembre 2011

Carnet de dev 3 : Le sous-marin c'est bon, mangez en.


Chose promise, chose due. J'ai implémenté le mouvement du joueur "sous-marin" ainsi que le tir de celui-ci. Pour ce faire, j'ai utiliser les structures de données suivantes :

     typedef struct
    {
    byte sprno;
    unsigned score;
     } s_player;

     s_player player[2];

Le joueur est pour le moment représenté par un Sprite, et possède un score. Le sprite lui mème est composé de coordonnées x,y, d'une couleur et d'une image (pattern).

J'alloue un sprite au joueur avec une routine de mon cru qui récupère dans une liste, le premier sprite non utilisé.

       player[0].sprno = getFreeSprite(); 


Puis j'initialise mon joueur 1 ainsi :

sprites[player[0].sprno].colour = 4;
sprites[player[0].sprno].x = 100;
sprites[player[0].sprno].y = 100;
sprites[player[0].sprno].pattern = 0;


Pour les tirs, la structure ressemble à ça :


     typedef struct
    {
     byte actif;
     byte sprno;
     } s_shoot;

L'attribut actif est initialisé à FALSE, ce qui veut dire qu'on peut tirer. On ne peut tirer qu'un seul missile à la fois. Ce qui nous donne ceci dans la routine principale :

while (1)
{

if ( (joypad_1 & FIRE1) || (joypad_1 & FIRE2) )
{
if (shoot.actif==S_FALSE)
{
sprites[shoot.sprno].x = sprites[player[0].sprno].x;
sprites[shoot.sprno].y = sprites[player[0].sprno].y;
shoot.actif = S_TRUE;
}
}

if (shoot.actif==S_TRUE)
{
sprites[shoot.sprno].y -= 3;
if (sprites[shoot.sprno].y<10) 
{
sprites[shoot.sprno].y = 203;
shoot.actif = S_FALSE;
}
}

delay(1);

}

Les commentaires du code (que je dois ajouter :) :) ) se trouvent dans cette vidéo :

Carnet de dev 2 : HeliFire, les sprites

Ca y est, la majorité des sprites que je connais à été rippé. Je me rends compte en faisant la vidéo qu'il me manque les explosions ... Du détail qui sera réglé plus tard, il faudra d'ailleurs que je réagence les sprites pour faciliter les "animations" des hélicoptères ennemis. Mais une chose à la fois.

Carnet de développement 1 : Helifire


J'ai décidé de bloguer le développement de mon nouveau jeu. J'ai mis Commando Return en "Stand by" car je ne suis pas content du résultat. Je vais passer sur quelquechose de moins ambitieux, mais potentiellement addictif : Helifire.

Helifire est un shoot'em up de Nintendo édité en arcade. A ma connaissance, il n'existe pas d'adaptation console du jeu, d'ailleurs la difficulté de cette adaptation, c'est que je n'ai trouvé aucun émulateur capable de faire tourner le jeu. Ma base de travail est cette vidéo :


Ainsi que la rom du jeu, sous Mame, qui hélas ne fonctionne qu'à 3%. Juste de quoi ripper quelques graphismes.


Voilà, il ne me reste plus qu'a me mettre au travail et à adapter les sprites du jeu dans un premier temps pour la Colecovision, étape qui sera l'objet du prochain billet du blog dès que j'aurais terminé.

@++