Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

97 lines
3.4 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Divine Power
//:: Spell FileName phs_s_divinepowr
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Range: Personal Target: You Duration: 1 round/level
Calling upon the divine power of your patron, you imbue yourself with
strength and skill in combat. Your base attack bonus becomes equal to your
character level (which may give you additional attacks), you gain a +6
enhancement bonus to Strength, and you gain 1 temporary hit point per caster
level.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
As spell description. :-)
We apply it better then the NwN way.
We can use GetBaseAttackBonus :-D
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell Hook Check
if(!PHS_SpellHookCheck(PHS_SPELL_DIVINE_POWER)) return;
// Delcare major variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();// Should be OBJECT_SELF
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
// Broken the rule of order (well, not really a rule) but we MUST remove
// the spells effects first.
// Remove pervious castings of it
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_DIVINE_POWER, oTarget);
// Get old BAB
int nOldBAB = GetBaseAttackBonus(oTarget);
// Make sure they are not immune to spells
if(PHS_TotalSpellImmunity(oTarget)) return;
// Get duration in rounds
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
// Calculate the extra BAB we should add for extra attacks
// - Based on character level (Hit dice) of the caster
int nNewBAB = GetHitDice(oTarget) - nOldBAB;;
int nNewAttack = nNewBAB;
if(nNewAttack > 10) nNewAttack = 10;
// Extra attacks. Get 1 per 5 levels, min of 1, so have new BAB take old BAB.
int nExtraAttacks = (PHS_LimitInteger(nNewBAB/5) - PHS_LimitInteger(nOldBAB/5));
if(nExtraAttacks > 5) nExtraAttacks = 5;
// Declare effects
effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH, 6);
effect eHP = EffectTemporaryHitpoints(nCasterLevel);
effect eAttack = EffectAttackIncrease(nNewAttack);
effect eLink = EffectLinkEffects(eCessate, eHP);
// We add the strength link only if we will havn't got any 6 or more bonuses
// to strength
if(PHS_GetHasAbilityBonusOfPower(oTarget, ABILITY_STRENGTH, 6) == 0)
{
eLink = EffectLinkEffects(eLink, eStrength);
}
eLink = EffectLinkEffects(eLink, eAttack);
// If no extra attacks, we do not use eExtraAttacks
if(nExtraAttacks > 0)
{
effect eExtraAttacks = EffectModifyAttacks(nExtraAttacks);
eLink = EffectLinkEffects(eLink, eExtraAttacks);
}
// Remove any bonuses to strength of 5 or under.
PHS_RemoveAnyAbilityBonuses(oTarget, ABILITY_STRENGTH, 5);
//Fire cast spell at event for the specified target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_DIVINE_POWER, FALSE);
// Apply VNF and effect.
PHS_ApplyDurationAndVFX(oTarget, eVis, eLink, fDuration);
}