Postmortem: Heading East (puzzle design, I6)

Better late than never! Right? Right!
I had a discussion with a friend that made me realize I had a few things to say about designing this game that could be of interest to people. Especially the I6 crowd, because I found a ‘trick’ (may be old as rocks, but it was new to me) to implement complicated topics of conversation in I6 !
Of course, spoilers galore - but please play the game if you have 10-15 minutes! It’s linear and there’s a walkthrough! :slight_smile:

So, the songs I got were pretty cool and definitely really diverse, but that song (Vacant Night Sky by Mecca Normal) was the one that evoked the strongest feeling in me when I listened to it (and watched the video too): the low-fi aspect and the raw voice of Jean Smith formed a very clear picture in my head, and evoked some memories of high school, drinking and singing and talking politics. The video evoked a road trip to the forest, I learned they were from Vancouver, I found B.C. amazing when I drove there – done.
One thing that a couple reviewers pointed out was that it was “inspired by the feel and the atmosphere and the band more than the lyrics”. The reason is simple: I couldn’t understand them :slight_smile: Blame the low-fi quality, the fact there aren’t lyrics available on the Internet, but it’s probably due to the fact that English isn’t my first language :slight_smile: The only lyrics I could understand were “thoughts machines in motion” and “this light contributes nothing, it only allows me to see” – I found the latter very intriguing, and decided that she meant ‘art’ by that: art ‘contributes’ (as in, productivity, capitalist society with statistics and worth and profit) nothing, it is ‘only’ a light that gives meaning to our life. No idea if that’s what the song meant, but this sounded really interesting – this became the source of the dispute between Jane and her sister’s husband.

So my plan was to focus on the character of Jane; we’d be a friend, a best friend, someone close, could there be love? but what’s teenage love? why isn’t there love? or is there? Many possibilities, but in the end I decided to not choose anything and let the reader make their own mind about this :slight_smile: Besides, I didn’t want the game to be about love, but about teenagehood – and for some reason, nostalgia and the feeling that teenagehood is ending.
Originally I had planned a lot more scenes, but I had to cut them as I started quite late. Looking back, I’m glad, because I’m not sure those scenes would have brought much more. There would be three scenes: a quick puzzle to learn more about the PC and set the tone, a fun puzzle (or, the idea of the situation was fun, and I liked the idea of the player being like ‘where would my Dad have hidden change in the car’, just like the PC), and a longer conversation scene where we could really interact with Jane. And I had thought ‘yeah, a big conversation, like in Galatea right?’ - ha ha ha, oh what a fool I was to even think this was remotely possible.

But for that last part, I had the idea that it would be cool to do something like that scene in Kentucky Route Zero, where the protagonist knows the song that the singer is performing, and you can choose lyrics and you’ll always be right, because you know the song. I thought it would be pretty cool to attempt to have Jane say ‘help me finish my song’, and the player had to finish the lyrics and she would quip something related to what they said. Two small problems:

  • reacting to any input: way too hard, of course. So I had Jane say ‘yeah, that’s good’ to anything – why not, after all: the moment feels fine, anything is good.
  • making the player understand that you want them to personally enter the rest of the lyrics when the prompt stops: really hard! In fact, no one guessed it. I had the lyrics come up in ‘reverse video’ and the prompt wasn’t, but that didn’t help – there was nothing differentiating it from a pause where you’re suppose to press Space, not even in the game’s reaction. (The lyrics were unfinished, but some shrugged it off as poetic license.) I didn’t want the prompt to go to a new line for the graphic effect of literally completing the lyrics, and I didn’t want to insert a > for the same reason. My wife ended up suggesting using “…”, but even then the players didn’t really understand that was what they were supposed to do. In the end, I scrapped it altogether, and replaced it with a system where what completes the lyrics is inspired by the conversation (5 different themes tracked, 20 possible endings!), which works better.

That’s also the part where I want to GUSH over my betatesters - Doug, Jacques, Juhana, Neil, thank you so much for your great help and feedback. Their input was very helpful for that last puzzle, but also for the middle puzzle (when you want player to guess car parts, you better implement them all, plus a hint machine to make things less frustrating/repetitive! still don’t know if that puzzle is fun for most people, but they definitely made it better), and, yknow, the rest - they uncovered 100+ bugs in a few days, and I’m really grateful to them! :slight_smile:

The last thing I wanted to discuss was how to implement complex topics in I6. (I might be, like, 15 years late to the party, let me know?) I realized I couldn’t have state tracking and dynamic conversations because the deadline was looming, so I decided that my goal would be to recognize complex and subtle topics instead of just keywords. And I did pretty well, since the game recognizes stuff like

with minimal effort on my part. I don’t really know if that was picked up by players - simple keywords are also recognized, and since that’s the convention people probably didn’t think more complex inputs were recognized. (Which brings up the question: is it actually useful if the player doesn’t see it? and should you do it, or would it raise the player’s expectations too much and they’ll start typing “>tell jane that her hair is very pretty like that” and other complicated inputs?)

Anyway. The basic trick is in page 233 of the DM4:

[spoiler][code][ TopicScope;
1: rfalse;
2: ScopeWithin(Topics);
3: “There is no reply.”;

Extend ‘ask’ first
* creature ‘about’ scope = TopicScope -> Ask
* creature scope = TopicScope -> Ask;

Extend ‘tell’ first
* creature ‘about’ scope = TopicScope -> Tell
* creature scope = TopicScope -> Tell;[/code][/spoiler]
This allows you to create conversation topics as objects. Why would you do that? Because Inform is flexible for recognizing object names, since you can put anything in parse_name. But parse_name is hard, since you have to write code to cover all your possibilities, and it gets quite big; that’s why I wrote PhraseNames, which generalizes the extensions like pname.h and the ones with adjectives. The point is, I have objects like that in my code:

Topic -> missingyou_topic
	with phrase_name 'whether' '.or' 'if' 'she' '.or' 'Jane' 'will' 'miss' 'you' '.or' 'me' './' 'missing' 'me' '.or' 'you',
	phrase_name2 'leaving' 'me' '.or' 'you' '.opt' 'behind' './' 'forgetting' 'about' 'you' '.or' 'me' './' 'me' '.or' 'yourself';
Topic -> summer_topic
	with name 'summer',
	phrase_name 'summer' 'plans' './' '.opt' 'her' 'plans' 'for' '.opt(' 'this' '.or' 'the' '.)' 'summer' './' 'this' '.or' 'the' 'summer';

The conversation then is just a standard “switch(second)” in Ask.
It’s more readable than parse_name (’./’ separates sentences, ‘.opt’ is optional, ‘.or’ is one or the other), and requires minimal effort to craft. I was pretty pleased when I found out I could do that, and will definitely reuse that trick.

And I guess that concludes this post-mortem! Thanks for reading all that :slight_smile: