A physics based parkour game. Currently a work in progress!

Physics Interactions

Different physics items are intractable using a left click over them. This attaches a force direction that pulls the item in the given vector. The player is able to use three of the at once and also reuse a given force on the same object on a different location without adding an additional vector. This mechanic is accomplished by sending out a raycast and upon successful intersection applies logic based on some meta data. Different objects may require different logic to act in a way that is expected by the player. Our goal is to make them feel that a force is being applied but the way in which we implement that experience may differ than how we previously expect.


An example are the sliders I started programming. Here I wanted an object that with slide along a given path created within the editor that could span some arbitrary amount of points and use any curve I desired. The natural choice was the utilize Godot’s built in Path3D and Pathfollow3D. The issue with these items is that they constraints that we that they work with translating an object along its path using the “progress” variable which is not inherently physics based. There were two main approaches I came up with that I could have taken. One is to adjust the constraints in the physics logic manually. This would require me to connect our physics object to a PathFollow3D and although this method would set up useful tools and experience for a physics based project I decided to go with the alternative approach.


I set up a state machine that shows whether the slider is idle, moving, or slowing down. Each state has logic that helps imitate a physics object. The great addition to this is including a collision box around it so that it still affects other entities in the world, like the player. This set up a physics-like interaction for the player but how we implement our mechanics may differ than how the player expects.

Shadow Decal Character


I wanted Puppet to be formed using signed distance fields and for them to be interactive with the world. To do this it requires a shader for me to process that forms the body, sclera, and pupil.


These are simply formed by a square and two circles. To connect the shader image to the decal image I render a SubViewport which allows me to get its texture. SubViewports are a way to render a different its children to a rect which we can then apply where needed. For debugging purposes you can attach our SubViewport to a SubViewportContainer which will display our image using a UI element.

To get the eye to match up I get the direction towards the player’s head and convert that value as if local to Puppet. I then pass it into an eye shader which offsets the center of the pupil.

Physics Player Controller

To keep an interactive experience I wanted the player to be flung about from all the physics objects within the scene. The natural starting point within godot would be the rigidbody component rather than the characterbody.


The movement simply applies a force to the given input direction but what I particularly like is how the body is technically floating above the ground.

The player character sends a raycast down and springs towards a given offset. This means the player bounces up when falling, can do a pseudo ledge climb, smoothly runs up imperfect terrain, and when going down ramps can stick to the surface instead of running into the air before falling. I really enjoy how this controller feels and will be using it in future projects.