Bubble Ranch, for Global Game Jam 2025!

Check it out!

We made Bubble Ranch: A Cozy Hunt for Global Game Jam 2025.

It’s a casual collect-a-thon where you catch bubble creatures on cactus-filled planet. Each creature has a little personality and there are 3 distinct AI types.

Catch as many as you can and post your high score! At the jam site the highest score we saw was 104,000!

Play here!

GGJ Entry Page


Animations

We were able to get a ton of animations in for our player character and Godot’s AnimationTree was up to the task! I made use of blendspaces within each animation state to cross between crouching and even an anticipatory raising the net.

With 4.3’s skeleton deformation system we used the wiggle bones addon to slosh the player’s bubble-helmet around.


Creature AI

Our creatures follow a Path3D, but use the navigation to get to those points. This is so they can run from the player and find their way back on track. Initially we also used move_and_slide so they would obey physics, but with lots of creatures and complex tri-mesh collision shapes this proved highly taxing; though the Navigation Agents surprised me, they are very performant.


GGJ Team Page

Our artists did an amazing job, I love how the world looks and all of the creatures, our player is cute and eager to catch them all!

My fellow programmers were fantastic, I could spend time in my own little scene and the pieces would magically coalesce. A smooth operation, we took our time and all agree legible code is the best code!

Having a producer on your game jam team is a boon; getting the right thing done right on time stress free is great in and out of the jam setting. Mega bonus points for also designing and implementing the level!

Join game jams! Make friends! Wooo!

9 Likes

Bonus Screenshot Saturday post

Here’s how our artist set up the face textures with 4 states! Using a sprite-sheet style we can offset the UV map, also saving extra space by mirroring the eyes and mouth.

In the script we can apply these textures by an index, or preferably an enumerated type, with a little bit of math.

enum Face {
	NEUTRAL,
	SAD,
	SURPRISED,
	OUCH
}

func set_face_idx(idx: Face) -> void:
	eye_material.uv1_offset = Vector3(idx * 0.25, 0, 0)
5 Likes

Hi,
I am grateful for your explanations how and what you do inside your game. It is very inspiring and may help solving some problems for others when they create their games. Thank you :slight_smile: