Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Intuition: a dead-on-arrival game post-mortem.

UPDATE

Results are in. The overall I did expect, graphics probably so, but I got surprised on the Originality.

My thoughts

For Premonition I had the fear of being too predictable if I went with the “In The Air Tonight” theme. This time, I went with “Superhot x Mirrors Edge”. The concept in general was actually pretty good, but the execution was so flawed it tanked the whole game. With good reason.

I have a game with 2.25 overall score, delivered raw, 3 seconds before the deadline. Have I done this in college, I would’ve been absolutely crushed. I’ve never delivered anything playable even.

But I feel proud.

And not because I applaud mediocrity. On the contrary. I made it to the finish line, despite having everything going sideways. I went here to do a skill check on myself, and I accomplished my goal. I did not play to win at all, and it’s ok. I am inching closer to having a playable game submission, and I know I have the chops to do the rest of the work pretty well.

I don’t want a perfect itch.io page. I want to claw myself into this industry whatever it takes, because this is the place I belong. And despite employers wanting a perfect candidate, I know there’s no perfect studio. Not that they’re hiring anyways. I will be part of the 0.1% that comes out alive from the grinder.

Thanks for everyone for their comments and honest feedback.

I’ll be back.

Hopefully, this time, with an actual game.

Now, back to the show:

Crunch and clutch

mood

Despite game development being more akin to a marathon, game jams are the 100m sprint version of that. You release your whole energy on a set amount of time, racing to the finish line. However, managing that energy (and all your resources for that matter) is key.

I think that uploading a submission 3 seconds before admissions close is, pretty much, something that sums up the whole experience. Crunching a game, being so close to giving up, and clutching a prototype three seconds before the clock strikes.

The development experience

You were supposed to escape these.

About the game

The idea was simple: Superhot but it’s an earthquake simulator. I made two severe mistakes on my last game: did not follow my instincts and compromised my idea for a worse one, and leave gameplay to the end. This time, the whole concept started at gameplay.

Pause was interpreted as a timestop mechanic: you freeze, time freezes.

The sounds stop as soon as you stop, and you had to figure out a way to escape the whole mess, and follow your intuition to know where to go. There were going to be light cues, it would become silent when you stopped and then noisy and chaotic when you started back up. It was an awesome concept! I was going to use my controller’s raycasting to do a Portal-like UI, where you pointed at things and text shows up. The game has some routines to change the gameplay depending on time of day or other date-related variables. I had all three wildcards: silence, UI inside game and advent calendar; all planned out.

Then also, I committed a new sin: using experimental self-built tools to build your game.

The technical hurdles

it is not supposed to look like this

TL;DR: Just like my first game, I pushed Godot far enough that I ended up in uncharted territory. I have some of the steps documented, and I might do something about this. Are there better solutions? Yes. But I didn’t know them. Now I do.

The engine

One of the features radiant-fork implements, is new color/light mapping options. Here’s Tony McMapface

I built the game using a fork of Godot 4.3 RadiantUwU/godot at refs/heads/radiant-fork that has some new experimental features for graphics, alongside some other new things I haven’t touched. Mainly, it implemented PR 79731 that was the main reason why I ran a custom self-compiled engine for Premonition. I wanted a specific vibe that the stable release did not let me produce. Because of this I went into a gigantic rabbit hole.

The macOS templates

hackerman.jpg I spent a good couple days I could’ve spent doing an actual game because of a very stupid reason: I did not want the console to appear on the released games. On hindsight, it was a very very stupid thing to have hyperfocused on. The artifacts from that fork (or, the files you get from compiling it through GitHub actions) were working as intended.

It took me a couple hours exporting the release templates for Linux and Windows, not like I’ve done this before… but the game jam required all 3 platforms and/or web. I cannot do web because I write in C# (long story short: technical difficulties with Godot and .NET itself). And I run custom software. So I had to roll my own templates and editor. No issues, this was the intended choice after all.

But then everything went wrong. This is too long and deserves its own post.

Collision

