Showing posts with label y2k. Show all posts
Showing posts with label y2k. 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 ^_^

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, June 30, 2015

Reading: Ken Kutagari.

Avec le recul, ça pourrait être mon "life-changing book: 4/3". Une lecture très enrichissante qui dépasse la simple annecdote de playhistoire pour nous donner une idée assez précise des enjeux de la conception d'un équippement électronique de pointe. Complexité d'approvisionnements, choix marketting, ... comment le fait d'utiliser moins de robots pour placer les puces sur la carte-mère est la meilleure option pour baisser les coûts (et enterrer la Saturn de SEGA). De quoi quitter un moment l'artisanat du homebrew pour découvrir "le vrai monde" de la production électronique de masse, parce qu'en électronique, si on a pas la masse, on y est.

Another Great Read at Pix'n'Love editions, but this time, you too, English-readers, can enjoy it, and not only the French-Folks. Because Reiji Asukara wrote it in English under the title "Revolutionaries at Sony", published by Mac-GrawHill, obviously. It goes well beyond telling the tale of Nintendo and Sony teaming up, then splitting, then fighting to death. It gives you a complete overview of how a technical tour de force has been converted into a successful mass-market product. Retrospectively, I realise that everytime I have to understand why some idea to hack around some existing hardware to extend functionalities cannot be integrated into a finished product, I end up mapping the situation to one of the key decisions of Ken Kutagari in the PlayStation design story.

Le côté technique est malgré tout un peu léger. J'aurais aimé voir en vis-à-vis le schéma général de la PS1, voire l'organigramme de son CPU/GPU basé sur le System G... Pour ça, il me faudra faire l'étude du "psx-tek" comme j'ai étudié les DS-tek et GBA-tek, encore qu'il est probable que je laisse ça à mon ancien étudiant qui avait réussi à s'acheter une "Net Yaroze" d'occasion... Peut-être que Ce que vous avez toujours voulu savoir sur la Playstation (par Joshua Walker)
.txt donnerait quelques raccourcis, celà dit.

I would have loved the book to go a little bit more into the technical details, though. It is nice to have this discourse over the hardware evolving towards lower manufacturing costs and how it was decisive in the race against the Sega Saturn. It would have been much better to show together the motherboard layouts over the evolution. The book kind of assume that you've teared down a PSX already or that you don't want to depict the chips in your mind when it tells about it.

There's very little being said about the actual engineering of the GPU, the component that made the PSX so unique. Because it is architectured along the (now classic) model of a command FIFO and hiding the video memory from the CPU altogether, even showing the register map do not reveal a single detail about how things are structured to make the rendition of 360,000 polygons per frame possible for the first time except two words: massively parallel. There's not a single example of what "the framework" that PSX developers had to use. For the first time, afaik, a gaming console was made using a CPU that had a "kernel mode" and a "user mode", unlike microcomputers-derived CPUs in NES-SMS-Genesis-SNES. I'm left guessing the kind of functions / construction blocks might be in there, but it shed light about misunderstandings concerning the "BIOS" of the playstation line of products: magazines may have messed up BIOS, kernel and framework countless times.


Je comprends néanmoins qu'une grande partie de ce qui était présenté à l'époque comme le "BIOS" de la PS2 (pour faire bouger les cheveux) était sans doute plutôt un composant du "framework", cet ensemble de fonctions toujours grandissant mis à la disposition des développeurs de jeu pour qu'il puissent se concentrer sur leur développement. Pas uniquement des bouts de code présent sur tous les systèmes ni même des bouts de code destinés à être embarqués sur CD, mais aussi les outils de développement qui vont avec ... peut-être p.ex. un encodeur vidéo pour 3DSmax qui utiliseraient au mieux le décodeur vidéo hardware présent sur la console.

NB: je n'ai jamais eu de Playstation ni cherché à en avoir une. Aucun des jeux que mon frangin me montrera sur la sienne (après Y2K) ne me convaincront. Seul m'aura plus Rayman, que j'ai eu en version PC (, avec un pad plus capricieux mais mieux adapté à mon historique de jeu.

Friday, May 08, 2015

Hi. I'm Bilou.

Salut à tous! C'est un peu la pagaille dans le "moteur de jeu". Permettez que je laisse Bouli s'occuper de tout ça et que je vous raconte un peu comment tout a commencé.

Hi there. It's me, Bilou. Bouli says the "game engine" is wrecked, but since I'm just the pilot here, there's little I can do to help, so why wouldn't we use that time to know each other better ?


On est en 1993. Deux potes se rencontrent à l'école. Ils partagent une passion pour la musique et le désir de créer des jeux vidéos. Le frère de l'un va se retrouver l'interface entre le PC familiale, les idées de gameplay et les conseils de programmation du nouveau mentor pour tenter de donnée vie à tout ça à grand coups de DATA ...

It all started in '93, with two class mates sharing passion for music and video game design that turned friends. One's younger brother will become the idea-to-machine interface to convert all those ideas into a bunch of GOTOs and DATAs to bring the game to live. His handle was 'Pype' so far, and he's our host today.

Pour une raison nébuleuse, le frangin en question. Notre hôte, connu aujourd'hui sous la signature de "Pype" manque d'être rebaptisé "bilou" pendant cet après-midi. Si bien que c'est automatiquement en "BILOU.BAS" que seront sauvés mes premiers pixels sur processeur Intel... Encore quelques heures et le nom de "Bilou" sera définitivement transféré de Pype a ma propre bouille ronde.

But on that very day, he was about to be re-named "Bilou" by the two friends. That nickname was used so much on that afternoon that he used it when it was about to save my very first implementation on PC ... "BILOU.BAS". Hopefully, with a few more hours, *I* turn to be Bilou and he can remain "Pype".

C'est le début de l'âge d'or. Quels que soient les projets qui trottent dans la tête des membres de la toute nouvelle équipe -- PPP Team -- c'est moi, Bilou, qui suis au centre. Bilou Ski, Bilou Karting, Bilou's Adventure, Bilou's Quest, Biloutris. Tout y passe. Les lignes de code se cristallisent ... les démos deviennent jouables.

Somehow, it was the golden era. Whatever game the team dreamt of, I was the star in there. Bilou's adventure, Biloutris, Bilou Ski, Bilou Karting, Bilou's Quest, Bilou's Sky Quest ... name it, you'll have it. Code line piles up and demos start to be playable.

Malheureusement, les outils de développement de l'époque sont loin d'avoir la flexibilité et la convivialité des Unity d'aujourd'hui. On se bat tantôt avec l'espace mémoire, tantôt avec le nombre de couleurs, tantôt avec la puissance de calcul insuffisante... les grands projets piétinent.

But unfortunately, even the compilers that turned "calimero" into an executable will fail on the increased complexity of my world. Every additional colour on the gamefield requires a re-write of the engine and of all the level designed so far. Despite an all-shiny Master Boomer, they struggle to bring background music to the game ... It all looks unfinished to the foreign eye.

Les potes de PPP Team mettent alors la main sur un outil qui va les occuper pendant près de 2 ans: le RSD Game Maker, qui permet de suivre une nouvelle idée de jeu dans la semaine où elle germe... On dessine ses niveaux directement ... on les teste dans l'après-midi. Mais les interactions sont limitées et ce type de gameplay n'est pas pour moi. Mon destin est de sauter sur la tête de chenilles géantes et de me faufiler sous des champignons et des gommes sauteuses... Pas de tirer au lance-flamme sur des tronc rampants.

A few month later, the PPP Team get their hands on another tool that will keep them busy for 2 years: the RSD Game Maker. With a few clicks and some improved understanding of English, they can build a 4-level game in a single afternoon, and a Commander-Keen-sized quest in a couple of months. New heroes appear, pastiche and tributes alongside original characters. But the engine cannot be bent to my signature move of caterpillar-stomping and my world of bouncing mushrooms and switches: it's an engine for flamethrowers, weapon level ups and locks.

Quand j'y repense, je me console en me disant que le game-maker lui-même portait dans ses limites sa propre obsolescence. En 1997, Pype se met en tête d'exploiter ses nouvelles connaissances en Assembleur pour construire un Ultimate Game Maker, haute résolution, son HiFi stéréo, plus de couleurs, des monstres au comportement dignes de Super Mario World ... et la liste s'allonge au fur et à mesure que le jeu vidéo vit sa Grande Mutation de la IIIeme Dimension. Ça tourne à la définition d'un OS complet, qui aurait les bon format de fichier pour tout ... qui serait moins lourd et plus convivial que Windows ... Je me retrouve à jouer le rôle de simple mascotte en attendant mon heure.

