Thursday, March 28, 2019

nohup NUC

I got a NUC as Christmas gift, and it was more than welcome. I hope to use it as the post-desktop device for plenty of purpose, mostly just by turning it on and interacting with a WiFi-capable gadget...

[done] be the music machine of the living room
It is not too noisy with its fans, gets a jack output and can easily fit next to the HiFi system. I can use the WiFi connection to quickly view which song is being played, skip to the next song and switch between "fairy-lover" or "chiptune-lover" modes, from any device in the house including smartphones and tablets.

I would still need to let it learn which songs are less liked, or migrate some titles to other folders, etc. Preferably in a way that would not take effects immediately, but rather that is approved over ssh after having been collected during play sessions.

[done] make Fairy's laptop devkit-free

Fairy's laptop still has a battery. Mine is now powercord-tied to the ground. Fairy's one has poor resolution but increase mobility, but Fairy's one isn't always there, so it would be better to use it just as a remote terminal to the NUC instead.

[done] let it serve (auto-generated) epub doxygen
That means having it a mercurial hub with improved features. I use to have something like "nohup hg serve --webdir-conf /path/to/hg/hgweb.config -p 5555 &>/dev/null &" at work, where hgweb.config is simply a list of 'printname = full/path/to/repository', where printname may be 'organizational-folder/repository-printname'. It all falls under a [paths] section of an INI file. But I'd like it to try building and generating documentation whenever I push a new set of commits there. The ultimate goal is being able to browse up-to-date code from my boox without having to power up a laptop.

[wish] make it the server for boox-based diagram editing
That will also help integrating all sort of support pictures like screenshots and UML diagrams into the documentation.

[todo] make it download OC Remix updates on a daily/weekly basis

Because having OC remix on the wrong side of the firewall at work is a pain. My "coding music" is an open playlist,
  • and html class pl-video-title-link allows  to identify all the links to the mentioned videos.
  • and there is the page to the remix (https://ocremix.org/remix/OCR%%%%%) in tags
  • and there is a tag in youtube pages!
So I could have a script that automates download of new OC titles running on the cube...

[todo] enable Androïd development
 
That will be for when I got it plugged into a wired network again: I don't know whether this is due to the extra disk enclosed in the device, but the WiFi connectivity is a nightmare. I get a few 100Kbps at best ... barely enough to use a remote terminal. I'd rather not start installing big things that way.

[todo] make it a better youtube-on-TV than what the ISP provides in their box

Partly because there is no support for user accounts or playlist of any sort in the box...

Friday, March 22, 2019

Level Editor vs new engine

Mes cogitations pour rénover la gestion des maps dans mon moteur DS commence à porter ses fruits, au point que je peux commencer à réfléchir à l'impact que ça aura sur l'éditeur de niveaux. ça me tient à coeur parce qu'avec le système actuel, je ne vois de bonne solution pour réaliser les cours d'eau souterrains que mon frère avait mis dans les niveaux historiques de la Grande Aventure.

Je me dirige vers un système avec uniquement un byte par tile de 8x8 pixels, et quatre grande classes de blocs:
- les morceaux de blocs interactifs, provoquant des collisions auxquelles le personnage doit réagir (pics, bloc-question, bonus, portes ...)
- les zones non-solides mais succeptibles d'affecter le comportement de certains morceaux de code (eau, échelles, courant d'air ...), dites "medium"
- les blocs de "sol" (solides) qui encodent la forme des pentes
- les blocs solides qui encodent les propriétés physiques (friction, déplacement forcé, etc.)

With about 2 more months to think about a better tiled engine, I start having fewer questions and more plans. I'll migrate away from 4-bit-palette being used as tile type and opt for an 8-bit type information per 8x8 tile. I'd have fewer (64 instead of 256) unique codes for "special/interactive" blocks, but the code to handle them would scale to 24x24 or 32x32 pixels blocks easily. I would have 64 different slope-type identifiers and it would be much easier to write the slope-handling code than initially planned.

And to make sure I have required flexibility, I'll split physics-hinting tiles from slope-angle-tiles. Some part of the code will read the pixel immediately under the character's feet and find the angle, while other part of the code will read past the slope and figure out whether we're on ice, solid ground or mud.


ça signifie que la petite palette de blocs utilisée dans LEDS va devenir plus complexe, avec un bouton "montrer les autres options", et que je pourrais bien en avoir trois tranches plutôt qu'une seule pour éviter les opérations de navigation fastidieuses.

ça signifie aussi que c'en est fini de l'encodage de petits "0" et "2" dans la map pour former un code entre 1 et 256 en base 4: l'éditeur de niveau ne pourra plus proposer que les blocs qui auront été décrits, ce qui devrait au passage rendre les choses plus lisibles et plus faciles pour des gens qui auraient envie d'utiliser LEDS pour leur propres projets (on peut rêver, non?)

LEDS will have to adapt this, of course. I won't have to enter digits and cross fingers with hope I remember correctly the codes for a bumper or a spike. The editor will have to know them, now. And it will have to be able to set 'medium' flags individually or pick appropriate slope types. I don't know yet how I'll handle all that.

