<![CDATA[Framebuffer]]>https://framebuffer.cl/https://framebuffer.cl/favicon.pngFramebufferhttps://framebuffer.cl/Ghost 5.130Sun, 22 Mar 2026 06:27:05 GMT60<![CDATA[The 2025 Sticker Set]]>https://framebuffer.cl/2025-stickers/690d19b3d8dc5f00011165d1Thu, 06 Nov 2025 22:02:11 GMT
The 2025 Sticker Set

dog (with horns)

Bonus: a Golden Retriever (with horns, a potat)

]]>
<![CDATA[Gracias totales, cohost]]>https://framebuffer.cl/gracias-totales-cohost/690d2d43d8dc5f000111661cMon, 16 Sep 2024 23:22:00 GMT

Gustavo Cerati, Argentinean rockstar of Soda Stereo fame (pretty much on the Olympus of music in Spanish) said on his farewell tour of 1997 (ironically, the year I was born):

"Not only (we) wouldn't have been anyone without all of you, but also with all the people around us from the start: some, even from the beginning. Gracias, totales."

That last phrase could mean a bunch of things. Total thanks, absolute thanks, the biggest and largest thanks of them all. And it became kind of their phrase after each concert.

It's also a phrase I use a lot to describe a deep level of gratitude for people very instrumental for myself, and those I care about. And for cohost and their @staff, there's no better word I can think of to say in this sour farewell.

cohost meant to me the clear point where I started to figure a way out. No more pity, no more excuses: I started working on myself and looking life a different way. And hopefully, get out of the capitalism hole that it is being marginalised because of being the wrong fur at the wrong place and time.

I felt like this was, in some weird and unexplainable way, a place with a LOOOOOT more like-minded people than anywhere else I've been. I hope I keep on finding these small treasure troves of happiness and empathy. Because, in these days of hardship, is what we need the most.

I am around the internet, same name (sometimes spelt framebuffers due to username being taken... But you'll notice the pfp). Discord (framebuffer), Telegram, and any socials probably in my webpage

Eggbug will live on.

]]>
<![CDATA[I made a game in a week: Premonition]]>https://framebuffer.cl/premonition/690d1cb7d8dc5f00011165edMon, 16 Sep 2024 23:06:00 GMT

Author's note: Cohost died later that year.

i did a game in less than a day

And you can play it, right now.
*not endorsed by cohost at all. it just happens to be pretty on topic.

Premonition

You don't know calm until you're knee deep inside the storm.

Please go rate it on the link above, and please be absolutely legit honest with it. I cannot be better if you sugarcoat feedback. Now, if you wanna know the whole story, carry on:


I made a game in a week: Premonition
A TV in living room.

Summary

You're in your house, surrounded by the calm of your memories, stored inside each of the things you own. Before you know it, they start disappearing until you are alone. And all you have left are the fleeting memories, and the realisation that these might go away.

Losing your mind is the most terrifying storm you can go through.

Gameplay

  • You are inside a house. It's full of things.
    • Get near them and some text will appear in the top-right corner.
  • Each game session is completely random. You will lose your memory quicker, or slower.
  • Each interaction throws a dice to check if you will lose an object or not.¹
  • You will never see everything in one playthrough.²
  • There's at least 25 objects, with 5 lines of text each.³
  • Each line concatenate with each other. They're shown at random, so you might get the same one several times, or all different in one go.
    • You'll have to play several times to see them all and piece out the story.⁴

Aim

  • Figure out who are you controlling.
    • If you're terminally online like me, you'll see a lot of small detail that you'll love. Send me a message if you find one out!
  • Experiment with a specific technique I have been trying to perfect for the last 3 months.
  • See if I'm up to the challenge.
  • git gud at code.
    • specially good at git. More on that later
  • Learn Godot on a project from cradle to grave. Well, maybe not grave.

I made a game in a week: Premonition
"It is a good memory from the past. One that will last forever etched like carving into the sand of an endless beach. But you'll always come back and re-write it, verbatim. This is the power of a home."

