PRC8/trunk/spells/sp_scorch_ray.nss
Jaysyn904 1662218bb4 Initial upload.
Adding base PRC 4.19a files to repository.
2022-10-07 13:51:24 -04:00

103 lines
2.4 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Scorching Ray
//:: FileName sp_scorch_ray.nss
//:://////////////////////////////////////////////
/**@file Scorching Ray
Evocation [Fire]
Level: Sor/Wiz 2, Duskblade 2
Components: V, S
Casting Time: 1 standard action
Range: Close (25 ft. + 5 ft./2 levels)
Effect: One or more rays
Duration: Instantaneous
Saving Throw: None
Spell Resistance: Yes
You blast your enemies with fiery rays. You may fire
one ray, plus one additional ray for every four levels
beyond 3rd (to a maximum of three rays at 11th level).
Each ray requires a ranged touch attack to hit and deals
4d6 points of fire damage.
The rays may be fired at the same or different targets,
but all bolts must be aimed at targets within 30 feet of
each other and fired simultaneously.
**/
//::////////////////////////////////////////////////
//:: Author: Tenjac
//:: Date : 29.9.06
//::////////////////////////////////////////////////
/*
<BEGIN NOTES TO SCRIPTER - MAY BE DELETED LATER>
Modify as necessary
Most code should be put in DoSpell()
PRC_SPELL_EVENT_ATTACK is set when a
touch or ranged attack is used
<END NOTES TO SCRIPTER>
*/
#include "prc_inc_sp_tch"
#include "prc_add_spell_dc"
void main()
{
if (!X2PreSpellCastCode()) return;
PRCSetSchool(GetSpellSchool(PRCGetSpellId()));
object oCaster = OBJECT_SELF;
int nCasterLevel = PRCGetCasterLevel(oCaster);
object oTarget = PRCGetSpellTargetObject();
int nMetaMagic = PRCGetMetaMagicFeat();
int nSaveDC = PRCGetSaveDC(oTarget, oCaster);
int nPenetr = nCasterLevel + SPGetPenetr();
int nRays = 3;
int nDam;
int iAttackRoll;
PRCSignalSpellEvent(oTarget, TRUE);
if(nCasterLevel < 11)
{
nRays =2;
}
if(nCasterLevel < 7)
{
nRays = 1;
}
while(nRays > 0)
{
nRays--;
iAttackRoll = PRCDoRangedTouchAttack(oTarget);
//Beam
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_FIRE, oCaster, BODY_NODE_HAND, !iAttackRoll), oTarget, 1.0f);
if (iAttackRoll > 0)
{
if(!PRCDoResistSpell(oCaster, oTarget, nPenetr))
{
nDam = d6(4);
if(nMetaMagic & METAMAGIC_MAXIMIZE)
{
nDam = 24;
}
if(nMetaMagic & METAMAGIC_EMPOWER)
{
nDam += (nDam/2);
}
nDam += SpellDamagePerDice(oCaster, 4);
ApplyTouchAttackDamage(oCaster, oTarget, iAttackRoll, nDam, ChangedElementalDamage(oCaster, DAMAGE_TYPE_FIRE));
}
}
}
PRCSetSchool();
}