PoA_PRC8/_haks/poa_exp_spells/sp_hellfire.nss
Jaysyn904 7dd83ad168 Spell & Ability Upgrade
Reorganized hak files & removed duplicates.  Added @rafhot's PRC spell & ability level scaling expansion.  Further script integration.  Full compile.
2023-08-19 21:08:35 -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(nCasterLvl/2)+3;
//Resolve metamagic
if (nMetaMagic & METAMAGIC_MAXIMIZE)
{
nDamage =(nCasterLvl/2)*6 +3;
}
if (nMetaMagic & METAMAGIC_EMPOWER)
{
nDamage = nDamage + nDamage / 2;
}
//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();
}