This week was the first week in 2+ months where I was able to put in a substantial amount of time (10 hours).
- More analytics. To help answer the open questions on balancing, such as whether there are enough equipment drops on the first level, I expanded the stats that are collected during map generation. These stats include the total number of enemies and items, counts of different enemy and item types, and the types of locations in which items are found (debris, chests, in enemy inventory, etc.).
- Analytics data storage. Previously, analytics data was stored in a text file for each session. A major drawback of this method is that it’s not easy to aggregate data across multiple sessions or players. I decided that cloud storage was the best option and started to look at Unity and game-specific solutions. Google Cloud Firestore best met my requirements. I started to integrate it into the Unity project and discovered that it doesn’t work for Windows or Mac desktop applications. That wasn’t clear to me from the Firestore web page. I then considered Unity Analytics but ruled it out also because of its event limitations. The maximum size of an event payload is 500 bytes and event parameters are limited to 10. Some of the map generation events have a variable number of parameters that will often exceed 10. I could have selected a general cloud storage solution but I didn’t want to have to build the additional capabilities that come with a packaged app/game analytics service. Since my immediate need was to analyze enemy and item distributions across many map instances, I decided to simply append data to a set of CSV files and analyze them in Excel. I also realized that there’s no difference in map analytics I generate from my sessions and map analytics generated from other player sessions because there’s no player input. So, I don’t need cloud storage for map generation analytics.
- Automatic map regeneration. There’s now a developer setting to regenerate the map indefinitely. I added this to gather procedural generation stats. While it was running I captured some footage.
- This gives an idea of how long it takes to generate a level and the types of scenarios that can be encountered when starting level 1.
- Level 1 enemy and item analysis. Using automatic map regeneration and the expanded analytics, I was able to analyze enemy and item generation over many map generation instances. I imported the data into Excel and produced the following charts:


- The biggest question I was trying to answer with the analytics was whether there were enough equipment drops, but the analytics revealed a lot of interesting insights:
- Weapons and armor that are superior to the starting equipment don’t drop enough.
- Skeleton Archers are too common. They are the most formidable foe on level 1 and should appear less often than other enemies.
- Animated Bones are too common. Most bone piles shouldn’t be animated.
- Too few bone piles contain items and too many debris piles contain items.
- Magic potions are too common. They can’t even be used in the demo because the only class available is the Knight.
- Some items I thought were disabled (Fire Wands, Oil) are appearing. I better fix that!
- Ability book drops. Ability books have special map placement rules because they grant the player new abilities. Books containing abilities the player already has shouldn’t be generated because they have no use. The possible abilities should be limited based on the dungeon level; lower level abilities should appear in the early levels and more powerful abilities should appear in the deeper levels. Additionally, ability books should be evenly distributed across the dungeon levels for a smooth power progression. I implemented this placement logic this week. Players can finally find ability books and acquire new abilities.
- Bug fixes.
- Game loading issues: loading not working, hotbar not restored, error when using consumables, Abilities panel empty
- UI issues: still able to move when certain panels were displayed, unable to interact with hotbar when some panels were displayed. I created a spreadsheet listing every panel and the different behaviors each panel needed or caused, such as preventing player movement, opening other panels, and interacting with the hotbar. I was then able to easily see the different capabilities that were needed and which panels needed them.
- Able to melee attack far away objects when the objects are unreachable.
- Ambient sounds keep playing after the game is won.
- Ascending to previous levels broke.
- Some enemies leave corpses below instead of above stairs.
The remaining tasks for the demo are:
- Major bugs fixed: 92%->85%. I set this back to 85% because I’m finding more bugs as I playtest more.
- Balancing: 65%
Next week, I’ll fix as many of the newly discovered bugs as I can. I’ll be off the grid backpacking the second half of the week and will skip next week’s Sharing Saturday.

