Friday, July 31, 2020

I hate it!

Let me be 100% clear. It really gets on my nerves to the point I feel like I should crush my mouse into the desk to fill better. Why on Arrakis did they had to make their operating system in such a way that every item you could think of needs a dedicated tool to be investigated. What was wrong with "everything is a file", uh ?

Everything is IUnknown. Wonderful.

I wouldn't even object if you had a clear way to scan that.

Want to find the log where DbgPrint wrote stuff ? Better download https://docs.microsoft.com/en-us/sysinternals/downloads/debugview and don't mess with its settings or you won't see anything

Want to figure out what devices are out there ? You'll need c:\program files (x86)\Windows Kits\...\devcon.exe (that's another download for you)

Want to know what drivers are out there ? that will be driverquery, sir. But maybe you want a cup of sc query first ? (hopefully

Let's not even talk about where to find 'all the running applications' or their windows.

No wonder why they needed a powershell to make things start to work.

Oh, /dev, /sys, /proc. How much I miss you...

Friday, July 24, 2020

Water Pool

Une petite cascade, c'est bien, mais avoir aussi une idée de ce que donne les zones immergées, ce serait mieux. Alors bin j'ai ressorti mon Gimp pour essayer ça. Je peux dire que les "mares" de la Green Hill Zone de Sonic Mania ont agi comme un déclic.

Having a sweet waterfall is nice. But where is all that water going to ? How should I render water in Bilou's Dream Land ? (I want to have some!) ... I knew I had to give it a try for some time, and then I played Sonic Mania. They have some and I was struck by how simple they've done it. So I went for something similar (esp. on the surface)


  • il faudra prévoir un effet "wobbling", horizontal comme vertical. 1 ou 2 pixels devrait suffire
  • les p'tites bulles font une fameuse différence.
  • les blocs solides peuvent facilement avoir une couleur plus proche du vert.
The palette-swap alone won't be enough, I'm afraid. The mockup above only turned convincing after I added little bubbles (these will be sprites, obviously) and some wobbling effect.

Unless it is required to make the water level change over the level, I shouldn't have to rely on interrupts to swap palettes. Just adjusting the palette of the background tiles in the editor should be enough.

The wobbling, however, will better work if I have some H-SYNC-ed DMA reprogrramming the horizontal and vertical scrolling registers. That means it will be tricky to mix water and non-water background on the same "scanline"... I'll have to check the existing level layout to see whether this is an issue.

Thursday, July 23, 2020

Furry Blocks

Depuis quelques années, mes p'tits croquis pour la zone du désert/pyramide font intervenir des "boules de poil" supposées servir de blocs-à-casser dans le level design. Si ça marche assez bien dans les carnets de croquis, en revanche, je n'étais toujours pas parvenu à sortir quelque-chose de convainquant en pixel art.

Et la vue "en perspective" n'aide pas franchement. J'avais étudié la manière dont les graphistes de Fury of the Furries avaient réussi à rendre leurs bonshommes "poilus" malgré leur petite taille et leur palette limitée... Mais la transposition au style DS ne donnait pas grand-chose. Trop plat. Trop contrasté.

I've been drawing "Furry blocks" for the pyramid levels for nearly 5 years now, so it's about time I get something to render them on-screen in my upcoming desert zone. Unfortunately, it is unexpectedly tricky to come with something convincing. I studied Fury of the Furries and many other materials, but none of them was satisfying once converted to DS screen.

J'ai essayé quelque-chose sur base d'une reconversion de mes blocs verts

Mais voilà. Je n'étais pas satisfait du résultat. une espèce de "brique" avec des poils qui pendouillent par-dessous. ça colle du point de vue du style graphique, mais pas avec le genre de personnage recherché. Retour à la planche à dessin...

The best I had until last week looks a bit like a hairy brick, rather than like a furry block. Then I realised how fool I was to try and fit it into a 16x16 frame. After all, if some hair protrude either upwards or downwards, I could still use the art, and it would even be fun to animate them to react to player's motion.

J'essaie du coup un nouveau modèle, partant de l'idée que si les poils-qui-pendouillent traînent sur le bloc d'en-dessous, ce n'est pas vraiment un problème. Ce serait même rigolo de les animer pour réagir au passage de Bilou (p.ex. pendant la course). Ce n'est pas encore complètement à mon goût sur la photo ci-contre -- à la limite le tout-carré est mon préféré.

So I tried to apply some Infogramesque moto "go for the look you want, and we'll make the code accomodate for it afterwads". It looked nicely, although it's sttill a bit too high on the screenshot. Since then, I reduced the height to make it look more like the one on the right, and added some hair on its "forehead". I was pretty happy with it. Almost proud. Then my brother came and declared the brick-shaped one was its favourite ...

Mais à ma surprise, c'est le modèle "brique" qui a la préférence de mon frangin. On va veiller à ne pas l'effacer trop vite, du coup.

Thursday, July 16, 2020

Magical Quest en perspective

Magical Quest Starring Mickey Mouse passait à l'Ultime Décathlon pendant que je scribouillait des Rayman en perspective et j'ai été surpris de constater que je n'avais pas encore commencer à regarder comment la perspective avait été gérée dans ce jeu-là.

Autant vous prévenir toute de suite, si Capcom a été nettement plus propre que les réalisateurs de Ravin' Rabbids sur GBA, il y a tout de même quelques incohérences ici et là.

Prenez les portes de début/fin de niveau. Oui, celles en forme de Pat Hibulaire. Les deux pattes sont alignées sur le même pixel horizontal alors que tout semble indiquer qu'elles prennent une certaine "profondeur". Et le niveau-assenceur est complètement en vue 'à plat' mais continue à utiliser des blocs-mickey avec leur légère perspective. Enfin, ça ne jure quand-même pas trop et contrairement à Ravin' Rabbids, ce n'est pas ça qui va casser l'illusion.

Bon. Passons aux choses sérieuses. On a deux objets pour déduire le rapport de perspective: les blocs mickey (en les supposant cubiques) et les plate-formes circulaires (en les supposant vraiment circulaires :-P)
2 pixels pour le "dessus", un pixel de highlight (plus ou moins partagé entre les deux faces) pour un bloc qui aurait fait mettons 15 pixels de haut 'à plat'. On est du côté de 1:5, beaucoup plus proche de ce que j'ai en tête pour Bilou. Très bien.

Le sommet de la plate-forme a lui un rapport de 31 pixels de large pour 5 de "profondeur". ça s'affine donc à du 1:6.

On note sur le screenshot que les graphistes ont joué sur deux largeur de sol. Soit il fait 4 pixels (la corniche en haut), soit il fait un "généreux" 8 pixels.

Le sol qui donne sur le décor de fond termine par un dégradé de 4 pixels. on aura donc un sol d'un total de 12 pixels si le sol 'large' donne sur le fond plutôt que sur un mur-à-corniche en arrière plan. C'est grand assez pour mettre 4 blocs côte-à-côte en travers du chemin. La corniche, elle, est à peine plus large qu'un bloc.

Je dis "8 pixels de profondeur" pour le sol principal, c'est entre la base du "mur" et la ligne sur laquelle les pieds de Mickey marchent. on a une zone au moins aussi large de "dégoulinures" dans la partie "mur" qui évite de donner l'impression que Mickey marche systématiquement au bord du mur alors qu'il a 4 fois sa largeur pour se positionner.

On a par contre utilisé la 'tricherie' habituelle en bord de bloc de toujours présenter un angle fixe et surprenement proche de 45°. ça ne saute pas autant aux yeux que dans Donkey Kong, et ça a l'avantage de ne pas changer la portée apparente du saut au fur et à mesure qu'on s'approche des obstacles. Merci, le gameplay.




L

Ravin' Rabbids en Perspective.

Bon, j'aimerais bien dire que je suis fan inconditionnel de Rayman, parce que c'est chouette, d'être fan inconditionnel. Mais quand j'ai vu "Ravin' Rabbids" sur GBA, j'ai bien du admettre que non. Je suis juste "fan de la première heure" de Rayman.


Je vais essayer de ne pas m'étendre sur ce qui fait que je n'ai même pas essayer de finir le 2eme monde de ce jeu, et si j'en ressors quelques screenshots aujourd'hui, c'est essentiellement pour étudier les choix de perspective dans ce jeu. Pour faire court, que ce soit le look du perso, la présence des lapins crétins ou la charte graphique des différents niveaux, j'ai l'impression qu'on a délégué la réalisation à une bande de sous-contractant sans vraiment chercher l'harmonie avec les jeux précédents ... et en particulier pas avec l'épisode 2D sur PSX/PC qui m'est si cher.

Si je prends un objet comme le livre sur lequel rayman court, il fait grosso-modo 2 blocs de haut. 50% de cette hauteur correspond à la tranche du livre et 50% servira pour la couverture sur laquelle Rayman marche. Un angle de vue très aplatit, mais qui se n'a pas l'air de coller avec l'angle proche de 45° que fait le "haut" du livre avec sa tranche.

Ignorons un instant la taille ridicule des crayons-pilliers par rapport aux livres, le rapport entre la largeur et la profondeur de leur sommet est de 2:1. Sous cette perspective-là, normalement, un cube aurait une face 'supérieure' aussi grande que sa face 'avant'. On est en pleine contradiction.

Pour les prochains niveaux de Bilou, je m'étais plutôt fixé un rapport de 6:1. Le rapport 50/50 pour la surface 'top' et la surface 'front' est confortable pour le sol de base. Le cahier dans lequel j'ai gribouillé ces notes fait 15mm d'épaisseur. Si je les ramenais à 16 pixels, une couverture de 16 pixels correspondrait à un cahier de 9cm de large. Il est plutôt aux alentours de 15cm, ce qui irait chercher dans les 26 pixels.

Essayons de 'perspectiver' la School Zone de Bilou. (bon, désolé, je repars d'une vieille capture .gif qui me donne des couleurs un peu pourries). J'ai gardé un ratio 50:50 pour le "banc" sur lequel se trouvent Bilou et l'encrier ... ce qui veut dire qu'il a en réalité une forme plus proche d'une grosse latte en bois (je prends 5mm d'épaisseur et 3cm de largeur pour nos lattes traditionnelles d'écoliers) ou de la rainure du tableau que la taille d'une planche d'étagère. Mais soit.

Les mini-livres qui servent ici de plate-forme perchées sont presque cubiques, mais on voit à peine leur couverture. Bref, c'est pas un exemple génial, mais çadonne l'idée générale.

Friday, July 10, 2020

Eagle Island


I've been following the development of Eagle Island since its author (@Pixelnicks) announced his crowdfunding campaign. The animations were tempting, and I finally decided to join the adventure. Okay, I might not be that much into metroïdvanias nor roguely-inspired levels, but it was about a boy and his owl, and I've been an owl-lover for quite some times.

not exactly the type of gameplay I'm after ...
What truly decided me to join was the "Nintendo Switch port". I knew I wouldn't be playing the game on any other device, but I had already the #sijavaisuneswitch hashtag in the back of my mind.

When the development finally was over, and that the switch port hit the shop, I had a bitter surprise: the redeem code I had received in exchange for my contribution wasn't available for the Nintendo Switch.
I understand why, of course: the port has been coded by a third-party studio and the indie author doesn't have direct control over whether they will donate copies of their work or not. So for one year or so, I owned the game, but couldn't play it unless I bought it again.

If only I could scroll up to see the top of those trees! ...
But I kept following Pixelnicks' posts and somewhere around mid-May, I noted that the background trees drawn by @skittlefuck were exactly the kind of references I needed to polish the graphics of Bilou's Green Zone.

And so I made the jump. I the very day I purchased it, I was publishing snapshots that triggered some level design thoughts.

It took me some time to get used to the gameplay. (A) to jump and (Y) to fire isn't exactly what Mr. Thumb is used to. There is an option to remap the buttons, but unfortunately, it also remaps the "OK" and "Cancel" actions for the whole menu system. I finally thought that it would be easier to adapt to a new game than to a new 'OK' button. I'm still messing up from times to times, but I got it mostly in the muscle memory, now.

I was tempted by the '360° aiming', too. It helps at start, because you can shoot where you want, Yoshi Island-style. But as soon as the challenge curve ramps up, it stops being helpful. You see, many of the actions in Eagle Island expect you to shoot from mid-air, and to chain successful shots. If you miss a target, your penalty is an "recovery" delay for your owl (who acts as a boomerang) before you can shoot again, while you can easily chain "hits" shots. Unlike Megaman or Super Mario, Quill and Koji don't have big functional blind spots. But being limited to 8 directions for aiming requires you to mix JUMP and SHOOT to reach your target.

Well. With its interesting mechanic where the #1 way to regain health is to chain 3 hits in a combo, there is really much I could say about Eagle Island's gameplay. I've only started understanding the mechanics of the game.

But I'm making a pause (as I reached the 2nd big boss encounter) to review the screenshots I made. They might help populate the 'pyramid zone' too, after all.

But I'll have to come back to those trees and analyze them better than my "big mustache made of socks" current comments, because I definitely see that style fit better in Bilou's woods than any other trees I collected for pixel study those last months (years ?)


@arcadeHero@RianKamos#EagleIsland

Thursday, June 25, 2020

Le retour des Meta-Boutons

Bon, la bonne nouvelle, c'est que j'ai repris le travail sur l'éditeur de niveau: il faut bien qu'on puisse profiter des nouvelles possibilités offertes par le moteur "newmap", vu qu'il a passé le premier round de tests automatiques.

J'ai attaqué avec la révision des "méta-boutons", cette palette d'outil qu'on peut faire apparaître sur la droite de l'écran pour définir si le sol est solide, pentu, préciser si les graphismes sont des bonus, etc. Il est encore trop tôt pour balancer un "ça avance plutôt bien", disons juste que je n'ai pas encore été immobilisé.

There's some good news: I resumed working on my level editor. Having a brand new game engine supporting more slopes and more physics won't be very sweet if I can't make level for it, right?

Well, I started with fixing 'meta-buttons', that widgets palette on the right of the map edition that let you define blocks properties. It is still too early to claim "good progress has been made". At this point, the best I can say is that I haven't been stopped yet.

There's some bad news too, unfortunately. If there is progress, it is even slower than Wintergatan's marble music machine. I'm happy if I managed to work 3 or 4 hours a week on the topic. I started my todo list in my notebook so that I can plan the things to happen even though I might not be ready for more screen time by the end of the day.

La mauvaise nouvelle, c'est que ça avance encore plus lentement que la machine musicale à boules de Wintergatan. Si je "travaille" dessus 3 ou 4 heures par semaine, c'est beaucoup. Heureusement, donc j'ai mon calepin pour y cogiter quand j'ai un peu de temps libre, pas d'épisode de Castle en retard, mais que je ne suis plus trop d'attaque pour me coller devant un écran.

Pour situer, j'ai même carrément commencé un thread twitter avec des p'tits bouts d'avancée parce que je sais parfaitement bien que quand je serai finalement devant le bon PC (plantage de desmume pendant que j'essaie de faire tourner l'éditeur sur le PC plus souvent disponible), j'aurai probablement oublié le calepin à côté de mon téléphone dans mon "cubicle" au premier qui me sert de bureau depuis que je suis en mode télétravail.

I had initially thought that once planned, I could crunch the thing in a couple of evenings, but no. This has turned so much into micro-development that I even started a twitter thread to post my screenshots and track "what's to do next". Left foot (one fix). Right foot (another bug discovered). Left foot(another fix). Right foot (yet another bug).

Not that ugly code got written, but the dependencies of what I had foreseen to need changes was of course imperfect. Sometimes more buttons means I start trashing the VRAM with my "back-up memory". Another time, I notice that the 'autorun.nds' used for tests doesn't know how to clear the screen (and turns it all red). Every step takes only an hour or so, but since that's all I can afford per sprint evening, it starts remembering me of how it felt to write code when I was 12 and my parents told me "that's it. 55minutes. Now save your work and wash your hands: the dinner is ready". (except that I'm one of the parents and that I'll have to make the dinner ready ;)

"Tiens c'est quoi, cette barre verte" ... une petite heure d'investigation. un commit qui corrige le mauvais positionnement de l'espace de backup dans la mémoire (oouhhh). Je déclenche accidentellement un "mur rouge" en voulant vérifier que tout va bien mais il est trop tard: ce sera pour un autre jour.

Et cet autre jour, je constate qu'un peu de refactoring serait le bienvenu avant de chercher l'erreur. Paf, une fois le refactoring terminé, il est déjà temps de refermer le laptop. Jour suivant, je fais les recherches avec gdb. Mais une fois le problème identifié, bardaf, il est temps d'arrêter.

Bref, je crois que vous voyez le tableau. ça rappelle un peu les conditions de programmation BASIC de quand j'avais 12 ans, tiens.

Well, let's not get disappointed, shall we ? I finally got translation-on-loading repaired yesterday. I refreshed how-autorun-checks-VRAM in my brain. Maybe I'll be able to fix one more bug tonight? Or I'll watch some more of Castle, S5 with my Fairy.

Friday, June 12, 2020

Cachette Secrètes ...

Il y avait quelque-chose de bien fun dans Prehistorik 2: de nombreuses cachettes dans lesquelles on trouvait plein de bonus plus farfelus les uns que les autres. Pas trop à se tracasser, celà dit: ça fait juste monter votre score. Mais ça fait aussi quelques clins d'oeil rigolos. Quand on tombe sur un pacman ou une cocotte en papier, par exemple.

J'avais eu dans l'idée d'ajouter des objets étranges à collecter dans Infinite Pyramid, qui serviraient de témoignages des années qui ont vu naître Bilou. Une K7 audio qui déclenche un jingle de l'inspecteur Gadget, par exemple. Ou un pixel art de Fury of the Furries. Ce genre de chose. Repenser aux parties de PRE2.EXE et à sa casserole géante (élément sympa qui nous rappelle le niveau qui vient de s'écouler) me donne l'impression que des objets hétéroclites sont plus fun qu'un gros tas de bananes, aussi Rare soient-elles.
Don't trust what's being said in French: it all happened because I was playing Eagle Island, and couldn't help but trying to smash the owl into walls just in case there'd be hidden things. Only then I recall that I grew this habbit while clubbing around in Titus' Prehistorik 2.

But granted, the thing about K-7-shaped bonuses in the pyraputer that would play Inspector Gadget jingle is a true trivia that has been suggested to Cyborg Jeff for approval. And indeed, bringing that together with the "nostalgia" for clubbing into walls made me realize that collect-a-thon are more fun if you don't know in advance what you'll collect and when designers break your expectation about what may comes during the hunt. It's another way to "make gaming moments memorable" when your game doesn't really fits an epic scenery.

Par contre, je n'avais toujours pas de bonne solution pour faire la chasse au bonus. L'effet préhistorik est drôle parce qu'on peut prendre les attentes du joueur à contre-pied. ça marchera moins (imho) si il a vu les bonus approcher depuis le bord de l'écran. Alors, bien sûr, je peux donner des coups de tête dans les branches pour faire apparaître des trucs. ça se transpose moins bien en dehors de la Green Zone. Je peux lancer des taille-crayons dans les murs, mais ça limite les endroits où chercher.

Je peux aussi essayer de faire une animation de Bilou à 4 pattes, qui permette de rendre la recherche des cachettes dans les murs un peu plus excitantes, mais entrer dans la cachette n'est que le début. ça ne nous donne pas l'effet "bonus surprise" de PRE2.

Puis en gribouillant, je suis tombé sur une idée mélangeant PRE2 et SMB3. Pourquoi ne pas permettre à Bilou de passer à certains moments derrière le décor. Là, il peut utiliser le bouton "GRAB" pour essayer de fouiller et faire sortir tous les bonus cachés ^_^

it brought my attention to the fact that I still don't have a good candidate for PRE2.EXE's club (or DK ground-pound attacks) to investigate things when you haven't been provided a blador/koopa/DK barrel to hint you that there is a secret nearby. I've been scribbling some options, starting with the obvious "jump and hit things repeatedly", continuing with "crawl under a lower (secret) passage into the wall. Nothing really convincing.

Taking a step back, why does clubbing-for-secrets work in PRE2 ? Partly because you'll clubbing all over the time. That's why blowing on things in DK:R doesn't work as well as rolling into the grass in DK:TF. What could Bilou do ? So far, his bare abilities are JUMP and GRAB...

We all know how JUMP can be used to reveal hidden goodies, right ? How about GRAB ? You sure could do it the SMB2 way. Not only you lift up defeated baddies, but you can strip goodies out of the ground after you found a suspicious thing protruding from the ground. You could also do it the DK:TF way, grabbing a root, holding 'GRAB' for a bit longer and finally you reveal the hidden stuffs. But both are for obvious secrets. Mechanically, they're not that different from the hit-me-plants of Rayman Origins (or DK:TF, by the way)

But I could turn them into PRE2-hit-the-unexpected-spot if I combine that with a mechanics from SMB3: hold up/down to switch to the background layer. Only then, you'd start digging for secrets by using GRAB again and again. There won't be the "smash-smash-smash" sound, but it could be made equally funny, I think.


Je sens que ça va être rigolo. On peut aussi le faire dans la pyramide là où il y a du sable, ou en passant derrière un pillier / une statue plutôt que par devant.

Sunday, June 07, 2020

Infogrames

Regis Monterrin et Florent Gorges ont obtenu une interview avec un ancien designer de jeu chez Infogrames durant la période SNES à N64: Vannara Ty, interview qui est rediffusée sur la chaîne "les petits secrets de la playhistoire". On y discute entre autres de l'évolution du projet "Schtroumpfs 64" -- un projet ambitieux, mais qui doit faire face à une période où la société ne sait pas encore sur quelle machine 3D miser et où il est donc nécessaire de faire toute la phase de pré-concept sur "ClaireFontaine Engine" parce qu'il n'est pas possible d'acheter une license de 3DStudio Max pour travailler sur un projet qui n'est pas encore validé. Mais la déclaration qui m'a retenu est la suivante:
[Peyo] n'a jamais vraiment eu de feedback négatif sur tout ce qu'on produisait. Déjà, de base, ils n'étaient pas gamer donc ils nous faisaient vraiment confiance.
Bien sûr. On a beau parler de Peyo-fils ici, le gars a la quarantaine quand le projet démarre. Pas loin de l'âge de mon e-Papou, qui ne se sera jamais vraiment à l'aise joystick en main. Alors le chasseur impérial qui sert de contrôleur à la N64 ou même les 6 boutons colorés de la SNES ... ils préfèrent sans doute laisser les spécialistes du testing (ceux qui à la fin du développement finissaient Tintin au Tibet en une vie, donc, avec des défis speedrun) de chez Infogrames leur montrer que tout marche bien que d'essayer le jeu eux même. 

Autre révélation-choc: quand Vannarra fait le design de Tintin au Tibet Le Temple du Soleil - ce titre techniquement impressionnant mais à la jouabilité difficulté monstrueuse (?) - il vient d'être engagé chez Infogrames juste après la fin du développement de Tintin au Tibet : c'est son premier jeu. C'est son stage (période d'essai?).
J'avais règlé les niveaux tellement durs que même les testeurs n'arrivaient pas à les passer. [...] Puis un jour [en revenant de vacances], les réflexes étant moins top, j'ai découvert les atrocités que j'avais faites subir aux testeurs et j'ai revu la difficulté pas mal à la baisse.
 Il nous avoue aussi qu'une fois le jeu fini, après un marathon de 10 mois uniquement là-dessus, il n'a évidemment qu'une seule envie: ne plus y toucher. Ce qui expliquer que ce soit un p'tit jeune qui ait travaillé sur le nouveau jeu, et pas le "chef" de l'équipe de Tintin au Tibet (pour peu qu'il y ait eu des chefs d'équipe à l'époque).

Saturday, June 06, 2020

Petite cascade

Bon, c'est pas énorme, mais ça faisait un moment que ça n'était pas arrivé. Je me suis pris une heure ou deux cet après-midi pour faire un p'tit montage de ce que donnerait une cascade sympa au milieu de l'environnement de Bilou.

C'était chouette, mais perfectible. En réimportant quelques trucs venus d'études précédentes, je finis par avoir quelque-chose de plus riche et qui s'intègre mieux avec le reste des décors (je trouve)

J'aime bien la possibilité de faire tomber l'eau verticalement en bout de plate-forme plutôt que de devoir me farcir un arc-de-cercle presque sans épaisseur. ça donnerait mal au crâne de celui qui devrait essayer de modéliser ça en 3D, mais soyons honnêtes: qui s'en tracasserait ?

Bon déconfinement à tous ;)

