From Google, to solo, to Bungie: My sabbatical has come to an end!

A meme showing Frodo from the Lord of the Rings after throwing the ring into Mount Doom; it says "It's finally over".

tl;dr:

My sabbatical has come to an end. In this post, I reflect on where I started, where I've ended up, and all the "pathfinding" I've done along the way.

  • The purpose of my sabbatical was to explore game development.
  • A year and a half ago I left my job at Google.
  • Today I started my new job at Bungie!
    • I'll be a senior gameplay engineer working on the AI, animations, and moment-to-moment gameplay in Destiny 2.

Retrospective

I'm really happy with how my sabbatical went. I made a lot of games, I invented some fun mechanics and some cool tools, I learned a lot about game-development, and I had a lot of fun!

My original high-level goal was to get a lot of practice making games, so that I can "have a better idea of what I am interested in, and a better ability to create actual results efficiently in my free time." I definitely succeeded in that regard!

I was originally planning to go back to Google after my sabbatical ended. I only really decided to instead try getting some experience in a real gameplay job a few months ago. That means that I wasn't really choosing projects that would make me more hirable as a gameplay engineer! If I had been thinking about getting a gameplay job, I definitely would have done a small project or two in Unreal with C++. But it all still worked out in the end! I talked about my job-search experience in a separate post.

Highlights

  • My sabbatical lasted 19 months.
  • I created 9 small games.
    • I built-out 2 of those games into more substantial mobile apps.
      • Alas, the second one isn't quite finished yet!
      • I should release Meteor Power on mobile app stores sometime later this year.
    • I created 3 of those games with a team.
    • I participated in 7 game jams.
  • I created 3 powerful frameworks for Godot.
    • Surfacer, Scaffolder, and Surface Tiler.
    • And Scaffolder and Surfacer are really a combination of 4 separate sub-frameworks: a GUI framework, a set of re-usable app utilities and infrastructure, a surface-parsing framework, and a 2D platformer AI and pathfinding framework.
  • I published prolifically in my devlog here.
An icon representing game-dev tutorials: It shows a gear, a light bulb, and a video-game controller.
A line drawing showing a path across surfaces from a human character jumping onto a bug character.
All 31 images I created for Octobit 2021, combined into one big grid.
The Snoring Cat logo--a pixel-art image of a curled-up sleeping cat.

The games

Cover art for Meteor Power--A robot next to a solar-panel station with a star-studded space background.
  • Meteor Power
    • Mobile RTS point-and-click 2D platformer.
    • ☄️🤖 Build solar stations, connect power, avoid meteors!
    • More polished. Mobile app.
    • Uses fancy pathfinding and AI logic from my Surfacer framework.
    • Originally created for the Ludum Dare 50 game jam.
    • Currently being expanded into a more-polished mobile app (ETA: late 2022).


The main-menu screen for Tale of Two Sides.
  • Tale of Two Sides
    • 2D platformer with a unique mechanic for moving through platforms then travelling along the opposite orientation.
    • Through a terrible accident, you've split-apart the world into two sides! But you've also gained the unique ability to phase between them! Use your newfound power to undo your mess and re-unite the two sides!
    • Created with a team for the 2022 Global Game Jam.


The cover image for "The Eye of Glower-On". It's a picture of the mountain and each of the different character types.
  • The Eye of Glower-On
    • In this point-and-click game, you control the vast power of an unstable mountain.
    • The heroes of the land aim to ascend Mount Oh No to destroy the vessel of your vast power! You must CRUSH THEM! And send them flying! They will FEEL YOUR ANGER!! They think they can scale Mount Oh No?? Not while The Eye of Glower-On is watching!
    • Uses fancy pathfinding and AI logic from my Surfacer framework.
    • Created for the Ludum Dare 49 game jam.


Cover art for the Momma Duck game, showing a momma duck and three ducklings.
  • Momma Duck
    • A point-and-click platformer.
    • Collect your ducklings and lead them to safety!
    • Uses fancy pathfinding and AI logic from my Surfacer framework.
    • Created for the GMTK 2021 game jam.


