My main goal for the week was to create the Release 4 feature list. As I mentioned last week, Release 4 is focused on refining gameplay/user experience through small adjustments and improvements. To create the feature list, I started a new game and jotted down ideas as I played. It was helpful to play the game with the mindset of looking for small changes; it enabled me to find problems and opportunities I hadn’t noticed before. This process also revealed that creating the complete Release 4 feature list is impossible. In previous releases, creating the feature list up front was doable because the goals were to create specific systems, mechanics, and content. Release 4 is more iterative and uncertain; I’m going to play, identify adjustments, implement adjustments, test, and repeat.
- Game juice for movement. I’m trying to make moving look and feel better using various animation techniques (a great resource is Jeremiah Reid’s excellent talk on game juice given at this year’s Roguelike Celebration). I want actors to have a slight bounce as they move from cell to cell to indicate that movement is cell-based rather than pixel-based and to make the movement look more interesting. I spent far too much time on this and have little to show for it. I can’t seem to get the animation right – it’s either too bouncy, too slow, or too choppy. This experience highlights a drawback of solo development – the potential inefficiency and subpar results when working outside of one’s areas of expertise. I’m concerned about how much time I will sink into this. Part of the challenge is not having a clear picture of what the animation should look like – I’m adjusting parameters in the code, recompiling, and rerunning the game to see if I like the result. Next week I’m going to either make a custom GUI or move the parameters into a Unity game object so that I can edit the parameters at runtime and iterate faster. The latter isn’t currently possible because the parameters are in actor type data, which is loaded and cached up front.
- Game juice for combat. There’s already some game juice for combat in the way of particle effects, floating damage numbers, and sound effects. I made some small adjustments this week to the floating text. When I originally added this, I had the text rise up and then drop back down, resembling a bounce. I don’t recall why I did it this way; I think I just liked how it looked at the time. But now, I feel that this is unintuitive and unconventional. Why would text indicating damage taken float away and then return to the actor? I changed the animation so that the text now just floats and fades away. I also changed the color from white to red to make it clearer that the number represents damage. I also tried adding a black outline to the text to make it stand out more. But, it didn’t really work because the text uses an NES-style font that looks weird with an outline.
- Map generation tuning. The map generator randomizes generation parameters to produce more varied maps. Sometimes the results don’t pass muster – rooms are too large or small, room density is too high or low, etc. I played around with the minimum and maximum parameter values to more consistently generate higher quality maps. The key takeaways from this exercise were to increase the minimum room size (a level packed with 3×3 rooms isn’t fun) and to more vary room density (the original parameters caused rooms to be tightly packed into the map, virtually eliminating corridors).
- Random name generation. A remaining Release 3 to-do was to flesh out the player info window. This window displays the player sprite, name, class, and stats. The player name isn’t currently set anywhere, or stored for that matter. While implementing the name attribute, I visited the Unity asset store and looked at the available random name generators. None of them jumped out at me. I ended up downloading a free asset that was easy to integrate. The asset is essentially a single script that has a hard-coded list of names. It will work for now, but I’ll need to replace it with a more robust random name generator before the game is publicly released. The good news is that the interface now exists, so swapping out another random name generator should be easy.
Next week, I’ll continue to work off of the list of ideas I produced this week, with the main themes being game juice and map generation.