Showing posts with label pppteam. Show all posts
Showing posts with label pppteam. Show all posts

Friday, November 10, 2023

Neocities

Pendant des années, j'ai eu un site présentant mon projet d'OS et mon activité sur la démoscène... et quelques-uns des jeux qu'on avait réalisés avec des amis. Le point commun entre eux, c'était le nom de l'équipe: "PPP Team (Software)". Il a migré de mon compte étudiant à mon compte de chercheur, puis il a fini par disparaître corps <body> z'et bien quand j'ai quitté l'unif.

Dommage parce qu'il n'y a plus rien pour parler de notre passage sur la Inscene ou des concepts originels du Clicker32 sans lui.

Mais entre deux tweet, j'entends parler d'un nouveau service d'hébergement orienté "bon vieil HTML", sans lourderie en php: neocities. Vu que mon premier hébergeur était geocities, ça fait mouche, bien sûr.

Je transfère donc mes derniers backups sur  https://pppteam.neocities.org/ pour voir ce que ça donne ...

Somebody on twitter mentioned neocities ... Since I have old (pre-php) web contents that has turned unavailable lately, I decided to re-upload it on brand new https://pppteam.neocities.org/ ... So you can visit my old demoscene archives and operating system development manifesto and I don't have to wonder how I could convert that into wordpress

bin ça donne plutôt sympa ^_^

Saturday, October 23, 2021

Le tout premier ?

 

Je viens de retomber sur une pièce d'anthologie. Une reproduction colorisée de ce qui pourrait bien être le tout premier synopsis de Bilou's Adventure! On y voit d'ailleurs dans le bas un 'bubule' dessiné par mon frère.

Premier élément remarquable, la 'school zone' est loin dans le jeu alors qu'elle passera assez rapidement comme deuxième zone. La zone aquatique est visible dès le départ, mais nécessitera des palmes (juste avant la School Zone) pour qu'on puisse y entrer ... Comme dans Commander Keen.

My brother had a fascination for maps back in '93, so I should not have been surprised if one of the first documents he brought me after we decided to rename the 'buble' character 'Bilou' was a world map of the games' big adventure. 

And on the back of that world map, there was a set of sketches for the games' introduction sequence ("magic" stones get scattered during a space shuttle crash), the main menu screen, and so on. Unlike in previous documents, the character is already identified as 'Bilou', and we are 'PPP Studio'.

Cerise sur le gateau, au dos de cette feuille, les croquis de mon frère pour l'intro, les menus, etc. Qui nous confirme que même si on dans du tout vieux, le nom "Bilou" avait déjà été arrêté.

There are a few interesting similarities between that map and the ones from the original Commander Keen trilogy. Notably the abundance of world map teleporters and an early-visible area that requires a swimming upgrade to be visited.

Compared to other maps of the game, the school zone appears quite late in this proposal, and the final boss is "catvador", the evil ruler of the Black (sic. we meant dark) Empire recycled from Calimero.
 

Thursday, January 07, 2021

Titanic death by a worm

Petit retour sur une lecture de Cactuceratops contre Conquer (bad fur day), qui cherche à comprendre pourquoi les voix du personnage principal 'rippées' hors du jeu sonnent différemment. Pour info, c'est un des premiers jeux à utiliser de la compression MP3 pour les échantillons vocaux. Au milieu de ses investigations, elle met le doigt sur un fait intéressant: certains blocs de son dans le MP3 sont marqués 'copyrightés' et les autres pas. Si on retire les blocs 'copyrightés', le son est parfaitement normal.


Le bit de copyright est justement celui qui distingue de l’entête le plus fréquent celui qui apparaît seulement pour la voix de Conker. Son dernier octet est en effet égal à 0xC8 plutôt qu’à 0xC0 (les quatre derniers bits valant 1000 au lieu de 0000). 
Et ce quelque chose, c'est les mouvements de la bouche de Conker, ce qu'on appelle le “lip-sync”. Ces 9 octets ajoutés viennent de l'outil développé par Mike Currington pour faciliter le travail des animateurs et rattacher ses nombreuses expressions aux articulations de sa voix
En clair, les développeurs de chez Rare ont improvisé un fichier avec entrelacement audio/data en tirant parti du fait qu'ils avaient leur player "à eux" et donc l'opportunité de travailler avec leur propre solution de multiplexage. Et après avoir vu des formats .LBM qui embarquent leur aperçu dans une section .TINY, des .MODs avec des e-mails planqués dans le 6eme instruments, etc. Je me dis ... "c'est bien le genre de hack auquel j'aurais eu recours, si j'avais été dans la boîte".

En fait, je pense bien que j'ai déjà réellement voulu utiliser un truc pareil. Retour en '99

Début de l'année, je me suis acheté mon premier PC perso: un AMD K6-II, premier à avoir je ne sais plus trop quelles extensions 3DNow! auprès d'un étudiant quelques années au-dessus de moi, ci-dessous Gino. Comme il avait voulu attirer mon attention dessus, je fais au téléphone "oui, j'ai vu. Comme je code en assembleur, c'est le genre de chose que je note tout de suite". Et lui "ah!? Tu fais de l'assembleur! Tu vas à la Inscene, alors ?"

Et de fil en aiguille, on se retrouvera avec mon frère dans la voiture de Gino avec nos tours (plus ou moins grosses), nos écrans (pas plats), le synthé de mon frangin (iirc), des sacs de couchage et quelques blocs-notes. C'est là que sera présenté Crazy Brix et El Ritmo Latino.

Pendant que mon frère participe à toutes les compétitions-surprise de musique et graphisme, que Gino fait du photoshop et retouve des connaissances, moi, je suis plongé dans le code source Visual C++ de notre Grrand Prrojet: "Titanic Death by a Worm" qu'on avait largement pré-produit depuis la fin des examens.

Je m'étais déjà bien lâché sur les p'tits personnages, contrairement aux Worms qui sont tous les mêmes (mais auxquels on donne une personnalité), nous on leur a donné à tous un look perso et des attaques spécifiques.

Mon frère avait fait un .IT avec toutes les actions prévues dans le script (ou il avait fait le script dans Impulse Tracker, en fait. Je ne sais plus trop). Restait à trouver comment aligner les actions des pixels avec le replay du module. Eh bin, puisque dans un .IT, y'a moyen d'utiliser plus de 26 effets différents (arpeggio, glissando, vibrato ...), on aura qu'à se réserver un effet qui ne changera pas le son, mais qui pilotera l'avancement dans le script visuel.

Bon, par contre si vous avez déjà fait une game jam, vous devinerez la suite, hein. Avec à peine une coquille où on sait passer en 320x200 dans DirectX (merci Gino) et charger mikmod.dll au moment de monter son PC et qu'on bloque sur le choix de comment créer des classes dérivées à partir d'une classe de base et d'un script texte ... eh bin, je me serai beaucoup pris la tête, et il n'y aura jamais de pworms.exe ...

edit: et pourtant, le projet pworms n'était pas trop démesuré comparé à "Kid, show me your dreams" et "Comin' to my Haus" (ne parlons même-pas de l'intro du jeu polycosmos, hein ;)



Monday, October 23, 2017

out'm'up

The inscene'99 visit had been quite as success, especially regading the 100K game competition. My brother and I then tried to figure out what we would do on the next instance - obviously, our chance of making a good game were higher than making a big demo like the one envisioned for "samedi, tous in my home".

A comment by my peer "Gedeon" about how it was a shame that crazy brix was only using boxes for collisions pushed me towards the implementation of some pixel-perfect collision routines. I remember I wanted to do some pinball game, but after all, it was decided to go for a shoot-em-up. Our secret "games to do" folder had a long list aborted shmups, from the "Polycosmos" conversion of "space Mission", the failed "cosmowars" on RSD Game-Maker, and the aborted "Bilou sky quest" ... Nothing getting any close to our childhood golden award "Warhawk". So I picked the "Tyrian" palette and started to pixel some ships.

Retournons au passage à l'an 2000. La Inscene '99 avait plutôt été un succès en particulier pour mon jeu 100K, Crazy Brix. Deux choses étaient claires: 1) on y retourne l'an prochain et 2) on a plus de chances de parvenir à refaire un p'tit jeu en 1 an que d'aligner une mégadémo sur le thème "Samedi tous in my home"... Gédéon m'avait motivé à dépasser le simple test de boîtes de collisions pour le prochain titre. ça pourrait convenir pour un pinball ou un shoot-em-up. 

Des shoot'em'up abandonés, j'en ai déjà une belle liste derrière moi, à l'époque: le Space Mission pour C64, la BD impliquant le polycosmos, le "Bilou Sky Quest" annulé par un verre de Franta et le Cosmowars foireux sous Game-Maker. Pourtant j'aime ça quand c'est bien fait. Que ce soit Warhawk ou Tyrian si il y a des étoiles et des barres de vies, je suis partant. Et comme j'avais la palette de couleurs de Tyrian sous la main, justement, je me suis lancé.

The assembly code for crazy Brix was quite horrible, and I remember taking care of increasing the quality of the organisation for out'm'up. Especially, frames-to-aminations, level layout, and to some extent the sprites behaviour were described in a "data-oriented" macros system that looked a bit like game script, but converted straight into binary pointers and values -- something that was apparently common in MegaDrive games development.

The second key development was to support a dynamic list of sprites, allowing fancy explosions, lots of shots and even powerups where crazybrix couldn't even accomodate for anything but a ball and a paddle. Two lists, in fact. This engine was the first time I decided to split objects in two separate casts to reduce the amount of collision checks required.

While the level design wasn't very inspired, the game received a brilliant soundtrack, a classic but good-looking starfield effect and Out'm'Up won the first place - although mostly due to the lack of significant competition.

Même s'il a disposé de 3 fois moins de temps que Crazy Brix, Out'm'Up a eu droit au niveau programmation à tout ce qui faisait défaut à son prédécesseur: des effets d'explosions, des power-ups, des sprites ennemis, des niveaux programmables.

J'avais même une structure 'scriptable' pour permettre à mon frangin de passer au level design une fois le travail sur le son terminé, mais il n'y a jamais montré beaucoup d'intérêt. L'aventure s'arrêtera donc une fois la première place de la Inscene y2k empochée. Ce sera mon dernier projet en VGA + S3M. mon dernier projet MS-DOS.

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 ...

Friday, July 19, 2013

Bilou Origins

Je vous emmène dans le temps ... 20 ans en arrière. Je suis un gamin de 14 ans et je viens de terminer de programmer le niveau 2 de Calimero en EPBASIC. Cet après-midi-là, mon frère revient à la maison sur-excité: un nouveau gars dans sa classe -- Piek -- fait des jeux vidéos et de la musique techno. Il a assisté à une formidable démonstration des capacité de l'Amstrad CPC grâce auquel Piek a réalisé un jeu de plate-forme autour d'un personnage rondouillard nommé "bubule". La suite a déjà été racontée et va conduire à Bilou tel que nous le connaissons aujourd'hui.

One week ago, this was all that was left from the seminal 
CPC game that led to Bilou as we knew it.

Pour ma part, il m'aura fallu bien du temps avant d'entrer dans le grenier où Piek range son ordi. Et quand j'y arrive, il est trop tard: la cassette sur laquelle se trouvait le projet "Bubule" est irrémédiablement perdue. Je n'aurai donc de ce petit (?) jeu que les images que je m'étais construites dans ma tête. Une sorte de mélange entre Space Panic et Rick Dangerous avec les personnages 8x8 pixels que Piek avait retracé au marqueur pour me servir de base dans la conversion dans un jeu de labyrinthe pour CGA 4 couleurs.

Les choses auraient pu en rester là, mais la semaine dernière, Piek a repris son QBX.EXE et son notebook ... Cette fois, plus question d'une reprise d'un obscur jeu de kung-fu ... Cette fois, c'est ... [télécharger Bilou Origins.zip] !
Je clique ... je lance DOSBOX ... Un écran-titre digne de Giana Sisters plante le décor: tous les fameux monstres -- le sauteur, la boule rouge -- dont mon frère m'avait parlé sont au rendez vous.

Je monte l'émulation à 128000 cycles et j'appuie sur ENTER ...  

My friend Piek just sent me some QBX package named "Bilou Origins". 20 years later, at last, I'm able to get an idea of what was the first game starring the blue ball now known as "Bilou" that excited my brother so much back in time. Using the raw power of our modern computers to emulate scrolling in a BASIC that never supported such a thing, Pierrick used his natural abilty to simplify problems to provide a 4+1-levels (so far) trip into a world of nostalgia.



Simplest level editor. ENTER toggles cursors, SPACE edits.
 Le premier contact surprend. Un chateau façon Mario, des ponts, et un personnage qui ne s'arrête plus de courir quand on a appuyé sur la flèche vers l'avant. Tirant parti de son système de scrolling au maximum, Piek est parti dans un mode de jeu assez différent, sans échelles, où il faut enchainer les sauts proprement pour atteindre la fin du niveau.
A côté du jeu lui-même, un petit "MAP.BAS" me titille ... oui: c'est l'éditeur de niveau. Moins de 40 tuiles pour construire cette petite merveille de rétro-gaming.

While the CPC game was mostly flip-screen adventure, possibly drawing inspiration from Lode Runner, Bilou Origins feels more like a rush game, since releasing the arrow key doesn't mean Bilou stops running. You'll have to carefully air-control your jumps so that you clear those gaps between partly-bridged platforms that ultimately lead to the (spiky) yellow castle. Beware the purple jumper, that cannot be defeated, and the mind-changing green dude, who could turn back just when you expect him to keep moving straight ahead.


Piek calls the PPP Team to help ... new levels, tiles ... I hope they'll be at least 6 to come and provide their own 4 levels + 1 castle, so that the quest can be completed this summer and we can ship "Bilou Origins" for PCs


Alors que je galère pour donner vie au niveau imaginé par la suite sur DS, voici donc probablement le jeu-anniversaire ultime ... Donnez-nous les vacances pour y ajouter quelques petits trucs rigolos -- des boss, des power-ups, ce genre de choses -- et on vous laisse vous aussi découvrir "le tout premier Bilou, revenu d'entre les bad sectors".

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


Thursday, March 10, 2011

Life-changing books (2/3)

When I turned 17, it became clear that I couldn't realise all my projects with BASIC alone. I opted for physics/chemics labs rather than computer labs, unfortunately, and the teacher wouldn't let me get a copy of the Turbo Pascal she was using for her courses. "It wouldn't make any sense to me without her teaching" or something alike.

A friend of mine (later known as Parmy in PPP Team) had a copy of A86 -- a 16-bit assembler for dos -- left over a floppy, and a book "Easy Assembly" he never really made sense of. Being from the 8-bit era, "Assembly" meant to me "the language of gods" and "blazing fast execution speed", so I immediately accepted the offer and started studying Intel's instruction set.


Vers 16 ans, je commençais a avoir fait le tour de ce qui peut se faire en BASIC. J'avais (mal?)heureusement préféré les cours de labo physique/chimie l'année précédente, et la prof d'informatique ne voulait pas me faire une copie du Turbo Pascal sous prétexte que je serais incapable de m'en servir sans suivre ses cours. Grmbl. En allant expliquer à un de nos nouveaux amis (que l'on connaîtra plus tard dans PPP Team sous le nom de Parmy) mes techniques graphiques en BASIC, je tombe dans sa bibliothèque sur un bouquin "L'assembleur facile" et une diskette 5'1/4 estampillée "A86". "Je ne m'y suis jamais vraiment mis", me confie-t'il. Pour un enfant de la génération 8-bit comme moi, l'assembleur, c'est comme le langage des dieux. J'emprunte sans hésiter le bouquin et je me mets à potasser le jeu d'instruction des processeurs Intel.


After I showed my uncle my first assembly program (iirc, a password-prompting tool to prevent my sister to mess up with "our" computer), he brought me a box full of low-level C64 stuff, including a copy of "programming the 6502" book, a disassembled and commented dump of the C64 kernal rom, an EEPROM programmer (with no EEPROM provided) and other similar books. SYS 49152 was no longer a mystery to me -- although POKEing machine instructions from a BASIC program wasn't a very sexy way to proceed. It took me time to wrap my brain around the LIFO stack concept ...
I never really "programmed" the 6502 at assembly level, as it was already a decade-old machine, but I must admit the beauty of 6502's instruction set simplicity has been inspiring to many regards... more about that in part 3.

At last, mastering assembly and the Ms-DOS service interrupts allow direct manipulation of any file format, opening up countless possibilities.


Voyant mon premier programme assembleur, mon oncle me propose de reprendre une caisse de documentation technique sur le commodore, dont une copie d'un livre d'introduction à la programmation du 6502 en assembleur -- le processeur du commodore 64. La caisse contient un programmateur d'EEPROM pour faire "de véritables cartouches" façon Rick Dangerous. Je bave. Je prends. Il n'en sortira pas grand-chose, cependant, hormis une meilleure compréhension de cette machine de rêve définitivement désuète et une admiration sans borne pour la simplicité de ces LAY et LAX. Mais n'anticipons pas.

Knowing the assembly language, however, wouldn't be of much use without knowing the hardware that sits around the CPU. A "PC" was still fairly simple by that time: everyone had a VGA-clone video card (super-VGA was only slowly starting to be adopted, and not by game vendors) and a Sound Blaster clone. Both and more were discussed in the "Bible of PC System Programming", a fairly huge book that I borrowed to another friend -- later known as Nowan -- before I got myself a copy of my own. He also let me grab another Sound-blaster related book (ISBN 978-2742901951) from the same editor, which was describing "how to build a 4-track modplayer from scratch -- in Pascal".

Bien sûr, l'assembleur tout seul ne servirait pas à grand-chose sans une meilleure compréhension du hardware du PC. Fort opportunément, c'est approximativement à ce moment qu'un autre ami (connu plus tard sous le pseudo de Nowan) va me préter coup sur coup la bible du PC et le supergrand livre de la SoundBlaster. Me voilà plongé de plus belle dans les documentations techniques, et armé jusqu'aux dents pour attaquer la conception 100% assembleur d'un modplayer -- pardon un S3Mplayer -- qui devra être le coeur de l'Ultimate Game Maker. J'aurai bien un petit jeu réalisé (Crazy Brix) fin '97, qui sera amélioré plus tard pour la Inscene '99, mais UGM restera un tas de papier attendant la réalisation de mon propre OS -- Clicker, une idée de Nowan, à l'origine -- le Windows 95 ne pouvant définitivement pas convenir pour nos projets.

I still had no Pascal compiler by that time, and I was sufficiently confident that, with that knowledge and the S3MINFO.TXT file shipped with my brother's Scream Tracker III, I would be able to run a 8-track Stereo S3M player instead, with 2 tracks dedicated to sound effects and 6 tracks dedicated to background music. I started copying every meaningful bit of information into a smaller draftbook, easier to carry around and not to be returned to a friend by the end of the month ^_^

According to my brother's archive, it took me another 6 month to convert that idea into something capable of replaying some simple modules. I never made it "the corner stone of the ultimate game maker" as I initially intended, but it was the core of Crazy Brix and Out'm'Up, the two awards-winning 100K game at Inscene'99 and Inscene'Y2K, respectively.

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.

Wednesday, June 02, 2010

BRIX.TXT

Amusant, ce qu'on retrouve dans les fonds de tiroir ... voilà le fichier "readme" de mon premier jeu en Assembleur pour MS-DOS: Crazy Brix, qui (2 ans plus tard), remporta la compétion "100K games" à la Inscene'99 ... A défaut d'Internet, à cette époque, je tentais de voir mes jeux paraître sur le CD du magazine PC-Fun ... sans grand succès, malheureusement.

Well, I dug a README.TXT file for my first A86 game : Crazy Brix, as submitted to the French magazine Pc-Fun. It wouldn't make much sense to translate that to you, right ? it mostly has some nostalgic value. What I find amusing is how it built up : from a proof-of-concept QuickBas game (hardly playable, but conceptually correct), i retro-fitted the "algorithms" into my growing assembly-written .S3M player for the Sound Blaster Pro. Somehow, "importing" the S3M player into a fresh game project didn't work. Debugging such a program was a nightmare ...
I had no idea of the existence of GPL or free-software by that time (neither did I have any free software at hand, which more or less explain the use of assembly), so I was trying to trade my code against something else I could have a use for. Funny.


- - - 8< - - - 8< - - -

Salut à tous !
Bien le bonjour à vous, futurs joueurs de CrAzY BRIX.
Je me permets de me présenter: je suis Sylvain
( alias PYPEIN ), programmeur de BRIX. Vous allez sans tarder découvrir la version 1.9 du nouveau XAM-WARE de PPP TEAM SOFTWARE.

(XAM-WARE comme produit pendant les examens.)

Les Versions.
1.0: Développement de l'algorithme de jeu en BASIC ("appelle moi pour jouer",dit Vivien)
1.1: Première implémentation en Assembleur: MODPLAY+ chargement des images (ricanement de Piet)
1.2: Réalisation des routines graphiques
1.3: On peut commencer à jouer, mais c'est plein de bugs.
1.4: premiers essais de transparence ("C'est quoi, cette horreur?" dit Piet " C'était encore mieux en BASIC!")
1.5: décors de fond retravaillés
1.6: ajout des patterns "GAME OVER" et "NEXT LEVEL"
1.7: on peut changer la vitesse de la balle.
1.8: Ajout des samples pour les bruitages ("Je te laisse débugger, Pype, je reviens à 12h00")
1.9: image d'intro en POVRAY
1.A: "ajout d'animations"

Note aux programmeurs
Mon module player n'est pas encore au point, néanmoins, si l'un d'entre vous veut en faire un en assembleur, je lui conseille d'abord de lire 'Le SuperLivre de la SoundBlaster' paru chez Micro Application. Je peux aussi vous passer une partie des sources (les fonctions de la S.B.) mais ne me demandez pas les sources complètes du player: le code est pas encore optimisé (PENTIUM minimum). Je vous le passerai seulement contre d'autres trucs (un player pour un autre format, des truc de balaises sur le mode protégé, un jeu que vous avez fait et qui est mieux que le mien...)

- - - >8 - - - >8 - - -

(tout ça, c'était avant que je ne découvre la GPL, NDLR)
D'une certaine manière, Crazy Brix reflète assez bien ce qu'était PPP Team : en apparence un projet solo, ce jeu n'aurait jamais vu le jour sans le bouquin de Nowan sur la soundblaster ni sans l'assembleur A86 de Parmy. Il n'aurait pas été fun sans les Bilou/Badman de Pierrick, ni sans le personnage "tentacle bob" de Tbob, ni sans les mods de mon frère. Il n'aurait pas gagné la 100k sans les routines de compression de Kris, ni sans la voiture de Gino. Il n'aurait pas eu de sens si Pierrick n'avait pas lâché à Romu "tu te rends compte qu'il a fait ça en 100% assembleur !?"

download and play in DosBOX

Sunday, October 04, 2009

L'île des colons -- that was Bilou RPG

Je m'offre un petit moment de nostalgie... En cherchant "Bilou et son astro-flasheur à perforation en vrille" pour mon frère, j'ai repris une série de captures d'écran (vus sur twitter) d'un de mes plus gros projets en QuickBasic: Bilou's Quest. Un Zelda-like dont j'ai retrouvé une version sur diskette en fouillant chez mes parents il y a quelques semaines de ça. Le montage n'est pas génial: à l'époque de la sauvegarde, j'étais alors occupé à remplacer le joystick par la souris, ce qui fait que la version récupérée a besoin de la souris pour diriger Bilou et d'un gravis 4 boutons pour parler, soulever, etc. Bref, j'ai triché en démarrant les fichiers .BAS directement.

I'm taking you back 15 years ago, with a couple of screenshots i've taken this morning. Here comes the island that Bilou explores in Bilou's Quest -- one of my largest QuickBasic games. I recovered a backup on a floppy a couple of monthes ago and finally managed to make it run again ... well, sort of. I agree there isn't much to be proud about anymore: that's just a nostalgic memory, and the first occurence of Flower Power and Badman in pixels.

Du coup, je goupille comme je peux, je remplace les écrans auxquels je n'ai pas su accéder par des captures de l'intérieur des maisons et des grottes, etc. Bon, je vous le concède, en dehors de l'aspect "nostalgie", il n'y a pas grand-chose à en retirer. La maniabilité était innomable, les graphismes de Mystic Quest sous GameBoy sont bien plus réussis, le scénario manque cruellement d'inspiration, etc. Rien qui ne justifie que je cherche à en tirer une adaptation DS, quoi. Mais en son temps, c'était chouette de bosser dessus ;) Et puis, ne lui retirons pas sa valeur essentielle: c'est un projet qui a été transformé en un jeu. Compte tenu de la quantité impressionnante d'idées de jeu que "la farde PPP" contient, Bilou's Quest a tout de même le grade de "réalisation", même si ça ne couvre que 10% du scénario prévu (à la fin du niveau 1, le joueur n'a pas encore d'épée et ne peut se défendre qu'en lançant des pommes). Merci à mon frère Piet de me le rappeler.

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.

