Showing posts with label badman. Show all posts
Showing posts with label badman. Show all posts

Friday, April 02, 2021

Ma première forteresse.

On est toujours dans Badman 2, mais cette fois après que Piek m'ait proposé de faire un boss. Les possibilités du GameMaker étant ce qu'elles sont, le même ennemi 'boss' va être ré-affronté à 6 reprises dans des 'arènes' de plus en plus exigeantes. à chaque fois, il nous livre une clé qui permet d'ouvrir la 'porte-ours' rouge suivante.

Ce qui m'intéresse le plus, aujourd'hui, ce sont les 'mini-challenges' placés entre les arènes. Le premier fait appel à la mécanique 'pick up' utilisée jusqu'ici pour se saisir de power-ups, mais qu'il faudra utiliser pour ramasser l'échelle dans son inventaire et ensuite la déposer sur un autre bloc.

L'échelle est simplement un bloc sans gravitation, ça aurait pu être utilisé à plus d'endroit dans le jeu, mais ça n'a rien à voir avec le gameplay run-and-gun du reste de Badman.

Badman 2 could have been the game where I designed my first level-with-a-Boss: the badboy Burner. We'll meet him 6 times in the level, everytime in an arena that's a bit more difficult to survive than the previous one. You can see them in the top row of the level map. But let's focus on the trials we'll encounter in-between. The first one is just a tutorial on how to use the 'ladder' pick-up block (well, it'd have been a tutorial if you'd had any hint that you can pick that up, and not only the power-ups like the badarang)

Le deuxième passage fait appel à une variante d'échelle qu'on emporte pas. C'est dessiné comme des chaînes, mais en réalité, ce sont juste des emplacements où il n'y a pas de gravité. Si on parvient à y arrêter Badman, il aura l'air de marcher dans le vide.

Le deuxième mécanisme "unique" de ce niveau, ce sont les blocs qui rentrent et sortent du décor. Des plate-formes temporaires, en somme, qui ont été introduites dans le premier écran (pour récupérer de Badarang), puis servent de 'porte-temporisatrice' après le premier boss, mais là, on va commencer à les utiliser comme un vrai challenge, avec une alternance entre deux position de plate-formes qui nécessiteront de bien synchroniser ses sauts. (Bon, il y a 6 à 10 étapes intermédiaires de 'fade' où les plate-formes sont solides simultanément, donc ça reste gentil par rapport aux arbres de Gris).

C'est bon ? c'est bien rentré ? parce que juste après, je vous ai mis un loooong pont par-dessus les pics qui utilise une série de blocs disparaissant les uns après les autres. Il faudra être rapide et ne pas hésiter.

The ladder is pretty minimalist in RSD game-maker: it's simply a block where gravity does not apply. But it gave me the idea to draw 'hanging chains' that area also just gravity-less tiles. I guess navigating them with Badman's moves is closer to a bonus room (if there had been bonuses) than to a trial room.

The next one is the first real challenge, with blocks that fade in and out. Not that it will really stress your dexterity and timing skills, since both fading in and fading out blocks are simultaneously solid during the whole (fairly slow) animation. But immediately after, you'll get a super-long bridge of such blocks where you'd better ne quick (=jump) and steadfast if you want to make it to the final door.

And while we're in the 'bridge over spikes' theme, the next one uses falling platforms. That one is shorter, but the falling platforms are a side-effect of gamemaker's collision rules and tends to bounce you or let you fall through them.

