EDITOR PLUGIN: Speech Center - Version 2.2.0

Started by SpeechCenter, Thu 22/03/2012 14:50:32

Previous topic - Next topic

SpeechCenter

Latest version: 2.2.0

Download

Hello all,

Version 2.2.0 now also exports the data to CSV

About Speech Center
The Speech Center plugin enables management of the game text and speech within the AGS Editor. It provides a view of your game text and play the speech files, fully integrated within the editor.

It has the ability to scan the scripts (dialogs, global scripts and room scripts), and display all the speech line it finds in those scripts (such as the text used in the character Say function). You can sort, filter and search through the lines using the interface, edit the text and also jump to the script itself to make more complex changes.

Additionally you can export the text as voice acting scripts. The result HTML files, one for each character, can be sent to your voice actors to record their lines.

When a line is selected you can immediately view it in the script itself. Inline editing is available allowing you to review and change text in multiple scripts from a single screen. double-clicking on a line will open the AGS script editor and focus on that line, this is convenient if you would like to view and edit the script using the standard AGS script editor.

Another nice feature is the ability to view and edit game translation. When you choose a translation you get the same view and set of features. This means not just find, filter and sort, but also export a VA script in your translated language. You can also easily view the original text in the script since it is shown when you select a text line in the grid.

If the lines are numbered then it offers additional functionality:
The Speech directory is scanned for each line and provides info on the file status. You can playback the speech from the editor itself. You can also mark whether those lines are correct (there are 2 checkboxes for each line, one for the voice file and the other text).

To make sure the plugin is as non-intrusive as possible, it only loads the data if you click on the refresh button, thus it should not affect something you do, unless you are actually doing something at the plugin screen. Special attention was given to performance and the plugin should have the capacity to handle thousands of lines. This should cover even the extremely text-intensive games.

Here are a couple of screenshots to show you how the plugin looks like in action:




Sample output for VA scripts:


You can email me regarding any bugs or problems you find, I'll try to be as responsive as possible.

I hope this will assist you to continuing create awesome games!

monkey0506

I'm at work, but what does this plugin do? I'm guessing it has something to do with managing speech files from within the editor? If so, that's great.

I've actually been putting some thought into it though, and the entire speech system within AGS could really do with a major overhaul. I'm thinking that speech files could be imported as AudioClips that could then be linked to characters directly...then with some indexing and a simple "find ID" function...the speech system could be made much more generic, which would be very nice for any games using extender methods (or even just the player keyword in a multi-player game).

Anyway, that's a completely separate discussion. Thanks for the plugin...I'll have to check it out later.

Snarky


SpeechCenter

Hey all,

Have you had the chance to try this? Please let me know if this was helpful. I'm very curious to know how game developers here see this plugin.

Thanks.

Alan v.Drake

I would try it, but the download link doesn't seem to like me, any chance you could put it on mediafire ?

- Alan


Alan v.Drake

I tried it, too bad it won't work with my custom say functions :(


- Alan

Scavenger

Quote from: Alan v.Drake on Mon 26/03/2012 12:46:16
I tried it, too bad it won't work with my custom say functions :(


- Alan

Would it be possible to have the plugin have a setting to include custom say functions? If it can detect Say, then how much of a stretch would it be to have it include other functions of the user's choice, other than Say and Display?

Calin Leafshade

+1 for custom say functions.

Just let the user define it with wild cards and then regex it.

SpeechCenter

#9
It's not such a major stretch.
The easiest way to do it is to give the user a choice of the function name and which function parameter is the text (this is in fact the way I search for the function).

Now, my main question is, how do you usually define your custom functions today? Some options I could think of:
* Send character ID as parameter
* Extender functions
* A function that always displays a predefined character (e.g., NarratorTalk, cEgoTalk, etc.)

I'll try to support all, but I would like to know if there is a common way people define them. Also, I would like to verify if I missed something you usually do.
If you could send me your custom functions (here or by email) I can make sure I test it with them.

Do most people display text with custom functions, or did you manage to also check the use of the standard functions?


Calin Leafshade

I almost always mirror the normal function.

usually:

void iSay(this Character*, String what);

Alan v.Drake

same here, I use extenders to mimic the original function

function SayBox(this Character*, String text, (optional)int color);
function ThinkBox(this Character*, String text);

- Alan

Calin Leafshade

A function to generate voice acting scripts and number lines for custom say commands would also be invaluable.

SpeechCenter

#13
Quote from: Calin Leafshade on Mon 26/03/2012 20:17:16
A function to generate voice acting scripts and number lines for custom say commands would also be invaluable.
Regarding voice acting script, the easiest way for me to do this is to add an export function, but there are 2 things to consider:
1. There may be some extra information needed (Snarky mentioned that there should be a comments field for that purpose)
2. Snarky also a mentioned a tool that already handles voice acting scripts. I prefer not to recreate features already done by others, especially if the tool is built for that purpose. However, the author of that tool hasn't responded to this subject so I have no idea whether the tool is defunct, the author doesn't read this, or simply ignores it all.

As for renumbering, it was a conscious decision to refrain from script manipulation features for first release to make sure the plugin does its job without the chance of introducing bugs into the game itself. That's the reason I'm looking for feedback on what is already provided, to verify it works before opening a new type of feature.

But, if I don't hear anything about whether the plugin works with Say or Display, I'll have to assume it does and start earlier with manipulation features. It's best if people could verify this with standard functions, if possible, so I'll know I'm not dealing with basic functionality bugs. Makes debugging later releases MUCH easier.

SpeechCenter

Quote from: Calin Leafshade on Mon 26/03/2012 18:37:48
void iSay(this Character*, String what);
Quote from: Alan v.Drake on Mon 26/03/2012 20:07:33
function SayBox(this Character*, String text, (optional)int color);
function ThinkBox(this Character*, String text);
Thanks, in that case I'll pay extra attention to extender functions

Snarky

Quote from: SpeechCenter on Mon 26/03/2012 21:13:17
2. Snarky also a mentioned a tool that already handles voice acting scripts. I prefer not to recreate features already done by others, especially if the tool is built for that purpose. However, the author of that tool hasn't responded to this subject so I have no idea whether the tool is defunct, the author doesn't read this, or simply ignores it all.

I may in fact have been thinking of AJA's DialogDesigner, which now that I look at it more closely does something a bit different. Though I do think there have been other attempts to improve the AGS sound/voice system through plugins or standalone programs over the years; I would think those have been made redundant or incompatible by the new AGS sound system, though, if they ever were released in the first place. Sorry, I haven't actually tried any of them, they've just kind of been on the periphery of my awareness.

As for custom say functions, I use extender functions and in some cases functions with defined speakers (like narratorSay, say).

TheMagician

May I foolishly ask why so many people use self-written 'say' functions like

Code: ags
void iSay(this Character*, String what);

Dualnames

Quote from: TheMagician on Fri 30/03/2012 01:08:41
May I foolishly ask why so many people use self-written 'say' functions like

Code: ags
void iSay(this Character*, String what);


Cause we're elitist cunts. Also because usually the standard Say function doesn't work as intented and instead of putting a line before it and after it on a every single occasion, we do it like ninjas.

Also nemo is hot.
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)

TheMagician

Quote from: Dualnames on Fri 30/03/2012 14:18:46usually the standard Say function doesn't work as intented

Could you elaborate on that please? I've used character.Say("...") for a complete game and didn't come across any obvious problems.

Calin Leafshade

It's a good policy to behave as if Dualnames' posts don't exist. You often come out worse than before you started reading them.

We use custom say functions in order to display text in new or different ways that are not supported by the default Say command. For example to display the text at the bottom of the screen.

For an example of this see Alan V Drake's Wretcher of my Ever-Beginning Tale.

Alan v.Drake

Calin beat me to it...

Look at this:
.

- Alan

SpeechCenter

#21
I started working on this, it's on my spare time (which was very nonexistent this week) so I cannot state exactly when it'll be ready, but hopefully not too long since this is not complex.
TheMagician: if your game source loads with AGS 3.2.1 it would be great if you let me know whether the current version works for you. There aren't that many open source games out there for me to test it on my own.

TheMagician

@Calin & Alan: thanks for the clarification  :)

@SpeechCenter: right now I have no idea what the plugin is supposed to be doing (I haven't downloaded it and it doesn't become clear from reading this thread).

SpeechCenter

Quote from: TheMagician on Fri 30/03/2012 22:12:42
right now I have no idea what the plugin is supposed to be doing (I haven't downloaded it and it doesn't become clear from reading this thread).
The plugin is aimed towards assisting with validation of the game text and speech. It's only an editor plugin, not a game plugin.
It has the ability to scan the scripts (dialogs, global scripts and room scripts), and display all the speech line it finds in those scripts (such as the text used in the character Say function). You can double click the line to go directly to the corresponding script line.
You can sort, filter and search through the lines using the interface.

If the lines are numbered then it offers additional functionality:
The Speech directory is scanned for each line and provides info on the file status. You can playback the speech from the editor itself. You can also mark whether those lines are correct (there are 2 checkboxes for each line, one for the voice file and the other text).

To make sure the plugin is non-intrusive as possible, it only loads the data if you click on the refresh button, thus it should not affect something you do, unless you are actually doing something at the plugin screen. It should also have the capacity to handle thousands of lines, which should cover even text-heavy games.

Here are 2 screenshots I provided in a previous thread, which would hopefully make my explanation clearer, and if there are additional questions I'll be happy to answer them.





TheMagician

#24
That's the information I was looking for. This looks great. I will test it as soon as possible. However, right now the new game I'm working on isn't that big and the old finished game that I have will certainly throw up errors when trying to import to AGS 3.2.1

