One year in! How's my sabbatical going?

A meme of a baby holding a fist of sand and making a "success" face. It says "My 2022 goal is to finish the goals of 2021 that I should have done in 2020 because I promised them in 2019 and planned them in 2018".

🎉 2021 is over! I've now been doing my sabbatical for a year! 🎉

...and I'm going to do another six months!

Let's pause for a sec and review the past and future

In general, it's a good idea to take a step back now-and-then and look at the big picture. What have I done the last six months? What do I think I'll do the next six months? What did I originally want out of this sabbatical? Has that changed? What do I currently want?

Some stats from 2021


What were my goals?

In general, my ultimate 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 think these were the hand-wavy deliverables that I was planning on:

  • Create a bunch of small games.
  • Make a lot of pixel art, and get better at making pixel art.
  • Finish making my Surfacer framework for platformer AI.

Did I meet my goals?

Yes and no!

The problem is that my focus drifted somewhat toward making a really polished set of tools for making games, rather than making the games themselves.

I am 100% on-board with that focus shift. I think that making a high-quality and versatile toolset has ultimately given me better game-development experience and more skills than creating a bunch of lower-quality games would have.

  • I did make a handful of small games. But I was originally envisioning making at least twice as many games.
  • I did make a bunch of pixel art (mostly thanks to Octobit!), and I did definitely get better at making pixel art. But, again, I was originally envisioning making much more pixel art. I think developing my art and music skills is the main thing I lost by not churning out as many games.
  • I did not finish making my Surfacer framework. I think that "finish" was never the right word, since I plan on using this framework for at least the next few years, and I'll be making changes to it as long as I'm using it. But I definitely don't have a sense that it has all the features that I think it needs yet.
  • But I think that I do now "have a better idea of what I am interested in, and a better ability to create actual results efficiently in my free time", and that was my main objective.

So, I didn't meet all of my original goals, but my goals have evolved!

So what am I planning to do next?

I feel like I need to do a bit more! Specifically, I want to add more key features to Surfacer, and I want to practice more game-dev skills with a few more small games.

So I'm going to extend my sabbatical by another six months!

