PRC8/nwn/nwnprc/trunk/newspellbook/bnd_vest_amonbrt.nss
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

67 lines
2.7 KiB
Plaintext

/*
03/02/21 by Stratovarius
Amon, the Void Before the Altar
Fire Breath: You can vomit forth a line of fire as a standard
action. The line extends 10 feet per effective binder level
(maximum 50 feet) and deals 1d6 points of fire damage per
binder level to every creature in its area. A successful Reflex
save halves this damage. Once you have used this ability, you
cannot do so again for 5 rounds.
*/
#include "bnd_inc_bndfunc"
void main()
{
object oBinder = OBJECT_SELF;
if(!BindAbilCooldown(oBinder, GetSpellId(), VESTIGE_AMON)) return;
//Set the lightning stream to start at the caster's hands
effect eLightning = EffectBeam(VFX_BEAM_FIRE, oBinder, BODY_NODE_CHEST);
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
effect eDamage;
location lTarget = PRCGetSpellTargetLocation();
int nBinderLvl = GetBinderLevel(oBinder, VESTIGE_AMON);
int nDC = GetBinderDC(oBinder, VESTIGE_AMON);
float fDelay;
float fDist = 10.0 + (10.0 * nBinderLvl);
if (fDist > 50.0) fDist = 50.0;
int nDamage;
//Get first target in the area
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, FeetToMeters(fDist), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetPosition(oBinder));
while (GetIsObjectValid(oTarget))
{
//Exclude the caster from the damage effects
if (oTarget != oBinder)
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oBinder))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oBinder, SPELL_LIGHTNING_BOLT));
//Roll damage
nDamage = d6(nBinderLvl);
//Adjust damage based on Reflex Save, Evasion and Improved Evasion
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
if(nDamage > 0)
{
eDamage = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE);
fDelay = PRCGetSpellEffectDelay(GetLocation(oTarget), oTarget);
//Apply VFX impcat, damage effect and lightning effect
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLightning, oTarget, 1.0, FALSE);
}
}
//Get the next object in the lightning cylinder
oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, FeetToMeters(fDist), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, GetPosition(oBinder));
}
}