Making choices for two characters during dialogue?

Hello,
I want to write an interactive story in Twine (Sugarcube) where the point of view switches between two characters. My goal would be to give the player an insight into their thoughts, emotions and relationship and let them make choices for each of them.
Depending on the player‘s choices and the relationship between the two characters, there would be different endings.

Here is the tricky part:
I also want to include dialogue between those two characters.
My idea is to let the player make choices for both characters during dialogue and have them react to the other person.
Otherwise it feels like I am taking away a lot of player agency if they can only choose the responses for one of them when they were also playing as the other character before.

I‘m pretty new to writing interactive stories (this would be my third) and I would love to get some feedback from others who are more experienced:
Could this even work?
Are there other games who include something similar?
Do you have any tips on visually distinguishing each person during dialogues? (I thought about having the choices for one person be left aligned and the other right aligned or using different colors).

At first glance, the potential issue with this seems to be scale. That conversation could get very big very quickly, if you have to write and code all those possible branches. If you are going to do this, I would suggest thinking about which dialogue options you want to create major branches and which ones might be a little different in flavor but ultimately flow towards the same thing.

For example: if A tells B “I brought you here to ask you to marry me” (and perhaps that’s already one of several dialogue options), B’s “I was actually going to suggest we break up” is one major branch, but “Yes! Yes!” and “I love you but we’re not ready for that” print different first paragraphs but the second paragraph is going to be “Let’s talk about how we can keep strengthening our relationship” for both of them. (Or “Yes! Yes!” is a major branch but both “let’s break up” and “not yet” lead to a conversation about how they fight all the time or work keeps them away from each other too much or something.) Does that make sense?

2 Likes

Yes, that makes a lot of sense, thank you!
The scope will definitely be a major challenge. I‘m outlining the story right now and already cut it down to the most essential things but there are still a lot of things that might not make it because it gets too complex.

Sounds like an interesting concept. I don’t use Twine but I write in AXMA which has a <<choice>> macro which essentially lets the player click a radio button (it’s actually a check mark) so they can toggle multiple choices on the same screen before proceeding with a link.

In AXMA, the choice macro sets a variable and there can be multiples on each page like:

They:
<<choice 'Discuss the weather.;Discuss the problem.;Frown.' $dialog1>>
Your response:
<<choice 'I hate rain.;Avoid the problem;Smile.' $dialog2>>
[[Proceed|passage2]]

The player can pick from both lists (or not) before clicking proceed. The variables will be set at 0 if no choice is made, 1 for the first in the list, 2 for the second, etc. So then in passage2 you’d just compare each combination.

(This is just an example of how I’d do it in AXMA - in Twine there hopefully is a similar “radio button” style choice option; your code likely won’t match this at all, but conceptually…)

::passage2

  <<if $dialog1 eq 1>>
"Wow it's raining pretty hard."
<<if $dialog2 eq 0>>
Your response is silence.
<<elseif $dialog2 eq 1>>
"I hate rain," you respond.
<<elseif $dialog2 eq 2>
"I'd rather not discuss it," you say.
<<elseif $dialog2 eq 3>>
You smile back.
<<endif>>

  <<elseif $dialog1 eq 2>>
"I think we need to discuss this problem we have..."
<<if $dialog2 eq 0>>
You have no answer to that line of questioning.
<<elseif $dialog2 eq 1>>
"I'm too furious to discuss this because of all this rain," you grunt
<<elseif $dialog2 eq 2>>
"Tell me news of that sports team you like?" you interrupt.
<<elseif $dialog2 eq 3>>
A smile is your response. You'd rather not talk about it.
<<endif>>

  <<elseif $dialog1 eq 3>>
A frown crosses your friend's face.
<<if $dialog2 eq 0>>
You don't respond to whatever they're unhappy about.
<<elseif $dialog2 eq 1>>
"You're angry about the rain too? I can see it on your face!"
<<elseif $dialog2 eq 2>>
"Tell me news of that sports team you like?" you interrupt.
<<elseif $dialog2 eq 3>>
You smile back in opposition.
<<endif>>

  <<else>>
You both stare at each other over cooling cups of coffee with little to say.
  <<endif>>

Alternatively if that’s too complicated, could you just do both sides of the dialogue “turn-based”? You’d have the player select a dialogue option for one character then on the next page choose the other character’s response.

The natural difficulty (as @KitParsing points out above) in this is avoiding a time-cave like situation where your simple coffee conversation combinatorially explodes into a branching maze of hundreds of potential responses and choices. This can be limited somewhat by smart planning and bottlenecking, but naturally-flowing dialogue with choices is always going to be a complicated undertaking.

One trick I’ve found that helps is to control the conversation’s actual structure - limit the actual subject branches, but give the player a lot of choices on the page that all trickily lead to the same next conversation node. This requires temporarily remembering the player’s response and varying transitional lead-in text to make it feel natural but still go exactly where you want it to. This will be harder if you’re letting the player make choices for both characters, but can be done with good planning. You’re giving the illusion of choice and agency but still keeping control so your weather/coffee conversation doesn’t end up taking 300 passages to complete! :wink:

3 Likes

You are in luck because this has been done before with success. So… this is a good time for you to but and play the whole Kentucky Route Zero.

2 Likes

@HanonO Choosing both answers at the same time is very interesting, thank you for showing an example of how you wrote that!
I‘m using the << cycle >> macro in Twine for choices outside of dialogue and that might be a way to implement that as well.
Right now I‘m going with the turn based approach during dialogues but I will definitely keep that option in mind.
I‘m really curious to see which of my ideas make it into the final version.

@Ruber_Eaglenest Thank you for the suggestion! That game was on my wishlist and now I‘m definitely buying it. The reviews alone showed some very creative concepts in the game.