Lessons learned

  1. Modularity with focus.
  2. Your instrument doesn't matter if you know how to play it.
  3. Shit games are better than unreleased games.

The Subway approach

Spend your time building ingredients to cook different meals, but keep your focus on makind sandwiches.

Or, think modular but have a set goal in mind.

This is where my experience of almost a decade in the architectural battleground were essential to survival. We had these kinds of short development cycles with gruelling deadlines weekly. I was used to this. I quit because I had to do this whilst having a severe technical disadvantage on the construction side. This is why I hated it.

Not here. Computers are my natural habitat. And here's the single biggest knowledge transfer I can give to this field: build software like you'd make you a sandwich.

But Frame, what about Agile?

You cannot cook if someone's constantly coming into the kitchen to check on you. You are responsible of your meal. We were responsible of the lives of those living in our work.

And this is where BIM kind of has a lesson on how to approach game/development in general. Coordination requires ownership and accountability of your own work. Then, tasks have to be divided between disciplines and coordinated by a single individual that sees the forest from the trees. But each person speak a common language, and that accountability counterbalances the manager.

But Frame, how did this impact your game?


I made a game in a week: Premonition
Debug mode.

Playing by ear...

I did not read anything on what to do or don't on these kinds of competitions. I did not learn the axioms, laws, canons and customs of game development. I did not learn the sheet to this tune. I played 100% by ear.

Were I be less experienced on development of projects in general, it would have been one huge disaster.

However, as they say, fuck around and find out. And I did find out not only half-documented bugs on Godot that need some workarounds, but also that I needed to do split-second decisions hours before deadline.

...without an instrument.

I DID NOT START DEVELOPING GAMEPLAY UNTIL 8 HOURS BEFORE THE DEADLINE.

...but I had every single ingredient to cook something in half that time. And I did. How?

I planned around this by thinking: ok, I know my concept was the "deja-vu after realising your demise". I played to my strengths. I knew my strength was the environment and map. So, I did build a house using the same architecture tools I used to use. I exported to OBJ (not knowing my software did not export using quads, but triangles, so the geometry exploded on import. whoops). What can I do with that? uhhh, lighting! let's do lighting. What's the cheapest aesthetic I can develop that's also interesting? oh, the one I have been working on!

I cooked with whatever I had in the fridge.

In the end, though, what do I do with it? I had ~5 routes to go with. The idea was simple: add, remove and/or substitute objects inside the house, alongside their dialogue. That'll stretch the mileage out of the ~25 or so assets I had.

Yet, I didn't have a single route hooked up.

Well, screw it. I chose the one ending that was the more complex of them all. The more interesting, yet more code-demanding of them all: the memory loss route.

Turns out the theme fit perfectly with the sad demise of cohost, and the memories I'll have. And this post by @HunnyBon kinda sealed the deal.

In my defence, this idea predated me knowing about the demise of cohost by, at least, 2 days. It may have marinated on the back of my head, but it was not my first main idea. The main idea was In The Air Tonight Simulator 2024.

As a comment on my game said, it's pretty melancholic. It is, indeed, melancholic.

Now, the fun part: the coding.


I made a game in a week: Premonition
Ominous vibes.

RNG can be your angle or yuo devil,,,,

Just to be extra dramatic:

I DID THIS TO MYSELF, ON PURPOSE.

Who the hell uses **C#** on a **tight deadline game jam** when **you are working alone, cooking the whole 7 course meal yourself????????**

Like my 2nd year committee for my final project commented:

you're good on concepts, but too sophisticated to comprehend how to complete your ideas.

Dead right. But I am on my own turf, so I pulled the oldest trick in gaming history:

RNG. Your best fren.

Throughout gaming history, in general, there's been so many examples of RNG being the key of a good experience. It's one of our great tools at our disposal to generate replayability on a game. When I was pressured to deliver, I said, screw it, we going all the way.

