August 2023 Update (part 1)


Hey! I've been busy moving house over the last few weeks so not a hugely exciting update this time. In the last week or so I've been putting off graphics work and instead have added a rudimentary replay system:

https://twitter.com/splopp/status/1689549329441476608

Hoping to get the overworld graphics update done soon + other work, hence the "part 1" in the title. (I'll be tricked into doing another update now you see)

Replays

Since save games are already implemented, they provide a consistent "starting point" for replays. A replay is recorded until the player saves the game or dies, effectively building up a full "history" of the playthrough.

Each demo recording is stored in a directory with a few files:


The recording data is each user control press / release, along with the frame in which that control was updated. The game runs using a fixed update loop so we get that part of "deterministic" for free - the challenge was updating the use of randomly-generated values to be consistent across replays. In the end, all random values were split into either deterministic or non-deterministic, for mandatory-for-consistent-playback values and just-a-rendering-concern, respectively.

Since "persistent library data" (e.g. locations of ladders, throwables etc.) is stored as separate files, the demo also needs to track all libraries entered by the player during their recording, keeping a snapshot of the library at the time of first entering. During playback, these snapshots are loaded in and will be updated as the player enters / leaves the library (the changes are thrown away once the playback ends).

We also need a snapshot of the player's profile data, since this is a single file that gets updated every time the player saves. We also keep a "profile-after" snapshot for posterity.

Finally, there is a "version.txt" file which is just the version of the game at time of recording, saved as plaintext. Since any additions / changes to the game update loop can change how random numbers are generated, and changes to the levels can cause player input to be out of sync, we can't guarantee that a replay will work for future versions. Playback will still run, but a warning is logged if there's a version mismatch.

Dust

The thief can now kick up dust as they move around:

https://twitter.com/splopp/status/1689556247970975744

If they move in the same space enough, all the dust will be kicked up and no more dust will appear. It could be fun to add a "cleanliness" grade for each screen at some point, but for now the graphical aspect is enough.

Other

  • Fixes for transitions
    • Work around Monogame's fixed time step approach with a laggy "middle" transition frame, to ensure transitions look smooth
    • Fix the first half of the transition not adhering to the game's colour palette (this was also a Monogame workaround)
  • Updated house area graphics (will be covered in a later update)
  • Only light fire / candle on action
  • Improve bed bouncing (allow consecutive bounces)

Fin

That's it! It's been a slow month but hoping to get start making some big / important changes to the game in the coming weeks. See you in the next one!

Leave a comment

Log in with itch.io to leave a comment.