EDIT: I've just installed the plugin and it seems very helpful! Definitely something that I'm going to keep using :)
However, when updating the speech center I get an error which refers to the file timer.asc, which is part of a module by monkey_05_06 which can be downloaded HERE.
I can choose to ignore the error and the rest of the scripts is processed correctly.

By the way, what's the icon of speech center depicting? A tree?

SpeechCenter

#25
Thanks for the info, I see the problem with the module and will fix it. You can ignore this error (as you did) since this specific module doesn't include any text lines anyway.

You can get a better view of the icon at the about dialog (right click on the tree). It's just a public domain icon I used, I'm a programmer, not much of an artist to draw my own icons :)
(well, I did the filter icon, but it was actually created using code)

EDIT: fixed it and uploaded a new version, in case the error annoys you

TheMagician

Thanks for the quick fix.

Do you plan on including support for translation files? Right now, translations are very difficult to manage because the exported file can be mixed up and it's not clear where the different lines belong to.
I could imagine speech center to have an option to show the according translated lines to the lines from the script so that you can check whether everything is where it needs to be.

SpeechCenter

#27
Sounds interesting. I took a quick look at AGS' plugin interface and it should be possible to add this.
So the basic idea is to display the text per line and add another column for the selected translation, correct?
One question - is the speech file relevant in that mode? I did not see support in AGS for multiple languages for voice recording, but maybe I missed it.

TheMagician

As far as I can tell AGS doesn't offer built-in support for speech files in different languages.
The manual mentions that all speech files have to be collected in the 'speech' subfolder of the game. The game's author would then have to replace those files with the translated ones and create a new speech.vox file. Then the players can download different speech.vox files and use the one they like.

For your plugin, perhaps you could just have a second subfolder called 'speech_german' in the game's folder and place identically named speech files in there. Then in your plugin you can specify the subfolder that goes with each translated version.

What I like about your plugin right now is that you can see almost the complete line of text at once. If you added a second column for the translated lines then the readability would suffer a bit.
Perhaps there's a way to show the translated lines below each original line in a different color?

SpeechCenter

Adding another row might not be that easy, I'll check. I'm thinking perhaps the text should appear when the row is selected. Something similar to auto-play, or perhaps even the same window, by changing the text that appears in the playback to the translated one.
Playback today is enabled even if there is no actual speech, it displays the text, the character talk view and if you playback more than a single line, it progresses based on the length of the sentence. Thus adding the translation there would be very consistent with the existing gui as well as in-line with AGS' implementation of translation (where the script has one language and translations are matched with the original text).

I'll have to check if any of this makes sense when I get to the actual development, sometimes it's easier to know if these things work out after actually trying them.

Dualnames

Quote from: Calin Leafshade on Fri 30/03/2012 18:31:34
It's a good policy to behave as if Dualnames' posts don't exist. You often come out worse than before you started reading them.

We use custom say functions in order to display text in new or different ways that are not supported by the default Say command. For example to display the text at the bottom of the screen.

For an example of this see Alan V Drake's Wretcher of my Ever-Beginning Tale.

AHAHAHAHAHAHAHAHAHAHAHAHHA
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)

Dave Gilbert

#31
Hey! This is awesome. I love that you can include custom "say" functions, but is it possible to also provide an option to put the speechfile number in another parameter?  Your custom say function editor only allows you to choose the character name and the text string. Normally you'd include the speech file number within the text string so this method would be fine, but we don't do it that way.  For example, our custom say function looks like this:

speech(cJack, "Hello, my name is Jack", 475);

Where 475 is the speechfile number. Since we can only specify the character and the text string, the filenumber doesn't get picked up.

Is it possible to make that change? I was *really* excited to see this plugin as we've got thousands of lines of dialog to deal with, but we can't use it. :(

Also, I saw in your readme that we'll need a special license to use it for commercial games. PM me with the details, if you could.

-Dave

Ryan Timothy B

Quote from: Dave Gilbert on Sat 14/04/2012 14:32:57
speech(cJack, "Hello, my name is Jack", 475);
Why aren't you using an extender function?

I'd much prefer:
cJack.speech("Hello, my name is Jack", 475);

Knox

Id also rather:
cJack.speech("Hello, my name is Jack", 475);

Cool plugin so far!
--All that is necessary for evil to triumph is for good men to do nothing.

m0ds

#34
Great! Out of interest can this be used to export all the lines of dialog to a text file or something? I'm not fully competent with speech in AGS games so perhaps there is another way to do that. But for what it is this looks very useful.

Edit: I ask about the export because the data the plugin provides looks like it'd be useful if it could be exported.

SpeechCenter

Thanks for the info and feedback.
Yes, I can add the additional parameter. Once I add it, it will be for all function types, so it would cover both use cases.

I would need some time though, it's not complex, but other unrelated things are stacking up. I'll certainly give it priority the moment I manage to sneak in some time.

SpeechCenter

#36
Quote from: m0ds on Tue 17/04/2012 15:38:05
Great! Out of interest can this be used to export all the lines of dialog to a text file or something? I'm not fully competent with speech in AGS games so perhaps there is another way to do that. But for what it is this looks very useful.

Edit: I ask about the export because the data the plugin provides looks like it'd be useful if it could be exported.
Thanks and I already plan to add it in the future, but the feedback certainly helps me knowing this is needed.

I'm focusing at the moment on addressing missing functionality that prevents usage and of course if anyone finds critical bugs. There are already several developers able to use it for their games, but I'd like to see more work with it out-of the-box. Once I see developers are able to work with existing features I'll start implementing additional features.


straydogstrut

Been playing with this tonight to do some proof reading and I have to say it's fantastic :)

Suggestion: it would be good if the columns could be rearranged

Unexpected behaviour: when resizing columns, the table automatically scrolls to the top.

Looking forward to seeing this evolve :)

SpeechCenter

Quote from: straydogstrut on Wed 18/04/2012 00:09:43
Been playing with this tonight to do some proof reading and I have to say it's fantastic :)
Thanks! It's always great to know it helps.

Quote from: straydogstrut on Wed 18/04/2012 00:09:43
Suggestion: it would be good if the columns could be rearranged
I'll look into it, I used an external component for the grid, I'll see if it has support for this.

Quote from: straydogstrut on Wed 18/04/2012 00:09:43
Unexpected behaviour: when resizing columns, the table automatically scrolls to the top.
I'll check that, probably also related to the grid, but the grid is open source so worst case I can fix it there. I tried to minimize the need to resize by making sure the text column does word wrapping. 2 questions:
1. What column did you try to resize?
2. Was any line other than the first line selected when you resized the column?

subspark

About working with scripts, does anyone remember The Conversation Engine from The Forgotten Element?

They had something fairly comprehensive going on there for a while.

cianty

I have just downloaded the plugin and I love it! This is very very useful for me. I recently wanted to change the "in-game" name of a certain character and this is perfect for finding all instances where I used it.

The only annoying thing is that it has problems with all sorts of header files. For example, it doesn't accept the gui scripts in my game (LucasArts 9-verb gui template).
ca. 70% completed

SpeechCenter

Quote from: cianty on Fri 04/05/2012 13:05:18
I have just downloaded the plugin and I love it! This is very very useful for me. I recently wanted to change the "in-game" name of a certain character and this is perfect for finding all instances where I used it.

The only annoying thing is that it has problems with all sorts of header files. For example, it doesn't accept the gui scripts in my game (LucasArts 9-verb gui template).
Thanks. I found a typo in my code which causes the error in the 9-verb module. I'll have it fixed in the next version, which I plan to release in the coming days.
If you need it sooner, I can send you a pre-release, PM me your email if that's the case.

cianty

Thanks, but no need to hurry. I'll wait. :smiley:
ca. 70% completed

SpeechCenter

#43
A new version of the plugin has been released. Main changes are the ability to specify the speech line number in a parameter and fix for the parsing of 9-verb module.
Thank you all for using the plugin and for the feedback. I now feel confident enough to call this version 1.0. You can download it here.

SpeechCenter

#44
New version available with a new feature - export voice acting scripts
Here's a sample output.


It also includes settings to control the output format. As always, please let me know if you run into any trouble.

The output format is similar to the one used by the sqvsb guys, I found it very readable and useful.

Dave Gilbert


Dualnames

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)

Dave Gilbert

Hey! We started using this in a major way on our most recent project, and it's the best thing ever! I do have one more request, if you'll indulge me.

Being able to generate voice acting scripts is a HUGE boon, but right now it generates every line for every character at one time. Would it be possible to generate specific reports, based on what is on screen? For example, right now we have a character that is mostly voiced. I want to generate a voice acting script based on whichever lines are still missing. I can get that up on screen easily enough, but it would be nice to generate the nicely formatted voice acting script as well. Would that be possible?

edit: And while I'm asking for stuff, what about being able to filter your search based on custom say functions? Often I don't realize that I need to include a custom say function until later, but it gets lumped in with every other line. It would be nice to single out the lines that use that custom function.

chucklas

Quote from: Dave Gilbert on Fri 13/07/2012 17:09:52
Hey! We started using this in a major way on our most recent project, and it's the best thing ever! I do have one more request, if you'll indulge me.

Being able to generate voice acting scripts is a HUGE boon, but right now it generates every line for every character at one time. Would it be possible to generate specific reports, based on what is on screen? For example, right now we have a character that is mostly voiced. I want to generate a voice acting script based on whichever lines are still missing. I can get that up on screen easily enough, but it would be nice to generate the nicely formatted voice acting script as well. Would that be possible?

I have the exact same request.  This feature would be an amazing addition!

SpeechCenter