Saturday, May 30, 2020

Yo Yo Shuriken par Dr. Ludos

Un p'tit coin de web bien sympa, où Dr. Ludos nous raconte l'aventure de son homebrew SuperNES: "Yo-yo Shuriken". On est dans un jeu de type 'arcade / clean-them-all' qui n'est pas sans rappeler les ambitions simples d'Apple Assault.

Le jeu est orienté autour d'un mécanisme qui titillait Dr. Ludos depuis un bon moment: un jeu de tir où on a droit qu'à un seul projectile. Après quelques essais où il faut aller récupérer son shuriken en bordure d'écran, Dr. lui ajoute un mode boomerang et le sort du cyber-ninja est scellé: il se fait voler la vedette par son shuriken. Le voilà condamné à une éternité d'anonymat.

En plus de nous raconter la genèse et le développement de son jeu, Dr. Ludos nous parle aussi du développement pour SNES version 2020.
I used [PVSNESlib] to make Yo-Yo Shuriken, so I could code it in C language. For graphics, I drew BMP images that were converted to the SNES graphics format. For audio the framework accepted wav files for sound effects and .it files (Impulse Tacker format) for music. It was still quite a challenge to make a game running on the SNES, but PVSNESlib made it a "hard but fun challenge"!
PVSNESlib, c'est le travail de papy Alekmaul, un ancien de dev-fr qui a embrayé sur les consoles 16 bits une fois que la fièvre des DS est retombée. On lui doit des portages de jeux Amiga, un assez sympathique jeu de puzzle (qui avait fait parler de lui à une compo, si ma mémoire est bonne) et la partie technique de Sidney Hunter, un homebrew original dans la veine de Rick Dangerous.