The RNG system

I'm gonna reveal two things:

  • The game is heavily randomised. It rolls a difficulty level between 1-15, and each routine rolls a number between 1-20. If the rolled number is less or equal than the difficulty level, it follows the unhappy path.
  • Every exception thrown redirects to the dialogue generation code. Suddenly I didn't have any bugs! Several examples of this technique have been done specifically to avoid game-crashing bugs. Here is one I love the most, because I love the 68000's trap system..

I made a game in a week: Premonition
bug (3D model)

Ok, for real, why C#?

Playing to my strengths. And the fact I cannot learn a new language in less than a week. I am not a good programmer, but I am a diabolical programmer.

I'm gonna reveal a very simple, yet cringe-worthy and horrifyingly clever tricks I pulled.

Extensions are your best friend

In Godot, to print to the console, you need to write the following line:

GD.Print("eggbug");

However, I had to debug a lot of code, and I hated having to write that same line so many times. But wait a second, which feature of C# lets you attach custom behaviour to pre-existing classes?

Yes.

public static class LogManagerExtensions
    {
        public static void ToConsole(this string s) => GD.Print($"{DateTime.Now}: {s}\n");
        public static void ToConsoleAsException(this string s) => GD.PrintErr(s);
    }

The output is quite nice:

Godot Engine v4.3.dev.mono.custom_build.ffe9ec6bf (2024-05-09 03:33:34 UTC) - https://godotengine.org
Vulkan 1.3.212 - Forward+ - Using Device #0: Intel - Intel(R) UHD Graphics 620

2024-09-16 20:28:56: Scene loaded at /root/GameDirector/ScreenManager

2024-09-16 20:28:56: Loaded at: /root/GameDirector/SceneManager

2024-09-16 20:28:56: Path number: 0

2024-09-16 20:28:56: Moving to string path: res://Scenarios/Intro.tscn

2024-09-16 20:28:56: Screen2D = 1366 x 768

2024-09-16 20:28:56: Screen3D = 1366 x 768

Obsidian Framework for Godot
(C) Copyright 2024 Framebuffer. Version 2024.09.R2.
        Running on Godot 4.3-dev (custom_build).
        Architecture: x86_64
        Game: Premonition.Managers.GameDirector, Premonition, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
        Author: Framebuffer
        License: MIT Licence

2024-09-16 20:28:56: Instantiating new scene from string path: res://Scenarios/Intro.tscn.

2024-09-16 20:28:56: Intro screen tween cycle is: 26.823633
[...]

Let's see the syntax on the next example:

 public static void InstantiatePathAsScene<T>(this string scenePath, out T instance) where T : Node
        {
            try
            {
                Node n = GD.Load<PackedScene>(scenePath).Instantiate();
                instance = n as T ?? throw new ArgumentException(null, nameof(scenePath));
                $"Adding scene from string path: {scenePath}".ToConsole();
            }
            catch (Exception e)
            {
                $"Exception caught at: {e.TargetSite}\n \t{e.Message}\n \t{e.StackTrace}\n".ToConsoleAsException();
                instance = default!;
            }
        }

Godot works with strings for paths. I hate this. I also had to do this operation a lot: taking a scene (basically, a class at this point), and instantiating it into the screen. I also needed to keep a reference of it to access it directly. Godot works using a tree-like structure for all objects on your screen. I have spicy opinions but not now.

I extended the string base type to add a method to instantiate Godot scene files from their path, directly to the tree.

You can also see the syntax of the aforementioned ToConsole() syntax. I could've even extended Exception to implement ToConsoleAsException(); and actually have a decent stack trace. That would've saved me from one of the clutches of all time.

See, choosing C# was not a myopic choice.

Heh.


I made a game in a week: Premonition
Let me cook.

something something perfection

My game has a couple bugs. Big ones. Ones that I could not fix on time. It's now more of a tech demo than it was when I compiled it. Something happened, and I got trolled last minute. But it's not the first time I had this happen. And I am at peace with that.

Cause I did it. I did what I wanted to do. And, most importantly, I learned so much that for me, the most important thing is the feedback I get from the people around itch.io submitting and rating.

One said to me just now that it's like a surreal museum, without any gameplay. Why is it on a game jam?

Indeed, I fucked up. If it's not evident on first sight, then I failed to explain my concept and it is unacceptable. Basic mistake.

But I went into this expecting this to happen. It's not an excuse for bad quality, and don't get me wrong, I pushed for the highest quality I could do. But it's highest quality a newbie can do. And, in their words, at least the vibe is right. And the visuals are unique.

I take that as a W on me on visuals, at least.


I made a game in a week: Premonition
I don't know what lies ahead.

The future

First, this is gonna go somewhere else. I don't want to lose it.

Second, gonna try to make Godot C# less bad. For me, and anyone who really cares anyways. I wanna see good quality FOSS thrive. Godot is the very rare case of FOSS not being a dog's dinner like GIMP, impossible to pick up without a tutorial like Blender, and usable like Audacity. I really really wanna see more of it, and now that Unity lost its trust... I bet on Godot and I do not regret it a single bit.

And third... if you really want to make this happen... idk. I need all the help and direction I need to get into this. Or idk, really. At this point I am flying blind; but the missile knows where it is, that is because it knows where it isn't.

]]>
<![CDATA[Some peculiar things I found on MacNosy]]>https://framebuffer.cl/macnosy-pecularities/690d3030d8dc5f0001116646Tue, 16 Jul 2024 04:00:00 GMT

Here's a Wikipedia page on it.

I know this is software that many might've used, or that it's still being used for homebrew/modding/maintaining(?????) Classic MacOS software.

But what surprised me the most was the verbosity and tone of most of the UI and documentation. Here are some of the spicier ones I was able to find, with messages transcribed:


Some peculiar things I found on MacNosy
"The Memory Manager is running low on the Good Stuff. The penalty for further abuse is blindness."

Some peculiar things I found on MacNosy
"Using discilpine is hard enough without Apple Programmers violating fundamental principles of Computer Science."
Using discipline is hard enough without Apple Programmers violating fundamental principles of Computer Science.

Here are some examples that I have discovered in the last couple months.

1) Sound Mgr V3.0 Does a DisposPtr (or handle) on a Structure and then disposes a member of the Structure.
Discipline with Handle Zapping ON will catch this error.

Wondering what you did wrong?? What part of your body to scratch for mental stimulation ??
Turn towards Cupertino, and bow to the gods who wrote this wonderful code.

Some peculiar things I found on MacNosy
finder.dsi - turn off Discipline for it as it violates so many mac rules as to be a pain in the Ass

Some peculiar things I found on MacNosy
Very subtle yet very conspicuous.

The funny thing here are the Error Messages verbosity levels: Slightly Salacious and Whip Me. Quite a kinky dialog box to start The Debugger(tm).

]]>
<![CDATA[Wait, the PSX has volumetric lighting?]]>https://framebuffer.cl/psx-volumetric-fog/690d2e61d8dc5f0001116633Tue, 16 Jul 2024 04:00:00 GMTWait, the PSX has volumetric lighting?
An early test of it.
Wait, the PSX has volumetric lighting?


Wait, the PSX has volumetric lighting?
A custom build of Godot with a PSX shader applied to the camera.

Did you know that the monitors at the back are 21" SGI GDM-5411, there's a Macintosh IIfx, and behind the boi there's a Quadra 950 and a SGI OnyxII modelled as placeholders (just a polygon with their dimensions).

And yes, everything is 1:1 scale. The desk is 150x80cm on each arm, and the whole room is around 4.5x5m