What have I done this year?

  • I worked on six small games.
    • Squirrel Away
      • You are a cat and you chase a squirrel who runs away from you.
      • This is my living demo for my Surfacer and Scaffolder frameworks, so I keep making small updates to this.
    • Inner-Tube Climber
      • An endless climber with fun wall bouncing and polished platforming controls!
      • I polished this and published it as a mobile game on Android and iOS.
    • OoboloO
      • 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!
      • This is a small game I made with some other folks during a game jam.
    • The Before Times
      • Descend out of the darkness in this first-person atmospheric game.
      • This is a small game I made with some other folks during a game jam.
    • Momma Duck
      • You are a momma duck and you need to collect your ducklings and lead them to safety.
      • This is a small game I made by myself during a game jam.
    • The Eye of Glower-On
      • You are an evil mountain and try to prevent a horde of heroes from reaching your summit.
      • This is a small game I made by myself during a game jam.
  • I worked on two large frameworks.
    • Surfacer
      • An AI and pathfinding 2D-platformer framework for Godot.
      • Some highlights from the last year:
        • Support for saving and loading platform graphs (a big performance boost!).
        • Improved trajectories when falling off the side of a floor and climbing over a wall.
        • Support for bypassing run-time physics.
        • A robust time-tracking system, which can distinguish between many different dimensions of time (app-time vs play-time, physics-time vs render-time vs wall-clock-time, scaled-time vs unscaled-time (for slow-mo!)).
        • A choreography system for scripting automated character movement.
        • A dynamic slow-motion system.
        • Animation-state prediction during navigation preselection.
        • Support for navigating to and from in-air positions.
        • Support for tracking music beats and annotating them on navigation paths.
        • Automatic camera pan and zoom during navigation preselection when dragging near the screen edges.
        • A draw utility for segments with smooth ends.
        • A utility for rendering transient animations.
        • A huge reduction in platform-graph file sizes.
        • Support for running scripts within the editor, which let's you see more pieces of the game as you edit them.
        • Support for configuring many parameters (e.g., character, movement, animation) within Godot's scene-editor inspector panel, rather than as script variables.
        • A powerful character-behavior system for easily creating a character AI with high-level behaviors like "wander", "follow", "run-away", "return".
        • A convenient character-spawn-position system.
        • A convenient and configurable character-logging system, which makes debugging much easier.
        • Support for making any navigation bouncy.
        • Support for ensuring that navigation is reversible.
        • Support for crawling on ceiling surfaces.
        • Many, many refactors and organizational-improvements across the codebase.
        • Support for preserving slow-rise gravity when interrupting a previous navigation to start a new navigation.
        • Support for oddly-shaped surfaces (surfaces with non-cell-border-aligned sides).
        • Support for single-vertex surfaces.
        • Support for projecting a shape onto an oddly shaped surface.
        • A more robust system for resolving navigation interruptions.
        • Support for rotating the character animation to match the surface slope at the grab point.
        • A system for annotating surfaces by drawing marks on tile-maps in Godot's scene editor.
        • Support for configurable friction per tile.
        • Support for configurable max-speed per tile.
        • Support for collinear neighbor surfaces.
        • Support for character categories.
        • Support for backtracking when overshooting the target on slippery surfaces.
    • Scaffolder
      • A bunch of general-purpose application scaffolding and utility functionality for games in Godot.
      • Some highlights from the last year:
        • 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.
        • Screen-transition animations.
        • Lots of useful utility functions (e.g., Time, Geometry, DrawUtils, Audio).
        • A widget library (e.g., AccordionPanel, LabeledControlList).
        • A toast notification system.
  • I did five 48-hour game jams.
  • I did Octobit.
    • I made daily pixel-art every day during the month of October.
  • formed a single-member LLC to publish games under.
  • I wrote a tutorial series on how to make a platformer AI.
    • This covers a lot of my experience making the Surfacer framework and the design decisions I made along the way.
  • I learned how to publish apps to the Android and iOS app stores.
  • I learned to use the Unity game engine.
  • I learned to use the Blender 3D-modeling software.
  • I learned about Godot's contribution model and got a couple pull-requests merged into their codebase.
  • I published my Surfacer and Scaffolder frameworks on the Godot Asset Library.
    • And other folks have been using them!
    • I've received a handful of emails and GitHub issues from folks with questions and wanting help getting set up.
  • I attended the online GDC Showcase conference.
  • I helped raise my one-year-old and slept very little!

What do I think I'll do in the next six months?

  • Continue to improve my Surfacer framework for platformer AI.
    • Must-haves:
      • Add support for predictive timing.
        • This would allow characters to reach a given destination at a given time.
        • For example, in order to collide with (or jump on) another character.
      • Add support for fall-through-floors and walk-through-walls
        • These are surfaces that the character can conditionally pass through or grab.
      • Add support for flying characters.
    • Stretch goals:
      • Add support for the player bonking their head on an intermediate ceiling before continuing their movement toward their destination.
      • Support lazy-loading platform graph files.
      • Implement an R-tree data structure for more efficiently finding close surfaces.
      • Make it easier to use and to configure the many different parameters.
      • Make it easier for random folks on the internet to use in their games.
      • Fix logs of bugs!
  • Continue to make a lot of pixel art.
    • And hopefully continue to get better at it!
    • I don't have a specific plan for this, other than to make a lot of small games and include a lot of art in them.
    • I hope that I find lots of interesting techniques to work on in each game, and take the time to learn to do them well.
  • Play around with dialogue.
    • I think that a lot of the ideas I have for games depend on stories and characters with dialogue and narrative.
    • I'm not sure whether I'll be a very good creative writer, but I'm excited to get a feel for it!
    • I have couple tools in mind for implementing this.
  • Make a handful of small games using Surfacer.
    • Maybe three more games?
    • I will try to make these games explore the various unique experiences that Surfacer enables.
  • Form a concept and prototype for a larger game that I can continue working on after my sabbatical is over.
  • A few more game jams.
    • Global Game Jam (January)
    • Ludum Dare 50 (April)
    • GMTK game jam (June)
  • Continue publishing a weekly devlog post!
    • I'm really happy with these posts.
    • I think they've been helping me maintain a good perspective on what my high-level tasks are and how long they're taking.

🎉 Cheers and happy new year!

This is a simple icon representing my sabbatical.