Oblivion
0 of 0

File information

Last updated

Original upload

Created by

llde

Uploaded by

llde

Virus scan

Safe to use

Tags for this mod

About this mod

An OBSE plugin overhauling the system the game use the load voice files for dialogues, allowing to use the EditorID of a race instead of it's Name. This also resolve issue of choexisting of voiced mods in different languages, that would otherwise result in silent dialogues.

Requirements
Permissions and credits
Mirrors
Changelogs
Let People Speak - Voice Management Overhaul System is an OBSE plugin that revamp and solve various issues with the original system the game use  for loading Voice Files and the associated Lip Syncing

This Plugin implement 4 different features:

  • It allows dialogues to use of the EditorID of a Race instead of it's name for their voices and lip sync.
  • It search for an available file corresponding to the playing dialogue using all the race names that appeared in the mod list in
    reverse order
  • It search for the voice associated to the dialogue using information of the Race Voice Override records in the definitions in the entire
    mod list
  • If it can't find a file, it use an empty 8 second silence sound with lip syncs

The functionality of the plugins is entirely dynamic. The information required are obtained at runtime at the game startup, so
the data are fresh and react to Load Order changes, mod additions,  updates and removal. No information are written into the save game.
As an additional bonus it forcefully and unconditionally disable bBackgroundLoadLipFiles option. It's bugged and can cause
greetings and hellos to not play, especially when redirected.
 And When using MessageLogger and REID it allow MessageLogger to get the editor ids of objects

Requirements:
  • xOBSE 22.0 or above. Preferred Version 22.9 or above.
  • If using MessageLogger but not RuntimeEditorID   check that bHookAllEditorID  is equals to  1  in MessageLogger.ini

Installation:

Extract the file inside Oblivion\Data. If asked to merge folders, press Yes.

Load the game with OBSE

Uninstallation:
Delete \Data\OBSE\Plugin\VoiceManagementOverhaul.dll, \Data\Sound\Voice\LetPeopleRead.mp3 and \Data\Sound\Voice\LetPeopleRead.lip


Incompatibilities:

PonyRider0 VoiceFile Redirector, Elys Universal Silent Voice are not incompatible per-se as they hook on a different code path, but it's useless to keep them installed as they would never be triggered.


First of all Why?
One of the main efforts on modding Oblivion involve localized versions of the game. As many of you already know, one of the main pain point of installing mods that either touch the Race definitions inside the ESP or add new dialogues. As the Dialogue voices and lip sync information are generated using the Race name if you use this kind of mods and they are in a different language then the base game you can have 2 results: Either the game original dialogues stop working, or the dialogue added by the mod don't have any voice. This is a problem also because dialogues without voices are quite fast, and HELLOs (the interaction between the player and npc outside the proper dialogues, and interaction between npcs too) often don't play.

