calm sea

* not available on mobile.

tools

unity, c#

platforms

webgl

responsibilities

game programmer, level designer

devlog

goal: create a game with more replay value.

introduction

the start of this project was only a day after my first jam submission: the book of the damned. going through the entire lifecycle of creating a finished game was so energizing that i was ready to undertake something bigger and better. the shortcomings of the book of the damned led me to focus on arcade-style gameplay mechanics to maximize replay value.

(verrryyy loose) planning

i immediately gravitated to an idea when i saw the theme for this jam; it felt as though everything was (almost) entirely fleshed out without having done any work yet. i jumped into milanote to capture the flurry of thoughts and felt ready to get going.

i had recently seen a video by brackeys about a shrinking world that inspired the ‘procedurally generated little planet’ idea. in hindsight, procedural generation was overly ambitious…

programming

considering the main gameplay mechanics - firing cannons and randomized enemies - spawning game objects and hit detection were core to successfully creating my game.

  • initially, i turned to instantiating and destroying the cannonballs, but found that creating even 3-6 projectiles would lead to a drop in 50+ frames. i could only imagine the effect if i were to approach populating all the enemies that way as well.

  • after some digging, i discovered object pooling: frontload the creation of the cannonballs and enemies on game awake then enable, modify, and disable them as needed.

  • i designed the enemies to self-destruct after a random time between 60-90s, so that ‘new’ ones would come from different angles and make the game more challenging.

level design

for this project, i wanted to create a level that was fun to explore and maneuver around as enemies chased the player.

  • small barrels and crates float around for the player to interact with; personally, i love moving straight through a cluster of them for no reason at all.

  • for contextual clues, 4 distinct pirate locations were made to convey to the player where the enemies would spawn from.

  • i scattered 3d audio of seagulls around different rocks on the level; a small detail which i felt just polished the game.

pirate location 1

pirate location 3

pirate location 2

pirate location 4

final thoughts & takeaways

  • performance considerations:

    • limit the number of draw calls and cpu bottlenecking by combining meshes; a small optimization that goes a long way, especially since vsync cannot be disabled for webgl.

    • turn on hardware acceleration in the browser; my macbook air was running my games better than my pc until i enabled this setting in chrome ??

      • that said, i really want to be able to make games that run smoothly regardless of hardware acceleration.