Page 1 of 1

Starting, timing and pausing conversations/sequence

Posted: Fri Apr 25, 2025 4:12 pm
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

Re: Starting, timing and pausing conversations/sequence

Posted: Fri Apr 25, 2025 7:32 pm
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.