Audio modding: Difference between revisions
Line 290: | Line 290: | ||
=== Dialogue Events === | === Dialogue Events === | ||
Below is a full list of all the Dialogue_Events in the game. You can add custom audio for each of these. To find out exactly what each Dialogue_Event is used for refer to [[Audio_modding#Researching_Dialogue_Events|Researching Dialogue_Events]]. | Below is a full list of all the Dialogue_Events in the game along with the State Groups that they use. You can add custom audio for each of these Dialogue_Events. To find out exactly what each Dialogue_Event is used for refer to [[Audio_modding#Researching_Dialogue_Events|Researching Dialogue_Events]]. | ||
==== Battle VO ==== | ==== Battle VO ==== |
Revision as of 04:33, 13 February 2024
After a long time, audio modding is now possible. This is entirely down to the years of research and work developing the tools by Ole and ChaosRobie.
The Basics
The Total War games use an audio engine called Wwise. It is a very powerful but complex system. In short Wwise produces these things called soundbanks (.bnk files) which store information about how audio is played in the game.
If you want to mod audio it would probably be a good idea to have some understanding of the basics of Wwise. Some of this is covered below, however for a more foundational understanding read the WWiser documentation, and watch the Wwise 101 and 201 YouTube tutorial series.
Types of Audio
One way of categorising audio in WH3 is as VO, non-VO, and music. VO means voiceover. CA refers to this simply as VO. Strictly speaking audio can just be categorised as Events and Dialogue_Events, but breaking it down into those three categories is more relevant to the game.
VO
The VO audio system is controlled with Dialogue_Events. VO audio is typically everything associated with a unit speaking. Whether that's a character on the campaign map, or a unit in battle, it will be VO. An example of a VO Dialogue_Event is campaign_vo_selected.
You can currently mod VO audio by building a Wwise project to do so, or making a request to the Audio Mixer dev team and they will do it for you. More info on VO audio modding can be found here. Eventually VO audio modding will be a simple process handled within the AssetEditor audio tools.
Non-VO
The non-VO audio system is controlled with 'normal' Events. Some examples of non-VO audio are sounds for movies, abilities, magic, UI etc. basically anything non-VO or music. An example of a non-VO audio Event is Play_Movie_warhammer3_prologue_pro_int. Events are set to various things for example, ritual completion in the rituals_tables, in the db tables.
You can currently mod VO audio by building a Wwise project to do so. The non-VO audio modding side of the AssetEditor tools is almost ready for release. When it is you will be able to use it to make Events for non-VO audio using templates provided. More info on non-VO audio modding can be found here.
Music
The music system is again controlled with 'normal' Events. An example of a music Event is Global_Music_Play. It is set to a faction in the cultures_tables.
More info on music audio modding can be found here.
Modding music is possible but is still being researched further.
Wwise Objects
In Wwise there are things called objects. Some common objects we will interact with are Events, Containers, Sounds, Actor Mixers, and States. These are explained below.
Events
Everything starts with an Event. There are two Event types, Event and Dialog_Event. The game will typically refer to Events either in script, anim.meta file, or db tables.
Event
The first Event type is Event. Slightly confusing yes I know.
The process behind a sound playing is as follows.
Some condition in game is met to trigger an event, for example a db entry.
After the Event is triggered there is a chain of object that leads you to the actual audio played.
For example this basic Event will play a random sound from a collection of two:
Karl_Eating_Goblin_Event => Karl_Eating_Goblin_Event_ActionPlay => Random Container => Soundx.wem and soundy.wem.
They follow a basic pattern most of the time e.g. Event => Action => Container (optional) => Sound(s)
Dialogue_Event
The second Event type is a Dialog_Event. It has nothing to do with dialog, its a lookup table that results in container or sound object.
UnitVoiceActor | UnitType | SpottedFacton | Child |
---|---|---|---|
Orc_Female_1 | Ranged | Human | 123 |
Orc_Male_1 | Ranged | DarkElf | 456 |
OrC_Male2 | Melee | Orc | 678 |
When the Dialogue_Event is triggered, the game sets variables which are used to lookup the child node, which typically points to a Container which in turn points to sounds.
So for example taking a look at the campaign_vo_move Dialogue_Event, if you move Karl Franz on the campaign map the game sees that you've just moved the big man. The campaign_vo_move Dialogue_Event is triggered and follows the State path defined for the vo_actor State for Karl Franz and plays the audio for Franz moving on the campaign map.
e.g. wh_main_vo_actor_Empire_KarlFranz.Any => Random Container => Soundx.wem
For more information on all the different Dialogue_Events in the game refer to here.
Containers
One type of Container is a Random Container. They are an organisational and control tool for sound objects. When triggered a Random Container would play one of its sounds, you guessed it, at random!
Sounds
Sound objects are how sound files are represented within WWise. Wwise uses .wav files, and exports them as .wem files.
Actor Mixers
Actor Mixers serve as an organisational and control tool for sound objects. It allows you to break sounds down into 'folders'. Mixers control who owns the sounds - if it's a UI sound, game sound, battle sound and so on. This is important to make the sound play as not all Actor Mixers have their volume set at all times.
States
States are a Wwise object used to path to specific Containers or Sounds based on certain conditions being met in Game. For example, when you move a character on the campaign map there is a State for whether they are moving at sea, in mountains, desert etc. Dialogue_Events and music use states to trigger sounds to play based on certain game conditions. An example of a State used with Dialogue_Events is a vo_actor. You can set a vo_actor for a unit in the main_units table in the Audio Voiceover Actor Group column e.g. wh2_dlc09_vo_actor_Tomb_Kings_Arkhan. This condition in game is then 'activated' when you are using that unit. An example for music is in cultures_tables. Here you can set the State for each Culture's music, for example the State for the Tomb Kings is tomb_kings.
The Tools
The main tools used in audio modding are: Audio Explorer, Audio Project Compiler, Wwise, Bnk Patcher, Dat Builder, File Converters, Dialogue Event Merger, Wwiser.
Some of these tools do the same thing just in different ways so you should read up on them individually.
Audio Explorer
The Audio Explorer is a powerful tool within the AssetEditor for exploring the audio data in the game. It can be accessed within the AssetEditor by going to Tools ==> Audio ==> Audio Explorer.
Audio Project Compiler
This tool is currently being redeveloped. This section of the wiki will be updated once that's done.
The Audio Project Compiler is a tool within the AssetEditor which you can use to build custom audio instead of using Wwise. It has templates for different types of custom sound. Fill in a few details, run the compiler then you're good to go!
Wwise
Wwise is the audio engine that WH3 uses. We can use it to build custom audio into the game. The advantage to using Wwise over the Audio Project Compiler is that it has a vast amount of functionality. The Audio Project Compiler is essentially a very very simple version of Wwise.
It is free for projects containing up to 200 unique sounds. If you need than 200 sounds you can contact Wwise and to request a non-commercial licence which allows unlimited sounds. Audiokinetic have already provided non-commercial licences for several WH3 audio modding projects so should do so again.
Wwise can be downloaded here. For WH3 audio modding you need version 2019.2.15.7667.
The Audio Mixer Wwise project can be downloaded here.
Bnk Patcher
This tool is intended for use by anyone who wishes to use Wwise rather than the AssetEditor Audio Project Compiler to mod audio. There are some advantanges (and disadvantages) to using Wwise over the AssetEditor. The main advantage is that you can use the full set of features that Wwise offers which is vast. The AssetEditor audio tools are a very simple and much more user friendly tool.
CA use a custom version of Wwise for WH3 audio. Different versions of Wwise produce objects in different formats. The closest public release of Wwise to CA's version is 2019.2.15.7667. CA's version of Wwise produces a different header in their soundbanks, and produces some music objects in a different format to Wwise version 2019.2.15.7667. Therefore a patcher is required.
The tool can be downloaded here.
Dat Builder
The Dat Builder tool is intended for use by anyone who wishes to use Wwise rather than the AssetEditor's Audio Project Compiler to mod audio. It is a script to write the dat file necessary for custom non-VO audio.
The tool can be downloaded here.
File Converters
Some tools to convert to and from the common file types used in audio modding. More info on using each can be found in Converting Between File Types.
The tools can be downloaded here.
Dialogue_Event Merger
This is an excellent tool created by ChaosRobie which enables VO. The Audio Mixer mod uses this to merge the new custom VO created within Wwise into the vanilla soundbanks.
The tool can be downloaded here.
Wwiser
Wwiser is a Wwise .bnk parser, to assist in handling audio from games using the Wwise engine. It can be used to view soundbanks and find information about each object in the bnk.
Wwiser can be downloaded here.
Using the Audio Explorer
The Audio Explorer is a powerful tool within the AssetEditor that has many use cases. Some of these are detailed below.
Learning Wwise
The tool allows pretty much all Wwise objects to be explored. This is very useful to learn how you later can use the Audio Project Complier to add new sounds. Under extra you can pick between Events and Dialog_Events.
The left side shows the full graph of the selected event, while the right side shows a detailed view of the Wwise data of the selected node.
Finding Sounds
Using this tool, it's very easy to lean which sound file is linked to what event.
Say you want to make a mod that replaces all of Throggs diplomacy lines. Doing a search in the database will give you all the events used, you can then look that up in the events view.
If one takes the event Play_Nor_Throgg_Dip_Dwf_Greet_Neg_02 which is for when Throgg talks to dwarfs, one can see that this is linked to the sound file 605570708.wem.
For a detailed guide on replacing vanilla audio refer to this section.
Playing Sounds
Once you've found a sound you can then play it!
Click on the sound, then click the Play Sound button.
If it doesn't play make sure you have the Skip loading wem (sound) files setting unticked in your Asset Editor settings.
Researching Dialogue_Events
You can browse for specific Dialogue_Events to see what type of sounds they play in vanilla.
Let's say you want to make your own voice acting for a character of yours. You have looked through the list of all the Dialogue_Events, and you want to look more into what exactly the voice acting for the battle_vo_order_attack Dialogue_Event sounds like in vanilla.
So search the Audio Explorer for a Dialogue_Event e.g. battle_vo_order_attack.
Then browse to a voice actor of your choosing, for example Karl Franz. There you can see what his voice acting for this Dialogue_Event sounds like and make your own for your character in a similar vein.
Understanding Actor Mixers and Audio Busses
All sounds have to be connected to a mixer (which in turn is connected to a bus). Not all busses have their volume set at all times. For example the UI and Battle bus is not both enabled at the same time. Because of this its important that the correct mixer is selected when adding new sounds. When selecting a Sound node on the left side, "Parent structure" is added on the right side. Here you can see the mixers and busses connected to the sound.
VO Audio Modding
VO audio modding is a slightly complicated process and requires you to be familiar with Wwise.Tools are in development to make VO audio modding a much simpler process done within the AssetEditor. Until then, you can either learn how to do this in Wwise or make a request to the Audio Mixer team in the Audio Mixer Requests thread in the Modding Den Discord server.
Dialogue_Events are what the game uses for VO. They are triggered by certain conditions being met in game. So for example, campaign_vo_selected is triggered when you select one of your own characters on the campaign map. Or battle_vo_order_attack is triggered when you tell one of your units to attack another in battle. Or campaign_vo_cs_proximity is for VO that plays when certain characters are within proximity of each other on the campaign map.
When inspecting a Dialogue Event e.g. campaign_vo_movein the Audio explorer you see a bunch of things that look like this: wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.Any. That is a State path. It is the set of conditions in the game required to play the audio.
Each State in the path is separated by a ".". So the first State is wh2_dlc13_vo_actor_Empire_Markus_Wulfhart and the second State is Any.
That means that if the character you are telling to move is using the VO_Actor key wh2_dlc13_vo_actor_Empire_Markus_Wulfhart and it is moving on the campaign map while the 'Any' State is supplied by the game - that is to say while moving either on land or at sea. If those State conditions are met then it will play the audio linked to that State path.
Similarly a State path of wh2_dlc13_vo_actor_Empire_Markus_Wulfhart.sea means that the audio will play if the character is moving on the campaign map while the 'sea' State is supplied by the game - that is to say while moving at sea.
If a character is moving at sea and has a 'sea' State path then that will take priority over an 'Any' State path. Likewise if a character does not have a 'land' State path then their 'Any' State path will play while on land.
State Groups & States
State paths are made up of States. States are part of State Groups. Below is a full list of all the different State Groups and States used in Dialogue_Events. You cannot add new game-defined States but you can add 'modder-defined' States.
Game-Defined States
State Group: Battle_Type State: Monster_Hunt State: Normal State: Quest_Battle State: Survival_Battle State: Any State Group: Generic_Actor_TzArkan_Sanity State: Gone State: High State: Waning State: Any State Group: VO_Battle_Conversation_Clash_Type State: clash State: clash_combat State: pre_clash State: Any State Group: VO_Battle_Order_Air_Unit State: no State: yes State: Any StateGroup: VO_Battle_Order_Artillery_Range State: out_of_range State: within_range State: Any State Group: VO_Battle_Order_Speed State: fast State: normal State: Any State Group: VO_Battle_Order_Urgency State: heightened State: normal State: threatened State: Any State Group: VO_Battle_Unit_Type State: artillery State: cavalry State: default State: guns State: melee State: ranged State: Any State Group: VO_Battle_Vehicle_Ammo_Type State: Artilley_Canister State: Artilley_Explosive State: Any State Group: VO_Campaign_Daiths_Forge State: Ancillary_Not_Received State: Ancillary_Received State: Ancillary_Upgraded State: Any State Group: VO_Campaign_Order_Move_Type State: land State: sea State: Any State Group: VO_Campaign_Special_Ability State: vo_campaign_action_enemy_army State: vo_campaign_action_enemy_character State: vo_campaign_action_enemy_region State: vo_campaign_action_enemy_settlement State: vo_campaign_action_own_army State: vo_campaign_action_own_army_embed_while_specific_character_present State: vo_campaign_action_own_region State: vo_campaign_action_passive State: vo_campaign_action_summon_volcano State: Any
Modder-Defined States
State Group: VO_Actor State: your_state_key State: Any State Group: VO_Culture State: your_state_key State: Any State Group: VO_Faction_Leader State: your_state_key State: Any State Group: VO_Battle_Selection State: your_state_key State: Any State Group: VO_Battle_Special_Ability State: your_state_key State: Any
Dialogue Events
Below is a full list of all the Dialogue_Events in the game along with the State Groups that they use. You can add custom audio for each of these Dialogue_Events. To find out exactly what each Dialogue_Event is used for refer to Researching Dialogue_Events.
Battle VO
This stuff happens in a battle. You don't need to use every single battle_vo Dialogue_Event if you don't want to. If your character does not have any sound for a particular Dialogue_Event then it will play the sounds from the battle_vo_order_generic_response Dialogue_Event.
"battle_vo_order_bat_mode_survival" : ["VO_Actor"], "battle_vo_order_guard_on" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_bat_mode_capture_pos" : ["VO_Actor", "Battle_Type"], "battle_vo_order_halt" : ["VO_Culture", "VO_Actor"], "battle_vo_order_special_ability" : ["VO_Culture", "VO_Actor", "VO_Battle_Special_Ability", "VO_Battle_Selection", "VO_Battle_Order_Urgency"], "battle_vo_order_battle_continue_battle" : ["VO_Actor"], "battle_vo_order_climb" : ["VO_Culture", "VO_Actor"], "battle_vo_order_withdraw_tactical" : ["VO_Culture", "VO_Actor"], "battle_vo_order_pick_up_engine" : ["VO_Culture", "VO_Actor"], "battle_vo_order_move_alternative" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_withdraw" : ["VO_Culture", "VO_Actor", "VO_Battle_Order_Urgency"], "battle_vo_order_move_siege_tower" : ["VO_Culture", "VO_Actor"], "battle_vo_order_change_ammo" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Vehicle_Ammo_Type"], "battle_vo_order_attack" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Unit_Type", "VO_Battle_Order_Urgency", "VO_Faction_Leader", "VO_Battle_Order_Artillery_Range"], "battle_vo_order_skirmish_off" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_generic_response" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Unit_Type", "VO_Battle_Order_Urgency"], "battle_vo_order_fire_at_will_on" : ["VO_Culture", "VO_Actor", "VO_Battle_Order_Urgency", "VO_Battle_Selection"], "battle_vo_order_short_order" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_change_formation" : ["VO_Culture", "VO_Actor"], "battle_vo_order_formation_lock" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_move" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Order_Speed", "VO_Battle_Order_Urgency", "VO_Battle_Order_Air_Unit", "VO_Faction_Leader"], "battle_vo_order_fire_at_will_off" : ["VO_Culture", "VO_Actor", "VO_Battle_Order_Urgency", "VO_Battle_Selection"], "battle_vo_order_man_siege_tower" : ["VO_Culture", "VO_Actor"], "battle_vo_order_move_ram" : ["VO_Culture", "VO_Actor"], "battle_vo_order_group_created" : ["VO_Culture", "VO_Actor"], "battle_vo_order_group_disbanded" : ["VO_Culture", "VO_Actor"], "battle_vo_order_skirmish_on" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_melee_off" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_flying_charge" : ["VO_Culture"], "battle_vo_order_attack_alternative" : ["VO_Culture", "VO_Actor", "VO_Battle_Unit_Type", "VO_Battle_Order_Urgency"], "battle_vo_order_melee_on" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_battle_quit_battle" : ["VO_Actor"], "battle_vo_order_bat_speeches" : ["VO_Actor"], "battle_vo_order_formation_unlock" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_guard_off" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_order_bat_mode_capture_neg" : ["VO_Actor"], "battle_vo_order_select" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Order_Urgency", "VO_Faction_Leader"],
Conversational Battle VO
This is the chitter chatter that goes on between units.
"battle_vo_conversation_own_unit_under_ranged_attack" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_enemy_unit_chariot_charge" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_hef_own_army_low_stength" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_army_missile_amount_inferior" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_enemy_unit_flanking" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_dissapointment" : ["VO_Culture", "VO_Actor", "VO_Culture"], "battle_vo_conversation_enemy_unit_flying" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_skv_own_unit_warpfire_artillery" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_enemy_unit_charging" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_environment_weather_snow" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_enemy_army_has_many_cannons" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_environment_in_water" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_unit_fearful" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_hef_own_army_air_units" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_unit_under_dragon_firebreath_attack" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_own_unit_artillery_reload" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_enemy_unit_revealed" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_own_army_caused_damage" : ["VO_Culture", "VO_Battle_Selection", "VO_Actor"], "battle_vo_conversation_own_army_peasants_fleeing" : ["VO_Actor"], "battle_vo_conversation_enemy_army_black_arks_triggered" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_skv_own_unit_tactical_withdraw" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_clash" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Conversation_Clash_Type", "VO_Culture", "VO_Actor"], "battle_vo_conversation_environment_in_cave" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_unit_artillery_firing" : ["VO_Culture", "VO_Battle_Selection"], "battle_vo_conversation_siege_defence" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Conversation_Clash_Type"], "battle_vo_conversation_environment_weather_cold" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_storm_of_magic" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_lzd_own_army_dino_rampage" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_encouragement" : ["VO_Culture", "VO_Actor", "VO_Culture"], "battle_vo_conversation_own_unit_routing" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_environment_ground_type_forest" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_def_own_army_murderous_prowess_75_percent" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_allied_unit_routing" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_enemy_skaven_unit_revealed" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_skv_own_unit_spawn_units" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_army_spell_cast" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_siege_attack" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection", "VO_Battle_Conversation_Clash_Type"], "battle_vo_conversation_def_own_army_murderous_prowess_100_percent" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_unit_moving" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_environment_weather_desert" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_enemy_unit_at_rear" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_enemy_unit_large_creature" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_own_army_black_arks_triggered" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_environment_weather_rain" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_army_at_chokepoint" : ["VO_Culture", "VO_Battle_Selection", "VO_Actor"], "battle_vo_conversation_enemy_unit_spell_cast" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_own_army_missile_amount_superior" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_own_unit_artillery_fire" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_environment_ground_type_mud" : ["VO_Culture", "VO_Actor"], "battle_vo_conversation_enemy_army_at_chokepoint" : ["VO_Culture", "VO_Battle_Selection", "VO_Actor"], "battle_vo_conversation_own_unit_wavering" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_enemy_unit_dragon" : ["VO_Culture", "VO_Actor", "VO_Battle_Selection"], "battle_vo_conversation_proximity" : ["VO_Actor", "VO_Actor"],
Frontend
The frontend VO which plays when you select a faction to play as.
"frontend_vo_character_select" : ["VO_Actor"],
Campaign VO
These are events which play on the campaign map.
"campaign_vo_stance_default" : ["VO_Actor"], "campaign_vo_no" : ["VO_Actor"], "campaign_vo_stance_stalking" : ["VO_Actor"], "campaign_vo_selected_allied" : ["VO_Actor"], "campaign_vo_post_battle_defeat" : ["VO_Culture", "VO_Actor"], "campaign_vo_level_up" : ["VO_Actor"], "campaign_vo_yes" : ["VO_Actor"], "campaign_vo_stance_settle" : ["VO_Actor"], "campaign_vo_retreat" : ["VO_Actor"], "campaign_vo_recruit_units" : ["VO_Actor"], "campaign_vo_yes_short" : ["VO_Actor"], "campaign_vo_agent_action_success" : ["VO_Actor"], "campaign_vo_stance_astromancy" : ["VO_Actor"], "campaign_vo_ship_dock" : ["VO_Actor", "VO_Campaign_Order_Move_Type"], "campaign_vo_post_battle_victory" : ["VO_Actor"], "campaign_vo_mounted_creature" : ["VO_Culture"], "campaign_vo_stance_patrol" : ["VO_Actor"], "gotrek_felix_departure" : ["VO_Actor"], "campaign_vo_move_garrisoning" : ["VO_Actor"], "campaign_vo_move_next_turn" : ["VO_Actor"], "campaign_vo_stance_tunneling" : ["VO_Actor"], "campaign_vo_new_commander" : ["VO_Actor"], "campaign_vo_diplomacy_negative" : ["VO_Actor"], "campaign_vo_stance_channeling" : ["VO_Actor"], "campaign_vo_created" : ["VO_Actor"], "campaign_vo_selected_fail" : ["VO_Actor"], "campaign_vo_stance_land_raid" : ["VO_Actor"], "campaign_vo_agent_action_failed" : ["VO_Actor"], "campaign_vo_selected_first_time" : ["VO_Actor"], "campaign_vo_move" : ["VO_Actor", "VO_Campaign_Order_Move_Type"], "campaign_vo_attack" : ["VO_Actor", "VO_Campaign_Order_Move_Type"], "campaign_vo_cam_tech_tree_response" : ["VO_Actor"], "campaign_vo_cam_disband" : ["VO_Actor"], "campaign_vo_stance_muster" : ["VO_Actor"], "campaign_vo_stance_double_time" : ["VO_Actor"], "campaign_vo_cam_disbanded_pos" : ["VO_Actor"], "campaign_vo_special_ability" : ["VO_Actor", "VO_Campaign_Special_Ability"], "campaign_vo_stance_ambush" : ["VO_Actor"], "campaign_vo_stance_raise_dead" : ["VO_Actor"], "campaign_vo_selected_neutral" : ["VO_Actor"], "campaign_vo_stance_march" : ["VO_Actor"], "campaign_vo_cam_disbanded_neg" : ["VO_Actor"], "gotrek_felix_arrival" : ["VO_Actor"], "campaign_vo_no_short" : ["VO_Actor"], "campaign_vo_cam_skill_weapon_tree" : ["VO_Actor"], "campaign_vo_stance_set_camp_raiding" : ["VO_Actor"], "campaign_vo_diplomacy_positive" : ["VO_Actor"], "campaign_vo_diplomacy_selected" : ["VO_Actor"], "campaign_vo_yes_short_aggressive" : ["VO_Actor"], "campaign_vo_stance_set_camp" : ["VO_Actor"], "campaign_vo_cam_skill_weapon_tree_response" : ["VO_Actor"], "campaign_vo_selected_short" : ["VO_Actor"], "campaign_vo_cam_tech_tree" : ["VO_Actor"], "campaign_vo_selected" : ["VO_Actor"]
Campaign Conversational VO
The chitter chatter that occurs on the campaign map.
"campaign_vo_cs_enemy_region_generic" : ["VO_Actor"], "campaign_vo_cs_hellforge_customisation_category" : ["VO_Actor"], "campaign_vo_cs_intimidated" : ["VO_Culture", "VO_Actor", "VO_Culture"], "campaign_vo_cs_hellforge_customisation_unit" : ["VO_Actor"], "campaign_vo_cs_tzarkan_calls_and_taunts" : ["VO_Actor", "Generic_Actor_TzArkan_Sanity"], "campaign_vo_cs_near_sea" : ["VO_Actor"], "campaign_vo_cs_post_battle_victory" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_vassal_enlist" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_forbidden_workshop_purchase_doomrocket" : ["VO_Actor"], "campaign_vo_cs_in_forest" : ["VO_Actor"], "campaign_vo_cs_summon_elector_counts_panel_open_vo" : ["VO_Actor"], "campaign_vo_cs_monster_pens_dilemma_lustria" : ["VO_Actor"], "campaign_vo_cs_weather_hot" : ["VO_Actor"], "campaign_vo_cs_pre_battle_siege_break" : ["VO_Actor"], "campaign_vo_cs_city_public_order_low" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_great_victory" : ["VO_Actor"], "campaign_vo_cs_post_battle_captives_release" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_wef_daiths_forge" : ["VO_Actor", "VO_Campaign_Daiths_Forge"], "campaign_vo_cs_other_character_details_panel_low_loyalty" : ["VO_Actor"], "campaign_vo_cs_spam_click" : ["VO_Actor"], "campaign_vo_cs_in_mountains" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_raze" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_pre_battle_siege_continue" : ["VO_Actor"], "campaign_vo_cs_other_character_details_panel_neutral" : ["VO_Actor"], "campaign_vo_cs_city_under_siege" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_proximity" : ["VO_Actor", "VO_Actor"], "campaign_vo_cs_forbidden_workshop_upgrade_weapon_teams" : ["VO_Actor"], "campaign_vo_cs_city_riot" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_settlement_loot" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_settlement_occupy" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_settlement_do_nothing" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_weather_cold" : ["VO_Actor"], "campaign_vo_cs_post_battle_great_defeat" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_city_other_generic" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_close_defeat" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_captives_enslave" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_sea_storm" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_in_snow" : ["VO_Actor"], "campaign_vo_cs_city_buildings_damaged" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_defeat" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_neutral" : ["VO_Actor"], "campaign_vo_cs_forbidden_workshop_upgrade_doomwheel" : ["VO_Actor"], "campaign_vo_cs_tzarkan_whispers" : ["VO_Actor"], "campaign_vo_cs_forbidden_workshop_upgrade_doomflayer" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_occupy_factory" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_monster_pens_event" : ["VO_Actor"], "campaign_vo_cs_monster_pens_dilemma_ghrond" : ["VO_Actor"], "campaign_vo_cs_pre_battle_fight_battle" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_occupy_outpost" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_close_victory" : ["VO_Actor"], "campaign_vo_cs_confident" : ["VO_Culture", "VO_Actor", "VO_Culture"], "campaign_vo_cs_post_battle_captives_execute" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_pre_battle_retreat" : ["VO_Actor"], "campaign_vo_cs_sacrifice_to_sotek" : ["VO_Actor"], "campaign_vo_cs_on_sea" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_sack" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_city_high_corruption" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_other_character_details_panel_positive" : ["VO_Actor"], "campaign_vo_cs_monster_pens_dilemma_naggaroth" : ["VO_Actor"], "campaign_vo_cs_monster_pens_dilemma_old_world" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_reinstate_elector_count" : ["VO_Actor"], "campaign_vo_cs_post_battle_settlement_occupy_tower" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_hellforge_accept" : ["VO_Actor"], "campaign_vo_cs_in_rain" : ["VO_Actor"], "campaign_vo_cs_city_own_generic" : ["VO_Culture", "VO_Actor"], "campaign_vo_cs_post_battle_settlement_establish_foreign_slot" : ["VO_Culture", "VO_Actor"],
Non-VO Audio Modding
The non-VO audio modding side of the AssetEditor tools is almost ready for release. When it is you will be able to use it to make Events for non-VO audio using templates provided. You can also do this in Wwise but like VO audio modding it is a slightly complicated process.
Music Audio Modding
WIP more info soon.
Replacing Vanilla Audio
Replacing vanilla audio is essentially the fourth type of audio modding, however the key word is replacing. It means you are overriding vanilla audio rather than creating 'new' audio stuff.
An example of what can be done by replacing vanilla audio is the excellent Smart Throgg mod by Oh_Man.
1. First make sure you have the Skip loading wem (sound) files setting unticked in your Asset Editor settings.
2. There are 2 types of sound events in WH3, normal 'events' and 'dialogue_events'. We'll start with replacing the audio for normal events. These are basically any event whose string includes the word Throgg.
Go to Tools > Audio > Audio Explorer. Searching for the event Play_Nor_Throgg_Dip_Emp_Greet_Pos_01 we can see that the corresponding sound for that event is 718902042.wem.
In RPFM replace that .wem file in your pack with your own. Repeat this process for all events whose names include Throgg.
3. Next we will deal with dialogue_events. The .wem files for these are slightly harder to find as AE doesn't (currently) have deeper browsing to search for nodes of Dialogue_Events. Searching the Dialogue_Event frontend_vo_character_select and selecting wh_dlc08_vo_actor_Norsca_Throgg we can see the .wem files that play here e.g. 37798848.wem. We can also see the ID that Wwise hashes wh_dlc08_vo_actor_Norsca_Throgg into which is 2590048255.
4. This works for dialogue_events that we know the name of such as this but what about all the others we can't remember? That would involve manually searching with the Audio Explorer until you found every instance of wh_dlc08_vo_actor_Norsca_Throgg which isn't a good idea. So instead we use RPFM to export all the soundbanks that would contain the relevant dialogue_events.
Those .bnk files are: frontend_vo__core.bnk campaign_vo_conversational__core.bnk campaign_vo_conversational__warhammer3.bnk campaign_vo__core.bnk battle_vo_orders__core.bnk battle_vo_generals_speech__core.bnk battle_vo_generals_speech__warhammer3.bnk battle_vo_conversational__core.bnk battle_vo_conversational__warhammer3.bnk
Using campaign_vo__core.bnk as an example, load the .bnk in Wwiser, then click Dump banks. This will output an XML file of the contents of the .bnk which we can then search through.
5. We know from the Audio Explorer that wh_dlc08_vo_actor_Norsca_Throgg is hashed by Wwise into the ID 2590048255. So using whichever programme you want to browse the XML file ctrl+f for that ID and it will show every node which contains that ID.
6. Scroll up until you get to the dialogue_event parent of that node and copy the ID (va) for that dialogue_event e.g. 87890740.
7. Now back in the Audio Explorer go to File > Load HIRC from ID and search for 87890740.
8. This will show you that dialogue_event on the right hand side. Scroll down all the way to the bottom and you will see the original string that 87890740 was hashed from — campaign_vo_stance_default. If it's a long text to scroll through copy the text into a text document, click on the bottom of the scroll bar, and you get to the bottom much quicker!
9. Search the Audio Explorer for this Dialogue_Event and look for wh_dlc08_vo_actor_Norsca_Throgg. Replace the .wem files shown there. Repeat this process for every instance of 2590048255 in each of those .bnk files. campaign_vo__core.bnk is by far the biggest, the others will have less to do so don't be put off! That's it.
Converting Between File Types
The tools can be downloaded here.
Requirements:
1. Wwise (version 2019.2.15.7667)
2. FFMPEG
3. vgmstream
ivf to mp4, mp4 to ivf, mp3 to wav (FFMPEG)
1. Place the bat file in "C:\installation_location\ffmpeg\bin"
2. Place the files to convert in "C:\installation_location\ffmpeg\bin"
3. Run the bat file.
wem to wav (vgmstream)
1. Place the bat file in "C:\installation_location\vgmstream"
2. Place the files to convert in "C:\installation_location\vgmstream"
3. Run the bat file.
wav to wem
1. Put your wav files in "C:\wav_to_wem\convert\input".
2. Run convert.bat 3. Get your wem files from "C:wav_to_wem\convert\output".
4. If it still doesn't work for you, in convert.txt change "C:\Program Files (x86)\Audiokinetic\Wwise 2019.2.15.7667\Authoring\x64\Release\bin\WwiseCLI.exe" to whatever the location is of WwiseCLI.exe on your computer then resave it as convert.bat. Oh and make sure Wwise (version 2019.2.15.7667) is installed.
ca_vp8 to ivf
1. Click on a .ca_vp8 file in RPFM and click Convert to IVF
ivf to ca_vp8
1. Change your file's extension from .ivf to .ca_vp8. 2. Import your file to RPFM. 3. Click on your file and click Convert to CAMV.