forked from Jaysyn/PRC8
94 lines
3.9 KiB
Plaintext
94 lines
3.9 KiB
Plaintext
|
/*:://////////////////////////////////////////////
|
|||
|
//:: 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 you<6F>re 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 <20>8<EFBFBD> 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);
|
|||
|
}
|