Quote from: chucklas on Thu 19/07/2012 02:32:44
Quote from: Dave Gilbert on Fri 13/07/2012 17:09:52
Hey! We started using this in a major way on our most recent project, and it's the best thing ever! I do have one more request, if you'll indulge me.

Being able to generate voice acting scripts is a HUGE boon, but right now it generates every line for every character at one time. Would it be possible to generate specific reports, based on what is on screen? For example, right now we have a character that is mostly voiced. I want to generate a voice acting script based on whichever lines are still missing. I can get that up on screen easily enough, but it would be nice to generate the nicely formatted voice acting script as well. Would that be possible?

I have the exact same request.  This feature would be an amazing addition!
I'm finishing testing the plugin translation support. Once I release it this feature is the next things I plan to add.

chucklas

One other addition that would be useful to me (and perhaps others) is to have the plugin automatically number lines that are not numbered.  The auto script generator that is built into AGS will redo all numbered lines when it is run.  This can destroy work that was done previously.  It would be a great help if we could have lines that lack numbers get numbered by Speech Center while leaving all other previously numbered lines unchanged.

SpeechCenter

Quote from: chucklas on Thu 19/07/2012 13:13:27
One other addition that would be useful to me (and perhaps others) is to have the plugin automatically number lines that are not numbered.  The auto script generator that is built into AGS will redo all numbered lines when it is run.  This can destroy work that was done previously.  It would be a great help if we could have lines that lack numbers get numbered by Speech Center while leaving all other previously numbered lines unchanged.

Yes, this was requested before. I'll try to get to it once I add full editing support.


I'm very happy to announce a new version with the ability to view translations per speech line.

Download here

In order to view existing translations, make sure to refresh the data and you should have all your translations listed. All features available for original text apply to translations, with the addition that once you select a line, you will see the original text at the bottom.

There's also an option to edit translation files with the same interface. To do this you must explicitly enable this from the preferences. I've used AGS functions to store the files, so it should be quite safe, but still, to be on the safer side it's best to backup your translation files before trying this.

Additional changes:

  • Added last refresh time to make it clearer whether the information is up to date
  • Added speech function column, so you can now know if Display, Say or a custom function was used (note that refresh is required to populate info)

Edit: Combined double-post (difference between posts was 18 minutes, so there was no need for a bump-post)

StillInThe90s

Hi all.
Any progress on adding an 'export to text file' function?
Or is this a feature already?

SpeechCenter

#53
Quote from: StillInThe90s on Mon 30/07/2012 02:41:17
Hi all.
Any progress on adding an 'export to text file' function?
Or is this a feature already?
Do you mean VA scripts or something else?

There's a feature to export VA scripts to HTML files (one per character). I'm going to improve it a bit to cover Dave Gilbert's request and a few other improvements I have in the backlog.

Also, AGS already supports exporting VA scripts in text format.

StillInThe90s

I basically meant a function to dump all found dialog into a txt -file, for easier grammar/spell check or printing or whatever.
VA scripts is a bit above my level of expertise.

Sorry for the late reply.

SpeechCenter

Quote from: StillInThe90s on Wed 22/08/2012 10:29:51
I basically meant a function to dump all found dialog into a txt -file, for easier grammar/spell check or printing or whatever.
VA scripts is a bit above my level of expertise.
It's not complex to add export functionality in a different format, but I would like to understand what one would get from this on top of existing capability (The VA scripts are meant to be human readable). Perhaps an example output could make this clearer.

Furthermore, is grammar/spell checking your main use case or is it just a theoretical example?

StillInThe90s

I have not really tested the plugin yet and I'm not quite sure what VA scripts are all about. Sorry.
Since people were asking for an export function earlier in the thread, I simply figured there was none.

Grammar check or exporting for proof-reading was the first example I could think of, but also something I would find useful.
My current project is filled with speech lines in the scripts, which makes proof-reading nearly impossible. Especially if I need someone else to have a look at it.

I will take a look at speech center before asking any more stupid questions.

SpeechCenter

Hello everyone,

I've been busy with changes to the plugin and while I'm still testing these changes, I wanted to share with you a screenshot of what's coming up. Most of the feature requests that came up here are going to be implemented. Of course, comments and questions are more than welcomed.

Dave Gilbert


Khris


Dave Gilbert

No pressure or anything, but this will come very useful in about two weeks when I get back from vacation to finish the rest of the VO acting on my game. :)

SpeechCenter

Quote from: Dave Gilbert on Thu 13/09/2012 09:39:34
No pressure or anything, but this will come very useful in about two weeks when I get back from vacation to finish the rest of the VO acting on my game. :)
I think it will be sooner than that, but worst case drop me a note and I'll find a solution.

SpeechCenter

I'm very happy to announce a new version of the Speech Center plugin. This release includes major changes:

  • Edit mode, now there's support for in-place text editing
  • Ability to add missing speech line numbers for the displayed lines
  • Display the script and highlight the line within the script of the current selected speech line
  • VA Scripts

    • Export only displayed lines
    • Option to group VA script lines by code block rather than by function
    • index.html is now created together with the voice scripts
  • Significantly improved refresh performance
  • Line info is displayed in the AGS properties window when selecting the line in the grid
  • New icons

It took a lot of effort to test this and to provide the best experience possible. Please let me know if you encounter any trouble. I also took many precautions in the edit feature and tested it with any source I could find. I still recommend you backup your game before editing, especially when using the feature for the first time.

The plugin is available here

As usual, please provide any feedback you'd like. Many of the features here are the direct result of the posts in this forum.

Enjoy!

SpeechCenter

Greetings,

I uploaded a minor update with a few fixes. Download link remains the same.

Feel free to comment or suggest additional improvements.

SpeechCenter

Version 2.0.2 released. Includes a bug fix that prevented exporting VA scripts in some cases.


m0ds

Hello! I have copied the DLL into my AGS root folder but every time I load AGS I get this error pop up and I can't use Speech Center.



Any idea what may be causing this please?

Could it be that the game files were saved with an AGS that had no speech center installed?

Mind you, I think one of the games I'm trying to load definitely did have Speech Center installed and was used before I got given the game files, yet the error still pops up.

Perhaps I'm missing some essential system file?

Any help appreciated! Thank you

PS. Win XP Pro SP 3

monkey0506

The error message indicates that it failed to load the "System.Core.dll" which is part of the .NET Framework 3.5+. Do you have .NET 3.5 or higher installed? The AGS editor itself requires .NET 2.0, but it looks like the plugin requires a higher version of the framework.

m0ds

Aha, thanks - that's very likely. I'm pretty sure I only have framework 2 or 3, not .5

I'll give it a shot, thanks!

EDIT- Solved! You were right. It doesn't like .NET 4 but it likes .NET 3.5

Thanks sir!

m0ds

Ok, so next question... You have a complete game, with no voice acting attached yet. There are many, many lines spread over different rooms, dialogs and global script etc.

None of them have line numbers, &1, &2. I was under the impression Speech Center would be able to work through and number them all for me, but I guess this isn't the case?

Will I still have to go through every line of script and number them, &1, &2 etc? Is there a quick method of doing this? I was thinking maybe in the "number" box you could just add a number but it seems you have to double click to enter the script etc.

If this is the case, I guess sorting by character and working through it that way would be quickest? If anyone has any decent methods for working on it from a game that has no VA currently, it'd be a lot of help :) Sorry, I'm new to this, and need to find the quickest and simplest method.

Many thanks!

SpeechCenter

The plugin does support automatic numbering of the game, you have to switch to edit mode and then in the edit dropdown you have an option to number all non-numbered lines. After that once you save the project it would apply the changes to your scripts/dialogs. The way it works is that it only numbers the lines currently displayed and not the ones you may have filtered out. It also only touches lines that don't have a number. The number is the lower available for the character. It also detects if a character has two different lines with the same text and if so it reuses the same number.

I had to add a specific edit mode due to the fact that the plugin interface doesn't have a way of notifying other components that an edit is in progress and no way of knowing if a script/dialog has pending changes. For this reason there's a dialog when entering edit mode and also upon save it closes all other windows and exits edit mode. However, you have full control over this behavior in the preferences because I didn't want these features to become nagging or annoying.

For the .net part, yes you guys are correct, I compiled it with 3.5 which is the highest .net version I can use while the editor is compiled with 2.0. Sticking to 2.0 for the plugin would have made some parts of the code overly complicated. My hope is that the editor would move to at least 4.0 at some point and then I'll make the same transition.

Currently aside from automatic numbering there's inline editing of the text itself. I didn't add an option to manually edit the number from the plugin. It's not impossible, but there are some details to take care of so it may take time to add it. Anyway, let me know if that feature has real use.

Please update if you managed to use the auto-number feature or whether something else needs to be worked out.

m0ds

Thanks. I tried it, but...

The game's default language is Italian. It has an English translation. Being English, it's only viable for me to work with the English texts and voice scripts.

I can only auto number the lines to the default language (Italian).

Although it also numbers the lines of the English translation, it no longer displays any English, whether I select to view default or English translation, and so exporting the voice scripts always occurs in Italian.

From that point, attempting to switch to English nothing happens, it just remains all in Italian, as if it's overwritten the English or something.

So I'm back at square one :(

I don't want to set the translation (English) as the game default because that will overwrite and destroy the Italian text.

If there is no way around it, I guess that's the only option, turn it into an English only game.

m0ds

Ah, I just thought of a workaround.

Have two copies of the game.

With copy 1, set the English translation as default, auto number it and compile the scripts, record the lines, the filenames always will be the same, ie ego1.ogg etc

When complete, copy all the voice files into Copy 2 speech folder. Then run speech center to number all the lines in Italian, and in theory, it will then work okay.

