I designated this week a bug-fixing week. I do this when the list of little (and big) issues that I can tolerate during play-testing but players won’t tolerate gets too large. I have found this to be a productive way of dealing with bug-fixing. When I have to fix bugs in the middle of feature development, it’s a hassle. When I allocate a large block of time just for bug-fixing, I’m more motivated to do it and it’s a great feeling at the end because I’ve made the game more playable and moved it closer to launch. Here’s a sample of bugs that were fixed:
- AI now responds to getting hit. Previously, AI response was based on seeing the player. If an invisible player hit an enemy, the enemy would just stand there. Adding a new observation type for getting hit fixed this.
- Minimum projectile range works properly now. This was hard-coded originally because all bows had a minimum range of two cells. Then I added other projectiles such as thrown weapons and wands, and the two-cell minimum no longer applied to every ranged attack. I added a minimum range attribute to item types to fix.
- After adding a regeneration status effect and discovering that one-time use healing potions were healing the player every turn, I realized I couldn’t rely solely on a number of turns item attribute to determine how many turns to apply an effect (the value 0 was used for one-time use and infinite turns; the value 1 caused a one-time effect to be applied twice, once when immediately used and again at the start of the next turn). To fix this, I added a duration type enum to status effects. The possible values are Once, Finite, and Infinite.
- Tooltips were no longer appearing. I discovered this resulted from some code improvement I did a while ago in which I changed how tooltips appeared. Instead of code explicitly calling a method to display and populate a tooltip, I had the tooltip respond to an event instead. This reduced coupling. However, the tooltip GameObject is inactive when the game starts, so the Awake event that adds the event listener wasn’t being called. The solution was to add a wrapper GameObject that is active.
- Tooltips were appearing behind the inventory panel instead of in front of it. I couldn’t fix this with layers or z position, and I couldn’t easily reorder the GameObjects because the tooltip is a child of a GameObject that appears before the inventory panel. I took the path of least resistance by changing the inventory panel layout so that it didn’t overlap the location of the tooltip.
- When the player teleported into a room with enemies, the enemies didn’t act until the player moved. This was fixed by registering a new observation when an actor teleports. Enemies that observe the player teleporting into the room are awakened.
- Similar to the previous bug, creatures that hatched from eggs didn’t act until the player moved. However, the solution was different in this case. Since the creature didn’t have an observation, it didn’t awaken. By changing the creature’s starting state to active in its configuration, the creature can act after hatching.
- The teleport scroll stopped working.
For the next couple of weeks, game dev time is limited due to travel. As time permits, I’ll continue fixing bugs.