2026/01/2 Update

Sun Domain power actually destroys undead.
Fixed BCM's Pouncing Strike.
Monkey Grip only applies penalty when appropriate.
Forsaker should stack all sources of Spell Resistance.
Hexblade's Dark Companion retains the sanctuary effect across game saves.
Ottiluke's Resilient Sphere is a Reflex save, not a WIll save.
This commit is contained in:
Jaysyn904
2026-01-25 10:00:51 -05:00
parent 68ca3a56ca
commit 43cf043470
10 changed files with 242 additions and 52 deletions

View File

@@ -323,7 +323,7 @@
319 Knowledge_Domain_Power 5959 5975 id_knowledge **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_KNOWLEDGE_DOMAIN_POWER 6 **** **** **** **** **** 0 1
320 Magic_Domain_Power 5960 5976 id_magic **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_MAGIC_DOMAIN_POWER 6 **** **** **** **** **** 0 1
321 Plant_Domain_Power 5961 16827779 id_plant **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 1729 **** 0.5 33 **** 1 **** **** **** **** **** **** **** **** **** FEAT_PLANT_DOMAIN_POWER 6 **** **** **** **** **** 0 1
322 Sun_Domain_Power 5962 16827780 id_sun **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 2651 **** 0.5 33 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SUN_DOMAIN_POWER 6 **** **** **** **** **** 0 1
322 Sun_Domain_Power 5962 16827780 id_sun **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 2651 **** 0.5 33 **** 1 **** **** **** **** **** **** **** **** **** FEAT_SUN_DOMAIN_POWER 6 **** **** **** **** **** 0 0
323 Travel_Domain_Power 5963 16827781 id_travel **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 1725 **** 0.5 1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_TRAVEL_DOMAIN_POWER 6 **** **** **** **** **** 0 1
324 Trickery_Domain_Power 5964 16827782 id_trickery **** **** **** **** **** **** **** **** **** **** 0 0 0 10 5 384 **** 0.5 1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_TRICKERY_DOMAIN_POWER 6 **** **** **** **** **** 0 1
325 Water_Domain_Power 5965 16827787 id_water **** **** **** **** **** **** **** **** **** **** 0 0 0 **** 5 1733 **** 0.5 33 **** 1 **** **** **** **** **** **** **** **** **** FEAT_WATER_DOMAIN_POWER 6 **** **** **** **** **** 0 1
@@ -24067,7 +24067,7 @@
24063 SuperiorTwoWeaponFighting 16827155 16827156 ife_X2MightRage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
24064 TigerClawSynergy 16827157 16827158 ife_X2GWShp2 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
24065 RendingClaws 16827159 16827160 ife_X2GWShp1 **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 17997 **** 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_BCM_RENDING_CLAWS 4 **** **** **** **** **** 0 0
24066 PouncingStrike 16827161 16827162 ife_X2BaneEnem **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2085 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
24066 PouncingStrike 16827161 16827162 ife_X2BaneEnem **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2085 **** 1 -1 **** 0 **** **** **** **** **** **** **** **** **** FEAT_BCM_POUNCING_STRIKE 4 1 **** **** **** **** 0 0
24067 Shifting1 16827163 16827164 ife_wildshape **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2100 24068 1 1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
24068 Shifting2 16827163 16827164 ife_wildshape **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2100 24069 1 2 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
24069 Shifting3 16827163 16827164 ife_wildshape **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2100 **** 1 3 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0

View File