You can see a lot of hard edges. This is not good. Oh this one was horrible. This was my first attempt at rigid body physics, and also a completely different new map for what I’ve been working on. It had hills and slopes. This meant that I had to work more with collisions and new geometries. Look at the gizmo. The geometry should match its orientation.

  • First mistake, terrain with absolutely horrible curves.
  • Making the geometry skewed away from 0. This means that everything had to be turned a couple degrees to fit. And, of course, nothing did.
  • I accidentally made a world that was about 800x800m. An architect failed to measure the scale of a space. I can’t excuse myself from this, it was egregiously wrong.

This meant:

  • I had horrendous snagging issues. Apparently there’s issues with pill-shaped colliders and uneven surfaces that were mitigated by… compiling with double precision. Guess I have to compile the engine!
  • It was a pain and a half to add collision boxes. They had so many hard edges that I would snag on nothing. I couldn’t figure out all the places I snagged on.
  • I redid the collision boxes at least 3 times. I could’ve used that time to build a better designed level.

Scope creep

Day/night cycles! I got too confident with my boilerplate and the experience from Premonition. I thought I could aim higher, but honestly, I did expect the worst. Even that surpassed my expectations of how bad can it get.

  • I transplanted the codebase from a remake of Premonition (where my controller came from!). This means that this wasn’t a greenfield codebase. It had code that wasn’t really functional, and that wouldn’t be necessary (and would end up being a nuisance anyways).
    • And, just like before, I ended up rewriting everything the day before anyway.
  • This meant that I got too confident that I could port my codebase to a different fork. Nope.
  • I had plans to do a day/night cycle, which is still there btw.
  • And I was building thinking about features that I didn’t implement yet. Which goes against my experience.

But this is not the worst, oh no.

Cooking late

This should not happen this late into the deadline. I thought that, if I had the ingredients ready, I could cook faster and deliver on time. Now, yeah this is true, but you also need to know that with new recipes come new cooking times. I was not ready for the cooking of a game where its toolchain wasn’t ready to go at the start.

I very clearly said on the Discord: folks test your game early and export it often. Yet I kind of didn’t hear my own advise. However, this did save me. More on that later.

The takeaway is that I needed to adjust my cooking times and know when to cut it off and deliver. I thought I knew but my own arrogance came hunting me back and kicking my own ass back in line.

The saving grace

This is also not good. This is what ended up killing this game, and how I mismanaged it. The single biggest thing I learned (and that other game devs have told me) is to export often and early. Alongside using version control for your code, you need to make sure you can export an executable that’s playable. Maybe if you’re very lucky, playtest it. I test on prod so I don’t even playtest. If the big ones pull day one patches, why can’t I?

Two things: I did early tests and I found out that the templates on the fork were all debug templates. This is what led me to this rabbit hole on the first place and ended up in this horrible mess. However, I did know how these worked.

I did not test it often. I tested it the day of, and it would close on start. Turns out that, for some reason, I needed to check the Embed project exports on the dotnet side. The only way it ran, is that I also delivered the exact same libraries I built it from. On hindsight, sounds reasonable to static-link a game that was built on a custom toolchain to begin with.

At 4PM, without a working game, I was about to give up. Then my dad, of all people, told me “hey, having an imperfect game out is better than a perfect unreleased one.”

Hey that’s also the advise I give to other devs! Now I’ll do as I say!

An example of an issue that I solved by accident very late into the development cycle, and that meant that I had to rework a lot: lighting. I managed to implement the gameplay (falling rocks that hit you, and block the way to the lighthouse), a signalling system to make them turn on, and the code to switch environments at random. I also figured out the culling issues I had on Premonition, where light leaked through the 3D meshes. I had to click reverse culling in the shadows tab on the light settings.

This is why, despite having been 30+ hours awake in full crunch mode, I kept on going. Now, the best part, is the delivery.

Three seconds away

