Starting, timing and pausing conversations/sequence

Announcements, support questions, and discussion for the Dialogue System.
Post Reply
Matt_VoxPrima
Posts: 20
Joined: Tue Apr 22, 2025 3:33 pm

Starting, timing and pausing conversations/sequence

Post by Matt_VoxPrima »

Hello!

This is another one that we've researched a lot...

So after experimenting with Delay() etc. we discovered that putting @# at the end of a sequence line was pretty much the only way to time things in a way that actually works (at least for us). And each command must be calculated in absolute relative to 0 second.

MoveTo(GoTo_Monk, NPC_Monk_Thin_00, 7);
AnimatorBool(walking, true, Sheet_Player_Idle_Bot_0);
AnimatorBool(walking, false, Sheet_Player_Idle_Bot_0)@7;
SendMessage(FadeIn, , MessageManagement)@6;
SendMessage(FadeOut, , MessageManagement)@9;

(We're still figuring out how to do a fade to black that doesn't turn off right as soon as the timer is done.)

Is this really the way to do it?

Now say I want to make a sequence like in Disco Elysium, where you "randomly" walk in the street and a voice in your head starts talking. Well, this must not happen in the middle of a conversation with another NPC, it must wait until that conversation is over, then resume its timer.

Missing any type of a "timer" component that we can pause and resume, is it possible to do this?
Pausing the entire world is not worth considering because we have animations running on characters (dialogue reactions, etc.).

Thank you!

Matt
User avatar
Tony Li
Posts: 23251
Joined: Thu Jul 18, 2013 1:27 pm

Re: Starting, timing and pausing conversations/sequence

Post by Tony Li »

Hi,

A few notes:

To fade to black and have it stay black (or whatever color you choose), use Fade(stay), not Fade(out). Example to fade out over 1 second, stay black for 2 additional seconds, and then fade in:

Code: Select all

Fade(stay);
Fade(in)@3
You can use messages for timing. For example:

Code: Select all

AnimatorBool(walking, true, Sheet_Player_Idle_Bot_0);
MoveTo(GoTo_Monk, NPC_Monk_Thin_00, 7)->Message(Arrived);
AnimatorBool(walking, false, Sheet_Player_Idle_Bot_0)@Message(Arrived)
Another example:

Code: Select all

Fade(stay)->Message(FadedToBlack);
Delay(2)@Message(FadedToBlack)->Message(Delayed);
Fade(in)@Message(Delayed)
Let's say you have your own customer sequencer command DoSomething() that runs for an indeterminate amount of time. Example:

Code: Select all

SetDialoguePanel(false); // Hide dialogue UI
DoSomething()->Message(Done); // Your custom command, When done, sends "Done"
SetDialoguePanel(true)@Message(Done); // Show dialogue UI when DoSomething is done
If you've seen Eternights or any of Gua's games, they use sequencer commands for some very extensive sequences.

If you don't want to run a sequence while a conversation is active, you can check DialogueManager.isConversationActive.
Post Reply