@@ -1090,7 +1090,8 @@ void DoWeaponEquip(object oPC, object oItem, int nHand)
{
nSize++;
// If you try and use the big weapons
if (nWeaponSize > nRealSize)
//if (nWeaponSize > nRealSize)
if (nWeaponSize > nRealSize && GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC) != OBJECT_INVALID)
{
SetCompositeAttackBonus(oPC, "MonkeyGripL", -2, ATTACK_BONUS_OFFHAND);
SetCompositeAttackBonus(oPC, "MonkeyGripR", -2, ATTACK_BONUS_ONHAND);

View File

@@ -1,7 +1,50 @@
//::///////////////////////////////////////////////
//:: Sun Domain Power
//:: prc_dom_sun.nss
//:://////////////////////////////////////////////
/*
Type of Feat: Domain.
Specifics: Once per day, you can perform a greater turning
against undead in place of a regular turning. The greater
turning destroys undead instead of turning them.
Use: Selected.
*/
//:://////////////////////////////////////////////
#include "inc_newspellbook"
#include "prc_inc_domain"
#include "prc_inc_spells"
void main()
{
object oPC = OBJECT_SELF;
// Used by the uses per day check code for bonus domains
if(!DecrementDomainUses(PRC_DOMAIN_SUN, oPC)) return;
if(!CheckTurnUndeadUses(oPC, 1))
{
SpeakStringByStrRef(40550);
return;
}
// Mystics with sun domain can turn undead, but can't use greater turning
int bMystic = GetLevelByClass(CLASS_TYPE_MYSTIC, oPC) && GetHasFeat(FEAT_BONUS_DOMAIN_SUN, oPC);
void main()
if(bMystic)
{
if(!GetHasFeat(FEAT_TURN_UNDEAD, oPC))
return;
}
ActionDoCommand(SetLocalInt(oPC, "UsingSunDomain", TRUE));
ActionCastSpellAtObject(SPELLABILITY_TURN_UNDEAD, oPC, METAMAGIC_ANY, TRUE);
ActionDoCommand(DelayCommand(0.1f, DeleteLocalInt(oPC, "UsingSunDomain")));
}
/* void main()
{
object oPC = OBJECT_SELF;
@@ -20,4 +63,4 @@ void main()
ActionCastSpell(SPELLABILITY_TURN_UNDEAD);
ActionDoCommand(DecrementRemainingFeatUses(oPC, FEAT_TURN_UNDEAD));
ActionDoCommand(DeleteLocalInt(oPC, "UsingSunDomain"));
}
} */

View File

@@ -9,6 +9,101 @@
#include "prc_inc_combat"
#include "inc_dynconv"
#include "prc_alterations"
int PRCStackSpellResistance(object oPC)
{
int nTotalSR = 0;
// Racial Spell Resistance
int nRacialSR = 0;
if(GetHasFeat(FEAT_SPELL27, oPC)) nRacialSR = 27;
else if(GetHasFeat(FEAT_SPELL25, oPC)) nRacialSR = 25;
else if(GetHasFeat(FEAT_SPELL23, oPC)) nRacialSR = 23;
else if(GetHasFeat(FEAT_SPELL22, oPC)) nRacialSR = 22;
else if(GetHasFeat(FEAT_SPELL21, oPC)) nRacialSR = 21;
else if(GetHasFeat(FEAT_SPELL20, oPC)) nRacialSR = 20;
else if(GetHasFeat(FEAT_SPELL19, oPC)) nRacialSR = 19;
else if(GetHasFeat(FEAT_SPELL18, oPC)) nRacialSR = 18;
else if(GetHasFeat(FEAT_SPELL17, oPC)) nRacialSR = 17;
else if(GetHasFeat(FEAT_SPELL16, oPC)) nRacialSR = 16;
else if(GetHasFeat(FEAT_SPELL15, oPC)) nRacialSR = 15;
else if(GetHasFeat(FEAT_SPELL14, oPC)) nRacialSR = 14;
else if(GetHasFeat(FEAT_SPELL13, oPC)) nRacialSR = 13;
else if(GetHasFeat(FEAT_SPELL11, oPC)) nRacialSR = 11;
else if(GetHasFeat(FEAT_SPELL10, oPC)) nRacialSR = 10;
else if(GetHasFeat(FEAT_SPELL8, oPC)) nRacialSR = 8;
else if(GetHasFeat(FEAT_SPELL5, oPC)) nRacialSR = 5;
if(nRacialSR > 0)
{
nTotalSR += nRacialSR + GetHitDice(oPC); // Base SR + 1 per level
}
// Improved Spell Resistance feats (epic feats, +2 SR each, stackable)
int nImprovedSR = 0;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_1, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_2, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_3, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_4, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_5, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_6, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_7, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_8, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_9, oPC)) nImprovedSR += 2;
if(GetHasFeat(FEAT_EPIC_IMPROVED_SPELL_RESISTANCE_10, oPC)) nImprovedSR += 2;
nTotalSR += nImprovedSR;
// Class-based Spell Resistance
int nMonkLvl = GetLevelByClass(CLASS_TYPE_MONK, oPC);
int nForsakerLvl = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC);
int nEnlightenedFistLvl = GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oPC);
int nDraconicMysteriesLvl = GetLevelByClass(CLASS_TYPE_INITIATE_DRACONIC, oPC);
int nSanctifiedMindLvl = GetLevelByClass(CLASS_TYPE_SANCTIFIED_MIND, oPC);
int nUrPriestLvl = GetLevelByClass(CLASS_TYPE_UR_PRIEST, oPC);
// Monk Diamond Soul (level 13+)
if(nMonkLvl >= 13)
{
nTotalSR += (nMonkLvl + 10);
}
// Forsaker SR
if(nForsakerLvl > 0)
{
nTotalSR += (10 + nForsakerLvl);
}
// Enlightened Fist Diamond Soul (level 9+)
if(nEnlightenedFistLvl >= 9)
{
nTotalSR += (10 + nMonkLvl + nEnlightenedFistLvl);
}
// Initiate of Draconic Mysteries (level 7+)
if(nDraconicMysteriesLvl >= 7)
{
nTotalSR += (15 + nDraconicMysteriesLvl);
}
// Sanctified Mind Power Resistance (level 6+)
if(nSanctifiedMindLvl >= 6)
{
nTotalSR += (5 + GetHitDice(oPC));
}
// Ur-Priest Divine Spell Resistance
if(nUrPriestLvl >= 8)
{
nTotalSR += 20; // SR 20 at level 8+
}
else if(nUrPriestLvl >= 4)
{
nTotalSR += 15; // SR 15 at level 4-7
}
return nTotalSR;
}
void main()
{
@@ -37,7 +132,13 @@ void main()
int nForsakerLvlCheck;
int nBonus = nForsakerLvl/2;
int nRegen = 1 + nForsakerLvl/4;
int nSR = 10 + nForsakerLvl;
int nSR = 10 + nForsakerLvl;
// Calculate stacked spell resistance for Forsaker special case
int nTotalSR = PRCStackSpellResistance(oPC);
// Apply combined SR as single property
IPSafeAddItemProperty(oSkin, ItemPropertyBonusSpellResistance(GetSRByValue(nTotalSR)), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
if(nEvent == FALSE)
{

View File

@@ -34,7 +34,9 @@ void main()
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_GLOW_GREY));//VFX_DUR_PROT_PRC_SHADOW_ARMOR
eLink = EffectLinkEffects(eLink, EffectCutsceneGhost());
eLink = EffectLinkEffects(eLink, EffectEthereal());
eLink = TagEffect(eLink, "DARK_COMPANION");
eLink = UnyieldingEffect(eLink);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oCompanion);
}

