Skip to content

Voice acting system

Tirlititi edited this page Aug 16, 2022 · 14 revisions

Table of Contents

Voice Acting

In-Field dialogs

This feature allows to play specific sounds when dialog windows show up.

In order to create a voice acting mod, one must do the followings:

  1. Export the dialogs. This can be done with Hades Workshop (batch export texts) or by launching the game with the Memoria.ini option [Export] Enabled=1 Text=1.
  2. For each line of dialog, export the voice acting as an OGG file.
  3. Tidy OGG files in subfolders according to the following scheme: VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/[LANG]/[ZONEID]/VA_[MESSAGEID].ogg,
    where [LANG] is the language code among US, UK, JP, GR, FR, IT, ES,
    where [ZONEID] is the number related to the dialog zone (in HW exported dialogs, it can be read in lines #HW fileid; in Memoria exported dialogs, it can be read as the first number after $ in each dialog),
    and where [MESSAGEID] is the number identifying the message (in HW, it's the line #HW newtext minus 1; in Memoria, it's the last number before the = sign).
    Example (Memoria): "$0290_EVT_TERA_BB_CDR_0_0353" = "{W213H1}{UpperRightForce}You’re a bigger fool than I imagined{Speed 2}...{Speed -1}";
    => Have the voice file VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/US/290/VA_353.ogg saying "You’re a bigger fool than I imagined" (Beatrix).
  4. For dialogs with multiple choices (they have a {Choice} code in Memoria-exported files and a [CHOO] code in the HW versions), have a voice OGG for each choice with a _[CHOICENUM] appended to the dialog's file name.
    Example: VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/US/290/VA_373.ogg => "Cards!? Right now?"
    VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/US/290/VA_373_0.ogg => "Yes"
    VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/US/290/VA_373_1.ogg => "No"
  5. Move this VoiceMod folder in the main directory of Final Fantasy IX and register it in Memoria.ini ([Mod] FolderNames = "VoiceMod", ...).
  6. Create another file Memoria.ini in the folder VoiceMod and add the lines:
[Hacks]
Enabled=1
DisableNameChoice=1

When voice files are played in-game, Memoria generates .akb.bytes files next to them (in the subfolder of the mod folder), containing the Final Fantasy IX formatted AKB header. When sharing the mod, share the mod folder with only the .akb.bytes files for optimizing the hard drive space use and loading time (although I didn't see any noticeable frame drop because of isolated sound loads and conversions).

In-World dialogs

They work exactly the same as above using the special ZONEID = 68.

Example: VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/US/68/VA_52.ogg => "I’m sharpening my knife, kupo."

In-Battle dialogs

Following the same pathing structure as above except that battles do not operate within a zone so we replace the zone with battle/[BATTLEID], i.e.
VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/[LANG]/battle/[BATTLEID]/VA_[MESSAGEINDEX].ogg
The message index is the position of the text in that battle's texts, taking the enemy names and attack names into account.

Example: the first fight against Beatrix has ID 4. That battle's texts are the followings:

  1. Beatrix
  2. Attack
  3. continuing other attack names...
  4. You’re no match for me!
  5. Ignorant fools.
  6. Stock Break
  7. Annihilated...
  8. Back attack!
  9. Gained more Attack Pwr!
Thus: VoiceMod/StreamingAssets/Assets/Resources/Sounds/Voices/US/battle/4/VA_10.ogg => "You’re no match for me!"

Audio Format

for the best compatibility, the software and unity engine are expecting the audio files for voice acting to be OGGs setup with 441000Hz, Single Channel (Mono), and using 32-bit float.

Debugging

If your having problems with a line and are unable to work out the correct location you can enable VA Support Debugging to do this add the following to your memoria.ini

[Audio]
LogVoiceActing = 1

With this enabled your Memoria.log file will start getting entires output all the information you need to create your .ogg file E.G [VoiceActing] field:2, msg:35, text:[C8C8C8]Guess nobody’s here yet..., path:Voices/US/2/va_35 should the File then be missing this will be followed by a Missing Asset notification from the Asset Manager E.G [AssetManager] Asset not found: Voices/US/2/va_35

A big thanks to barkermn01 for coding this system.