NOTE; I plan to add pictures to this post, I promise! For now though I really need to get some sleep 🙂
Today, I’d like to adress yet another design mystery in Slumber. I know I should probably just talk about the stuff that’s already been defined and how and why it works, but it’s just so much more valuable for me to describe the current problems so that I can go ahead and solve them somehow!
So! Without any further ado, allow me to talk about
In Slumber, the player plays as a Nudibranch chilling out in the ocean. The player collects algaes, hang out with fishes, and explore.
To give you an introduction to the problem, allow me to paste a section from our game design document that I wrote as I was beginning to think about this a few weeks back;
Fish NPC’s are 50% of the gameplay experience! The fishes are the REWARD for everything you do. It’s the end goal of our core loop. Like a platformer where one designs hand crafted levels to challenge the player, we need to design fishes that are equally interesting and engaging to interact with. I need to design an AI framework for fishes, where after implementation a designer can step in and create an unique personality simply by manipulating parameters.
In short, the player needs to feel that fish friendships are a worthy goal of their endless grind.
What we have
Right now, all fishes have the same base AI and set of animations. They mostly swim about and eat any preferable algae they happen to come upon. When the player comes close, a fish ”greets” them (if they don’t know the player, they get shocked!). If the player gets too close, they swim away quickly.
The player can feed fish using food components created from collecting algae. With (the right) food, the fish slowly starts trusting the player and once the player has given their hungry friends enough food, they become friends!
So what happens when a player befriends a fish? We do not know exactly!
What we need
So far all fishes behave the exact same way, the only difference between them is how fast they are, their movement patterns, their shyness, and their food preferences. This is a good start, but if we want the player to feel that each fish is worth befriending, ideally each relationship should feel like an unique experience!
That is the problem, though. Sure, it is possible to create AI behaviours for befriended fishes – they can follow the player, play with the player, collect food for the player, or playfully interact with the environment like any good fish dog would. However if every single fish behaves the same way when befriended – will the player see any value in befriending anymore than one fish?
Looking at our time budget, ideally the befriend system should be implementable in one week for one programmer. This means that we need to keep unique fish interactions to a minimum, as each interaction adds to a growing list of hand crafted content only a handful of people will interact with.
Ideally, I would like to design one friend behaviour that can be manipulated using parameters to feel unique to each fish, similar to what has been done with the base AI.
First off, as you befriend fish they become less wary of you. They won’t flee from you when you approach them, and instead of looking scared upon spotting you, they will greet you happily. If you’re really great friends with them, they may even do a loop of joy and swim up to you!
Except for the base animations and small behaviour cues changing, we also plan to push fish following. If you are good enough friends with a fish, they will accompany the player as they explore. Depending on the fish type, the way they follow the player will be different. For example, small fishes may circle around the player excitedly, examining the environment and looking at everything like a happy puppy.
Bigger more prideful fish may follow the player, but in their own pace and gracefully, carefully swooping up and down as they make their way through the ocean. Bigger fish also have some standards – for example they will not follow the player down strange small caverns, instead they will wait outside or return to their territory.
These differences helps push fish individuality, but ideally I would also like the fish to play games with the player. For example, maybe let the player create water bubbles, that the fish excitedly swims to and pops. The use behind these games is to give the player unique experience-related rewards for befriending fish. Ideally the joy behind fish friendships does not lie in ticking off a checkbox in a list – it lies in discovering what being friends with this particlar fish is like. Much like real friends! 🙂
As you can hear, these solutions are all very high concept and diffuse. That is because they are wishes, and not carefully planned features. In reality we only have about a week to implement these features, and we would probably be lucky to get even the fish following to work on a base level.
The key to defining this feature is to define what aspect of fish relationships will have the most impact on the player and prioritize and polish this behaviour. Once this is donle the AI can be expanded to become deeper and more unique for each fish.
I am still in the middle of figuring this out, so sadly I will have to leave you with another ”until next time!” yet again. It is going to be fun seeing how this turns out, considering fish love is the end goal behind Slumber’s core loop.
See you next week! 🙂