View File

@@ -10,31 +10,75 @@
* This just tells it to follow the master and do nothing else.
*/
#include "inc_debug"
void main()
{
object oMaster = GetMaster();
if(!GetIsObjectValid(oMaster))
{
SetIsDestroyable(TRUE, FALSE, FALSE);
DestroyObject(OBJECT_SELF, 0.2);
}
// Forces it to move to the master's attack target so it take the penalty.
if(GetIsInCombat(oMaster))
{
object oMove = GetAttackTarget(oMaster);
if(GetIsObjectValid(oMove))
{
ClearAllActions(TRUE);
ActionForceFollowObject(GetAttackTarget(oMaster), 1.0f);
}
}
else
{
ClearAllActions(TRUE);
ActionForceFollowObject(oMaster, 4.0f);
}
#include "inc_debug"
#include "prc_misc_const"
void main()
{
object oMaster = GetMaster();
if(!GetIsObjectValid(oMaster))
{
SetIsDestroyable(TRUE, FALSE, FALSE);
DestroyObject(OBJECT_SELF, 0.2);
return;
}
// Check for missing DARK_COMPANION effects and reapply if needed
int bHasAOE = FALSE;
int bHasGhost = FALSE;
int bHasEthereal = FALSE;
effect eCheck = GetFirstEffect(OBJECT_SELF);
while(GetIsEffectValid(eCheck))
{
if(GetEffectTag(eCheck) == "DARK_COMPANION")
{
int nType = GetEffectType(eCheck);
if(nType == EFFECT_TYPE_AREA_OF_EFFECT) bHasAOE = TRUE;
if(nType == EFFECT_TYPE_CUTSCENEGHOST) bHasGhost = TRUE;
if(nType == EFFECT_TYPE_ETHEREAL) bHasEthereal = TRUE;
}
eCheck = GetNextEffect(OBJECT_SELF);
}
// Reapply all effects if any are missing
if(!bHasAOE || !bHasGhost || !bHasEthereal)
{
// Remove any existing DARK_COMPANION effects first
eCheck = GetFirstEffect(OBJECT_SELF);
while(GetIsEffectValid(eCheck))
{
if(GetEffectTag(eCheck) == "DARK_COMPANION")
{
RemoveEffect(OBJECT_SELF, eCheck);
}
eCheck = GetNextEffect(OBJECT_SELF);
}
// Reapply the complete effect package
effect eLink = EffectAreaOfEffect(VFX_PER_10_FT_INVIS, "prc_hexbl_comp_a", "prc_hexbl_comp_c", "");
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_GLOW_GREY));
eLink = EffectLinkEffects(eLink, EffectCutsceneGhost());
eLink = EffectLinkEffects(eLink, EffectEthereal());
eLink = TagEffect(eLink, "DARK_COMPANION");
eLink = SupernaturalEffect(eLink);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, OBJECT_SELF);
}
// Movement logic
if(GetIsInCombat(oMaster))
{
object oMove = GetAttackTarget(oMaster);
if(GetIsObjectValid(oMove))
{
ClearAllActions(TRUE);
ActionForceFollowObject(GetAttackTarget(oMaster), 1.0f);
}
}
else
{
ClearAllActions(TRUE);
ActionForceFollowObject(oMaster, 4.0f);
}
}

