PRC8/nwn/nwnprc/trunk/spells/sp_hellfire.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

87 lines
3.3 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Hellfire
//:: FileName sp_hellfire.nss
//:://////////////////////////////////////////////
/**@file Hellfire
Evocation [Evil]
Level: Diabolic 4
Components: V, S
Casting Time: 1 action
Range: Close (25 ft. + 5 ft./2 levels)
Area: 5-ft.-radius spread
Duration: Instantaneous
Saving Throw: None
Spell Resistance: Yes
The caster creates a small explosion of brimstone
and fire that deals 3d6 points of special diabolic
fire damage. The diabolic flames are not subject
to being reduced by protection from elements
(fire), fire shield (chill shield), or similar
magic.
Author: Tenjac
Created: 05/03/06
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_spells"
void main()
{
object oPC = OBJECT_SELF;
location lLoc = PRCGetSpellTargetLocation();
effect eVis = EffectVisualEffect(806);
effect eExplode = EffectVisualEffect(VFX_FNF_HELLFIRE);
effect eDam;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nDamage;
int nMetaMagic = PRCGetMetaMagicFeat();
float fDelay;
//Spellhook
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
//Apply the fireball explosion at the location captured above.
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lLoc);
//get initial oTarget
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lLoc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
//damage loop
while(GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
{
//Roll damage for each target
nDamage = d6(3);
//Resolve metamagic
if (nMetaMagic & METAMAGIC_MAXIMIZE)
{
nDamage = 18;
}
if (nMetaMagic & METAMAGIC_EMPOWER)
{
nDamage = nDamage + nDamage / 2;
}
nDamage += SpellDamagePerDice(oPC, 3);
//Set the damage effect
eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_DIVINE);
// Apply effects to the currently selected target.
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lLoc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
//SPEvilShift(oPC);
PRCSetSchool();
}