Does that seem like a fair assumption? There could be some errors that way though..

SpeechCenter

I believe the source of the problem is that once you have a game with translation, the code doesn't update the existing translation key with the new string (the &number is considered part of the key when translating).
So if you go to the translation you see Italian because the key for each line changed and there's no English translation for the new one.

The workaround you suggest will most likely work since the same lines will appear and will have the same order for both languages. However, I believe it will not work if you would like the compiled game to use the compiled translation file with this method.

I'll try to see if there's a quick fix for this.

m0ds

Thank you. I'm sure in time other commercial developers who deal with multiple languages may to need it to work like this too. Let me know if you come up with something. I don't really want to use the workaround, but deadlines...so will probably have to for now :) Other than that it certainly is a nifty thing!

Dhelayan

I just noticed a bug (is it?) when using 2.0.2 with AGS 3.3.0 Beta..

When i edit some random line in edit mode, then press enter, save the game and hit refresh, the line is back to normal (i.e. without the edits)

SpeechCenter

Quote from: Dhelayan on Wed 09/10/2013 22:32:15
I just noticed a bug (is it?) when using 2.0.2 with AGS 3.3.0 Beta..

When i edit some random line in edit mode, then press enter, save the game and hit refresh, the line is back to normal (i.e. without the edits)
It's more than just this edit. The bug is in the AGS editor beta code. AGS.Types.Scripts doesn't return the correct count. If I have 10 scripts (5 header and 5 code) it returns 5 as the count (multiplying by 2 is not a good solution since some scripts may not have both file types).
This problem was introduced on July 24 or July 27 in the AGS Git code repository.

I changed my code to work around it and not rely on count, but this should be fixed in AGS.


SpeechCenter

Version 2.0.3 is now released here.
This version fixes the automatic numbering with translation problem and a workaround for the script count problem in AGS 3.3.0 beta.

Snarky

Quote from: SpeechCenter on Thu 10/10/2013 04:37:34
AGS.Types.Scripts doesn't return the correct count. If I have 10 scripts (5 header and 5 code) it returns 5 as the count (multiplying by 2 is not a good solution since some scripts may not have both file types).

Out of curiosity, how? Doesn't the editor always create and remove headers and script files together?

Crimson Wizard

Quote from: Snarky on Thu 10/10/2013 07:59:31
Out of curiosity, how? Doesn't the editor always create and remove headers and script files together?
Dialog and room scripts do not have headers.
Also, there is at least one header created internally (where all the system symbols are defined).

PS. To clarify: this "Scripts" class is used not only to keep user scripts, it may be used for some internal purposes too.

m0ds

QuoteThis version fixes the automatic numbering with translation problem

Ooh. Is that a fix on the issue I was having with it or someone elses?

monkey0506

Quote from: Crimson Wizard on Thu 10/10/2013 08:16:17PS. To clarify: this "Scripts" class is used not only to keep user scripts, it may be used for some internal purposes too.

Are you sure about that? Because I'm terribly worried you're just making this all up as you go. (roll) AGS.Editor.AGSEditor.GetInternalScriptModules: These are never added to CurrentGame.Scripts. Nor are any of the Dialog.Script objects. Nor are the UnloadedRoom.Script objects. The Scripts class is used for collections of scripts, but the exposed Scripts object never contains anything except the scripts shown in the ScriptsComponent. To clarify. :P

Crimson Wizard

Quote from: monkey_05_06 on Thu 10/10/2013 09:12:31
Quote from: Crimson Wizard on Thu 10/10/2013 08:16:17PS. To clarify: this "Scripts" class is used not only to keep user scripts, it may be used for some internal purposes too.

Are you sure about that? Because I'm terribly worried you're just making this all up as you go. (roll) AGS.Editor.AGSEditor.GetInternalScriptModules: These are never added to CurrentGame.Scripts. Nor are any of the Dialog.Script objects. Nor are the UnloadedRoom.Script objects. The Scripts class is used for collections of scripts, but the exposed Scripts object never contains anything except the scripts shown in the ScriptsComponent. To clarify. :P

Find Game.ScriptsToCompile. It is of "AGS.Types.Scripts" type.
Before game is compiled this collection is filled by all other scripts:
Code: csharp

foreach (Script script in GetInternalScriptModules())
{
    CompileScript(script, headers, errors, false);
    _game.ScriptsToCompile.Add(script);
}

foreach (ScriptAndHeader scripts in _game.RootScriptFolder.AllItemsFlat)
{
    headers.Add(scripts.Header);
    CompileScript(scripts.Script, headers, errors, false);
    _game.ScriptsToCompile.Add(scripts.Script);					
}

CompileScript(dialogScripts, headers, errors, false);
_game.ScriptsToCompile.Add(dialogScripts);


Well, maybe except room scripts, frankly I could be mistaken in regards to them. E: right, I am wrong, because rooms are compiled separately from anything else.

monkey0506

I wasn't contending that the Scripts type is never used for non-public scripts. I was asserting that the CurrentGame.Scripts object (which is of the Scripts type) is never populated with non-public data, or anything other than what shows up under the "Scripts" pane in the editor.

Edit: As to modifying the Scripts type to operate as a collection of ScriptAndHeader objects, there's absolutely no reason that ScriptAndHeader.Header couldn't be null. The relevant functions should then be updated to handle such a case. Currently the Scripts collection is actually quite messy in that you can't "Add" a header without an associated script, but you can add a script with no header. Then Scripts.Count returns the number of ScriptAndHeader objects, but the indexer accesses items based on the underlying Script objects. This is bad design.

Crimson Wizard

Quote from: monkey_05_06 on Thu 10/10/2013 09:29:29
I wasn't contending that the Scripts type is never used for non-public scripts. I was asserting that the CurrentGame.Scripts object (which is of the Scripts type) is never populated with non-public data, or anything other than what shows up under the "Scripts" pane in the editor.
Err, well, I never said that CurrentGame.Scripts contains other stuff; in reply to Snarky's question I said that
Quote
"Scripts" class is used not only to keep user scripts

monkey0506

Fair enough. :P But Snarky's question really seemed to be referring to the Scripts component rather than internal scripts... but anyway.

P.S. I edited my last post a couple times, just in case you missed any of it.




Edit: I pushed a fix for the reported issue, by updating the interface of the Scripts collection. It now operates directly on ScriptAndHeader objects exclusively. For scripts without an associated header, the Header property returns null. This may break some of the functionality you were using, because I've removed/replaced some of the exposed functions.

SpeechCenter

Quote from: Mods on Thu 10/10/2013 08:39:30
QuoteThis version fixes the automatic numbering with translation problem

Ooh. Is that a fix on the issue I was having with it or someone elses?
Should fix the issue you reported. Let me know if it worked out :)

SpeechCenter

Quote from: monkey_05_06 on Thu 10/10/2013 09:37:31
Edit: I pushed a fix for the reported issue, by updating the interface of the Scripts collection. It now operates directly on ScriptAndHeader objects exclusively. For scripts without an associated header, the Header property returns null. This may break some of the functionality you were using, because I've removed/replaced some of the exposed functions.
I just looked at the class and it would certainly break any plugin that runs on the beta but compiled with the release version, including mine.
So I don't think it's a good fix because everything in AGS.Types is exposed to the plugin. How am I supposed to support those who decide to use the beta? And if I change it, then those would use AGS 3.2.1 will not be able to use the plugin.
I also believe you can still have a backwards compatible enumerators and items accessor for the Scripts class even if the internal implementation changed to ScriptAndHeader. Then at least you don't break those that access the class. It's not extremely complex, but it will require some attention to some details.

So please don't leave this change as-is, it's going to be hell to maintain plugins if the interface breaks like that.

m0ds

Great! This time it worked, it's showing me it in English (the translation) and allowing me to export it like that. No need to use the workaround now it seems. Thanks a lot!! :D

m0ds

Hello again SpeechCenter :) I think I've run into an issue, or I'm doing something incorrectly.

The games default language is Italian and it has an English.trs (translation). Auto numbering works fine and it displays both the default language and the English translation all numbered fine, scripts generated okay. Now I compile the game and play it, and it's always showing Italian. Even with winsetup set to English.trs. Though it only appears to be dialog that's affected, as GUI elements are still translated, and the trs file is intact (with the English translation).

So I'm puzzled why this is happening. Any ideas? :)

SpeechCenter

Hey Mods,

AFAIK, AGS uses the full text with the &number as the key in order to determine the translation. If the original file does not contain the number in the original (Italian) line then it won't find the correct English line. So what needs to be done is to update the translation file (from AGS, not the plugin). I make sure to copy the translation with the new number into the translation data structure so when you update the translation it should be in there with the correct values. After that it should work.

You will actually see after updating that the translation file that it contains two sets, the original ones and the numbered ones (probably the original in the beginning and the numbered in the second half). This is an AGS behavior, it would be the same if you were to go to the script manually and change the line numbers on your own. It's not something major, it just means your translation file is bigger and has irrelevant lines. I think the right place to add cleanup is in the translation component since it's the one generating the file. It's probably possible to think of a script that removes the unnecessary lines in your specific case.

Still, it should work after you update the translation file, so it's best to start by verifying that.

m0ds

Thanks for the quick reply. I understand what you mean and have tried it.

What happens then is section two, the newly created & numbered lines in the trs file, only have the Italian version (default), and blank lines for where all the English lines would be, as usually happens when you "Update" the translation. How do I preserve the English lines and have the line numbers added to them in the trs file? Hopefully there's some way, because having to manually move all the translated lines from the first section into the second section would take me days if not weeks... Is there some method I can use or am I missing a step in AGS (or maybe speech center? though I think it's AGS like you say). Thank you :)

