cliff is an exuberant bite of a game by Torfi Asgeirsson — one of the ghosts behind NUTS and A firm handshake — which focuses on exploring physics and character movements by letting players test a brave climber.
The project is inspired by turn-based fighting games toribashallowing players to create their own moves by choosing which muscles to contract or relax before each turn in a mix of turn-based and real-time combat.
Intrigued by that mechanic, Asgeirsson wanted to dig deeper into physics-laden limb management and started tinkering with Unity with a view to creating, well, something vaguely playable. The result is cliff (that’s Icelandic for ‘climbing’, by the way), which combines a handful of mechanics – like a stamina bar and a variety of grips – with a clean puzzle design to deliver a bite-sized experience that’s surprisingly dynamic.
After tucked in cliff during a recent lunch break, I reached out to Asgeirsson to learn more about the engineering and design inspirations behind his spoonful of digital joy. Oh, and if you feel like taking cliff for a spin before reading on, it is currently playable on Itch†
Game developer: You mentioned that you often think about games that try to explore a new or interesting idea, so I’m curious what intrigued you about character movements?
torfi: So the character configuration is very simple. The torso is a dynamically rigid body and the hands and feet are kinematic starbodies while in the grip, otherwise they are dynamic and are attached to the torso via a spacer joint. No force is applied to those joints, they only keep the hands and feet within a certain radius of the shoulders and hips respectively.
The knee and elbow joints do not exist in the physics simulation at all, they are purely visual. I used Unity’s built-in 2D Inverse Kinematics package to set that up. BUT when you put all that together and start moving the hands and feet, you get the fantastic illusion that the arms and legs help the body move. It immediately looked very dynamic and surprisingly lifelike, while also being very easy to control which is what I really look for in a good physics based controller of any kind.
Here you may be able to see the joint line-up more clearly. The dotted lines are the IK joints, the solid lines with the bars on them are the actual physical connections.
Why did you choose to explore that concept through the lens of a climb-em-up?
I’m actually not much of a climber, I’ve only done it a few times, but my friend and co-worker Joon is and we had a conversation at one point about bouldering, a form of climbing where people do these short routes that are a bit puzzle-like they are even called ‘boulder problems’. Ever since we had that conversation, it occasionally occurred to me as something that could be fun to build a game around.
I like games with very compact but expressive levels and it felt like there was fertile ground there. I had a very different idea at first, it was a turn based game where each turn is one move and you spend stamina based on how hard the move is. I thought there might be something interesting in the combination of navigation and resource management, but as I started to design it more concretely, I quickly realized it would be very complicated to make. But while I was thinking about that idea, the physics character arrangement I described above came to mind and it seemed like it could also hold promise.
How did you conceptualize, implement and iterate your core climbing mechanism, thinking of elements such as momentum, physics and limb maneuverability?
Honestly, a lot of that just came naturally from the character controller setup. I’ve made a lot of physics-based character controllers since then, so I have some intuition for the right mix of simulation and control, but I definitely felt like I got lucky with that first attempt. I immediately felt that it had some interesting features. As if you could stretch your right hand on a grip while your foot was hooked to one of the left and when you released the foot the body would swing to the right and you could use that momentum to get your leg into a different grip. I had to tweak things like gravity and drag a little bit to get it to behave the way I wanted, but a lot less than I normally do.
Can you explain how and why you added restrictions such as a stamina bar and power variables that depend on a player’s current hold?
I wanted to limit how far you could reach based on the number of grips you touch, both because it looks more natural, but also because it allows for a much more interesting level design. Then you need to think not only about the distances between the holds, but also how they are arranged and where to place limbs to “push” you to the hold you want to go to.
I’ve spent a lot of time thinking about how to apply force to the limb you’re dragging. The classic way to implement something like that is to have an invisible kinematically rigid body that follows the mouse and then attach it to the physical object with a spring and that’s what I tried first. The problem with that is that the spring exerts more force the farther apart the bodies are, so you can just drag the cursor very far away and still get a lot of movement even with a low force on the spring. I’ve found Unity has these “relative joints” that I’d never used before, but they act like a spring, except you set a maximum force that can be applied to try and hit the target. So then it was just a matter of setting that maximum force based on how much hands or feet are touching. It also kind of takes into account whether the direction you’re dragging is “in line” with your legs or not, so you get more power when your legs push you than when you hang from it.
Even if the force applied is limited, you can still kind of swing back and forth and build enough momentum to get into some grips I didn’t want you to be able to reach, so I added the stamina wheel, mainly to prevent That. But it also creates an interesting dynamic where you can still perform some of those unlikely moves with precarious grips if you’re fast enough. I’ve tried to design the levels so that you never have to do one, there are always ‘safe’ positions available, but I like that you can make risky moves to lower your move score.
Did the more emerging aspects of movement surprise you or is that something you expected? What do you think they brought to the experience?
Physics-based character controllers are fun because they always have these emerging traits, and I like the process of discovering them and slowly shaping them. There were definitely a lot of little things that I wasn’t expecting and the process of customizing the character and creating the levels really felt more like exploration than invention. There’s a little in it Getting Over It With Bennett Foddy what he talks about when designing the mountain in that game he would come up with a section and if he tested it if it was too hard it felt like that was a failure of his as a player rather than a designer.
That’s how I felt a bit making levels for cliff† The edges of the restrictions are vague enough that you’re often not quite sure if something is impossible or just really difficult, and I discovered techniques that I could never have intentionally designed in the character controller or level. I think that level of expressiveness in the character makes this game really interesting.
This is a move I think looks cool. It’s really satisfying to get that three-point setup on the right before reaching for the green hold and then swinging further to the right. It also shows how adding the eyes that follow the active limb did a lot to create that illusion of more complicated movements.
Finally, seen you made cliff to explore movement, I’d like to know what you learned from the experience?
Like many game developers, I start a lot more projects than I finish. I think cliff was a good exercise in executing a simple idea to the point where the idea is sufficiently expressed and just calls that good enough. It was very tempting to add more stuff, I had ideas for different characters with different body shapes, different grip types, a level editor, etc. But none of those things would have helped bring this core idea of this character and how it moves to express . Most of the game came together in a three day weekend and then I spent a few more weekends repeating levels and adding some sparkle. Every week I’d say, “I’ll release it next weekend,” but then I’d find something else I wanted to add or fix. Last weekend I finally had a wedding to attend so I knew I either had to pull the trigger or it was going to be another week and so while I still really wanted to add a menu and some of the leftover junk fix it, I just threw it in there and I’m really glad I did.