Adventure Game Studio

AGS Support => Beginners' Technical Questions => Topic started by: Gal Shemesh on Fri 14/07/2023 17:27:19

Title: What would be the correct way to make dialogue greetings change?
Post by: Gal Shemesh on Fri 14/07/2023 17:27:19
Hi everyone,

Been reading about dialogues in AGS in a few places, but can't find information on this topic:

I would like to have my characters greet each other for the first time they talk, but on their second talk and on I wish their greetings (whatever I write within the @S of the first dialogue) to change, as they already know each other.

What would be the correct way to doing this? I'm thinking about making a bool of 'wasTalkedWith' for each NPC, which will launch the first dialogue when the players talk with other characters, and then to turn it to true. Then, any further talk to the other NPC will launch a different greeting dialogue with an 'already know each other' greetings.

Is this the right way to doing this? Or perhaps there's a simpler way to change the @S greetings of a given dialogue?

Thanks
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Matti on Fri 14/07/2023 18:35:37
Yes, either make a bool that changes the dialog*, or use a String variable that directly changes the greeting text of the two.

* You don't have to switch to another dialog. In dialogs you can use normal script, so in @S you could write something like this (with indented lines):

if (wasTalkedWith)
{
  characterA.Say("Hi friend!");
  characterB.Say("Nice to see you.");
}
else
{
  characterA.Say("Hello, Stranger.");
  characterB.Say("Hello.");
}
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Gal Shemesh on Fri 14/07/2023 21:13:40
Thanks @Matti! :)

Using the regular scripting in dialogues with indentation to make the players talk works great. Though, I found that the dialogue scripting commands work with if statements as well, so I put an if statement that checks if wasTalkedWith_Josh is false, which then greets the NPC for a first time greeting using Ego: "Hi!". And then I added an else statement to it, which then greets the NPC with an "already know each other" message.

The problem I found however is that when using the regular dialogues commands, such as return, goto-dialog, etc within the if statement, it gives an error as if these commands "break" the if statement before it ended. And so it gives this error:

Script commands can only be used in the area between a entry point and the closing return/stop statement.

Any way of using if statements along with the regular scripting commands to return to options or to jump to other dialogues, instead of starting a different dialogue manually the traditional way with indentation?
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Khris on Sat 15/07/2023 10:35:08
It should work if you don't indent the dialog script commands. Like

  if (wasTalkedWith_Josh) {
Ego: Hi again!
goto-dialog 3
  } else {
Ego: Hi, how are you?
    wasTalkedWith_Josh = true;
  }
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Gal Shemesh on Sat 15/07/2023 17:13:38
Thanks, @Khris! Not sure what I'm doing wrong. I still can't make it to work. Here's my code. It still gives me the error: Script commands can only be used in the area between a entry point and the closing return/stop statement

// Dialog script file
@S  // Dialog startup entry point
  if (wasTalkedWith_cJosh)
  {
Ego: Hello again.
  cJosh.Loop = 1;
  Wait(20);
Josh: Oh, hi Roger.
goto-dialog dDialog2
  }
  else
  {
Ego: Hi!
  cJosh.Loop = 1;
  Wait(40);
Josh: Hello.
return
  }

@1
  Wait(20);
Josh: Hi Roger! Name's Josh. Nice to meet you.
  wasTalkedWith_cJosh = true;
goto-dialog dDialog2

@2
  Wait(20);
Josh: No worries.
  cJosh.Loop = 0;
stop
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Matti on Sat 15/07/2023 18:37:31
I think the return in line 17 should come after the closing bracket in line 18.

Also good to know that script commands can be combined with dialog commands, I wasn't sure about that.
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Gal Shemesh on Sat 15/07/2023 19:45:27
Thanks @Matti!

I moved the "return" command after the last closing curly brackets and it works. But it doesn't work for "goto-dialog" which comes before it, so I need to use "dDialog2.start()" instead.

A little confusing - I thought that these commands need to come inside the curly brackets as they're part of the statements.

Anyway, thanks again! :)
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Crimson Wizard on Sat 15/07/2023 19:53:36
If I recall correctly, you may still use "return" inside the brackets, if you indent and return a proper code:
https://adventuregamestudio.github.io/ags-manual/DialogScript.html#using-regular-scripting-commands-in-dialogs

QuoteIf you want to conditionally break out of the dialog script, the special tokens RUN_DIALOG_GOTO_PREVIOUS, RUN_DIALOG_RETURN and RUN_DIALOG_STOP_DIALOG are available which you can return from inside a script block
Title: Re: What would be the correct way to make dialogue greetings change?
Post by: Gal Shemesh on Sat 15/07/2023 20:22:55
Awesome! Thanks @Crimson Wizard! You were one step ahead of me before I asked a further question - I just tried to make my function to start with the false state, and encountered with the problem that the return command which I had to put into the statement's brackets didn't work. Now with return RUN_DIALOG_RETURN; I can actually use it within the brackets. Though, I see that there is no parallel token for the goto-dialog command, so I have to use "dDialog2.start()" instead.

Anyway, I think that when using the unique dialogue script commands that it's all a matter of where you locate your statements in the code - sometimes it makes more sense to write them from end to start, and sometimes it's the other way around.