PRC8/nwn/nwnprc/trunk/spells/nw_s0_scare.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

163 lines
5.4 KiB
Plaintext

//::///////////////////////////////////////////////
//:: [Scare]
//:: [NW_S0_Scare.nss]
//:: Copyright (c) 2000 Bioware Corp.
//:://////////////////////////////////////////////
//:: Will save or the target is scared for 1d4 rounds.
//:: NOTE THIS SPELL IS EQUAL TO **CAUSE FEAR** NOT SCARE.
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Jan 30, 2001
//:://////////////////////////////////////////////
//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001
//:: Modified March 2003 to give -2 attack and damage penalties
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
// modified by fluffyamoeba to make scare and cause fear
/**
* Cause Fear
*
* Necromancy [Fear, Mind-Affecting]
* Level: Brd 1, Clr 1, Death 1, Sor/Wiz 1
* Components: V, S
* Casting Time: 1 standard action
* Range: Close (25 ft. + 5 ft./2 levels)
* Target: One living creature with 5 or fewer HD
* Duration: 1d4 rounds or 1 round; see text
* Saving Throw: Will partial
* Spell Resistance: Yes
*
* The affected creature becomes frightened. If the subject succeeds on a Will save, it is shaken for 1 round.
* Creatures with 6 or more Hit Dice are immune to this effect.
*
* Cause fear counters and dispels remove fear.
*
*
* Scare
* Necromancy [Fear, Mind-Affecting]
* Level: Brd 2, Sor/Wiz 2
* Components: V, S, M
* Casting Time: 1 standard action
* Range: Medium (100 ft. + 10 ft./level)
* Targets: One living creature per three levels, no two of which can be more than 30 ft. apart
* Duration: 1 round/level or 1 round; see text for cause fear
* Saving Throw: Will partial
* Spell Resistance: Yes
*
* This spell functions like cause fear, except that it causes all targeted creatures of less than 6 HD to become frightened.
*
* Material Component: A bit of bone from an undead skeleton, zombie, ghoul, ghast, or mummy.
*/
#include "prc_inc_spells"
#include "prc_add_spell_dc"
// If the target fails their will save they are frightened, otherwise they are shaken
void ApplyScare(object oTarget, int nDuration);
void main()
{
// Set the spell school
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
//Declare major variables
object oTarget = PRCGetSpellTargetObject();
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
int nMetaMagic = PRCGetMetaMagicFeat();
int nDuration = d4();
int nSpellID = PRCGetSpellId();
//Do metamagic checks
if (CheckMetaMagic(nMetaMagic, METAMAGIC_EXTEND))
{
nDuration *= 2;
}
//Check the Hit Dice of the creature
if ((GetHitDice(oTarget) < 6) && GetObjectType(oTarget) == OBJECT_TYPE_CREATURE && PRCGetIsAliveCreature(oTarget))
{
// * added rep check April 2003
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID));
//Make SR check
if(!PRCDoResistSpell(OBJECT_SELF, oTarget))
{
ApplyScare(oTarget, nDuration);
}
}
}
if (nSpellID == SPELL_SCARE)
{
PRCSetSchool();
return;
}
// how many creatures (we've done one already)
int nCreatures = (CasterLvl/3)-1;
if (nCreatures >= 1)
{
object oNextTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oTarget), TRUE); // only creatures
int nCount;
while (GetIsObjectValid(oNextTarget) && nCount < nCreatures)
{
if ((GetHitDice(oNextTarget) < 6) && (oNextTarget != oTarget) && spellsIsTarget(oNextTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF)
&& oNextTarget != OBJECT_SELF && PRCGetIsAliveCreature(oNextTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oNextTarget, EventSpellCastAt(OBJECT_SELF, nSpellID));
//Make SR check
if(!PRCDoResistSpell(OBJECT_SELF, oNextTarget))
{
ApplyScare(oNextTarget, nDuration);
}
nCount++;
}
oNextTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(oTarget), TRUE); // only creatures
}
}
PRCSetSchool();
}
void ApplyScare(object oTarget, int nDuration)
{
effect eScare = EffectFrightened();
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
effect eLink = EffectLinkEffects(eMind, eScare);
effect eShaken = EffectShaken();
int CasterLvl = PRCGetCasterLevel(OBJECT_SELF);
//Make Will save versus fear
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, (PRCGetSaveDC(oTarget,OBJECT_SELF)), SAVING_THROW_TYPE_FEAR))
{
//Apply frightened effect on failed save
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration),TRUE,-1,CasterLvl);
}
else // apply shaken effect
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShaken, oTarget, RoundsToSeconds(nDuration),TRUE,-1,CasterLvl);
}