Guppy - Designing Unconventional Input for Natural Movement
(originally published on Gamasutra)
Input conventions exist for a reason - you don't want to needlessly confuse the player - but sometimes it may be interesting to try something different and find new ways to interact with our virtual worlds and characters.
In creating my aquatic simulation Guppy I tried to figure out how to make the player move like a fish.
The initial inspiration came when I tried another fish-based game... and while it was a different sort of game with different goals, I was left with the distinct feeling that that is NOT how a fish should control.
It felt like a challenge.
Between summers spent observing tiny fish darting around my feet at the edge of a lake, memories of pet guppies nabbing food in a small aquarium back home and an old Disney film about wizards and underwater excursions I had an inkling of how I might approach the problem.
So how does one move like a fish?
Not content to go with the obvious "press forward to go forward and put a swimming animation on it", I went looking for something closer to the real thing...
Studying their movement, one thing stands out:
Fish flip their tail fin back and forth to propel themselves through the water.
As they flip their tail to one side it creates forward and turning momentum, and if they alternate both directions it cancels out the turning movement leaving only forward momentum pushing them in the desired direction.
So that's where I started, attempting to replicate those simple forces acting on an abstracted 2D top-down version of a fish. I could have tried to use a physics system but opted instead to go with simple variables: forward speed, turning speed and friction gradually reducing both to zero in the absence of input... This, and a set of three basic sprites: neutral, tail to the left and tail to the right.
Pressing LEFT would flip your tail to the left and pressing RIGHT would flip the other way, while letting go of the buttons would revert the tail back to its neutral position.
Since I was designing this game on PC with a keyboard there was no analog input so the most obvious solution seemed to tie the strength of tail flips to how long you hold a key, much like you would for a jump in a platform-game.
Then there was much tuning.
After some experimentation I opted to put a maximum force and duration on key presses so that if you press and hold down LEFT or RIGHT you do a 180 turn. To turn further you have to do repeated tail flips in the same direction. For smaller turns you tap the key only briefly. This gives a fair amount of control and gives the player room to be both deliberate and expressive in their movement.
I gave the fish a limited top speed to discourage excessive hammering of keys (uncomfortable and not much fun, so best avoided). It was important to put the pacing of movement in the hands of the player. There is no optimal frequency. You can go fast for a bit (but not too fast) then slow down and casually slalom back and forth through the water...
Another small detail I added was that if you hold your tail to one side, wait, and then release it back to neutral it adds a slight turn back since you are moving your tail in the opposite direction. All these elements contribute to making the fish feel more consistently physically present in the water.
Crucially, they create a pattern of movement that is distinctly fish-like.
Had I used more conventional input the feeling of movement and the kinds of paths the player takes would be just like any other top-down game.
(alternate less interesting control scheme - press forward to go forward + looping animation, turning does not affect forward momentum... notice it no longer feels much like fish movement)
I posted the prototype on the TIGSource forums and got an enthusiastic response, so I started adding more features to the game: like stone obstacles, AI predators, friendly ambient fish, particles that react to nearby movement... and eventually watercolor backgrounds and dynamic music. All serving to accentuate the sense of *being* a fish.
The controls though remained essentially unchanged since that first prototype.
AI fish used the same system of movement, deciding whether to flip their tail left or right randomly when idling and repeating the same direction to turn when aiming for a specific point, increasing frequency when in a hurry. Predators are alerted by ripples on the surface, speeding towards your last known location when you nab a fly, while ambient fish gather in schools, flocking around randomly shifting positions in space, and scattering when predators are near.
I would love to see more games experiment with new and different methods of interactive locomotion.
One of my favourite games of 2017 was Snake Pass, in which you learn to move like a snake. Using physics and a clever but very intuitive control system they managed to create an entirely new way of moving around and it's absolutely delightful (the charming art-style also helps).
Imagine all the fascinating creature-based games we could be making if we didn't just go with the default solution of navigating what is essentially a static box with some animations around an environment by holding down the analog stick? What if more designers looked to how animals *really* move for inspiration, not just for the visual side, but for their core mechanics?
There certainly is an abundance of research material:
(these are just some examples, but you get the idea)
My background is in animation and that focus, observing and understanding how movement works, very much informed my choices in designing this game. I believe there is a lot of untapped potential in the meeting of animation and design, and it's certainly something I'd encourage other developers to explore.
I look forward to playing all the games about *being something else* that we haven't seen yet...
Leave a comment
Log in with itch.io to leave a comment.