Step-by-Step Deadfire Modding Tutorial and Tools

deadfire modding tutorial

Even though it has many flaws and bugs, I still think PoE 2: Deadfire is an enjoyable game. Moreover, it offers relatively easy modding access, which has kept me playing for over 400 hours. Although the modding process is a bit tedious, it’s still fairly straightforward.

I don’t even have a programming background, so if I can do it, you can too. I hope that this Deadfire modding tutorial will help make your experience playing Deadfire more enjoyable.”

Deadfire Modding Tools and References

First things first, these are the must-have tools I use to mod Deadfire.

1. Notepad++ or other text editors

You could certainly use other text editors; it’s just that Notepad++ is the only advanced text editor I’m familiar with.

2. JSON Online Editor / JSTool Plugin for NP++

I use the Notepad++ plugin (JSTool) for JSON formatting and another online JSON editor. These two are essential for me because they help detect broken lines or code.

If you’re something like a grammar nazi with programming language, you may not need those things.

3. Online UUID Generator

Because I won’t just be showing you how to edit the data but also how to create new entries, my brain needs assistance generating dozens of random numbers.

These three tools are essential for me to provide this tutorial.

In addition to these tools, I’ll include links to some references you might need to create your own mod.

4. Modding Thread on Official Obsidian Forum

Here, you can ask others or simply read to find new information about modding Deadfire. It’s not as active as the Gameplay and Story threads, though.

5. Nexus Mods for Mods Collection

If you’re too lazy to create your own mod, you can choose from hundreds of mods here. However, I included it as a reference to help you make a new mod by examining the files created by others.

6. Mod Documentation from Obsidian

I believe it needs better organization to make information easier to find. Nevertheless, this place is essential if you want to advance to the next level of Deadfire modding.

Deadfire Modding Tutorial

Let’s begin with simple editing.

For this part, let’s say you want to make your Fireball spell isn’t friendly-fire. The information of that spell attack is located in attacks.gamedatabundle (C:\Program Files (x86)\Steam\steamapps\common\Pillars of Eternity II\PillarsOfEternityII_Data\exported\design\gamedata) which you could open with the NP++ or other advanced text editors.

You could directly edit the files if you want. However, it’s better to create another file so that it’s easier to track and you don’t have to do it again when the game is updated.

Just in case you’re as lazy as my 10 years old daughter, I will show you how to do it (which is also useful for the “correct” one).

Find the entry of the Fireball spell on the previous file (attack.gamedatabundle). After you found the entry, find the line that show “AffectTarget: All” and change it to “AffectTarget: Hostile“. That’s it!

Don’t forget to save the file before closing.

That’s the short way.

Mod it correctly…

For the civilized way, first, you need to make “override” folder if it isn’t in the Pillars_of_Eternity_Data (C:\Program Files (x86)\Steam\steamapps\common\Pillars of Eternity II\PillarsOfEternityII_Data\override) folder.

Inside the “override” folder, create a new folder with the name of your mod. For instance, “loveable/friendly/cute fireball” or any name you prefer.

After that, make a new folder named “design” inside your mod folder. Last, make a new folder again named “gamedata”.

After that, create a text file in the last folder with your mod name or even your ex-girlfriend name if you’re feeling peachy.

The only things that matter are the names and structure of the ‘override,’ ‘design,’ and ‘gamedata’ folders.

The final path for your mod should resemble this example: “C:\Program Files (x86)\Steam\steamapps\common\Pillars of Eternity II\PillarsOfEternityII_Data\override\NoFriendlyFire_BombsAndScrolls\design\gamedata“.

Paste this template into your blank text before adding anything else, and use it as a template for any mods you create in the future:

{
“GameDataObjects”: [

]
}

After that, find the Fireball entry (Fireball_Aoe) in the previous file I mentioned. Copy these lines on that entry and paste it inside the “[]”:

{
“$type”: “Game.GameData.AttackAOEGameData, Assembly-CSharp”,
“DebugName”: “Fireball_Aoe”,
“ID”: “5bc9f76b-2113-409f-81c0-5096e66974be”,
“Components”: [{

“$type”: “Game.GameData.AttackBaseComponent, Assembly-CSharp”,

Since you only want to disable friendly fire, you don’t need the entire entry. Simply find the relevant line (specifically, “AffectedTargetType”: “All”), copy it, and paste it below the $type line. Change it to “Hostile” as mentioned in the short method. Don’t forget to close the brackets before saving. The final text should look like this:

{
“GameDataObjects”: [
{
“$type”: “Game.GameData.AttackAOEGameData, Assembly-CSharp”,
“DebugName”: “Fireball_Aoe”,
“ID”: “5bc9f76b-2113-409f-81c0-5096e66974be”,
“Components”: [{
“$type”: “Game.GameData.AttackBaseComponent, Assembly-CSharp”,
“AffectedTargetType”: “All”
}]
}
]
}

Save the text file and change the extension into .gamedatabundle. If you’re not sure with code, you could use the online JSON editor I’ve mentioned to check if it’s broken or not.

Creating new GameData / Object

After we learn the simple thing, let’s get to the interesting part.

Let’s say for this tutorial, you want to create a new weapon. Usually, I just find an entry for a weapon (or the same gamedata type) and edit that. So, let’s find one. For items, you can find the data on items.gamedatabundle (in “exported” folder).

For now, let’s use this entry:

{
“$type”: “Game.GameData.WeaponGameData, Assembly-CSharp”,
“DebugName”: “Great_Sword”,
“ID”: “3530e7a2-ec4f-4d5f-a436-53e26ed3e075”,
“Components”: [{
“$type”: “Game.GameData.ItemComponent, Assembly-CSharp”,
“DisplayName”: 11,
“DescriptionText”: 262,
“FilterType”: “Weapons”,
“InventoryAudioEventListID”: “d9ef8ec9-f1fb-4d0b-88b7-49d7c0310019”,
“IsQuestItem”: “false”,
“IsIngredient”: “false”,
“IsCurrency”: “false”,
“IsAdventuringItem”: “false”,
“CanSellForFullValue”: “false”,
“MaxStackSize”: 1,
“NeverDropAsLoot”: “false”,
“CanBePickpocketed”: “true”,
“IsUnique”: “false”,
“Value”: 50,
“IconTextureSmall”: “gui/icons/items/weapons/great_sword/great_sword_s.png”,
“IconTextureLarge”: “gui/icons/items/weapons/great_sword/great_sword_l.png”,
“PencilSketchTexture”: “”,
“InspectOnUseButton”: [],
“IsPlaceholder”: “false”
}, {
“$type”: “Game.GameData.EquippableComponent, Assembly-CSharp”,
“EquipmentType”: “GreatSword”,
“EquipmentSlot”: “BothPrimaryAndSecondary”,
“AppearancePiece”: {
“ModelVisualDataPath”: “prefabs/items/appearance/weapons/great_sword/great_sword01.asset”
},
“ItemModsIDs”: [],
“OnEquipVisualEffects”: [],
“RestrictedToClassIDs”: [],
“RestrictedToPlayer”: “false”,
“ProficientAbilityID”: “0b5fe616-3d6d-460d-a02d-28a1b4217796”,
“CannotUnequip”: “false”,
“ItemRendererPrefab”: “prefabs/itemrenderers/genericitemrenderer.prefab”,
“ItemModel”: “art/character/weapons/great_sword/great_sword01/w_gs01.fbx”,
“AnimationController”: “”,
“PaperdollOverrideRenderer”: “”,
“AttackSummonID”: “00000000-0000-0000-0000-000000000000”,
“CannotSheathe”: “false”,
“PropVisualEffects”: []
}, {
“$type”: “Game.GameData.WeaponComponent, Assembly-CSharp”,
“Stance”: “TwoHandedClosedGrip”,
“AnimationStanceID”: “2bfb014c-53e1-44d0-82c8-3c3ff7a6741e”,
“StatusEffectsOnLaunchIDs”: [],
“IsDisplayedWhenAlternate”: “true”,
“IsUniversalType”: “false”,
“AttackID”: “1d10eee8-c68a-4593-8075-7a2e19db6602”,
“NoiseLevelID”: “15743f94-1026-40b0-8e13-a667b3f66f63”,
“ForceBackScabbard”: “true”,
“ScabbardAppearancePiece”: {
“ModelVisualDataPath”: “prefabs/items/appearance/weapons/great_sword/a_great_sword01_scabbard.asset”
},
“ScabbardRendererPrefab”: “prefabs/itemrenderers/genericitemrenderer.prefab”,
“ScabbardModel”: “”,
“AudioEventListID”: “00000000-0000-0000-0000-000000000000”
}
]
}

That is an entry for a simple Great Sword from the game. Let’s edit that to make a new Great Sword.

Any new game object needs a new ID (UUID). That’s why I put the link for UUID Generator on the modding tools. Just open the site and it will create a new random UUID. Put the new ID you get from that site on the “ID” value like this:

“ID”: “3530e7a2-0000-0000-0000-53e26ed3e075”

You could change the name and description of your new item by changing these lines:

“DisplayName”: 11,
“DescriptionText”: 262,

Those numbers refer to another entry in the ‘localized’ folder. Let’s leave them as they are for now, or you can use another name from a different item by copying those numbers.

The next important part is this line:

“ModelVisualDataPath”: “prefabs/items/appearance/weapons/great_sword/great_sword01.asset”

That line will change your item model. Usually, I just use another weapon’s model. Let’s say, I want it to have Wahai Poraga’s model (a poleaxe). It doesn’t have to be the same type actually.

However, if you select models from different types of weapons, the positioning can sometimes appear odd when equipped. You can visualize whether it’s suitable for the animation. For example, you can choose a Great Sword model for swords, axes, or other one-handed melee weapons, as the animations aren’t drastically different. On the other hand, avoid using a Blunderbuss model if you’re creating a new flail.

The most crucial part of this new item data is the ‘ItemMod’ line, as this is where your item can receive special effects or enchantments. For this initial tutorial, I suggest finding item mods from other items. Maybe next time, I’ll share how to create your own item mod with new status effects.

Here’s how I find other ItemMods for my new weapon.

Let’s say I’m interested in using Modwyr’s and Scordeo’s Trophy’s enchantments. The effects I want to use are ‘Eager Lover’ and ‘Opening Barrage.’ Use the game to discover other interesting status effects you’d like to include.

Open items.gamedatabundle again and search “eager”. You will find this line:

“DebugName”: “Modwyr_Eager_Lover”

Ensure that it’s an ItemModGameData by seeing the line above it like this:

“$type”: “Game.GameData.ItemModGameData, Assembly-CSharp”,
“DebugName”: “Modwyr_Eager_Lover”,

Copy the ID of that ItemMod, which is “dec577b7-e428-4811-aa78-7a709ba85d96”, and paste it into the ‘ItemMods’ section of your new item. Next, find the UUID for the ‘Opening Barrage’ item mod in the same way and include it in your item.

Here’s an example of the ‘ItemMods’ section after adding those two item mods:

“ItemModsIDs”: [“dec577b7-e428-4811-aa78-7a709ba85d96”, “6aec3a8e-5d9f-40c5-8578-5ecb800df268”],

That’s it! Now you have a new greatsword with new status effects. Use the console command to test your new item, as adding it to a store would require a separate tutorial. Feel free to add more enchantments if you’d like. However, I haven’t tested the maximum number of item mods an item can have.


Hopefully, with this short tutorial, you can now create simple mods. If you have any questions, don’t hesitate to ask. Alternatively, you can also join the official modding thread on the Obsidian forum, which I’ve linked earlier.

You can also download my mods on Nexus site to see an example of new item modding that I’ve created. If this kind of tutorial interests many players, I’ll continue with more advanced topics, such as creating new status effects or introducing new gameplay rules, similar to what I did with my Difficulty Mod. Cheers!

Yabes Elia

Yabes Elia

An empath, a jolly writer, a patient reader & listener, a data observer, and a stoic mentor

One thought on “Step-by-Step Deadfire Modding Tutorial and Tools

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.