Edit. I've totally confused myself over this. If you can give me a step by step guide it would be useful, and now speech center won't display any of the English translation so I've either overwritten something...like I say, totally confused!!

SpeechCenter

The steps are:
1. open the project without the numbering and translation
2. Open Speech Center plugin
3. optionally filter out lines you don't want to number
4. Go to edit mode
5. Choose to number lines without numbering
6. Save game
7. Update translation file

Thinking about it a bit, if you have done all steps till 6 and closed the project then it's possible that when opening it again this new translation information was not saved because the file was not updated. Will have to check that.
If there's another reason it doesn't display the translation anymore need to understand what was done, it worked in my tests.

m0ds

Thank you for explaining :) Everything worked out this time and all is in working order.

m0ds

Hi again SpeechCenter. The script generation is very useful, however I've found that the index.html that gets created shows the number of ALL lines, including repeated ones. I'm wondering if there's any possibility of it being made to display actual number of lines (that need recording) and perhaps then total number of lines after that?

For example, 4 lines that all say "I don't need to do that." and get recorded once (ie all using EGO3.wav), get listed as 4 lines. Although this doesn't happen much with NPC's it's certainly a key factor in player lines, who often repeat what they say. The feature itself (of showing number of lines in the index.html) is very useful, I just don't think it's showing the most useful information. Does that make sense?

SpeechCenter

Yes, makes sense.
Currently the actual file per character does display the duplicate lines differently, but the index is just the total of all the lines.
It shouldn't be difficult to add to the index that since the information is already generated.

As a workaround you can filter duplicate lines in the plugin and export only the displayed line. It should generate the index file with the correct number of lines.
If you want to have the full scripts with the index file just copy the file to the same directory as the other scripts. The two options should generate the VO scripts in different folders so you don't need to rename things between the two actions.

Please see if the workaround gives you what you need.

m0ds

Thanks, so do not show duplicate lines via plugin and then export only displayed, created "Voice_Scripts_Partial" and THAT seems to be showing the actual number of lines that need recording in index.html. Thanks!

SpeechCenter

General note:
If you are using the AGS 3.3.0 beta and the plugin, please make sure to use beta 12 (build 3.3.0.1152) or above.
This release should fix any compatibility issues associated with editor plugins that existed in some earlier beta versions.
If you do find any problems with the plugin while testing the beta release then let me know.

If you are using the current release version (AGS 3.2.1), no action is required at this time.

SpeechCenter

Version 2.0.4 is out and available here.
Fixes a parsing error in some specific scenarios.

Nixxon

Can I just say that this is bloody amazing. Not sure where I would go from here without this plugin.

Top work.

Dave Gilbert

So I have been using this plugin for four years now and had no problems. I would seriously be lost without it. Today, sadly, I have hit a snag.

My game has a lot of background conversations (e.g., non-blocking). It got very complex very quickly, so I created a system that generates them fairly quickly. I've created an array of structs called bgConv, with each struct in the array containing the character, the line to be spoken, and the audiofile name (currently "null" until I get the VO in). I created a command, attached to the struct, called "convSetup" which is used like this:

Code: ags

    BGconv VillageEye2;

    function BGsetup()
    {
        VillageEye2.convSetup(cEli, "Do these drawings on the wall mean anything to you, Mandana?",null);
        VillageEye2.convSetup(cMandana, "I can not decipher their meaning, but I do get a sense of... reverence?",null);
        VillageEye2.convSetup(cEli, "Reverence. Like worship?",null);
        VillageEye2.convSetup(cMandana, "It is only a feeling.",null);
    }  


The plugin can pick up dialog that is called by global functions, but that doesn't seem to apply to functions that are subcommands of other objects (like structs).  Is there a way to enable Speech Center to pick up these conversations? Or should I cut my losses and just redo how the function works? In hindsight, I probably should have tested this out long before now.

SpeechCenter

Quote from: Nixxon on Thu 23/06/2016 00:39:47
Can I just say that this is bloody amazing. Not sure where I would go from here without this plugin.

Top work.
Cool, glad you liked it and found it useful.

SpeechCenter

Quote from: Dave Gilbert on Thu 23/06/2016 15:57:57
So I have been using this plugin for four years now and had no problems. I would seriously be lost without it. Today, sadly, I have hit a snag.

My game has a lot of background conversations (e.g., non-blocking). It got very complex very quickly, so I created a system that generates them fairly quickly. I've created an array of structs called bgConv, with each struct in the array containing the character, the line to be spoken, and the audiofile name (currently "null" until I get the VO in). I created a command, attached to the struct, called "convSetup" which is used like this:

Code: ags

    BGconv VillageEye2;

    function BGsetup()
    {
        VillageEye2.convSetup(cEli, "Do these drawings on the wall mean anything to you, Mandana?",null);
        VillageEye2.convSetup(cMandana, "I can not decipher their meaning, but I do get a sense of... reverence?",null);
        VillageEye2.convSetup(cEli, "Reverence. Like worship?",null);
        VillageEye2.convSetup(cMandana, "It is only a feeling.",null);
    }  


The plugin can pick up dialog that is called by global functions, but that doesn't seem to apply to functions that are subcommands of other objects (like structs).  Is there a way to enable Speech Center to pick up these conversations? Or should I cut my losses and just redo how the function works? In hindsight, I probably should have tested this out long before now.
Hi Dave, long time :)
I checked and indeed this option is not covered. I'll try to find some time to update this, but I cannot really say at the moment when I'll be able to do that. Is it possible for you to use a global function for now?

Dave Gilbert

Well, it will be a looong time before this game is ready for voice acting. At least a year. So if you think it will be addressed sometime before then I will keep going as is. Thank you!

Vincent

Good evening to all AGSer.

This is much interesting to know.
I didn't knew (since a couple of minute ago) that the file.tra doesn't translate any String inside an array. (roll)
In other hand, I should revisit all of my scripts and to do something like this.

Code: ags

if (Game.TranslationFilename != "English") {MessageToSay[0] = "Ciao, come stai ?";}
else {MessageToSay[0] = "Hello, how are you ?";}


I wish I could ask you for confirmation on this issue before changing further the source code.
Thanks in advance.

Crimson Wizard

Vincent, you may use GetTranslation instead:

Code: ags

MessageToSay[0] = GetTranslation("Ciao, come stai ?");


Alternatively, you may store non-translated string in array, but translate it later when you do something, like display it onscreen:
Code: ags

MessageToSay[0] = "Ciao, come stai ?";
<...>
Display(GetTranslation(MessageToSay[0]));


Choose the way which is more convenient for your case.

Vincent

Thank you CW for the quickly answer.
I must need to try this further now, then I will be right back here again and let you know. :)

Vincent

Okay CW, it's all working like a charm !!! :D
I really much appreciate for your help, really. :)

Now the file.tra can translate String inside an array as well.
I only had to change :
Code: ags

LabelMsg1.Say(String.Format("%s", MessageToSay[0])); 


to this : (by always keeping the translation in the file text)
Code: ags

String translated_message = GetTranslation(MessageToSay[0]);
LabelMsg1.Say(String.Format("%s", translated_message)); 


Both of the way I run the game (English or not) the String get read just properly fine.

Anyhow, I still have to revisit all of scipts in this way.
But I don't care because I am really much HAPPY that I got it to work, finally. :)
With this approach it will save me a lot of time for sure.

Many thanks again CW :)

Snarky

I just tried to use SpeechCenter in AGS 3.4.0, but it seems like the parser hasn't been updated to support all the new language features, so when I hit "Refresh" it's throwing errors all over the place, and fails to find all the speech lines in affected files (Edit: it turns out that failing to find the speech lines was at least partly because it doesn't understand optional parameters, so I had to configure it for all the different ways my custom functions can be called). Here's a partial breakdown of things it doesn't like:

Code: ags
#region RegionName

void StaticExtenderFunction(static StructName)
{
  for(int i=0; i<10; i++)
  {
    switch(i)
    {
      case 0:
        break;
    }
  }
}

#endregion

Dave Gilbert

Quote from: SpeechCenter on Thu 23/06/2016 20:18:15
Quote from: Dave Gilbert on Thu 23/06/2016 15:57:57
So I have been using this plugin for four years now and had no problems. I would seriously be lost without it. Today, sadly, I have hit a snag.

My game has a lot of background conversations (e.g., non-blocking). It got very complex very quickly, so I created a system that generates them fairly quickly. I've created an array of structs called bgConv, with each struct in the array containing the character, the line to be spoken, and the audiofile name (currently "null" until I get the VO in). I created a command, attached to the struct, called "convSetup" which is used like this:

Code: ags

    BGconv VillageEye2;

    function BGsetup()
    {
        VillageEye2.convSetup(cEli, "Do these drawings on the wall mean anything to you, Mandana?",null);
        VillageEye2.convSetup(cMandana, "I can not decipher their meaning, but I do get a sense of... reverence?",null);
        VillageEye2.convSetup(cEli, "Reverence. Like worship?",null);
        VillageEye2.convSetup(cMandana, "It is only a feeling.",null);
    }  


The plugin can pick up dialog that is called by global functions, but that doesn't seem to apply to functions that are subcommands of other objects (like structs).  Is there a way to enable Speech Center to pick up these conversations? Or should I cut my losses and just redo how the function works? In hindsight, I probably should have tested this out long before now.
Hi Dave, long time :)
I checked and indeed this option is not covered. I'll try to find some time to update this, but I cannot really say at the moment when I'll be able to do that. Is it possible for you to use a global function for now?