Tuesday, September 23, 2008

Biokid NT : countermeasures

Quelque part en 1996, mon frère Piet me pond une storyline un peu abracadabrante inspirée d'un vieux souvenir (le Stoner): votre PC est infecté par le terrible virus Terminator 007. Le seul moyen d'en venir à bout, c'est le nouvel anti-virus interactif de PPP Team Software: Biokid.

Back in 1996, my brother's mind give birth to a curious story: your PC is infected by a dangerous virus -- the Terminator 007 -- and the only thing that can get rid of it is the brand-new interactive antivirus from PPP Team Software: Biokid. To put it simpler, Biokid is a crossing over between Megaman character and Commander Keen level design where you hunt for keys and weapon upgrades in maze-like platformer. It turned into one of our best production on RSD Game Maker.

L'idée, c'était de tenter de s'approcher du gameplay d'un Megaman. Mais là, j'ai envie d'un petit jeu au principe plus simple (un shoot'm'up) que Bilou pour roder un peu mon Game Engine, et plutôt que de ressortir Bilou Sky Quest (C64) ou d'essayer un portage de Out'm'up (assembleur, Y2K), je me suis dit que j'allais ressortir Biokid dans un nouveau mode de jeu: "Counter Measures".

Plus question d'assurer passivement la défense de votre réseau: Biokid prend les devant et part vaillamment à l'assaut du plus grand Botnet qu'il vous a jamais été donné de combattre.

