Postmortem


Description

Purple ball guy is a 2D platformer that combines puzzle solving and battling together.  With a magic purple ball and a knife, the player needs to slain all the armed enemy ahead, finding the way out from all the five levels.


Roles

Alex: Programmer, UI Designer

Nicky: Producer, Level Designer, Artist


Development process

  • In this project, we used a folded task list to manage all the stuff we are going to do. We always have several backup plans for levels and mechanics, in case we don't have time to finish all the advanced features.
  • We started off with a brainstorming session, and it ended up with 7 different themes. We chose the most exciting and excutable one among them: Battling as a powerful hypnotist. 
  • In the first week, Nicky designed the rules and main mechanics of the game, including character's movements, attacks and, of course, hypnotizing abilities. Alex took over the mechanics design sheet and made them real in unity, with very smooth and juicy controls. Meanwhile, Nicky did a spritesheet of characters.
  • In the second week, foreseeing the shortage of time, we decided to replace some advanced features in the game with their backup plans, to give time to polish level design. During this time, Nicky desigend the pixel animations of the characters, as well as several drafts of the first two levels and tested them out. Alex took this time to refine and debug the movements and the chasing logic of enemy AIs. 
  • In the final two days, other 3 levels were made. Alex had pushed himself out of the comfort zone to make a shader that hides the enemies out of sight in Unity. Nicky composed a main menu soundtrack of the game, as well as a set of Auidio effects. The game ended up with a complete playable loop, featuring a embeded tutorial level on the main meny and a scoring system throughout the game.
  • All of the development notes and records are in our notion workspace of the game. 


Here is our mechanic insight

  • View Mesh

View mesh is the selling point of our game. The basically determined character in this game is going to interact with each other in a concealed manner, achieving a realistic vision system in a normal FPS game.

Field of view visualisation (E01) and Field of View Effect in Unity (Line of Sight, View Cone) gives me a general idea of how a view mesh works. An evenly distributed ring of ray is shot from the origin, constructing a fan shape with adjustable degree to hit a target layer mask. Then the “hit point” of each individual ray will be collected in a list. Using them as reference to generate a mesh. See in action

Then through some customization, I applied the view mesh to soldiers and the purple ball guy. The enemy will have it to indicate if it has spotted the player. See in action

As for the main character, we want to achieve an effect that the camera only renders what is covered by the player view mesh. This effect can be easily achieved using a “Stencil Shader”. How to use the stencil buffer in Unity 

However, it requires all the components to render using the mesh renderer. It is very hard to achieve when working with a 2D project. So, I ditch this feature, and as an alternative I chose to toggle the activate state of the enemy sprite renderer open upon the player's view mesh on hit.

See full game play

  • The character moving system

I use a base class containing all the potential behavior shared between player and enemy, among them, jumping and climbing happened to be the most interesting two.

Instead of adding a single burst force when a character jumps, I chose to make the character accelerate during a period of time. I achieved that using a coroutine.

Climbing enables the possibility for characters to move between platforms. Every character will have two moving states: moving and climbing. The main character will have to press “W” near a ladder to trigger a coroutine that teleports it to the center of the ladder, then its state is switched from “moving” to “climbing”. It will then be able to move up and down within a certain vertical range, and will not be affected by gravity and collision. If a player moves outside the range, the moving state switches back and it will trigger a “jump” automatically.

Enemies will climb and jump automatically and act like a state machine. However the pathfinding AI I wrote is not quite effective. I will figure out a better way to handle enemy movement in the future.

  • The interaction between characters

Enemy is able to shoot a bullet towards the player when the player is close enough to them && player is already spotted. That is easy.

Players will be able to launch a throwing knife to an enemy if they are in range, and that attack is not dodgeable. 

Players can also shoot a purple magic ball to the enemy to stun them, it has a greater range and a linear trajectory. The attack is not guaranteed to hit.

Both interactions are made using the same coroutine function, but they have different parameters.


Self-Review

Success

  • We made a steep but steady learning curve with the 5 levels, and the player can get a lot better at the game through practicing
  • We are successful on introducing new mechanics as the levels go harder
  • We have smooth physics and attack animations that allows player to make combos
  • We did a good job on coherent pixel art style

Failure

  • The scoring system in the game is not very unecessary
  • Our invisibility shader is not as good as expected(Among-Us-like) due to technical limitations
  • The sound design is rather rough
  • The overall difficulty doesn't allow new platformer players to establish confidence

Lessons learned

  • Doability research on all important/fancy mechanics before making up the plans
  • Make level design earlier, so all features could be play tested by the crowd before wrapping up
  • Design the playable loop (level selection, scoring system, etc.) along with the levels

Future plans

  • Make more levels with more mechanics introduced
  • Debug the stunning ability, make sure it 100% hits
  • Remake all audio
  • Introduce different types of enemies, and (maybe) a final boss

Get Purple Ball Guy

Leave a comment

Log in with itch.io to leave a comment.