11 Weekly Snippets
Colin McMillen edited this page 3 years ago


  • Attached LinesOfSight to NPCs.


  • Added sound effects & looping music.
  • Got git lfs set up. Switched to git submodules (from copybara) for splitting public/private repositories.
  • Started parsing sprite & animation metadata from Aseprite's JSON format.
  • Started using a real level editor (Ogma) & wrote code to parse Ogma's JSON.
  • Made an FSM class and started using it for NPC behavior.


  • Built a properly-packaged demo for inclusion on Microsoft Store for PC & Xbox One.
  • Switched to C# 8 and MonoGame
  • Made a style guide.
  • Added a pause screen & real font for it.
  • Added player health & on-screen heart display.
  • Added first NPC.


  • Used new art for scrolling parallax backgrounds.
  • Added support for decorative objects in stage backgrounds.
  • Started work on first real stage.
  • Tweaked Player physics.
  • Fixed memory leaks of graphical resources.
  • Lots of messing around with Google, which poorly indexed my site due to new IP address.
  • Set up Tailscale for networking & changed Digital Ocean configs appropriately.
  • Bixdev: got QuickBooks set up.


  • Refactored line-of-sight code to be in a separate file & to use DrawIndexedPrimitives().
  • Added ability to restart a level.
  • Cleanups: Player.GetFacing/GetPose, unit tests for Geometry.Rotate(Vector2), draw debug geometry with gfx primitives.
  • Added bcs.sh (Bad Code Search).
  • Set up Gitea to serve https://git.semicolin.games.
  • Ported issues / wiki / etc from GitHub & updated README.md to reflect the new canonical location.


  • Formed SemiColin Games LLC!
  • Set up DigitalOcean account, configured cloud machines, & made a placeholder website at https://semicolin.games.
  • Explored some devblog options... didn't really settle on a choice yet though.
  • Added histogram-based performance counters.
  • Partial work on vision / line-of-sight algorithm.


  • Wrote some new collision-detection code and started using it (along with Bresenham's algorithm) in Player.Update().
  • Started to implement a field-of-view algorithm.
  • Updated player sprite to a "ninja" asset. Added tool for importing more sprites from the same pack.
  • Debug now keeps debug rects & lines when the game is paused.
  • Bound player & camera positions by edges of the world.
  • Tried (but failed) to upgrade to built-from-head MonoGame.


  • Implemented Bresenham's line-rasterization algorithm, along with unit tests for it.
  • Added ability to draw said lines to screen via Debug.AddLine().
  • Converted Debug.Toast -> Debug.AddToast() (allowing for multiple toasts per frame).
  • Implemented "pause" functionality.
  • Added a Clock class and separated model time from wall-clock time in World.Update() and friends.
  • Converted World from a dense Tile[][] representation of static obstacles to a sparser List.


  • Installed MonoGame SDK from their development branch. Upgraded OpenGL project to .NET framework 4.7.2.
  • Added unit tests to History (#17).
  • Added Input struct to abstract away gamepad & keyboard inputs (#5) and make mutually-incompatible directional inputs cancel each other out (#7).
  • World can now load non-rectangular input strings without erroring out.
  • Refactored Player.HandleInput to be a bit cleaner.

2020-01-06: Infrastructure Week

  • Thought of a potential company name. Bought the domain & did a first pass of logo design.
  • Investigated GitHub / GitLab / Phabricator; chose to stick with GitHub (free) for now.
  • Set up G Suite & some skeletal Google Cloud infrastructure (including placeholder webpage).
  • Renamed project codename from "Jumpy" to "sneak".
  • Set up copybara pipeline to make a public mirror of parts of the repo.
  • Converted TODOs in the codebase into proper GitHub issues.