Articles

Affichage des articles du novembre, 2011

Bleemcast enfin hacké !

Image
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 :

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

Image
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,

Carnet de dev 8 : Erratum

Image
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 ;) ;)

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

Image
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 q

Carnet de dev 6 : Putain de scrolling !!

Image
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 la

Carnet de dev 5 : Attack Wave

Image
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 d

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

Image
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 :

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

Image
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 ini

Carnet de dev 2 : HeliFire, les sprites

Image
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

Image
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é. @++