top of page

Isometric Splatoon - 2018

  • Role: Solo Developer

  • Platform: PC

  • Built in Godot

  • 4 weeks of development time

 

Overview

This project is a recreation of the mechanics of Splatoon in a twin-stick shooter. The demo's gameplay has the player firing at balloons, to pop them all under a time limit.

Play on PC

https://rokato.itch.io/isometric-splatoon

My Work

State Machine

The player state machine is a finite state machine that runs input and physics on a current state. 

This architecture is in place because of how often the player is switching between states in the game that change physics and animation. Especially between the two major states: Kid states and Squid states.

All states are represented by Nodes, as children of the player Node. This way, they can be quickly viewed and understood from the first time the player is opened in the editor.

player states example.gif
player-states.PNG
state-nodes.PNG

State Inheritance

I wrote states with hierarchy in mind to avoid rewriting code when certain states act similar. For example, in a ‘kid’ state, the player is always able to shoot. So, I made the kid state always show the player’s weapon when being entered. Then, inherited states like kid_idle and kid_move only need to handle the animation and movement of the player.

kid-generic-state.PNG
kid-idle.PNG

Ink Manager

I needed some way to track ink that the player would shoot and land on the ground. It had to me more than a background detail too, the player object would have to be able to detect and swim through it.

So I created a Singleton that would hold a grid of 'GroundTypes', as well as functions to access the grid. GroundType is an enum that represents either Ground or Ink, with potential for representing many types of ground in the future, such as EnemyInk or Hazard.

The ink manager would also dynamically create the size of the grid based on a separate 'boundaries' object.

ink-manager-example-notation.PNG
Ink Manager Snippet

Postmortem

Learning Godot

This project was built upon systems from a few previous projects I've made in Godot. Player movement, input handling for controller, how the arrangement of nodes: all recycled from previous projects.

On one hand, I was able to reach further progress in this project compared to my older ones, demonstrating a continuing gain of knowledge of how Godot works. But, this came at the expense of running into the same bugs and limitations that have been around since my first project.

 

I would not have changed this about the project however, as I would be hindering my understanding of the engine if I spent too much rewriting the same systems again and again.

Project Scope

The project had broad aspirations of encompassing numerous more systems like different weapons, game modes, networking, etc. It was hard keeping in mind all these exciting ideas, I was only able work on this for one half of the Summer before a very busy semester waiting in the fall!

Ultimately, I focused on a good feeling basic player controller, with a simple game mode to demonstrate the player feel. While it is not the ideal finish-line for this project, I completed the most important part of what I intended to do: mimicking the feel of playing Splatoon.

Moving Forward

Going forward means letting go of something I wish I could complete. It's something I am proud of solo developing, with how quickly it all came together! I feel much more ready to tackle new projects in Godot thanks to that.  I have so many new aspects of the engine to still discover, and that's exciting to me!

bottom of page