MODULE: QueuedSpeech v4.1 - Updated 1 Oct 2016 (Bugfix edition)

Started by monkey0506, Sun 04/12/2005 04:23:21

Previous topic - Next topic

monkey0506

Disregarding the module that SSH made (:P), I've modulized Scorporius's queued background speech code:

1 October 2016: Thanks cat for pointing out some heinous coding on my part, I've uploaded v4.1 with a bugfix. Everything else is the same, see thread for details.

27 January 2015: I have updated this module to v4.0, with a revised interface and dynamic queue sizing. This allows you to add basically as many items to the queue as you want at one time (*current maximum is actually 1000000, but queue is dynamically sized to preserve memory). The new version also has improved handling if the character speaking in the background starts moving - they will be released from their speech view and continue their movement.

Example:

Code: ags
void InitializeBackgroundDialogue()
{
  QueuedSpeech.ClearQueue();
  QueuedSpeech.Looping = true;
  QueuedSpeech.Paused = true; // don't start the queue right away
  cEgo.SayQueued("Gee, I wonder where Bob wondered off to...");
  cEgo.SayQueued("When I find him, I'm gonna knock his block off.", null, 120); // add a delay to this message
  cEgo.SayQueued("That'll show him.");
}

function room_Load()
{
  InitializeBackgroundDialogue();
}

function hRug_Interact()
{
  QueuedSpeech.Paused = false; // start thinking about Bob
}


Requires AGS 3.4.0.3 or higher!

Download v4.1

25 January 2013 Four years later... Updated the module to work with the new-style audio clips. If you want to use the old-style audio system then just stick to v3.0 because v3.5 isn't backwards compatible. See the included documentation for full changelog. Notably, the Character.SayQueued method now requires an AudioClip* for voice speech, instead of formatting it into the message string.

08 January 2009 After nearly a full three years since the last update to this thread...I figure it's time to get this download back up. And I had a bit of fun toying around with making a demo. Hijacked RON sprites and all. Oh, and Microsoft SAM speeching!

Lazarus

#1
I was wondering if this module lets to speech to continue running while the player is interacting with objects etc..

thanks
*Currently using AGS Editor 2.70 (Build 2.70.601)*

monkey0506

#2
The text will be removed if you interact with an object.  I'll try to get that fixed, but do realize that the view is locked (with Character.LockView) to the character's speech view, so if you have any sort of animation for picking objects up or anything, that wouldn't be played.

monkey0506

New BETA, so I figured I'd let everyone know.

