This guide covers how to add classes and subclasses to the game.
Let's build an imaginary class called the Battlemage that is proficient in heavy armour and many two-handed weapons. We’ll also give it access to a couple of spells.
Start by making a new mod for the class. For this guide, we’ll use Battlemage as the mod name.
The first step is to define progressions for your new class. This tells the game what the character receives with each level.
Open the UUID Object Editor.
Opening the UUID Object Editor (the spreadsheet icon) via the main toolbar.
Add a Progressions table inside your mod by finding your mod in the directory [1], clicking the + icon beside Progressions [2], and selecting "Progressions" in the dropdown menu [3].
Adding a Progressions table.
Start editing your newly created Progressions table by double-clicking on it to open it.
The newly-created Progressions table.
Let’s start with the Name column. This is a technical name that will be used in data, so avoid using spaces. Once you’ve added a Name – in our case, Battlemage – and pressed Enter, the UUID column should automatically populate.
The technical name of our new mod and the automatically-generated UUID.
Set the Level column to 1 and the ProgressionType column to 0. This tells the game that this is indeed a class progression.
Setting the Level and ProgressionType to set up class progression.
Next, we’ll need to fill in the TableUUID. This TableUUID is shared between all levels of a class. A nifty way to do this is to first copy and paste the value from the UUID column into the TableUUID column…
Copying the UUID into the TableUUID.
…and then right-click on the UUID cell, and select “Regenerate Value” from the dropdown.
Regenerating the UUID value.
You should now have different values in the UUID and TableUUID columns.
Different UUID and TableUUID values.
We want to make sure our Battlemage has a few specific traits:
2 spell slots
Proficiency with all armour
Proficiency with all weapons
We use the Boosts column to handle this. You can add various proficiencies and resources into Boosts, separating each one with a semicolon (;).
In this example, our finished line will look like this:
To make use of those spell slots, our Battlemage will need some spells, so we’ll need to build a list of spells they can have.
Let’s create a new SpellLists table in the Lists section of the left panel:
Creating a SpellLists table for the Battlemage mod.
We will create two lists (rows) in this table: one for cantrips, which will all be given to the character, and a second list for the Level 1 spells the player will have to choose from. (We will create more lists for higher level spells later on.)
ⓘ Spells in BG3 all have a prefix that indicates their spell type. Any spell can be referenced using this structure: Type_TechName
For example, Shocking Grasp is referenced as Target_ShockingGrasp.
If you’ve made your own spells, perhaps through following the Making a Basic Spell guide, you can use those spells here. The sample spell from that guide, FireTouch, would have to be referenced here as Target_FireTouch.
Creating spell lists for the Battlemage.
For this example, we’ll give the player the Shocking Grasp (Target_ShockingGrasp) and True Strike (Target_TrueStrike) cantrips, and let them select one spell from among Burning Hands (Zone_BurningHands), Jump (Target_Jump), and Longstrider (Target_Longstrider).
This means that our two lists in the SpellLists table will look like this:
The cantrip list (Row 1) and Level 1 spell list (Row 2) for the Battlemage.
Your UUIDs will, of course, be different.
Now, we’ll take the UUIDs for each list and copy them back into our Progressions table, into the Selectors column.
For the cantrips, since we want to give the character all of the listed cantrips (no choice required), we’ll use AddSpells(). Add the UUID for the cantrip list in between the parentheses.
For the spells, since we want the player to choose only one spell from the given list, we’ll use SelectSpells(). Add the UUID for the spell list in between the parentheses, followed by two more arguments, separated by commas (,), as follows:
SelectSpells(<UUID>,1,0)
The 1 means the player will have to pick 1 spell.
The 0 means the player will be able to replace 0 of their previous spells.
The final line in the Selectors cell should look similar to this (don't forget to change UUIDs for your own): AddSpells(714d1e3d-b436-4af7-9b40-107383e25a5d);SelectSpells(8fd1fe1e-ad9f-4d2c-a4c7-dcc687fc5ae6,1,0)
Filling in the Selectors column in the Progressions table.
Let's add a couple more levels to the class progression.
Select the whole row by clicking on the row number.
Selecting a row.
Press Ctrl+C and Ctrl+V. The row should get duplicated in the row underneath, with a new UUID.
Duplicating a row.
Change the Level column in your new row to 2 (or higher, depending on your desired level progression). Repeat this a few more times, increasing the level each time, until you have the first 5 levels.
Adding level progressions up to Level 5.
At this time, verify that the TableUUID is the same for all rows, and that each row has a unique UUID.
We can give the Battlemage a few extra cool features by defining more Boosts and Selectors for each additional level. To do this, we can fill in the Progressions table as pictured below (note that your UUIDs be different from those in this image!):
Adding Boosts and Selectors up to Level 5.
Let’s go through these additions to understand what’s going on.
This allows the Battlemage their choice of "Battlestance", which is what we'll call the Battlemage's passive features.
<UUID>: This is the UUID of the PassivesList the Battlemage is choosing from.
In this example, we’ll just reuse an existing list from the Shared > Lists > PassiveLists table.Finding the UUID of the PassivesList the Battlemage can choose from.To do so, find the row that contains the "Ranger fighting style" and copy the UUID. Paste this value into the <UUID> part of the Level 2 Selectors: SelectPassives(a0bdb113-1cce-45ac-94fb-72d4c3f207e9,1,Battlestance).
1: How many Passives the player can choose.
Battlestance: The name of our class's passive features. This is purely flavour text – sometimes you don’t want the passives to be presented as “Passives”. Instead, the game will ask the player to select a Battlestance rather than a Passive. If we didn’t want this flavour text, we could simply write SelectPassives(<UUID>,1).
Level 2–5 Boosts: ActionResource(SpellSlot,2,3)
This gives the Battlemage extra Action Resources. The example here gives the Battlemage an additional two Level 3 spell slots.
SpellSlot: The type of Action Resource given.
2: The number of Spell Slots given.
3: The level of Spell Slot given.
Level 4, AllowImprovement: Yes
Marking AllowImprovement as Yes gives the Battlemage access to a Feat at this level, just like other classes.
Levels 3–5, Selectors: AddSpells(<UUID>)
For these, we’re going to go back to our SpellLists table and add a few more rows, defining which cantrips we’d like to give the Battlemage at Levels 3, 4, and 5. Remember that these will all be given. Here’s a basic example of what you could do:Adding cantrips to Levels 3, 4, and 5.
Once you’ve set up the new rows in SpellLists, copy the UUIDs for each list and paste them into the Progressions table, within the AddSpells() parentheses for the relevant level’s Selector field. Using the above example, it’ll look like this:Adding the SpellLists UUIDs to the Selectors column in the Progressions table.
Adding Subclasses
We want to add three subclasses to our Battlemage class: Macemage, Staffmage, and Swordmage. To do this, make three new rows in your Progressions table, and name them accordingly.
Adding subclasses to the Progressions table.
Use the UUID -> TableUUID copy trick to give each of these new subclasses an unique TableUUID, and regenerate their UUIDs. You should now have four different TableUUIDs in your Progressions table, like so:
Generating TableUUIDs for subclasses. (Green = Battlemage class; red = Macemage subclass; blue = Staffmage subclass; yellow = Swordmage subclass.)
For each subclass, let’s set the Level column to 3. That’s the level at which the Battlemage will get access to them.
We’ll also set the ProgressionType column to 1, which will define it as a subclass progression.
Adding Class Descriptions
Now that we have defined what our class does up to Level 5, we have to add definitions for the class in order for it to show up in Character Creation. To do this, we add a ClassDescriptions table:
Adding a ClassDescriptions table.
As always, start by filling in the Name. Use the same name that you used for the Progressions: Battlemage.
In the ProgressionTableUUID column, copy over the main class TableUUID from the Progressions table (the one in the green box in the earlier screenshot).
Defining the ProgressionTableUUID in the ClassDescriptions table.
There are a few other fields we need to fill in here:
DisplayName: This is the name of the class that the player sees in-game.
Description: This is the description of the class that appears in Character Creation.
Adding a player-facing name and description for the class.
Primary Ability: We’ll use Strength.
Spell Casting Ability: We’ll use Intelligence.
Learning Strategy: For classes, this should always be AllChildren.
Must Prepare Spells: Does this class need to prepare spells like druids or clerics? We’ll say No.
Can Learn Spells: Can this class learn spells from scrolls like wizards? We’ll say No.
Defining class characteristics.
CharacterCreationPose: The character’s pose during Character Creation. This is 0f07ec6e-4ef0-434e-9a51-1353260ccff8 for all classes.
BaseHp: This is how much HP the class starts with. For the Battlemage, we’ll go with 12.
HPPerLevel: This is how much HP the class gains with each level. Let’s say 7.
CommonHotbarColumns, ClassHotbarColumns, and ItemsHotbarColumns: These describe the default number of slots between each hotbar separator. The sum of these must always be 16. We will use the default values of 9, 5, and 2, respectively.
Defining more class characteristics.
Adding Support for Multiclassing
If you want your class to appear as an option for multiclassing, you'll need to add an extra row to the ClassDescriptions table.
Under the main Battlemage class, add a new row. This row will be a secondary Level 1 that will act as multiclassing progression. Everything can be identical to the original Battlemage Level 1 row, except:
The UUID must be different.
IsMulticlass must be Yes.
It will look something like this:
Adding a row to allow for multiclassing.
Now when you go to multiclass, your class will show up among the multiclassing options. The rest of the levels will come from the progressions you’ve already set up.
Saving Your Work
Before you continue, make sure to save everything you have done up until this point!
When you’re confident you’ve saved your work, close and restart the Editor.
Continuing with Class Descriptions
Reopen the ClassDescriptions table in the UUID Object Editor.
We’ll need to add three new rows – one for each of our subclasses. Fill in the Name for each row with the same subclasses we started setting up earlier.
In the ParentUUID column for these subclasses, select the class name from the dropdown – in our example, that’s Battlemage.
Adding new rows for each of the subclasses in the ClassDescriptions table.
First, fill in the subclasses' ProgressionTableUUIDs. The process is the same as for the class:
Open your Progressions table and find the TableUUID associated with each subclass.
Copy and paste the TableUUID for each subclass from the Progressions table into that same subclass’s ProgressionTableUUID field in the ClassDescriptions table.
Filling in the ProgressionTableUUIDs for the subclasses.
Next, fill in the DisplayName, ShortName, and Description for the class and subclasses.
The ShortName is, as it sounds, a shorter way of referring to that subclass. It appears, for example, on the in-game Character Sheet. If you don’t fill in a ShortName for the Battlemage subclasses, they’ll appear on the Character Sheet as:
Macemage Battlemage
Staffmage Battlemage
Swordmage Battlemage
That’s a bit repetitive, so we'll fill in the ShortNames as Mace, Staff, and Sword. This way, the Character Sheet will instead say:
Mace Battlemage
Staff Battlemage
Sword Battlemage
Defining the ShortName for each subclass.
For the rest of the columns (L to O), copy the values from the class over to the subclasses.
Populating the remaining columns for each subclass.
Saving Your Work – Again
Once again, make sure you have saved all of your changes.
After saving, close and restart the Editor.
Adding Subclass Selection to the Class
Reopen the Progressions table in the UUID Object Editor.
Go to the Level 3 progression of our Battlemage. In the SubClasses column, add all 3 new subclasses by double-clicking on them in the dropdown. This allows the player to choose which subclass they want to be when they reach Level 3 of Battlemage.
Defining subclass selection at Level 3.
With this, you’ve finished the main technical setup of a class and its subclasses!
Remember to save your work again!
Quick-Testing
To test your creation thus far, load into a level. For our purposes, we’ll use Basic_Level_A.
Loading a level to test in.
Once the level has loaded, switch into Game Mode.
Switching to Game Mode.
Hover your cursor over your character’s portrait, then press Ctrl+Shift+L to level up the character. In the game, open the Level Up screen, and click on the Add Class button.
Adding a class in-game.
Select Battlemage.
Selecting the Battlemage class.
You can see the class description here, as well as the two cantrips we defined for the initial level.
Finish your level up into a Level 1 Battlemage, then level yourself up two more times (with Ctrl+Shift+L again) to choose a subclass.
Testing the level up flow.
You’ll notice that our character is missing equipment, and that, when levelling up to Level 2, the Battlestance is called “Class Passives”. Let's fix these issues now.
Assigning Equipment
Equipment is defined in the Stats Editor. Just as we created other tables, let’s create a new Equipment table.
Creating an Equipment table.
Fill in the Name with something you can identify as the Battlemage’s starting equipment. Following our own internal conventions, we’ll use EQP_CC_Battlemage, but you can do what you like provided that it doesn’t contain spaces.
We’ll set Melee as the Initial Weapon Set, since we want our Battlemage to show off their Greatsword. In the following columns (1, 2, 3, ...), you can define additional items that the character will start with. These fields open large dropdown menus with all the possible items – you can search to narrow down the results.
Defining the starting equipment for the class.
Let’s use WPN_Greatsword, ARM_ScaleMail_Body, and ARM_Boots_Leather.
Defining additional starting items in separate columns.
Now, open up the ClassDescriptions table. Use the Name you defined above (EQP_CC_Battlemage) and put it inside the ClassEquipment field of the class. Do this for the class only, not the subclasses.
Defining the equipment in the ClassDescriptions table.
Adding Progression Descriptions
Next, we’ll fix the Class Passives display name. For this, we'll need to create a new ProgressionDescriptions table in the Progressions section:
Creating a ProgressionDescriptions table.
Fill in the DisplayName and Description you want to show to players for your selection. In our case, we want to call it Battle Stance. Remember that SelectPassives(<UUID>,1,Battlestance) we stuck into one of our Progressions earlier on?
This Battlestance is now important. Put it into the SelectorId column. Your row should look like this:
Defining the passive progression.
Now, if you test it in Game Mode again, you should see that the selection is properly named:
The passive showing up correctly.
ⓘ Having issues seeing this correctly named in Game Mode? Try closing and restarting the Editor.
Adding Class Icons
We just need to change the class and subclass icons, both in Character Creation and on the hotbar.
Preparing Assets
First, you need the images that you’ll use for your class and subclass icons. These should be 300x300 pixel .png files that are then converted to .dds.
ⓘ These icons must be named identically to the Name (Column C) of the class or subclass in the ClassDescriptions UUID table.
This website uses cookies to ensure you get the best experience from our website. Some cookies are essential
to the functioning of the site and cannot be turned off. We also use analytics cookies to count visits and
traffic sources; these are disabled by default. You can accept them by clicking on the \'Analytics\' checkbox.
Learn more about our privacy policy.