But even that was meant to end at some point. In 1997, as the PPP Team is about to split, Pype has gathered some assembly language tools and decide to start designing and building the Ultimate Game Maker, with high definition graphics (that is, 800x600 by then), millions of colours, hi-fi stereo Impulse Tracker modules with up to 32 tracks, parallax scrolling and large sprites with behaviour comparable to Super Mario World ... And the list keeps growing as the video game industry's IIID revolution is re-shaping the platforming genre. And rather of growing bottom-up, all this digs deeper and deeper towards the building of a full operating system kernel that could run either the game, or the development tools... And I'm left being a mere sketch on the logo, even though I'm at the top.


Et puis un jour, un coup de crayon un peu plus affirmer vient me sortir de l'oubli. A court d'idées de griboulliages en attendant un cours de réseaux, Pype se dit "pourquoi pas faire un mini-strip qui raconte le parcours de Bilou".

And then, all of sudden, a line of pencil draws me out of the shadow. Out of T-shirt design ideas while he's waiting for a course to begin, Pype wonders "why not a comic strip that relates Bilou's adventure ?". Old characters get a revamp, New non-playing characters appear, a back story grow up ... and a couple of pages appear on a website -- although it never quite turned out into a web comic. This is the first milestone towards an art blog that will then host some Nintendo DS sprite editor developments before this very blog spawns to bring me back to full activity.

Les anciens personnages se font un lifting. De nouveaux intervenants apparaissent... L'idée plaît. Un mini "web-comic" vient s'ajouter aux réalisations de la branche "demoscene" de PPP Team. Plus tard, ça tournera au blog et sur ce blog, on se dira que, quand-même, ce serait rigolo de se faire un Sprite Editor sur Nintendo DS .. la boucle est bouclée.





Sunday, January 10, 2010

Il y a Janvier, et Janvier.

Nous voilà en 2010. L'an MMX. Bonne année et meilleurs voeux à tous.

  • Janvier 2000, et sa lettre de voeux à Gedeon datée de 1900, clin d'oeil au bug de l'an 2000 ...
  • Janvier 2001, et une petite tentative d'imaginer Bilou sur GBA pendant que je prépare l'exam oral de réseau.
  • Janvier 2002 ... en pleine lecture d'Hyperion, tranquille chez mes parents (?)
  • Janvier 2003, à l'appart, de retour de Zurich, j'explore les possibilités de mon Sharp Zaurus, malheureusement terriblement pénible dans ses communications avec le PC.
  • Janvier 2004, toujours à l'appart, mais cette fois-ci de retour de Kyoto. Où on ne m'a même pas emmené voir les locaux de Nintendo, tiens. Mais peu importe: je tiens le sujet de ma thèse de doctorat ! Et une fois encore, c'est un processeur ARM qui équippe les IXP2400 que je commence à étudier.
  • Janvier 2005, plein feux sur Clicker32 dont la release 0.9.0 contient un petit Bilou en guise de curseur souris ... qui fait un gros effet sur la communauté osdev... un rouage s'enclenche, il y a de plus en plus de "BangBash" dans les codes hexa de mon débugging...
  • Janvier 2006, ma première "planche de BD électronique" à partir de mon carnet de croquis met en scène le crayon jovial et la gomme endormie. Depuis, le mini-récit complet est disponible dans le "Bilou's Book". Et je viens d'avoir ma DS (je crois).
  • Janvier 2007, prêt à déménager. premier "mockup" un peu complet (les étagères de la School Zone) prend forme par copier-coller depuis SEDS tournant dans desmume. Heureusement, depuis, j'ai un outil de conversion automatisé et l'export des fichiers .spr par runme... Et LEDS pour construire directement le niveau sur la DS.
  • C'est en janvier 2008, justement, que je commence sérieusement le travail sur LEDS, mon éditeur de niveau... Entre Zelda: Phantom Hourglass, la lecture de la trilogie des joyaux (Eddings & Eddings) et un re-cablage de mon ancien C64.
  • Janvier 2009, à Bâle, entre Johnny Biscuit et Giana sur DS, je me re-cible sur Bilou, mettant au garage mes "projets" de portage de Biokid et autre Seafox sur la DS. Et pour contrer le manque de connexion internet, runme peut passer la main au programme .nds qu'il vient de récupérer par "Wifi local".
