Further file organization
Further file organization
This commit is contained in:
90
nwn/nwnprc/trunk/newspellbook/true_ego_fright.nss
Normal file
90
nwn/nwnprc/trunk/newspellbook/true_ego_fright.nss
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
----------------
|
||||
Cadence of the Frightful Mind
|
||||
Acolyte of the Ego level 2+
|
||||
|
||||
true_ego_fright
|
||||
----------------
|
||||
|
||||
25/8/18 by Stratovarius
|
||||
*/ /** @file
|
||||
|
||||
Type of Feat: Class
|
||||
Prerequisite: Acolye of the Ego 2+
|
||||
Specifics: You can frighten your foes (as the fear spell, PH 229). The DC for the Will save to resist the effect is 10 + your acolyte of the ego level + your Cha modifier + the number of morphic cadences you know. The duration of the effect is 1 round per class level.
|
||||
Use: Selected.
|
||||
*/
|
||||
|
||||
#include "true_inc_trufunc"
|
||||
#include "true_utterhook"
|
||||
//#include "prc_alterations"
|
||||
|
||||
void main()
|
||||
{
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2006-7-19 by Stratovarius
|
||||
If you want to make changes to all utterances
|
||||
check true_utterhook to find out more
|
||||
|
||||
*/
|
||||
|
||||
if (!TruePreUtterCastCode())
|
||||
{
|
||||
// If code within the PreUtterCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTrueSpeaker = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
// Cadences always use personal truenames, even when targeting another creature
|
||||
struct utterance utter = EvaluateUtterance(oTrueSpeaker,
|
||||
oTrueSpeaker,
|
||||
METAUTTERANCE_NONE/* Use METAUTTERANCE_NONE if it has no Metautterance usable*/,
|
||||
LEXICON_EVOLVING_MIND /* Uses the same DC formula*/);
|
||||
|
||||
if(utter.bCanUtter)
|
||||
{
|
||||
int nClass = GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO, oTrueSpeaker);
|
||||
// This is done so Speak Unto the Masses can read it out of the structure
|
||||
utter.fDur = RoundsToSeconds(nClass);
|
||||
int nDC = 10 + nClass + GetAbilityModifier(ABILITY_CHARISMA, oTrueSpeaker);
|
||||
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S);
|
||||
effect eFear = EffectFrightened();
|
||||
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
|
||||
effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
float fDelay;
|
||||
//Link the fear and mind effects
|
||||
utter.eLink = EffectLinkEffects(eFear, eMind);
|
||||
utter.eLink = EffectLinkEffects(utter.eLink, eDur);
|
||||
|
||||
//Apply Impact
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, PRCGetSpellTargetLocation());
|
||||
//Get first target in the spell cone
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation(), TRUE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
|
||||
{
|
||||
fDelay = PRCGetRandomDelay();
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_FEAR));
|
||||
//Make a will save
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, OBJECT_SELF, fDelay))
|
||||
{
|
||||
// Duration Effects
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, utter.eLink, oTarget, utter.fDur, TRUE, utter.nSpellId, utter.nTruespeakerLevel);
|
||||
}
|
||||
}
|
||||
//Get next target in the spell cone
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation(), TRUE);
|
||||
}
|
||||
|
||||
// Mark for the Law of Sequence. This only happens if the cadence succeeds, which is why its down here.
|
||||
DoLawOfSequence(oTrueSpeaker, utter.nSpellId, utter.fDur);
|
||||
}// end if - Successful utterance
|
||||
}
|
Reference in New Issue
Block a user