2025/05/16 Update

Expanded Warblade for epic progression.
Warblade's Aptitude Focus now works with all new weapons.
Expanded Knight of the Middle Circle for epic progression.
Added Swarm of Arrows to fighter bonus feat list.
Added Vile Martial Strike feats for all new weapons.
Added Sanctified Martial Strike feats for all new weapons.
Added missing iprp feats for Eagle Claw & Trident.
Bestow Power shouldn't work on the caster.
Spell Betrayal should only affect a target once per spell casting.
Sap is a Martial weapon.
Arcane Duelist's False Keenness now works with all new weapons.
Disciple of Dispater's Rusting Grasp now works on the appropriate new weapons.
Animate Object now works with all the new weapon types.
This commit is contained in:
Jaysyn904
2025-05-16 16:40:51 -04:00
parent 53c5a9789f
commit 95480e23dd
24 changed files with 3764 additions and 2785 deletions

View File

@@ -1744,7 +1744,176 @@ struct WeaponFeat GetAllFeatsOfWeaponType(int iWeaponType)
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_WHIP;
break;
}
// If the feat is blank when we get here, do a lookup series
case BASE_ITEM_DOUBLE_SCIMITAR: {
sFeat.Focus = FEAT_WEAPON_FOCUS_DOUBLE_SCIMITAR;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_DBL_SCIMITAR;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_DBL_SCIMITAR;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_DBL_SCIMITAR;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_DBL_SCIMITAR;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_DBL_SCIMITAR;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_DBL_SCIMITAR;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_DBL_SCIMITAR;
break;
}
case BASE_ITEM_EAGLE_CLAW: {
sFeat.Focus = FEAT_WEAPON_FOCUS_EAGLE_CLAW;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_EAGLE_CLAW;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_EAGLE_CLAW;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_EAGLE_CLAW;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_EAGLE_CLAW;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_EAGLE_CLAW;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_EAGLE_CLAW;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_EAGLE_CLAW;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_EAGLE_CLAW;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_EAGLE_CLAW;
break;
}
case BASE_ITEM_ELVEN_COURTBLADE: {
sFeat.Focus = FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_ELVEN_COURTBLADE;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_COURTBLADE;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_ELVEN_COURTBLADE;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_COURTBLADE;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_COURTBLADE;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_ELVEN_COURTBLADE;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_ELVEN_COURTBLADE;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_ELVEN_COURTBLADE;
break;
}
case BASE_ITEM_ELVEN_THINBLADE: {
sFeat.Focus = FEAT_WEAPON_FOCUS_ELVEN_THINBLADE;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_ELVEN_THINBLADE;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_ELVEN_THINBLADE;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_THINBLADE;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_ELVEN_THINBLADE;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_THINBLADE;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_THINBLADE;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_ELVEN_THINBLADE;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_ELVEN_THINBLADE;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_ELVEN_THINBLADE;
break;
}
case BASE_ITEM_ELVEN_LIGHTBLADE: {
sFeat.Focus = FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_ELVEN_LIGHTBLADE;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_ELVEN_LIGHTBLADE;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_ELVEN_LIGHTBLADE;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_ELVEN_LIGHTBLADE;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_ELVEN_LIGHTBLADE;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_ELVEN_LIGHTBLADE;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_ELVEN_LIGHTBLADE;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_ELVEN_LIGHTBLADE;
break;
}
case BASE_ITEM_FALCHION: {
sFeat.Focus = FEAT_WEAPON_FOCUS_FALCHION;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_FALCHION;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_FALCHION;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_FALCHION;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_FALCHION;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_FALCHION;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_FALCHION;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_FALCHION;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_FALCHION;
break;
}
case BASE_ITEM_GOAD: {
sFeat.Focus = FEAT_WEAPON_FOCUS_GOAD;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_GOAD;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_GOAD;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_GOAD;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_GOAD;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_GOAD;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_GOAD;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_GOAD;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_GOAD;
break;
}
case BASE_ITEM_HEAVY_MACE: {
sFeat.Focus = FEAT_WEAPON_FOCUS_HEAVY_MACE;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HEAVY_MACE;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HEAVY_MACE;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HEAVY_MACE;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_MACE;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_MACE;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HEAVY_MACE;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HEAVY_MACE;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HEAVY_MACE;
break;
}
case BASE_ITEM_HEAVY_PICK: {
sFeat.Focus = FEAT_WEAPON_FOCUS_HEAVY_PICK;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_HEAVY_PICK;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_HEAVY_PICK;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_HEAVY_PICK;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_HEAVY_PICK;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_HEAVY_PICK;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_HEAVY_PICK;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_HEAVY_PICK;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_HEAVY_PICK;
break;
}
case BASE_ITEM_KATAR: {
sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_LANCE;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_KATAR;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_KATAR;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_KATAR;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_KATAR;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_KATAR;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_KATAR;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_KATAR;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_KATAR;
break;
}
case BASE_ITEM_LIGHT_LANCE: {
sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_LANCE;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHT_LANCE;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_LANCE;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_LANCE;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_LANCE;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHT_LANCE;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHT_LANCE;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHT_LANCE;
break;
}
case BASE_ITEM_LIGHT_PICK: {
sFeat.Focus = FEAT_WEAPON_FOCUS_LIGHT_PICK;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_LIGHT_PICK;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_LIGHT_PICK;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_LIGHT_PICK;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_LIGHT_PICK;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_LIGHT_PICK;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_LIGHT_PICK;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_LIGHT_PICK;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_LIGHT_PICK;
break;
}
case BASE_ITEM_MAUL: {
sFeat.Focus = FEAT_WEAPON_FOCUS_MAUL;
sFeat.Specialization = FEAT_WEAPON_SPECIALIZATION_MAUL;
sFeat.EpicFocus = FEAT_EPIC_WEAPON_FOCUS_MAUL;
sFeat.EpicSpecialization = FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL;
sFeat.ImprovedCritical = FEAT_IMPROVED_CRITICAL_MAUL;
sFeat.OverwhelmingCritical = FEAT_EPIC_OVERWHELMING_CRITICAL_MAUL;
sFeat.DevastatingCritical = FEAT_EPIC_DEVASTATING_CRITICAL_MAUL;
sFeat.WeaponOfChoice = FEAT_WEAPON_OF_CHOICE_MAUL;
sFeat.SanctifyMartialStrike = FEAT_SANCTIFY_MARTIAL_MAUL;
sFeat.VileMartialStrike = FEAT_VILE_MARTIAL_MAUL;
break;
}
// If the feat is blank when we get here, do a lookup series
if (!sFeat.Focus)
{
sFeat.Focus = StringToInt(Get2DACache("baseitems", "WeaponFocusFeat", iWeaponType));