2026-08-09 To Type a Tale devlog
Steam achievements and story progress
published: Sun 09 August 2026As promised last week, this week saw the implementation of Steam achievements and the completion of chapter 2. A few other minor changes were made, but those two ate up most of my week.
Steam achievements were actually remarkably easy to implement... when running the in-editor version of the game. Unlocking an in-game achievement also triggers the Steam achievement, transitioning from demo to full version shows a page asking if the player wants to preserve or reset progress, and re-launching the game after a network hiccup will check for and unlock any Steam achievements which were unlocked in-game but not on Steam. That all took me about 2 hours (standard work day for me). But then I uploaded the daily build and discovered that it just flat out doesn't work outside the editor. I won't bore you with the technical details, but the main cause was the way I separate builds and how Godot detects/loads GDExtensions (including the GodotSteam library). It's all fixed now, though, so you can unlock Steam achievements if you have an early release copy.
I also finished implementing the shaders for outline (needed for explosive challenge), shifty (needed for ghost), and smoky (needed for shadow). If you have an early release copy, you can see the ghost words in chapter 2. Otherwise, you can see them by generating the mod documentation and following its steps to create a test tiac with the appropriate challenges.
Because I know some people will just want to type full pages of text without thinking about the challenge words (looking at you, Wlonkest in Wede), I added an option that allows you to disable challenge penalties. They'll still perform all of their other action effects, but they won't subtracts words/letters from the bank and they won't flash the overlay showing what you lost.
On the story side, as mentioned, chapter 2's text and challenges have been completed. I still have to figure out achievements for chapter 2 and re-balance any conditional choices, but that won't take long. Chapter 3 has been started and I have finished the first section of it (out of approximately four). Finally, I've added the Steam achievements for the mini-story (available in the modding documentation).
Next week's TTaT progress will mainly be focused on story work. I have one last coding task in TTaT (better conditional choices), and then my code attention shifts to new projects.
Raw Git Log
- implemented Steam achievements
- unlocking in-game achievements now also unlocks the Steam achievement if you are playing on the full Steam version
- if you previously unlocked an in-game achievement in the demo Steam version and start up the full Steam version, you will be presented with a message asking if you want to carry over progress or reset; if you carry over, in-game achievement progress will be synced to Steam; if you reset, all story and achievement progress will be reset
- in case of network hiccups, the game also attempts to sync in-game to Steam each time the game is started (Steam version only)
- the carry-over, full-reset, and generate-mod change commands now all share a "special" command, which will remain undocumented
- the loader now shows a message about Steam connection
- the "reset achievements" subpage in options now allows resetting Steam achievements as well
- added stubs for ch03, ch04a, and ch04b so I don't have to remember to change their export status when I eventually get to writing them
- fixed issue with TOCs not being added to prev-chapters dict
- also added GodotSteam tiac to licenses chapters list
- added achievement images for mini-story
- reworked how GodotSteam is imported
- due to GodotSteam being packed into a pck file, it does not properly initialize when we load it with ProjectSettings.load_resource_pack; so we need to repack the libs into the zip and use an altered gdextension file, then manually load the gdextension file at runtime (the libs can't be in the pck for some reason; worth looking into later)
- writing: finished chapter 2
- finished implementing shaders
- outline, shifty, and smoky are now implemented
- I'm not entirely happy with how shifty looks, but it can be tweaked later
- writing: prep for ch3 and adding challenge words to ch2
- added option to disable challenge penalties
- I know WiW likes to just type every word on-screen without pauses; I can't really accommodate that for change words, but I CAN accommodate that with the challenge words, so I added an option that simply disables challenge-word penalties
- fixed bug with challenge timers not having a stop function
- fixed bug where challenge migrations were not setting _modified_from_raw_text on the new word
- writing: first side-story of chapter 3 complete
- fixed a minor bug with pre-collection interfering with page-on-complete
- when I changed where pre-collection occurred to accommodate the new challenge word displays, it messed with how main calculates which paragraphs are complete; fixed by simply removing the early-return of _on_paragraph_collected when pre-collecting