This week I continued ticking off items on my polish/bugfix todo list. This list was mainly generated from reading feedback from previous builds, as well as ideas I had recently. I've now finished this list! This includes improvements to the rope mechanic which I'll talk about later in this post.
Self-playthrough startedI've now started doing a full playthrough of the current state of the game. The idea is to look over all of the levels and content and make a new todo list of things I want to improve.
In the past I've done this by simply playing through and making notes along the way. However this can be really disruptive to play, as constantly pausing to make a note about something is time consuming and breaks the flow of play. What I'm doing this time is recording the playthrough using
OBS. I have a headset with a microphone, so I've plugged that in to do a running commentary of any issues or improvements I think of while playing. Then I can watch the video back later and actually write down the notes.
So far I've spent 1h30 on the playthrough and made 4 1/2 pages of notes in my notebook! I estimate another hour of play to finish everything that's currently in the game. 2h30 will be a pretty good amount of playtime I think, considering I can rush through most of the levels since I know them already. And there's still more content to be added!
Rope improvementsOne of the game's mechanics is tightropes. I've talked about them before
here and
here.
The general idea of the tightropes is that you can only travel along them while rolling. If you're not rolling, you'll fall through them. They also increase the height of your jump when you jump off them thanks to their springy nature.
Here's a very old gif of them in action (2015):
Rope problemsApart from simply being a way to incorporate some mandatory rolling into the game mechanics, the ropes were originally intended to be interesting to traverse. Their very first iteration was very strict.
If you weren't rolling when you landed on the rope then you wouldn't connect with it. Note that jumping towards the rope, then holding the roll button (which causes you to crouch in mid air) didn't count. You had to be rolling before you even made the initial jump towards the rope. This was way too harsh and I changed it so you could roll on the rope as long as you had the roll button held, even if you're not technically rolling yet.
(A side note on the subject of the difference between rolling in mid air, and crouching in mid air. Most mechanics such as skimming on water surfaces or entering boost rings are also lenient and allow you to make use of the mechanic either way. But other mechanics more directly tied to the act of rolling - such as smashing into blocks, or sliding on a wall and wall jumping, do require you to be actually rolling in mid air, so you have to plan your movements a little more carefully in those cases.)There's another way in which the original rope implementation was very strict. Normally when rolling, if you change direction, Leilani comes out of the roll and into a skidding state, and after slowing down, starts rolling in the opposite direction. It used to be that if you tried to change direction on a rope, because Leilani stops rolling and starts skidding, she'd just drop straight through the rope as she'd no longer collide with it!
My solution to this is something I grew to feel unhappy with. Leilani would instead do a weird mid-air skid which would prevent her from falling. She could then reconnect with the rope and start moving in the other direction. This can be seen in action in this gif from a 2018 version of the game:
It's super lenient, but I think this makes the ropes less interesting than they could be. As long as you're holding the roll button, they pretty much turn into normal platforms that you don't have to put much thought into using.
Also, the level shown here was meant to be a crazy downhill ride down the rope network, more like something you'd see in a Donkey Kong Country game - but since you can turn around at any point and roll back up the ropes it loses a lot of the tension.
Changes to hopefully improve ropesI decided to go all-out and make some bold changes, which so far I'm enjoying the results of.
Firstly:
you can no longer roll uphill on ropes. You'll quickly slow down and turn back the other way. Jumping on ropes while travelling uphill also doesn't grant you the full bounce height and springs you back in the downhill direction. Note that this applies to enemies rolling on ropes too!
I think this behaviour fits, as you'd expect rolling on a tightrope to be quite a precarious situation where you don't have full control, so if a rope is placed at an angle, gravity will take over and force you downhill.
Secondly:
you can no longer turn around on ropes. If you press back in the opposite direction, you'll slow down but keep travelling. In the gif below you can see Leilani slow down for some time, once she reaches the halfway point on the rope.
This gives the player a bit of control over how they traverse the rope but without giving them complete freedom. On a flat rope you can still jump up into the air, turn around, and roll the other way. But on downhill ropes the best you can do is slow yourself down.
Bonus improvement - ropes between moving platformsI was reworking the
sinking platforms level. The second part of this level made minimal use of ropes attached to sinking platforms. They weren't very interesting, partly because the rope could only be attached to a single moving/sinking platform. The rope is a single entity and could only be pinned to a single moving platform like so:
(This is one moving platform even though it's split into two parts - the left and right side can't move independently)
The natural improvement is to allow ropes to be strung between different moving platforms!
This was achieved by creating a new entity type - a rope anchor. The rope itself is pinned to the left-hand moving platform. The anchor point is pinned to the right-hand moving platform. The rope entity is linked up to the anchor, and each frame the rope's end point is changed to match the position of the anchor entity.
This can create interesting situations where the slope of the rope changes, as shown above, so you have to time when you travel across it.
Ropes between sinking platformsSinking platforms are just moving platforms with some extra code - so the changes above already allowed ropes to be strung between sinking platforms.
However they did need some special attention to determine when they should cause the sinking platform to sink! Normally the sinking platform sinks if there are any entities contacting it. It also sinks if there are any entities contacting other entities that are pinned to the sinking platform! So if Leilani was on a rope attached to a sinking platform, it would cause the sinking platform to sink.
This would no longer work correctly as the rope would always cause the left-hand sinking platform to sink - because that's the only sinking platform the rope is pinned to. Don't forget it's the invisible anchor entity that is pinned to the right-hand sinking platform.
The rope and rope anchor now have their own implementation of the 'how many entities are contacting me' function that all entities have. If the anchor is queried, then it just asks the rope entity for the answer. Entities on the left side of the rope affect the left-hand sinking platform and the same for the right side.
And one more hack is in there. If the gradient of the rope becomes too steep then it pretends there are entities on it, causing one of the sinking platforms to sink. This is a totally faked and hacky method of making it look like the tension in the stretched rope is pulling down the sinking platform that's higher up. It works pretty well in simple situations!
Thanks for reading!