Happy new Year MMX everyone. As you have noticed, I tell above the story of those previous January 200* ... A new technique for slopes in 2000, investigating the Gameboy Advance in 2001. I've already detailed this to you.
2002-2005 are more "mysterious" years because I was fully focusing (that is, programming-wise) on Clicker32, my operating system. Yet gadgets (the Sharp Zaurus) and thesis project made me slowly prepared to face cross-compiling and ARM-based embedded systems so that when I buy the Nintendo DS for Christmas 2005 I know I'll be able to program it as soon as I'll get a linker.
January 2006 see the first releases of the "Bilou, Bouli, the Crayon and the SharpenHer" on my former blog. This marks a new start of a new hobby-era that I'm still presently in. January 2007 seen the first "fake level screenshot" with tiles drawn in SEDS, since work on the level editor only started on January 2008 t... and you certainly remember of January 2009, when I was in Basel, deciding that "whatever the game, I stick with Bilou ..."

Monday, June 01, 2009

Les collisions

Les collisions, c'est probablement un des éléments les plus important de la gestion des sprites dans un moteur de jeu. Outre l'aspect purement technique "y a-t-il ou pas collision" et l'aspect d'optimisation "comment tester les collisions entre N sprites (potentiellement (N*N-1)/2 calculs) en un temps raisonnable", il y a le côté "logique du jeu": comment vont réagir les différents objets en cas de collision.

Mes premiers jeux étaient assez élémentaires de ce point de vue là: collision = touché sauf si ybilou+8<ymonster. une tentative un peu simpliste de simuler le "pogotage de cafetière à la SuperMario".
Mais ça, c'était du temps du BASIC. En 1997 (déjà programmeur en assembleur et bricolant mon 'mod player à l'époque), je suis à l'unif le cours d'algorithmique de PaDM ou je découvre les joies des listes liées et où SJ me guide tout doucement vers la compréhension que "tes 'registres de sprites' ressemblent à des variables-membre en POO".

Collisions play a major role in game engines. So far, in my former game attempts, i mostly focused on "how do we know there is a collision?" or "how can i support many sprites without slow-down due to O(N²) collisions detection effort?". This time, i'm rather focusing on "what shall we do once a collision is detected?". Collisions are event that will affect the state machine of our sprites... of both sprites that are involved in the collision. My first "serious" design effort on collisions management dates back from "Out'm'Up" game for the 100K-game competition at Inscene'2K (a demoparty in Belgium), the distilled wisdom resulting on my effort to build an "Ultimate Game Maker" between '97 and '99.

Rétrospectivement, ça fait un peu peur: après 10 ans de programmation, je n'avais pas encore terriblement évolué dans ma manière d'approcher les problèmes de quand je programmais mon "Calimero" en BASIC C64 à grand coup de Gotos. Seule grosse différence, je tentais de reproduire en Software (via des "registres" pour la position, la vitesse, la puissance, etc.) le hardware idéal pour mon moteur de jeu. Un variante non-déclarée de la machine virtuelle donc, mais qui me poussait à sur-définir des éléments tout à fait accessoire du genre "combien de bits pour le niveau d'attaque et le niveau de défense du sprite ?"

Out'm'Up, mon dernier shoot en date
Bref, les années "Ultimate Game Maker" sont loin, maintenant. Si je reprends de temps en temps la farde bleue à carreau où tout cela est consigné, c'est plus par nostalgie que pour son contenu. Ou pour dater une technique ancestrale. En juin 2000, par exemple, j'expérimente dans "Out'm'up" une technique dont je ne me séparerais plus: les castes de sprites. Dans toute collisions, il y a toujours un sprite actif (qui cherche la bagarre) et un sprite passif (qui subit la collision). Le sprite passif appartient à une des deux castes possibles (hero ou evil) et le sprite actif ne cherchera pour ses collisions que dans la liste de la caste correspondance. En clair, celà signifie que les tirs de mon p'tit vaisseau ne testeront jamais que les "ennemis" (et pas les autres tirs ou les bonus) et que les ennemis ne se testent pas entre-eux (mais uniquement vis-à-vis du joueur). L'un dans l'autre, la technique s'est montrée tout à fait satisfaisante vu la quantité d'objets à l'écran (on est encore loin d'un Bullet Hell, bien sûr, mais n'empèche).