The infamous picture.

  • 16:30 - I start wrapping up, and making the game work inside the editor.
  • 17:00 - I started working on the gameplay: spaghetti’d me the signalling system, the spawners, and using the debug code to enable some of the randomisers I had, to have at least something happen.
  • 17:15 - I start packing it up.
  • 17:20 - Oh no, it doesn’t work.
  • 17:25 - I switch templates: turns out the other one I had, I accidentally compiled the 4.4d6 version, the latest dev version. And, of course, since the fork used another version and codebase altogether, it was incompatible.
  • 17:30 - The debug template works, tho.
  • 17:31 - I start downloading the templates from the artifacts on GitHub. Ok, they work, but they show the console with all my debug messages. Screw it, to prod it goes!
  • 17:40 - I had to compile several times because it kept on failing on something. I finally got a working set.
  • 17:45 - Had to redownload the templates again.
  • 17:50 - Went to the itch page and start filling in the submission.
  • 17:51 - Ok, I have the files, I package them and while they do, I upload them, write a quick blurb, and then push the button.
  • 17:55 - Oh crap oh no oh golly my submission isn’t there on the itch page, I have to upload it again.
  • 17:56 - I go through the submission thing again, and upload the whole game again.
  • 17:59 - Now it appears on the tab, but I have to fill everything again!!!!!!!
  • 17:59:54 - Wait, Edge autocompleted my last submission!!!1
  • 17:59:55 - I press the tab button faster than I’ve ever done in my life.
  • 17:59:56 - I press upload.
  • 17:59:57 - I don’t have the upload button anymore. It went through. I check the submission page… and lo and behold: three seconds remaining. I may be probably the last one to submit before the official deadline.

I am writing this and my heart starts pumping back up. I have done this before so many times in college. Crunch culture is super common in design fields, including those far removed from gamedev. However, knowing how to deal with this pressure and have clear enough of a mind to execute the last ditch effort you planned from the start… that’s knowing how to clutch a probable disaster. I don’t like to light my own candle, but this is probably one of my best talents I can possibly show. I have worked under pressure my whole life. My heart can be at 180, but my mind is so clear and composed that I can manage these quickly developing disasters like nothing. Maybe this is why I like aviation so much.

why, tho?

Hyperfocusing on the wrong thing.

Lessons learned

This was something that ended up being scrapped: NPC’s

1. Learn when to give up and switch to another plan

I had a lot of time. I had pretty much all the boilerplate I needed. I had the idea locked from the start. It could’ve been an easier ride. And I blew it because I was so hellbent on getting something the way I wanted, I got blindsighted onto a path that wasn’t feasible. I was hyperfocusing on the wrong thing.

I was doing this, whilst telling to myself: “hey this is the worst geometry I’ve ever done”.

Fucking it up with full knowledge of the situation is not an accident, it’s negligence.

POV: you’re a desperate dev.

2. Have your emergency checklist memorised

I namedropped aviation up there, and they’re one of the best sources of wisdom for leadership, management and safety. I had a safety plan just in case, but I kind of walked myself into that situation. However, I did know how to recover. This saved me from not having something to have real third-party feedback to post-mortem at all.

Having to go through this was a red flag after all.

3. Have stricter checkpoints to ditch ideas, and be less afraid to ditch early on.

I had 2 more days compared to the Brackeys Game Jam in September. I had the time to rebuild the whole thing for 4.3-stable. I didn’t. I stuck to an idea that wasn’t worth it at all. Looks don’t make a game. I had to skill check my gameplay knowledge. I screwed up that chance. I doubled down on the same mistakes I did.

It was fine

4. Learn how to Minimum Viable Product

I thought I knew. I don’t. I had to have a complete working prototype of the full gameplay idea in the end. Nobody would really care about the graphics anyway if the gameplay was interesting. I could’ve spent the time balancing the physics, the firing rate of the projectiles, the physics, the level design… the game itself. This is what a game jam is. And I am so scared to go into paths I am not familiar with, that I stick to what I know, and what my namesake is in the end: pretty graphics.

Again, fucking it up knowing about it is negligence. But doing it on purpose requires intent. And I did not have the intent of delivering a bad game. This is where I draw the line.

I knew the theory but didn’t have the practice.

And I am not afraid of saying that.