The cover art for our game; it says "The Before Times"
  • The Before Times
    • This is a 3D game about exploring an infinitely looping room and getting out of a dark place.
    • Descend out of the darkness in our first-person atmospheric game.
    • Created with a team for the Ludum Dare 48 game jam.


A screen recording of my animated baby model walking around a meadow collecting dandelions.
  • Dandelions
    • A very simple 3D game.
    • I made this so that I could explore the basics of modelling, rigging, animating, and scripting in Blender and Unity.


Cover art for Inner-Tube Climber showing the climber within a level.
  • Inner-Tube Climber
    • An endless climber game, with fun wall bouncing!
    • Oh no! The player is stuck inside a "loop"—that is, their inner tube—from a tragic inner-tubing accident that left them stuck in the bottom of an endless crevasse!
    • More polished. Mobile app.
    • Originally created for the Ludum Dare 47 game jam.


The title screen for our game OoboloO.
  • OoboloO
    • A 2D platformer.
    • You're a slime that's lost some of your blobs! Collect them and make your way to the exit while avoiding the vicious cave enemies - but be careful, as they are also your only means of maneuvering!
    • Created with a team for the 2021 Global Game Jam.


A screenshot from Squirrel Away highlighting surfaces and edge trajectories.
  • Squirrel Away
    • A point-and-click platformer.
    • A very simple game serving as a demo for the Surfacer framework.

The frameworks

The logo for the Surfacer framework.
  • Surfacer
    • AI and pathfinding for 2D-platformers in Godot.
    • Some features include:
      • Surfacer includes a powerful character-behavior system for easily creating a character AI with high-level behaviors like "wander", "follow", "run-away", "return".
      • Easy-to-use point-and-click navigation for player-controlled characters.
      • Configurable movement parameters on a per-character basis (e.g., horizontal acceleration, jump power, gravity, collision boundary shape and size, which types of edge movement are allowed).
      • Level creation using Godot's standard pattern with a TileMap in the 2D scene editor.
      • Preparsing the level into a platform graph, and using A* search for efficient path-finding at runtime.
      • A powerful inspector for analyzing the platform graph, in order to debug and better understand how edges were calculated.
      • Walking on floors, climbing on walls, climbing on ceilings, jumping and falling from anywhere.
      • Variable-height jump and fast-fall.
      • Adjusting movement trajectories to move around intermediate surfaces (such as jumping over a wall or around a floor).
    • This is really a combination of 2 separate frameworks (which I need to split-apart someday!):
      • A surface-parsing framework.
      • A 2D platformer AI and pathfinding framework.
    • Here's an in-depth explanation on how pathfinding works in Surfacer.


The logo for the Scaffolder framework.
  • Scaffolder
    • Opinionated scaffolding and utilities for games in Godot.
    • Some features include:
      • Configurable UI and camera scaling to adapt to the current viewport.
      • Optional analytics based on the proprietary third-party Google Analytics service.
      • Optional automatic crash log reporting based on the proprietary third-party Google Cloud Storage service.
      • Screen layout and navigation.
      • Lots of useful utility functions (e.g., ScaffolderTime, Geometry, DrawUtils, Audio).
      • A widget library (e.g., AccordionPanel, LabeledControlList)
    • This is really a combination of 2 separate frameworks (which I need to split-apart someday!):
      • A GUI framework.
      • A set of re-usable app utilities and infrastructure.


The logo for the SurfaceTiler framework.
  • SurfaceTiler
    • Next-level autotiling.
    • Some features include:
      • 90° and 45° surfaces.
      • Exterior-to-interior art transitions spanning two subtiles.
      • Dynamically constructed subtiles from individual constituent quadrants according to the local topography of the corresponding cell in the TileMap.
      • A corner-type annotation system for defining the shapes of each quadrant in the tileset.