Active/Passive
The core concept is that in a collision between two sprites, one is *active* and the other *passive*. I.e. the passive sprite has just registered itself in a list of "sprites that accept collisions", but the active sprite is the one who will scan that list for a match. Together with that mechanism comes the idea of *casts*. We only have a limited number of such "lists" where sprites can register -- one per sprite cast. And so far, in all games two casts seems to be enough: heroes and evils. In a laser-ufo collision, for instance, the UFO is passive evil and the laser is active. That means that the laser only checks UFOs for collisions, not other lasers or explosions, bonuses, etc. In the UFO-spaceship collision, the spaceship is passive hero and the UFO is active. You'll note that the cast of the active sprite is irrelevant in a collision. So far, it has proven much more efficient and flexible than adjusting "power levels" (in RSD Game-Maker, all sprite had a power level, and when the collide, the one with the highest level kills the other one. period)

Si ça peut paraître un peu annecdotique dans un jeu de plate-formes, ça n'en reste pas moins la base de la gestion des collisions dans ma dernière démo. J'y ai ajouté le système des masques inspiré du code de Jill of the Jungle qui, une fois que j'aurai bricolé l'évaluateur d'expressions, permettra de faire réagir les personnages différemment selon la "source" de la collision. Petit exemple ici avec le "pendat" et ses réactions possible en cas de collision avec un objet lancé, avec un encrier bloquant ou avec le personnage.

In a platforming game like Bilou, this needs to be extended. Not only the cast of the 'hitter' is important, but also its nature, which i intend to implement through collision flags, drawing inspiration from Jill of the Jungle source code. Every "active area" defines a set of flags that identify "what it is" while "passive collision areas" indicate "what they are sensitive to". You can then have a penguin monster that takes a single hit unless it is hit by F_FIRE, which kills it instantaneously.

While the cast of a sprite never changes, each state can define various areas, with different flags. That allows us to have e.g. a special "strike" move with an additional, powerful attack area or a move that unveils a weak point. The game script defines transition on a per-area basis, so what happens when you hit one weak point can be different than what happens when you hit another area. Now, i still have to "make it so" in the code, and make the result of "area masks" visible to my "GobExpressions". In an attempt to separate the concerns, each sprite will take care of its own state manipulation: we won't have the pencil 'killing' anyone directly, but i expect that i might need some information about "the other guy" anyway (relative position, speed, etc.)

J'aurai donc bientôt réglé le bug qui "blesse" Bilou à chaque fois qu'il ramasse un bonus et un état dédié 'blessé' me permettra de rendre plus facilement Funky Funghi infranchissable. Par contre, rendre certains ennemis "solides", même quand Bilou est invulnérable temporairement, ça reste un challenge.

2024 #choice reality check: Well, now that I have access to countless hitbox reveal (mostly by Upsilandre), it turns out that having separate active and passive boxes (typically called hitbox and hurtbox) is the de-facto solution. Having a separate list for player and foes also is. But the more I progress, the more it shows that additional casts will be required for bridges and things alike. Nothing has been coded so far, though.

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

Tuesday, January 01, 2008

"Je vous présente les bordures!"

Je viens de retomber sur une lettre -- datée du 8 janvier 1900 -- que je n'ai jamais envoyée à son destinataire, Gédéon (qui signe de temps en temps un commentaire du nom de 'Ged' sur ce blog). Il faut dire qu'après la Inscene '99 et la collaboration de CJ à son jeu "insane bugs" (une sorte de remake de micromachines), on avait entamé une correspondance sur des sujets traitant de la réalisation de jeux vidéos, que j'illustrais assez abondamment de mes Bilous, évidemment.

edit 2021: finally translated.

A cette époque, en pleines études, je codais surtout pour les TP de l'université, mais je n'avais pas énormément le temps de mettre en oeuvre tout ce à quoi je réfléchissais pour mon "Ultimate Game Maker"

Voilà ce que celà disait:

Hello, Gédéon.

Je crois bien que j'ai trouvé un truc cool pour modéliser les niveaux dans Bilou! un truc plus smart que ces "tests de couleurs" puants que j'ai utilisé dans la version BASIC du jeu!... Je te présente les bordures.
L'idée est la suivante: tes sprites possèdent un certain nombre de "testpoints" et les déplacements ne sont possibles que pour certaines valeurs de ces test-points (pas question de faire marcher Bilou dans le vide, hein!)

