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.
142 lines
5.1 KiB
Plaintext
142 lines
5.1 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Sunburst
|
|
//:: Spell FileName PHS_S_Sunburst
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Light spell. Long range. 26.6M burst! Reflex partial: else blinded and take
|
|
full 6d6 damage. If light is harmful to the creature, double damage. SR
|
|
applies.
|
|
|
|
Undead take 1d6/caster level to 25d6. Half if reflex sucessful. If light
|
|
is harmful to them, it kills any that fail the save.
|
|
|
|
Oozes and slimes act like undead with this spell.
|
|
|
|
Sunburst dispels any darkness spells of lower than 9th level within its area.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Darkness destroying not yet in (as darkness SPELL not yet in!)
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_SUNBURST)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|
int nDam, bUndead, nRace;
|
|
int nDice = PHS_LimitInteger(nCasterLevel, 25);
|
|
float fDelay;
|
|
|
|
// Duration is 1 round/level
|
|
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Declare effects
|
|
effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
|
effect eDeath = EffectDeath();
|
|
effect eBlind = EffectBlindness();
|
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
|
|
// Link blindness duration effects
|
|
effect eLink = EffectLinkEffects(eBlind, eCessate);
|
|
|
|
// We get the first in the beam
|
|
// - Cylinder
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 26.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// Reaction type check
|
|
if(!GetIsReactionTypeFriendly(oTarget))
|
|
{
|
|
// We don't mind applying the damage effects after a delay.
|
|
fDelay = GetDistanceBetweenLocations(GetLocation(oTarget), lTarget)/20;
|
|
|
|
// Signal event
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_SUNBURST);
|
|
|
|
// Check spell resistance
|
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Are they undead?
|
|
nRace = GetRacialType(oTarget);
|
|
if(nRace == RACIAL_TYPE_UNDEAD ||
|
|
nRace == RACIAL_TYPE_OOZE)
|
|
{
|
|
bUndead = TRUE;
|
|
}
|
|
else
|
|
{
|
|
bUndead = FALSE;
|
|
}
|
|
|
|
// Get damage to be done
|
|
if(bUndead)
|
|
{
|
|
// Up to 20d6
|
|
nDam = PHS_MaximizeOrEmpower(6, nDice, nMetaMagic);
|
|
}
|
|
else
|
|
{
|
|
// 4d6 damage to non-undead
|
|
nDam = PHS_MaximizeOrEmpower(6, 4, nMetaMagic);
|
|
|
|
// Do they hate light?
|
|
if(PHS_GetHateSun(oTarget))
|
|
{
|
|
nDam *= 2;
|
|
}
|
|
}
|
|
// Check reflex save - special though. Immunities == Pass (can't be immune...really?)
|
|
if(PHS_SavingThrow(SAVING_THROW_REFLEX, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_DIVINE, oCaster, fDelay))
|
|
{
|
|
// Saved - half damage (or none with evasion)
|
|
if(GetHasFeat(FEAT_EVASION, oTarget) || GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))
|
|
{
|
|
// None with evasions of any kind
|
|
nDam = 0;
|
|
}
|
|
else
|
|
{
|
|
// Else half damage anyway
|
|
nDam /= 2;
|
|
}
|
|
}
|
|
else // FAIL
|
|
{
|
|
// Failed + Undead + Hate sun = Destroyed
|
|
if(bUndead == TRUE && PHS_GetHateSun(oTarget))
|
|
{
|
|
DelayCommand(fDelay, PHS_ApplyInstantAndVFX(oTarget, eVis, eDeath));
|
|
nDam = 0;
|
|
}
|
|
else
|
|
{
|
|
// Improved evasion always gives half damage
|
|
if(GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))
|
|
{
|
|
nDam /= 2;
|
|
}
|
|
// + Blindness!
|
|
PHS_ApplyDuration(oTarget, eLink, fDuration);
|
|
}
|
|
}
|
|
// We apply damage
|
|
DelayCommand(fDelay, PHS_ApplyDamageVFXToObject(oTarget, eVis, nDam, DAMAGE_TYPE_DIVINE));
|
|
}
|
|
}
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 26.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|