View File

@@ -49,8 +49,8 @@ void main()
//Make SR check
if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nCasterLvl))
{
//Make Forttude save
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (PRCGetSaveDC(oTarget,OBJECT_SELF)), SAVING_THROW_TYPE_NONE))
//Make Reflex save
if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, (PRCGetSaveDC(oTarget,OBJECT_SELF)), SAVING_THROW_TYPE_NONE))
{
//Set local to signify the target
SetLocalInt(oTarget, "PRC_OTILUKES_RS_TARGET", 1);

View File

@@ -10022,8 +10022,7 @@ Combining the dynamic powers of martial prowess and arcane might, the Hexblade p
- Alignment Restrictions: non-good only
- Hit Die: d10
- Proficiencies: Hexblades are proficient with all simple and martial weapons, and with light armor but not with shields.
- Proficiencies: Hexblades are proficient with all simple and martial weapons, and with light armor but not with shields.
- Skill Points: 2+ Int Modifier.
CLASS FEATURES:
@@ -47005,7 +47004,7 @@ All frostragers are barbarians to some degree, although many are multiclass barb
- Hit Die: d12
- Proficiencies: A frostrager does not gain any additional weapon or armor proficiencies.
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -47063,7 +47062,7 @@ Most sacred purifiers are clerics (often of Pelor), but paladins have also been
- Hit Die: d8
- Proficiencies: A sacred purifier does not gain any additional weapon or armor proficiencies.
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -47109,7 +47108,7 @@ If you have a disciplined worldview and a certain level of combat prowess, and y
- Hit Die: d8
- Proficiencies: A serene guardian does not gain any additional weapon or armor proficiencies.
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -48217,7 +48216,7 @@ You get a 2nd use at 4th, 3rd at 6th, 4th at 8th, and 5th at 10th levels. You al
Use: Selected</entry>
<entry id="57828" lang="en" sex="m">Undead Bear</entry>
<entry id="57829" lang="en" sex="m">Undead Panther</entry>
<entry id="57830" lang="en" sex="m">Undead Wolve</entry>
<entry id="57830" lang="en" sex="m">Undead Wolf</entry>
<entry id="57831" lang="en" sex="m">Undead Boar</entry>
<entry id="57832" lang="en" sex="m">Undead Badger</entry>
<entry id="57833" lang="en" sex="m">Animate Dead Animal</entry>
@@ -48298,7 +48297,7 @@ Fighters and paladins are well served by becoming battlesmiths. Spellcasters are
- Hit Die: d10
- Proficiencies: A battlesmith gains no additional proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -48349,7 +48348,7 @@ Some believe that the ultimate expression of the warforged experiment is the jug
- Hit Die: d12
- Proficiencies: A Warforged Juggernaut gains no additional proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -48415,7 +48414,7 @@ As members of this prestige class must have the ability to cast arcane spells, f
- Hit Die: d4
- Proficiencies: A Frost Mage gains no additional proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -48463,7 +48462,7 @@ Most wayfarer guides are wizards or sorcerers, though a few clerics with access
- Hit Die: d6
- Proficiencies: A Wayfarer Guide gains no additional proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -48614,7 +48613,7 @@ Over a dozen deities have worshipers who are paladins, promoting law and good ac
- Hit Die: d8
- Proficiencies: Knights of the Weave gain no proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -48654,7 +48653,7 @@ Spelldancers are an energetic sort of spellcaster who draw on the quasi-primal e
- Hit Die: d6
- Proficiencies: Spelldancers gain no proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -50362,7 +50361,7 @@ Ur-priests despise gods. However, a small number of them have learned to tap int
- Hit Die: d8
- Proficiencies: An ur-priest does not gain any additional weapon or armor proficiencies.
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -51817,7 +51816,7 @@ and her companions. The wild mage accepts this as the price of her convictions.
- Hit Die: d4
- Proficiencies: A Wild Mage gains no additional proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -51863,7 +51862,7 @@ Other spellcasters don't understand the force missile mages' dedication to only
- Hit Die: d4
- Proficiencies: A Force Missile gains no additional proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -68727,7 +68726,7 @@ Magic is evil. Magic tempts. Magic perverts. Magic corrupts. Anyone who cannot e
- Hit Die: d12
- Proficiencies: Forsakers gain no proficiencies
- Skill Points: 2+ Int Modifier.
- Skill Points: 2+ Int Modifier.
REQUIREMENTS:
@@ -76815,4 +76814,4 @@ Specifics: You gain a +4 perfection bonus on Will saving throws against charm an
<entry id="213330" lang="en" sex="m">Type of Feat: Exalted
Prerequisite: Wis 13+
Specifics: You gain a +2 bonus on saving throws to resist any fear effect, despair effect (such as the crushing despair spell), or similar mind-affecting condition, but not charms or compulsions (such as the charm person and dominate person spells)</entry>
</tlk>
</tlk>