Kitsune is the second digital game I worked, the second game made by Emperium, produced in 2 months and displayed in November 2015. This was our first 3D game demo, were we used the Unity Engine for the first time. It’s also an adventure game, with platforming and puzzle challenges. Here you play as Shinno, a Kitsune who has the ability to transit between the human and spiritual worlds. I’ll cover a more technical view about the game, if you want to know more about story or mechanics you can go to the game designer’s post. So, unlike Recall, I was the only programmer on this project, and the big challenge on this game was to make this “transition between worlds” and make both of those “worlds” interactive, all of it while learning C# Programming. Here’s the link to the video footage of the game we produced.
Shinno is the playable character. She is girl with spiritual powers that can shape shift herself into a fox, entering the spiritual dimension. On the normal world dimension, she only has basic controls of movement and interactions like jump, climb or interact with objects.
While on the spiritual dimension, she has 3 spiritual balls floating next to her that she can use to attack enemies.
The hardest here, was the climbing logic. She can climb two types of surfaces: a rectangular surface (like a wall) and cylindrical surfaces (like the tree on the end of the stage). To make this possible, I used a lot of Colliders as triggers, and had to work with disabling the Rigidbody, using the Transform to move on those cases. The spiritual balls are actually very simple, they have a Collider that triggers damage on collision with enemies and a Trail Renderer to draw these lines of movement behind them.
The Ghoul is just a basic enemy we designed to add a little more difficulty on the game and test State Machine Programming, as well as an Encounter System I’ll discuss later on. He has a very simple behavior: walks randomly around the environment if no hostiles are detected, and when detected, starts chasing it until the distance is close enough to attack it.
He walks by jumping short distances, and has a limited line of sight, so if you sneak behind him, he won’t see you. To make his movement logic work I’ve used the NavMesh and a NavMeshAgent, which is very easy to set up and adjust if needed.
So, the monkey is one of the 12 Celestials of the game lore, and Shinno must defeat him to continue her journey. His challenge is that he multiplies himself into 3 and throws fruits on her from the tree branches, forcing her to climb the tree and attack him. To make his fruit throw logic work, it required me to research some physics, as the fruit should hit the player wherever he would go.
The two-dimensional world
This was the first challenge that came to me from the game designer, and required me quite a good time to develop it. As I had no knowledge on events and delegates, I made it in a quite different way. So, every object that behaves differently on both worlds, extends a base MultiWorld class, which supports different interactions and behaviors. Every time the player successfully toggles dimension, every object that inherits that class (including the player) executes a ToggleWorlds function, which functionalities vary among all of its heirs. For example, here is where a Ghoul would appear or disappear.
Next, we knew the spiritual dimension had to look differently than the common world, and have a transition effect as well. For that, I used Image Effects. To change the color scheme, I used the Color Correction Curves, controlling its values directly through code, and to make the transition effect, I used the Vortex, also controlled by code.
The Encounter System
As we would spawn groups of Ghouls, I wanted to try developing a system that I could use later for different types of enemies and situations, that would avoid having more active enemies than necessary. For that, I created the Encounter System based on what I had learned working with the Neverwinter Nights Aurora Toolset (I made Neverwinter Nights mods for quite a good time, it was very fun, really). It works in the following way: you set an area that should be the area that triggers the encounter (can be a huge rectangle or any shape, but must be a Collider), and set Spawn Points for the creatures to spawn. You can choose the prefabs to spawn and the amount of creatures that should be spawned. If you set more creatures than spawn points, the exceeding amount gets positioned randomly among the spawn points. The same would happen if there were more spawn points than creatures. You also set an Encounter Limit, that when the player triggers it, all creatures spawned by this encounter and the encounter itself, get destroyed.
Finally, the interface was all done using the Canvas, which makes it easy to control all the elements shown on-screen.
I’ll end it here for Kitsune. It was a really short gameplay experience, but we could learn a lot in the process of creating it. I hope you liked this one, keep tuned for more!