Climb Prince

Climb Prince was visiting his girlfriend Tower Princess, who lived at the top of a very tall tower.

His legs were too puny to make it up the stairs and so instead he climbed her long hair.

Just as he was about to reach Tower Princess' balcony he dropped the bunch of roses he was carrying.

The falling roses scattered across the platforms below.

Dejectedly Climb Prince slid back down to the bottom of the tower.

Help Climb Prince gather all 25 roses as he climbs up to Tower Princess' balcony.


Controls

ActionKeyboardXbox controller
Walk / Climb / SwingWASD / Arrow keysD-Pad
Pause / ResumePMenu
Toggle musicM
Change filterF


Background

The idea for Climb Prince came to me a year ago after someone in the Godot Cafe Discord asked how to make a grappling hook rope that could wrap around scenery. I suggested using a RayCast2D firing from the end of the rope to the previous point to check if it hit anything and if so add the collision point to the rope as the new previous point. I built a simple prototype and it seemed to work well. I then came up with the idea of making Climb Prince, which is based on the fairytale Rapunzel, using that mechanic. The name is a reference to Jump King, which I had been playing around that time.

I worked on the game on and off for the next year. It turned out integrating the RayCast2D system into a full game was tricky, as I wanted to have a player character with changing offsets from the point where they held the rope and be able to move them under linear velocity when walking on platforms but with angular velocity when climbing and swinging on the rope. I did eventually get the RayCast2D system to mostly work but it was prone to missing distant corner points when the rope was at a very shallow angle to a vertical wall. It also felt like it was computationally excessive, as it sometimes needed to fire up to 23 RayCast2Ds each over several hundred pixels per frame. With that in mind I developed a different mathematical approach which is what was used in the finished game. Basically it is checking all the potential corner points the rope could wrap around to see if they are within the arc defined by the section of rope that has moved's position in the previous frame and the new position in the current frame. If there is a new corner point to wrap around that is added to the rope and the angle and direction the rope wrapped around the point is recorded in an array. The code can then later check if the rope has swung past that angle in the opposite direction to see if the point should be removed from the rope. If there is any interest I may do a retrospective devlog explaining in detail the approach I took.


Leave a comment

Log in with itch.io to leave a comment.