It's way too big but I needed to mess around with the collision system.

]]>
<![CDATA[I went into a 5 hour hyperfocus sidequest, because I had to know if this scene was accurate]]>https://framebuffer.cl/the-net-wolf3d/690d3348d8dc5f0001116669Tue, 16 Jul 2024 04:00:00 GMT

This is a much more light-hearted blog post. Skip if you're for more serious stuff.


So, I wondered after the last time I watched this scene couple days ago

I went into a 5 hour hyperfocus sidequest, because I had to know if this scene was accurate
The Net (1995), more or less at the beginning of the film.

The question: Is it valid 68k/PPC ASM? Is it from the game itself?

The setup

Basilisk II, Quadra 900, 68030+FPU, 128MB (!) RAM, System 7.5.3
Because Basilisk is finnicky, to put it very, very very mildly, I couldn't trigger MacsBug directly, so I used MacNosy II to debug. Alongside this, I got ResEdit to complete the software kit to tear Classic Mac OS software down.

The process

  • Get Wolf3D for Mac OS.
  • Do the satanic incantations to get MacNosy to run. I don't know anything about what I did, or how I should do anything, but I opened the Data Table. I mean, there's some ASM there.

The results

  • If you crop the window to the first 3 icons on ResEdit, it matches the icons!
  • The instructions, at least the ASCII, indeed is valid 68k ASM!.
  • Is it from the game? I don't know, couldn't make it run any further. Maybe if I had more braincell reception I could go further but it's 01:30am.

Some extra observations

  • It looks like it's running on a Power Macintosh 8xxx. On the final retail version of Wolf3D you have fat binaries. If I ran it on SheepShaver as a PowerMac, it would've defaulted to the PPC version for obvious reasons. This is why I used Basilisk II and a Quadra ROM instead.
  • If you get an A/ROSE unimplemented trap, it's because it installed an extension for the Apple Real Time Operative System Extension. It came with the networking drivers. Delete it before rebooting, or don't install networking support.
  • About A/ROSE, it's a fucking Real Time OS, with pre-emptive multitasking when the host OS didn't even have it. And even funnier, it's meant to run on 68k's inside NuBus cards to "make it easier to develop NuBus expansion cards for the Mac." I find it so overengineered to have such a level of computer exuberance and debauchery for your stupid Ethernet card. Truly a fascinating sidequest to someday come back to.
  • I'm surprised about the accuracy of this film to System 7's UI. They had to have someone coding or recreating every scene, or they indeed had some real systems analyst doing the scenes. You can see real Chooser menus, real MacsBug, real Windows 3.1 terminals. Now, of course you have some mocked up things on top... but they look convincing enough for someone that knows and notices those details.
  • Yes the monitor there is, indeed, a Radius monitor. Gotta have the best gear for hacking!

I could go on but my boyfriend would complain that I stayed up too late. Oh well...

I went into a 5 hour hyperfocus sidequest, because I had to know if this scene was accurate
]]>
<![CDATA[The Net (1995): my favourite movie of all time]]>https://framebuffer.cl/the-net/690d36d6d8dc5f0001116693Sun, 14 Jul 2024 01:02:00 GMT

I can't watch movies.

I cannot recognise faces so I get lost pretty damn easily with characters. I have an attention span where every small external stimuli is a non-maskable interrupt. But this is one of the few movies I actually watched on it's entirety, several times, and I still love it.

I saw this movie probably 15 years ago, as a kid that was very into retro tech in the mid 2010s. Had just this recollection that it had so many old computers that I loved it, despite not caring about the plot.

Now, being 27, I watched it again. I know more about old computers. The renaissance of this era of computing is in full swing. More knowledge is public about the tooling, workflows and how they were used back then.

I now see it as a love letter of the 90's. I kinda wanna delve deeper, maybe even do some kind of video essay on this topic. There's so many details that are actually closer to being accurate, yet it falls into the same movie tropes that break that immersion if you know what they're doing.

If you like 90's retro tech, I recommend this snapshot of 1995's "dramatized 2h-long Computer Chronicles film"

]]>