Autre truc intéressant: puisque l'information concernant un bloc spécial (mettons des briques cassables) n'est plus encodée que sur 1 tile, je vais avoir besoin de tiles qui disent "suite du bloc, cf. à droite" ou "suite du bloc, cf. en haut", etc. Chose qui devrait être plus simple à étendre à des blocs interactifs de 24x24 ou 32x32 si le besoin s'en fait sentir...

Nincha'ts

Avec cette pyramide, j'entre dans l'inconnu, moi aussi. On a jamais dessiné aucun niveaux, on a jamais vraiment fait de 'monster design', à part quelques Bilous couverts de bandelettes (momificum, momificus et momificae, de mémoire) et une sorte de robot affublé d'une caisse en guise de tête et baptisé "Toutencarton". Tout est à faire.

Alors après avoir un peu cogité le graphisme de super cat adventures et regardé J.l.n affronter les bêbêtes à poils de Kirby Squeak Squads, je me dis qu'une sorte de chat-ninja pourrait être sympa. Il faut qu'il soit Bilou-style, bien sûr, d'où l'absence de pattes. Il faut aussi qu'il ait des mouvement intéressants, d'où l'utilisation de la queue rayée comme d'une patte en cas de besoin. 
Il doit y avoir moyen d'en tirer quelque-chose de sympa...


Sunday, March 17, 2019

Labyrinth flavours ...

Oh mazes. Amazing Mazes. I quite love maze games, and as you may have guessed, I would like to delegate parts of the level design of my next game to a maze generator. I've written a few of them so far, including some that needed little resource, but most of them were creating so-called "perfect" mazes, where two locations in the maze are always linked by exactly one path .

Bon, j'aime bien les labyrinthes. Depuis longtemps, et j'aimerais bien que le prochain jeu de Bilou puisse se dérouler dans un niveau plus labyrinthique. Mais j'ai envie d'y jouer moi-même aussi, du coup ce serait sympa si le jeu pouvait partir d'un générateur de labyrinthes et les maquiller en niveaux de Bilou. Par contre, tous les générateurs de labyrinthes que j'ai fait (ou fait faire) jusqu'ici produisaient des labyrinthes parfaits, c'est à dire des labyrinthes dans lesquels il n'y a jamais qu'un et un seul chemin entre deux endroits. Et du point de vue du gameplay, j'ai peur que ce soit loin d'être génial.

 Imho, this is not ideal for gameplay. It creates maps that are essentially trees, with lots of dead ends and narrow hallways. I believe it will reduce many of the gameplay opportunities. it means that you can hardly dodge monsters. In some way, in such mazes, you hardly have any real choice once you stop seeing it all: you merely guess which might be the correct path and turn back a lot.

I have the feeling that interconnected loops will provide more interresting behaviours. we see them in PacMan - as well as in Phantom Hourglass. They provide interesting backtracking and let you chose between fighting or sneaking when you encounter a monster.


Parce que s'il n'y a qu'un seul chemin, ça implique qu'il y a de nombreuses voies sans issues. Sans une vue globale de la situation, il est extrêmement improbable de parvenir à "trouver" son chemin, et donc pas de réel choix à faire pendant la navigation. En plus, la plupart des obstacles ne pourront pas être contournés: ou bien on les affrontes, ou bien on ignore le chemin sur lequel ils se trouvent. Bref, mieux vaudrait un environnement proche d'un niveau de pac-man, avec de nombreuses boucles, où le défi est moins de trouver le chemin que de choisir celui qui offre le meilleur rapport récompenses/risques.

So how can I make levels than feature such loops? I gave it another try this week-end, by first laying out loops of random size on the map, making their center "unbreakable" and then setting the rest of the map as cells ready to be processed by a regular "perfect maze" algorithm. 

But this time, I do not need to push the execution to the point where the maze becomes all-connected. Instead, it is sufficient that all rooms get connected. Some cells will then remain obstacles, which I'm fine with.
Je n'ai pas encore d'algorithme idéal pour ce genre de labyrinthe. Je fais quelques essais sur papier quand j'ai un peu de temps les week-end... Une des idées serait de commencer par créer un certain nombre de boucles de ce genre dans une grille avant d'y faire tourner un algorithme de "labyrinthe parfait" sur les cases restantes jusqu'à ce que toutes les boucles se retrouvent inter-connectées.

Friday, March 08, 2019

pixdox

bon, je voudrais réintégrer une partie des images de ce blog à l'intérieur de la documentation Doxygen pour avoir un document de type "e-book" un peu plus complet. C'est particulièrement le cas avec les screenshots d'interface graphique pour les éditeurs, parce que redessiner les positions des boutons quand je veux comprendre pourquoi certains ne s'activent pas à chaque fois, ça devient vite lassant.

j'ai déjà fait un essai avec un fichier pour libgeds, qui s'était rangé dans 'pixdox/html' et qui était invoqué avec un \image html InspectorWidget.png dans InspectorWidget.cpp, moyennant IMAGE_PATH=pixdox dans le fichier Doxyfile pour libgeds... reste à faire pareil pour les autres.

Et il faudra copier les images de 'pixdox/html' à l'intérieur de dox/html ...

edit: oui, pendant quelques jours, ce post a bloqué tout le reste du blog. La faute à un copier-coller trop aggressif qui s'est terminé par une image encodée directement en base64 dans le post... J'imagine que les buffers de google n'ont pas apprécié.