Wing Commander 1 (KS/WCDX) Loader & Voice Over Mod

Destro

Spaceman
Hey all! I've been working on this for a few weeks now, sifting through the memory of Wing Commander 1 to try and find a way to insert the voice overs from the SegaCD version of the game. It began as an experiment to see if I could even do it and I think I've made some good progress so far and have decided to share it with the community. It's in a very early stages but with all that's going on in the world now and I have some time on my hands I figured I'd put some work on it. I've got the first mission completed, all the funeral scenes and some other bits here and there. The loader menu I made in about 15 minutes just to get something working and will be cleaner in the future.

Wing Commander Loader is built using a custom engine and script language I've been writing for the last few years and it allows me to make changes to the scripts and not require re-compiling. It's far from complete, re-inventing the wheel is difficult but I wanted to learn how to program so that's why I made it.

I built this around the KS version of the game with WCDX in mind so it wont work on the DOS or standard KS versions but once I map all the memory addresses I need, it shouldn't be hard to port to other versions. I hope.

Check out an uncut video of it in action here as I test it out. :p


NOTES FOR THE NERDY :p


Current Features:


One convenient launcher for all the Wing Commander Games. (Currently WC1 + WC2 and their secret missions addon's including the WC1 1.5 missions but will add all games in the future)

Launcher for WC1.5 mod that allows one click access to the mod and no need to replace files in the WC dir. The launcher does this for you.

Voice overs for WC1 using the SegaCD files. WIP

Enter whatever name and callsign you like. The voice will still say HotShot but have your own callsign wont mess up voice overs.


How it works?

The Loader Program peeks at memory addresses in the Wing Commander exe and when a root line is detected. EX: "Talk to SHOTGLASS." or "Hangar deck." It activates a tree and does some string compares. When the correct line is detected it plays the audio file inside the Loader program and not actually in the Wing Commander exe. This is a work around to actually injecting it into the game itself but it works.


Changes to main game:

I had to make some changes to the Briefing.000 file to insure that there were no multiple lines in a dialog section because I couldn't read the strings properly.

EX:
Good job, Maverick.
Congratulations.

TO:
Good job, Maverick. Congratulations.


Also made some spelling changes. EX: Shotglass saysthe same dialog in McAULIFFE MISSION 3 & GATEWAY MISSION 3 but they are spelled slightly different.

Hey there, Maverick. Get you something?
&
Hey there, Maverick. Get you somethin'?.


This saves on multiple dialog trees string compares and IF loops when they are not needed.

Also fixed a few timing bug where the dialog only displays for a moment cutting off dialog. EX in the first mission briefing. "We've got a lot of work to do, people, so let's get to it."


BUGS:

- Sometimes doesn't detect the memory address of WC1 on first launch and voice overs wont work. Closing the game and re-launching it corrects this. No need to relaunch the Loader.

- Debug window cause the start menu to overlay when game launches into full-screen. Alt+Tab to windowed and back to full-screen corrects this. Shouldn't be an issue with a release build without debug window.

- Missing audio files for "Atten-SHUN!" & "Prepare arms" in funeral scenes so I repeat "Company!" until I locate them. Also "Fire!" only happens once so I need to edit the WAV file to make it play 3 times.

- Had to run windows batch files instead of running exe's directly. This caused the copy protection for Wing Commander to kick in and complain about the CD not being in the drive. :(


Conclusion:

I'll stop boring everyone now. Let me know what you think, feedback is helpful and hopefully sometime in the future I'll make a release build. :p Cheers!
 

FekLeyrTarg

Rear Admiral
Excellent work so far. Very promising.
I think an option to turn off the speech pack for WC2 would be neat as well, in case someone wants or even needs to have the original subtitles. :)
 

Pedro

Admiral
This is the greatest thing I’ve seen all year. It’s been years since I did a WC1 replay, this would make it really tempting.
 

EmuMusicFan

Chief Petty Officer
Great achievement! 👍

Excuse me, may I ask a question? Is it possible to display translated script lines in real time with this technical framework? Thanks so much!
 
Last edited:

Destro

Spaceman
Great achievement! 👍

Excuse me, may I ask a question? Is it possible to display translated script lines in real time with this technical framework? Thanks so much!
Thanks EmuMusicFan. Yes I have the ability to display the script lines I'm reading from the game through the Loaders debug output window in real time. You can see this for a moment at the very end of the video. I might make a few random videos about how it works and how it's done just for fun and for anyone who is interested so stay tuned. :D
 

Destro

Spaceman
Are you thinking of creating different translations? Or do I miss the point.
Oh no I just miss-undersood the previous question. I'm not planning to create language translations for the game. Just playing the segaCD audio when the text I extracted from the memory matches.
 

EmuMusicFan

Chief Petty Officer
Oh no I just miss-undersood the previous question. I'm not planning to create language translations for the game. Just playing the segaCD audio when the text I extracted from the memory matches.
Oh, sorry, I mean, since script lines can be read from memory in real time, is it technically possible to implement a function that reads translated lines from an external translation file and displays them with the loader? Like this:

Text Matched ───> Play corresponding segaCD audio (Great achievement! Thanks so much! )

└──> Load a corresponding translated script string from an external file and display it. (Is it technically possible? )

Sorry, I know that asking this question is a bit off-topic, and I have no idea how difficult it is to overlay texts on the game display, just to explore the possibilities technically. If this is technically possible, then maybe other fans will try to translate the scripts in the future.
 
Last edited:

Destro

Spaceman
Oh, sorry, I mean, since script lines can be read from memory in real time, is it technically possible to implement a function that reads translated lines from an external translation file and displays them with the loader? Like this:

Text Matched ───> Play corresponding segaCD audio (Great achievement! Thanks so much! )

└──> Load a corresponding translated script string from an external file and display it. (Is it technically possible? )

Sorry, I know that asking this question is a bit off-topic, and I have no idea how difficult it is to overlay texts on the game display, just to explore the possibilities technically. If this is technically possible, then maybe other fans will try to translate the scripts in the future.
Ok I see. Then the answer is yes. It is technically possible to inject translations in real time from the Loader to the game. I haven't tested this but it should be possible in the same way that a game trainer would change the value of how much bullets you have left to give you unlimited ammo. Just instead of a number its a string.
 
Top