Two days ago I ran into a very peculiar problem that I haven’t been able to find a solution for.
There are 3 main characters in the game; the Wife, the Cop and the Player.
Each character can interrupt the other one during a dialog, and if this happens, the interrupted character will try to resume the conversation once there is an opportunity to do so.
I thought the system was working well until I ran into this situation:
The Wife started a dialog with the Player, and at that exact moment the Cop interrupted us and started a conversation with the Wife. Immediately after I decided to interrupt them and start a dialog with the Cop.
Since the Wife second conversation, the one the Cop started, had just been interrupted by me, she was free to resume her original dialog with me, interrupting the one I had just started with the Cop.
If you are still following all this, this meant the Cop was now able to restart his conversation with the Wife, which in turn made my character able to resume his dialog with the Cop.
And so, all three characters were stuck in a loop, all interrupting each other and trying to resume their original conversations!
I find this hilarious but also troublesome…
There isn’t a ‘bug’ per se, the system is doing what is supposed to do but the results are clearly unacceptable. So what is the right solution to this problem?
If this situation was happening in the real world, someone would stop talking and listen to the other conversations, or just give up trying to say the same thing over and over. But which one of the conversations is more important? Maybe I should create a priority system?
Or maybe I should do the opposite and mark the conversations “not worth having”. The Cop was accusing the Wife of murder, while the Wife was just having a casual conversation with the Player. So with this in mind her dialog should not be allowed to interrupt the one the Cop started.
Another idea would be for the actors to be aware of what are the conversation around them. If they are more interesting/relevant than the conversation they want to start, they will wait until it’s finished.
As I was going through all these options I realized that the correct solution is not to do anything, at least for the moment.
None of these options is wrong but I also don’t know which one is right.
I’ve already learned that implementing and rewriting different ideas is not the best use of my time, so I’ll just wait.
I’m pretty sure that I’ll run into the same problem with different variables, and as it has happened before, hopefully a pattern will emerge that will show me the right solution!
How exciting! Sounds like the dining philosophers problem. Here’s the Wikipedia article about it and some possible solutions 🙂
http://en.m.wikipedia.org/wiki/Dining_philosophers_problem
The cheapest solution would be to simply stop the flow of time as long a conversation is held. So there would be no interuptions at all (This is how they handled it in Majora’s Mask). But I think that’s not what you have in mind with your game.
The dialogs being in real-time are a core part of the gameplay. Time only “freezes” when you are deciding what objects to combine or selecting a dialog option.
I actually lean the most towards how important certain dialogs are and how the character would not care about saying it again if interrupted about something else.
Maybe one solution could be to set that any character can interrupt the same character twice in a small period of time, not sure how long the conversations can go, but I’d set about a 5 min margin between interruptions. So after failing to interrupt for first time, the character will wait until the other one has finished talking (maybe marking also the end of conversations with some sort of “flag”?)
Looks great, and I love the fact that you’re sharing your process, keep it going!
I think the priority idea is the best, because it’s most like real life: if you were having a conversation and a police officer pounded on your door, you’d stop what you were doing and give it your full attention.
My first instinct is to say that player-triggered conversations should be prioritized, and nobody can interrupt them. But that could lead to odd moments where the cop is politely waiting for you to finish your casual conversation before arresting the wife.
The “expected” behavior here, as a gamer, would be for the cop’s arrival to render all previous conversations irrelevant – a sort of “uber-interrupt”. (if you think about them as real people, it wouldn’t make sense for the wife to try to resume her conversation with you that had started when the cop arrived). But this sort of case-by-case decision making is sure to leave plenty of cases like this in the game that have to be hunted down and fixed, one by one.
Actually – one more solution just occurred to me – what if a “resumed” conversation (that was previously interrupted) cannot itself interrupt another conversation? It will just wait until both actors involved are free.
That last suggestion is pretty good. I’ll definitely try something similar!
If you want my opinion: a cop is a cop! So, that person has your full attention in real life!!
Anyway, if that’s not the idea in the game, maybe if you control the time each conversation starts, the early one has priority, then the other, …and so on. This could be an approach. And doesn’t allow for the endless loop.