Starting to piece together some level design.
Humble beginnings for sure, but still feels nice!
#gamedev #godot
@ternarysolo.bsky.social
Starting to piece together some level design.
Humble beginnings for sure, but still feels nice!
#gamedev #godot
okay - so now got the plaits.gdextension in the main game and slowly replacing samples with the synth instead.
A lot of sound design needed still, but it is neat to see pieces coming together.
#godot #gamedev
plaits.gdextension source is up here: github.com/lwakefield/p...
#godot #gamedev
and with some back of napkin math: 48kHz * 100 = 4.8MHz, and assuming ~100 cycles to render a single frame gets us to 4.8GHz, where my cores are running at ~3.2GHz.
That 100 cycles number is coming from thin air, it should be doing plenty of optimization to get that down to ~30 or so (guess)
I tried throwing 1000x voices in, but it started to break down considerably.
100x voices is about the sweet spot using a little under a single core, which I think is what godot's audio is limited to.
Turns out the first recording was using the wrong audio source.
This one sounds faaaar better (plus a healthy amount of reverb).
#godot #gamedev
Also getting the sampling to work correctly. It took me a while to read the docs which say that macos changing the audio mix_rate does nothing on macos, which left me hunting godot source code for where mix_rate got passed around.
29.01.2026 17:02 β π 2 π 0 π¬ 1 π 0The core of it is actually pretty darned simple.
Though for some reason it breaks down when I try to bulk render frames (comment on line 155) and that tripped me up for a while.
Some references I used to aid my understanding along the way include github.com/EclipsingLin... and github.com/nonameentern... and github.com/VCVRack/Audi...
29.01.2026 17:02 β π 0 π 0 π¬ 1 π 0It was a bit of a journey to get there, mostly limited by my lack of comfort in c++.
I've got a little massaging to do to the source, but I'll put it up on github later today (probably)
Embedding 100x plaits in Godot (sound on)
#godot #gamedev
Finally - it still doesn't quite feel right in that screengrab. 2x buttons trigger the door and the door takes the "most pushed button" to determine it's location e.g. if you jump on a button, it might not trigger the door immediately.
I think my solution will be to have them far enough apart...
So we cheat a little - peek inside player.get_slide_collision(i) and see whether it matches the button.
25.01.2026 21:25 β π 0 π 0 π¬ 1 π 0But first of all - AnimatableBody2D don't have easy access to collisions, but even if they did (like RigidBody2D) because the player uses "move_and_slide" to "resolve" collisions, I guess it technically doesn't count as a collision?
25.01.2026 21:25 β π 0 π 0 π¬ 1 π 0The buttons themselves are composed of AnimatableBody2D objects. What I want to do is say "hey top-of-button, is there something touching you?".
25.01.2026 21:25 β π 0 π 0 π¬ 1 π 0I wanted the buttons to feel like they had a weight to them, so they slowly get pressed and then slowly release once you jump off of them.
25.01.2026 21:25 β π 0 π 0 π¬ 1 π 0Push Buttons!
#godot #gamedev
Oh - and the effect isn't my ideal yet. The palette quantizer causes an irritating effect with the fading to black. I think the solution will be to "turn off palette quantizer FX momentarily" - but it is better than before though, so I'll come back later!
25.01.2026 21:11 β π 0 π 0 π¬ 0 π 0All in all - it was fairly tidy once I got over those humps!
25.01.2026 21:09 β π 0 π 0 π¬ 1 π 02) bind() binds the last parameter?
Took me a while to work out why my tween_method's weren't working. I'm sure there is a good reason for this, I am just used to other languages binding parameters from the left, not the right.
1) you gotta make sure that you use the right pause mode.
If you pause the game from the _process_physics, you better make sure the animation is also running on that loop - otherwise weird behavior happens.
The trickier part was animating the shader. Or more specifically freezing the game while animating the shader.
A few footguns to contend with...
The shader itself was fairly straight forward. It accepts an "offset" from -1 to 1.
Going from -1 to 0 goes from "normal" to "faded out" while going from 0 to goes from "faded out" to "inverted colors".
I was pleased with easy it was to get this up and running. Probably ~15m or so.
I realized that as I am testing, I am going to be respawning _a lot_ - so I wanted that to _feel good_...
So - today's first exercise was to write an FX for respawning!
#gamedev #godot
With a little massaging, we throw a few casts. It abuses the fact that if you start inside an object, it doesn't count as a collision - but we still need to double check all the locations to verify they are valid (lines 99-102).
25.01.2026 20:48 β π 0 π 0 π¬ 0 π 0Godot's raycasting is handy, but only (as far as I can tell) gives us the first collision, which is not enough if we want to teleport _through_ multiple objects.
25.01.2026 20:44 β π 0 π 0 π¬ 1 π 0The game I am experimenting with has teleporting as the core mechanic.
Yesterdays exercise was to tighten the "can we teleport here" mechanics.
#godot #gamedev
Let me revise - I would like to usher it through, provided it doesn't distract me too much from what I am _actually_ trying to do. (already distracted)
23.01.2026 20:30 β π 0 π 0 π¬ 0 π 0Also - I think it is only touching the OpenGL ES 3.0 driver github.com/godotengine/... and not sure whether that matters or not...
23.01.2026 20:30 β π 0 π 0 π¬ 1 π 0I'd love to usher the PR through to merge, but I can't say I fully understand the architectural ramifications yet...
e.g. not sure if this has backward compatibility concerns: github.com/godotengine/...