This BETA is primarily for the testing of multiple queues, so let me know how it works for you (you can set the number of queues per game (eQueuedSpeech_MaxQueues) and number of items per queue (eQueuedSpeech_MaxOptions) (come to think of it, that should probably be renamed) in the module header.

Please note (for those who aren't going to read the first post's edit) that looping does not currently work, I'm working on implementing that right now.  And there are no checks to prevent the same player from talking simultaneously in multiple queues, so that could create some confusion.  I'll add something to prevent it.

monkey0506

Multiple queues was a foolish idea anyway. :=

Idealistically this should one day be able to take advantage of actual speech files but for now it uses sound files for speech. Looping is functional as displayed in the demo. Also it would be wonderful if the speech could be played in an ambient manner similar to that of PlayAmbientSound...for those wondering the reasoning behind not using PlayAmbientSound as-is stands because that would cause the sound to loop and there's no way of determining when it has finished playing.

Oh, further, I've drastically decreased the default queue size in this module down to only 30 items. You should be able to raise it without problem.

joelphilippage

This is part of another problem I'm having but I think it just involves this module. The speech is displaying weird. I am using the smooth parallax scroll module, 640 x 400, and 32 bit color. Here is a screen shot of what happens.




Dave Gilbert

Hello!  Sorry for digging up this old post, but this module is *perfect* for my current project.  I got it working perfectly, but I encountered the same text color issue as JoelPhilippage above.  The game is 640 x 480 and 32 bit color.  Is there around this problem? 

monkey0506

I'm sorry, I'm not aware what the problem is! :o

I guess I must have overlooked joel's post (sorry!!). So from the screenshot it looks like the top line is being cut off, correct? I have a job interview to go to ATM but when I get back I shall investigate!!

Dave Gilbert

Hi monkey!  Basically the problem is the weird magenta dots that surround the text.  It looks like an AGS sprite that was badly imported.

GarageGothic

Looks like you're using anti-aliased fonts which would create this effect when drawn onto a transparent surface. The easy fix is to just add a "SetGameOption (OPT_ANTIALIASFONTS , 0);" before the DrawingSurface routines in the module (and reset it after the drawing), but for a smoother look, there's also some suggestions mentioned in this thread on how to achieve an antialiased effect on a transparent overlay.


Dave Gilbert

Quote from: GarageGothic on Wed 03/03/2010 16:43:11
Looks like you're using anti-aliased fonts which would create this effect when drawn onto a transparent surface. The easy fix is to just add a "SetGameOption (OPT_ANTIALIASFONTS , 0);" before the DrawingSurface routines in the module (and reset it after the drawing), but for a smoother look, there's also some suggestions mentioned in this thread on how to achieve an antialiased effect on a transparent overlay.

That worked, GG.  Thank you!

Sslaxx

Stuart "Sslaxx" Moore.

joelphilippage

This module does not allow walking and talking. Has anyone found a solution to this?



BrightBulb

Quote from: Dave Gilbert on Wed 03/03/2010 15:04:12
Hello!  Sorry for digging up this old post, but this module is *perfect* for my current project.  I got it working perfectly, but I encountered the same text color issue as JoelPhilippage above.  The game is 640 x 480 and 32 bit color.  Is there around this problem? 

I know this thread isn't current anymore, but I have found the solution for the speech color issue. Took me a while to find it, so to save you the hassle...

In line 116 is the command: Overlay *newOverlay = Overlay.CreateGraphical(x, y, sprite.Graphic, true);

You have to change "true" to "false" and it will display the color properly.

monkey0506

Bump for new version. In case anybody cares.

As for the transparency issue, as far as I can tell it's only related to fonts with anti-aliasing. From what the manual has to say on the "transparent" parameter for Overlay.CreateGraphical, it doesn't seem a viable "bug-fix" but if anyone confirms and lets me know then I'll swap out the line.

Regarding "walking and talking", I'm not sure what the intended purpose was, but the Overlay will not follow characters around the room. I imagine that would be relatively simple to implement if anyone needs it, so again feel free to let me know.

pixg

Excelent work! I've been searching for something like this that works properly for days now, so many of the modules are incompatable with the new AGS, but this one is great!

bslinger

The hosting account that these files were on is saying the account is suspended - is there anywhere else this module is available?

Dualnames

Of course, I believe I've hosted it here: http://duals.agser.me/Modules/QueuedSpeech_v3.0.rar I think that doesn't cover version 3.5. Currently a bit on the army side of things, but I'll have standard access to my harddrive rather shortly, if you can wait by then.
Worked on Strangeland, Primordia, Hob's Barrow, The Cat Lady, Mage's Initiation, Until I Have You, Downfall, Hunie Pop, and every game in the Wadjet Eye Games catalogue (porting)

bangerang101

- Luke

monkey0506

You can download v3.5 by going here. Click the arrow to the far right to download the SCM file.

monkey0506


cat

The module crashed on me during the final test run just one hour before the MAGS deadline :-\



It only happened once, but it crashed the complete game. I have no clue what this line is supposed to do anyway, so I just commented it out. This line cannot work at all, it will always be a blocking function within rep_ex_always...

Slasher

If Block == eNoBlock

should lines not read:
Code: ags

chara,Walk(xx, yy, Block)


Just a stab in the dark...

cat

It does not make sense either way because in rep_ex_always you are never allowed to use blocking functions...

I guess we have to wait for monkey0506.

Julius Dangerous

i'm using Build 3.3.5.5 of AGS and the v.4.0 of this module doesn't works
___________________________________________________________

Crimson Wizard

Quote from: Julius Dangerous on Wed 01/06/2016 22:49:28
i'm using Build 3.3.5.5 of AGS and the v.4.0 of this module doesn't works
Does it give any error messages, or it simply fails to perform what it must?

cat

As written in the first post, this module requires AGS 3.4.0

However, with the current bug not solved, I STRONGLY ADVICE AGAINST USING THIS MODULE

monkey0506

I've only just noticed this bug report. I haven't been around the forums much lately. The line in question was an incomplete attempt at getting the character to be able to move about freely without destroying or stopping the queued speech. This code was not meant to be included in the production release of v4.0, I apologize for that. Commenting it out won't harm anything in the rest of the module. I will upload a fixed v4.1 shortly, which will utilize #362 for AGS v3.4.1+ (and ignoring that feature for prior AGS versions).

Edit: Actually... looking at the changelog, it seems that I forgot that the feature wasn't fully implemented. It's been well over a year since I released this version, so I don't recall.

Edit, Mk. II: v4.1 is uploaded, and I even tested the changes. :=

Khris


daneeca

Hi! I'm using this great module and I ran into a small issue. If I change the language ingame, while a bunch of queued speeches playing, then it doesn't translate these texts. I have the "GetTranslation" part before the texts but it works only if I change the language before I start to play the QueuedSpeech. Is there and easy way to update the actual speeches somehow? Or should I replay all queued speeches manually when I change the language? Thank you in advance for your help!

Crimson Wizard

I was not sure if the module stores already translated text, or untranslated text?
If latter, the easiest fix would be to go into function BuildOverlay inside the module's script and do this at the very beginning:
Code: ags

message = GetTranslation(message);

this will ensure it always displays current messages in current language. But you have to also make sure to pass non-translated strings in the module's functions from outside.


Since you asked about this on Discord, I'd also mention that the module strangely does not account for room scrolling... Again, the quick fix seems to be this: go again to BuildOverlay,
1) Put this at the beginning:
Code: ags

