PRC8/nwn/nwnprc/trunk/spells/sp_lst_jdgmnt.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

120 lines
3.4 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Last Judgment
//:: FileName sp_lst_jdgmnt.nss
//:://////////////////////////////////////////////
/**@file Last Judgment
Necromancy [Death, Good]
Level: Clr 8, Sor/Wiz 8, Wrath 8
Components: V, Celestial
Casting Time: 1 round
Range: Close (25 ft. + 5 ft./2 levels)
Target: One evil humanoid, monstrous humanoid, or
giant/2 levels
Duration: Instantaneous
Saving Throw: Will partial
Spell Resistance: Yes
Reciting a list of the targets' evil deeds, you call
down the judgment of the heavens upon their heads.
Creatures that fail their saving throw are struck
dead and bodily transported to the appropriate Lower
Planes to suffer their eternal punishment. Creatures
that succeed nevertheless take 3d6 points of
temporary Wisdom damage as guilt for their misdeeds
overwhelms their minds.
This spell affects only humanoids, monstrous
humanoids, and giants of evil alignment.
A true resurrection or miracle spell can restore life
to a creature slain by this spell normally. A
resurrection spell works only if the creature's body
can be recovered from the Lower Planes before the
resurrection is cast.
Author: Tenjac
Created: 7/6/06
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_spells"
#include "prc_inc_template"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nToBeAffected = nCasterLvl / 2;
int nDC;
location lLoc = PRCGetSpellTargetLocation();
//Must be Celestial
if(GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
{
if((MyPRCGetRacialType(oPC) == RACIAL_TYPE_OUTSIDER) || (GetHasTemplate(TEMPLATE_CELESTIAL)) || (GetHasTemplate(TEMPLATE_HALF_CELESTIAL)))
{
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 7.62, lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(nToBeAffected > 0)
{
int nType = MyPRCGetRacialType(oTarget);
if(nType != RACIAL_TYPE_UNDEAD &&
nType != RACIAL_TYPE_CONSTRUCT &&
nType != RACIAL_TYPE_ELEMENTAL &&
nType != RACIAL_TYPE_VERMIN &&
nType != RACIAL_TYPE_OOZE &&
nType != RACIAL_TYPE_ANIMAL &&
nType != RACIAL_TYPE_ABERRATION &&
nType != RACIAL_TYPE_BEAST)
{
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
{
//decrement the counter
nToBeAffected--;
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
{
nDC = PRCGetSaveDC(oTarget, oPC);
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_DEATH))
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
//Any module specific code for moving the body to another plane would go here
}
else
{
if(!GetHasMettle(oTarget, SAVING_THROW_WILL))
{
//made save, apply ability damage
ApplyAbilityDamage(oTarget, ABILITY_WISDOM, d6(3), DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
}
}
}
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 7.62, lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
}
else SendMessageToPC(oPC, "You do not meet the casting requirements for this spell.");
}
//SPGoodShift(oPC);
PRCSetSchool();
}