Three Way Conversation Tutorial
This tutorial will explain how to create a conversation between three NPCs. Note that it will be necessary to know how to create new NPCs and new topics as that will not be covered in the scope of this tutorial (in order to keep this one concise). Also, some scripting is involved; we will be using the functions Say and SayTo, and the blocktype SayToDone throughout the tutorial.
To start, you will need the following:
- Three new non-playable characters (NPCs)
- Topics (what the characters will say)
- A way to set the StartTalking variable
For the example, we're going to recreate a conversation from Three Amigos. Our three new NPCs are Lucky, Dusty and Ned, and here are the lines each has:
|Dusty: Lucky. What are you gonna do with your share of the money?||DustyTalk1|
|Lucky: A car. A big, shiny, silver car. I'll drive all over Hollywood... show Flugleman a thing or two. What about you?||LuckyTalk1|
|Dusty: New York. Maybe Paris. A lot of champagne. Parties. Be a big shot for a while.||DustyTalk2|
|Lucky: Yeah. How 'bout you, Ned?||LuckyTalk2|
|Ned: I'm gonna start a foundation to help homeless children.||NedTalk1|
|Dusty: That occurred to me to do that at one point too.||DustyTalk3|
|Lucky: I meant I would do that first, and then I would get a big, shiny car.||LuckyTalk3|
Prior to Scripting
- Open the editor.
- Create three new NPCs: Dusty, Lucky and Ned.
- Create the topics above on the conversation tab for the quest of your choosing.
- Find Dusty in the list of NPCs in the Object Window and bring up its edit window.
- Click the script button “…” to the right of the script dropdown list.
- Open the Script dropdown menu and select New.
ScriptName DustyScript Short StartTalking Begin GameMode If StartTalking == 1 ; SayTo LuckyRef DustyTalk1 ; Dusty says the first line EndIf End Begin SayToDone DustyTalk1 ; When Dusty is finished saying first line… LuckyRef.Say LuckyTalk1 ; Lucky says his first line End Begin SayToDone DustyTalk2 ; When Dusty is finished with second line… LuckyRef.SayTo NedRef LuckyTalk2 ; Lucky says line to Ned End Begin SayToDone DustyTalk3 ; When Dusty is finished with last line… LuckyRef.Say LuckyTalk3 ; Lucky says his last line End
- The “Ref” after each person’s name stands for reference, as it will be a reference speaking the line, not the base object itself.
- The start of the conversation occurs in the GameMode block. In this case, Dusty starts the conversation by having his StartTalking variable set to one. When Dusty is done, his script triggers Lucky to speak. Each NPC triggers the next one to speak in a Begin SayToDone block.
- Lucky always speaks after Dusty in this conversation, so Lucky appears in each of Dusty’s SayToDone blocks.
- Both Say and SayTo functions are used in this script, depending on if the line is directed at someone in particular or not.
ScriptName LuckyScript Begin SayToDone LuckyTalk1 ; When Lucky is finished saying first line… LuckyRef.Say DustyTalk2 ; Dusty talks for his second time End Begin SayToDone LuckyTalk2 ; When Lucky is finished with second line… NedRef.Say NedTalk1 ; Ned gets to talk End
- Lucky doesn’t have a third SayToDone block because it is not necessary; nobody speaks after this line (well, in the movie they do, but we’ve stopped here).
ScriptName NedScript Begin SayToDone NedTalk1 ; When Ned is finished with line… DustyRef.Say DustyTalk3 ; Dusty says his line End
In general, you will have one of the characters in a group start the conversation via a script in their Begin GameMode block (with a Say or SayTo function). A SayToDone block will also appear in that character's script, and will be called as soon as the line is completed. The SayToDone block will instruct which of the other 2 conversation participants should talk next, and what they should say. It can then jump to that character's script and the applicable SayToDone block will be executed. This lets the user create a natural looking conversation with 3 or more NPCs without having to use any variables or timers.
There are several ways to create multiple NPC conversations. This is just one.