PRC8_fork/nwn/nwnprc/trunk/smp/phs_s_weird.nss

133 lines
5.8 KiB
Plaintext
Raw Permalink Normal View History

/*:://////////////////////////////////////////////
//:: Spell Name Weird
//:: Spell FileName PHS_S_Weird
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Illusion (Phantasm) [Fear, Mind-Affecting]
Level: Sor/Wiz 9
Components: V, S
Casting Time: 1 standard action
Range: Medium (20M)
Targets: All Hostile creatures in a 5M radius (15ft) sphere
Duration: Instantaneous
Saving Throw: Will disbelief (if interacted with), then Fortitude partial;
see text
Spell Resistance: Yes
This spell functions like phantasmal killer, except it can affect more than
one creature. You create a phantasmal image of the most fearsome creature
imaginable to the subject's simply by forming the fears of the subject<63>s
subconscious mind into something that its conscious mind can visualize: this
most horrible beast. Only the affected creatures see the phantasmal
creatures attacking them, though you see the attackers as shadowy shapes.
Each target first gets a Will save to recognize the image as unreal. If that
save fails, the phantasm touches the subject, and the subject must succeed
on a Fortitude save or die from fear. Even if a subject<63>s Fortitude save
succeeds, it still takes 3d6 points of damage and is stunned for 1 round.
The subject also takes 1d4 points of temporary Strength damage.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
As spell description.
This is actually pretty easy. Note there are quite a few immunties :-)
Its fear and mind affecting.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check
if(!PHS_SpellHookCheck(PHS_SPELL_WEIRD)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
object oTarget;
location lTarget = GetSpellTargetLocation();
int nSpellSaveDC = PHS_GetSpellSaveDC();
int nMetaMagic = PHS_GetMetaMagicFeat();
int nDam, nStrDam;
float fDelay;
// Duration for stunning is 1 round
float fStunDuration = PHS_GetDuration(PHS_ROUNDS, 1, nMetaMagic);
// Duration for strength decrease will be 24 hours, a good enough "Temp" time in NwN.
// * Ability decreases are not done "correctly" anyway
float fStrengthDuration = PHS_GetDuration(PHS_HOURS, 24, nMetaMagic);
// Declare effects
effect eDamVis = EffectVisualEffect(VFX_IMP_SONIC);
effect eDeath = EffectDeath();
// Need to make this supernatural, so that it ignores death immunity.
eDeath = SupernaturalEffect(eDeath);
effect eDeathVis = EffectVisualEffect(VFX_IMP_DEATH);
// Declare the 2 tempoary effects
effect eStun = EffectStunned();
effect eStunDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
effect eStunLink = EffectLinkEffects(eStun, eStunDur);
// Strength damage
effect eStrength; //= EffectAbilityDecrease(ABILITY_STRENGTH, d4());
effect eStrengthDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eStrengthLink;// = EffectLinkEffects(eStrength, eStrengthDur);
// Apply AOE visual
effect eImpact = EffectVisualEffect(VFX_FNF_WEIRD);
PHS_ApplyLocationVFX(lTarget, eImpact);
// Get the first creature, in a 30ft diameter, 15ft radius.
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_15, lTarget, TRUE);
while(GetIsObjectValid(oTarget))
{
// Needs to be an enemy to kill them. Add PvP check too.
if(GetIsReactionTypeHostile(oTarget))
{
// Random delay before damage or death
fDelay = PHS_GetRandomDelay(0.1, 1.5);
// Fire cast spell at event for the specified target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_WEIRD);
// Check spell resistance and immunity
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
{
// Make a will save against mind-affecting spells. Immune save.
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_MIND_SPELLS, oCaster, fDelay))
{
// Make a fortitude save against Mind Spells again.
if(!PHS_SavingThrow(SAVING_THROW_FORT, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_MIND_SPELLS, oCaster, fDelay))
{
// FAIL: Death!
DelayCommand(fDelay, PHS_ApplyInstantAndVFX(oTarget, eDeathVis, eDeath));
}
else
{
// PASS: Damage, stun and strength decrease.
nDam = PHS_MaximizeOrEmpower(6, 3, nMetaMagic);
nStrDam = PHS_MaximizeOrEmpower(4, 1, nMetaMagic);
// Do damage straight away, and declare strength link
DelayCommand(fDelay, PHS_ApplyDamageVFXToObject(oTarget, eDamVis, nDam));
// Strength Link
eStrength = EffectAbilityDecrease(ABILITY_STRENGTH, nStrDam);
eStrengthLink = EffectLinkEffects(eStrength, eStrengthDur);
// Apply strength damage
DelayCommand(fDelay, PHS_ApplyDuration(oTarget, eStrengthLink, fStrengthDuration));
// Do stun
DelayCommand(fDelay, PHS_ApplyDuration(oTarget, eStunLink, fStunDuration));
}
}
}
}
// Get the next creature, in a 30ft diameter, 15ft radius.
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_FEET_15, lTarget, TRUE);
}
}