Has a FFVII Voice-Over Project ever been attempted?

  • Thread starter Thread starter ff7heart
  • Start date Start date
Status
Not open for further replies.
This is a fun idea, but I fear the chances of finding voice talent that will improve the FF7 experience is going to be very difficult.
My suggestion is to recruit the voice over actors but only add voices to the more critical/important scenes.

There is a ton of dialog, which means a lot of people's free time and makes it more difficult to focus on quality and consistency with each scene.  Either way good luck to everyone who gets involved.
 
Hi all

I remember seeing a snes game, that got Voice-Over mod that was a RPG
I would be willing to do some Voice-Over's

the in-game movies can be done right now

But before we all start saying, i want this part or that part.
That we try and get a Voice in-game

If it truly can be done

You would need
Some people to get the game to take the Voice's
Some girls to Voice-Over
Some deep Voice people
 
I think that deep Voice's are good for Cid and Barret
I feel that Sephiroth would sound mad when speaking normally then sound crazy later on
some-thing like Jack Nicholson in the The Shining or batman as the joker
Don't forget Cait Sith's Accent... I still think that was the wrong choice for Square to make...

Guys, the people in the Programming Forums brought up a good point. We would need to decide on the Cast BEFORE the Programming were to take place. To do that, we would need to Audition, choose our Voice-Over Actors, and present them to the Forums. Once we have a solid idea of who our Voice-Over Actors would be, it would be a LOT easier for a Programmer to say, "Alright, I'll be a part of this." With everything up in the air like this, it would be next to impossible for a Programmer to commit himself/herself to a huge project.

There are a lot of Programmers on these Forums who are just waiting to become involved with something like this, so it can happen if the willingness to proceed is strong enough from both sides.

Therefore, I'm throwing out a Casting Call to the Qhimm Community. This is to find Talents who are able to *voluntarily* commit themselves to voice-over a character role. Once we KNOW we have the Talents, I'm nearly certain a Programmer would step forward to implement this idea into the Game. I will make a new thread in regards to this, and post the instructions in there.
 
Last edited:
So you guys are SURE you can make this work?
I have a lot of knowledge in the area of Voice-Over work. Enough of it that I have no problems with being the Voice-Over Director for this project, presuming nobody else objects. Programmers on the Qhimm Forums need to see commitment, and if we can find a talented bunch of Voice-Overs, that will be a good start. People are welcome to submit their Audition via E-mail between 11:59 tonight, up until mid-June -- Though I URGE anybody Auditioning to connect to the Ventrilo Server on June 7th / June 8th. This will play a large, deciding factor on whether or not we have the commitment to proceed. So refer your Facebook Friends, MySpace Friends, MSN Friends, Real Life Friends, Family, Relatives, Etc. Anyone you feel would have the voice that actually fits a Character in FF7.

Information in regards to this may be found in the Casting Call thread.
 
Thanks for the feedback Ficedula.

I've been trying to understand how the game dialog works to see if my theory was correct on how to go at it (which is proving kind of hard since I have no programming skills ... at all) and reading Gears, I see you contributed some info to the Dialog and Event Field Format.  Would you have any suggestion as to how this could be handled ?
I have one or two ideas about how it could work. I expect there's probably a number of approaches you could take to hook into the game and intercept the text display, but really technical investigation would be required to see how plausible any possible approach would be. The two that come to mind immediately are modifying the field files to try and play the sounds in-game, or writing an external utility (like FF7Music) that hooked events but did all the sound processing in a separate application. My personal feeling is that the second would be easier.

I'm willing to take a look at how possible something like this would be, but first I'll have to get FF7 working on my current computer!

I hope Ficedula gets involved as a Voice Over :)
I'd be happy to contribute my smoooooth British accent if the project got off the ground, but I don't know I'd be suitable for a main character. If nothing else, the time involved in recording a large amount of dialogue is probably more than I could commit to at the moment.
 
The first option would work better if implemented :P MP3 probably won't get a good compression ratio when put into LGP files, so it might as well be put into a custom container. New modified version of window opcode could be implemented, that would take an extra argument of the MP3 to be played - that would require modifying the flevel files, but once it's done you don't have to peek any process for changes + you'd get a better responsivness.
 
First off, I'd like to say thanks to everybody who's taken the time to consider this so far.  It's really great to see people showing interest in this just like I am , especially since two people I would describe as a master of the add-on while the other as the master of fixed/adding to the existing engine from within are among the group.

