Adventure Game Studio

AGS Support => Beginners' Technical Questions => Topic started by: harmonicapress on Wed 11/12/2013 03:24:19

Title: Character speech interrupts movement...
Post by: harmonicapress on Wed 11/12/2013 03:24:19
Hey guys.  Still having an issue. Now that I've put in the SayBackround command, the text he's supposed to be shouting comes up with the timers, but he won't animate, he just stands there ventriliquizing (shouting without moving his lips or arms). How can I get him to run the speech view with the SayBackground command, or is there another workaround? here is my code...

function room_Load()
{
  SetTimer(1, 120);
  SetTimer(2, 200);
  SetTimer(3, 280);
}

function room_RepExec()
{
  if (IsTimerExpired(1)){
    cArchie2.SayBackground("Come One! Come All!");
    SetTimer(1, 120);
}
  if (IsTimerExpired(2)){
    cArchie2.SayBackground("See my fabulous assortment of goods available for astonishingly low prices!");
    SetTimer(2, 200);
}
  if (IsTimerExpired(3)){
    cArchie2.SayBackground("There's none so fair as 'Ferris Wares'!");
    SetTimer(3, 280);
  }}
Title: Re: Character speech interrupts movement...
Post by: monkey0506 on Wed 11/12/2013 03:57:39
I believe you're just looking for the Character.SayBackground function:

Quote from: The ManualOverlay* Character.SayBackground(string message)

Similar to Say, except that this function returns immediately and the game continues while the character is talking. This allows you to have characters talking in the background while the player does other things. Note that the character's talking animation is not played if this function is used.
This command works by creating a text overlay with an automatic removal time delay. The overlay is returned by this command, so you can save it for use later with Overlay.IsValid and Overlay.Remove, if you want to remove the text prematurely.

If background speech is already on-screen for the character, it will be removed and replaced with the new MESSAGE.

All background speech is automatically removed when a normal Say command is used (unless you set the global variable game.bgspeech_stay_on_display to 1).

Example:

Code (ags) Select
cMan.SayBackground("Hey, why won't you talk to me?");

will display the message above character MAN's head without pausing the game.

For what it's worth, the description for Character.Say isn't very informative on when you'd want to use SayBackground instead. This entry clarifies, but it would be worth updating the Say entry as well.
Title: Re: Character speech interrupts movement...
Post by: selmiak on Wed 11/12/2013 13:19:44
what monkey said, and also your timer logic looks flawed. here is what I would do:
Code (AGS) Select

function room_Load()
{
  SetTimer(1, 120);
}

function room_RepExec()
{
  if (IsTimerExpired(1)){
    cArchie2.SayBackground("Come One! Come All!");
    SetTimer(2, 60);
  }
  if (IsTimerExpired(2)){
    cArchie2.SayBackground("See my fabulous assortment of goods available for astonishingly low prices!");
    SetTimer(3, 80);
  }
  if (IsTimerExpired(3)){
    cArchie2.SayBackground("There's none so fair as 'Ferris Wares'!");
    SetTimer(1, 120);
  }
}


This starts one time with the end of the other timer and so no timers will expire on the same gameframe.
Title: Re: Character speech interrupts movement...
Post by: Khris on Wed 11/12/2013 16:45:02
The timers are all started in the same frame, so the original method is fine, except that it doesn't loop.
Also, it's SayBackground, not Say :)
Title: Re: Character speech interrupts movement...
Post by: selmiak on Wed 11/12/2013 18:22:53
added the SayBackground, but the original code has for example the line 1 and line 2 said at the same time after 5x timer 1 or am I missing something?
Title: Re: Character speech interrupts movement...
Post by: Khris on Wed 11/12/2013 21:15:55
Like I said it doesn't loop, so no 5x, just 1x.
He'd simply have to add
SetTimer(1, 120);
SetTimer(2, 200);
SetTimer(3, 280);
after the third SayBackground() though.
Title: Re: Character speech interrupts movement...
Post by: harmonicapress on Thu 26/12/2013 21:31:23
Hey guys.  Still having an issue. Now that I've put in the SayBackround command, the text he's supposed to be shouting comes up with the timers, but he won't animate, he just stands there ventriliquizing (shouting without moving his lips or arms). How can I get him to run the speech view with the SayBackground command, or is there another workaround? here is my code...

function room_Load()
{
  SetTimer(1, 120);
  SetTimer(2, 200);
  SetTimer(3, 280);
}

function room_RepExec()
{
  if (IsTimerExpired(1)){
    cArchie2.SayBackground("Come One! Come All!");
    SetTimer(1, 120);
}
  if (IsTimerExpired(2)){
    cArchie2.SayBackground("See my fabulous assortment of goods available for astonishingly low prices!");
    SetTimer(2, 200);
}
  if (IsTimerExpired(3)){
    cArchie2.SayBackground("There's none so fair as 'Ferris Wares'!");
    SetTimer(3, 280);
  }}