Files
PRC8/nwn/nwnprc/trunk/spells/sp_nec_term.nss
Jaysyn904 306779349c 2026/06/05 Update
Added Sanctified damage type.
Added Holy damage type.
Added Unholy damage type.
Added Falling damage type.
Added Ballistic damage type.
Added Desiccation damage type.
Fixed Major Missile's LABEL in spells.2da.
Fixed Major Missile's LABEL in des_cft_spells.2da.
Fixed Major Missile's LABEL in des_cft_scrolls.2da.
Disabled incomplete PnP version of Shades spell.
Astaroth's free crafting feats should drop off onRest, when expelling a vestige & when rebinding a vestige.
Re-enabled caster level override variable clearing in GetInvokerLevel().
Change Piercing Cold's damagetype to Untyped.
Constanted new damagetypes correctly for scripting (@lightbeard)
Changed all force spells damagetype to force.
Fixed issue with Initiators using Shadows Blade, Ironheart Aura and Shadow Trickster with dual-stances.
Changed Eldritch Blast to Untyped damage.
Fixed Path of Shadow screwing up caster levels.
Changed Sanctify Martial strike to be Holy damage.
Changed Vile Martial strike to be Vile damage.
Updated Forsaker to work with Warforged "Armor".
Added a SignalEvent() to Invisible Needle so it would break Invisibility when it should.
Fixed equip exploit with Shou Disciple and monk weapons.
Changed Saint template's Holy Touch to do Holy Damage.
Changed Horrid Wilting to do Desiccation damage.
Fixed Break Enchantment's targeting.
Fixed the Command spell to obey mind immunity.
Changed Damning Darkness to do Unholy damage.
Change the Necrotic spells to do Vile damage.
Made Persistent Blade more like PnP and made it dispellable.
2026-06-05 21:33:30 -04:00

142 lines
4.3 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Necrotic Termination
//:: FileName sp_nec_term.nss
//:://////////////////////////////////////////////
/** @file
Necrotic Termination
Necromancy [Evil]
Level: Clr 9, sor/wiz 9
Components: V, S, F, XP
Casting Time: 1 standard action
Range: Medium (100 ft. + 10 ft./level)
Target: Living creature with necrotic cyst
Duration: Instantaneous
Saving Throw: Fortitude partial
Spell Resistance: No
You cause the cyst of a subject already harboring a necrotic cyst
(see spell of the same name) to physically and spiritually enlarge
itself at the expense of the subject's body and soul. If the subject
succeeds on her saving throw, she takes 1d6 points of damage per level
(maximum 25d6), and half the damage is considered vile damage
(see necrotic bloat). The subject's cyst-derived saving throw penalty
against effects from the school of necromancy applies.
If the subject fails her saving throw, the cyst expands beyond control,
killing the subject and digesting her soul. Raise dead, resurrection,
true resurrection, wish, and miracle cannot return life to the subject
once her soul is digested-she is gone forever. On the round following
the subject's death, the cyst exits the flesh of the slain subject as
a free-willed undead called a skulking cyst.
XP Cost: 1,000 XP.
Author: Tenjac
Created: 10/28/05
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_spells"
#include "spinc_necro_cyst"
#include "prc_inc_switch"
#include "inc_utility"
#include "prc_add_spell_dc"
#include "prc_misc_const"
void main()
{
// Set the spellschool
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
// Run the spellhook.
if (!X2PreSpellCastCode()) return;
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nLevel = PRCMin(PRCGetCasterLevel(oPC), 25);
int nMetaMagic = PRCGetMetaMagicFeat();
PRCSignalSpellEvent(oTarget, TRUE, SPELL_NECROTIC_TERMINATION, oPC);
if(!GetCanCastNecroticSpells(oPC))
return;
if(!GetHasNecroticCyst(oTarget))
{
// "Your target does not have a Necrotic Cyst."
SendMessageToPCByStrRef(oPC, nNoNecCyst);
return;
}
//Check for perma-death
if(GetPRCSwitch(PRC_NEC_TERM_PERMADEATH))
{
int nCost = 1000;
//Check XP if perma-death enabled
if(GetHasXPToSpend(oPC, nCost))
SpendXP(oPC, nCost);
else
{
SendMessageToPC(oPC, "You don't have enough experience to cast this spell");
return;
}
}
//SPEvilShift(oPC);
//Define nDC
int nDC = PRCGetSaveDC(oTarget, oPC);
//Resolve spell
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_EVIL))
{
if(!GetHasMettle(oTarget, SAVING_THROW_FORT))
{
int nDam = d6(nLevel);
//Metmagic: Maximize
if (nMetaMagic & METAMAGIC_MAXIMIZE)
{
nDam = 6 * (nLevel);
}
//Metmagic: Empower
if (nMetaMagic & METAMAGIC_EMPOWER)
{
nDam += (nDam/2);
}
nDam += SpellDamagePerDice(oPC, nLevel);
int nVile = nDam/2;
int nNorm = (nDam - nVile);
effect eVileDam = PRCEffectDamage(oTarget, nVile, DAMAGE_TYPE_VILE);
effect eNormDam = PRCEffectDamage(oTarget, nNorm, DAMAGE_TYPE_MAGICAL);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVileDam, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eNormDam, oTarget);
}
}
else
{
//Target SOL. Kill it.
DeathlessFrenzyCheck(oTarget);
effect eDeath = EffectDeath();
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
//Check for module perma-death
if(GetPRCSwitch(PRC_NEC_TERM_PERMADEATH))
{
//Prevent revive
SetLocalInt(oPC, "PERMA_DEAD", 1);
}
RemoveCyst(oTarget);
}
PRCSetSchool();
}