Provide a translation for this mod
So how to translate this mod ?
🆕 2024/01/03: translations for this mod are now provided along audio files in Audioware, so the process described below is quite outdated: please contact me directly if you want to make a translation for Addicted.
Before we start I assume that you:
- have an account on Github
- know how to use both Git and Github
- forked this repo
- created a new branch
e.g. for French
translate/fr-fr - made your changes over there
- opened a pull request once finished (or a draft pull request if it's not but you would like to review it together first).
Onscreens
⚙️ ArchiveXL
The first file to translate is archive/source/raw/addicted/localization/en-us.json.json.
contains all the native texts displayed in UI.
- duplicate it alongside and name it by your locale (available locales can be found there).
- e.g. for French, rename it into:
fr-fr.json.json. - filename contains
.jsontwice when exported from WolvenKit, leave it this way.
- e.g. for French, rename it into:
- translate every
femaleVariantinto your own language:- if your language has gender-based variants, do not omit to translate
maleVarianttoo. - when the sentence is not gender-based, simply specify
femaleVariantand letmaleVariantempty (femaleVariantis the default fallback whenmaleVariantis left unspecified).
- if your language has gender-based variants, do not omit to translate
Then, update archive/source/resources/Addicted.archive.xl to add the file you previously created.
e.g. for French:
localization:
onscreens:
en-us: addicted\localization\en-us.json
fr-fr: addicted\localization\fr-fr.json # add this line
Subtitles
⚙️ Codeware
The second file to translate is located under scripts/Addicted/i18n/English.reds.
contains all the subtitles for voiced dialog lines.
⚠️ you only need to translate the rightmost part of this.Subtitle(...), leaving the leftmost untouched.
Also rename the class by your own language.
e.g. for French:
module Addicted.Localization
import Codeware.Localization.*
public class French extends ModLocalizationPackage {
protected func DefineSubtitles() -> Void {
// snake case suffixes must match entries in info.json (custom sounds)
this.Subtitle("Addicted-Voice-Subtitle-biomon", "Biomon...");
this.Subtitle("Addicted-Voice-Subtitle-as_if_I_didnt_know_already", "Comme si j'étais pas au courant...");
// so on and so forth ...
}
}
Vanilla voices
⚒️ WolvenKit ⚙️ REDmod
In the next steps we're gonna re-export some vanilla voices used.
this mod also reuse vanilla voiced dialog lines.
- open WolvenKit
- locate each
.wemfile found under archive/source/customSounds/vanilla/en-us by its name (minus.Wav) in WolvenKit's Assets browser - export them all with WolvenKit's Export tool (do not forget to set export settings to
Wavfor each file) under subfolder in archive/source/customSounds/vanilla, named after your own language.- e.g. for French in
archive/source/customSounds/vanilla/fr-fr
- e.g. for French in
AI-generated custom voices
⚒️ WolvenKit + ElevenLabs ⚙️ REDmod
In the next steps we're gonna train ElevenLabs with a specific set of vanilla voices, then generate dialog for each of the subtitles previously translated.
💡 I'm aware that you might not be willing to get an account on ElevenLabs so you can also zip me all the files below once exported and let me do it on your behalf.
The custom dialog lines to translate are located under archive/source/customSounds/en-us.
contains all the voiced custom dialog lines.
There's one folder for each of the "mood" that V might be into:
-
disheartened: these samples are used when biomonitor already reported serious addiction symptoms to V multiple times while V is severely addict.V can end up disheartened when biomonitor reports his/her condition repeatedly and (s)he has clearly crossed the line.
-
offhanded: these samples are used when biomonitor already reported serious addiction symptoms to V multiple times while V is only notably addict.V can sometimes acts offhanded when biomonitor reports his/her condition but (s)he doesn't really give a damn.
-
pestered: these samples are used when biomonitor is dismissed by V while in combat.V can obviously be pestered when biomonitor unexpectedly pops up during combat.
-
surprised: these samples are used when biomonitor reports addiction symptoms to V only for a couple of times.V can be surprised when biomonitor starts showing up from time to time.
⚠️ for example, when generating sample for archive/source/customSounds/en-us/surprised/fem_v_coa_03.wav under archive/source/customSounds/en-us/surprised, you should regenerate in ElevenLabs until you get the sentence pronounced as if V was surprised. Not doing so defeats the purpose of adding custom voicing.
-
make sure to have an account on ElevenLabs
-
locate and export each of these
.wemas previously: ℹ️ using same exact samples set increases chances of having more "homogeneous sounding" across different languagesclick to see which ones
v_scene_aaron_mccarlson_default_f_1b6ed94ce5559000v_scene_aaron_mccarlson_default_f_1b77e03246559000v_scene_benedict_mcadams_default_f_1b1b1ce0be2c5000v_scene_claire_default_f_1b0c1373382b6000v_scene_dakota_smith_defaut_f_1ad786e65246b000v_scene_dakota_smith_defaut_f_1b30dc13f92ef000v_scene_dakota_smith_defaut_f_1936caecd649d000v_scene_dakota_smith_defaut_f_1936cf055549d000v_scene_dan_default_f_1b1bed3cac29f000v_scene_delamain_default_f_1b3f1d1f6b386000v_scene_delamain_default_f_182ac718234ea000v_scene_dex_default_f_1b2f30a75929f000v_scene_dex_default_f_182ad40c364ea000v_scene_jackie_default_f_1b2f97e30c2c5004v_scene_jackie_default_f_1b2f687cef2c5000v_scene_jackie_default_f_1b2fa81c242c5000v_scene_jackie_default_f_1b2fa2734c2c5000v_scene_jackie_default_f_1b2fae69a12c5000v_scene_jackie_default_f_1b2fb2c5892c5000v_scene_jackie_default_f_1b2fb6a25c2c5000v_scene_jackie_default_f_1b2fb479f32c5000v_scene_jackie_default_f_1b2fc8db0d2c5000v_scene_jackie_default_f_1b302c10c12c5000v_scene_wakako_okada_default_f_1b68a843092b6000v_scenes_f_1a7c32d2e947a000
-
feed them to ElevenLabs under
VoiceLabclick on+ Add voice⚠️ a premium membership is required (5$/month)- save your cloned voice, for example
Female V
- save your cloned voice, for example
-
create a folder
-
go to
Speech synthesis- select the voice previously created
- set
Voice settingsto:Stability: 35%Clarity + Similarity Enhancement: 90%
- repeat this process for each of the subtitle:
- generate
- compare it with original english version
- if it sounds good and similar in tone, save it e.g. if in the original audio V sounds disheartened, in your own language (s)he should sounds similar too, otherwise it will break player's immersion.
- do not forget to place it under the same folder structure,
- otherwise repeat the generation process.
-
repeat same process for both male and female V
-
update archive/source/resources/info.json to add one entry for each of the original one for English modified as per your locale. e.g. for French
JSON"customSounds": [ // e.g. this points to vanilla sound file { "name": "addicted.fr-fr.fem_v_ono_hhuh", "type": "mod_sfx_2d", "file": "vanilla/fr-fr/v_q113_f_1956c7fde04e1000.Wav", "gain": 1.0, "pitch": 0.0 }, // e.g. while this points to custom AI-generated file { "name": "addicted.fr-fr.fem_v_damn_thats_fucked_up", "type": "mod_sfx_2d", "file": "fr-fr/surprised/fem_v_dtfu.wav", "gain": 1.0, "pitch": 0.0 }, // more definitions ... ]