Game #001: The Ballpit
January 13, 2026 by Farms
Well that ended up being a bit of a crash course in ....everything.
Game #001 is The Ballpit. A little cartoony third person arena shooter where players collect balls and shoot each other with them.
Link to play it is at the bottom of this post.
So the plan was to learn how to build a third person camera controller.
...but first, a map!
I would need an environment to run around in. I don't really know how people generally make levels, but I figured I would just make one big mesh and somehow turn it into a collidable environment.
My brain is refusing to gel with Blender (something I suspect I need to get over for this project heh), but I'm pretty comfortable in parametric CAD, so I just went with what I know and knocked up some kind of arena shaped thing using FreeCAD:
So now I can get on that camera controller
...but first, physics!
Turns out you can't really do third person camera antics without some kind of interaction with the world. You want to be able to move, hit walls, jump, walk up ramps etc.
That means real physics, not the basic intersections from the last game.
Since we are still using the same deterministic framework, we need a way to do physics in this way too. AND in a way that is compatible with the state rollback system. I decided to base on it Rapier which claims capability of operating in a deterministic-enough way.
The fun part was making it work with our zero-serialization ECS setup. Rapier has a way to serialize/deserialize it's state ... but it is WAY too slow to do on every tick for any reasonable number of entities.
What I ended up doing was to just have a "physics plugin" that runs before the game logic and completely rebuilds the rapier world from the current ECS every tick. And surprisingly this was really fast, way faster than going via serde serialization.
So now I can get on that camera controller
...but first, a character!
Hmm I need something to control. Again i'm not quite ready to dive into Blender land just yet, so I thought I'd give the latest batch of AI mesh generation a try, and generated a little punky character mesh:
I did have to go noodle with the mesh in Blender a bit to tidy it up. But overall I was pretty impressed with it, the topology isn't too crazy.
So now I can get on that camera controller
...but first, animations!
Oh right, it looks silly slideing around in a T-pose. So I guess I need to learn how to rig it and trigger animations.
Mixamo is the well trodden path for noobs like me. And this took WAY too long to work out, but I eventually to a stage where I can grab some mixamo animations and get my character moving:
So now I can get on that camera controller!
...finally, a camera!
So I take a big level mesh ... convert it into a triangle mesh format that I can pass to rapier to load as a big collider, levage Rapier's kinematic controller to let me move a capsule around and detect collisions into the level mesh.
The basics of the camera are pretty simple ... position it behind the character and up a bit. Done.
Give it a try!
Excuses Disclaimers
- I have struggled alot with how I should handle aiming with this camera controller, might take a bit of getting used to.
Onwards!
I had to learn much more than I expected to get this one out! I thought "physics", "animation", etc would have been seperate games where I explore those, this one forced my hand a bit.
I keen to start learning how to make things look a bit nicer, but I think the next big task is not a game per-ce, but some kind of system for bots - so I can play against someone, and when you try out my experients you don't just stand around on your own, so I think it's important enough to tackle next.
