ternarysolo's Avatar

ternarysolo

@ternarysolo.bsky.social

4 Followers  |  1 Following  |  59 Posts  |  Joined: 20.01.2026  |  2.1116

Latest posts by ternarysolo.bsky.social on Bluesky

Video thumbnail

Starting to piece together some level design.

Humble beginnings for sure, but still feels nice!

#gamedev #godot

30.01.2026 23:06 β€” πŸ‘ 11    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

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

29.01.2026 21:31 β€” πŸ‘ 9    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

plaits.gdextension source is up here: github.com/lwakefield/p...

#godot #gamedev

29.01.2026 19:37 β€” πŸ‘ 8    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0

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)

29.01.2026 17:14 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

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.

29.01.2026 17:12 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Turns out the first recording was using the wrong audio source.

This one sounds faaaar better (plus a healthy amount of reverb).

#godot #gamedev

29.01.2026 17:09 β€” πŸ‘ 8    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

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    πŸ“Œ 0
Post image

The 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.

29.01.2026 17:02 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
GitHub - EclipsingLines/GodotSynth: Synthesizer plugin for godot, SFX and procedural music. Synthesizer plugin for godot, SFX and procedural music. - EclipsingLines/GodotSynth

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    πŸ“Œ 0

It 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)

29.01.2026 17:02 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Embedding 100x plaits in Godot (sound on)

#godot #gamedev

29.01.2026 16:53 β€” πŸ‘ 8    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

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...

25.01.2026 21:25 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

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    πŸ“Œ 0

But 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    πŸ“Œ 0

The 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    πŸ“Œ 0

I 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    πŸ“Œ 0
Video thumbnail

Push Buttons!

#godot #gamedev

25.01.2026 21:25 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

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    πŸ“Œ 0
Post image

All in all - it was fairly tidy once I got over those humps!

25.01.2026 21:09 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

2) 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.

25.01.2026 21:09 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

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.

25.01.2026 21:09 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The trickier part was animating the shader. Or more specifically freezing the game while animating the shader.

A few footguns to contend with...

25.01.2026 21:09 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

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.

25.01.2026 21:09 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

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

25.01.2026 21:09 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Post image

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    πŸ“Œ 0

Godot'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    πŸ“Œ 0
Video thumbnail

The game I am experimenting with has teleporting as the core mechanic.

Yesterdays exercise was to tighten the "can we teleport here" mechanics.

#godot #gamedev

25.01.2026 20:43 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

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    πŸ“Œ 0

Also - 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    πŸ“Œ 0

I'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/...

23.01.2026 20:30 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

@ternarysolo is following 1 prominent accounts