Quote from: Dave Gilbert on Thu 23/06/2016 20:28:49
Well, it will be a looong time before this game is ready for voice acting. At least a year. So if you think it will be addressed sometime before then I will keep going as is. Thank you!

Hello! So it's been a year and a half and I'm gearing up to start recording in a month or two. Any chance of this being addressed? Thanks again and apologies for the issue. :)

Dave Gilbert

Also there's one odd discrepancy I noticed when exporting my VO lines. (sorry for the double-post)

Here's a sample from a script (exported into Word):



As you can see, only SOME of the lines have the "Player:" line before the dialog, while others do not. I did some digging and discovered why.



The player's lines that got exported to the script are the lines that are checkmarked as "show" in the editor. I would like ALL of the player's lines to be exported. Is there a way to do that? The player characters isn't voiced, which is why I didn't write include their lines in the dialog itself.

Any help appreciated! Thanks again. This module is absolutely indispensable!

Dave Gilbert

Triple posting! Sorry to keep posting in this thread, but I discovered a bug and a workaround that folks might be interested in hearing.

So I noticed that one specific room script wasn't being picked up by the module. I was tearing my hair out trying to figure out why. I noticed that when I commented out the majority of the lines in the script, it got picked up. Naturally the room in question was one with LOTS of lines, so after about an hour of commenting and uncommenting later, I discovered the cause!

The culprit was this line:
Code: ags

cVicki.GSay("So what do we do about her?");");


I mistakenly added an extra "); at the end of the command. This is something that the compiler ignored, but the Speech Center plugin did not. I removed the offending code and it now works perfectly!

Edit: I've tried contacting Gilad by PM and email, and have had no reply. So I guess it's safe to say he is no longer actively working on the plugin? Does the source for this exist anywhere?

Dave Gilbert

I found another bug in the plugin. Sorry to keep multi-posting. The developer of this plug-in doesn't seem to be working on it anymore, so i figured I'd post it here so others are aware.

If Speech Center is in edit mode and you compile the game, AGS freezes. So be sure to SAVE the game (to get out of edit mode) before compiling.

SpeechCenter

Huge apologies for the long time being away... too many things happened in real life and only now I have seen all the messages so I wasn't aware this was going on. These issues certainly need to be addressed as well as the requests which are overdue, the goal of the plugin is to improve the productivity and I'd like to ensure this is maintained.
I'm going to see what I can do, will take me a bit to figure all this out. If I see I don't have the capacity to handle then I'll look for other options to address.

Again, sorry for the delay in my response.

Snarky

Woohoo! Great to have you back.

Whatever you decide you can do about these feature requests, I really do urge you to open-source the code. It's so vital to a lot of game projects that a risk of it not working or nobody being able to maintain it in the future could mean AGS isn't a viable option any more, just because of that.

It's your choice, of course. But even if nobody actually does edit the code, just knowing that in the worst case, as a fallback option, someone else could make some desperately needed fix or addition would be a huge relief. It doesn't have to be a big effort: Just picking a license and dropping the source code on Github or Bitbucket (or just zipping it up and sharing a link) is pretty quick.

Dave Gilbert


Narehop


Chicky

I've been playing around with Speech Centre and it's such a time saver!

However, I've run into a snag. We use custom hotspot properties for base responses that don't need specific code, whenever the character responds with just a line of dialogue.

If defaultInteract or defaultLook is set to True, it uses the lines provided below.



Looks like Speech Centre doesn't pickup on these lines (those speech file numbers were added manually), I guess this isn't how most people handle default responses but it seemed like a nice tidy way of doing it when we started.

Anyway, we have 80+ rooms setup like this...

I guess my question is: Is this something SC might be able to support in the future? I really don't fancy going through and adding all of these to room script :~(

SpeechCenter

Quote from: Chicky on Tue 12/06/2018 15:09:22
I've been playing around with Speech Centre and it's such a time saver!

However, I've run into a snag. We use custom hotspot properties for base responses that don't need specific code, whenever the character responds with just a line of dialogue.

If defaultInteract or defaultLook is set to True, it uses the lines provided below.



Looks like Speech Centre doesn't pickup on these lines (those speech file numbers were added manually), I guess this isn't how most people handle default responses but it seemed like a nice tidy way of doing it when we started.

Anyway, we have 80+ rooms setup like this...

I guess my question is: Is this something SC might be able to support in the future? I really don't fancy going through and adding all of these to room script :~(
It's a very interesting way to implement, I'll have to look at whether there is an easy way to access the hotspot properties. It does sound like a very specific way to implement this (interesting to know if others are using this or something similar), so I'll likely try to first look at options that allow extracting data from other sources a bit more generically.
Since I first want to ensure to get the plugin back to working condition, this use case will go to the backlog for now.

Chicky

Thanks for taking a look, honestly it might not be worth your trouble (unless there are other people working like this). I spent a couple of days going through and converting everything over to room script, so it all plays nice with SC now. It's good to hear you're revisiting the project, it's an amazing plug-in!

SpeechCenter

Some updates:
1. Updated parser to include all new capabilities of AGS 3.4.0
2. Added ability to add methods to custom speech function
3. Added DisplayTopBar to the list of speech functions
4. Playback of <Player> text will use the configured player character

Will release in the next few days, just finalizing some tests.

@Dave Gilbert:
1. I plan to include an option to show in the grid dialog text that is not shown or spoken, this it will be visible in the VO script. I'd like to release all changes above soon, will try to include that as well, if that won't happen now, will have another minor release with this change.
2. I reproduced the problem you reported of build while editing text. The changes are applied prior to the build, so nothing is lost, only that the edit box remains visible. The workaround is to go back again to edit mode and then cancel to get rid of that edit box. I"m still not sure what's the source of the problem, I'll work on it, seems to be related to the grid I used. It will take some time to work this out, but for now at least there's a workaround.
3. The fact that AGS ignores '");' at the end seems odd, I doubt it was done in AGS intentionally. However, if this is somehow officially supported I'll work to include that as well in the parser. If this behavior is just an artifact of some AGS parsing code, recreating this behavior in a different parser is going to be difficult, plus I assume AGS can break this behavior if it's not part of the official support.

Also note that at the moment the plugin will not work with AGS 3.5.0 Alpha version, there's a discussion in another thread regarding that issue.

SpeechCenter

New release (2.1.0) is now available here

1. Updated parser to include all new capabilities of AGS 3.4.0
2. Added ability to add methods to custom speech function
3. Added DisplayTopBar to the list of speech functions
4. It is now possible to display dialog option text even if it is not used for display or speech in the game
5. Playback of <Player> text will use the configured player character

Note that the minimum AGS version required for this plugin is 3.4.0.
At the moment the plugin does not work with the current implementation of AGS 3.5.0 Alpha.

SpeechCenter

Update: due to a fix in AGS 3.5 Alpha, the plugin now works with this release. The only caveat is speech playback is not working at the moment with that particular AGS release (this should work fine with AGS 3.4), I'll work on a fix for that, but everything else should function as normal.

eri0o

I noticed I get an error in the refresh part of the plugin ("Files not fully parsed: somefile.asc..." ) when I am initializing an array of managed structs like:

Code: ags

managed struct StarStruct{
  int x;
  int y;
  int speed;
};

StarStruct * starfield[]; //background stars

void initializeStarfield(){
  starfield = new StarStruct[5];
  starfield[0] = new StarStruct;
  starfield[1] = new StarStruct;
  starfield[2] = new StarStruct;
  starfield[3] = new StarStruct;
  starfield[4] = new StarStruct;
}


The error points to the last column of the line `starfield[0] = new StarStruct;` and similar lines.



Plugin version: 2.1.0.0
AGS editor version: 3.4.3.1
Game Settings:
Debug: True
Left to right precedence: True
Enforce object based script: True
Enforce new audio: True
Enforce new strings: True

Is it possible to order the texts by location and line? This would allow reading the dialogs like... Dialogs! :]

SpeechCenter

I see the issue and working on a fix. I suspect this bug has been lurking since the first release, thanks for finding and reporting it.

As for the question regarding sort, when you sort by location, the line numbers are automatically sorted in ascending order for all rows that have the same location. So if you have Dialog 1 lines 1 through 5, and you sort by location, you should expect to see lines 1 through 5 of Dialog 1 appear one after the other. I checked the code to confirm that's how it's supposed to work, if you have seen a different behavior, please let me know.

SpeechCenter

Just released a new version of the plugin that should address the issue. Please check and let me know.
https://1drv.ms/u/s!AgDXrcGi1DGgb59otK4Z8fEy_9I

eri0o

Solved it beautifully! Thank you! :]

Also you are right! Clicking on Location first does order by line number after! I think I clicked on something else after! Sorry for giving extra trouble.  8-)

Dave Gilbert

Hello! So I decided to try out the latest version of AGS today and snuck the latest version of this plugin into the installation directory. When I load up AGS, I now get this error:



Any ideas on why this happens?

Thanks!

-Dave

SpeechCenter

First time I see this issue. Just so I know where to look, is this using the latest AGS 3.4 release or on the 3.5 beta release?
Edit: never mind, I see in the screenshot, this is 3.5, I'll take a look, might be related to the fact it's using a newer .net version than AGS 3.4.

Dave Gilbert

Sorry! I thought I replied here. I figured out the solution. I right-clicked on the speech center DLL, went to properties, and selected "unblock."

SpeechCenter

Okay, that explains it. I might add a note to the installation instructions.

Dave Gilbert

So even though I got the plugin to load, the sound files no longer play properly. I press the "play" button, then an "error playing" message appears and no sound plays. Here's a screenshot of what happens:



All the speech files are present in the speech folder. The game runs fine when I compile it.

