PRC8/nwn/nwnprc/trunk/smp/phs_s_prisspher.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

94 lines
3.9 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.

/*:://////////////////////////////////////////////
//:: Spell Name Prismatic Sphere
//:: Spell FileName PHS_S_PrisSpher
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Abjuration
Level: Sor/Wiz 7
Components: V
Casting Time: 1 standard action
Range: 3.33M (10 ft.)
Effect: 3.33M.-radius (10-ft.) sphere centered on you
Duration: 1 min./level (D)
Saving Throw: See text
Spell Resistance: Yes
You conjure up an immobile, opaque globe of shimmering, multicolored light
that surrounds you and protects you from all forms of attack. The sphere
flashes in all colors of the visible spectrum.
Any other creature then yourself with less than 8 HD that is within 6.67M
(20 feet) of the sphere, which is 10M (30ft) from the centre point, is
blinded for 2d4x10 minutes by the colors (Spell resistance applies, no save).
You can pass into and out of the prismatic sphere and remain near it without
harm. However, when youre inside it, the sphere blocks any attempt to
project something through the sphere such as ranged weapons and including
spells. Other creatures that attempt to attack you or pass through the
sphere suffer a random effect of a color, randomly chosen from the table
below.
1d8 Color of Beam Effect
1 Red 20 points fire damage (Reflex half)
2 Orange 40 points acid damage (Reflex half)
3 Yellow 80 points electricity damage (Reflex half)
4 Green Poison (Kills; Fortitude partial, take 1d6 points of Con damage instead)
5 Blue Turned to stone (Fortitude negates)
6 Indigo Insane, as insanity spell (Will negates)
7 Violet Sent to another plane (Will negates)
8 Struck by two colors; roll twice more, ignoring any “8” results.
Typically, only the upper hemisphere of the globe will exist, since you
are at the center of the sphere, so the lower half is usually excluded by
the floor surface you are standing on. The sphere is affected by dispel
magic as normal.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Changes include the fact it won't do all 7 effects, it is affected by dispel
magic normally, it has a duration (might extend it higher, its a level 7
spell).
It still is immobile, and does blindness normally too (a second AOE)
How does the spell stopping work?
Well, it will add a new check into the spell hook. If we cast a spell
into the AOE's location (can use GetNearestObjectByTag() and distance check)
but we are not ourselves in it, it will fail.
Ranged weapons have 100% miss chance from both inside and outside (100%
concealment + 100% miss chance applied on enter, whatever).
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Spell hook check.
if(!PHS_SpellHookCheck(PHS_SPELL_PRISMATIC_SPHERE)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
location lTarget = GetSpellTargetLocation();// Should be OBJECT_SELF's location
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
// Duration - 1 minute/level
float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel, nMetaMagic);
// Declare effects
effect eAOE = EffectAreaOfEffect(PHS_AOE_PER_PRISMATIC_SPHERE);
// Set local integer so that the first ones will not be affected, which
// is removed after 0.2 seconds.
string sLocal = PHS_MOVING_BARRIER_START + IntToString(PHS_SPELL_PRISMATIC_SPHERE);
SetLocalInt(oCaster, sLocal, TRUE);
DelayCommand(0.2, DeleteLocalInt(oCaster, sLocal));
// Apply effects
PHS_ApplyLocationDuration(lTarget, eAOE, fDuration);
}