Friday, October 29, 2010

/etc/init.d/biokid reload

Eh voilà. Deux minutes de relâche et Biokid refait à nouveau son apparition. Aderack le présentait comme "jeu le plus représentatif de l'époque PPP Team", mais surtout, avec mon nouveau thème de recherche, des histoires de sécurité, de DDoS, de vers qui se propagent, d'agents intelligents, de systèmes de défense, détection d'intrusion et compagnie, j'en consomme jusqu'à saturation.

Working on intrusion detection and network resilience these last weeks make Biokid pop up again in my mind and on my sheets. Or maybe is it because Aderack pointed it out as the most representative game in PPP's library ? Let's see whether buffer overflows, traffic shapers and worms spreading turn into nice level design ideas ...

Je vous laisse donc ce petit scan d'exorcisation, et on verra bien si le fil se poursuit et s'il en sort quelque-chose... transformation des buffers et autres processus de résolution d'adresse en élément de level design ?

Je suis revenu à un gameplay plus "plate-forme" que la tentative de shoot-em-up de 2008, en tout cas.
todo : non-square sprites in SEDS. 32x40 would be a good template for Biokid.


Tous les croquis

Tuesday, October 26, 2010

Dis-moi qui tu hantes et je te dirai qui tu es.

En vrac, mais à peu de choses près dans l'ordre chronologique où je les ai découverts, voici les jeux qui m'ont séduit ces dernières années. Je ne suis certainement pas objectif, et j'éviterai donc d'essayer de leur attribuer des notes. Je me contenterai donc de relever les points forts et les points noirs de chacun d'entre-eux.

There are a lot of games I've played during the year -- sometimes for several weeks, others for a few minutes -- which I couldn't find the time to speak about. Here's a quick dump to show you what I could have been chatting about (most of them being neatly covered by experts anyway).

Space Invaders Extreme
(trouvé à 15€ chez Free Record Shop)
+ L'aspect visuel "neo-oldschool" réussi
+ Je fais le D-J en jouant
+ la sensation de puissance quand on enchaîne les powerups
+ la fin du jeu (en mode easy)
+ sur DS, et donc "on the road"
- je coince sur le même niveau depuis des mois
Loved the revival as much as I hated the original. The gameplay is smooth and power-ups (via special rounds) really give me the thrill.



Shatter
(essayé sur la PS3 de mon frère)
+ L'aspect visuel épatant
+ La bande son extra -- et téléchargeable
+ Le jeu passé sur Steam
+ Réinvente le casse brique au lieu de le réchauffer
- Steam = Windows, non ?
Another game genre reinvented, with a stunning soundtrack. I hadn't time to master the game.


