This week’s achievements are an assortment of small (effort-wise) changes aimed at improving gameplay. I think the balancing changes (adjusting enemy counts) made the game noticeably more fun because they lowered frustration and raised the challenge.
- Generate history after generating the map structure. This is a major change to how levels are generated. Previously, the first step in level generation was generating the history, which included determination of the level sections (dungeon, cavern, etc.), The problem with this is that the level may not have enough space, specifically enough rooms, to accomodate all of the history events. By creating the structure first, the number of history events can be adjusted to fit the level space.
- Game balancing
- Reduced frequency of enemy groups. On the first level, the player isn’t strong enough to take on more than one enemy at a time (except for weak enemies). There were too many rooms containing multiple enemies, almost always resulting in the player’s death. Groups of enemies that are comparable to the player’s power level are now very rare.
- Increased frequency of solo enemy encounters. Many rooms didn’t contain any enemies. This made levels sparse and not challenging. Most rooms now contain an enemy.
- Indicate if an item can’t be used in the Item Tooltip. Twice I thought there was a bug with using scrolls, when I simply forgot that the Knight class can’t use scrolls. Indicating unusable items in the Item Tooltip is useful feedback for the player and a useful reminder to me when testing.
- Mushrooms and Crystals only drop items sometimes. Previously, destroying a Mushroom or Crystal produced a piece of the Mushroom or a shard of the Crystal. However, I found that destroying a large group of Mushrooms/Crystals was boring. Having these objects drop items only some of the time seems more interesting.
- Terrain advantage when standing on Stairs Up tile. Actors now get a bonus to hit when standing on stairs going up because they are on higher ground. Players can use this to gain an advantage in combat at the start of a level.
- Decreased Message Log width to prevent messages from obscuring too much of the screen and to make messages easier to read.
- Actor Editor Inventory Profile field validation. This catches Inventory Profile issues at design time instead of run time.
- New item: Cure Disease potion.
- Bug fixes
- Sometimes entities can’t be placed on the map because there are no eligible cells. This was caused by applying additional cell filters after applying the cell distribution (get x or x% cells). I’ve unintentionally used this anti-pattern (apply filters, apply distribution, apply more filters) in several parts of the code, and it’s caused multiple bugs.
- Heavy Strike not causing 2x damage.
- Campfire placed inside of a wall.
- Miscellaneous exceptions occur during map generation.
Next week, I’m enabling history generation to use the map graph to determine event locations. Currently, the history generator selects a map block (room) based on criteria such as size and shape. The map graph gives the history generator more precise placement control. For example, a cluster of nodes off the main path could be identified and used for a bandit hideout.