The idea was: you had a normal day, and then you had to escape from things at night.

5. Not being afraid of failure

Failing to deliver a game is not worth of ridicule and public shaming. It’s a game jam. Again, I might be negligent but I didn’t have intent, therefore it is not a crime sort of say. I say to myself that I did this to push myself to the technical abilities of mine, I wanted to try something new, this was my first game doing this thing

Yeah, sure, nice and all that. But this is not the important bit. The important bit is that _I actually did not leave this as a nice project file on my hard drive, but I have a body to autopsy, a body to post-mortem. I don’t feel bad or anything, in fact I am proud that I actually have two very imperfect games to showcase, that anyone can download and see where I come from. I don’t believe that anyone strikes gold first try, and if so, they’ll fuck it up later on in some way, shape or another. Because if I have something human inside this flesh vessel, is that I know how to screw it up, but I also know how to recover and maybe even learn from it.

What’s next?

where was I, ah yes! Two Tribes. This game is getting spicier each day. I am doing the Pirate Software jam. In fact I did this because I wanted to warm up to that. I came out with so much more knowledge, experience and boilerplate, that I feel more than prepared for anything that comes.

I am actively working on Two Tribes, the RPG where you don’t have to fight anyone, but yourself. It’s the place where most of my heart and souls go after all. It is shaping up to be something insane, so check out my Bluesky at https://bsky.app/profile/framebuffer.xyz. I’m way more active there.

As I casually mentioned above, I release some of the tools I develop for Two Tribes or my game jams on GitHub and now on the official Godot Asset Library! I am doing many more as I go, and I even used the storefront addon myself and I was surprised about how easy and how well it worked. There are several C# assets that, honestly, they don’t even work or they screw up your .NET project/solution. This one is, quite literally, drag-and-drop. If you develop in .NET and you need a quick solution for your 3D games, check it out at https://github.com/Framebuffers/SharperFirstPersonController

…but wait!

Notice that I mentioned my controller, but it’s technically not there in Intuition. I did use it on that game… its twin that I developed, literally, 20h before as a last ditch effort. I kind of omitted this little fact: when I mentioned that I wasn’t giving up at 4pm… I also took another choice and fixed the game I was working on for 8 days.

The day before I developed a completely new game from scratch. It was more like Mirror’s Edge. It was a first person platformer. Same deal with the timestop and falling objects, same deal about reaching the top… but it was a completely different map and completely different gameplay flow.

And on that bombshell– That’s a story for another time.

Thanks!

I don’t have more footage so here’s a wide tree. I do this because, right now, this is my therapy through the worst days (honestly, year) of my life (yet). I don’t have a job (and haven’t been able to find one for 7 months), and programming is my passion. However, you can’t get a job doing this unless you have proven experience or you do things on your own. This is it, I guess.

I am on this weird catch-22 where I have the time to do this, but I need to spend time figuring out ways to make ends meet. I have the gear to stream (minus the PC but that’s no issue for me), but I am living on a place without any kind of privacy to talk while streaming, without having annoying noises in the background. And honestly, it goes without mention that mental health is a scarce resource these days. Less so if you’re neurospicy like me.

Here’s the deal: I’ll work a way around this if someone’s interested in me yapping about this. Maybe even interested in enabling me to pump out content! If you help me get there, specially with feedback on how to do it, despite it all; that’d be wonderful!

Yes I wanna make a living out of this, but I know the journey is long and arduous. But, like Petscop said…

Maybe we can investigate this together.

Thanks for reading <3

-frame

Support this post

Did you like this post? Tell us

Leave a comment

Log in with your itch.io account to leave a comment.

(+1)

I read through this entire thing, and it seems like you've learned quite a lot. I'd like to give you some of my thoughts in terms of a purely game design standpoint, if you'd like. If not, feel free to stop reading here.

Anyways:

I first want to commend you for custom building a game without much reliance on the Godot engine. I am still fairly new to game dev and I don't think I would have wanted to undergo something like this to be honest. I also empathize with you about the job search. I got laid off last November and I still haven't been able to find a software engineering job, so try not to beat yourself up over that. The market sucks, and to be honest, if you put your game dev stuff on your resume it will absolutely attract companies.