Also, I've been a member of this board for a few years now and I've mostly taken from this community.  I'd like to give back a little so I'd like to offer you guys my help on the technical side but as I've stated before I'm starting from scratch so I don't know how much help I'm going to be.

As Ficedula mentioned, I do believe the first step would be to probe on how the game truly handles dialog events.  Something in my grasp right now is to do research so I'll do a research tonight and post the results of my findings on what is currently known on dialog events for quick reference and to further my understanding.

edit : summarized what I was saying.
 
Last edited:
Thanks for the feedback Ficedula.

I've been trying to understand how the game dialog works to see if my theory was correct on how to go at it (which is proving kind of hard since I have no programming skills ... at all) and reading Gears, I see you contributed some info to the Dialog and Event Field Format.  Would you have any suggestion as to how this could be handled ?
I have one or two ideas about how it could work. I expect there's probably a number of approaches you could take to hook into the game and intercept the text display, but really technical investigation would be required to see how plausible any possible approach would be. The two that come to mind immediately are modifying the field files to try and play the sounds in-game, or writing an external utility (like FF7Music) that hooked events but did all the sound processing in a separate application. My personal feeling is that the second would be easier.

I'm willing to take a look at how possible something like this would be, but first I'll have to get FF7 working on my current computer!

I hope Ficedula gets involved as a Voice Over :)
I'd be happy to contribute my smoooooth British accent if the project got off the ground, but I don't know I'd be suitable for a main character. If nothing else, the time involved in recording a large amount of dialogue is probably more than I could commit to at the moment.
Just to clear this up, I realize it's hard to fit a british accent into the Game, but Reeve would be a good choice for a british accent. If you want to voice one of the main characters, you would have to learn more of a north american dialect :P
 
Quick progress report on my end for people interested.

I've done a search in technical and in q-gears on every post containing "dialog".  I've also read the relevant parts of the wiki.  This obviously was massive amounts of info (not all of it relevant for this project) and I need time to let all this set in and I also would like to look at a field file inside flevel.lgp

I can however say right now that I was wrong in that the 0x41 MPARA and 0x42 MPAR2 opcodes are for showing dialog.  The correct one seems to be 0x40 MESSAGE.
 
I'll wrap up a quick example of how it could be done by modifying ff7.exe (placing hooks actully). Now I see that there is no need to invent a new opcode or to modify flevel.lgp.
 
Yep, a hook is the way to go; not too difficult to implement. Proof of concept;

http://www.sylphds.net/ev2/img/dialogue1.png

Would need more work to implement sound playback on demand, etc, but at least we know it's fairly trivial to intercept the text as it gets displayed on the screen.

(Ignore the corrupted graphics, getting it working on my Mac is still a bit of a work in progress!)
 
Last edited:
And that quick example I was talking about:
Link

Instructions:
 - Place a "sample.wav" file into FF7 folder
 - Run FF7 (1.02 patch, English version)
 - Run "DLLLoad.exe" from the Bin folder

From this point, whenever you talk to someone, a sample file will be played, and the info about the dialog will be put into debug.txt file in FF7 directory. If there is no sample file, the default Windows sound will be used. If you can't hear anything, make sure that the sound is not muted in FF7 (FF7Music users).
The DLL creates the hooks, and has 2 functions called when the dialog is starting to get displayed, and when it disappears from the screen. Functions are feeded with the ID of current location, and the Dialog ID (in the flevel.lgp files). If the dialog contains multiple screens, it's treated as one, but that could be fixed by (for example) counting the "New screen" tags (then the function would get the third parameter, no# of the screen in the dialog).

Oh, and the source is included only for the DLL, as the Loader isn't actually needed (you can use any dll loader).
 
Great job guys!

Didn't think we'd see results so quickly.

I however had a few questions.

First one, Dziugo, I tried to run your tool to see if I could gather more info about how the game handles dialog but when I start dllloader, i get a side-by-side error.  Obviously I know this isn't even alpha yet and this is to be expected but I figured you'd like to know.  I use Vista and it was in the right directories.

Second one, Ficedula, I tried to take a look in Cosmo to some of the flevel.lgp files but Cosmo oddly opens outside my screen ?  I can bring up the options with alt but can't see the actually main folder.

Third one, I was hoping to have a theory to suggest here but since I couldn't take a look at the files as I would have liked I don't really have much to say.  How would you guys think we could identify which dialog line is being called (basically ID it).  I mean, we can show the text right now, but can we uniquely identify which text is shown so we can associate that identifier with a file to play it ?  My guess from what I know would be that we'd need to identify the right field file in use but apart from that how could we tell which dialog is being called up by the game ?
 