I am using the latest version of the plugin and the latest version of AGS 3.5.

Any help appreciated! :)

-Dave


Dave Gilbert


SpeechCenter

It's using the editor, I understand why it's happening, but it may take some time to fix.
@Gilbert, please let me know if this is time critical, if so I may provide a specific workaround so you don't get stuck.

Dave Gilbert

Sorry I didn't see this until now. I don't know why I didn't get the usual notification!

Anyway, no it's not time critical. I am only just starting a project so it will be awhile before I need voiceover. Is this something specific to my computer/setup? Is there anythign I can do in the interim to get it working? I imagine others will be having this problem as well.

SpeechCenter

It's not something wrong in your environment. The audio playback works fine with AGS 3.4, so at the moment, the only immediate workaround to use this functionality is to use AGS 3.4. I could release a hacky workaround but I prefer to fix this properly if possible. All other functionality should work fine with AGS 3.5 and I'm hoping people that upgraded are not stuck.
Since AGS 3.5 is already a RC then I'll make sure to address it as soon as possible, but it might be a few weeks until I'll be able to do this properly. In the meantime, if you or anyone else find themselves in a situation that they use AGS 3.5 and need a quick fix for audio playback from the plugin then drop me a note and I'll release that interim solution.

Crimson Wizard

AGS 3.5.0 have different versions of some 3rd party libs, I think, including the audio library. Maybe that's relevant, or some other changes.

I will try looking as well, although tbh I never used this plugin before.

SpeechCenter


Grundislav

Hello! Any updates on this? I've upgraded my most recent project to AGS 3.5 and have also been having the playback error.

rmonic79

Right now i'm only need to renumber no-numbered characters lines speech, is it safe with 3.5?

SpeechCenter

The issue is only with playback, the rest of the functionality should work with 3.5. I believe I'll have a solution within a few weeks, I'll do my best to speed things up.

Grundislav

Quote from: SpeechCenter on Sun 19/01/2020 02:41:25
The issue is only with playback, the rest of the functionality should work with 3.5. I believe I'll have a solution within a few weeks, I'll do my best to speed things up.

Great, thanks!

Crimson Wizard

Is this an AGS issue or SpeechCenter's, that it writes its data into Game.agf even if not used in the particular game project?

SpeechCenter

Quote from: Crimson Wizard on Sun 26/01/2020 12:47:40
Is this an AGS issue or SpeechCenter's, that it writes its data into Game.agf even if not used in the particular game project?
What's the expected behavior if AGS loaded the plugin? It's possible it writes an empty node, but not sure what's the issue.

Crimson Wizard

Quote from: SpeechCenter on Sun 26/01/2020 13:32:47
Quote from: Crimson Wizard on Sun 26/01/2020 12:47:40
Is this an AGS issue or SpeechCenter's, that it writes its data into Game.agf even if not used in the particular game project?
What's the expected behavior if AGS loaded the plugin? It's possible it writes an empty node, but not sure what's the issue.

I never knew how editor plugins are expected to work in this regard. When you work with engine plugins, these may be turned on and off for the individual projects, but not editor plugins, it seems.
SpeechCenter writes a node into Game.agf whenever I save a game, even if I don't really use it in this project. This does not seem right, because Game.agf is a part of project source, and it's not supposed to have data that does not belong to the game.
This is not a critical issue, but may be an annoyance, because if I share project code with someone else, and they don't have SpeechCenter installed, they will keep getting warnings upon opening a project. Also, data will get lost and recreated, and these recurring changes become part of version control commits.

For the reference, here is what it adds:
Spoiler
Code: xml

  <Component Name="SpeechCenter">
    <SpeechCenter Version="2.1.0.0">
      <Document Version="2.0.0.0">
        <Settings>
          <CustomFunctions />
          <VoiceActorScripts NewParagraph="PER_FUNCTION">
            <Format>
              <Styles>
                <CSSStyle CSSName="body" FontFamily="Cambria" Color="" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".currentCharacter" FontFamily="" Color="" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".otherCharacter" FontFamily="" Color="LightGray" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".lineNumber" FontFamily="" Color="Firebrick" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".duplicate" FontFamily="" Color="Thistle" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".speechCorrect" FontFamily="" Color="MediumBlue" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".speechIncorrect" FontFamily="" Color="Red" FontStyle="inherit" FontWeight="inherit" />
                <CSSStyle CSSName=".filtered" FontFamily="" Color="LightSlateGray" FontStyle="italic" FontWeight="inherit" />
              </Styles>
            </Format>
          </VoiceActorScripts>
          <Translations EnableEditing="false" />
          <Edit ShowWarning="true" ExitEditModeAfterSave="true" RefreshProjectAfterSave="Any" />
          <DialogParsing ShowAllOoptionText="false" />
        </Settings>
        <SpeechLines />
        <Translations />
      </Document>
    </SpeechCenter>
  </Component>
[close]


What kind of data is this, as in, is this supposed to be a persistent data used in game, or "workspace data" used for plugin's work? I don't remember if AGS editor API provides good alternatives though. I know there's also *.agf.user file where optional workspace settings could be saved, but have no idea if it is suitable for SpeechCenter's needs.

SpeechCenter

This data is in game.agf since my thought process was that this behavior should be consistent between different collaborators. Specifically, anything that affects the way the voice script is generated and the custom functions that were chosen, as well the checkboxes that were selected/unselected should also be stored and synced between users. Usually a .user file is per specific user preferences and this would mean different users of the same game project would not see the same outcome of the plugin.

Is there a different place to store project-level data (and not per user preferences)?

SpeechCenter

Plugin updated to address the playback issue with AGS 3.5.0. Please update me if you run into any additional issues.
Another minor feature is that if you use the new AGS 'custom say function in dialogs' capability, then the plugin will detect these functions, therefore there is no need to add these particular functions in the SpeechCenter plugin custom functions configuration.

AGS 3.4 is still supported for now to give people enough time to update to the newer editor version. I'll likely update the minimum version to AGS 3.5 later in the future.

Dave Gilbert


Crimson Wizard

Quote from: SpeechCenter on Sun 26/01/2020 17:51:39
This data is in game.agf since my thought process was that this behavior should be consistent between different collaborators. Specifically, anything that affects the way the voice script is generated and the custom functions that were chosen, as well the checkboxes that were selected/unselected should also be stored and synced between users. Usually a .user file is per specific user preferences and this would mean different users of the same game project would not see the same outcome of the plugin.

Is there a different place to store project-level data (and not per user preferences)?

I apologize for forgetting to reply.
Yes, it looks like that Editor does not currently provide an appropriate config for shared "workspace" data. It's hard to tell whether the *user file does work as you expect though, because nothing prevents from copying it between collaborators as well. But it contains more "volatile" data, such as last build configuration (debug/release).

SpeechCenter

Quote from: Crimson Wizard on Mon 17/02/2020 13:24:32
Yes, it looks like that Editor does not currently provide an appropriate config for shared "workspace" data. It's hard to tell whether the *user file does work as you expect though, because nothing prevents from copying it between collaborators as well. But it contains more "volatile" data, such as last build configuration (debug/release).
I think most of what's stored in there is data related to the plugin and not per user data. I think I've seen an AGS editor feature request to separate each section to its own XML file, so if that's implemented, and each plugin can store its data in its XML and it's all part of source control integration, then I think it will address the need to store the data and not create a huge project file. Another option is that each section specifies the files, this is more generic, but requires more work/changes. At the moment if I do this without an underlying feature from the editor, then there is no way to tell it that there are additional files that should be part of the project.

Assuming this makes sense then it might be best to see how to do this automatically without breaking the plugin's code, but this is a detail, if not possible we can find ways to have the plugin work with both options.

Grundislav


Blackthorne

I keep getting a strange error when I load AGS - and I can't get Speech Center to work. Has anyone else had this issue?

-----------------------------------
"Enjoy Every Sandwich" - Warren Zevon

http://www.infamous-quests.com

Privateer Puddin'

Do you have the latest version? I thought it was fixed.. anyway, Dave posted a fix:

Quote from: Dave Gilbert on Wed 18/09/2019 13:50:19
Sorry! I thought I replied here. I figured out the solution. I right-clicked on the speech center DLL, went to properties, and selected "unblock."

Blackthorne

Yeah, I have the latest version! I missed this though, I'm going to try. My guess is it will work, and my brain fog has flustered me once again! Thanks, man.
-----------------------------------
"Enjoy Every Sandwich" - Warren Zevon

http://www.infamous-quests.com

eri0o

I also added a mention in the manual and a page (originally written by MorganW) there: https://adventuregamestudio.github.io/ags-manual/TroubleshootingWindowsZoneID.html

Curious, which AGS are you using? I think in the latest one it should detect and offer a pop up to unlock.

SpeechCenter

There is no easy for for this on the plugin (probably creation of an installer would work, but then need to think about multiple AGS destinations and it becomes complicated).
This is a security feature and starting from .net 4, it won't load DLLs that came from another computer (hence the need to unblock the dll). One other option is to add the following to the AGS runtime configuration file:
Code: xml

<configuration>
   <runtime>
      <!-- Treat assemblies from network locations as fully trusted. -->
      <loadFromRemoteSources enabled="true" />
   </runtime>
</configuration>


HanaIndiana

Thank you for the 3.5 update! ;-D This module has saved me sooo much time and effort.

Dualnames

I'm using latest version of AGS and latest version of speech center, and oggs and mp3s dont seem to work, I get "error playing" any thoughts/solutions about that?
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)

SpeechCenter

Quote from: Dualnames on Mon 04/01/2021 23:26:01
I'm using latest version of AGS and latest version of speech center, and oggs and mp3s dont seem to work, I get "error playing" any thoughts/solutions about that?
There was an issue with 3.5, but I fixed the plugin a year ago so it should work, I'll check.