Here's where I'd like to give you feedback (and yes I know you went through all of the other stuff. Don't take this as me saying you should have done all of this for the game jam, just take this as if you hypothetically made a game to release in full):

  • The color scheme is pretty cool, but I was frankly quite blinded with what I assume was the lighthouse beam. I was unable to see where I was going for the most part and spent a good amount of time trying to climb the house you spawn in to just try to see where to go in the first place.
  • I also noted the lack of a pause menu. While accessibility is not as important in my personal opinion for a game jam, the ability to pause with a rudimentary menu is still pretty important. I have no idea how you'd do it if you used custom and experimental plugins / unstable features since from my understanding you wanted to avoid using the Godot engine for development altogether, but it usually isn't difficult at all.
  • In a similar vein, the text to read the controls were too small. Consider increasing size and potentially introducing a small tutorial, whether it's a couple signs (like the UI is real wildcard comes to mind) or a dedicated level showing the player how to take advantage of the mechanics. 
  • In a couple Valve dev commentaries I've seen, they talk about 90% of the time, players get extremely confused as to where to move towards in a game unless there's a giant yellow arrow pointing to the location / map. I don't think you need to use something so obtrusive, but having indicators as to where to go will help players get past the initial hurdle of your game.
  • The sound design could be better - I was frankly annoyed with the drone and quite confused as to what it was supposed to represent. Again, take this with a grain of salt because I just read through your post mortem and I understand what you went through, but this is just a general critique. 
  • Regarding collisions, I believe you need to set the collision shapes to ConcavePolygons both to reduce weird collision behavior and also to have it conform to the shape you are creating. It might be less performant due to more calculations but I think it's a good tradeoff for saving on player frustration.
  • What was the reason for you wanting to make this in C#? If it is generally easier for you to make stuff in C# (i.e. Unity refugee) I get it, but seriously, give GDScript a try. It's Pythonic and you can still strongly type to avoid dynamic interpretation. If it's a performance standpoint I can't really argue with you there, but I would still say to try and use GDScript. 
  • For scoping, I have a design document that I'll share 3M Design Document Explanation. I'll also link the blank document at the end of this comment. Read through this and consider using it for your next jam!
  • Personally, in my experience with jams, people don't have the 10 minutes or so to fully immerse themselves in your game. And I'm not saying just your game specifically. Everybody wants others to look at THEIR game and play THEIR game, they don't want to look at others'. People who do take the time to give ratings and comments likely look at your game for maybe 1 minute if they're being generous, and if there's ANY friction between their gaming experience and the experience you are trying to deliver, they're not gonna bother to explore the hidden intricacies. I have generally tried to stick to simple but (hopefully) more captivating games with simple mechanics that can be explained easily. If you want to make a complex game like Intuition, that's great! But for the purpose of being seen in a game jam, I personally would not recommend going all-out on something like this unless you're working with a more substantial team. 
  • To get more people to rate higher, it's plain and simple: get a hook, keep mechanics simple, and sfx & art are way more impactful than you think. Remember: assume that everybody is going to try your game for 30 seconds tops. If they aren't interested by then, they're not gonna keep playing.

Overall, the game's bones are there. I can see it being very stylized and intuitive. Pun intended! It's definitely a Herculean task to try and bring a grand concept to life when things will inevitably get in the way. It's also great that you are introspective of your abilities as a developer and are able to see some of the flaws that you encountered. I love that you are actively working to improve, and with that it will propel you to colossal heights.

Here's the 3M Design Document Template. I hope you find it useful! Cheers and good luck on the Pirate Software Jam.

Honestly, you said it all. Specially at the end, that’s the problem in a nutshell and how to fix it.

The 30 second rule. Swim or drown.

only one thing to clarify: I did the want to not use Godot. On the contrary, I want to take it to the next level.

Having said that, I have a surprise for January that just happens to challenge me go stock Godot and GDScript.

This is just getting started.