I was thinking of giving my game engine for DS a try in a different setup : a shoot-m-up. I could have reused "Out'm'Up", our brain-free shooter that won the 100K game competition at Inscene Y2K. Or I could have revived "Bilou Sky Quest", the test game I made on C64 with the "Shoot-Em-Up Construction Kit". For some reason I started dreaming of a shooter featuring Biokid who'd now have to protect your corporate network proactively and fight the largest and scariest Botnet ever fought. (hmm. I could have been "inspired" by the Bionet EU project a colleague of mine is working on, btw).

edit: bon, comme vous le voyez, côté graphique, il y aura du boulot ... je voudrais recréer une ambiance "newschool" inspirée de Matrix, Tron et autres Space Invaders Extreme ... on verra ce que ça donne ...

Saturday, September 06, 2008

Recreational Game Maker

Après les éditeurs Borland et Quickbasic, voici probablement l'écran que j'ai le plus vu pendant mon époque "MS-DOS". L'éditeur de blocs du Récréational Game Maker. Une de mes références (en particulier du point de vue de ce qu'il ne faut pas faire) pour SEDS et les autres éléments de mon "game maker pour DS" à venir ...

Premier reproche: la palette. Avec un pixel de large par couleur, c'est quasiment impossible de prendre la couleur recherchée du premier coup. Il faudra peaufiner avec les touches [+] et [-] le plus souvent. On aura droit à deux couleurs (bouton gauche et bouton droit) comme sur la plupart des éditeur graphiquesde l'époque ... et il faudra aller cliquer sur la case avec la couleur en question qui se mettra alors à passer toutes les couleurs en revue jusqu'à ce que vous cliquiez quelque-part sur l'écran ... tu parles d'un truc intuitif !

I've been spending *hours* on those screens ... Recreational Game Maker has been both a way to experiment more games than i could program myself, but also the program that made me realising that i wish to run my own (ultimate) game maker at the end of the nineties. Most of the user interface was absolutely horrible to use, left very little room for mistakes (e.g. no undo feature except re-loading a tilesheet and saving often) and led to fairly blocky object design. Somehow, it is my reference on "what not to do in [SGL]EDS".