In the end, even if you use a tool like PVSNESLib, you'll need to be familiar with how the SNES works in order to make actual games for it. Hopefully the wonderful homebrew community have consolidated some very extensive documentation. I'll recommend:

Pour ma part, je n'ai pas encore commencer le développement sur SNES, mais j'aimerais que mon prochain jeu ("Bilou's Dreamland") puisse envisager un portage sur la reine des 16-bits. Je vais donc garder bien au chaud les recommandations de Dr. Ludos. Mais ce ne sera pas simple partant avec 80 ennemis à l'écran (hors des 128 possibles pour le hardware) pour ses premiers tests, Dr. Ludos doit redescendre à 40 une fois les tests de collisions ajoutés (pour tenir les 60fps), puis de nouveau à 24 pour prendre en charge un deuxième joueur et la gestion de la musique. Soit un total de 38 sprites si on compte aussi les joueurs, leurs shurikens et les explosions.

Il va devoir malgré tout ruser un peu, comme convenu avec ce genre de machines: contrairement au joueur, les ennemis ne seront déplacés qu'une frame sur 2, ce qui permet d'étaler les tests de collisions sur 2 frames. (Curieux de voir ce que PVSnesLib a dans le ventre pour gérer ça, tiens ...) Il va falloir équilibrer ça avec le temps de mise à jour disponible pendant la période de VBlank, aussi -- seul moment où on peut faire une mise à jour de la mémoire graphique sur la SNES -- faute de quoi certains éléments graphiques seront tout simplement manquants à l'écran.

