Tuesday, January 06, 2026

bin/Eterm-borderless

Ah. I'm still using Eterm from times to times, but its default color palette isn't that impressive. I've been using it without border or any widgets for decades thanks to the drag-to-move and drag-to-resize features of Enlightenment. but in August 2024, I made a few changes to the "Eterm-borderless" script that is bound to ALT+F5:


Eterm --borderless 
      --font-fx none        # else it tries dropping a shadow 
      -f white              # foreground color
      --double-buffer 
      # -x                  # (alias for --borderless)
      --cmod "96 255 255"   # trick for tinting the background towards green
      -O                    # transparent
      -0                    # immotile transparency optimization
      --scrollbar=0 --buttonbar=0 
      --color8 rgb:60/60/60 # better dark-grey
      --color3 rgb:cc/aa/00 # orangeish dark yellow looks better
      $* &
  • --viewport-mode is fundamentally what I do with my "restore-bg" trick
  • the default color8 (dark grey) is rgb:33/33/33, which is really too dark for any purpose
  • today's finding: an alternative to -f white could be --colorDB white -f rgb:dd/dd/dd --color7 rgb:bb/bb/bb. That gives you a default color that is bright-but-not-quite white while still having the true white when things are bold, without sacrifying any shade of gray. 

Sunday, January 04, 2026

I must make some isocahedron gem!

This is a screenshot from @makeshifted, back in December 2022, that showed up in the last snapshot the Internet Archive could take of my twitter timeline. A repost with the annotation "3D was *that* awesome back in the Assembly 9x #demoscene days."

It showed up again a few times ago and I told to myself "you know, those stonekeys in Commander Keen ? Well, if I can make NDS 3D look that sleek, I won't need to pixelstudy them!

And it appeared again, posted by @benji__t this week-end while I'm doing my farewell tour on twitter.  

One possible system of Cartesian coordinate for the vertices of a regular icosahedron, giving the edge length 2, is: where denotes the golden ratio. -- https://en.wikipedia.org/wiki/Regular_icosahedron --

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Coxeter%27s_snub_octahedron_from_octahedron.gif/100px-Coxeter%27s_snub_octahedron_from_octahedron.gif
Oh! look at that ...  

Take a tetrahedron of psi, split summit so that it turns into a 2-edge, and voilà! isocahedron !

- - - 

those words above were written around the 19th of February, last year. I haven't written a single line of DSGL to make it appear in the infinite pyramid, and while I initially thought of using it as keygems, I realise that what they really be are the "magic stones" that you collect after defeating bosses.

Monday, December 29, 2025

Slides testing

I've been re-drawing the water slides directly on the "three rooms" test screen, because it feels easier to prototype there than within the reconstructed green zone level. Then I've been prototyping different things about it that I had in my notes ... only mostly ruling out some options so far. For instance, the idea of re-using the sprite of waterjets to avoid issues with waterfall-to-slide transition should be forgotten ... it helped me coding something to select the layer where Gobs should appear ... one of the things I'll need for the smashing fist.

Another such test was placing some special tiles along the slide, in an attempt to make them trigger some "fall and slide on slippery ground". 

That failed. Almost completely. I had to create an empty animation just to avoid the normal "special blocks handling" from deleting chunks of the slope as soon as Bilou touched them.

I also had to drop the idea of placing "jet" tiles in an attempt to push Bilou harder out of the slope at its bottom : they allowed (but only sometimes) Bilou to hover the whole slide upwards ! 

Sunday, December 28, 2025

That fist goes SMASHing

It took me about 30 minutes to finally craft the script needed to bring in the smashing fist I had drawn back in February. I'm a bit sorry that it took me so many month to finally be ready to write that script. Part of it because I had not given it any priority over applemen or sliding water, but mostly because finding some time for doing homebrew is more and more complicated, unfortunately ^^".

