Author Topic: Speech Bubble extensions  (Read 207 times)

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #20 on: 05 May 2018, 17:28 »
OK, I've implemented sprite-based borders in the SpeechBubble module. As mentioned this led to a major rewrite, which I'm still not finished with, so this is just a beta of the new version that you can test out: SpeechBubble v0.8.9

The way you configure it is now a little bit different. I've moved all the formatting settings into a SpeechBubbleFormat class, and you can set SpeechBubble.TalkFormat and SpeechBubble.ThinkFormat to control those formats separately, or just SpeechBubble.Format to set the formatting for all SpeechBubbles generally (eventually you'll also be able to provide your own SpeechBubbleFormats to control the formatting of bubbles individually.

In your case, you'll need something like this to set up the formatting correctly:

Code: Adventure Game Studio
  1.   // Set up the border
  2.   SpeechBubble.Format.BorderRenderMode = eRenderSprite; // Use sprites to render the border
  3.   SpeechBubble.Format.BorderSpriteTopLeft = 32;  // Sprite index...
  4.   SpeechBubble.Format.BorderSpriteTopRight = 33;
  5.   SpeechBubble.Format.BorderSpriteBottomRight = 34;
  6.   SpeechBubble.Format.BorderSpriteBottomLeft = 35;
  7.   SpeechBubble.Format.BorderSpriteTop = 39;
  8.   SpeechBubble.Format.BorderSpriteBottom = 36;
  9.   SpeechBubble.Format.BorderSpriteLeft = 37;
  10.   SpeechBubble.Format.BorderSpriteRight = 38;  
  11.  
  12.   // Set up the tail
  13.   SpeechBubble.Format.TailRenderMode = eRenderSprite;  // Use a sprite to render the tail
  14.   SpeechBubble.Format.TailSprite = 31;
  15.   SpeechBubble.Format.TailTipOffset = 35;  // This is what x-coordinate in the tail sprite the tip is (the pixel that should be over the character's head)
  16.   SpeechBubble.Format.AllowTailSlide = false;  // The tail will always be centered in the bubble
  17.  
  18.   // We set negative padding so the text actually extends into the edge sprites (since they are quite big)
  19.   SpeechBubble.Format.PaddingTop = -10;
  20.   SpeechBubble.Format.PaddingBottom = -10;
  21.   SpeechBubble.Format.PaddingLeft = -20;
  22.   SpeechBubble.Format.PaddingRight = -20;
  23.  
  24.   // General formatting
  25.   SpeechBubble.Format.BackgroundColor = Game.GetColorFromRGB(0, 0, 0);  // Black background
  26.   SpeechBubble.Format.TextOutlineWidth = 2;

Thank you Snarky! but I think that I have a problem



the only thing that I make it's use my sprites on borders. I don't touch anything of your code. (btw, can we make the background with some alpha transparency?)

Snarky

  • Global Moderator
  • Mittens Earl
  • Private Insultant
    • I can help with proof reading
    •  
    • I can help with translating
    •  
Re: Speech Bubble extensions
« Reply #21 on: 05 May 2018, 17:55 »
The tail is displayed instead of the border, not on top of it (or under it, as in your mockup). So if your tail sprite is meant to also show the border, you have to actually include the border in the sprite (they don't have to be the same height, though; if not, they'll be top-aligned). Here's the sprite I used in testing:



(btw, can we make the background with some alpha transparency?)

Yes, you can set the background transparency with SpeechBubble.Format.BackgroundTransparency and the border transparency with SpeechBubble.Format.BorderTransparency. If you just want part of the border to be transparent (for example the black part, not the gold part), that needs to be part of the sprites you use.

Also, because it bugs me a little: the top border edge of your text window is not precisely aligned with the corners, and the outside gold rim is a little bit wider/heavier than the corners, creating a noticeable seam. You might want to fix that.
« Last Edit: 05 May 2018, 18:01 by Snarky »

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #22 on: 05 May 2018, 18:12 »
The tail is displayed instead of the border, not on top of it (or under it, as in your mockup). So if your tail sprite is meant to also show the border, you have to actually include the border in the sprite (they don't have to be the same height, though; if not, they'll be top-aligned). Here's the sprite I used in testing:



(btw, can we make the background with some alpha transparency?)

Yes, you can set the background transparency with SpeechBubble.Format.BackgroundTransparency and the border transparency with SpeechBubble.Format.BorderTransparency. If you just want part of the border to be transparent (for example the black part, not the gold part), that needs to be part of the sprites you use.