D'autre part, tu plaques un peu partout dans ton niveau des bordures. Ces bordures sont des éléments logiques qui ne correspondent à aucun affichage. Elles sont liées logiquement de telle manière que l'on peut facilement savoir quelle bordure est située à gauche, droite, au-dessus ou en-dessous d'une bordure donnée. Les bordures sont également séparées en 4 classes: plancher, plafond, mur-gauche et mur droit.

Ca va, je ne vais pas trop vite ?

Bon. Voyons comment ça marche. Lorsqu'un sprite crèe ses test-points, il leur fournit à chacun une classe correspondant à la classe de bordure avec laquelle ils réagissent. Du coup, on s'empresse de lier chaque test-point à la bordure de même classe la plus proche (euh, ça ne devrait pas être trop sorcier).

Voilà un aperçu de la chose en cours ... tu peux facilement savoir si tu es "dans le mur" ou pas: il suffit de regarder de quel côté de la ligne le point se trouve. Dès que ton point sort du "champs d'action" de sa bordure, on cherche quelle est la nouvelle bordure et on y relie le testpoint (après quoi on effectue le test habituel).

C'est-y-pas merveilleux, tout ça ?

Allez, une dernière idée qui m'est venue comme ça, en écrivant cette lettre (pour être sûr que tu n'arrives pas à dormir cette nuit ;-)
Au lieu des testpoints, tu pourrais faire des "bordures" pour les sprites aussi (en fait, à partir de la bounding box), mais tu risquerais d'avoir plus de calculs à faire ...)

Enfin, ça m'éviterais d'avoir des bugs à la "Crazy BriX".
Allez,

Bion, depuis, l'eau a coulé sous les ponts. Le coup des "bordures" était bien alléchant, il permettait de passer à la 3D avec moins de prise de tête que si on doit procéder pixel par pixel (c'était le cas dans Bilou en Basic, comme je le mentionnais dans la lettre), mais par contre je n'ai jamais trouvé le véritable "truc pas trop sorcier" pour déterminer quel est la prochaine bordure du même type, en particulier lorsqu'il y a plusieurs plate-formes les unes au-dessus des autres (classique dans un jeu de plate-forme, évidemment).

Pour la version "DS", je me rabats principalement sur des tests "tile par tile" (et prout pour la 3D), et les "bordures" serviront principalement pour des plate-formes mobiles, nuages, et autres joyeusetés ... Une sorte de manière de passer outre les limitations typiques des jeux "game maker".

Voilà. Bonne année à tous.

Saturday, December 31, 2005

history (t.a.g.)

you've reached the last history post.

These posts present the development of games that pre-date this blog, digs of old paperwork on ancient machines. This is not only nostalgia, which would also encompass games of those times which I enjoyed and similar things. It's wider than the sole development of the story line for Bilou's Adventure and captures a lot of other "PPP Team" games & tools.


Some milestones:

  • 1989: first hand on the Great Giana Sisters and first "quarters" into a Super Mario Bros arcade machine.
  • 1990 : Playing Rick Dangerous at the computer store roughly every week. Planning a cover of "le Labyrinthe d'Errare" on C64 (Role-playing Book)
  • 1991: First platformer project on my 8086 computer while my brother discovers Blues Brothers (titus) and Commander Keen (ID software)
  • 1992 : Super Mario World arrives in Europe.
  • Fall '93 : first Bilou projects
  • Easter '94: I buy VGA graphics and 8-bit PCM sound for my 80386 computer. I want to make a Z:LA clone on PC.
  • 1995 : RSD Game Maker year, launching the Badman series. (Rayman is released in Q4)
  • Summer '96: the last one with a working C64 around, replaced by a Pentium 120MHz, my first machine with a CD-ROM reader. On my quest for an assembly module player. I can now play Rayman!
  • Fall '97: Done with PC-Bot, my first major C program. First steps on Internet, starting the Ultimate Game Maker research.
  • Winter '98: Upgrading the pentium into AMD K6-II, demoscene-ready. Teaching myself C++ for the first time.
  • Summer '99: Crazy Brix converted into 100K game for Inscene
  • Summer Y2K: Out'm'up, my last game for the PC platform. 
  • 2001: first hand on a PSX system.
'90 -- '91 -- '92 -- '93 -- '94 -- '95 -- '96 -- '97 -- '98 -- '99 -- '00 -- '01 -- '02 -- '04 -- blogging -->