deadfire modding tutorial

Step-by-Step Deadfire Modding Tutorial and Tools

Even though it has many flaws and bugs, I still think PoE 2: Deadfire is an enjoyable game. Moreover, it has quite easy modding access which keeping me play this game even after 400 hours. Its modding process is quite tedious actually, but still easy to figure it out.

I don’t even have programming background. So, if I can do it, you can do it too. Hopefully, with this Deadfire modding tutorial, you could make your experience on playing Deadfire more enjoyable.

Deadfire Modding Tools and References

First thing first. These are must-have tools for me to mod Deadfire.

1. Notepad++ or other text editors

You could definitely use other text editors. It’s just NP++ is the only advanced text editor that I’m familiar with.

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

I use NP++ plugin (JSTool) for JSON format and another online JSON editor. These two are must-have for me because they can help me detect broken line / 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 show you editing the data but also create new entry, my brain needs help creating dozens digit of random numbers.

Those 3 things are the must-have tools for me to show the tutorial here.

Beside those tools, let me put the link on some references that you may need to create your own mod.

4. Modding Thread on Official Obsidian Forum

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

5. Nexus Mods for Mods Collection

If you are too lazy to create your own mod, you could pick from hundreds of mods here. However, I put it here so you can use it as references to make a new mod too by looking at the files created by the others.

6. Mod Documentation from Obsidian

I think it needs better structure to make it easier to find information. However, this is place is a must if you want to step into an advanced stage 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, make a new folder again named with your mod. In this case, “loveable/ friendly/ cute fireball” or anything you like.

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 matters are the name and the structure of “overide”, “design”, and “gamedata” folders.

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

Paste this into your blank text before anything else and make this a template for any mod you want to create in the future:

{
“GameDataObjects”: [

]
}

After that, find the Fireball entry (Fireball_Aoe) in the previous file I mentioned. Copy this 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 just want to make it no friendly fire, you don’t need the entire entry. Just find the relevant line (which is “AffectedTargetType”: “All”), copy and paste it below the “$type” line and change it to “Hostile” like I’ve mentioned on the short way. Don’t forget to close the brackets before saving. So, the final text will be 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 on “localized” folder. Let’s leave it as it is right now or you could use another name from another item by copy the 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 pollaxe). It doesn’t have to be the same type actually.

However, if you pick models from different type of weapon, sometimes the position will be weird when you’re equipping them. You could actually picture yourself if it’s suitable for the animation. For example, you could pick a Great Sword model for Sword, Axe, or other 1-handed weapon melee type since the animation is not that different. In contrast, don’t pick Blunderbuss model if you want to create a new Flail.

The most important part of this new item data is the ItemMod line since this is the part where your item could get special effect / enchantment. For this first tutorial, I suggest to find item mod from other items. Maybe next time, I will share on how to create your own item mod with new status effects.

This is how I find other ItemMods for my new weapon.

Let’s say I’m interested in on giving Modwyr’s and Scordeo’s Trophy’s enchantments. The effects that I’m interested to use are “Eager Lover” and “Openning Barrage”. Use the game to find other interesting status effects that you want.

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

“DebugName”: “Modwyr_Eager_Lover”

Ensure it 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 put it on the ItemMods part on your new item. Next, let’s find the UUID for Openning Barrage item mod using the same way and put it on your item.

This is the sample of the ItemMods part after you add those 2 item mods:

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

That’s it! Now you have a new great sword that have new status effects. Use the console command to test your new item since it needs another article to add your new item in a store. You could put more enchantments if you want. However, I haven’t test the maximum item mods an item could have.


Hopefully, now you could create simple mods from this short tutorial. If you have any question, please, don’t hesitate to ask. Or, you could also join the official modding thread on Obsidian forum that I put the link before.

You could also download my mods on Nexus site to see an example of new item modding that I create. If this kind of tutorial is interesting for many players, I’ll continue the tutorial for the advanced part like creating new status effects or introducing new gameplay rules like what I’ve done for my Difficulty Mod. Cheers!

Yabes Elia

Have been playing around in the gaming industry since December 2008. A true believer of Johan Huizinga's saying, "let my playing be my learning". That's why I'm living my games and playing with life.

Leave a Reply

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