Adding voice acting

While from the outside they seem similar, the internal architecture is very different. One of the reasons I wanted to rewrite the TWP engine was it’s a complete mess. Talking was put in towards the end and it was a kludge.

7 Likes

There you have, @RonGilbert:

function _startSayline(actor, text) {
local text_scale = 3.0
local image = createTextImage(SAYLINE_FONT, TR(text), ALIGN_CENTER|(SCREEN_WIDTH*(0.80/text_scale)))
imageAt(image, point(SCREEN_CENTER_X, SCREEN_HEIGHT*0.90))
imageScale(image, text_scale)
imageColor(image, actor.talkColor())
imageTextOutline(image, COLOR_BLACK)
actor._sayline_image <- image
if (SETTING(jibber)) {
	actor._jibber_sid <- playSound(actor?.jibber_sid)
}

local id = strslice(text, 0, 4)
local event = "event:/talkies/es/"+id
//local event = "event:/talkies/"+currentLanguage()+"/"+id
print("Playing event: " + event)

actor.talkie_sid <- playSound(event)
print("TalkieID: " + actor.talkie_sid)

if( actor?.talkie_sid ) {
	startthread( @{
		print( "Waiting talkie" )
		
		breakwhilesound( actor.talkie_sid )
		sayLine( actor, null )
		
		print( "Talkie done" )
	} );
	
} else {
	startthread( @{
		print( "Waiting seconds" )

		breaktime( 5.0 )
		sayLine( actor, null )
		
		print( "Done" )
	} );
	
}

return image

}

Thanks a lot for spending time helping me!

Eh … we thought to record all Thimbleweed Park voices in Italian in “several months”. We were too much optimistic, almost 3 years have passed (but now we are near the end).
It’s not as quick as one can think.

3 Likes

I know things usually take much more time then I expected. Yesterday I added another new feature to a game (Bubble Bobble clone) that we started making in 1996. =)

On the other hand, I usually start programing a new project by opening an older project of mine and removing useless features and I still believe it saves time. (Even though I end up rewriting half of it and then copying rewritten parts of code from the project B back to the project A. =)

7 Likes

1996! DOS or Win’95?

We started with DOS, then we moved to DirectX 6 in 1999 and the game was published in 2000. However I keep maintaining it and reworking it. It still does not include all the features that we had planned for the initial release… =}

1 Like

Well, we did record in “months”. If you remove the time spent looking for volunteers, pinging them whenever they disappeared and so on, the recording itself didn’t take much :stuck_out_tongue:

I think now, knowing how it goes, we could do Delores in a short time… if it weren’t that Delores isn’t one of us! :sob: if only it were a Ransome game…

2 Likes

Please guys, don’t pollute the thread. Don’t mean to be rude. I just want to not lose the point of the thread and make it easy for Ron to help.

3 Likes

You are right, unfortunately we often go off-topic.
Thanks for your remind!

4 Likes

Hi @RonGilbert! We are going to start recording the voice to see how it goes, and I have one question: is there any way to know the character who says each sentence?

If there is no easy way right now, I’m going to do something quick and dirty to parse the dinky and yack files.

Thanks!

1 Like

I already did that in my translation sheet:

(However, I think Ron should consider including it in Translation files in future.)

EDIT: Some lines probably still need adding proper person (coroner?). I used it mainly to choose the right gender so I did not have to be 100%.

Awesome! Thank you, @Vit_Condak!

1 Like

There is no way in Delores to know that. In TWP, that information was in the translation files and also used to generate the scripts. Since Delores was never meant to be recorded, I just skipped that step.

1 Like

That’s what I thought. What I’m doing is parsing the script files and when I find a “sayLine” without the character specified as the first parameter, I assume it will be a Delores’ sentence. Is that right?

For this game, that is a good assumption. It was trickier in TWP because a line could be said by 4 different people and had to be recorded 4 times.

1 Like

Hi!

We (my wife and I) have been on holidays and we recorded all the voices and implemented them in the game!

@RonGilbert, I would love to know if you would like to include them in the official release. The only problem I found is that I couldn’t manage to make work the “breakwhilesound” function, but I made a workaround.

How can I send you all the material?

I have uploaded a 7z file with:

  • All the voices in FLAC format.
  • The Translations_es.tsv file we have used to record. It was created by @Clan328, but we modified a few sentences and typos.
  • The code we are using for the _startSayLine function, in SystemHelpers.dinky. I couldn’t make “breakwhilesound” function to work, so every sentence lasts 10 seconds. To play the game fluently, I use the dot ‘.’ key to skip the sentence when the audio finishes.
  • The code needed to be added to Boot.dinky (following @RonGilbert instructions).

I didn’t upload the Bank file to save space. If someone needs it, just tell me!

You can grab it here: https://drive.google.com/file/d/1DWKfSka51M2QRdCAj_eCqSxcyha6Pixc/view?usp=sharing

I fixed the bug in breakwhilesound() a while ago. Odd it’s still not working for you.

Releasing the voice acting this release isn’t going to be possible since we have our hands full with the other languages and Linux. I’ll try and get you code working and see what is wrong the breakwhilesound(). I assume you using the latest engine?

I don’t! I just downloaded it right now and “breakwhilesound” is working perfectly! Thanks!

It is a pity that you can’t include the voice acting, but I completely understand :slight_smile: Please, let me know when you test it. We would love to know your thoughts about it!

Have you been able to download the file?

Before including voice acting, I need to implement multiple FMOD banks. Once that is done, it should be pretty simple.