Also, because it bugs me a little: the top border edge of your text window is not precisely aligned with the corners, and the outside gold rim is a little bit wider/heavier than the corners, creating a noticeable seam. You might want to fix that.

SO NICE! IT WORKS VERY FINE! :D

How can i to use the module on dialogs? Because in AGS the dialogs only use "cEgo: bla bla bla bla" can i use speechbubble?

I have a last question about your module. When i'm using a cutscene the game freeze around 5-6 seconds and I've to do double-click to solve. Before to use your module this not happens.

Snarky

  • Global Moderator
  • Mittens Earl
  • Private Insultant
    • I can help with proof reading
    •  
    • I can help with translating
    •  
Re: Speech Bubble extensions
« Reply #23 on: 05 May 2018, 18:27 »
How can i to use the module on dialogs? Because in AGS the dialogs only use "cEgo: bla bla bla bla" can i use speechbubble?

You can write normal AGS commands in a dialog, but you have to put a space (or several spaces) at the beginning of the line. So instead of:

Code: Adventure Game Studio
  1. cEgo: bla bla bla bla

You put:

Code: Adventure Game Studio
  1.  cEgo.SayBubble("bla bla bla bla");

(Note the space!)

Quote
I have a last question about your module. When i'm using a cutscene the game freeze around 5-6 seconds and I've to do double-click to solve. Before to use your module this not happens.

Ah, hmm... yes, I can see how that could happen. I think it's due to the custom blocking code. It might be tricky to solve properly, but as a workaround, try setting an invisible font with SpeechBubble.InvisibleFont. This should bypass the custom blocking. You can download an invisible font here: http://www.angelfire.com/pr/pgpf/if.html

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #24 on: 05 May 2018, 21:28 »
How can i to use the module on dialogs? Because in AGS the dialogs only use "cEgo: bla bla bla bla" can i use speechbubble?

You can write normal AGS commands in a dialog, but you have to put a space (or several spaces) at the beginning of the line. So instead of:

Code: Adventure Game Studio
  1. cEgo: bla bla bla bla

You put:

Code: Adventure Game Studio
  1.  cEgo.SayBubble("bla bla bla bla");

(Note the space!)

Quote
I have a last question about your module. When i'm using a cutscene the game freeze around 5-6 seconds and I've to do double-click to solve. Before to use your module this not happens.

Ah, hmm... yes, I can see how that could happen. I think it's due to the custom blocking code. It might be tricky to solve properly, but as a workaround, try setting an invisible font with SpeechBubble.InvisibleFont. This should bypass the custom blocking. You can download an invisible font here: http://www.angelfire.com/pr/pgpf/if.html

man, you're the best! If you have a job, tell your boss to increase your salary.

I'll put your name on the credits of Train to Nowhere. Really you saved my project with this ^^
http://www.adventuregamestudio.co.uk/forums/index.php?topic=56019.0

Snarky

  • Global Moderator
  • Mittens Earl
  • Private Insultant
    • I can help with proof reading
    •  
    • I can help with translating
    •  
Re: Speech Bubble extensions
« Reply #25 on: 06 May 2018, 06:20 »
So it's all working now? Cool!

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #26 on: 06 May 2018, 10:51 »
So it's all working now? Cool!

yes, but i have a little problem, but I don't know why happens this:




if you can see, I've a line on left side and bottom side. But in top and left doesn't exist :S


Snarky

  • Global Moderator
  • Mittens Earl
  • Private Insultant
    • I can help with proof reading
    •  
    • I can help with translating
    •  
