Adding Custom Player Outfits - Kamzik123/AnvilToolkit-Resources GitHub Wiki
This tutorial walks you through adding a new craftable player outfit to AC4: Black Flag by editing the game's XML data files. The outfit will appear in the crafting menu, and once crafted, will be equipable from the hideout wardrobe and the Jackdaw cabin outfit selection.
Game compatibility: This tutorial was written for and tested on Assassin's Creed IV: Black Flag only. Other AnvilNext titles (AC Rogue, AC3, etc.) may use a similar system but this has not been tested on those games.
A note on
Pathvs ID: Throughout the XML examples you'll seePathattributes on References, Handles, and ObjectPtrs. These paths are not used by the game engine — the engine locates and loads all files exclusively by their numeric ID. ThePathvalues are filled in by AnvilToolkit as a human-readable convenience so you can tell which file is being referenced. When modding, the ID is what matters.
A note on StringID: The
StringIDfield inUIStringelements refers to a localization key in the game's localization package. If the ID doesn't exist in the localization data, nothing will display in-game.
WARNING: Back up your save file before making any of these edits. Modifying game data files — especially the PlayerProgressionManager and EconomicSystemSettings — can corrupt your save. Always keep a backup of your save folder before testing.
- Overview
- What You Need Before Starting
- Step 1: Create the Outfit InventoryItemSettings
- Step 2: Create the Crafting InventoryItemSettings
- Step 3: Create the Outfit UIInventoryItem
- Step 4: Create the Crafting UIInventoryItem
- Step 5: Create the UICraftingRecipe
- Step 6: Register in CraftingContext
- Step 7: Register in the Outfit Page
- Step 8: Register in EconomicSystemSettings
- Step 9: Add OutfitItemDataMapping in PlayerProgressionManager
- Step 10: Add PlayerAttributesBuilder in PlayerProgressionManager
- Step 11: Add WorldUpgradeInventorySettings in PlayerProgressionManager
- How It All Connects
- Reference: Existing Outfit EntityBuilders
Adding an outfit requires creating 5 new files and modifying 4 existing files. The outfit system uses a two-item design: a crafting item (Category 9 QuestItem) that gets created when the player crafts, and the actual outfit (Category 38 Outfit) that gets unlocked automatically once the crafting item enters the inventory.
| New Files | Type | Purpose |
|---|---|---|
| Outfit InventoryItemSettings | Item definition | The wearable outfit (Category 38) |
| Crafting InventoryItemSettings | Item definition | The crafting result (Category 9) |
| Outfit UIInventoryItem | UI data | Name/description/icon for wardrobe |
| Crafting UIInventoryItem | UI data | Name/description/icon for crafting menu |
| UICraftingRecipe | Recipe | Ingredients and crafted item |
| Modified Files | What to add |
|---|---|
| CraftingContext | Recipe reference |
| ACGA_UI_Page_Shop_Outfits | Outfit UIInventoryItem reference (controls hideout wardrobe and Jackdaw cabin) |
| EconomicSystemSettings | Both InventoryItemSettings references |
| PlayerProgressionManager_ACGA | OutfitItemDataMapping + PlayerAttributesBuilder + WorldUpgradeInventorySettings |
- An EntityBuilder for your outfit. You can create a custom one or reuse an existing one for testing.
- A TextureMapSpec for the outfit's inventory icon. You can reuse an existing one for testing.
- Ingredient InventoryItemSettings IDs if you want the recipe to require crafting materials. You can leave the ingredients list empty for testing.
- Unique IDs for all new objects. Pick a range that doesn't conflict with existing game data.
This is the actual wearable outfit item. It uses Category 38 (InvItem_Outfit).
Important: The SubCategory must be a unique value not used by any other outfit. And Locked must be False.
<InventoryItemSettings ID="[OUTFIT_SETTINGS_ID]">
<Value Name="Locked" Type="Bool">False</Value>
<Value Name="IsEconomicQuestItem" Type="Bool">False</Value>
<Value Name="Rechargeable" Type="Bool">False</Value>
<Value Name="IsSellable" Type="Bool">False</Value>
<Value Name="ULCMode" Type="Enum" EnumName="ULCMode" ValueName="NotULCItem">0</Value>
<Value Name="Price" Type="UInt32">0</Value>
<UIString Name="Name" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My Custom Outfit</Value>
</UIString>
<UIString Name="Description" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My custom outfit description</Value>
</UIString>
<InventoryItemCategorization ID="[UNIQUE_ID]">
<Value Name="Category" Type="Enum" EnumName="InventoryItemCategory" ValueName="InvItem_QuestItem">38</Value>
<Value Name="SubCategory" Type="Int32">32</Value>
</InventoryItemCategorization>
<Value Name="Rank" Type="Int32">0</Value>
<Value Name="StoreInInventory" Type="Bool">True</Value>
</InventoryItemSettings>Note: Despite the
ValueNameshowingInvItem_QuestItem, the actual value38corresponds toInvItem_Outfit. The ValueName is a display label in the toolkit and doesn't affect the game — only the numeric value matters.
This is the intermediate item that gets created when the player crafts. It uses Category 9 (InvItem_QuestItem).
Important: Locked must be False — this controls whether the crafting recipe appears as available.
<InventoryItemSettings ID="[CRAFTING_SETTINGS_ID]">
<Value Name="Locked" Type="Bool">False</Value>
<Value Name="IsEconomicQuestItem" Type="Bool">False</Value>
<Value Name="Rechargeable" Type="Bool">False</Value>
<Value Name="IsSellable" Type="Bool">False</Value>
<Value Name="ULCMode" Type="Enum" EnumName="ULCMode" ValueName="NotULCItem">0</Value>
<Value Name="Price" Type="UInt32">0</Value>
<UIString Name="Name" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My Custom Outfit</Value>
</UIString>
<UIString Name="Description" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My custom outfit description</Value>
</UIString>
<InventoryItemCategorization ID="[UNIQUE_ID]">
<Value Name="Category" Type="Enum" EnumName="InventoryItemCategory"
ValueName="InvItem_QuestItem">9</Value>
<Value Name="SubCategory" Type="Int32">0</Value>
</InventoryItemCategorization>
<Value Name="Rank" Type="Int32">0</Value>
<Value Name="StoreInInventory" Type="Bool">True</Value>
</InventoryItemSettings>This controls how the outfit appears in the hideout wardrobe and Jackdaw cabin outfit selection.
<UIInventoryItem ID="[OUTFIT_UI_ID]">
<Value Name="InventoryItemSettingsRef" Type="UInt64" Path="[OUTFIT_SETTINGS_ID]">[OUTFIT_SETTINGS_ID]</Value>
<UIString Name="Name" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My Custom Outfit</Value>
</UIString>
<UIString Name="Description" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My custom outfit description</Value>
</UIString>
<Value Name="TextureMapSpecRef" Type="UInt64" Path="[ICON_PATH]">[ICON_TEXTURE_ID]</Value>
</UIInventoryItem>This controls how the item appears in the crafting menu.
<UIInventoryItem ID="[CRAFTING_UI_ID]">
<Value Name="InventoryItemSettingsRef" Type="UInt64" Path="[CRAFTING_SETTINGS_ID]">[CRAFTING_SETTINGS_ID]</Value>
<UIString Name="Name" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My Custom Outfit</Value>
</UIString>
<UIString Name="Description" ID="[UNIQUE_ID]">
<Value Name="StringID" Type="Int32">-1</Value>
<Value Name="DevString" Type="String">My custom outfit description</Value>
</UIString>
<Value Name="TextureMapSpecRef" Type="UInt64" Path="[ICON_PATH]">[ICON_TEXTURE_ID]</Value>
</UIInventoryItem>This defines the crafting recipe — what ingredients are needed and what gets crafted.
The CraftedItem must point to the Crafting InventoryItemSettings (Category 9), not the outfit itself. If you point it to the Category 38 outfit directly, crafting will silently fail (no materials consumed, no item created).
<?xml version="1.0" encoding="utf-8"?>
<?info tool="AnvilToolkit" toolVersion="1.3.5" type="1"?>
<Object ID="[RECIPE_ID]" Type="UICraftingRecipe" IsManaged="true">
<BaseObject ID="[UNIQUE_ID]" Name="RecipeName" Type="UIString">
<Signed32 Name="OasisLineID">-1</Signed32>
<LString Name="TempString">My Custom Outfit</LString>
</BaseObject>
<Handle Name="CraftedItem" Type="InventoryItemSettings" PointerType="Inlined" Path="[CRAFTING_SETTINGS_ID]">[CRAFTING_SETTINGS_ID]</Handle>
<DynamicSmallArray Name="Ingredients" Type="BaseObject">
<!-- Add ingredients here. Example: -->
<!--
<BaseObject ID="[UNIQUE_ID]" Type="CraftingIngredient">
<Handle Name="Ingredient" Type="InventoryItemSettings" PointerType="Inlined" Path="[INGREDIENT_ID]">[INGREDIENT_ID]</Handle>
<String Name="MapIconID">ANIMAL_WhiteJaguar_Menu</String>
<Unsigned32 Name="Quantity">1</Unsigned32>
</BaseObject>
-->
</DynamicSmallArray>
<Handle Name="AFSImage" Type="TextureMapSpec" PointerType="Inlined" Path="[ICON_PATH]">[ICON_TEXTURE_ID]</Handle>
<Unsigned32 Name="PlayerValue">0</Unsigned32>
<Enum Name="CraftingCategory" Type="CraftingCategory" Value="CraftingCategory_Outfit">4</Enum>
<Bool Name="IsUnique">True</Bool>
</Object>File: CraftingContext.xml (file 2112)
Add your recipe reference to the UICraftingRecipe array:
<Reference Type="UICraftingRecipe" PointerType="External" ReferenceType="0" Path="[RECIPE_ID]">[RECIPE_ID]</Reference>File: ACGA_UI_Page_Shop_Outfits.xml (file 6147)
Add your outfit UIInventoryItem reference to the InventoryItems array:
<FileReference IsGlobal="0" Path="[OUTFIT_UI_ID]">[OUTFIT_UI_ID]</FileReference>Note: The exact element name (
FileReferencevsReference) may vary depending on your exporter format.
File: EconomicSystemSettings (file 111)
Recommended to use Schema-Based exporter (Shift+Right Click the file and export Schema-Based)
Add both InventoryItemSettings to the item reference list — the outfit (Category 38) and the crafting item (Category 9):
<Reference Type="InventoryItemSettings" PointerType="External" ReferenceType="0" Path="[OUTFIT_SETTINGS_ID]">[OUTFIT_SETTINGS_ID]</Reference>
<Reference Type="InventoryItemSettings" PointerType="External" ReferenceType="0" Path="[CRAFTING_SETTINGS_ID]">[CRAFTING_SETTINGS_ID]</Reference>File: PlayerProgressionManager_ACGA.xml (file 107)
Find the OutfitItemEntityBuilderMapping array and add your mapping entry. This tells the game which EntityBuilder to use for your outfit.
<BaseObjectPtr ID="[UNIQUE_ID]" Type="OutfitItemDataMapping" PointerType="Inlined">
<Handle Name="OutfitItem" Type="InventoryItemSettings" PointerType="Inlined" Path="[OUTFIT_SETTINGS_ID]">[OUTFIT_SETTINGS_ID]</Handle>
<Handle Name="CorrespondingEntityBuilder" Type="EntityBuilder" PointerType="Inlined" Path="[ENTITY_BUILDER_ID]">[ENTITY_BUILDER_ID]</Handle>
</BaseObjectPtr>File: PlayerProgressionManager_ACGA.xml (file 107)
Find the PlayerAttributesBuilder array (the list of PlayerAttributesBuilder ObjectPtrs, not to be confused with CharacterAttributesBuilderData). Add a new entry for your outfit's EntityBuilder. Without this, the game will fall back to the default outfit model even though the OutfitItemDataMapping exists.
<ObjectPtr ID="[UNIQUE_ID]" Type="PlayerAttributesBuilder" PointerType="Inlined" IsManaged="true">
<Handle Name="EntityBuilder" Type="EntityBuilder" PointerType="Inlined" Path="[ENTITY_BUILDER_ID]">[ENTITY_BUILDER_ID]</Handle>
<BaseObject ID="[UNIQUE_ID]" Name="ProgressionCharacterSelector" Type="ProgressionCharacterSelector">
<Handle Name="ProgressionCharacter" Type="ProgressionCharacter" PointerType="Inlined" Path="25725995267">25725995267</Handle>
</BaseObject>
<Bool Name="CanBuilderBeOverriden">True</Bool>
<DynamicSmallArray Name="AgeSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="ChestArmorSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="BootsSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="RightArmSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="ShouldersSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="LeftArmSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="RightArmHBSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="PoisonBladeSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="MetalFistSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="KnivesSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="HealthObjectPouchSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="SmokeBombPouchSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="ParachutesPouchSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="CapeSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="ColorSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="NarrativeSelector" Type="ObjectPtr" />
<DynamicSmallArray Name="AssassinMarkSelector" Type="ObjectPtr" />
</ObjectPtr>Note:
25725995267is the ID of the main player ProgressionCharacter. This value is the same for all outfits.
File: PlayerProgressionManager_ACGA.xml (file 107)
Find the WorldUpgradeInventorySettingsList array inside the InventoryUpgradeRuleSettingsRepository and add a new entry. This is the mechanism that automatically unlocks the outfit when the crafting item enters the player's inventory.
It has two states:
- State 0 (default): No condition, no actions.
- State 1 (upgrade): Monitors for the crafting QuestItem in the player's inventory. When detected, unlocks the outfit and adds it to the gained inventory.
<ObjectPtr ID="[UNIQUE_ID]" Type="WorldUpgradeInventorySettings" PointerType="Inlined" IsManaged="true">
<DynamicSmallArray Name="UpgradeInventoryStates" Type="ObjectPtr">
<!-- State 0: Default (no condition, no actions) -->
<ObjectPtr ID="[UNIQUE_ID]" Type="DefaultWorldUpgradeRuleState" PointerType="Inlined">
<ObjectPtr Name="WorldUpgradeCondition" PointerType="Null" />
<DynamicSmallArray Name="WorldUpgradeActions" Type="ObjectPtr" />
</ObjectPtr>
<!-- State 1: Triggered when crafting item is in inventory -->
<ObjectPtr ID="[UNIQUE_ID]" Type="DefaultWorldUpgradeRuleState" PointerType="Inlined">
<ObjectPtr ID="[UNIQUE_ID]" Name="WorldUpgradeCondition" Type="WorldUpgradeInventoryCondition" PointerType="Inlined">
<ObjectPtr ID="[UNIQUE_ID]" Name="ConditionHolder" Type="BasicInventoryConditionHolder" PointerType="Inlined">
<Object ID="[UNIQUE_ID]" Name="InventoryCondition" Type="InventoryCondition" IsManaged="true">
<Bool Name="CheckAllCharacters">False</Bool>
<Bool Name="CheckItemsInSameCharacter">False</Bool>
<Bool Name="CheckAllItems">True</Bool>
<Bool Name="CheckCurrentAgainstMax">False</Bool>
<Enum Name="PlayerCharacterFilter" Type="PlayerCharacterFilter" Value="PlayerCharacterFilter_All">0</Enum>
<BaseObject ID="[UNIQUE_ID]" Name="ProgressionCharacterSelector" Type="ProgressionCharacterSelector">
<Handle Name="ProgressionCharacter" Type="ProgressionCharacter" PointerType="Inlined" Path="25725995267">25725995267</Handle>
</BaseObject>
<Enum Name="ItemType" Type="InventoryCondition::ItemType" Value="ItemType_Specific">1</Enum>
<DynamicSmallArray Name="InventoryItems" Type="Handle">
<!-- Points to CRAFTING item (Cat 9), NOT the outfit -->
<Handle Type="InventoryItemSettings" PointerType="Inlined" Path="[CRAFTING_SETTINGS_ID]">[CRAFTING_SETTINGS_ID]</Handle>
</DynamicSmallArray>
<Enum Name="InventoryCheckType" Type="InventoryCondition::InventoryCheckType" Value="InventoryCheckType_PlayerInventory">0</Enum>
<Enum Name="ItemLockStatus" Type="InventoryItemLockStatus" Value="InventoryItemLockStatus_Unlocked">1</Enum>
<Object ID="[UNIQUE_ID]" Name="ItemCategorization" Type="InventoryItemCategorization">
<Enum Name="Category" Type="InventoryItemCategory" Value="InvItem_Unset">0</Enum>
<Unsigned32 Name="SubCategory">0</Unsigned32>
</Object>
<Enum Name="ItemCategory" Type="InventoryItemCategory" Value="InvItem_Unset">0</Enum>
<Enum Name="ContainerCategory" Type="InventoryItemCategory" Value="InvItem_Unset">0</Enum>
<Enum Name="ComparisonType" Type="InventoryCondition::ComparisonType" Value="ComparisonType_Greater">3</Enum>
<Unsigned32 Name="Count">0</Unsigned32>
</Object>
</ObjectPtr>
<BaseObject ID="[UNIQUE_ID]" Name="ProgressionCharacterSelector" Type="ProgressionCharacterSelector">
<Handle Name="ProgressionCharacter" Type="ProgressionCharacter" PointerType="Inlined" Path="0">0</Handle>
</BaseObject>
</ObjectPtr>
<DynamicSmallArray Name="WorldUpgradeActions" Type="ObjectPtr">
<!-- Action 1: Unlock the outfit (set Locked = false) -->
<ObjectPtr ID="[UNIQUE_ID]" Type="WorldUpgradeAction" PointerType="Inlined">
<Enum Name="WorldUpgradeActionType" Type="WorldUpgradeActionType" Value="WorldUpgradeActionType_OnUpgrade">1</Enum>
<Bool Name="CanExecuteOffline">True</Bool>
<Enum Name="RevertMode" Type="AbstractWorldUpgradeAction::RevertMode" Value="RevertMode_Never">2</Enum>
<Bool Name="IsExecuteAllowedOnExternalCommit">False</Bool>
<ObjectPtr ID="[UNIQUE_ID]" Name="AIAction" Type="ActionItemSettingsLock" PointerType="Inlined" IsManaged="true">
<Enum Name="Type" Type="AIActionType" Value="AIActionType_Reversible">1</Enum>
<Enum Name="LockType" Type="ActionItemSettingsLock::LockType" Value="LockType_Unlock">1</Enum>
<DynamicSmallArray Name="InventoryItems" Type="Handle">
<!-- Points to OUTFIT item (Cat 38) -->
<Handle Type="InventoryItemSettings" PointerType="Inlined" Path="[OUTFIT_SETTINGS_ID]">[OUTFIT_SETTINGS_ID]</Handle>
</DynamicSmallArray>
</ObjectPtr>
</ObjectPtr>
<!-- Action 2: Add outfit to gained inventory -->
<ObjectPtr ID="[UNIQUE_ID]" Type="WorldUpgradeAction" PointerType="Inlined">
<Enum Name="WorldUpgradeActionType" Type="WorldUpgradeActionType" Value="WorldUpgradeActionType_OnUpgrade">1</Enum>
<Bool Name="CanExecuteOffline">False</Bool>
<Enum Name="RevertMode" Type="AbstractWorldUpgradeAction::RevertMode" Value="RevertMode_Never">2</Enum>
<Bool Name="IsExecuteAllowedOnExternalCommit">False</Bool>
<ObjectPtr ID="[UNIQUE_ID]" Name="AIAction" Type="ActionQuestItem" PointerType="Inlined" IsManaged="true">
<Enum Name="Type" Type="AIActionType" Value="AIActionType_Reversible">1</Enum>
<Enum Name="EntitySelectionMode" Type="AIActionEntity::EntitySelectionMode" Value="EntitySelectionMode_Context">0</Enum>
<Handle Name="Entity" Type="Entity" PointerType="Inlined" Path="0">0</Handle>
<Enum Name="TransactionType" Type="ActionQuestItem::TransactionType" Value="TransactionType_Add">0</Enum>
<DynamicSmallArray Name="ActionQuestItemInventoryItems" Type="ObjectPtr" />
<Object ID="[UNIQUE_ID]" Name="InventoryItems" Type="ActionQuestItemInventoryItemWrapper">
<DynamicSmallArray Name="Items" Type="ObjectPtr">
<ObjectPtr ID="[UNIQUE_ID]" Type="ActionQuestItemInventoryItem" PointerType="Inlined">
<!-- Points to OUTFIT item (Cat 38) -->
<Handle Name="InventoryItemSettings" Type="InventoryItemSettings" PointerType="Inlined" Path="[OUTFIT_SETTINGS_ID]">[OUTFIT_SETTINGS_ID]</Handle>
<Unsigned32 Name="Quantity">1</Unsigned32>
</ObjectPtr>
</DynamicSmallArray>
</Object>
<Bool Name="ForceAction">True</Bool>
<Bool Name="ForceCheckCharacterInventory">False</Bool>
<DynamicSmallArray Name="ActionQuestItemCategories" Type="ObjectPtr" />
<BaseObject ID="[UNIQUE_ID]" Name="ProgressionCharacterSelector" Type="ProgressionCharacterSelector">
<Handle Name="ProgressionCharacter" Type="ProgressionCharacter" PointerType="Inlined" Path="25725995267">25725995267</Handle>
</BaseObject>
<Bool Name="ShowTransactionOnHUD">False</Bool>
<Enum Name="TrackingSpendType" Type="ActionQuestItem::TrackingSpendType" Value="TrackingSpendType_Unknown">0</Enum>
<Enum Name="TrackingEarnType" Type="ActionQuestItem::TrackingEarnType" Value="TrackingEarnType_MissionRewards">0</Enum>
<Unsigned32 Name="PreviousQuantity">0</Unsigned32>
</ObjectPtr>
</ObjectPtr>
</DynamicSmallArray>
</ObjectPtr>
</DynamicSmallArray>
</ObjectPtr>Critical fields:
- The condition's
InventoryItemsmust point to the crafting item (Cat 9), not the outfit.- Both actions must point to the outfit item (Cat 38).
ForceActionmust beTrueon the ActionQuestItem — without this, the outfit won't be added to the gained inventory.
Player opens crafting menu
→ Game loads UICraftingRecipe from CraftingContext
→ Recipe shows as available (Crafting item has Locked = False)
Player crafts the recipe
→ Game creates the Cat 9 QuestItem and adds it to player inventory
→ Crafting ingredients are consumed
Inventory update triggers WorldUpgradeInventorySettings
→ Condition detects Cat 9 item in player inventory
→ Action 1: ActionItemSettingsLock unlocks the Cat 38 outfit (Locked → False)
→ Action 2: ActionQuestItem adds Cat 38 outfit to gained inventory
Outfit is now equipable
→ Shows in hideout wardrobe and Jackdaw cabin outfit selection
→ Game loads EntityBuilder from OutfitItemDataMapping when equipped
→ PlayerAttributesBuilder ensures the EntityBuilder loads correctly
You can use these for testing or as a base for custom outfits:
| Outfit | EntityBuilder ID | Path |
|---|---|---|
| Default | 11821907168 |
DataPC_extra_chr\CHR_P_EdwardKenway_Default |
| Mayan | 40580630714 |
DataPC_extra_chr\CHR_P_EdwardKenway_Mayan1stCiv_Outfit |
| Templar Armor | 40580630643 |
DataPC_extra_chr\CHR_P_EdwardKenway_TemplarArmor |
| Stealth | 40580630658 |
DataPC_extra_chr\CHR_P_EdwardKenway_Stealth_Outfit |
| Captain Drake | 40580630672 |
DataPC_extra_chr\CHR_P_EdwardKenway_Captain_Drake |
| Captain Morgan | 40580630700 |
DataPC_extra_chr\CHR_P_EdwardKenway_Captain_Morgan |
| Altair | 45806627405 |
DataPC_extra_chr\CHR_P_EdwardKenway_AltairOutfit |
| Ezio | 45806627434 |
DataPC_extra_chr\CHR_P_EdwardKenway_EzioOutfit |
| Connor | 45806627570 |
DataPC_extra_chr\CHR_P_EdwardKenway_ConnorOutfit |
| Hunter | 40580630686 |
DataPC_extra_chr\CHR_P_EdwardKenway_Hunter |
| Poacher | 40580630721 |
DataPC_extra_chr\CHR_P_EdwardKenway_Poacher |
| Whaler | 40580630693 |
DataPC_extra_chr\CHR_P_EdwardKenway_Whaler |
| Shark Hunter | 40580630707 |
DataPC_extra_chr\CHR_P_EdwardKenway_Shark_Hunter |
| Legend | 38189378033 |
DataPC_extra_chr\CHR_P_EdwardKenway_Legend |
| Stede Bonnet | 40580630665 |
DataPC_extra_chr\CHR_P_EdwardKenway_Stede_Bonnet |
| Haytham | 40580630679 |
DataPC_extra_chr\CHR_P_EdwardKenway_Haytham |