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.
126 lines
4.7 KiB
Plaintext
126 lines
4.7 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Cone of Cold
|
|
//:: NW_S0_ConeCold
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
// Cone of cold creates an area of extreme cold,
|
|
// originating at your hand and extending outward
|
|
// in a cone. It drains heat, causing 1d6 points of
|
|
// cold damage per caster level (maximum 15d6).
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Noel Borstad
|
|
//:: Created On: 10/18/02000
|
|
//:://////////////////////////////////////////////
|
|
//:: Last Updated By: Aidan Scanlan On: April 11, 2001
|
|
//:: Update Pass By: Preston W, On: July 25, 2001
|
|
|
|
|
|
//:: modified by mr_bumpkin Dec 4, 2003
|
|
#include "prc_inc_spells"
|
|
#include "prc_add_spell_dc"
|
|
|
|
float SpellDelay (object oTarget, int nShape);
|
|
|
|
|
|
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
|
|
|
|
|
|
/*
|
|
Spellcast Hook Code
|
|
Added 2003-06-20 by Georg
|
|
If you want to make changes to all spells,
|
|
check x2_inc_spellhook.nss to find out more
|
|
|
|
*/
|
|
|
|
if (!X2PreSpellCastCode())
|
|
{
|
|
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
|
|
// End of Spell Cast Hook
|
|
|
|
|
|
//Declare major variables
|
|
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
|
|
|
int nCasterLevel = CasterLvl;
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|
int nDamage;
|
|
float fDelay;
|
|
location lTargetLocation = PRCGetSpellTargetLocation();
|
|
object oTarget;
|
|
//Limit Caster level for the purposes of damage.
|
|
if (nCasterLevel > 15)
|
|
{
|
|
nCasterLevel = 15;
|
|
}
|
|
|
|
CasterLvl +=SPGetPenetr();
|
|
|
|
int EleDmg = ChangedElementalDamage(OBJECT_SELF, DAMAGE_TYPE_COLD);
|
|
|
|
//Declare the spell shape, size and the location. Capture the first target object in the shape.
|
|
oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
//Cycle through the targets within the spell shape until an invalid object is captured.
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
|
|
{
|
|
// March 2003. Removed this as part of the reputation pass
|
|
// if((PRCGetSpellId() == 340 && !GetIsFriend(oTarget)) || PRCGetSpellId() == 25)
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CONE_OF_COLD));
|
|
//Get the distance between the target and caster to delay the application of effects
|
|
fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20.0;
|
|
//Make SR check, and appropriate saving throw(s).
|
|
if(!PRCDoResistSpell(OBJECT_SELF, oTarget,CasterLvl, fDelay) && (oTarget != OBJECT_SELF))
|
|
{
|
|
int nDC = PRCGetSaveDC(oTarget,OBJECT_SELF);
|
|
//Detemine damage
|
|
nDamage = d6(nCasterLevel);
|
|
//Enter Metamagic conditions
|
|
if ((nMetaMagic & METAMAGIC_MAXIMIZE))
|
|
{
|
|
nDamage = 6 * nCasterLevel;//Damage is at max
|
|
}
|
|
if ((nMetaMagic & METAMAGIC_EMPOWER))
|
|
{
|
|
nDamage = nDamage + (nDamage/2); //Damage/Healing is +50%
|
|
}
|
|
nDamage += SpellDamagePerDice(OBJECT_SELF, nCasterLevel);
|
|
//Adjust damage according to Reflex Save, Evasion or Improved Evasion
|
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_COLD);
|
|
|
|
// Apply effects to the currently selected target.
|
|
effect eCold = PRCEffectDamage(oTarget, nDamage, EleDmg);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FROST_L);
|
|
if(nDamage > 0)
|
|
{
|
|
//Apply delayed effects
|
|
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eCold, oTarget));
|
|
PRCBonusDamage(oTarget);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//Select the next target within the spell shape.
|
|
oTarget = MyNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
}
|
|
|
|
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
// Getting rid of the local integer storing the spellschool name
|
|
}
|
|
|