PRC8/nwn/trunk/spells/sp_hellfire.nss
Jaysyn904 5914ed2ab5 Updated Release Archive
Updated Release Archive.  Fixed Mage-killer prereqs.  Removed old LETO & ConvoCC related files.  Added organized spell scroll store.  Fixed Gloura spellbook. Various TLK fixes.  Reorganized Repo.  Removed invalid user folders. Added DocGen back in.
2023-08-22 10:00:21 -04: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();
}