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.
101 lines
3.7 KiB
Plaintext
101 lines
3.7 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Magic Missile
|
|
//:: NW_S0_MagMiss
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
// A missile of magical energy darts forth from your
|
|
// fingertip and unerringly strikes its target. The
|
|
// missile deals 1d4+1 points of damage.
|
|
//
|
|
// For every two extra levels of experience past 1st, you
|
|
// gain an additional missile.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: April 10, 2001
|
|
//:://////////////////////////////////////////////
|
|
//:: Last Updated By: Preston Watamaniuk, On: May 8, 2001
|
|
|
|
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
|
|
#include "prc_inc_spells"
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
|
|
|
|
if (!X2PreSpellCastCode())
|
|
return;
|
|
|
|
//Declare major variables ( fDist / (3.0f * log( fDist ) + 2.0f) )
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
|
int nCasterLvl = CasterLvl;
|
|
int nDamage = 0;
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|
int nCnt;
|
|
effect eMissile = EffectVisualEffect(VFX_IMP_MIRV);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_MAGBLUE);
|
|
int nMissiles = (nCasterLvl + 1)/2;
|
|
float fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
|
|
float fDelay = fDist/(3.0 * log(fDist) + 2.0);
|
|
float fDelay2, fTime;
|
|
|
|
CasterLvl +=SPGetPenetr();
|
|
int nClass = GetLevelByClass(CLASS_TYPE_FMM);
|
|
if (GetIsObjectValid(PRCGetSpellCastItem())) nClass = 0; // The FMM boosts don't apply to wands/scrolls/etc.
|
|
if (nClass >= 3)
|
|
CasterLvl += 2;
|
|
|
|
if(!GetIsReactionTypeFriendly(oTarget))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_MAGIC_MISSILE));
|
|
//Limit missiles to five
|
|
if (nMissiles > 5)
|
|
nMissiles = 5;
|
|
|
|
// Force missile mage adds a bonus missile at 1st and 5th levels
|
|
if (nClass) nMissiles++;
|
|
if (nClass >= 5) nMissiles++;
|
|
|
|
//Make SR Check
|
|
if (!PRCDoResistSpell(OBJECT_SELF, oTarget,CasterLvl, fDelay))
|
|
{
|
|
//Apply a single damage hit for each missile instead of as a single mass
|
|
for (nCnt = 1; nCnt <= nMissiles; nCnt++)
|
|
{
|
|
//Roll damage
|
|
int nDam = d4(1) + 1;
|
|
//Enter Metamagic conditions
|
|
if ((nMetaMagic & METAMAGIC_MAXIMIZE))
|
|
nDam = 5;//Damage is at max
|
|
if ((nMetaMagic & METAMAGIC_EMPOWER))
|
|
nDam = nDam + nDam/2; //Damage/Healing is +50%
|
|
|
|
fTime = fDelay;
|
|
fDelay2 += 0.1;
|
|
fTime += fDelay2;
|
|
|
|
//Apply the MIRV and damage effect
|
|
nDam += SpellDamagePerDice(OBJECT_SELF, 1);
|
|
effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL);
|
|
DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
|
DelayCommand(fTime, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget,0.0f,FALSE));
|
|
DelayCommand(fDelay2, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (nCnt = 1; nCnt <= nMissiles; nCnt++)
|
|
{
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget);
|
|
}
|
|
}
|
|
}
|
|
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
// Getting rid of the local integer storing the spellschool name
|
|
}
|