- Stephen Vowles
First week on FROG BATH!
I’ve been on-boarded to the production of the game “Frog Bath”, as a Systems and Level Designer! I got to watch the original team do awesome, inspiring work all last semester so I’m super excited to work on this project.
This week I’d been tasked with prototyping improvements to the movement systems of Frog Bath. Movement is a huge part of this game so making it smooth, fluid and enjoyable is extremely important. There are several ideas I plan on prototyping for Frog Bath, however, I was able to prototype 2 important changes to the movement system. However, before I talk about the changes I made, let’s talk about the problems I was looking to solve.
Firstly, a player hits the "A button" to tongue to a wall and if they hold the "A button" down for the entire time their frog is moving toward the wall, the frog will reach the wall, their momentum will be set to 0 and they will fall down to the bottom of the wall. This would be a big penalty for a player of a lower skill level.
To fix this, instead of setting the frog's momentum to 0, I've added a function which pops the player up slightly. This means that a player who accidentally holds the button down for too long, or a new player who doesn't know any better will likely be able to scale the wall even if they hold the "A button" down for too long.
If a player does not hold the "A button" for the entire time their frog is moving toward a wall, their frog is launched from it's position when the "A button" is released. You can see there is a similar problem here. The frog is launched straight towards the wall and when it hits the wall it's horizontal momentum is zeroed out by hitting the wall. The frog may slide up the wall face first and scale the wall however, this doesn't look great and slows the player down considerably which can be frustrating.
At first I thought I could solve the issue in the same exact way; give the frog a little bit of pop upwards when the player releases the "A button". And indeed, this does work for specific angles.
However, there is a problem with this solution. Because the frog is already being launched in a direction parallel to the direction it's tongue is pointing, if a frog's tongue is pointing at a steep angle upward, adding upward momentum to this already upward pointing launch creates far too much upward momentum. However, if a frog is moving more horizontally, they need quite a bit of upward momentum in order to clear the wall. Also, if a frog were tonguing down toward the ground, it would feel really awkward if that same frog got popped back up when the tongue was released. So, clearly I needed to modify the amount of vertical "pop" to add based on the frog's current vertical momentum.
First, I tried making the "pop" proportional to the negative of the amount of vertical momentum the frog already has. This is a bit of a weird graph because "1" on the X-axis represents the maximum vertical launch momentum possible and "1" on the Y-axis means the amount of "pop" we want to add to a frog with no vertical launch momentum. The biggest problem with this might be apparent to you already. It's that if you have downward launch momentum, you gain a massive amount of "pop" so obviously, next I tried making the pop proportional to negative the absolute value of the vertical launch momentum.
But, honestly, that's lame cause it's linear so I tried "pop" = -("vertical launch momentum"^2)+1. It's better, because it's got a curve.
When I tested it though, I decided curving it the opposite way would be a bit better...
However, there is still a problem with this. If a player hit's the side of a wall that is slightly below them with their tongue, when they release the tongue they will be launched with downward momentum and their upward "pop" will be decreased. However, we still need to decrease their "pop" if the frog is tonguing at a steep downward angle. So I added a parabola back into the graph but only if the frog's launch momentum is negative.
This made it so that a frog which was tonguing straight down wouldn't get popped back up, a frog that was tonguing slightly down would get enough "pop" to counteract it's downward launch, a frog which was tonguing horizontally would get an appropriate amount of "pop", and a frog which was tonguing upwards wouldn't get popped ludicrously high.
This was such a fun puzzle to solve, a great introduction for me to understand the current tongue code, and an excuse for me to dust off some old geometric formula knowledge I had rattling around in my head.
I'm so excited to continue working on this game with the team. Hopefully, every problem will be as enjoyable to solve.