Solution to this problem was either hand editing mods (or they dialogue's voices) to better fit the overall installation system, or use Elys's Universal Silent Voices or TES4Gecko Silent file Generator to at least have a playable game with dialogues that can be read properly.

Some years ago Ponyrider0 improved a bit the situation with his VoiceFile redirector. In addition to Universal Silent Voice feature, it provided a generic redirect to "Imperial" (name of the Imperial race in English) and direct redirect to appease mods like Diverse Voices, that sever the link between a Race and the Races they are selected to use in it's definitions, basically restoring this link in code.

The grave problem of VoiceFile Redirector however is that it's static. Most features works only with an English game, and can't do much in case of multiple mods in a localized game.

So I decided that it was time to end this problem.

How This Works?

The mod consist of 2 components:
The First component operate at the start. When the game is loading the game files (the ESMs and ESPs files)
the plugin intercept the loading procedures and create a map to associate a single race with the names it appears at the mod list. The when processing the Voice Race Override record (a feature of the ESP files that allow to use another race voices for it) it build a similar map.

The Second component instead kick when the game generate a path for a voice file for a dialogue. It intercept the path and make different tries to find an available file using the builtin substitutions.
For every dialogue it checks which race overrides the associated actor race has. Generally it start with trying using the race itself, but it the Empty Voice Override case never  happens for this record in the mod list it isn't attempted at all.  For every race it's going to substitute it's editor id and try it. Then it's going to try for every name associated with that race.
If the voice file isn't found check for the next iteration of the race override until it's end.
If no suitable voice file isn't found it select an empty 8 second sound file and associated lip sync.

A dialogue voice wasn't overridden properly, What can I do?

The plugin build an order based on the load order. If you have a mod that replace the dialogue voice with another, changing the race name, and then a second mod that replace the dialogue again but restore the original race name. The result would be the audio played would be the one from the second mod, as mods repeating race names are treated like the record is an ITM and so only the first occurrence of a name is used to determine it's override order. In practice I think editing voices by another mod is a quite rare occurrence and wouldn't need a specific handling, however if requested I could make an option to use the last occurrence of a name instead of the first to determine it's load order.
In case remember that Editor Ids have the biggest priority so they will always override other voices. And that in case a change of the load order, or modifying the bashed patch or creating a specific merge patch, would solve the issue.
A similar issue could be present also in the case of Voice race overrides. The solution of changing load order or crafting an own patch apply here too.
The mod log the override orders it's using inside VoiceManagementOverhaul.log



The  mod is causing the game to crash:

Please report to me either here, on Github  or Discord, attaching the VoiceManagementOverhaul.log and the  CobbCrashLogger.log from  Crash Logger


The  mod doesn't work:

Please report to me either here, on Github  or Discord, attaching the obse.log and the VoiceManagementOverhaul.log specifying clearly the issue you are experiencing

I want to remove an audio from a mod:

This is different on how you do if using only the base game or Elys Universal Silent Voice. In these case just removing the audio would work. 
With Let People Speak - Voice Management Override  you need operate differently depending on the case:
1) Mod override audio from another mod/base game.  Want to keep only the old audio:
Here you can just removing the audio provided by the mod.
2) I don't want an audio to play at all:
Mostly done in case of audio added by a mod for itself, you need to check either that all the occurrence of the dialogue possible depending on the override list are removed or replacing the audio you don't want with a specific silent voice.

Changelog:
v 1.1.2: Hotfix Release
  • Fix validation issue in the silent voice file case, where if the file is outside Data\Sound\Voice the play is cut short. Wasn't a problem with USV o VoiceFile Redirector if  bBackgroundLoadLipFiles was 0
  • Fix logging issue when using REID


v 1.1.1: Hotfix Release
  • Fix a crash issue introduced in 1.1 for an invalid vector::back method call with empty vectors (doesn't crash on wine)
  • Fix a mishandling of c++ string in print map (apparently it happens only with debug builds)
  • Fix some name overrides not being properly registered

v 1.1:
  • Handle races whose names are changed at runtime (support for My Voice Extender)
  • Handle races whose voice override infos are changed at runtime

v 1.0:
  • Initial Version
Future Plans:

Extend the CS to properly handle EditorID paths for voices
Add possibility of custom redirectors, either by configuration or script commands

Permissions:

Permissions are granted in compliance of a FOSS licence, with the following exceptions:
Can't use assets from this mod in Paid Mods  (Donations, Patreon (only for early access), Nexus donation points, or similar are allowed).
Custom versions must have the source code public and be shared with similar licence.

Contributions:

Contributions are made from Github  in the way of Pull Requests. Fork, commit, push and open a request. I will review and think about your contribution.

Contacts:

I can be contacted on Discord. You can find me on the xOBSE server  or on other Oblivion Related Servers (Oblivion Modding Community, Oblivion Community Server, Dispensation OCGM, Morroblivion Discord )

Thanks

OBSE Teams (ianpatt, behippo, scruggsywuggsy the ferret, and shadeMe) for OBSE
Microsoft for Visual Studio 2019
Alexandre Julliard and the Wine Team for Wine
joão antónio, Mixxa77 and Ърчне (ir4ne/ir4n) for name suggestions (result is a mixup of their suggestions)

idgafaboutnames for help with My Voice Extender compatibility
Vrugdush for reporting the issue with the silent file reproduction