The game jams

I participated in a lot of game jams during my sabbatical! A key goal for my sabbatical was to get a breadth of experience by making a lot of small games, rather than by letting myself spend a lot of time on a single game. Game jams were a really great way for me to do this!

For me, there are many reasons why it's better to make a game as part of a game jam, rather than just during my normal time.

  • Discoverability and feedback.
    • When you make a game in a game jam, it's a lot easier to get other folks to look at it and give you really great feedback.
  • Forced time constraints.
    • Having to start and finish the game within a narrow time window forces you to focus on what really matters and to actually finish and release your game.
    • When doing any sort of normal development, especially by yourself, it's really easy to let scope-creep happen and then spend way more time than you expected to not-quite-even-finish something.
  • The creative atmosphere.
    • It's a lot more exciting to make a game when you have a large community of other folks doing the same thing at the same time.
    • It's motivating to see the energy and ideas from other folks.
  • Thinking outside the box.
    • The theme forces you to think along lines you might not normally consider when designing a new game concept.
I participated in three different types of game jams. I definitely think Ludum Dare is the most rewarding game jam event.
  • Ludum Dare
    • It does all of the normal game-jam things—folks have to create a game within a weekend, and the game must follow a theme that is announced at the start of the weekend.
    • But it does something really special with how games are rated and reviewed.
      • The more games that you rate and review, the higher your own game is shown in the lists.
      • Also, they have some "karma" metric for automatically evaluating your comments.
      • As a consequence, I see a lot more activity in Ludum Dare for folks playing and reviewing each other's games, and I see a lot more constructive feedback than in other jams.
    • Also Ludum Dare has a couple different tracks you can participate under, which makes it more appealing for a wider set of folks.
      • Compo: If you want to do something more intense, you can participate by yourself, you have to create all the art during the jam, and you only get 48 hours.
      • Jam: If you want something less intense, you can participate with friends, you can use pre-existing art, and you get 72 hours.
  • Global Game Jam
    • GGJ is supposed to be an in-person-only game-jam, but it's been held remotely since Covid started.
    • I can really see the benefit of jamming in-person, and I'm sure the atmosphere is a lot of fun at one of the jam sites in a normal year!
    • Unfortunately, my only experience with GGJ has only been remote.
    • The GGJ online resources don't feel particularly satisfying for participating and reviewing other folks' games.
  • GMTK Game Jam
    • itch.io is a really great place for publishing and discovering small games.
    • They also have really great tools for hosting game jams.
    • GMTK is based completely on itch.io's game-jam tools.
    • I think the best part of the GMTK Game Jam is the size of the community participating.
    • But other than that, it doesn't really seem to offer anything different from any other game jam.
I'll probably participate in game jams slightly less frequently going forward, but I'll definitely keep doing some of them!

The devlog

I'm glad that I've been posting regularly in my devlog.

  • Since I quit my job to do this extended sabbatical thing by myself, I felt like I needed something to sort of keep me honest and on-track.
  • Also, similar to rubber-duck debugging, it's a really useful practice to occasionally write-down or communicate to someone else your rationale behind your work. It forces you to self-evaluate in a way you might not normally.
  • Also, it's nice to now be able to look-back on all the stuff I've been working on over the last year and a half!
  • And I've heard from folks that they've enjoyed following-along, so I'm glad this has been at least somewhat interesting for other folks! :)

The future

  • I'll definitely continue working on my games and frameworks as side-projects in my free time.
  • But my pace will slow way down! Especially in the next few months as I onramp at Bungie.
  • I'll probably continue using this devlog to post updates, but only when I have meaningful progress to talk about—maybe every one to three months.


❤️ Thanks for following along! ❤️


🎉 Cheers!


This is a simple icon representing my sabbatical.

Comments

  1. Congrats on such a productive and fun sabbatical! I'm impressed with the output and continuous cadence of updates. Enjoy your time at Bungie. 😊

    ReplyDelete

Post a Comment