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.

- - - Round 1 - - FIGHT! - - -

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 debugview.exe and don't mess with its settings or you won't see anything
Need to check some NDIS log instead ? that will be tracelog.exe for you. But make sure to check you got anything with tracert.exe before you try to use PDB files to make sense of what you got.
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 ? Or some pnputil.exe /enum-drivers to check the drivers cache ?
Want to know what that 1077 error code means ? Please use net helpmsg 1077.

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... msinfo32 is such a poor substitute ...

- - - Round 2 - - FIGHT! - - - 

I wish I could simply use my knowledge of gdb on Windows binaries, but I haven't found any way to do so. Granted, Visual Studio debugger does a decent job, but given the size (and the license requirement) of VS, I can hardly install that on every test system on which stepping through code might be required.

Easy (in gdb environment): you'd use gdbserver on the 'test system' and connect from your full-fledged gdb-compatible debugger on the machine that has the source and stuff. Again, I have no clue whether this is possible in the Windows econosystem.

So what's left is WinDbg, which requires a much smaller package to be installed. I'm going through tutorial to try figuring out how to learn that tool.

- - - Round 3 - - FIGHT! - - - 

There's a strace-like tool in ... we'll see whether that makes me a better windebugger during 2021 ... forget it: drstrace.exe just crashes when starting to trace most programs, including something as simple as Notepad.exe >_<
If not, I guess I could at least teach myself

Just in case you wonder how to enable core dumps on a system without ulimit, check out Windows Error Reporting. It's not like you hadn't launched the Registry Editor earlier this week, right ?

- - - Epilogue - - -
Before you install rogue sotfware on your machine, you might want to know that Windows has md5sum "equivalent" within the swiss-knife certutil tool: certutil /hashfile your_file_name md5.

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.

Okay, I know pyramid and woods would look better if I opt for a slight perspective effect, and that it would be super-tricky to use anything but flat view in the School Zone. Is that an issue ? Would the player lose the connection with the fiction world if such a thing occur. I suddenly had an answer while watching the Ultimate Decathlon: it happens in Magical Quest and I never noticed.

Sure, there are other perspective oddities in the game, like the huge entrance/exit doors. And even the 'magical blocks' (those with mickey ears on them) are somehow disorienting and which (imho) hurts the immersion more than the 'elevator' level at the entrance of the fire grotto.

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.
The first thing to do is to identify the 'perspective' used by the game, and the magical blocks are perfect for that. They're made of 2 "top face" pixels, 1 edge pixel and 13. That is around 1:5 ratio between the top face and the full block height, very close to what I'd like to introduce in Bilou's adventures. Another interesting object to consider is the floating face platform, assuming that its top is cylindrical. Its top face is 5 pixels deep while it is 31 pixels wide, which brings us around 1:6 ratio.

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.

The second question I had in mind regarding non-flat perspective in 2D games was 'where should the walking line be'. It isn't really a surprise for a tiled game, in Magical Quest, this is at the tile boundary.  The 8-pixels-deep cornice on the top screenshot mixes a 4-pixels 'far' area and a 4-pixels'close' area. Additional platforms (solid ground rather than jump-through, this time) exist, that add an extra 8-pixels of depth, but in that case, Mickey stays completely at the edge between the 'close' ground tile and that extra tile. The art for the 'top-of-wall' is drawn in such a way that player doesn't get the feeling that Mickey completely sticks to the edge of the platform.
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.

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

Eagle Island, ça fait un moment que je suivais le projet. J'ai même risqué un financement participatif quand il a été question d'un pallier "portage sur Switch". Parce que je ne risquais pas d'avoir un PC-Steam dans un avenir proche, mais une switch, ça ... malheureusement, mon code de téléchargement reçu en guise de compensation à la participation au projet ne permettait pas l'accès à la version switch >_<

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.

Le jeu est basé sur un générateur procédural avec mort permanente et accumulation de power-ups dans un sac à dos qu'on pourra ré-ouvrir avant d'attaquer un niveau suivant. Bon, je dois bien dire que je ne suis pas encore complètement mordu de la logique "roguelike", mais ici, on est roguelike qu'au sein d'un niveau. Une fois le boss trouvé et vaincu, il y a une sauvegarde permanente de sa progression, y compris les nouveaux pouvoirs acquis. Tout en étant sympathique, c'est pas vraiment le genre de gameplay que je recherche. Je passais donc plus ou moins mon tour.
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.

Puis, à force que Pixelnicks poste des p'tites captures d'écran de son interface améliorée (eh oui, il continue à travailler sur son projet), j'ai fini par me rendre compte que ces arbres, c'est vraiment le genre de décor que j'aimerais pouvoir étudier pour améliorer ma "Green Zone". J'ai fini par craquer.

Le gameplay n'est pas exactement celui dans lequel j'excelle. Ni avec le ciblage à 360° qui rend les combos presqu'impossibles, ni avec son mapping de boutons étrange. A défaut de m'y adapter, je me débrouille pour ne pas trop m'embrouiller.

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 ?)

Mais ce qui nous intéressait, donc, c'était les graphismes. Et en jouant un peu plus, je suis tombé dans des recoins qui pourraient bien être intéressant pour la zone de la pyramide également. J'y reviendrai donc (après tout, j'ai encore du travail avant de vraiment commencer à faire plein de pixels pour le prochain jeu). Et comme j'y reviendrai, j'en profite pour y ajouter quelques autres snapshots qui m'auraient servi de référence si je n'avais pas acheté le jeu. On retrouve le même type de "couche de feuilles superposées" dans le travail de arcadeHero, mais je n'avais pas le sommet des arbres. Chez Riankamos, en revanche, j'avais bien le dessus aussi, mais le style n'est pas vraiment pertinent pour Bilou