Test Page

This tutorial is for Dark Souls III specifically, although most aspects are similar or the same in the other games.

In order to follow along, you will need to use Yapped and Yabber.

Adding a Weapon

You first need to find where the weapons are defined. In Yapped, this is the EquipParamWeapon file. Click on it and bring up the list. You will see that all weapons have an unique ID, and that the infused versions of the weapons are at +100 intervals from the base ID.

It is important to know that the game expects the infused versions to be +100 from each other, and that reinforcement is handled by adding +1 (to +15) to the base ID. This means you must make sure you add new weapons outside of these ranges, otherwise you will be overriding existing weapons, as the game will load your badly ID'd row incorrectly.

Let's say you want to add a new dagger. It would be best to base your dagger on an existing entry, saving time and effort, as you will only need to edit the fields you want to change, rather than filling in blank fields.

So, start off by duplicating an existing weapon and assigning it a unique and valid ID. This will be your base weapon entry.

Customise the Weapon

Having created a new base weapon, you will now want to edit the properties of the weapon to achieve your vision. The following tables will cover commonly used fields:

General

Field Description
behaviorVariationId This controls the behavior used by the weapon. Behavior determines the multipliers used during specific moves (known as 'motion values') and which bullets and effects to apply.
sortId This controls the position of the weapon in your menu. Note that reinforcement will add the current level of reinforcement to this ID, so you need to space the ID properly between infusion entries.
weight The impact this weapon has on equipment load.
fixPrice The soul cost to repair this weapon.
basicPrice The soul cost to reinforce this weapon.
sellValue The souls given when this weapon is sold.
equipModelId The part model ID. Determines the part model used by the weapon.
iconId The icon index ID. Determines the icon used by the weapon.
durability The default durability of the weapon.
durailityMax The max durability of the weapon.
originEquipWep Contains the base weapon ID. Determines the max reinforcement level and what an infused weapon returns to when uninfused.
materialSetId Determines the EquipMtrlSetParam row range used for infusion and reinforcement.
reinforceTypeId Determines the ReinforceParamWeapon row range used to determine the reinforcement multipliers.
displayTypeId Determines the weapon category displayed in the weapon menu.
spEffectBehaviorId The SpEffect to apply to the enemy on hit. Typically used for Poison, Bleed, etc.
residentSpEffectId The SpEffect to apply passively.
properStrength Determines the level of STR required to wield this weapon.
properAgility Determines the level of DEX required to wield this weapon.
properMagic Determines the level of INT required to wield this weapon.
properFaith Determines the level of FTH required to wield this weapon.
shopPrice The soul cost of the weapon in a shop.
Unk66 (Infusion Cost) The soul cost to infuse this weapon.

Moveset

Field Description
weaponCategory Determines the weapon category.
wepmotionCategory Determines the base moveset used by the weapon. Corresponds to TAE ID.
guardmotionCategory Determines the moveset used whilst guarding.
spAttribute Determines the hit effect of the weapon.
spAtkCategory Determines the override moveset used by the weapon. Corresponds to TAE ID.
wepmotionOneHandId Determines the hold position whilst the weapon is one-handed.
wepmotionBothHandId Determines the hold position whilst the weapon is two-handed.
swordArtId Determines the SwordArtsParam ID to use.

Booleans

Field Description
rightHandEquipable Determines whether this weapon can be equipped in the right-hand.
leftHandEquipable Determines whether this weapon can be equipped in the left-hand.
bothHandEquipable Determines whether this weapon can be two-handed.
arrowSlotEquipable Determines whether this weapon is an Arrow.
boltSlotEquipable Determines whether this weapon is a Bolt.
enableGuard Determines whether this weapon can guard (requires TAE support for actual effect).
enableParry Determines whether this weapon can parry (requires TAE support for actual effect).
enableMagic Determines whether this weapon can cast Sorceries (requires TAE support for actual effect).
enablePyromancy Determines whether this weapon can cast Pyromancies (requires TAE support for actual effect).
enableMiracle Determines whether this weapon can cast Miracles (requires TAE support for actual effect).
isNormalAttackType Display Standard as the damage type in the weapon menu. Actual type is defined in behavior.
isBlowAttackType Display Strike as the damage type in the weapon menu. Actual type is defined in behavior.
isSlashAttackType Display Slash as the damage type in the weapon menu. Actual type is defined in behavior.
isThrustAttackType Display Thrust as the damage type in the weapon menu. Actual type is defined in behavior.
isEnhance Determines whether this weapon can be buffed via SpEffects.
isCustom Determines whether this weapon can be reinforced.

