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.