The Full Indie Summit was a blast!
I played some great games, met awesome people, and got a ton of feedback on Manley Mann. I even managed to sit down for a few presentations.
Manley Mann Feedback #
We got a lot of love for Manley Mann. One player described their favourite moment: when they built a step stool with nails sticking out and a couple misaligned planks the imperfections made them feel more ownership. Nobody else’s build would be exactly the same and it was an accurate representation of their current skill level. Plus it gave them something to work toward.
We also found two bugs. And one of them was a showstopper.
The Bug #
Here’s the game flow for the demo: do the tutorial quest, then talk to the three NPCs, each of which gives you one quest. On the first play through everything goes smoothly. Then you go back to the main menu and start a new game and now, after the tutorial, none of the NPCs have any quests for you.
The most bewildering part was that closing the game and running the executable again didn’t fix the problem. It persisted between runs!
A few clues helped me diagnose the issue quickly:
- The bug only presented in the exported binary. Not from the editor.
- A similar bug had occurred with character portraits disappearing from the dialogue.
- The root problem for the portraits bug was that I was fetching the images from the file system.
File System vs. Resource Embedding #
I realized that the problem with the images in the character portraits bug also applied to the quest definition resources. I should not load them from the file system. But my QuestSystem class was doing just that: scanning the quests/ folder for quest definitions and reading them to initialize instances of QuestDef at runtime.
All I had to do to fix the issue was to convert that code to use the global load() function and hard-coded paths to the quest definition files. I’ll have to investigate if there’s another way to dynamically read files at runtime but at the time this was just what I needed.
Here’s what it looks like:
_quest_defs = [
load("res://quests/bench/benchQuest.tres"),
load("res://quests/table/tableQuest.tres"),
load("res://quests/stepStool/stepStoolQuest.tres"),
load("res://quests/shopSign/shopSignQuest.tres"),
load("res://quests/tutorial/tutorialQuest.tres")
]
You may have seen a warning that this would happen if you got this message in the Godot output panel:
Loaded resource as image file, this will not work on export: '[path]'. Instead, import the image file as an Image resource and load it normally as a resource.
Writing Code at the Booth #
Thankfully, I was able to implement the fix and update both computers within a few minutes. However, ideally, I would’ve found the issue earlier. I’ll have to remember to test multiple runs of the exported binary before the next play test.
I didn’t realize it at the time but my team said later that while I was banging away at code on my laptop, six or seven students gathered behind me. They stood there watching over my shoulder and nodding as I typed and tested.
I’m glad I didn’t notice that I was being live code reviewed.