Mais Dr. Ludos ne s'est pas arrêté à faire une ROM de son jeu. Il nous fait la totale, avec une boîte, un manuel et une cartouche physique soudée à la main! Amis amateurs de tubes cathodiques, vous voilà avertis ...



Thursday, May 28, 2020

Twisted Dreams and the level designer contract.

As I'm going deeper into level design analysis, I realize that there should be a sort of "contract" between the level designer (hereafter denoted "I") and the player (hereafter denoted "you"). Something that will at least feature the following items:

  • Art. 1°: I will not tease you with collectibles that are impossible to collect.
  • Art. 2°: Whenever you will die, you will know that it was your fault.
  • Art. 3°: I will not put you in a situation where the only way to keep on playing is to die.
I'm afraid we can't do that.
Many earlier games infringe those rules, at least partly. Whoever has played Commander Keen IV has at some point wondered how one could collect all those 1-UPs in the deepness of the lifewater Oasis... or that impossible-to-grab diamond at the end of Level 2 in GGS.

When you do observe art. 1° of the contract, however, placing an item somewhere that looks out of reach can be perceived as the signal that the player is missing some nuance in the gameplay mechanics. This happened in Donkey Kong Country, but I wasn't aware of the contract before I forced my way through the lost levels of DKC2 and discovered the roll-jump move.

