As you may know by now, the Persona 5 Adachi Mod (which began development late last year) was slated for a Spring 2018 release. Despite being delayed, it remains our most ambitious project to date. At present the estimated completion is about 80%.
The protag’s character models, voices, and BGM have been completely rehauled using assets from other games (such as Dancing All Night). UI artwork was painstakingly recreated from scratch to match P5′s unique visual style.
One of the features we’re most proud of is dual language audio support. When P5′s localization came out, that was a big deal, so it seemed natural to focus on it very early on.
Joker has about 525 unique voice clips (not counting cutscene grunts)– so matching up equivalent Adachi voice clips and modding them into the game for both languages might sound like a daunting chore.
And you’d be right! Fortunately, we took some shortcuts that automated the task to the fullest extent possible. I find them to be quite interesting, and maybe even useful to those of you working on similar projects.
Step One: Documentation
In order to know what sound clips I’ll be replacing with Adachi equivalents in the first place, I started by transcribing Joker’s lines from these 3 files in P5′s ps3.cpk:
- bp01.awb (battle player 01, joker’s battle clips)
- voice_singleword.awb (short phrases and quips spoken in the overworld)
- system.awb (clips related to saving, levelling up)
I extracted the ADX sound files from each one and listened to them with foobar2000′s vgmstream plugin, while jotting down in a Google Drive Spreadsheet which one was which.
Once I was confident that I had all of Joker’s sound clips matched to a description, I went ahead and did the same thing for Adachi.
After amassing 402 unique voice clips from Persona 4 Arena Ultimax, Persona 4 Golden, and Persona 4 Dancing All Night (and transcribing them one by one), I converted them all to WAV and dumped them in a folder together. Notice how in the spreadsheet I matched them up to their original filenames. This will be key later when automating the process.
Step Two: Matching Them Up
Now that I had two docs to compare, I went ahead and copy/pasted the filename of an Adachi clip that I felt complimented a Joker clip into its own column. After a few hours of work, before I knew it, I had a full column of Adachi filenames in the order of P5′s sound clips.
At this point, even with the tedious part done, there’s still the matter of copying, renaming and converting over 500 WAV files– twice. There was no way I was going to undertake such a massive headache.
Luckily, that’s when I remembered that programming was an option at my disposal.
This simple, quick and dirty c# project was a lifesaver. With this, all I had to do was copy that column of filenames that I matched up in the order of P5′s clips and paste them into a .txt file. The program would then iterate through each filename in the txt file, grab the corresponding WAV from the source folder, and copy and rename it to the destination all while matching the required P5 naming scheme.
At that point, I immediately had a destination folder filled with properly named replacements– and it was as simple as batch converting them back to ADX and rebuilding the AWB. Best part is, this process could be repeated for both languages since the filenames follow exactly the same scheme and order.
The hard part was building an identical JP “source” folder to my ENG one– I had to search for Japanese versions of each game and locate and rip the Adachi clips all over again, since many of them haven’t been uploaded online yet. But once it was done, I could use the same txt file and this new source folder to instantly generate an “undub” for the mod with very little additional effort.
I hope that you all enjoy the mod when it’s ready for release. I can’t wait to share more information on the development, but I’d hate to spoil any surprises– and there will be lots. I promise that the time spent during this delay period will be worthwhile and that you’ll end up with a better resulting experience. We’re still hard at work finding new ways to breathe life into your favorite games. 👌