int char_x = this.x - GetViewportX();
int char_y = this.y - GetViewportY();

2) Replace all other this.x and this.y with char_x and char_y inside function BuildOverlay.

Potajito

Quote from: Crimson Wizard on Sat 16/05/2020 13:56:07
I was not sure if the module stores already translated text, or untranslated text?
If latter, the easiest fix would be to go into function BuildOverlay inside the module's script and do this at the very beginning:
Code: ags

message = GetTranslation(message);

this will ensure it always displays current messages in current language. But you have to also make sure to pass non-translated strings in the module's functions from outside.


Since you asked about this on Discord, I'd also mention that the module strangely does not account for room scrolling... Again, the quick fix seems to be this: go again to BuildOverlay,
1) Put this at the beginning:
Code: ags

int char_x = this.x - GetViewportX();
int char_y = this.y - GetViewportY();

2) Replace all other this.x and this.y with char_x and char_y inside function BuildOverlay.
Thanks a lot for this! I had this problem and that did the trick. Thanks also for this module, it's super useful and still works pretty good nowadays :D

Potajito

I know this is an old module and all that, but so far it's been working for me...
Everything but the audioclip part. What I'm doing is importing the lines that are said using QueuedSpeech as Audioclips, and passing them as such, for example:
Code: ags
cNarrator.SayQueued("This is it...", aNarrator1);

But the line displays on screen for like one ms and then it dissapears, no audio at all.
Then I thought that as a workaround I could use aNarrator1.Play and aNarratorX.PlayQueued and try to sync them, but I don't really know how to sync them, as audio is playing much faster than the lines, and also it looks hacky as shit.
Has anyone been able to make the audioclips work? Do you have any other idea for a workaround?
Cheers!

Monsieur OUXX

Quote from: Potajito on Sun 16/05/2021 17:55:50
But the line displays on screen for like one ms and then it dissapears, no audio at all.

Not very helpful but my guess is that the text disappears instantly becaue the audio is not played at all (if the audio is zero-seconds long then the text disappears as soon as it appears, it makes sense). I'm just saying that to help looking in the right direction.
 

Potajito

Well, I managed to fix the audio not playing, and meanwhile I adapted the module to AGS 3.5+ (currently working on AGS 3.6 Alpha). I also added Crimson Wizard fixes for localization and room scrolling.

Here it is, in case anyone is interested:

https://drive.google.com/file/d/1UBl2ACjRqZDQUgQDTrRXwsf1n3s09jui/view?usp=sharing

eri0o


SMF spam blocked by CleanTalk