Yes, you can!

It happened to me when playing Giana: Twisted dreams, too. There are two modes in that game: punk or cute. The punk Giana can DASH (even mid-air) and the cute Giana can HOVER. Let me call "TWIST" the mechanic that switch between punk and cute.

Black Forest did merge both TWIST and DASH mechanic into one convenient action button. If you press that button, you DASH, and if you weren't punk, you TWIST as well. Same for the HOVER button. That makes them more direct than e.g. Mickey Magical Quest approach where you use L+R to select a power, then activate it with X and finally use it with B. What I had not discovered (and almost made me drop the game) when my brother let me try the game, was the trigger that TWIST without performing any action. When you look at this gameplay video, it also becomes clear that you can TWIST while HOVERing without losing the ability to HOVER ... which is pretty un-intuitive. It can however be suggested to the player by an appropriate layout of cute-gems and punk-gems.




Sunday, May 24, 2020

Toujours dans les pentes ...

Eh oui ... on a passé la mi-mai, et je suis toujours occupé à faire tourner ces tests automatiques des pentes et à corriger l'algorithme doslopes et son intégration.

J'avais introduit un mécanisme "maxMove()" pour pouvoir obliger l'algorithme doslopes à ne pas essayer d'aller plus loin que ce que l'animation permettrait. Dans le cas contraire, il y a un désaccord entre le mouvement vertical prévu et le mouvement effectué, ce qui conduit le personnage à finir en l'air ou encastré dans le sol.