Bah, the old Cosmo off screen bug...easiest solution is to run Cosmo then hit Alt-Space to bring up the system menu (don't worry if you can't see it), and hit 'M' for 'move', then use arrow keys & mouse to bring it back on screen.

Third one, I was hoping to have a theory to suggest here but since I couldn't take a look at the files as I would have liked I don't really have much to say.  How would you guys think we could identify which dialog line is being called (basically ID it).  I mean, we can show the text right now, but can we uniquely identify which text is shown so we can associate that identifier with a file to play it ?  My guess from what I know would be that we'd need to identify the right field file in use but apart from that how could we tell which dialog is being called up by the game ?
Two possibilities.

Firstly, identify the dialogue by ID - as dzuigo's app does. So every time a dialogue is displayed the tool knows, 'this is file NVL_W, dialogue #4". You'd then have used some sort of a field file viewer to go through and see what dialogue it contained, and recorded a file (e.g. NVL_W_04.wav) with the dialogue for whatever dialogue #4 said.

Secondly, identify the dialogue by text - more like my test app. So when the dialogue is displayed the tool knows, 'Cloud is saying "The black-caped man?"'. It then looks to see if you've recorded a file linked to that text and if so plays it. (It could also take into account the location you were in, of course.) You'd probably strip out a certain amount of formatting/punctuation to make matching it up easier.

The first approach is arguably more 'correct', but there are advantages and disadvantages to both approaches;
-If the text changes the first method will still play the audio, the second won't (say somebody has edited the field files). It's hard to say which is better! If all that's happened is that somebody has corrected a spelling error in the field file, you probably still want the audio to play. On the other hand, if somebody has changed the text totally you probably don't want the original audio to play! The second method would let you play a different file (if you knew what the new dialogue was), so you could in theory distribute a single voice pack that still worked (and actually played something different) when certain patches to the dialogue were installed.

-In a similar way, the first method would still work if you were running a foreign version of the game (provided the dialogue IDs matched up). Of course, would you want English dialogue on a French language game?

(That raises another issue; I know in the UK release they at least renamed 'Aerith' to 'Aeris' [thank goodness]; does anyone know if they actually changed any other dialogue? I'd assume not, but clearly it wasn't just a direct unaltered release...)

-The second method has the possibility that standard lines of text, or any lines of text said in more than one place, could be recorded just once and the tool could 'automatically' reuse them between different field locations.
The disadvantage of that would be you might not want it to do that...
 
The versions of FF7 I've played here in North America are pronouncing her name as Aeris as well.
 
First one, Dziugo, I tried to run your tool to see if I could gather more info about how the game handles dialog but when I start dllloader, i get a side-by-side error.  Obviously I know this isn't even alpha yet and this is to be expected but I figured you'd like to know.  I use Vista and it was in the right directories.
Need more info. What's the version of your ff7.exe? If any crash occured, the error report with addresses would be useful (if you don't want to crash FF7 again, go to "Control Panel -> Administrative Tools -> Event Viewer -> Window Logs -> Apps".
 
Dziugo : I had a bit more time to look into this and the issue was that I didn't have the Visual C++ files on my computer.  Downloading and installing the 2008 vcredist_x86.exe from Microsoft's website fixed the issue.  Quick test worked.  I'm going to try it out for a bit and report back.

edit : Tried it out some more.  The way your software works, I can definitely see this project working out technically.  Brilliant.

However, the application doesn't seem to handle questions well.  Tried the two questions on the highwind (operations room and take control of the helm) and they both send the game into an infinite loop.  Here's the start of my debug file showing a loop :

MapID = 74    DialogID = 18   Just started playing.
 MapID = 74    DialogID = 18   Has been stopped.
 MapID = 70    DialogID = 102   Just started playing.
 MapID = 70    DialogID = 102   Has been stopped.
 MapID = 70    DialogID = 114   Just started playing.
 MapID = 70    DialogID = 114   Has been stopped.
 MapID = 70    DialogID = 112   Just started playing.
 MapID = 70    DialogID = 112   Has been stopped.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing.
 MapID = 70    DialogID = 1   Just started playing
...

It keeps on going this way until I close the game.  The actual text in game never shows up and the sound plays each second though!

Looking at the source of your program (installed VC++ Express 2008 out of curiosity to try and understand what you did), I'd wager it'd be related somehow to the program interpreting the part where ff7 waits for input as a end dialog and the program trying to reinitialize again since the dialog never came up in the first place.  Only a theory from somebody who doesn't know much about these things and who's trying to understand.

To avoid that whole problem completely, would it be possible to exclude the ASK opcode messages from being picked up ?  I don't remember a spot in the game where a question would be important enough to need to be voiced.

Ficedula : Wouldn't the text match way create a lot of overhead if the program has to look into a big heavy text file to match the clip before sending the sound out ?  Wouldn't the ID way be more responsive ?

Ficedula & Dziugo : I've noticed, ff7music picks up the log Dziugo's hook creates in its main window (where all the texture stuff and mid info is written).  With this in mind, would it be easier to use ff7music built in "sorter" and output engines in conjunction with Dziugo's hook or would it be easier to make one from scratch using Dziugo's program as a base ?

Here's a short copy & paste of that window (removed some redundant lines) :

TEXTURE LOADED INTO VIDEO MEMORY

MIDI play: 47

reading midi file: HIKU.mid

HIKU.mid

Midi file matched! HIKU
CSA6
CSR7
File counterpart 4-03 Airships Make Me Happy - The Highwind Takes to the Skies Remix.mp3
Resolved to F:\Documents\Music\ff7\4-03 Airships Make Me Happy - The Highwind Takes to the Skies Remix.mp3
Playing music
CSA6
CSR7
CSA8
Look for plugin for mp3
Init plugins
Setup input plugin: Nullsoft MPEG Audio Decoder 2.96+AAC
Setup output plugin: waveOut output v2.0.2a
Init finished
---------------------------
Prevented from resuming
CSR9
current volume: 127

MIDI is playing SUCCESSFULLY!!!

TEXTURE LOADED INTO VIDEO MEMORY

TEXTURE LOADED INTO VIDEO MEMORY

MIDI play: 47

song is already playing...

TEXTURE LOADED INTO VIDEO MEMORY

TEXTURE LOADED INTO VIDEO MEMORY

MapID = 74    DialogID = 18   Just started playing.

TEXTURE LOADED INTO VIDEO MEMORY

TEXTURE LOADED INTO VIDEO MEMORY

MapID = 74    DialogID = 18   Has been stopped.

TEXTURE LOADED INTO VIDEO MEMORY

TEXTURE LOADED INTO VIDEO MEMORY

MIDI play: 47

song is already playing...

TEXTURE LOADED INTO VIDEO MEMORY

TEXTURE LOADED INTO VIDEO MEMORY

MapID = 70    DialogID = 102   Just started playing.

MapID = 70    DialogID = 102   Has been stopped.

TEXTURE LOADED INTO VIDEO MEMORY

MapID = 70    DialogID = 114   Just started playing.

MapID = 70    DialogID = 114   Has been stopped.

MapID = 70    DialogID = 112   Just started playing.

MapID = 70    DialogID = 112   Has been stopped.

TEXTURE LOADED INTO VIDEO MEMORY

TEXTURE LOADED INTO VIDEO MEMORY

MapID = 70    DialogID = 1   Just started playing.

MapID = 70    DialogID = 1   Just started playing.

MapID = 70    DialogID = 1   Just started playing.

... (loop 'til alt-f4 as explained previously).

I do feel I should point out I tried the hook with and without ff7music and the loop still starts in either case so it would seem unrelated.
 
Last edited:
To avoid that whole problem completely, would it be possible to exclude the ASK opcode messages from being picked up ?  I don't remember a spot in the game where a question would be important enough to need to be voiced.
I was thinking the same thing, but was dumb enough not to check explicitly if we're dealing with MESSAGE opcode. Now I'm curious to why it gets into that infinite loop :)

Ficedula & Dziugo : I've noticed, ff7music picks up the log Dziugo's hook creates in its main window (where all the texture stuff and mid info is written).  With this in mind, would it be easier to use ff7music built in "sorter" and output engines in conjunction with Dziugo's hook or would it be easier to make one from scratch using Dziugo's program as a base ?
It picks up debug messages because I debug the same way the FF7 does (OutputDebugString). And to answer your question - that could work. And one of it's advantages is that if the app crashes for whatever reason, FF7 would still be running. I, however, was thinking about running completely in the FF7 address space. Worked out a simple format for storing files (hashtables for speeding up the file access), just don't know anything about playing sound (you can see that easily with a "PlaySound" stub in the project :P) and don't want to use external library for playing MP3s. I was looking at some open source MP3 players, but maybe we'll get input from ficedula as he's more experienced coder than I am, and most likely already got his vision on how it could be done.
 
Status
Not open for further replies.
Back
Top