Cartoon Cat was the ever official indie game I released, releasing on the itch.io platform in late 2022. The game is a short 30 minute first person PS1-style horror story game about a journalist uncovering the secrets of an old bunker documenting as you go. The game got tons of positive attention with over 1000 downloads and many YouTube Let's Plays.
I developed Cartoon Cat originally way before I actually ended up releasing it. I originally developed and finished the game in summer of 2021 but ended up releasing it much later in the fall of 2022 out of the blue and to great sucsess. The game was developed using the Unity Engine and C#. Much of the development time was spent developing balanced player movement, the cat's AI and navigation system, and the story itself.
As for the game's development, a lot of prototyping and testing went into it. As you see in the final game, the camera and textures are in a pixelated old play-station style of graphics, as well as the environment and props being low poly. Initially, all of this was the same except the camera was going to be clear:
The player also was originally going to be equiped with a gun, but this was later scrapped for a hammer, camera, and flashlight. I also ended up as I said moving towards a PS style camera filter.
Here is what the final effect looks like:
This is achieved in a rather complex way. I begin by giving the player a camera whose view of the world is constantly stored as a render texture. This texture is then compressed to 256x256 pixels:
From here, this render texture is displayed on a 2D one-sided face in the game world:
And a regular camera is placed in front of this to see this view. Also note that the user interface is overalayed on the final camera and not the one that goes to the render texture.
When you get to the end of the game, you are trapped in a maze with the Cartoon Cat himself, and he is given AI in order to correctly navigate said maze. This was done using some clever code in tandem with Unity's built-in NavMesh component/system. First, I set all of the floor and wall objects of the maze to be static objects via the ticker in the inspector. I then went to Window>AI>Navigation and baked the NavMesh for the entire level. Here is a visualization of said NavMesh for the maze level:
The blue represents valid positions for the AI to move upon. From here, I ended up adding a set of points to each intersection of hallways in the maze and a set of points for where the AI could choose to go next from the intersection they were currently at, it had a random chance to pick either of the connected directions to go in. This texture is then compressed to 256x256 pixels:
The cat would also, when it sees the player via a RayCast projected from it's head, would drop it's current target node and begin simply chasing the player while they were within 5 seconds of the most recent sighting. Here is some early development footage of this in action:
Of course, since there are no walls, you are practically always in range of him, but this demo video atleast showcases the cat's ability to follow the player and navigate around the map. The cat essentially uses a state machine of enums to determine his current behavior.
When it comes to telling the player what do to or how to interact, it can be pretty complex. I went with the approach of a task list, which would display when you were assigned a task, when you had one active, and even when you completed a task. It was also accompanied by sound effects:
This helps the player not only avoid confusion but also keep track of what to do if there are multiple tasks, like later in the game:
Additional ways of assisting the player are floating in-world indicators. I used these throughout the game to distinguish to the player what are props and what are actual interactable objects. There are two types, camera and eye icons. The camera icon indicates that the player needs to take a photograph using the Camera item of the given area:
And secondly the eye icon indicates that the object needs to be interacted with because it is readable/grabbable:
When it comes to horror games, it helps build suspense and create a sense of realism when the world is set in a realistic/good story environment. I went about telling a story in my game in a couple of ways.
Throughout the game, the environment tells the most of the story, and it also connects with readable story elements throughout the game too. For example, in the first newspaper, found on the hood of a police car, talks about the police officer and his purpose of being here, which is reinforced by his abandoned police car found outside when you first start the game:
And there are many more elements that tell the story and tie in with other storytelling elements:
Throughout the game, the player finds News Papers that are the heavy lifters of the story telling. They include a date, allowing the player to piece together a timeline of events, and they also tell the story of what happened.
Additionally, a dialouge system, where text is displayed at the bottom of the player's screen, is also used. This helps guide the player if they don't understand something and also helps build the story.