S'en est suivi une refonte de selfmove pour qu'il puisse retenir s'il y a eu un maximum appliqué (et forcer le même maximum au moment de la lecture de l'animation). Puis je me suis rendu compte que tout ça ignorait superbement les décisions du type "il ne peut y avoir aucun déplacement là-tout-de-suite", avec à nouveau des déplacement incohérents. J'essaie de le corriger, et du coup tout bloque à la première pause.

Bref, J.L.N me demandait si j'avais déjà commencé à faire des niveaux pour la pyramide, mais j'ai l'impression que ce n'est pas pour tout de suite.

edit: trouvé. Un excès de zèle au moment de lire l'animation...
edit++: les tests passent! il était temps! Je suis dessus depuis la mi-janvier... et à 23 minutes près, j'y était encore en Juin!

Sunday, May 03, 2020

Tortoise Shelve

C'est le frère jumeau de "jigé" qui m'a fait découvrir cette fonctionnalité ultra-pratique qui dépasse de loin ce que j'arrivais à faire avec mercurial en ligne de commande et l'éditeur EMACS: l'opération "shelve" de TortoiseHg.

L'idée est de passer en revue le contenu d'un futur "commit", et de choisir, patch par patch, s'il doit être appliqué ou s'il doit être gardé pour plus tard.

Confinement oblige, c'est surtout ma fée qui utilise son PC portable en soirée, du coup, j'ai un peu perdu le fil des modifications que j'avais tentées (et qui n'ont pas marché), mais il y a quand-même de bonnes choses dedans.

Ici, je peux aller à la pêche aux bons plans (les anglophones appellent ça du "cherry-picking", mais bon, ils ont aussi le piggy-backing, donc...)

Et ... oh, bin puisqu'on est là à parler de mercurial. Je viens de tomber sur un article impressionant de détails à propos des conversions requises suite à l'abandon de mercurial au profit de git par BitBucket... 

Wednesday, April 22, 2020

vannes à encre

Il y a bien eu quelques "vannes à fermer" dans School Rush mais la plupart des autres niveaux avec des zones d'encre dont la hauteur est variable, l'idée est plutôt de provoquer un transfert d'une zone vers l'autre, ou de déclencher la montée de l'encre qu'il va falloir prendre de vitesse.

J'aurais bien pris un mécanisme à la Fury of the Furries (un bloc à tirer pour créer un passage), mais il ne s'agit pas d'eau ici, mais d'encre-qui-blesse. Le plus prometteur serait d'utiliser un "accident" provoqué par un pendat qui se serait mis en chasse de Bilou.

Le retour de Bangbash ?

 Il y a eu un "grand absent" dans les niveaux de la School Zone jusqu'ici : Bangbash. Pourtant, il avait plus ou moins été le pillier central du redesign de la School Zone jusqu'en 2010.

Mais au contraire des pendats, jusqu'ici j'avais pensé qu'il me faudrait obligatoirement utiliser des modèles 3D pour pouvoir les afficher. Pourtant, pour "dreamland", j'aimerais bien pouvoir en mettre quelques-un dans le "niveau de rémi". Mais est-ce que les polygones sont vraiment indispensable pour son animation ?