Dualnames

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)

Dualnames

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)

Crimson Wizard

Quote from: Dualnames on Thu 14/01/2021 17:47:58
I'm using 3.5.0.2 beta,so that might be the issue?

I don't know what is this about, but if remember correctly there was about a year of development between 3.5.0.2 (alpha) and the final release, so alot of changes have been done in between.

Dualnames

Newest beta works !!!!

EDIT: It's irrelevant to newest beta, it had to do with my installing redistributables from here
https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/
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)

eri0o

AGS installer should install any needed redistributable. You are saying that one didn't work or you didn't install AGS and instead ran it from binaries?

SpeechCenter

Quote from: Dualnames on Sat 16/01/2021 00:06:31
Newest beta works !!!!

EDIT: It's irrelevant to newest beta, it had to do with my installing redistributables from here
https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/
Not sure I understand, the latest I see is 3.5.0.29 which is a release 4 days ago. Can you send me a link to the exact version you were using?
It's possible the runtime you installed is needed for the plugin and not AGS, although I've tried to make sure it's aligned. This also explains why I haven't seen that issue.

Dualnames

Older version i was using also works!! My edit was the solution!
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)

morganw

What the AGS installer provides was based on the minimum version that AGS itself required to run. There is a specific check for that version or later that skips installation, so potentially there is a gap in the middle where AGS is happy but something related to a plug-in would not be , depending on what the plug-ins requirements are.

https://github.com/adventuregamestudio/ags/blob/faf6ab299d1767391a2aa0cde05d848dc5294c3f/Windows/Installer/ags.iss#L186-L189
Code: pascal
  // Visual C++ runtime
  // https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
  VCPP_REDIST_MAJOR_VERSION = 14.0;
  VCPP_REDIST_BUILD_VERSION = 24215;


If that is the issue then potentially the installer could provide newer runtime files to be more compatible with plug-in requirements. It is probably easier that way than saying that all plug-ins supply their own VC++ runtime as that means users without admin rights can't use install plug-ins (and I think there is a scheme afoot to try and get something resembling an AGS plug-in repository working). Possibly statically linking a plug-in with the runtime version might work too, I don't know enough about that to say for sure.

Dave Gilbert

Hello! I upgraded to this latest version of Speech Center, but when I boot up AGS (version 3.5.1, latest beta) I get this error on startup:



I can click through this window, and the game loads in the editor, but the plugin no longer installed.

I adore this plugin and use it constantly, so any help is appreciated! Thanks. :)

-Dave

morganw

You need to 'unblock' (right-click, properties) the file because there is metadata stored with it that indicates it has been downloaded from the Internet.

If you've copied the file somewhere that isn't writeable from an unelevated process (e.g. you've dragged it into C:\Program Files) then you wont be able to use the unblock button, so you'll need to do the unblocking before copying the files into place.

SpeechCenter

Hey Dave, I think morganw's solution will solve it, but let me know if this doesn't work

Dave Gilbert

Ah! That did it. This happened the last time I updated Speech Center. I just forgot. I even asked this exact same question on this thread two years ago.  :D

Thanks!

Dualnames

Worst offender is me asking Dave "hey i have this issue", Dave going "oh you need to do this", and then Dave forgetting 6 months later.
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)

Dave Gilbert

To be fair, a lot of my memory has been overwritten by pandemic panic.

Dave Gilbert

Hello! I was wondering if it was possible to export the VO script in an XML or Excel format instead of a text file? Something like this, or some facsimile thereof:



The Speech Center plugin already lists everything in table-like format, so I assume (although you know what they say about assume) that this should be simple. Any help appreciated!

-Dave

SpeechCenter

Hey Dave,

The output format is actually XHTML so it's an XML. However, I can add CSV export relatively easily if this will assist you further.

Dave Gilbert


Dualnames

I made a small thing http://primordia-game.com/Files0/ExcelGenerator.rar

It parses the game.agf file, provided you've also recently hit refresh and save on the speech plugin and generates an excel file for every single line.
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)

Dave Gilbert

(I did thank Duals privately but will do so publicly so I don't look like a forgetful jerk. Thanks, Duals!)

Anyway, I have another issue. I am trying to incorporate a custom speech function that uses a method, but it doesn't seem to be playing nice with SpeechCenter.

The object is a struct called BGconv, which uses a function called convSetup. It is used like this (for a BGconv struct called "bgJoeChat"):



In Speech Center, I created a custom function using these settings:



But the lines don't get picked up. Am I doing it wrong? Any ideas appreciated!

-Dave

EDIT: Er, I don't know what I did but it is magically working now. So... problem solved?

SpeechCenter

Based on the screenshots this should have worked. Plus, if it magically started to work there's likely a different issue. If you do find a way to reproduce it then let me know.

By the way, will have a new version that exports all the CSV. I expect it's going to be this week.

SpeechCenter

#180
Version 2.2.0 released.

Now when you export the voice script, you will also get in the voice script folder a file called 'data.csv' which includes all the information in tabular form.

Note that this release requires AGS 3.5.0 as a minimum, meaning if there's anyone who still uses 3.4 with the plugin, they should upgrade their AGS version. The reason is that I also updated the plugin to use .net 4 (you'll need .net 4.7.2 as a minimum)

eri0o

Hey, this worked for me on 3.6.0.25 too! Thanks for the release!

Dave Gilbert


Crimson Wizard

@SpeechCenter, Hello.

We found that SpeechCenter uses some of the AGS.Types classes and their methods directly, not through the interfaces. This makes it easy to break this plugin's integration, as the AGS developers are not aware if changing certain classes or methods will affect this plugin's work.

To give an example, recent changes to Script.SaveToDisk() parameter list has broken saving the script document from this plugin.

It will be nice to discuss this somehow, and see if we can move necessary methods to interfaces.

SpeechCenter

Sure, I thought AGS.Types is an API, and it has been working for over 10 years :)
I'll try to enumerate what the code uses so we can see the gaps.

.M.M.

Hi there,

The plugin looks really cool and useful, but fore some reason, all my dialog text got wiped out. In every dialog in the project. The options were not affected, everything else is suddenly blank. I'm using AGS build 3.6.0.31 if it helps.
I have some backups, so it should all be okay, but I'm not sure whether someone reported this or had similar problems.

Crimson Wizard

Quote from: .M.M. on Mon 12/09/2022 19:55:44
The plugin looks really cool and useful, but fore some reason, all my dialog text got wiped out. In every dialog in the project. The options were not affected, everything else is suddenly blank. I'm using AGS build 3.6.0.31 if it helps.
I have some backups, so it should all be okay, but I'm not sure whether someone reported this or had similar problems.

There have been a bug in 3.6.0 which caused this, please make sure you're using the latest update of 3.6.0.

Dave Gilbert

Quote from: .M.M. on Mon 12/09/2022 19:55:44Hi there,

The plugin looks really cool and useful, but fore some reason, all my dialog text got wiped out. In every dialog in the project. The options were not affected, everything else is suddenly blank. I'm using AGS build 3.6.0.31 if it helps.
I have some backups, so it should all be okay, but I'm not sure whether someone reported this or had similar problems.

This happened to me a few months ago. Not fun, but it's unrelated to speech center. The bug has been fixed, so be sure to update AGS. Also, remember that backups are your friend!

.M.M.

Quote from: Crimson Wizard on Mon 12/09/2022 20:36:14There have been a bug in 3.6.0 which caused this, please make sure you're using the latest update of 3.6.0.

Quote from: Dave Gilbert on Thu 22/09/2022 19:36:12This happened to me a few months ago. Not fun, but it's unrelated to speech center. The bug has been fixed, so be sure to update AGS. Also, remember that backups are your friend!

Thank you for clarifying and sorry for sounding a bit... dramatic.  :)
I've found a backup with literally just a few lines missing, so it caused no harm in the end, but I'll remember to check for updates regularly while using beta builds next time. :)

And thank you, SpeechCenter, for this great tool!

HanaIndiana

Hands down my favorite AGS plugin! Thanks for continuing to update.

kobold_wyx

Hello!  I'm trying to check this plugin out, but I'm having troubles understanding how to get it to work on Windows 11 with .NET 4.8.1.

Apparently it's making some kind of external script call, which sounds risky, but it's obviously ok given other folks who use it - so I went and tried to solve the problem of getting it to work.

First, I was getting some kind of error related to loading the script - a CAS policy exception.  I was able to resolve this by opening up AGSEditor.exe.config and changing it to the following:

Code: ags
<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<runtime><NetFx40_LegacySecurityPolicy enabled="true"/></runtime>
<startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>

However, I'm still getting another error unfortunately about a security rule violation of some kind, so I figured I should probably stop here and ask what the heck is going on.

The error says:

QuoteThere was an error loading plugin 'ags.plugin.speechcenter.dll',

System.TypeLoadException: Inheritance security rules violated by type: 'AGS.Plugin.SpeechCenter.SpeechCenterPlugin',
Derived types must either match the security accessibility of the base type or be less accessible.
  at
System.Reflection.RuntimeAssembly.GetExportedTypes(...)
  at System.Reflection.RuntimeAssembly.GetExpor

OK I got too lazy to type it all up and decided to link to an image from my site:




Any ideas what's going on here?  Why's it trying to load remotely stored scripts, anyway?

eri0o

#191
Right click in the plugin dll you downloaded and check if there is a checkbox to unblock it.

My guess despite the different message is you are having Windows Zone Identifier problems (the link is to the manual page about it)

SMF spam blocked by CleanTalk