Et puisqu'on y est, vu que j'avais découvert comment faire des plate-formes qui tombent dans le niveau précédent, bin je refais un deuxième long pont (moins, quand même) avec ces fameuses plate-formes qui croulent. (et qui sont peu fiables avec le moteur du RSD Game-Maker: on peut facilement passer à travers ou se faire repousser par le bord d'une d'elles

And then the pace changes, with the next transition being more a 'delevator' than a trial. Blocks are fading in and out, and let you slowly fall from cell to cell. There's nothing you can do to rush it.

The final trial will be much harder, with one-block fading mini-platforms. Badman's jump height is limited, though (2 blocks) so don't expect much variety here like having to move backwards or so.

Une fois n'est pas coutume, après ce deuxième pont (et son boss), un peu de temporisation avec les blocs-temporaires qui nous font une sorte d'échelle de descente où on a rien d'autre à faire que d'attendre.

Et après encore un boss, une petite échelle de plus, une autre chaîne et on passe sur l'incontournable série de mini-plate-formes (un bloc) qui s'effacent l'une après l'autre.

(bon, avec un maximum de 2 blocs de haut pour les sauts de Badman, la variété de ce passage reste limitée).
 



Thursday, April 01, 2021

Ma première pyramide

Assez curieusement, je n'avais pas eu le genre d'angoisse de la page blanche pour la pyramide de Badman II.


Mais bon le level design de Badman 2, c'était de la grande improvisation et pas mal de "bah si, regarde, on sait passer si ...". Et on a droit à un potpourri de vieux cliché de la pyramide de jeu. Voyons un peu.

Badman II was the first game where I did much of the level design myself. I guess my brother was on vacation or had found some student summer job. And I wasn't doing so much analysis paralysis on level design by then, as you can see. Let's have a look at the 'pyramid' level I wrote back in '96, since I'm currently struggling on designing pyramid levels for Bilou's Dreamland.

A peine arrivés dans la pyramide, on est accueilli par une sculpture lanceuse de flèches (A). On est sur RSD Game-Maker, donc quand ça tire, ça tire à intervalle régulier, qu'on soit présent ou non. Petite subtilité, cependant, si on s'accroupit, la flèche pas juste au-dessus de Badman et on est pas touché. J'étais tout fier d'avoir découvert ça :D

A peine quelques blocs plus loin, on rencontre le lanceur de grosses boules (B) à la Indy/Rick Dangerous. on est dans un corridor étroit, il vaudra mieux doser son timing. On enchaîne sur un saut pas évident pour Badman (j'y reviens) et on tombe sur les 'lances' qui sortent puis se rétractent (C) et plus loin dans la salle, des lance-flèches qui tirent depuis le plafond (D). Les 10 points de vie suppléemntaires trouvés devant l'entrée de la pyramide ne seront pas du luxe.

There are a few baddies in this level like lil'pharaohs and tank-like giant spiders, but your true nemesis is hidden in the walls and shoots things at you on periodic timers. It can be arrows (A), big boulders (B), ceiling-attached retractile spikes (C) or more arrows (D). 

On continue avec un choix: affronter toutes les araignées-tank ou escalader vers le haut de la salle et tenter de passer de pilier en pilier pour choper les 5 vies supplémentaires. En cas d'échec, on retombe dans les araignées.
 

ça mérite une précision sur le saut dans Badman. Dans la plupart des jeux de plate-forme, se cogner la tête au plafond signifie commencer à chuter immédiatement. Mais pas avec RSD. A la place, notre personnage 'vole' le long du plafond comme et la portée de son saut n'est pas diminuée. Le challenge pourrait donc sembler assez gentil et les vies sup' "gratuites". Oh que non.

Some of the level goes around the fact that some jumps are possible but tricky. If you just try them with a regular diagonal jump there will be some 'hanging-time' where you're almost there, but not quite. If you release "the jump button" then, you'll fall back to the ground. To reduce that time (where you'll be vulnerable to arrows in the previous screen), you'll have to chain a press on the '8' key of the numeric keypad and then only a '9'. Because unlike too-old-Mario, Badman's vertical (standing) jump goes higher than his running-jump.

La série Badman possède ce qu'on pourrait être tenté d'appeler "un nuancier de saut". En fait, il y a 2 sauts: le saut vertical et le saut diagonal. Chacun est mappé sur une des touches du pavé numérique, il faudra donc faire '6' pour courir vers la droite, '8' pour sauter sur place et '9' pour sauter vers la droite. Et si le saut en avant est légèrement plus rapide que la course en avant, en revanche, le saut vers l'avant monte moins que le saut vertical (effet inverse de Mario, en somme).

En plus de ça, à cause de notre mauvaises compréhension du moteur, chaque saut à une petite frame de non-saut lorsqu'on le déclenche. le résultat, c'est que pour monter par-dessus un obstacle de 2 blocs avec le saut-9 (au saut-7), ça 'coince' un moment et notre personnage va plus ou moins rester 'suspendu' près du bord du coin. Le truc pour passer en une fois, ça va être d'enchaîner rapidement un saut-8 puis un saut-9-maintenu. Ah, et oui, le moteur de jeu a une manière bien à lui de gérer l'inertie qu'on avait pas encore découverte, donc dès qu'on relache les touches, Badman retombe verticalement. Autant dire que sans être mauvais, la prise en main n'est pas immédiate.

Reprenons notre pyramide. On débouche sur un "gentil" zig-zag où il faut éviter les tirs de flèches et timer son passage. ça pourrait être une variation intéressante sur le premier passage si je ne commençais pas par le tir croisé.

On enchaîne sur un escalier plus long, de nouveau avec des lanceurs de gros boulets, mais cette fois-ci, l'espace étant plus dégagé, les boulets se déplacent presqu'en ligne droite (diagonale) plutôt que de "tomber" de marche en marche (la gravitation étant réservée aux seuls héros dans ce moteur). J'avais prévu qu'on doive "sauter" par-dessus les boulets façon Donkey Kong, mais le saut est trop court pour se tour-là si bien que la stratégie pour passer sans casse, c'est de s'accroupir au bord de l'escalier et de repartir une fois que le boulet nous a dépassé.

The pyramid features more zig-zagging areas with decreasing amount of 'cold places' and only the generous (?), amount of hit-point bonuses (those aces of tiles cards) you can use to heal. Apart from that, it isn't so far from the shot-frenzy of Commander Keen.

On enchaîne sur un faux-choix: à droite un sale moment à passer puis la suite du chemin, à gauche, un long corridor (quelques tireurs de flèches) et on retombe à l'entrée de la pyramide (mais en surplomb, ce qui ne sert à rien).

Et on ne va pas pouvoir souffler tout de suite. J'ai rajouté sur la section tortueuse suivante les trajectoires des projectiles: ça crépite de partout. Digne élève des pyramides de Commander Keen. Et seul l'absence de limite supérieure sur les points de vies de Badman rend la chose faisable tant les points de repos sont rares.

Dernier challenge avant le sommet, ces trois gardes à dégommer malgré le tireur sur le mur du fond (et un refill plus généreux de 10 points de vies). Mais les gardes ont un mouvement assez piégeux, faisant des "bonds" pour passer d'un creux à l'autre (en principe), inspirés des égyptiens-rappeurs de Lost Vickings.

Arrivé là, j'ai dû me dire qu'une pyramide sans clés, ça devait être un peu comme un soupe sans sel, alors j'ai rajouté une carte-clé et un bloc-serrure. Voilà. (ils étaient déjà dans le jeu Badman 1, celà dit, mais arrivaient nettement plus tard dans l'aventure)

Past the summit of the pyramid, I'll switch to a key-and-locks mechanics. The layout isn't that innovative, it's mostly an excuse to make you experience way-and-back motion versus one-way boulders or arrows.

Cette première clé n'est vraiment pas méchante. Elle fait presque tutoriel: on la voit en arrivant avant de tomber sur la serrure, et il suffit de partir dans la direction où on l'a vue pour tomber dessus en quelques secondes.

La deuxième (et dernière) va être plus chère à obtenir (en particulier à cause du nombre d'ennemis et de lance-pièges disposés sur le chemin), mais on reste sur la même recette.

Voilà. C'est le genre de niveau sans grande subtilité réalisé 'selon l'humeur du chef' qui constituait le coeur du jeu où j'étais seul à la manoeuvre (frangin en vacances ?) jusqu'à ce que Piek débarque fin-juillet.

Alors ? bon level design ?

Tuesday, February 10, 2015

2015, L'année Badman ?

Il y a 20 ans, en Mai 1995, naissait Badman. Un antihéros bien rondouillard masqué parti sauver la coupe du monde contre une intrigue louche. Il y a 5 ans, j'envisageais une version-anniversaire reprenant les 4 niveaux-clés du premier jeu (il y aura en tout deux jeux et une démo de 2 mondes du 3eme opus): les toits de Gettham City, Le manoir hanté, la prison et les cascades japonaises.

20 Years ago, in May '95 was born Badman, a masked, plumpy anti-hero who's the last line of defence to avoid soccer world cup to turn into a mass destruction weapon, although the actual nature of the threat was never very clear. 5 years ago, I was exploring tracks for an anniversary version reusing 4 key levels of the first game (Badman will eventually appear in 2 and a half games): Gettham city rooftops, a haunted mansion, a nazi (?) jail and Japanese waterfalls.

It's clear the former PPP Team would love to play the character again -- and he's likely one of the most popular character PPP Team ever animated -- but what should the game look like ? Ennemies in the first game are fairly limited, partly because we were still discovering the features of RSD Game-Maker. At best, they'll move a few step forward, and then some step backward. Badman's moves are fairly chaotic, and button mashing will often be required to clear some jumps. You can somehow climb along edges, although the engine is unable to let you "grab" them. Trying to produce a gameplay that could let you move along in original maps would be totally incoherent, I'm afraid.

My best offer would be something along the lines of "The Blues Brothers" by Titus. I could also get inspiration of some 2008 sketches where Badman gets more muscular by picking up batteries for his sauna belt. It could be used to create a sort of arcade shooter, somewhere between Bomb Jack and Super Crate Box.


Ça ferait sans doute plaisir à pas mal d'anciens de PPP Team de retrouver le personnage, mais pour quel jeu ? Les personnages du premier opus sont limités par les connaissances limitées du Game Maker de l'époque. 3 pas en avant, 3 pas en arrière ... et c'est tout. Les déplacements sont parfois un peu désordonnés, et il faut souvent bourriner les boutons de saut pour atteindre les plate-formes. On parvient plus ou moins à s'accrocher aux mur, à zig-zagguer dans l'air. Franchement, tenter de reprendre les maps d'origine pour refaire un jeu et tenter de reproduire quelque-chose qui ressemble au gameplay de base, ce serait galère.

Sans faire d'étude approfondie sur des gameplay intéressants avec les ennemis de d'origine, on pourrait imaginer quelque-chose ressemblant à un vieux Titus -- genre Blues Brothers.

Autre possibilité, qui s'inspire d'une petite série de croquis de 2008 où on voit Badman devenir plus dynamique après avoir ramassé une "super batterie mégaflash à placer dans sa ceinture (sauna)" et faire un simple "survival shooter" un peu entre bombjack et Super Crate Box.

edit: plus que quatre points à régler sur "Bilou: Rush to completion" ... peut-être bien que je pourrai faire un peu de Badman cette année, après tout ...

Tuesday, August 16, 2011

Badman.


Deux boules superposées, deux mains rondouillettes et pareil pour les pieds, Badman est un candidat idéal pour l'animation modulaire lui aussi!

Quelques coups de stylet dans le SpriteEditor, une petite animation-test d'une course plutôt concluante. C'est bon. Mais en redessinant une cape hier soir, je me rends compte qu'il est impossible de la lui ajouter sans devoir refaire toute mon animation. Nouvelle session de code en perspectiveterminée ...

Among PPP Team characters, Badman is another good candidate for AnimEDS testing: balls for head, body and hands ... simple feet ... A few stylus stroke in SEDS, a simplified shading style and we're already ready to make him run ^_^ Compared to the '96 sprite sheet, that's a lot of work saved! Adding the waving cape required a bit more code on AnimEDS -- I hadn't drawn it at first, but defining a new skeletton (the 'ok' button on the FileWindow) would clear the animation. There's now a way to keep the animation by L-clicking that "ok" button.

Okay, so next steps:

  • automate export of animation into e.g. animated GIFs.
  • onion skin, at least for specified object, later for complete character


Sunday, August 07, 2011

(-1)/8 = guru meditation error.

Et chroot! J'avais donc commencé à dessiner la tête et le corps d'un Badman avec la version "gamma" de mon sprite editor. J'en étais à une animation (plutôt réussie, à mon sens) de sa cape, l'idée étant d'en faire un perso annimable avec AnimEDS. Plutôt sympa pour commencer mes 2 semaines de congés pendant que ma fée est toujours dans le tome 1 de la Trilogie des Périls (Eddings). Je veux ajuster un poil la vitesse de mon animation et là, bardaf!

GURU MEDITATION ERROR


quelque part, un widget n'a pas été prévu pour recevoir des coordonnées négatives... Il ne devrait en toute logique pas y avoir de coordonnées négatives sur la DS, d'ailleurs. Nulle part. Mais là, pas de chance, ça m'a tout planté avant que je n'aie eu le temps de sauver mes p'tits dessins.
Enfin, j'ai trouvé la cause de l'erreur. Je vais patcher ça fissa. Patché.

Hey there. If you happen to be using the 'latest beta' of my Sprite Editor (that is, SEDSGAMA.nds since I've switched to dkp-r32), be warned: there's a nasty bug in the "animation preview" part that may make you lose your work. I figured out what the problem is and will update that version soon.

Edit: fixed: if you are using sedsgama, launch it near your favourite WiFi access point and press [START] then [SELECT] to download and use the latest version (N.B.: the updated sedsgama.nds will always be downloaded at the root of your media card.

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

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.

Tuesday, April 14, 2009

(Might be) Back again ?

La prison, "retaillée" pour DS
Ok, mettons que je n'essaie pas de faire un programme qui convertisse un jeu Game Maker en un jeu DS tout fait, mais plutôt que je reprenne les graphismes du premier Badman pour m'amuser un peu à faire une "version anniversaire" sur DS, reprennant les meilleurs niveaux, etc.

Première observation, les graphismes étaient tellement simplistes qu'ils passent pratiquement tous à travers une conversion "20x20 -> 16x16" brutale dans The Gimp. Certains (la porte en bois et les caisses) auront besoin d'un petit relifting dans SEDS, d'autres (la grille de la prison) auront tout intérêt à être réimportés de leur version 20x20 et "recollés" sur le fond.

A few more "mapshots" of RSD game-maker games i did in '95. Here comes Badman, an overweight parody of Batman, in a super-zero style. The tools i've crafted so far don't allow straight conversion of any RSD game, but let's try and see how much work a specific port (for instance an "15th anniversary release" of Badman) would require. Let's go. Just convert 2000x2000 map into 1600x1600 map and see what happens...

Le manoir, "retaillé" également à l'exception de Badman
Deuxio, Badman ne fait pas 16x16 mais seules ses "oreilles" et sa cape dépassent du cadre. Au niveau du gameplay, ça ne devrait donc pas choquer de le voir se faufiler dans des passages un peu trop étroits. Les ennemis seront conservés en 20x20 aussi (et prout pour la surconsommation de VRAM), sinon ça ne donne pas


la version d'origine, sur PC
Tertio, si la version PC était limitée, il y a moyen de s'amuser en variant un peu le comportement des ennemis, cette fois-ci. Faire hanter les cuirasses de chevalier par les fantômes du manoir, par exemple. Ou passer l'horrible grille de la prison en parallaxe, etc.

well, a few background tiles will need to be reworked, of course, though in some cases, like the jail's grid, i can just re-import the pixels because they actually don't have per-block granularity.
Clearly, i should better keep
sprites 20x20 anyway (if i dedicate per-OAM vram rather than per-frame vram, it should work for every game, and it really doesn't care for Badman 1 which features some 40 frames for all animated objects throughout the game ;)


Retenus pour l'occasion : gettham city, le manoir, la prison et le japon.

et point de vue code:
  • extraire les animations des blocs vers du script "GEDS"
  • itou pour la position des monstres sur la map (avec un offset et ajustement des coordonnées quand-même)
  • un mbl2spr qui ajuste les sprites 20x20 sur du 32x32 (ou éventuellement 24x24 si vous êtes sages.

Friday, March 27, 2009

vgmaps tool for RDS Game-Maker


bbl2map.pl

Et voilà. L'outil ultime : conversion des fichiers .MAP en allant rechercher les animations des monstres dans les .MON. Je suis encore loin d'avoir tout compris aux .mon (déplacement, etc.), mais au moins, j'ai de quoi me faire un joli musée de niveaux de nos jeux RSD Game-Maker. Pour ce qui est de faire une conversion .gam -> .nds, par contre, ce n'est toujours pas gagné. Si la plupart des maps se "compressent" assez bien sur des tiles de 8x8 (pour Badman II, en tous cas), la gestion des animations serait un vrai cauchemar dans un environnement pareil ...

Good news if you used to design games on RSD Game-Maker: i managed to build a fully-featured RSD .MAP reader that lookups .MON files (at least animations) to render a full map of your levels, with monsters depicted... Oh, it could still use the information from .GAM files to show you entry/exit points as well, i admit.

I guess anyone fluent in PERL could reuse the code to write a RSD->XXX converter given that you already know the map format for XXX. Unfortunately, that doesn't really bring me much closer to the "RSD->NDS" conversion/replay tool due to the silly 20x20 block size in .BBL files. Not much of a concern for handling the map (at least, in Badman II, most of the maps use quite few blocks and a plain conversion to 8x8 tiles does the trick), but animating such 20x20 blocks that are split over different tiles would likely turn into a nightmare. And trying to update a bitmap rendering of the level might be tedious (and boring) to implement, not mentioning the limited bandwidth to the screen's backbuffer , that would hit the framerate quite badly.
.

Thursday, March 26, 2009

BBL metadata.

Voilà. Une fois qu'on dispose de tout un jeu de .BBL avec les tileset correspondant, c'est bien plus simple de reconstituer le rôle des 20 bytes de contrôle ... C'est ce que fait de son mieux ce petit outil "bblmeta.pl" que je vous offre également.

Chaque ligne rappelle le numéro du bloc (en hexa) et sa position dans l'image générée par bbl2png (le premier, par exemple, r02 c12 correspond au premier canon, tourné vers la gauche sur la 3eme ligne de l'image). Suit ensuite les "flags" tels que lus dans le fichier .BBL puis l'interprétation de ces flags par le script bblmeta.pl

J'ai repris la technique des répertoires UNIX: un '-' chaque fois qu'il n'y a rien à signaler, une lettre sinon. Ainsi "B--a-K" serait un bloc solide (B) animé qui interagit avec une clé (probablement une porte). "--g-+-" est un bonus qui rapporte uniquement des points, etc. Pour être exhaustif, je dirais que le programme reconnait:

  1. Bloc, Floor, Wall ou ciel (-)
  2. Pickme : l'objet peut être ramassé pour l'inventaire
  3. g, l ou r : gravité normale, vers la gauche ou la droite. Les autres combinaisons ne sont pas reconnues.
  4. a : bloc animé,
  5. t: réagit au contact
  6. bonus/malus : H=hitpoints, x=kills, + : score
  7. L = 1UP, K=clé/porte.
En plus de ces "flags", certaines valeurs sont indiquées dans une liste entre parenthèse, comme la succession des blocs pour une animation, le nombre de hitpoints ou de clés, ou de points modifiés lors d'un contact , le numéro du monstre tiré (pour les blocs qui tirent des monstres), etc.

Here comes a second funny PERL script. It extracts meta-data from .BBL (Background BLocks), .CBL (Character BLocks) and .MBL (Monster BLocks) produced by RSD Game-Maker. If you used to write games with that editor, feel free to use that tool to retrieve all meaningful elements and port your old funware to some new platform. If you do so (or just plan to do so), please share the joy and post a comment.

This tool is a kind of "preliminary" reverse-engineering tool. It can tell you roughly what are the properties of individual blocks but detailed information may need to be looked up in the 40-digits hex string. Each line describes a block. Right to left you'll have the following information :

1c (r01 c13): 400100000000000000ffff1b64001c0400010000  --ga-x-  (a1b,100)(h-1)
^    coords   |--- complete hex dump of meta-data ---|  |flags|  |---details--|
+- block number
On the right side, "flags" tell you roughly what are the properties of your block. here you see an Animated block that has downwards Gravity and that hurts the player (x) on contact. Details tell you that it animates to block 1b after 100 ticks and that hitpoints are reduced by 1 on contact. On the left, you have block number (block #x pixels are located at bytes x*420..x*420+399 in xBL file) and the row/column coordinates on the picture generated by my former bbl2png.pl script.
Bref, ce n'est certainement pas aussi souple que l'éditeur du game-maker (et d'ailleurs, ce n'est pas un éditeur, juste un outil d'inspection), mais ça capturera la plus grande partie des cas que l'on retrouve dans un jeu de plates-forme comme les Badman.

Hope it Helps ^_^
PS: 1st byte is the index of the generated monster (0x40 = no monster generated), thus byte 2 is likely the delay between two such generations.

BBL to .png converter

J'avais pris l'habitude de faire un p'tit cadeau sur Internet pour mon anniversaire, et là, pour mes 30 ans, schnol. Avec les travaux dans la maison et le retour de Suisse, je n'avais rien à montrer. Quelle idée saugrenue m'a pris ce midi? Aucune idée. Mais je vous offre un petit script de conversion des fichiers graphiques du Recreational Game Maker (.BBL, .CBL et .MBL) vers des .png, plus pratiques à manipuler. download bbl2png.pl exemple d'utilisation :

perl ~/DS/SEDS/runme/bbl2png.pl /tmp/TOYZONE2.PAL /tmp/%.MBL m%.png --sprites

Here comes some pixels dump of sprites i've been working on in '97, at the peak of my RSD Game-Maker years. Each level had its very own tileset and spriteset (though there might be much shared things between two levels in the same "zone"). Behold Badman III, most likely the more complex (and unfinished) project with the RSD-GM ever. I finally managed to write a small ".BBL->.png" conversion script, meaning that i can retrieve *all* the graphics from all our previous games. 

Ca veut donc dire que je peux récupérer tous les graphismes de Badman et autres pour vous les montrer... Je doute qu'il y ait grand-chose à en tirer à part de la nostalgie ... j'ai tant appris en matière de pixel art, que même mes "plus jolis" boss sont tartes "by today's standards" :P En vrac, donc voici quelques sprites tels qu'ils sont présents dans la démo jouable Badman 3 (Badboyz are Back!). On y découvre "Ratman", d'après un T-shirt de T-Bob, qui ne sera finalement pas repris comme boss de la Cheese Zone. Juste après, Burner "relooké" qui laisse derrière lui une trainée de feu quand il court, avec un shading un peu douteux. Enfin, le gris aux oreilles rondes, c'est le "ratman" tel que vous pouvez l'affronter, avec son astro-flasheur "kirsch" et ces attaques de roues de gruyère.  

In "Badman III: Badboyz are Back", you can play either with Badman or Rubishbin (who you saved in "Badman II: Out of This World") in three insane environments: the Cheese zone, the Toy zone and the Ice zone. Each character had unique abilities giving them access to hidden areas. Rubishbinn, for instance, can do a spin-jump that destroy some blocks below him while Badman can dash under low roofs. I also reused the technique developed in Badman II for creating shooting bosses. The result was near to an unmanageable nightmare that turned short as I entered university: with only 5 playable levels, Badman III games already lists 44 'levels' in the game editor. 

Ce serait à refaire, je prendrais le "ratman" initial comme PNJ genre "Je suis le seul maître légitime de la Lune Fromagère, et je délivrerai mon monde de la tyrannie des BadBoyz ... Enfin, si tu veux m'acheter des grenades Petit-Suisses ou des Camemberts lacrymogène, ... " Et oui, le volet 3 de Badman était franchement inspiré de la mécanique de jeu de Megaman ... Suit l'Ice Zone, dont les monstres sont pas mal inspirés du niveau des glaces de Prehistorik II (auquel je rejouais cet été-là -- juillet '97 selon le .zip -- en version complète). 

On y retrouve donc un le fameux pingouin et un eskimo dont je n'étais pas peu fier à l'époque et un "lemmings xmas" qui était là juste pour le fun. Ce genre d'apparition était d'ailleurs assez habituel dans la série des Badman : le bonhomme-promo de Belgacom, Moktar sur son tapis volant, une bestiole rampante "façon Commander Keen", des p'tits robots tout ronds "façon twinbee land", une souris bleue mécanique "à la sauce Alfred Chicken", etc. Vous remarquerez aussi "Rex", le chat (private joke) utilisé dans des "cut-scenes" façon "Kirby's dreamland". Le mamhout vous paraît bizarre ? logique. 

Le game maker de Recreational Software ne supporte qu'une seule taille pour les monstres: 20x20. Un monstre plus gros est indestructible par nature et construit à l'aide de plusieurs monstres que vous tentez de déplacer de manière synchronisée ... ce qui se traduisait généralement par un désastre complet. Allez, je vous mets aussi Badman "himself" et son compagnon d'aventures "Rubish bin" ... On est plus très loin d'un extracteur de niveaux complets, avec les autres infos dont je dispose déjà 

PS : mon frère possède aussi une mine de petits "trivias" sur le développement des épisodes de Badman, qu'il reconstitue a partir des commentaires de ses .S3M ... Si vous êtes fan, bonne lecture.

Wednesday, June 13, 2007

Years of Sprite Editor Coding

Oh boy! it's now years i'm busy working on sprite editors. SEDS is certainly not the first one. I probably have half a dozen of sprite editors for DOS. The first ones (the 'regular' sprite editor from JMWS was only controlled through the keyboard)

The first half-usable was "super sprite editor", which --thanks to a book i found in Mr. Beer's library-- could handle the mouse. Only 8 colors were allowed, which wasn't much a problem at that time. Palette editing required the user to encode RGB values. A few built-in features like swap were available, but it was still far from being really usable.

Oh, avec SEDS, je n'en suis pas à mon premier Sprite Editor ... loin de là. Un des premiers à être vraiment utilisable était le "Super Sprite Editor", également mon premier programme à utiliser la souris (grâce à un bouquin trouvé dans la bibliothèque de M. Beer). Seules 8 couleurs étaient disponibles -- ce qui, vu les techniques utilisées par après dans le rendu des sprites -- était loin d'être un problème. La modification de ces couleurs passait par un encodage direct des valeurs RVB.

A côté, la version 1.4 annonçait fièrement (à grand coup d'animation par "palette cycling") "8 blocks in 32 colours, 20x20 pixels". Une petite fonction "copie de bloc" (Shift+C) bien sentie et la possibilité de "retourner" les images (shift+X et shift+Y) étaient ajoutées, mais malgré toutes mes tentatives, je n'ai pas réussi à utiliser plus que les 8 couleurs de base. 'faudra que je replonge dans le code. C'est malgré tout avec cet outil que j'ai fait la plupart des sprites de Bilou's Adventure (version Quickbas, bien sûr).

Super Sprite Editor version 1.4 was proudly announcing "8 blocks in 32 colours 20x20 pixels" in the welcome screeen with funny palette animation. You could basically copy blocks (when prompted "source sprite" and "destination sprite"), but i didn't find out how to use more than 8 colours anyway :P The rest of the interface was basically just the same as Super Sprite Editor. SSEditor2B.bas is its latest incarnation. It has a bit more features and better error handling. I thing that's what's been used to draw Bilou's Adventure sprites.

Its latest incarnation - SSeditor3.bas - is probably the best you can expect from a BASIC program. It features backward compatibilty with the previous versions, edition in 128 colors, easy-click and complete color edition solution. It also has better "compression rate". This is the tool i've been using for the school zone in Bilou's Adventure (basic).

Note that it already uses the convention "left=putpixel, right=getpixel" that i'm still using in SEDS nowadays. I find it more convenient than the typical two-colours setup.

Nettement plus ambitieux, SSeditor3.bas est probablement mon meilleur outil en Basic. Avec une fonction d'import des outils plus anciens, une édition intégrée des palettes de couleurs (avec gestion des dégradés, oui ma bonne dame), et jusqu'à 128 couleurs simultanées, on croyait rêver. Tout ce qu'il lui manquait c'était la possibilité de lire les fichiers disponibles (l'utilisateur est obligé de se souvenir des noms où il n'aura rien du tout).
A noter que c'est mon premier éditeur qui utilise la convention "clic gauche = dessiner, clic droit = lire la couleur", qui est toujours en vigueur dans SEDS, et que je trouve bien plus efficace que le système "FG/BG color" que l'on retrouve p.ex dans The Gimp et dans le sprite editor du Game-Maker.

Another heavily used tool: "Decor Editor Special Bilou" was pain for the fingertips. You navigate on the grid with the arrow keys and fill one pixel xith "enter". Changing to another color required you to hit "C", navigate to the new color and then press "enter" again.

Barely more intuitive than encoding your colors as DATA statements in a dedicated "rendering program".

Enfin, terminons par un des tout premiers "sprite.bas", encore sous le label "JMWS", qui était entièrement contrôlé au clavier. Tout le dessin devait se faire en déplaçant le curseur à l'aide des flèches, et il fallait entrer "C" pour pouvoir avancer dans la palette jusqu'à la couleur suivante. Les dernières versions permettaient aussi de descendre ou remonter d'une ligne dans la palette et se souvenait de la couleur en cours.
Croyez-le ou non, mais toute la forêt de Bilou sous Dos avait été encodée avec cet programme. Les opérations du genre "copier/coller" ou "symétrie verticale" étaient obtenue par des programmes BASIC indépendants :P

J'ai aussi fini par retrouver "blobedit.asm", une tentative de sprite editor complètement en assembleur, mais pour lequel je n'ai apparament plus aucun des fichiers "maya.blb" qui en sortait.

Oh, there also was "blobedit", pure a86 assembler ... 16x16x256 editor which had been used for "nono in maya zone" ... but it looks like i don't have any .blb file anymore on my hdd...

And of course, now, this 'family' is completed by SEDS, the Sprite Editor on DS, that result of a completely new approach, trying to get the best user experience from this unusual hardware : one hand on the D-PAD, the other holding the stylus. No menu or distracting boxes. A handy development tool that you can take along anywhere...

Et bien sûr, la famille compte maintenant aussi SEDS, mon éditeur sur la console DS, d'une conception entièrement nouvelle pour améliorer l'ergonomie du pixel art... une main sur la croix directionelle, un doigt sur le bouton L, le stylet dans l'autre main ... et vous êtes parti! Dans le bus, le métro, au boulot ou au dodo, rien ni personne ne vous empèchera plus jamais de spriter ... sauf peut-être le prof de Latin ^_^

Wednesday, May 09, 2007

He's the Terror who makes Errors ...

Retour en 1994 ou quelque-part par là à l'age d'or de PPP Team Software (moi, mon frère, Pierrick et quelques autres dont Pascal). A l'aide du fabuleux Game-Maker de Recreational Software Design (RSD), nous enchaînions niveau sur niveau puis jeu sur jeu les mercredi après-midi.

Back in '94, in the golden age of PPP Team Software, where we were spending our lunchtime creating games with the RSD Game Maker. Badman has quickly become one of our "best-known" funny platformer hero, and is starring 3 games while he was initially meant to be just a mid-level boss for Bilou's Quest. "Badman 1" was one of our "real" game produced with RSD tools, where the "terror-who-makes-errors" crosses manatthan roofs, japanese waterfalls, nazi jails and haunted mansions looking for clues about a terrorist take over to take place during the football world cup. Since my bros came up with a collection of .mod songs, it's very tempting to revive the 'best' 4 levels of the game on the Nintendo DS for an "anniversary edition" ...

Parmi la collection de personnages loufoques dont nous avons fait nos héros, il y avait Badman, sans conteste un de ceux pour lequel il y a eu le plus d'efforts investis. Les images reprises ici sont des captures d'écran de Badman 1, un de nos premiers "vrais" jeux, même s'il était encore entaché de pas mal de blocs venant des jeux "démo" livrés avec le Game Maker... Puisque Piet a (par la suite) écrit des musiques qui colleraient à merveille avec certains de ses niveaux, la tentation est énorme de reprendre les niveaux les mieux aboutis (4 en fait) et d'en faire une version "anniversaire" sur la DS. J'ai un modplayer, donc c'est ok pour les musiques ... les maps et l'IA des ennemis était excessivement simple au point qu'un week-end devrait suffire à tout récupérer.

Le gros problème, ce sont les images. Là où toutes les consoles travaillent avec des tiles 8x8, le GameMaker fonctionnait avec des blocs 20x20, ce qui va terriblement compliquer la composition des graphismes, etc. Pour des éléments comme les blocs de terre ou les briques d'arrière plan, je pourrais à la rigueur m'en tirer en passant d'un bloc 20x20 à 25 tiles (pour reconstruire un méta-bloc 40x40), mais ça va clairement coincer dès qu'on voudra avoir un seul bloc plutôt qu'un mur entier (voir la cascade).

Pas question non-plus de 'zoomer' tous les persos en 16x16. Badman ne ressemblerait plus à rien (et il faudrait retoucher tous les sprites). Pas question (toujours) de devoir prendre en compte toutes les combinaisons de blocs voisins pour construire les tiles "de jonction". Il me reste tout de même un espoir, jouer sur les plans multiples (un bloc sur le plan 1, le suivant par transparence sur le plan 2, puis retour au plan 1, etc).

There are a couple of technical issues to achieve this, mostly due to the mismatch between Nintendo console tiles (8x8 pixels) and RSD tiles (20x20). Plus, RSD game maker tileset and maps are stored in a proprietary format that isn't documented anywhere. Palettes and blocks (BBL, MBL files) aren't very sophisticated, I know how to display them on a DOS screen since '97. But .map files (levels) are still a mystery. I'll give them a reverse-engineering try this lunchtime. Let's open a hex editor and have a look ...

Reste à briser les secrets des fichiers .MAP ... je jette un rapide coup d'oeil aux premiers niveau de Badman ... Toutes les map sont scindées en 2 parties, et la 2ème partie commence toujours à la position 20000, ce qui suggère une map de 100x100 (avec 2 bytes par bloc)

Presque tous les blocs possèdent un code c8xx, sauf un petit nombre, et les premiers bytes sont tous différents, e.g.

SONI.MAP: 000a@(8,13) 0105@(8,33) 0200@(33,21)
0306@(33,36) 040d@(33,51) 050d@(67,46)

facts:

  • .maps file look to have two distinct parts, and the first one is 20,000 bytes long, which suggests a 100x100 map with 2 bytes worth of data per tile
  • tiles where there is no monsters have the form 0xC8yy and tiles where there is a monster have the form 0xzzyy, where zz is a relatively small number, that is unique over the map. That suggests "C8" means "no monster" and that zz is the monster's index in some other table.
  • The second part has 5 words (16-bit) per entry, where "0040 0000 ffff ffff 0000" seems to be a filler for "no monster here".
  • words 2 and 3 in that list seems to be X and Y coordinates of the monster on the map, while word #1 could be the ID of the monster to be used (that is, in the .MON file).

Pour le fun, j'ai noté les coordonnées auxquelles ces blocs apparaissent, en plus de leur valeur.

(SONI.MAP)

0004e20 000e 0000 000d 0008 0000:000e 0000 0021
0004e30 0008 0000:000e 0000 0018 0021 0000:000e
0004e40 0000 0024 0021 0000:000e 0000 0033 0021
0004e50 0000:000e 0000 0049 0021 0000:0040 0000
0004e60 ffff ffff 0000 0040 0000 ffff ffff 0000
0004e70 0040 0000 ffff ffff 0000 0040 0000 ffff


Répétition de blocs "0040 0000 ffff ffff 0000" une fois un certain point passé... Dans la map Soni, il y a juste 6 entrées avant ce "remplissage", ce qui correspond au nombre de blocs "spéciaux" trouvés.


000e 0000 000d 0008 0000 (8,13)
000e 0000 0021 0008 0000 (8,33)
000e 0000 0018 0021 0000 ...

Les mots 2 et 3 correspondent aux coordonnées où sont enregistrés les monstres sur la map. Il serait logique de supposer qu'il y a une 'liste de monstre' et que le premier des 2 bytes encode le numéro du monstre dans la liste (pour le retrouver facilement lors de l'affichage du niveau). Le premier mot serait logiquement le numéro du monstre à utiliser, quant aux deux autres valeurs (toujours à 0), aucune idée, ma foi.

En tout, il y a 2000 bytes de monstres (la 2eme partie) dans chaque map... Soit 200 monstres possibles... C8 est le numéro 200, le monstre inexistant ^_^

Pour info, j'ai déjà un convertisseur de blocs & palettes vers le format SEDS.
Dernières news, j'ai aussi reverse-engineeré le format des fichiers .GAM du game-maker RSD.

Saturday, December 31, 2005

PPP Team (t.a.g.)

You have reached the last tag of the PPP Team category.

This thread is dedicated to all those games that were planned or developed by the core team "Piet, Pierrick and Pype" in the '90es, and the characters that were involved in these games, such as Badman or Biokid. Most of these were either made in MS QuickBasic or with RSD Game-Maker.

Some of these post may also be presenting thoughts about (hypothetical) porting of PPP-era game on the Nintendo DS and the GEDS engine.

You can find some more info about those games on the RSD-era spin-off page or on Aderack's wiki.