Custom Units for WH3

From Total War Modding
Revision as of 14:16, 21 September 2024 by Casualfield (talk | contribs) (stuff)

Hello! My name is Casualfield, welcome to my guide for creating custom units in WH3. I've done over 40 new units and figured it's time to give the community an updated guide for WH3, it's loooong overdue.

Requirements

First and foremost you need the latest version of RPFM, which you can download from here. Second you need the Total War: Warhammer 3 Assembly Kit, which can be downloaded in your Steam library under the tools section (keep track of where you install it). That's it! Since most people reading this will be beginners, I highly recommend going to https://tw-modding.com and reading through the guides and tutorials.

Setting Up RPFM

Open rpfm_ui.exe (I'd create a shortcut and or pin it to your start/taskbar now) and at the top left go to PackFile > settings, or hit Ctrl + P, and set up the paths for WH3 and The Assembly Kit, usually C:/Program Files (x86)/Steam/steamapps/common/Total War WARHAMMER III. Now in the same window go to the settings tab in the top left. Under the UI Settings set the Default Game to WH3, I recommend unchecking "Delete empty folders" and enabling Dark Theme. Now under Table Settings I recommend enabling Tight Mode and Right-Side Markers. Read through the rest of the settings and change what you want and hit save when you are done.

Now back to the top left, go to Special Stuff > Warhammer 3 > Generate Dependencies Cache. This is extremely important and you will need to do this every update. This insures the game files are loaded and updated so RPFM can run diagnostics and you can import the game files into your packfile. Next, go back to the top left, View > Toggle Global Search Window. I recommend dragging this window far left and 50/50 splitting it with Pack Contents as this is the bread and butter window which you will be using constantly. Under View > Toggle on Dependencies Window, I recommend dragging this window to the left of the Diagnostics window. Done! Let's make a new unit!

The Juice

First we need to go to PackFile > New Pack, or CTRL + N, to make a new Pack and then we need to save and name it, CTRL + SHFT + S or PackFile > Save PackFile As. Now the default location should be in the Total War WARHAMMER III\data folder. You can save here or if you want another copy of your pack for backup or other reasons save at another location and click PackFile > Install, or CTRL + SHFT + I to install it into the data folder EVERY TIME you want to test the mod in-game. Regarding the name DO NOT end the name in a number or any table file names in a number to avoid....issues. It's best practice to put your name/initials in front, so cf_new_black_guards.pack.

Find a Base Game Unit to use as a Foundation

So, going into the weeds a little here, I HIGHLY recommend to always base a new unit off a base game unit as creating new units from scratch is very time consuming and will leave you with loads of empty columns and a single empty key won't always trigger diagnostics and your game will CTD with no error leaving you on a horrid needle in haystack search, plus you need to reference a base unit anyways to see where and how it's added in-game. So if you are adding a new Dark Elf unit, reference a base Dark Elf unit.


So, let's say I want to base my unit off the Dark Elves Black Guard. We need find that units key in main_ units or land_units. USUALLY the units are named after their screen name so in the Global search window type black_guard, make sure the source is game files and both DB & loc are checked and search. Now we have all the tables with "black_guard" in them.

If you can't find your unit search the in-game name "Black Guard of Naggarond" and find the key in the .loc files, i.e. land_units_onscreen_name_wh2_main_def_inf_black_guard_0. The unit key is after "land_units_onscreen_name_ so delete and search wh2_main_def_inf_black_guard_0. Alternatively you can use https://totalwarwarhammer.fandom.com/ to search for the unit and they usually have the unit key under the unit's picture.

Importing tables

There's a few methods here but, the one I use is to import the whole table either by right clicking the table tab at the top after opening the table or by importing it from the dependencies window. Afterwards I search the table for the unit, copy the whole row by clicking on the row number and using ctrl + c, then ctrl + a to highlight the whole table, delete key to delete everything and then ctrl + shft + v to past the row back in. After you are ready to test the mod you can highlight all the tables by ctrl + left click and then ctrl + r to rename them all at once because leaving them named data__ will overwrite the base game files and cause a crash.

Important tables to Import

db/allied_recruitment_unit_permissions_tables -- Allows the unit to be recruited via Outposts.

db/armed_citizenry_unit_groups_tables -- The main key to add your unit to a garrison.

db/building_level_armed_citizenry_junctions_tables -- Assign your unit to a building to add it to the garrison. MUST use a UNIQUE ID key.

db/battle_set_piece_tables --Ignore, quest battle stuff. Add if you want your unit in quest battles but I'm not going over that in this guide.

db/building_units_allowed_tables -- Adds the unit to a building for local and global recruitment. MUST use a UNIQUE ID key.

db/campaign_map_attrition_unit_immunities_tables -- Give the unit attrition immunity, imagine vampires talking vampire attrition.

db/campaign_rogue_army_group_units_tables --Ignore. Adds the unit to Rogue armies, xp is unit rank. MUST use a UNIQUE ID key.

db/cdir_military_generator_unit_qualities_tables --Helps the AI understanding the unit's performance and role when recruiting.

db/faction_rebellion_units_junctions_tables --Ignore. Adds unit to rebel armies.

db/land_units_tables --The second most important table. Contains the stats and other very import things, will go in-depth later on.

db/land_units_to_unit_abilites_junctions_tables --Add an ability to the unit.

db/loading_screen_tables --Ignore. Add the unit to loading screens, requires a few tables, .locs and proper images.

db/main_units_tables --The main table for the unit. Messing things up here will cause many issues especially crashes, will go in-depth later on.

db/ui_unit_bullet_point_unit_overrides_tables --Controls the bullet points on the unit card, max of four.

db/unit_attributes_groups_tables --Main key for adding attributes to the unit.

db/unit_attributes_to_groups_junctions_tables --Add attributes to the unit.

db/unit_banner_unit_height_offsets_tables --Control the banner above the unit in battles or on the campaign map.

db/unit_set_to_unit_junctions_tables --Adds the unit to a set that's used in effects like Technologies/Skills. New sets can be created.

db/unit_variants_tables --Connects the unit to a variant. The variant will always be a different name and will need to be search for separately.

db/units_custom_battle_permissions_tables --Add the unit to a faction for custom battles.

db/units_to_groupings_military_permissions_tables --Add the unit to a factions military group for recruitment and use.

db/variants_tables --Connects the unit variant in unit_variants_tables to a variation mesh definition that controls the model, textures weapons ect.

Adding .locs

Just keep important like before. You only need one .loc file so you can combine if you want but, for organization you can follow vanilla naming schemes but, DO NOT keep file names the same to prevent issues. DO NOT enabled tooltip unless the base game entry does, which for units is never. Alternately you can right click the packfile name and generate missing .loc data. but, not everything is needed, it's messy, just import.

Disclaimer

Different factions have different tables, recruitment methods ect. You'll need to use deductive reasoning to determine if a table I didn't mention should be added or you can create a post/question in the modding discord found here.

Use Global Search to Replace all Keys

A huge reason to import from base game is the replace feature in the global search window. Paste the unit key in the search box "wh2_main_def_inf_black_guard_0" make the source Packfile, type your custom key into the Replace box, "cf_new_def_inf_black_guard_0" and hit the replace all button which is a page icon with a red page behind it with a small red x on it.

Now a majority of the work is done, assuming you used a good base unit. In this case all I need to do is save the pack, install it if isn't saved to the data folder and launch the game. Of course the unit will be an exact copy of the Black Guard already in the game but, it's smooth sailing from here.

Customizing the Unit

The fun begins. Let's start with the main