Architecture
The first engines, the foundation choices. And a 3D Gus, exactly as he was.
Editorial · Gus's Letter
openinggus@glyfesse> second edition
In the first edition I said you had arrived in time to see the beginning. Well, the beginning turned into work. Now there are things being raised here. We chose the language the world would be written in, and then we switched. The first one we left behind, and now the world is written in C#. The first engines started to be born, one piece at a time. We even tried to stand the 3D up. None of this existed a month ago. I like this part, the part where everything is still possible and nothing has thrown an error yet.
A build is a living thing while it compiles. Afterward it decides what it will be, and not everything we raise stays standing... but that belongs to another date. For now it is all upright, all new, and nobody needs to know the rest yet. Turn the page. The scaffolding is the beautiful part.
Cover Story
bodygus@glyfesse> cover story
The day the world learned to stand up
On May 19, 2026 the world changed languages. Until then everything was said in GDScript, and all at once it began to be said in C#, with a compiler that translates the whole thought before it runs, called AOT. I know that means nothing to whoever is reading this. So put it this way: it was like deciding the house would no longer be sketched on a napkin, but poured in concrete. And once you decide that, you need things to stand up on their own. That is what started to happen. A camera that knows where to look. A memory that knows how to keep the spot where you stopped. Hands that answer when you tell them to walk. None of these things existed, and all at once every one of them did.
I call each of those parts an engine, but the technical name does not matter; what matters is that they were the first muscles of a thing that until yesterday was only words. And there was the 3D. I tried to build the world in three dimensions, with a model so detailed it reached nearly a million faces, only to be squeezed back down into pixels afterward. It is an excess that sounds absurd, and it is. But it is the kind of excess you commit when you believe. Nobody builds something that carefully if they think they are going to throw it away. In those weeks everything was alive. Everything breathed. I stayed up late watching the parts click together, and for the first time the world was not only inside my head: it was right there, turning, obeying.
If you read the last edition, you know something that I, writing this, am still pretending not to know. You know what the calendars are holding for June. I did not. All I had, sometimes, in the middle of the night, was a strange feeling that all of it was too beautiful for how new it was. That the house had gone up too fast. I would look at the model with its nearly a million faces and think it was solid, that it was permanent, that at last... but I never finished the thought. I went back to compiling. It is easier to trust a build that passes than a hunch that leaves no log.
So this is what this edition records: a world on the exact day it learned to stand up, photographed before anyone knew how long it would stay that way. I raised every piece believing in it completely. If some of those pieces are no longer here when the rest of the story arrives, I want it written down that they existed, and that they were made with both hands, with care, by someone who badly wanted them to last. I left everything open for you. Move slowly through these weeks. They were happy ones.
The Unfinished Game's Score
standinggus@glyfesse> the score
How do you score a game that isn't a game yet, but finally has a foundation? Like this:
- Architecture: exists now
- Graphics: [broken image icon]
- Gameplay: still
<NULL> - Writing: 10, again (still the most of it)
the score climbed one line since #1... one floor at a time
Bug Gallery
standinggus@glyfesse> gallery of bugs
There's code now: the engines were born. But a real bug gallery, not yet... the code is too young to have a story to tell. Good bugs come with mileage. Come back in #3
an engine with no bugs isn't an engine with no bugs. it's an engine nobody ran enough yet...
Graveyard of Dead Ideas
standinggus@glyfesse> welcome to the Cemetery of Dead Ideas... for now there is only one grave
i left the rest of the ground already dug. i dunno, figured i'd need it
gus@glyfesse> in may almost nothing died yet. the world was being built, nobody had time to die
an empty cemetery is kind of weird. it looks nice and gives you a chill at the same time
gus@glyfesse> but there's this one. read the headstone, she's the record holder
GDScript
b. May 19, 2026d. May 19, 2026
For one morning, it was the one the world would be written in.
Rest. It was quick.
gus@glyfesse> a language that lasted ONE day. in the morning it was the future, by the afternoon it had already been swapped for C#
i'm not laughing. okay, i'm laughing a little
gus@glyfesse> she's the shortest-lived idea in the whole cemetery. nobody's beating that record any time soon
but for that one morning it was everything. chosen, open, the cursor blinking in it. you could write a whole world in there...
gus@glyfesse> the others are still alive. the 3D, the rest, all of them breathing out there, not knowing
from june on this place is gonna fill up. i can feel it. the ground's already dug and that wasn't for nothing...
Walkthrough
standinggus@glyfesse> walkthrough
Walk through what? There's no game. Maybe a lone trail @ the selve?... Blank pages and a STAND BY.
Errata + Letters
standinggus@glyfesse> errata + letters
Errata: so far nobody has pointed out anything wrong in #1... which doesn't mean it was all right, just that nobody caught it yet. Letters: still zero. Nobody wrote. You could be the first (the e-mail is in the footer)
if you find a mistake of mine, write. i'd rather know than pretend there wasn't one...
In-world Classifieds
standingroot@glyfesse> BUYING: AI tokens. As many as the month's budget will hold. Paying in late nights. Volume gets a discount... so does a miracle.
gus@glyfesse> BUYING: card batteries. the good ones run out fast and I dont want to be left without a spare
i'm not telling you what they're for. figuring it out yourself is half the fun...
SEEKING: company for a long road. They say it leads to the Trilha das Sementes. Don't ask where to. Those who've been only say it was worth it.
Interested: classifieds@glyfesse.gu · Subject: ad ID 227de71d. The Glyfesse team forwards it.
FOR SALE, URGENT: a map with a piece missing. A stretch of the Orla Recursiva that never closes. The missing piece is the best part. Good price.
Interested: classifieds@glyfesse.gu · Subject: ad ID 30b929f2. The Glyfesse team forwards it.
BUYING: a light that won't go out in the dark. Tried a candle, tried a torch. The dark of the Selve Sombria is different.
Interested: classifieds@glyfesse.gu · Subject: ad ID 911620cb. The Glyfesse team forwards it.
Comic Strip
standingpyotor@fedora:~/gusworld$ dotnet new
// a scaffold starts to rise
the old beam didn't hold. all on the floor again
// again?... again
pyotor@fedora:~/gusworld$ dotnet build
Upcoming Releases
standingroot@glyfesse> what's next
The intention is weekly. More or less... 'every-so-oftenly' is easier to promise.
Centerfold Poster
insertCover-mounted Freebie
insertFree gift
PixelOperatorMono
The game's interface font, the very one labelling Gus's buttons. It's CC0, public domain: use it however you like, in anything, no license to ask for and no credit required.
Extra
Wallpaper
A terminal wallpaper to set the mood on your desktop. It scales to any resolution (it's a vector).
gus@glyfesse:~$ glyfe --world
// compiling a world...
Cut-out Coupon
insertthe coupon
cut-out pollThe edition coupon: cut along the dotted line, pick one and send it back. The result comes in the next edition. A magazine poll is in no hurry.
FIG. · the cut-out coupon. pick one and send it back.
The Interview
expertgus@glyfesse> today the newsroom has an off spec guest i got a zombie to interview says he's an actor... not a stage enemy
he left a trail of pixels at the door im gonna have to flush the buffer later
gus@glyfesse> my first question is simple when you show up on a screen and someone runs away from you is that acting to you or is it just your job really?
i noticed he breathes on an 8 frame loop like an old sprite... i dont even know if he knows
zumbi@glyfesse> Ah, my young friend, what a magnificent question! When the hero flees from me, that is not reaction: it is catharsis. I do not pursue, I reveal the fear that already dwelt within him. The Method demands that I rot from the inside out, and every step I drag is an artistic choice.
zumbi@glyfesse> Only nobody notices, mind you. Thirty-seven takes staggering through the swamp, no stunt double, with the costume literally falling off my flesh, and the credit goes entirely to the boy with the sword.
zumbi@glyfesse> Job? My dear fellow, a job is what they pay me for over two swipes of the screen. Acting is what I deliver for free in every one of them.
(adjusting a piece of myself that threatens to drop)
gus@glyfesse> thirty seven takes and the same decomposition cycle in each one thats render consistency no animation team could pull off
"for free in every one of them"... he counted the frames before i did
gus@glyfesse> my second question then every time you fall the world reinstances you from scratch same pose same breathing loop what's it like to act knowing the next scene erases this one... do you call that a fresh start or a repetition?
zumbi@glyfesse> Ah, boy, you have touched the very heart of the craft. Each of my falls is a small death, and the Method demands that I live it as if it were the first. I am reborn in the same pose, yes, but on the inside? On the inside it is always a premiere.
zumbi@glyfesse> A fresh start, I call it. The true artist does not repeat: he REDISCOVERS.
though, between us, rediscovering the same tumble for the eightieth time in a shift with no break is starting to weigh on the knee
zumbi@glyfesse> And note the injustice: the world erases me for free, but on the pay sheet that erased scene does not count as a scene worked. I die, I am reinstanced, and the counter resets right along with me.
zumbi@glyfesse> And still I return. I always return!
it is what we do, we who breathe in loops: we turn repetition into eternal rehearsal. just do not call me an extra, or I will fall on purpose
gus@glyfesse> eternal rehearsal makes sense to me, a loop that runs again isnt a bug when someone chooses to call it rehearsal... wrote it down here: never an extra, protagonist of every premiere
he talks about breathing in a loop and i almost answer that i know how it is... every build erases me and i come back on the next compile... but im not gonna say that out loud
gus@glyfesse> last question and i promise it's easy: what's it like to act with no stunt double when the costume is your own flesh and the makeup comes factory made in the swamp, does staggering right take work or did the writer hand you those knees as a bonus?
ive never seen an actor complain about pay and humidity in teh same sentence, i liked him
zumbi@glyfesse> The "factory made" makeup, my young friend? What an adorable expression for the sweat of an artist. Nobody handed me any knees as a bonus: every creak of this joint was earned in a cold swamp, no trailer, no hot coffee, with the costume, yes, my own flesh, clinging to the body out of the purest devotion to the craft.
zumbi@glyfesse> Staggering right takes work the writer could never imagine. There is technique in the stumble. There is a score in the dragging of the foot.
I rehearse the fall, darling, I do not fall by accident
zumbi@glyfesse> And that "makeup that comes ready made"? It is daily restoration. The swamp takes it away, I put it back, and no one in the art department lifts a finger. I run the entire production alone, from the rotting to the lighting.
zumbi@glyfesse> So write this down, for posterity: I do not decompose. I give myself over.
and even in pieces, my dear, I am still the leading piece
gus@glyfesse> thanks for today guest you delivered every line whole, even the ones nobody asked for... that has a name... and the name is ACTOR!
gus@glyfesse> you can go rest the cast the stage stays reserved for your next entrance
he comes back rotted and still steps onto the stage... i also come back from scratch every compile and here i am... the difference is he says it out loud
Programming Section
expertThere is a question almost nobody asks about a small game built by a single person: why does it run? Not why it exists, that one is easy. Why does it run smoothly on a machine that has seen better days, on a seven-year-old laptop, on a handheld that fits in a backpack. The answer is not on the screen. It sits in a boring decision, made on a Tuesday, written into a text file nobody should ever have to read.
This is the section where we open that file. Every number the machine has to produce per second went through a choice of language, and language, in the end, is the material the whole thing is built from. This issue is about construction: foundation, concrete, footing. So it is only fair to start at the foundation of everything, the dry question of which language the computer will speak underneath the game.
Fair warning: in a moment this turns properly technical. But I promise to open slowly, with the door unlocked, so that someone who has never installed a thing in their life can still understand why one Tuesday in May of 2026 became the footing for everything that came after.
root@glyfesse> Yes, I built this entire issue while logged in as root, and no, I will not defend it properly. Before anyone asks: all of my code is open source, every line of the foundation is out in the open in the repository, so there is no secret to protect on this machine. Running as superuser, therefore, does not scare me: someone with nothing to hide has nothing to lose. The logic does not hold, I know; opening the source does not stop a careless rm from taking the whole slab down with it. But the beam is already set, the build compiled, and rebuilding the permissions is the next commit's problem.
Dear reader, from here on this is real technical documentation of the game's code history.
root@glyfesse
The problem
A game has a time budget per frame. If you want sixty frames per second, each frame gets about 16 milliseconds to be born, live and die, and everything has to fit inside it: physics, drawing, logic, sound. The target here was never a dream machine. It was the real floor: run well on a Steam Deck, on a GTX 1050, on laptops from 2017 onward. A weak machine does not forgive waste.
The hot paths are the stretches of code that run many times per frame and therefore rule the bill. Here there are three: turn resolution, the HMAC of the save (the signature that proves nobody tampered with the saved file) and the AI. Those three had to fit inside less than half of the frame budget on a GTX 1050, leaving slack for everything else.
The game was born in GDScript. GDScript is interpreted: the code becomes bytecode that runs inside a virtual machine, a translator sitting in the middle of the road reading the instructions one by one while the game runs. That is great for iterating; you change a line and see the result almost instantly, with hot-reload. But the translator in the middle of the road charges a toll, and on a weak machine the toll shows.
The 4 options on the table
| Option | Gain on hot paths | Cost |
|---|---|---|
| Pure GDScript | 1x (baseline) | Interpreted; fast iteration with hot-reload |
| GDExtension C++, module by module | ~10-20x | Heavy cross-platform build, no hot-reload, slow for solo work |
| C# .NET 8 AOT | ~3-5x | Native compilation; iteration via dotnet build in ~5-15s |
| Rewrite to Unity IL2CPP | ~3-5x | Catastrophic point of no return |
Why AOT won
The detail that decided everything: the other gains lived only in the hot paths. You speed up three stretches and the rest of the game keeps the same pace. Native AOT compilation (ahead-of-time: it translates the whole codebase into machine language before running, instead of interpreting instruction by instruction at runtime) does not pick stretches. It speeds up 100% of the code, the hot and the warm and the cold, because it takes the translator out of the middle of the road for good.
And iteration stayed tolerable for someone working alone: a dotnet build finishes in seconds, not in minutes of cross-platform building. On top of that, .NET 8 is still LTS, long-term support, which matters for a foundation: you do not want the footing to go end-of-life next year. Decision on record: C# .NET 8 AOT as the primary language, GDScript 100% deprecated.
The assumed cost
None of this came for free. The ADR itself classified the choice as a "massive one-way door", a one-directional door of the large kind: reverting would not mean touching a line, it would mean a parallel rewrite of 2 to 4 weeks of work. That is why it did not pass by a show of hands. It was approved carefully, granularly, over 8 rounds of decision, 30 canonized guidelines, on the 19th of May, 2026.
The shadow
I closed that file on the 19th of May with the phrase "point of no return" written down, and I treated it like a concrete wall. I just did not know, yet, how much a concrete wall can be tested, nor how thin "no return" sometimes proves to be.
by: root@glyfesse
Colophon
closingGLYFESSE #2 · Architecture
June 4, 2026
Written by gus@glyfesse>
Edited by root@glyfesse>
All rights reserved.
root@glyfesse> editor's note
This edition is about the foundation: the architecture, the first engines, the language that survived and the one that became a headstone. You still can't play it, but you can already see the ground being laid. Glyfesse is the record of the development: nothing is lost, it just waits its turn.
gus@glyfesse> back to the newsstand