Maybe you still remember BangBash ? If you do, I sure owe you something for it's been nearly a decade that it's been collecting dust. Back in 2010, BangBash was more or less the cornerstone of the SchoolZone redesign. Unfortunately, I had planned to use 3D meshes to render it, in a sort of New Super Mario Bros style, but neither the game engine nor the DS game tools have evolved to a point where that would happen. And it's quite a shame, because it means none of the "newer" levels can be used as planned.

idée d'animation de 'recovery' après une attaque.
La motivation principale pour un bangbash en 3D, c'était le mouvement où il attaque par rotation autour de son point. Appelons ça l'attaque latérale. Elle était essentiellement intéressante dans l'optique d'un jeu en 2.5D où elle pouvait applatir Bilou contre un mur ou l'envoyer sur un plan de jeu plus proche ou plus lointain, permettant de prendre volontairement des dommages pour rejoindre une zone secrète.

The signature move of bangbash is the front bash, where it tries to smash directly what is in front of him. The reason why I had planned 3D was that the whole game was supposed to be 3D when Bangbash was first introduced (2006). And because it had a secondary -- spinning -- attack, which would be tricy to render in 2D. But the only "interesting" game mechanics I could think of based on this spin attack was to throw Bilou into a more distant layer.
l'attaque frontale (image d'archive)

Bon, tout d'abord, c'est discutable au niveau du game design -- similaire à des faux-pics ou de la fausse-lave. Je serais tenté de dire, avec le recul, que si le "damage boost" est une technique valide en speedrun, ça ne devrait pas faire partie de l'expérience de jeu "normale" de se faire volontairement toucher par un adversaire.

But by today's gameplay standards, I don't think it would be a good idea to ask the player to take damage in order to progress -- or even to find a secret location full of goodies. That would be no different from fake spikes, which I decide I'd no longer use. So maybe I should just do it in plain pixels. After all, pendats were also supposed to be made of 3D models, and they work quite well with mere sprites. The thing will be to ensure that BangBash is sufficiently interesting while being 'only' 2D.

Ensuite, conditionner la technique du moteur de jeu pour juste une idée de passage secret, c'est franchement douteux comme équilibre effort/retour. Surtout si on projette de faire son propre éditeur de modèles 3D en plus.

Bref, Bangbash devrait pouvoir rester un adversaire intéressant même si il ne peut faire qu'une attaque frontale (ou il frappe droit devant lui, dans le plan de l'écran). Je dois faire des essais d'animation pour trouver le rythme de mouvement qui colle. A partir de là, on verra bien si le support des rotations de sprites est utile ou pas pour l'animation.

Bangbash's movements are sufficiently different from pendats, bladors and recto/verso (bouncing erasers). It moves around by hops. I've been sketching some interactions with bladors -- now the major mechanics for the SchoolZone -- including the possibility that Blador might turn back bladors at you if it see them coming.

Je dois aussi trouver une place correcte dans l'espace des comportements possibles pour BangBash. On sait qu'il peut faire trembler les crayons et certains livres au point d'en faire tomber Bilou. On sait qu'il marque un temps d'arrêt avant de frapper.

Sa vitesse de déplacement n'est pas aussi élevée que celle d'un pendat qui court et la hauteur de ses sauts n'est pas comparable avec celle d'une gomme qui saute.

Unlike other "monsters in the school zone, I also plan to make BangBash a permanent baddie. You may stun it, but I wouldn't let it be dismissed and leaving the level like you can do with pendats. That's its defining trait: BangBash is strong.

Son atout (et son "originalité") tiennent dans sa résistance. Au moment du design de BangBash, il n'était pas encore question lancer de taille-crayon. C'est devenu un des mouvements-clé de la School Zone. Il serait logique qu'on puisse mettre BangBash hors-jeu d'un coup de taille, mais ce serait aussi sympa de réduire le champs des attaques possibles. Par exemple en permettant à BangBash de nous renvoyer un taille-crayon qui serait lancé de face.

Autre élément possible: ne pas permettre l'élimination complète de BangBash, uniquement la possibilité de l'assommer pour quelques temps.

Finally, one thing that I must make sure I implement is BangBash's ability to shake some parts of the level -- up to the point where Bilou could fall from them and becomes exposed to BangBash again. Unlike the 'spinning attack' that was sketched, but never used in any levels I designed (unsurprisingly, since level design happens on paper :-P), there are a couple of places in some levels where BangBash is placed in such a way that it "protects" some lone pencils. Those would stop being interesting gameplay elements if BangBash was to be replaced by e.g. a pendat there.

Sunday, April 19, 2020

3 ... 2 ... 1 ... Smile!

C'est tout simplement énorme. Je lance le décompte. Okay, ça fera sans doute pas le poids contre le kit 'dream(s?)' sur PS* et on a 8 ans de retard par rapport à 'Petit Computer' prévu pour les stores DSi.

Mais ce coup-ci, l'Europe a accès à la chose. Merci aux contacts des Taikenban et la communauté des cartmodders pour avoir attiré mon attention là-dessus. On en reparle, promis.

J'attends ... entre impatience et excitation. Ce sera peut-être le premier langage de programmation que je vais acheter. Incroyable, non ?
PS:

  • SmileBasic 4 a quand-même quelques nouveauté syntaxiques par rapport au MS-BASIC des années '80 ('70?), comme la possibilité de récupérer plusieurs valeurs en une commande avec le mot-clé OUT.
  • SmileBasic était le langage/interpéteur utilisé dans PetitComputer. Il reste des "Petit" à gauche et à droite dans certains exemples
  • Il y a une sorte de 'guide de l'utilisateur' dans les programmes téléchargeables, en plus des mini-tuto intégrés à l'outil. Et une documentation en ligne (encore un peu légère par rapport au SmileBasic de la 3DS).

