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.
119 lines
4.7 KiB
Plaintext
119 lines
4.7 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Freezing Sphere
|
|
//:: Spell FileName phs_s_freezesphe
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Freezing Sphere
|
|
Evocation [Cold]
|
|
Level: Sor/Wiz 6
|
|
Components: V, S, F
|
|
Casting Time: 1 standard action
|
|
Range: Long (40M)
|
|
Target, Effect, or Area: See text
|
|
Duration: Instantaneous or 1 round/level; see text
|
|
Saving Throw: Reflex half; see text
|
|
Spell Resistance: Yes
|
|
|
|
Freezing sphere creates a frigid globe of cold energy that streaks from your
|
|
fingertips to the location you select, where it explodes in a 10-foot-radius
|
|
burst, dealing 1d6 points of cold damage per caster level (maximum 15d6) to
|
|
each creature in the area. An elemental (water) creature instead takes 1d8
|
|
points of cold damage per caster level (maximum 15d8).
|
|
|
|
You can refrain from firing the globe after completing the spell, if you wish.
|
|
You can hold the charge for as long as 1 round per level, at the end of which
|
|
time the freezing sphere bursts centered on you (and you receive no saving
|
|
throw to resist its effect). Firing the globe in a later round is a standard
|
|
action usable from your class item.
|
|
|
|
Focus: A small crystal sphere.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Nearly the same as fireball. Note that it is possible to refrain from
|
|
firing (NOT IN YET)
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_FREEZING_SPHERE)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
int nDamage;
|
|
int nAppearance;
|
|
float fDelay;
|
|
|
|
// Declare Effects
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FROST_L);
|
|
|
|
// Are we holding it back or not?
|
|
//if(!NOT IN YET) return;
|
|
|
|
// Apply AOE visual
|
|
effect eImpact = EffectVisualEffect(PHS_VFX_FNF_FREEZING_SPHERE);
|
|
PHS_ApplyLocationVFX(lTarget, eImpact);
|
|
|
|
// Get all targets in a sphere, medium (3.3) radius, objects
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
// Loop targets
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// PvP Check
|
|
if(!GetIsReactionTypeFriendly(oTarget, oCaster))
|
|
{
|
|
// Fire cast spell at event for the specified target
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_FREEZING_SPHERE);
|
|
|
|
// Get the distance between the explosion and the target to calculate delay
|
|
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
|
|
|
// Spell resistance And immunity checking.
|
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Damage - it is 1d8 for water elementals!
|
|
nAppearance = GetAppearanceType(oTarget);
|
|
|
|
// Elemental
|
|
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
|
|
(nAppearance == APPEARANCE_TYPE_ELEMENTAL_WATER ||
|
|
nAppearance == APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER ||
|
|
FindSubString(GetStringUpperCase(GetSubRace(oTarget)), "WATER ELEMENTAL") >= 0))
|
|
{
|
|
// 1d8/level
|
|
nDamage = PHS_MaximizeOrEmpower(8, nCasterLevel, nMetaMagic);
|
|
}
|
|
// Not an elemental
|
|
else
|
|
{
|
|
// 1d6/level
|
|
nDamage = PHS_MaximizeOrEmpower(6, nCasterLevel, nMetaMagic);
|
|
}
|
|
|
|
// Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
|
|
nDamage = PHS_GetAdjustedDamage(SAVING_THROW_REFLEX, nDamage, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_COLD);
|
|
|
|
// Need to do damage to apply visuals
|
|
if(nDamage > 0)
|
|
{
|
|
// Apply effects to the currently selected target.
|
|
DelayCommand(fDelay, PHS_ApplyDamageVFXToObject(oTarget, eVis, nDamage, DAMAGE_TYPE_COLD));
|
|
}
|
|
}
|
|
}
|
|
// Get Next Target
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
}
|
|
}
|