(screenshot saturday on mastodon and bsky

Similarly to what happened with the rolling appleman, having the bare functionality is just unlocking many other things to do to get it satisfying, like having dust clouds when it hits the ground of having some screen shaking. 

Voià. J'ai enfin transféré les pixels du gros poing écrabouilleur et j'ai même trouvé 2x15 minutes pendant cette semaine de folie pour écrire le script qui le fait monter et descendre. En deux fois parce que le laptop ne tient plus 30 minutes d'affilée. Ça débloque une belle quantité de trucs à faire, mais si vous voulez bien, je vais déjà essayer de comprendre pourquoi je n'ai plus d'électricité depuis le 30 et essayer de faire réparer la chaudière qui n'a pas aimé ça.

  • [done] adjust layer priority so that smashers hide in walls
  • [todo] shake the screen when hitting the ground
  • [todo] shoots clouds of dusts when hitting the ground
  • [todo] get a green pillar following them. That could be a 3D item

and well, surprisingly enough I hadn't yet a way to change the layer order. That shall be bit $2000 of the flicker-control word (defined through GobExpression opcode F since bit $8000 already controls whether the given GOB should appear in front of every other GOBs of the same layer (used e.g. by "weapons" you throws)

Petite mise à jour parce que j'ai ajouté 2 autres smashers côte à côte pour voir un peu ce qu'ils donnent dans une configuration "défense de couloir". 

Friday, December 12, 2025

ALT+F5

It's been decades I'm using the ALT+F5 combo to spawn a new terminal. I couldn't even tell if that was some default settings of Enlightenment, some defaults of the window manager I used before enlightenment or something that just felt natural since ALT+F4 closes a window.

But of course that doesn't work with Windows ... but maybe it could. Let's locate my `User Pinned\TaskBar` first, which appears to be in some sub-folder of Internet Explorer within the hidden AppData (and well, a good old dir /s TaskBar remains the most reliable way to find out)

After that, configuring is even easier than changing the icon. There was a "Shortcut key" field waiting for me, in the "shortcut" panel ... I'm baffled. How could I've been missing it for over 10 years if it was so easy ? Was it something introduced only in recent versions of Windows ? it was there since Windows 98 SE...

So I know win32gui (from pywin32) can script some actions to some Windows the way eesh used to do. Can I bind some key to "uniconify the music player" ?
def callback(hwnd, any):
     global found
     if win32gui.GetWindowText(hwnd) == any:
         found = hwnd
     if any in win32gui.GetWindowText(hwnd):
         print("%s - %s" % (str(hwnd), win32gui.GetWindowText(hwnd)))
         
w.EnumWindows(callback, "VLC")
can find me some stuff (thanks the doc) once found, I can use ShowWindow to switch between win32con.SW_RESTORE and win32con.SW_SHOWMINIMIZED (thanks the rubber duck, I guess)
  • Window class is useless. It just tells me VLC is coded in QT :P
  • the "select media" key I want to use does not seem to be usable as a shortcut ... can I use powertoys key remapping to deal with that ?
  • it turns out these are 'AppKeys' in Windows vocabulary, and there are registry keys to define what happens when you hit them (surprisingly, this was all empty on my machine)
  • "Run: minimized" on the link to the python script avoids flashing black command window

Friday, December 05, 2025

Funnier Apples

Depuis le début de mon carnet en cours, j'ai un objectif "rendre les pommes plus fun". ça passera par des interactions révisées mais aussi par des compléments d'animation. Entre autre, quand on lance un appleman et qu'il arrive par terre. Le comportement actuel est tiré de dumblador, qui glisse légèrement sur les surfaces planes de l'école avant de s'immobiliser assez rapidement.

Finally! that little sketch of an appleman rolling away when hitting the ground has been teasing me for month at the start of my notebook, but now I've finally sketched something in AnimEDS. Hopefully I could try to integrate it in the prototype this week-end.

It should trigger when you've thrown an appleman and its hitting the ground. The current way it slide for a few pixels before settling feels incompatible with the spheroidal nature of an apple but I still have to decide whether it will bounce-roll or just roll. Likely "just roll" will work better with slowing it down. Or maybe it should just keep rolling until off-screen or stopped by a wall ? 

Mais soyons clair: ça ne donne rien de convaincant avec une pomme sur le sol de la forêt. D'où l'idée que la pomme roule un peu en atterrissant ce qui 1) est fun et 2) lui donne un peu plus de portée qu'un projectile classique, ce qui est toujours le bienvenu dans un monde 1.

Alors tant qu'à faire dans le fun, on pourrait même laisser rouler la pomme jusqu'à ce qu'elle rencontre un obstacle, non ?