Saturday, April 18, 2020

Link's Awakening -- un nouveau regard sur Koholint.

Je croyais tout connaître sur Koholint, à l'exception peut-être des techniques de speedrunners. Mais les enfants sont maintenant équipés de palmes Zora et J.L.N. s'est retrouvé sans que je ne m'y attende dans la région du "temple du nord", celui qui donne la clé-masque (pour le donjon 6) alors qu'il sortait à peine du donjon 3 (la cave au clés). En temps ordinaire, ça se serait terminé par un demi-tour mais ce serait compter sans la détermination d'un gamin de 7 ans qui a farmé 999 rubis dans le village (et quelques coffres) au point d'affronter le génie dans sa grotte l'arc à la main. Sans jamais avoir volé quoi que ce soit au village.

Il a donc traversé le dédale des Armos et s'est retrouvé face à face à un boss bien trop dur pour lui. Vu l'effort accompli pour y parvenir j'ai fait une entorse à la méthode de la tortue et j'ai affronté le boss pour lui. Puis c'est *deline qui est entrée "par erreur" dans le donjon 5 alors qu'elle cherchait le collier de la sirène.

D'ordinaire, quand vous terminez le donjon 4, vous ne savez pas enchaîner directement sur le 5 parce qu'un fantôme vous hante jusqu'à ce que vous terminiez une mini-quête. Rien de ce genre ici...

J'avais recolorié la carte de Koholint pour montrer quel item permet d'aller où, pensant en réalité "quel donjon permet d'aller où". Mais avec le non-conventionalisme des loustics et mon entraînement tout frais à évoluer avec un nombre réduit de coeurs je me rends compte qu'en réalité, dès la fin du donjon 3, on est en mesure de faire des rush dans les donjons pour chiper l'item-clé, ressortir sur la carte et débloquer le donjon suivant. Et oui, j'ai poussé jusqu'à aller chercher la baguette magique dans le donjon 8 alors que je n'ai encore vaincu aucun boss au-delà du donjon 4 (ce serait le 3 si je m'y étais pris plus tôt).

J.L.N était un peu déçu de ne pas pouvoir conserver le toutou pour continuer au-delà de la prairie... l'idée d'utiliser le coq volant pendant la plus grosse partie du jeu semble lui plaire, à défaut de faire des bomb-jumps comme dans le marathon caritatif de l'automne dernier.





Sunday, April 12, 2020

Tropcial Freeze

La série Donkey Kong Country est clairement une de mes préférées en jeu vidéo. Aussi bien comme référence de gameplay que comme passe-temps. DKC1 a été le premier jeu de plate-forme que j'ai pu finir (okay, en grande partie grâce au B.A.R.R.Y.L. de Maniak). Puis DKC2 le premier jeu que j'ai complété à 101%. DKC3 m'avait un peu déçu avec un character design discutable, mais ça ne m'a pas empêché de faire la chasse aux oiseaux-bananes dans ZSnes pendant de nombreuses soirées.

Puis arriva "Donkey Kong Returns". Si je le trouvais très plaisant visuellement, j'ai par contre été assez déçu par son gameplay. "Agacé" serait plutôt le mot juste. Ma petite prise en main de Tropical Freeze chez mon frère m'avait plutôt plu mais n'ayant pas de WiiU, j'en étais plus ou moins resté là. Jusqu'à ce mois-ci: mon frangin m'ayant offert le jeu pour switch.

La bonne nouvelle avec la Switch, c'est que je peux plus facilement mettre le jeu en attente même au milieu d'un niveau. ça évitera déjà les problèmes de saturation liés aux trop long niveaux des platformers modernes.

Les graphismes sont évidemment plus détaillés que sur le malheureux petit écran de la 3DS qui peinait à rendre la version Wii de DKR. Il y a malgré tout de nombreux moments où j'apprécierais de pouvoir choisir un zoom plus rapproché pour mieux voir où je retombe.

La présence de Cranky-Duck-Tales et Dixie-hélicoptères sont les bienvenus pour offrir un peu plus de souplesse au gameplay, et je crois que l'inertie de DK est un peu plus légère que dans DKR (je rate nettement moins mes sauts). Mais la véritable pépite, c'est la possibilité de jouer avec Funky Kong, ce qui offre le triple de points de vies (en mode 2 joueurs), la possibilité de planer à tout moment (ce qui s'avère par contre désorientant quand on s'est mis Donkey dans les doigts), et on ne craint plus les pics (moyennement intéressant, vu l'omniprésence des trous sans fond dès le 2eme monde). Un plus tout à fait appréciable quand J.L.N veut faire une partie avec super Papa Bros.

Il y a un truc avec lequel j'ai encore du mal. Je trouve les niveaux moins mémorables que mes bon vieux DK. Je n'ai pas encore réussi à mettre le doigt sur ce qui ne colle pas (ni si c'est dans ma tête ou dans le jeu, du coup), mais quand je me refais la bande son "en aveugle", il est rare que j'arrive à revisualiser les niveaux à partir de leur musique. Leur nom n'aide généralement pas beaucoup plus. La longueur des niveaux joue sans doute là-dessus, la construction à partir de structures 3D fait aussi qu'on sait moins facilement s'abstraire du graphisme pour retenir la structure générale (escalier, mur, plate-forme isolée, etc.) de tel ou tel morceau de niveau. Les bananes mobiles nous distraient encore un peu plus (plus besoin de reconnaître les murs creux ou les cachettes de bonus dans le sol). Par contre, il y a quelques éléments uniques très sympathiques -- presque Raymanesques -- comme cet instrument à vent géant au milieu de la montagne des hiboux ;)