At least in my half of the kitchen, yes.
First of all, my game went through a round of beta testing. (Thanks Melisande, dgtziea, and rh!) They confirmed that the opening was indeed too difficult, but once they understood the mechanic, they had no further problems interacting with the game. I have a few ideas to make the tutorial somewhat easier, and I’m considering going even further in that direction.
Also, I implemented two puzzles in the midgame, got all the rest of the NPC conversations working, and added several context-sensitive topic suggestions and clues to help players through this segment. It’s now possible to play it continuously (through both branches) until the beginning of the final scene! (Unfortunately all my testers will get a cliffhanger ending tomorrow.)
The code behind the conversations themselves isn’t anything particularly special. It’s basically just a giant if-else_if chain for each NPC:
: else_if (current_topic == 3) {
: print "\"Why do you think nobody wants to leave the town?\"\n\"Who told you that? I'm going to leave the town as soon as I get enough money to make having moved here worthwhile,\" he says.\n\"Is that so,\" you say.\n\"As for the others, I think they're all too weak-willed to really face the prospect of change.\"";
}
: else_if (current_topic == 5) {
: print "\"Do you happen to know much about the Prophet?\"\n\"No. I don't go to the Temple and I stay as far away from him as possible.\"\nYou nod.";
: collection_push collection="relevant_topics" value="2";
}
: else_if (current_topic == 9) {
: print "\"How's business at the casino?\"\n\"Slow but steady,\" he says. \"Someday I'll make enough money to move on to bigger ventures.\"";
: collection_push collection="relevant_topics" value="0";
: collection_push collection="relevant_topics" value="3";
: collection_push collection="relevant_topics" value="10";
}
: else_if (current_topic == 10) {
: print "\"That situation back at the saloon seemed like it could easily have become a fight,\" you say to Theas.\n\"I know how to handle myself,\" he says a little haughtily. \"Your advice was reasonable. But make no mistake, I will get that cow poker's debt paid one way or another, even if the Warden won't cooperate.\"\n\"Well,\" you say, \"I'm just glad it didn't turn out worse.\"";
: collection_push collection="relevant_topics" value="6";
: collection_push collection="relevant_topics" value="9";
: collection_push collection="relevant_topics" value="0";
}
The only noteworthy thing is how topic suggestions are handled: a few push calls put topic IDs into a single list where they’re processed at the end of each conversation turn by the routine I described in my previous post. Overall the coding overhead is minimal, so I can focus on just writing lines of dialogue. That’s important when there are five NPCs that each respond to eight to twelve topics, sometimes in context-sensitive ways.