Loco Roco
(essayé 15 minutes avec la PSP d'un collègue)
+ le côté "mimi-cracra" du graphisme
+ les personnages qui chantent stupidement façon "les engrenages du professeur machin"
+ le jeu physique, les mouvement du blob.
- je n'ai pas de PSP, je n'ai pas l'intention d'en acquérir une juste pour un jeu.
I was a huge fan of The Incredible Machine. The cute look reinforce my wish to throw the game a try


World of Goo
(dévoré la version démo Linux après avoir bavé devant des vidéos vues sur des blogs d'indie)
+ puzzle à la "The Incredible Machine"
+ des bestioles ridicules à la Worms
+ graphiquement et musicalement accrocheur
+ variété de comportement apparaissant progressivement
- pas toujours évident de reproduire l'effet désiré
- pas disponible sur DS.
I really enjoyed the demo, but that's something I'd rather play on the road, not on my laptop.


Professeur Layton : la boîte de Pandorre
(acheté après avoir dévoré le village mystère)
+ le côté dessin animé et Sherlock Holmes
+ des puzzles sympa pour les soirées en solo
+ ma fée aime aussi
- version française uniquement sur ma cartouche
- voix françaises sans véritable charisme
- j'accroche moins à l'intrigue sans bien savoir pourquoi ...
A deceptive purchase... I only got the "french dubbed" version, which somehow ruins the experience


Maestro: Jump in Music
(découvert dans le magazine IG, trouvé en rayon à la médiathèque du coin)
+
très chouette graphismes "pixel art"
+ le côté "humour décalé"
+ le premier jeu où je regrette qu'un niveau soit fini à la fin du niveau
+ le mélange rythme/plate-forme réussi
- les tutoriels à chaque nouvelle technique
- introuvable dans le commerce
- si je le trouve, je devrai refaire le jeu entier au niveau "easy" avant de réattaquer les niveau "normal" et "hard"
- certains instruments criards, notamment dans les morceaux plus Rock.
- les "combats" contre les boss répétitifs et parfois "injustes".


Soul Bubbles
(essayé chez mon frère)
+ le côté visuel et sonore enchanteur
+ le côté puzzle, régulièrement renouvelé
+ la progression non-linéaire qui incite sans contraindre à l'exploration
- une seule sauvegarde
- des niveaux très longs
- petits artefacts visuels sur le décor qui nuisent parfois à la crédibilité de l'environnement.
every play is an enchantment, but it requires lots of free time just for one level.


Pixel! -- Pix'n'love Rush
(trouvé sur le site de Pasta games en cherchant plus d'infos sur Maestro)
+
L'animation épatante du "chat"
+ un bon vieux platformer tout neuf
+ le coté retro-new-look très réussi
+ la dynamique apparament sans défaut
- je n'ai pas d'iPhone, et je n'ai pas le projet d'en acheter.


Giana Sisters (DS)
(croisé sur la couverture d'un magazine dans le trans-alsace express)
+ Brothers are history !
+ une animation épatante et des graphismes réussis
+ des niveaux, encore des niveaux, plus de niveaux
- système de power-ups complétement corrupté
- manque de challenge par rapport à l'original
- virtuellement introuvable dans le commerce


Frogatto & Friends
+ de la plateforme, de l'action, de l'aventure
+ du pixel art de haut niveau
+ tourne sous Linux
+ Open Source, pour ne rien gâcher...
+ ce que Frog Story aurait dû donner
- les dialogues que je vais devoir me retaper parce que je me suis bloqué dans le jeu
- la version installée qui plante quand je meurs.


Worms Reloaded
(pas encore essayé : pas encore rebooté sous Windows)
+ worms
+ action 2D comme dans worms
+ worms
? la corde ninja sera-t-elle au rendez-vous ?
+ worms
- windows
(je ne suis peut-être pas tout à fait impartial)

Shantae : Risky's Revenge
(à essayer chez ma belle-soeur ?)
+ graphiquement parfait
+ apparemment le genre de gameplay qui m'accroche
- uniquement sur DSiware ... je n'ai pas de DSi

Monday, October 25, 2010

statI4->statJ6 on event0

Difficile de rester accessible tout en donnant des détails sur l'avancement de la réalisation de mon moteur de jeu. J'ai peur d'avoir perdu la majorité d'entre vous avec le post précédent ... Pour essayer de rectifier le tir, rappelons que le comportement de mes p'tits sprites est découpé en états, chaque état donnant l'animation à exécuter, le comportement (à travers des contrôleurs comme "lecture du DPAD", "gravité", "marche sur le sol" ou "suit le sprite n° X") et les zones de collisions reçues et générées. Le comportement global -- mettons de l'appleman -- se définit alors en donnant les transitions qui vont faire passer un sprite d'un état à un autre dans certaines conditions et avec certains effets. Par exemple:

Not so easy to keep you updated of development stories while remaining accessible. I guess most of you have been lost somewhere in the previous post... Let me try to explain better. Every sprite in the game has a behaviour that is split up in states, every state defining what animation should be displayed, the generic behaviour (through controllers such as "read DPAD", "apply gravity", "track sprite #x", "walk on the ground", etc.) and collision-related properties including hitboxes.

  • Falling->Running on FAIL qui fait en sorte que l'appleman cesse de tomber une fois arrivé au sol
  • Walking->Surprised on found1 qui fait sursauter l'appelman quand Bilou entre dans sa zone de détection.
Things are then put together with transitions that describe when you will move from one state to the other, and under which condition. "FAIL", for instance, indicates that the controller responsible for movements cannot find any valid move for the current position and speed. "Found" and "Hit" are used when one succesfully hurt or get hurts by someone else, respectively. "Done" indicate the end of an animation and "Event" reports a 'special' condition.

Au moment de programmer la gestion des collisions, j'avais bien senti que l'approche ne serait gérable que si les différentes zones de détection pouvaient être gérées indépendamment, d'où "found1" lorsqu'un appleman 'a vu' Bilou et "found0" qui indique que Bilou a été touché. Puis l'idée est apparue (en codant InspectorWidget ?) d'étendre ce principe à eventi pour identifier quel contrôleur, dans l'enchaînement qui définit un comportement, a signalé une condition spéciale. On pourrait ainsi plus facilement distinguer "nouvelle touche enfoncée" de "passe du saut à la chute" ou "on est devant une liane". J'ai déjà eu des "interférences" malheureuses de ce genre pendant le développement d'Apple Assault, ça ne saurait aller qu'en s'empirant au fur et à mesure que le comportement de Bilou devient plus sophistiqué.

"Special Condition" was initially only used for reporting DPAD changes, but as the behaviours expanded, it started including more diverse things such as "vertical speed reversed" at the top of a jump, "target has changed side" ... Somehow, it became a fairly generic gobscript invokation mechanism as I decided to split the control function into a chain of simpler things. The problem that arose was that it then become hard to tell which of the chained controllers raised the event, testing them in the right order to come to the right conclusion. What I tried this week-end was to delegate the list of transitions-on-event to the controllers themselves, so that you explicitly "name" the controller for which you program an event reaction. So far it works, it hasn't been too complicated to setup (although it's probably a terrible hack from OO design patterns point of view), and thus it enables the door to more techniques ...

Et avec tout ça, évidemment, je n'ai pas fait les 3 dernières modifications qui me permettraient de passer à la version "finalisée" d'Apple Assault ... à savoir ... euh ... j'sais plus.
  • [wish?] ne pas effacer la souche au démarrage du jeu
  • [done] prendre le contrôle de Bilou dans les animations level clear/you're dead
  • [done]activer les nouveaux graphismes pour une meilleure visibilité dans les branches
  • [done]garder l'écran de jeu masqué pendant le chargement du niveau
  • [done]éviter que [START] ne bousille tout l'affichage (eh oui, encore).

Saturday, October 23, 2010

F_LADDER

Me voilà reparti à réfléchir à "comment permettre la présence de vignes, d'eau, de glace, de neige, etc ?", va savoir pourquoi! Le système de micro-contrôleurs enchaînés joue toujours un rôle important, mais plus comme je l'avais prévu initialement, idem pour les "cando".


L'idée serait d'avoir un des éléments présents dans la chaîne de contrôleurs qui définissent le comportement d'un état qui soit capable de détecter qu'une certaine condition (en l'occurence "est-une-échelle") est entièrement valide, et de générer alors un évènement pour que les transitions écrites en gobscript soient évaluées. On vérifie donc par exemple que la direction "vers le haut" est enfoncée au moment où l'on croise la vigne plutôt que de tester s'il y a une vigne tant que le bouton vers le haut est maintenu enfoncé.

I think I've found the way I will implement rope/vine/ladder climbing in my tiled game engine, but it's a bit tricky to explain. You may remind how I sub-divided the behaviour of characters into "micro-controllers" that can be chained to achieve the desired effect ? Well, that allows me to insert such a "controller" that would passively scan the tiles below a character and raise an event when all the tiles have a given property (e.g. "is a ladder"). Inverting the logic -- testing whether the 'UP' direction is pressed on the D-PAD when crossing a ladder rather than the other way round -- should help keeping things simple and efficient.

L'alignement automatique sur la vigne/liane/échelle à escalader et les balades aquatiques ont l'air de s'adapter aussi à ce genre de fonctionnement. La glace/neige et les tapis roulant, là, il faudra une autre approche... mais j'en rediscuterai un autre jour.

Prochaine étape, donc, permettre à ces différents contrôleurs d'avoir leur propre liste de test d'évènement de même que les zones de collisions ont leur propre liste de transition. C'est codé.

Monday, October 18, 2010

BG_MAP_RAM_SUB

Oh, well ... there are impressive updates and no-pressive updates. This one is of the latter kind, I guess. For "historical" reasons, the game (including apple assault) was running on the "sub" screen of the DS -- that is, the one with less VRAM available and no 3D possibilities. It had visible effect in Apple Assault, where I was short on VRAM to display the "howto" informations properly. It's not exactly exciting to pass over my code, replacing BG_MAP_RAM_SUB by BG_MAP_RAM and vice-versa (idem for most other graphic memory areas), but at least it is done and open up a new page for progressing on GEDS tools ...

Ouais, bon, on ne peut pas révolutionner le monde à chaque post, hein ? Donc, voilà: j'ai basculé la logique de jeu vers l'écran "principal" (ou plutôt devrais-je dire le 2D Engine principal), celui qui est capable d'avoir plus de 128K de graphismes et de faire de la 3D. Ca résout quelques bugs mineurs dans Apple Assault, et ça fout très certainement la zone dans runme, mais bon, on corrigera ça plus tard. C'est pas vraiment excitant comme news, mais au moins c'est fait.

Thursday, October 14, 2010

Small step for me, Giant leap for Badman

I guess this is another instance of "I just can't help", and I can only hope I'm not to blame. As I was working on retrieving more content for Aderack's Wiki, I stumbled upon that previous post where I was listing things that were needed for an anniversary edition of Badman on DS. One of them was "produce .spr files out of extracted BBL files", somehow. Since I was sick last week, I could hardly focus on Apple Assault or any "real" coding, but hacking perl scripts wasn't too hard.

Alors que je tentais d'expliquer à Aderack que "non, je ne cherche pas à porter les jeux Game-Maker sous DS", je me rends compte que le principal obstacle technique à une version anniversaire de Badman -- les tirs -- est maintenant résolu. Alors vu que j'étais trop naze pour réfléchir la semaine dernière, j'en ai profité pour bidouiller du script Perl de-là de-ci histoire de peaufiner la conversion des fichiers .BBL en .SPR. On ne s'emballe pas : ça reste hautement expérimental et artisanal, mais à force d'ajustement, j'ai fini par pouvoir sortir les sprites du jeu dans un setup "un sprite par pavé de 32x32 pixels" mieux adapté à une conversion vers le format SEDS.

The first step was to update bbl2png.pl so that it accepts the --width=32 --height=32 options that are required for inserting padding and --xoffset=6 --yoffset=12 that allow 20x20 sprite positioning within 32x32 frame. Piece of cake.

I had a bit more difficulties with making the resulting image converted into a regular .spr, especially because the tools I used so far were targetted at importing maps, not sprites. A bit more tweaking allowed perl /home/pype/DS/SEDS/runme/imlib2spr.pl badman-cbl.png badman-cbl.spr --blocksize=32 --bgcolor=420042 --nopack --nomap to properly produce the sprite sheets I wished to have, with 10 Game-Maker sprites per sheet ... ready for action :P


Je dis "mieux adapté", mais rien n'était encore joué. Mon bon vieux script "imlib2spr.pl" avait en son temps été conçu pour produire des maps destinées à tester mon scrolling, absolument pas à remplir des pages de sprites avec un nombre réduit de blocs 32x32. Il m'a donc fallu un brin plus de chipotage pour parvenir à refaire un fichier qui soit accepté par l'éditeur, mais ça y est, photo à l'appui !

On verra bien s'il finit par en sortir quelque-chose :P

Tuesday, October 12, 2010

TrackSequence : public Animator

Ce coup-ci, c'est fait: j'ai enfin la possibilité de programmer des séquences d'actions en réutilisant la partition musicale comme "séquenceur". Ce n'est encore que moyennement utile vu le petit nombre d'actions disponibles dans le "dictionnaire" de guns.cxx, mais ça me permet par exemple de faire tourner une petite musique "Level Clear" avant de lancer le démarrage du niveau 2. A terme, je devrais pouvoir y insérer fade-in, fade-out, etc.

Cleared. I can now have a sequence of action performed timely with a musical pattern. The TrackSequence acts as a timeline on which you can insert new "guns" actions. I still have to populate the "dictionary of available actions" with more useful things for the effect to be any impressive, but it allows me to inform the player that he's done with one level (with a sub-tune) *before* I actually launch the loading of the next level. Fade-in/Fade out would come next, then remote control of remaining Gobs (esp. Bilou).

Btw, you'll find a new little poll on the blog, a companion for the 1.3 release of apple assault. Personnally, I think AA is barely a shareware demo for a not-yet-existing game, but we're now in the era of InstantFun(tm), downloadable content and casual gaming where you can buy iFart on the market. So by curiosity, how much do you think "Bilou : Apple Assault" is worth (per unit) if it was completed and available on such a store ?


Au passage : nouveau petit sondage sur le blog : combien selon vous vaut "Apple Assault" ? Perso, je le vois comme une démo un peu plus aboutie ... une sorte de "teaser shareware" pour un jeu complet qui n'est pas encore là, mais vous, là, qui téléchargez des oeufs de Zerg sur votre iPhone à la pièce, vous en donneriez combien, sur DSiWare ? (je parle d'une version achevée, bien sûr, avec les effets de transition terminés)

edit: résultats du poll.

Sunday, October 10, 2010

Apple Assault 1.3 "French Touch"

Petite release intermédiaire parce que vous le valez bien, et à la demande de mon frangin qui est en contact avec El Mobo (le musicien de Fury of the Furries, entre-autres) et qui voudrait bien lui montrer ce que donne sa musique à lui "in game". Mode d'emploi dans la présentation de la version 1.0.

Au programme, musique d'intro pour le menu, "Gros Poing" et musique spéciale quand vous pouvez lancer des shuriken. J'aurais bien attendu d'avoir les séquences "level clear!", "try again" et "game over" programmées, mais mon trip a Paris m'ayant retourné les trippes, on va se contenter de ce qu'on a :-P

One more step done, but not yet up to the goal. Here's Apple Assault the way it was "presented in Paris" last week, with the "jump-to-order" option to support shuriken-rush and menu sub-tunes, Big Punch for additional damages and ... well. That's all. If you never played Apple Assault so far, have a look at the game presentation post while the download is in progress.

Monday, October 04, 2010

Aderack" RSD Wiki

Peut-être me connaissiez-vous déjà du temps du Game-Maker et de PPP Team Software. Peut-être m'avez vous maudit après un "Game Over, Man" dans un des Badman. J'ai été contacté il y a quelques semaines par Eric-Jon "Aderack" qui était en quête de renseignements pour remplir son wiki sur les jeux produits sous Game-Maker... Ce qui m'a donné envie de raconter (enfin) ma version de l'aventure RSD -- en Anglais, pour compenser le fait que tous les jeux PPP sont en français.

I have been working on a story page on my Game-Maker years (the RSD Game-Maker, the one on MS-DOS with ugly scrolling and an odd sprite engine, not the Windows one from Yoyo). As you will read through the story, you will encounter a few videos posted by Aderack who is working on a wiki collecting all the RSD games ever produced.

Hope you'll enjoy it.