PRC8/nwn/nwnprc/trunk/psionics/psi_pow_neginvis.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

116 lines
4.1 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
----------------
Eradicate Invisibility
psi_pow_neginvis
----------------
11/12/04 by Stratovarius
*/ /** @file
Eradicate Invisibility
Psychokinesis
Level: Psion/wilder 3
Manifesting Time: 1 standard action
Range: 50 ft.
Targets: You and all invisible creatures and objects in a 50-ft.-radius burst centered on you
Duration: Instantaneous
Saving Throw: Reflex negates
Power Resistance: No
Power Points: 5
Metapsionics: Twin, Widen
You radiate a psychokinetic burst that disrupts and negates all types of
invisibility. Any creature that fails its save to avoid the effect loses its
invisibility.
Augment: For every additional power point you spend, this powers range and
the radius of the burst in which it functions both increase by 5
feet.
*/
#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;
struct manifestation manif =
EvaluateManifestation(oManifester, OBJECT_INVALID,
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
1, PRC_UNLIMITED_AUGMENTATION
),
METAPSIONIC_TWIN |METAPSIONIC_WIDEN
);
if(manif.bCanManifest)
{
int nDC = GetManifesterDC(oManifester);
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
effect eTest;
float fRadius = EvaluateWidenPower(manif, FeetToMeters(50.0f + (5.0f * manif.nTimesAugOptUsed_1)));
location lTarget = PRCGetSpellTargetLocation();
object oTarget;
// Handle Twin Power
int nRepeats = manif.bTwin ? 2 : 1;
for(; nRepeats > 0; nRepeats--)
{
// Apply impact VFX
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lTarget);
// Loop over targets in the area
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE);
while(GetIsObjectValid(oTarget))
{
// Difficulty check
if(oTarget == oManifester || // Despite usual limitations, this power explicitly hits self
spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oManifester)
)
{
// Let the AI know
PRCSignalSpellEvent(oTarget, TRUE, manif.nSpellID, oManifester);
// Save - Reflex negates
if(PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
// Loop over effects and remove all (non-cutscene) invisibility ones
eTest = GetFirstEffect(oTarget);
while(GetIsEffectValid(eTest))
{
if(GetEffectType(eTest) == EFFECT_TYPE_INVISIBILITY ||
GetEffectType(eTest) == EFFECT_TYPE_IMPROVEDINVISIBILITY
)
RemoveEffect(oTarget, eTest);
eTest = GetNextEffect(oTarget);
}// end while - Effect loop
}// end if - Save
}// end if - Targeting limitations
// Get next target
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_PLACEABLE);
}// end while - Target Loop
}// end for - Twin Power
}// end if - Successfull manifestation
}