Weekly Progress Report #42
Level Teaser: Dodgeball

I started off just making something that looked a little bit like a cannon, but as I added to it and modified the model little-by-little, I eventually had the idea to give it a face. I think that face adds a lot, and am pretty happy with it. If you've got a name suggestion for this guy, let me know in the comments!

And here's some footage of actually playing the level.
Replay System Improvements
This week was when I realized that I finally needed a comprehensive solution for recording things in the replay system. For some background: The initial version of the replay system only recorded the player character, not anything in the environment. Eventually I added in the ability to record the position and rotation of objects in the world, which meant that any level where scenery moved could record properly. After that, I added a way to record whether something was activated, to support things like rings, Jackpot Pegs, etc. This system only supported things that stayed on once they were activated. After that, I added a way to record a change in a decimal value, which let me support things like the scoreboards in some levels. And so on and so on. You may have noticed a pattern here: I was adding support for each type of thing individually, instead of making a comprehensive solution for all the things that could be recorded.
While working on the level teased above, it became pretty clear that I needed a way to record arbitrary data in replays, and that mix-and-matching a set of predefined types wouldn't cut it. I could have gotten away with using the "track positions and rotations of objects" logic that I used for previous levels, but it would have bloated the replay file size for this level, possibly by 50x! I was not okay with that, so I implemented a system which allows me to record arbitrary data along with a replay. The actual implementation is similar to that of the earlier replay features, so it wasn't too difficult to do, and it seems to work well.
This lead me to a little bit of a dilemma: Should I port all of the old levels to the new system? My current plan is to just use the new system for new levels, and not mess with the older stuff, in part because I want to make sure I don't break old Leaderboard replays. Eventually though I might decide to clean up the replay code, and at that point I will probably rework the old levels to use the new system. I think I can do that in a way that won't break anything, but I won't know for sure until I try it.