Damage and Absorption

Field Description
correctStrength The base scaling value used for STR. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
correctAgility The base scaling value used for DEX. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
corretMagic The base scaling value used for INT. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
corretFaith The base scaling value used for FTH. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
correctLuck The base scaling value used for LCK. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
antiDemonDamageRate Modifies damage against Demon-type enemies.
antUndeadDamageRate Modifies damage against Undead-type enemies (i.e. Skeletons).
antHollowDamageRate Modifies damage against Hollow-type enemies.
antAbyssalDamageRate Modifies damage against Abyssal-type enemies.
atkBasePhysics The base Physical damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
atkBaseMagic The base Magic damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
atkBaseFire The base Fire damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
atkBaseThunder The base Lightning damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
atkBaseDark The base Dark damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
atkBaseStamina The base Stamina damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
saWeaponDamage The base Poise damage. Note that this is multiplied by reinforcement (via ReinforceParamWeapon).
correctType Determines the stat graph used for Physical damage (i.e. how effective a stat is).
Unk21 (Correction Type: Magic) Determines the stat graph used for Magic damage (i.e. how effective a stat is).
Unk22 (Correction Type: Fire) Determines the stat graph used for Fire damage (i.e. how effective a stat is).
Unk23 (Correction Type: Lightning) Determines the stat graph used for Lightning damage (i.e. how effective a stat is).
Unk26 (Correction Type: Dark) Determines the stat graph used for Dark damage (i.e. how effective a stat is).
StaminaConsumeRate The stamina multiplier applied to the stamina costs defined in behavior.
throwAtkRate The critical value applies to backstab and parry moves.
bowDistRate The bow distance added to ammunition range.
Unk12 (Poise Health Multiplier) Determines the multiplier to apply to Toughness (when applied via InvokeToughness in TAE).
attackElementCorrectId Determines how each stat affects each damage type (i.e. how FTH can effect Physical scaling on specific weapons).

Defense

Field Description
physGuardCutRate The Physical absorption to use when guarding.
magGuardCutRate The Magic absorption to use when guarding.
fireGuardCutRate The Fire absorption to use when guarding.
thunGuardCutRate The Lightning absorption to use when guarding.
darkGuardCutRate The Dark absorption to use when guarding.
poisonGuardResist The Poison resist to use whilst guarding.
toxicGuardResist The Toxic resist to use whilst guarding.
bloodGuardResist The Bleed resist to use whilst guarding.
curseGuardResist The Curse resist to use whilst guarding.
Unk31 (Frost Guard Resist) The Frost resist to use whilst guarding.

Supporting Infusions

You may want to support infusions for your weapon. Infusions are determines based on ID, with each infusion being +100 to the base weapon ID.

To support infusions in vanilla, you will need to duplicate your base weapon 15 times and adjust the following properties:

  • sortId
  • materialSetId
  • reinforceTypeId
  • attackElementCorrectId

For the exact changes, study the existing infusions to see what they add in comparison to the base weapon.

Localizing a Weapon

Having created a weapon, you will want to localize your weapon properly, so it displays in game with a proper name and description.

To start with, you need to unpack item_dlc2.msgbnd.dcx using Yabber. After that, unpack the .fmg files using Yabber also. You can now edit the localization by editing the .xml files.

To add a new name, open the 武器名.fmg.xml file and add a new definition with your weapon ID (and the infused versions if you are supporting infusions).

To add a new description, open the 武器うんちく.fmg.xml file and add a new definition with your weapon ID (and the infused versions if you are supporting infusions).

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License