Coding problems away

The week started slowly due to random chores, but I still got a ton done. I had a good deal of coding setup to do, like setting up adequate repos on Github and configuring my environment for sane standards. One good thing about not having to get an agreement among a large group of coders is that I can avoid annoying configurations like “Tabs for indentation” and “80-character lines”!

I spent a couple of days reviving the 2015 Outsider script and brushing it up. I wrote the original under time pressure due to the demands of my employment, so I now took the opportunity to fix English mistakes and typos and remove some cringy dialogue lines. This was necessary to create a solid foundation for writing Outsider Zero (remember, that’s a working project name!), which will be based on the original but will significantly expand on the story by adding old thoughts I had no time to add originally.

I had forgotten how much work writing is, so kudos to all writers out there. Even motivated, it’s a slow craft, not unlike carving or painting. Despite the low speed, I got to “remaster” two of the six original chapters; they are much better now! I plan to release the original story as a post-release add-on, perhaps in a possible “support pack,” in case I settle on the main game being free.

Besides writing, I spent a lot of time coding - not the actual game, but little demos that isolate technical challenges I know I will have to overcome in the final product. It’s a form of aggressive risk reduction, a personal trademark in how I manage projects.

I focused on two problems. Firstly, I wanted to establish a productive pipeline for integrating 3D Blender assets into the game while mixing them with the existing “2D on 3D” approach I described last week. This was a lot easier said than done, as I hit a few glitchy and incomplete parts of Godot, such as the limitations with importing materials from Blender, undocumented limitations on light cull masks on the Mobile renderer (I am using the Mobile renderer instead of the fully featured Forward+ renderer), sRGB->linear color space conversion mysteries, aligning Blender and Godot measurements, etc. Ultimately, I fixed everything and it all works, including integrating looping animations created in Blender! I am not sure I will need every feature I got working this week, but it’s good to have the flexibility.

Secondly, I wanted to get click maps to work. This is an old technique from some point-and-click adventure games, where you have a main bitmap and a hidden bitmap that specifies clickable areas. For instance, I played around with this stage from the game Kentucky Route Zero:

Kentucky Route Zero

Note the colored areas, which are supposed to represent clickable areas with different actions. The original game doesn’t use these as clickable areas, but if I wanted to, how would I implement it? In this case, the colors come literally from my click map, which has a much lower resolution than the main bitmap. If Outsider Zero didn’t support different resolutions, that would be quite easy to integrate. But the click map must be rescaled along the main bitmap because the game supports many different resolutions and aspect ratios. After a lot of searching, I discovered that Godot doesn’t allow me to query the rescaled size of automatically rescaled bitmaps, so I had to replicate the algorithm manually to solve this problem. In the end, that worked, too!

I have been slacking on the audio/music part of the game, so I will likely spend some time on this in the next couple of weeks. I will also start coding gameplay, which I foresee as the most challenging part of this development phase. If I can deliver the gameplay in the next few weeks, I believe I will be able to release the first playable demo in October (to Discord server members)!