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.
124 lines
4.5 KiB
Plaintext
124 lines
4.5 KiB
Plaintext
/*
|
||
----------------
|
||
Crisis of Life
|
||
|
||
psi_pow_crslife
|
||
----------------
|
||
|
||
21/10/04 by Stratovarius
|
||
*/ /** @file
|
||
|
||
Crisis of Life
|
||
|
||
Telepathy [Mind-Affecting, Death]
|
||
Level: Telepath 7
|
||
Manifesting Time: 1 standard action
|
||
Range: Medium (100 ft. + 10 ft./ level)
|
||
Target: One creature
|
||
Duration: Instantaneous
|
||
Saving Throw: Fortitude partial; see text
|
||
Power Resistance: Yes
|
||
Power Points: 13
|
||
Metapsionics: Empower, Maximize, Twin
|
||
|
||
You interrupt the subject’s autonomic heart rhythm, killing it instantly on
|
||
a failed saving throw if it has 11 Hit Dice or less. If the target makes its
|
||
saving throw or has more than 11 Hit Dice, it takes 7d6 points of damage.
|
||
|
||
Augment: For every additional power point you spend, this power can kill a
|
||
subject that has Hit Dice equal to 11 + the number of additional
|
||
points.
|
||
*/
|
||
|
||
#include "psi_inc_psifunc"
|
||
#include "psi_inc_pwresist"
|
||
#include "psi_spellhook"
|
||
#include "prc_inc_spells"
|
||
|
||
void main()
|
||
{
|
||
/*
|
||
Spellcast Hook Code
|
||
Added 2004-11-02 by Stratovarius
|
||
If you want to make changes to all powers,
|
||
check psi_spellhook to find out more
|
||
|
||
*/
|
||
|
||
if (!PsiPrePowerCastCode())
|
||
{
|
||
// If code within the PrePowerCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||
return;
|
||
}
|
||
|
||
// End of Spell Cast Hook
|
||
|
||
object oManifester = OBJECT_SELF;
|
||
object oTarget = PRCGetSpellTargetObject();
|
||
struct manifestation manif =
|
||
EvaluateManifestation(oManifester, oTarget,
|
||
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
|
||
1, PRC_UNLIMITED_AUGMENTATION
|
||
),
|
||
METAPSIONIC_EMPOWER | METAPSIONIC_MAXIMIZE | METAPSIONIC_TWIN
|
||
);
|
||
|
||
if(manif.bCanManifest)
|
||
{
|
||
int nDC = GetManifesterDC(oManifester);
|
||
int nPen = GetPsiPenetration(oManifester);
|
||
int nNumberOfDice = 7;
|
||
int nDieSize = 6;
|
||
int nMaxHD = 11 + manif.nTimesAugOptUsed_1;
|
||
int nTargetHD = GetHitDice(oTarget);
|
||
int nDamage;
|
||
effect eVisDeath = EffectVisualEffect(VFX_IMP_DEATH_L);
|
||
effect eVisDamage = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||
effect eVis = EffectVisualEffect(PSI_FNF_CRISIS_OF_LIFE);
|
||
effect eDamage;
|
||
|
||
// Let the AI know
|
||
PRCSignalSpellEvent(oTarget, TRUE, manif.nSpellID, oManifester);
|
||
|
||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||
// Check immunities
|
||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_DEATH, oManifester) &&
|
||
!GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS, oManifester)
|
||
)
|
||
{
|
||
// Handle Twin Power
|
||
int nRepeats = manif.bTwin ? 2 : 1;
|
||
for(; nRepeats > 0; nRepeats--)
|
||
{
|
||
//Check for Power Resistance
|
||
if(PRCMyResistPower(oManifester, oTarget, nPen))
|
||
{
|
||
// Can the target die outright and if it can, does it fail the save?
|
||
if(nTargetHD <= nMaxHD && !PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
|
||
{
|
||
DeathlessFrenzyCheck(oTarget);
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisDeath, oTarget);
|
||
|
||
}
|
||
else
|
||
{
|
||
if (GetHasMettle(oTarget, SAVING_THROW_FORT))
|
||
// This script does nothing if it has Mettle, bail
|
||
return;
|
||
// Roll damage
|
||
nDamage = MetaPsionicsDamage(manif, nDieSize, nNumberOfDice, 0, 0, TRUE, FALSE);
|
||
// Target-specific stuff
|
||
nDamage = GetTargetSpecificChangesToDamage(oTarget, oManifester, nDamage, TRUE, FALSE);
|
||
eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
|
||
|
||
//Apply the VFX impact and effects
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget);
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisDamage, oTarget);
|
||
}// end if - Too much HD or succeeded at save
|
||
}// end if - SR check
|
||
}// end if - Twin Power
|
||
}// end if - Immunity check
|
||
}
|
||
}
|