Re: Speech Bubble extensions
« Reply #27 on: 06 May 2018, 11:21 »
Yes, I see it. The background fill must overlap the edge by one pixel (it's one pixel too wide and too tall), which is only visible when they're semi-transparent, because you're drawing twice, adding to the opacity. These off-by-one errors are really annoying, and a lot of the work on this module has been fixing them.

Edit: OK, so that was a really easy fix: SpeechBubble v0.8.10

I really dig the visual style you've got going here, by the way. The font fits really well.
« Last Edit: 06 May 2018, 11:31 by Snarky »

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #28 on: 06 May 2018, 14:09 »
Yes, I see it. The background fill must overlap the edge by one pixel (it's one pixel too wide and too tall), which is only visible when they're semi-transparent, because you're drawing twice, adding to the opacity. These off-by-one errors are really annoying, and a lot of the work on this module has been fixing them.

Edit: OK, so that was a really easy fix: SpeechBubble v0.8.10

I really dig the visual style you've got going here, by the way. The font fits really well.

Thank you one more time Snarky! Now it works FINE AT 100%! Thank you for your comment. I hope in a month I can have a full demo to download for all people ^^

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #29 on: 01 Jun 2018, 22:22 »
Snarky i detected a little issue in your module. When my characters are talking if i press a long time a key for pass to the next bubble, it goes really so fast. How i can to resolve this? :(

Crimson Wizard

  • AGS Project Tracker Admins
    • Best Innovation Award Winner 2013, for spearheading the AGS 3.3.0 project
    •  
    • Lifetime Achievement Award Winner
    •  
    • Crimson Wizard worked on a game that was nominated for an AGS Award!
      Crimson Wizard worked on a game that won an AGS Award!
Re: Speech Bubble extensions
« Reply #30 on: 01 Jun 2018, 22:30 »
Snarky i detected a little issue in your module. When my characters are talking if i press a long time a key for pass to the next bubble, it goes really so fast. How i can to resolve this? :(

There is Game.IgnoreUserInputAfterTextTimeoutMs property for builtin speech, I guess it may be made used in the module too.

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #31 on: 01 Jun 2018, 22:35 »
Snarky i detected a little issue in your module. When my characters are talking if i press a long time a key for pass to the next bubble, it goes really so fast. How i can to resolve this? :(

There is Game.IgnoreUserInputAfterTextTimeoutMs property for builtin speech, I guess it may be made used in the module too.

thank you, i'll going to try it :)

Crimson Wizard

  • AGS Project Tracker Admins
    • Best Innovation Award Winner 2013, for spearheading the AGS 3.3.0 project
    •  
    • Lifetime Achievement Award Winner
    •  
    • Crimson Wizard worked on a game that was nominated for an AGS Award!
      Crimson Wizard worked on a game that won an AGS Award!
Re: Speech Bubble extensions
« Reply #32 on: 01 Jun 2018, 22:47 »
Snarky i detected a little issue in your module. When my characters are talking if i press a long time a key for pass to the next bubble, it goes really so fast. How i can to resolve this? :(

There is Game.IgnoreUserInputAfterTextTimeoutMs property for builtin speech, I guess it may be made used in the module too.

thank you, i'll going to try it :)

From the looks of the module code, this property is not used in there. What I meant, it could be supported.

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #33 on: 01 Jun 2018, 22:53 »
From the looks of the module code, this property is not used in there. What I meant, it could be supported.

Doesn't works... i tried to do but nothing happen.

Snarky

  • Global Moderator
  • Mittens Earl
  • Private Insultant
    • I can help with proof reading
    •  
    • I can help with translating
    •  
Re: Speech Bubble extensions
« Reply #34 on: 02 Jun 2018, 06:38 »
If you are using voiced speech or have set an invisible font, SpeechBubble calls Character.Say() internally to handle the speech animation and timing of the display. As I recall, you set an invisible font earlier to workaround a cutscene bug. So Game.IgnoreUserInputAfterTextTimeoutMs should work without any changes to the module code.

Edit: However, this setting doesn't actually do what you're interested in: it only ignores input after the last line timed out, not if you dismissed it. If you hold down a button, AGS will still speed through the dialog at high speed.

This behavior is by design, but I have also had the impression that the speed has increased lately (or maybe I'm just getting old...). It would be good to be able to control how fast it happens (I would guess it's at the key-repeat speed for holding down a keyboard key, but does that also apply to mouse-button presses?), and also ensure that a slightly longer click/button press doesn't accidentally skip two lines.

I've also split this continuing discussion into its own thread since the "(SOLVED)" part of the title kept annoying me. Arguably it should be merged with the module thread, though.
« Last Edit: 02 Jun 2018, 08:31 by Snarky »

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #35 on: 02 Jun 2018, 17:28 »
If you are using voiced speech or have set an invisible font, SpeechBubble calls Character.Say() internally to handle the speech animation and timing of the display. As I recall, you set an invisible font earlier to workaround a cutscene bug. So Game.IgnoreUserInputAfterTextTimeoutMs should work without any changes to the module code.

Edit: However, this setting doesn't actually do what you're interested in: it only ignores input after the last line timed out, not if you dismissed it. If you hold down a button, AGS will still speed through the dialog at high speed.

This behavior is by design, but I have also had the impression that the speed has increased lately (or maybe I'm just getting old...). It would be good to be able to control how fast it happens (I would guess it's at the key-repeat speed for holding down a keyboard key, but does that also apply to mouse-button presses?), and also ensure that a slightly longer click/button press doesn't accidentally skip two lines.

I've also split this continuing discussion into its own thread since the "(SOLVED)" part of the title kept annoying me. Arguably it should be merged with the module thread, though.

Thank you for your reply Snarky. I was using SpeechBubble.InvisibleFont = eFontinvisibleFont but actually I had to disable because I saw that my characters doesn't do speech animation. They allways stay quiet and text continues.



btw I tried to fix the speech speed using this:
You can set how speech (and dialog lines) are skipped in your game's General Settings -> Dialog -> Speed Skipped by...

You can also change the text speed by altering Game.TextReadingSpeed, and finally there is Game.MinimumTextDisplayTimeMs to make sure that even very short words stay on screen for a fixed amount of time. The manual has info all these, but these settings make stuff very easy to read and follow.
Game.TextReadingSpeed = 7;
Game.MinimumTextDisplayTimeMs = 2000;


Snarky

  • Global Moderator
  • Mittens Earl
  • Private Insultant
    • I can help with proof reading
    •  
    • I can help with translating
    •  
Re: Speech Bubble extensions
« Reply #36 on: 03 Jun 2018, 07:21 »
Thank you for your reply Snarky. I was using SpeechBubble.InvisibleFont = eFontinvisibleFont but actually I had to disable because I saw that my characters doesn't do speech animation. They allways stay quiet and text continues.


Well that's no good. I'll take a look at it. Could you post what SpeechBubble settings you're using and the lines where you call it that aren't animating properly?

Quote
btw I tried to fix the speech speed using this:
You can set how speech (and dialog lines) are skipped in your game's General Settings -> Dialog -> Speed Skipped by...

You can also change the text speed by altering Game.TextReadingSpeed, and finally there is Game.MinimumTextDisplayTimeMs to make sure that even very short words stay on screen for a fixed amount of time. The manual has info all these, but these settings make stuff very easy to read and follow.
Game.TextReadingSpeed = 7;
Game.MinimumTextDisplayTimeMs = 2000;

Those settings are only going to change the speed of text progression when you're NOT holding down a key. AFAIK the only ability you have to control how text is skipped is which keys skip, and whether mouse-clicks skip.

Narehop

  • Solodev on @Outline_team
Re: Speech Bubble extensions
« Reply #37 on: 03 Jun 2018, 12:21 »
Thank you for your reply Snarky. I was using SpeechBubble.InvisibleFont = eFontinvisibleFont but actually I had to disable because I saw that my characters doesn't do speech animation. They allways stay quiet and text continues.


Well that's no good. I'll take a look at it. Could you post what SpeechBubble settings you're using and the lines where you call it that aren't animating properly?

Code: Adventure Game Studio
  1.  // Set up the border
  2.   SpeechBubble.Format.BorderRenderMode = eRenderSprite; // Use sprites to render the border
  3.   SpeechBubble.Format.BorderSpriteTopLeft = 1187;  // Sprite index...
  4.   SpeechBubble.Format.BorderSpriteTopRight = 1188;
  5.   SpeechBubble.Format.BorderSpriteBottomRight = 1189;
  6.   SpeechBubble.Format.BorderSpriteBottomLeft = 1190;
  7.   SpeechBubble.Format.BorderSpriteTop = 1194;
  8.   SpeechBubble.Format.BorderSpriteBottom = 1191;
  9.   SpeechBubble.Format.BorderSpriteLeft = 1192;
  10.   SpeechBubble.Format.BorderSpriteRight = 1193;  
  11.  
  12.   // Set up the tail
  13.   SpeechBubble.Format.TailRenderMode = eRenderSprite;  // Use a sprite to render the tail
  14.   SpeechBubble.Format.TailSprite = 1186;
  15.   SpeechBubble.Format.TailTipOffset = 30;  // This is what x-coordinate in the tail sprite the tip is (the pixel that should be over the character's head)
  16.   SpeechBubble.Format.AllowTailSlide = false;  // The tail will always be centered in the bubble
  17.  
  18.   // We set negative padding so the text actually extends into the edge sprites (since they are quite big)
  19.   SpeechBubble.Format.PaddingTop = -10;
  20.   SpeechBubble.Format.PaddingBottom = 5;
  21.   SpeechBubble.Format.PaddingLeft = -5;
  22.   SpeechBubble.Format.PaddingRight = -5;
  23.  
  24.   // General formatting
  25.   SpeechBubble.Format.BackgroundColor = Game.GetColorFromRGB(0, 0, 0);  // Black background
  26.   SpeechBubble.Format.BackgroundTransparency = 40;
  27.   SpeechBubble.Format.TextOutlineWidth = 1;
  28.   SpeechBubble.InvisibleFont = eFontinvisibleFont;
  29.  

And allways stop animation with any character.