L'outil que l'on retrouvera sans doute le plus, c'est cette liste déroulante de blocs dans laquelle il faut aller pêcher le bloc qui nous intéresse. Assez pratique quand vous avez les blocs de plusieurs niveaux dans un seul "bloc set", dès que l'on complique un peu les niveaux, en revanche, ça devient rapidement une horreur absolue ... On passe plus de temps à regarder défiler ses blocs qu'à véritablement construire son niveau, si vous voulez mon avis!

Autre défaut à mon avis, l'omniprésence du glisser-déplacer. Vous voulez choisir un bloc à éditer? déplacez-le vers la grille. Vous voulez le 'déplacer' dans la liste des blocs ... de nouveau, copier/déplacer. Même l'écran de réglage des paramètres fonctionne entièrement ainsi. Ecran qui en-dehors de ça n'était pas mal fait, d'ailleurs, donnant assez bien de flexibilité avec ses "special counters" (en fait, des clés), les hit points, les blocs générateurs de monstres ou animés ... Croyez-y ou pas, mais quand il s'agissait de créer un boss, c'est le plus souvent ici que tout se jouait, grâce au fait que le contact bloc/perso était géré indépendamment de l'animation du bloc ...

My #1 rant on that software was about monsters management. Basically, a monster had a single animation sequence and a single movement pattern (though it could have a separate "attack pattern" when player comes close enough). The only way to build more sophisticated monsters was to "chain" them once killed. That meant that they could not change their behaviour on their own without being indestructible and (vice-versa) that they couldn't require several hits without having their state reset while switching to their new animation/pattern.

They couldn't shoot either (though i managed to have bosses transforming harmless, almost-invisible dots into deathly fireballs later on, but only at the expense of complicated monster/room inter-dependencies), nor could they detect when they were stopped by a wall (but they stopped nonetheless) or that they were walking in the sky. Most of my "state machine scripts" in the current GEDS engine are designed to work around those limitations and still allow graphical edition... yet i have no graphical editor so far :P

Là où j'ai plus galéré, c'est avec l'éditeur de monstres. Au départ, les blocs sont créés tout à fait normalement (mais avec une couleur de transparence quand-même). Il faudra alors construire des séquences pour animer tout ce petit monde (heureusement, l'éditeur de blocs nous avait déjà permis de tester des animations, mais il faudra les reconstruire ici. Pas de chance.

Le "comportement" de ces monstres sera définit d'abord par "quand il est touché, il se transforme en ...", ce qui permet explosions et compagnie (le plus simple) mais aussi des effets plus intéressants, comme de rendre le monstre "furieux" et de le faire courir droit devant lui s'il est touché. Le joueur aura alors intérêt à être rapide pour tirer encore. A noter aussi que ce sera le seul moyen d'avoir un monstre qui nécessite plusieurs coups pour être éliminé définitivement.

L'autre point-clé, c'est cet espèce de "radar" dans lequel on va définir la succession des mouvements (genre trois blocs en avant, trois blocs en arrière, trois blocs sur le côté, trois blocs de l'autre côté ... Il était une bergèèère qui allait auuu ... euh ... pardon, je m'égare). Le hic, c'est que tout celà se détermine de manière complètement indépendante des maps. Il faudra donc être particulièrement vigilant à la longueur que l'on donne à nos plateformes si l'on ne veut pas qu'un monstre se mette à marcher dans les airs, car s'il sont capables de ne pas rentrer dans les murs, rien n'a été prévu pour les obliger à rester au sol, ni à faire demi-tour dès qu'un mur les arrète (on se retrouve alors avec un monstre occupé à faire du sur-place pendant deux secondes avant de se retourner).

Voilà. Il y aurait beaucoup d'autres choses à en dire, j'imagine, mais j'ai d'autres projets pour le week-end. Je vous laisse donc avec ce petit screenshot de Twinbee Land, collaboration de Pascal Deiting et moi-même à l'époque ... Un tileset de base que j'avais dessiné pour Badman II et qui a eu la vie dure, vu le nombre de jeux dans lequel on l'a retrouvé :P

Read the whole story on "my RSD game-maker years" side-page