(En tous cas,  J.L.N approuve ... et apprécie le fix qui évite à Bilou de se retrouver figé dans un mur pendant qu'il nage) 

edit: The pull mask feature should allow me to make eyes and stem either in front of or behind the apple's "body" more easily. I had forgot it exist and made a messy animation where sprites are swapped, which makes it blink in the editor ^^"

Now, that simple animation opens up a lot of new options in terms of gameplay and interplay. What happens if an apple rolls into another apple ? and into a bopping funky funghi ? 

Game design brainstorm from 2022 suggested that you could "push" a funghi by throwing an apple at him when it's mid-air, but shouldn't it bounce the apple back at you if he's grounded ? and what if you're hit by an apple that's rolling back at you ? shouldn't that hurt ?

That starts making the appleman looking a bit more like a koopa and a bit less like a goomba, doesn't it ? My brother even suggested that it could be the core mechanics of a dedicated puzzle game ^_^

Ah. None of these are available yet, of course ^^"
 

Saturday, November 29, 2025

Pix'n'Gem: La naissance de space invaders

Prenez un Japonais qui maîtrise suffisamment les chips TTL pour avoir réalisé "Speed Race" (mais si! ce jeu d'arcade qui a servi de base au jouet où le volant déplaçait une petite voiture sur une route avançant toujours plus vite ... et à Donkey.bas, au passage :P), qui vit dans une époque où les clones de Pong saturent les machines d'arcade et qui rêve de jeux où les graphismes nous feraient plus voyager que des rectangles et des carrés...

Maintenant, faites-lui se prendre une grande claque en lui présentant le tout nouveau breakout d'Atari. C'est toujours des rectangles et des carrés, mais c'est aussi un jeu complètement neuf! En plus, il vient d'obtenir un processeur 8080 (l'ancêtre du Z80), ce qui va lui permettre d'envisager quelque-chose de beaucoup plus sophistiqué que ces petites voitures (qui étaient déjà franchement pas mal :)

Il ne le sait pas encore, mais il est sur le point d'entamer le développement de Space Invaders, et ce n'est pas un hasard si Pix'n'Love y consacre un article de 10 pages dans son premier mook! L'histoire de Tomohiro Nishikado mérite amplement de figurer dans les référence d'un cours de game design (n'est-ce pas, Mlle L. ;). Partant de Breakout, il modifie le concept, prototype après prototype jusqu'à finalement arriver avec l'idée d'aliens tombant du ciel. On est en plein dans la philosophie de "l'habillage de dernière minute".

  • d'abord, des briques, un tireur et des tirs qui montent à la verticale plutôt qu'une balle qui pongue
  • les "briques" (en fait des cibles) pourraient bouger: ça donnerait plus de challenge
  • il faudrait limiter le temps, comme dans les jeux de tir mécaniques 
  • OMG ! en fait ils pourraient faire ce que les cow-boys en alu des salles d'arcades n'ont jamais pu faire: ils pourraient nous tirer dessus si on ne tire pas les premiers! (eh oui, à l'époque, c'était une idée novatrice, voire audacieuse)
  • et on aurait pas besoin de limite de temps si les cibles-qui-tirent avancent vers nous
  • S'ensuit enfin la recherche du bon habillage ... et c'est finalement la folie Star Wars qui donne l'idée

Le dossier ne se limite pas à interviewer sur le développement, cela dit. On a aussi des détails intéressants sur les playtests avec les clients potentiels, le lancement, etc. Mais surtout (pour moi) une note qui retient mon attention: le devkit 8080 coûtant trop cher, l'équipe doit se fabriquer le sien, ce qui lui prend 6 mois hors des 10 consacrés à la réalisation du jeu. Ahurissant du point de vue d'un programmeur de machines tournant à 66MHz, mais le gars a l'habitude de réaliser des circuits, pas juste des programmes. Et son écran n'aura besoin que de 480kHz pour tracer les 256x224 pixels du jeu... ce qui devrait rendre possible le prototypage sur breadboard avant la mise en production d'un PCB.

Bref, la suite du Pix'n Love  #1 devra attendre parce que me voilà parti à fouiller les schémas de la borne pour essayer de reconnaître la partie "générateur d'image" après avoir découvert qu'il utilisait une VRAM en mode "gros bitmap" en creusant dans le code désassemblé (?) qui tourne sur le CPU. Un bitmap, ça veut dire que 8 pixels contigüs sont rassemblés sur un même accès mémoire ... c'est souvent désagréable à gérer surtout quand on a un défilement horizontal: nos données devront être décalées et appliquées sur deux zones mémoire. Mais dans le cas de space invaders, l'écran est placé à la verticale (assez fréquent dans les machines d'arcade), si bien que nos aliens -- qui font justement 8 pixels de haut -- n'ont jamais besoin de décalages. Et pour les tirs, le 8080 est secondé par un registre à décalage manipulé avec les instructions IN et OUT comme s'il était un coprocesseur.

edit: on a aussi un sympathique article de quelques pages sur Toki dans ce numéro (mais qui fait plus figure de test/présentation dans un magazine style PCFun) et un dossier sur la création de Metroïd mais qui reste plus en retrait: quelques trivias sympa, une remise dans le contexte historique, mais c'est tout.