From 3a362d25be7d88e378f05e745712e8436b788c00 Mon Sep 17 00:00:00 2001 From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com> Date: Tue, 13 May 2025 23:36:44 -0400 Subject: [PATCH] Finished Invocations for Ability focus Finished the rest of the Invocations for Ability focus. --- nwn/nwnprc/trunk/newspellbook/inv_curseofdesp.nss | 8 ++++++-- nwn/nwnprc/trunk/newspellbook/inv_dra_dfnroar.nss | 9 +++++---- nwn/nwnprc/trunk/newspellbook/inv_dra_frtpres.nss | 6 +++++- nwn/nwnprc/trunk/newspellbook/inv_dra_scldgust.nss | 8 +++++++- nwn/nwnprc/trunk/newspellbook/inv_dra_terrroar.nss | 6 +++++- nwn/nwnprc/trunk/newspellbook/inv_enervshdwa.nss | 2 ++ nwn/nwnprc/trunk/newspellbook/inv_nightmarea.nss | 5 ++++- nwn/nwnprc/trunk/newspellbook/inv_wallglooma.nss | 2 ++ 8 files changed, 36 insertions(+), 10 deletions(-) diff --git a/nwn/nwnprc/trunk/newspellbook/inv_curseofdesp.nss b/nwn/nwnprc/trunk/newspellbook/inv_curseofdesp.nss index 13a222f4..ceaf90b7 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_curseofdesp.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_curseofdesp.nss @@ -27,6 +27,10 @@ void main() int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass()); int nPenetr = CasterLvl + SPGetPenetr(); int iAttackRoll = PRCDoMeleeTouchAttack(oTarget); + + int nDC = GetInvocationSaveDC(oTarget, oCaster); + if (GetHasFeat(FEAT_ABFOC_CURSE_OF_DESPAIR, OBJECT_SELF)) nDC += 2; + int dec = 2 * iAttackRoll;//4 on Critical Hit effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); effect eCurse = EffectCurse(dec, dec, dec, dec, dec, dec); @@ -42,8 +46,8 @@ void main() //Make SR Check if (!PRCDoResistSpell(oCaster, oTarget, nPenetr)) { - //Make Will Save - if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, oCaster))) + //Make Will Save + if (!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC)) { //Apply Effect and VFX SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eCurse, oTarget, 0.0f, TRUE, -1, CasterLvl); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_dra_dfnroar.nss b/nwn/nwnprc/trunk/newspellbook/inv_dra_dfnroar.nss index 1f55a4e6..88397577 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_dra_dfnroar.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_dra_dfnroar.nss @@ -25,10 +25,7 @@ void main() object oCaster = OBJECT_SELF; location lTarget = PRCGetSpellTargetLocation(); int CasterLvl = GetInvokerLevel(oCaster, GetInvokingClass()); - int nPenetr = CasterLvl + SPGetPenetr(); - int nDC = GetInvocationSaveDC(oTarget, oCaster); - - if (GetHasFeat(FEAT_ABFOC_DEAFENING_ROAR, oCaster)) nDC += 2; + int nPenetr = CasterLvl + SPGetPenetr(); float fDelay; effect eDeaf = EffectDeaf(); @@ -42,6 +39,10 @@ void main() object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, FeetToMeters(30.0), lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(oCaster)); while(GetIsObjectValid(oTarget)) { + int nDC = GetInvocationSaveDC(oTarget, oCaster); + + if (GetHasFeat(FEAT_ABFOC_DEAFENING_ROAR, oCaster)) nDC += 2; + if(oTarget != oCaster && !GetIsReactionTypeFriendly(oTarget)) { fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; diff --git a/nwn/nwnprc/trunk/newspellbook/inv_dra_frtpres.nss b/nwn/nwnprc/trunk/newspellbook/inv_dra_frtpres.nss index 010a8b3c..61b56601 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_dra_frtpres.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_dra_frtpres.nss @@ -40,8 +40,12 @@ void main() //Get first target in the spell cone object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(oCaster)); + while(GetIsObjectValid(oTarget)) { + int nDC = GetInvocationSaveDC(oTarget, oCaster); + if (GetHasFeat(FEAT_ABFOC_FRIGHTFUL_PRESENCE, OBJECT_SELF)) nDC += 2; + if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF) && MyPRCGetRacialType(oTarget)!= RACIAL_TYPE_DRAGON) { @@ -52,7 +56,7 @@ void main() if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay)) { //Make a will save - if failed, shaken for 10 minutes - if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_FEAR, oCaster, fDelay)) + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oCaster, fDelay)) { //Apply the linked effects and the VFX impact DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(10), TRUE, -1, CasterLvl)); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_dra_scldgust.nss b/nwn/nwnprc/trunk/newspellbook/inv_dra_scldgust.nss index 34818dfc..a7d82d30 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_dra_scldgust.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_dra_scldgust.nss @@ -36,8 +36,14 @@ void main() //Get first target in the spell cylinder object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetPosition(OBJECT_SELF)); + + + while(GetIsObjectValid(oTarget)) { + int nDC = GetInvocationSaveDC(oTarget, oCaster); + if (GetHasFeat(FEAT_ABFOC_SCALDING_GUST, OBJECT_SELF)) nDC += 2; + if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)) { fDelay = GetDistanceBetween(oCaster, oTarget)/20; @@ -47,7 +53,7 @@ void main() if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay)) { if(PRCGetCreatureSize(oTarget) < CREATURE_SIZE_MEDIUM) - if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetInvocationSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_NONE)) + if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE)) { effect eWindblown = EffectKnockdown(); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eWindblown, oTarget, 6.0)); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_dra_terrroar.nss b/nwn/nwnprc/trunk/newspellbook/inv_dra_terrroar.nss index 13bc57b7..7c25e5bd 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_dra_terrroar.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_dra_terrroar.nss @@ -50,8 +50,12 @@ void main() //Get first target in the spell cone object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fRange, lTarget, TRUE, OBJECT_TYPE_CREATURE, GetPosition(OBJECT_SELF)); + while(GetIsObjectValid(oTarget)) { + int nDC = GetInvocationSaveDC(oTarget, oCaster); + if (GetHasFeat(FEAT_ABFOC_TERRIFYING_ROAR, OBJECT_SELF)) nDC += 2; + if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster) && !(GetHitDice(oTarget) > CasterLvl)) { @@ -62,7 +66,7 @@ void main() if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay)) { //Make a will save - if failed, panicked - if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, oCaster), SAVING_THROW_TYPE_FEAR, oCaster, fDelay)) + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oCaster, fDelay)) { //Apply the linked effects and the VFX impact DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0, TRUE, -1, CasterLvl)); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_enervshdwa.nss b/nwn/nwnprc/trunk/newspellbook/inv_enervshdwa.nss index bf78bdb7..1888fc6a 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_enervshdwa.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_enervshdwa.nss @@ -11,6 +11,8 @@ void main() object oTarget = GetEnteringObject(); int CasterLvl = GetInvokerLevel(GetAreaOfEffectCreator(), CLASS_TYPE_WARLOCK); int nDC = GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(),INVOKE_ENERVATING_SHADOW); + if (GetHasFeat(FEAT_ABFOC_ENERVATING_SHADOW, OBJECT_SELF)) nDC += 2; + effect eConceal = EffectConcealment(20); effect eStrength = EffectAbilityDecrease(ABILITY_STRENGTH, 4); effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_nightmarea.nss b/nwn/nwnprc/trunk/newspellbook/inv_nightmarea.nss index 3bcc4450..e6b89620 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_nightmarea.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_nightmarea.nss @@ -15,8 +15,11 @@ void main() SignalEvent(oTarget, EventSpellCastAt(GetAreaOfEffectCreator(), INVOKE_NIGHTMARES_MADE_REAL)); + int nDC = GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(), INVOKE_NIGHTMARES_MADE_REAL); + if (GetHasFeat(FEAT_ABFOC_NIGHTMARES_MADE_REAL, OBJECT_SELF)) nDC += 2; + //save - if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetInvocationSaveDC(oTarget, GetAreaOfEffectCreator(), INVOKE_NIGHTMARES_MADE_REAL), SAVING_THROW_TYPE_SPELL)) + if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SPELL)) { effect eEntangle = EffectLinkEffects(EffectEntangle(), EffectVisualEffect(VFX_DUR_ENTANGLE)); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEntangle, oTarget, RoundsToSeconds(nCasterLevel)); diff --git a/nwn/nwnprc/trunk/newspellbook/inv_wallglooma.nss b/nwn/nwnprc/trunk/newspellbook/inv_wallglooma.nss index 1da125a4..b1c90595 100644 --- a/nwn/nwnprc/trunk/newspellbook/inv_wallglooma.nss +++ b/nwn/nwnprc/trunk/newspellbook/inv_wallglooma.nss @@ -13,6 +13,8 @@ void main() object oCaster = GetAreaOfEffectCreator(); int nCasterLvl = GetInvokerLevel(oCaster, CLASS_TYPE_WARLOCK); int nDC = GetInvocationSaveDC(oTarget, oCaster, INVOKE_WALL_OF_GLOOM); + if (GetHasFeat(FEAT_ABFOC_WALL_OF_GLOOM, OBJECT_SELF)) nDC += 2; + effect eConceal = EffectConcealment(50); effect eHalt = EffectMovementSpeedDecrease(99);