Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
123 lines
4.6 KiB
Plaintext
123 lines
4.6 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: Spell Name Spike Stones
|
||
//:: Spell FileName PHS_S_SpikeSton
|
||
//:://////////////////////////////////////////////
|
||
//:: In Game Spell desctiption
|
||
//:://////////////////////////////////////////////
|
||
Transmutation [Earth]
|
||
Level: Drd 4, Earth 4
|
||
Components: V, S, DF
|
||
Casting Time: 1 standard action
|
||
Range: Medium (20M)
|
||
Area: 2M/level square, to a maximum of 20x20M at level 10
|
||
Duration: 1 hour/level (D)
|
||
Saving Throw: Reflex partial
|
||
Spell Resistance: Yes
|
||
|
||
Rocky ground, stone floors, and similar surfaces shape themselves into long,
|
||
sharp points that blend into the background. Typically, this can only be cast
|
||
indoors, in a naturally created underground area.
|
||
|
||
Spike stones impede progress through an area and deal damage. Any creature
|
||
moving on foot into or through the spell’s area moves at half speed.
|
||
|
||
In addition, each creature moving through the area takes 1d8 points of
|
||
piercing damage for each 1 meter of movement through the spiked area, done
|
||
each round (a minimum of 1d8 is done as long as a creature moved).
|
||
|
||
Any creature that takes damage from this spell must also succeed on a Reflex
|
||
save or suffer injuries to its feet and legs that slow its land speed by
|
||
one-half. This speed penalty lasts for 24 hours or until the injured creature
|
||
receives a cure spell (which also restores lost hit points). Another
|
||
character can remove the penalty by taking 10 minutes to dress the injuries
|
||
and succeeding on a Heal check against the spell’s save DC.
|
||
|
||
Spike growth can’t be disabled with the Disable Device skill, and it is
|
||
automatically detected. Spike Growth can also be dispelled normally.
|
||
//:://////////////////////////////////////////////
|
||
//:: Spell Effects Applied / Notes
|
||
//:://////////////////////////////////////////////
|
||
This copies a lot from Spike Growth.
|
||
|
||
Won't overlap - one effect is one effect (uses the default set/remove
|
||
system, but also see just below)
|
||
|
||
A delayed integer setting is used to stop multiple heartbeats from running
|
||
on the same person.
|
||
|
||
Thier position is tracked, using SetLocation() mainly (which we can get
|
||
position points from easily). Note, of course, area checks are in place,
|
||
incase someone exits from the area and causes the On Exit to fire and
|
||
complete the damage.
|
||
|
||
The speed penalty is applied once, and so previous ones are removed (24
|
||
hour duration).
|
||
|
||
AOE is a minimum of 10Mx10M (level 5 druids get level 3 spells), up to 20x20
|
||
(for a level 10 caster).
|
||
|
||
Note: Default checks make this Exterior, Natural, Overground ONLY. There is
|
||
an additional module setting "only let spike stones operate in these areas"
|
||
and always a "never let this spell operate in this area" check too.
|
||
|
||
This is because this affects plants, right? and spike stones does the same
|
||
for rocks...woohoo...
|
||
//:://////////////////////////////////////////////
|
||
//:: Created By: Jasperre
|
||
//::////////////////////////////////////////////*/
|
||
|
||
#include "PHS_INC_SPELLS"
|
||
|
||
void main()
|
||
{
|
||
// Spell hook check.
|
||
if(!PHS_SpellHookCheck(PHS_SPELL_SPIKE_STONES)) return;
|
||
|
||
// Get caster
|
||
object oCaster = OBJECT_SELF;
|
||
object oArea = GetArea(oCaster);
|
||
|
||
// Force off toggle for this area
|
||
if(GetLocalInt(oArea, "PHS_SETTING_NO_SPIKE_STONES") == TRUE) return;
|
||
|
||
// Toggle for "only these areas"
|
||
if(!PHS_SettingGetGlobal("PHS_GROWTH_SPELLS_ONLY_IN_SET_AREAS"))
|
||
{
|
||
// Else, Must be in a natural, underground, inside area
|
||
if(GetIsAreaAboveGround(oArea) == TRUE ||
|
||
GetIsAreaInterior(oArea) == FALSE ||
|
||
GetIsAreaNatural(oArea) == AREA_ARTIFICIAL)
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
else if(!GetLocalInt(oArea, "PHS_SETTING_SPIKE_STONES_ON"))
|
||
{
|
||
// Stop
|
||
return;
|
||
}
|
||
|
||
// Declare major variables
|
||
location lTarget = GetSpellTargetLocation();
|
||
int nCasterLevel = PHS_GetCasterLevel();
|
||
int nMetaMagic = PHS_GetMetaMagicFeat();
|
||
// Duration - 1 hour/level (Note: Still dispellable)
|
||
float fDuration = PHS_GetDuration(PHS_HOURS, nCasterLevel, nMetaMagic);
|
||
|
||
// 2M a side level, and we do the vfx_persistant.2da entries, of course,
|
||
// starting at 10M, then 11, etc, up to 20.
|
||
// we add 1 for level 6, and so on, up to level 10, which adds 5
|
||
|
||
// Change caster level to be in limits
|
||
int nAOECaster = PHS_LimitInteger(nCasterLevel - 5, 0, 5);
|
||
|
||
// Add on, to the default one, 0 to 5.
|
||
int nAOE = PHS_AOE_PER_SPIKE_STONES_10 + nAOECaster;
|
||
|
||
// Declare effects
|
||
effect eAOE = EffectAreaOfEffect(nAOE);
|
||
|
||
// Apply effects
|
||
PHS_ApplyLocationDuration(lTarget, eAOE, fDuration);
|
||
}
|