Terrorformer TD Devlog #13: Achievements


This is the thirteenth post in an ongoing series about the development of my thesis project, Terrorformer TD (formerly Clockwork TD).

Into the final stretch before Alpha! Earning XP and leveling up in-between matches is cool, but that progression has to actually do/mean something for it to matter. By building an Achievements system and linking unlocks directly to an “achievement” (whether listed as a traditional achievement in-game or not), the player gains the feeling of gradually improving the more the play the game (even if their actual skill level never increases).

Achievements in Terrorformer TD are divided into three types: Lifetime, Game, and Round. Lifetime achievements are earned as a result of the player’s cumulative playthroughs: 500 total enemies killed, 100 total matches played, 250 total rounds survived. Similarly, Game and Round achievements are only measured over the course of a single game or round, respectively. The type of Achievement determines when it is checked:


Achievements are unlocked by evaluating a list of AchievementDetails; when all details evaluate to true, the achievement is unlocked (and not checked again):

 

AchievementDetails can target anything using class overrides; this one simply looks at counters in the the game’s lifetime stats dictionary and compares their values to the achievement’s goals:


Using the awesome SeralizeReference tag in combination with NaughtyAttributes’ simple Button tag, we can very easily make a very flexible & customizable Achievements system without having to create separate ScriptableObjects for each AchievementDetail, or complicated custom Editors:


This lets us use achievements as the basis for gating off progression in a purely data-driven way:

Finally, I really liked the way the taller info panels (each with their own icon) looked in the redesigned Game Over window, so I went through the game and standardized on their look, rather than the simple Title / Body cards that I had been using. I think the resulting look is really clean and nice:

The one thing the Achievements system could use is the ability to disqualify an achievement based on an event or counter–like an achievement for going 10 rounds in a row without taking any damage, for example. You would need a Reset condition that would cause the achievement’s counters to roll back to zero whenever it’s encountered (like taking damage). As I come back to this system in the future, I’ll be taking a look at that then; in the meantime, the last item on my check list before I feel comfortable declaring Alpha is reworking the semi-guided tutorial I had in the game. As the game has grown and evolved over the last month or so, it’s now necessary to rewrite and redo the tutorial so that it better matches the game’s details and goals. 

See you next time! 

To read the full version of this post with code snippets and video examples, visit onewinter.net.

Get Terrorformer TD

Leave a comment

Log in with itch.io to leave a comment.