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.
550 lines
23 KiB
Plaintext
550 lines
23 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Call Chaos
|
|
//:: Spell FileName XXX_S_CallChaos
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Evocation [Chaos]
|
|
Level: Clr 5, Sor/Wiz 5
|
|
Components: V, S, M
|
|
Casting Time: 1 standard action
|
|
Range: Personal
|
|
Effect: 20.0M-radius burst (60-ft.)
|
|
Duration: Instantaneous; see text
|
|
Saving Throw: Special; see text
|
|
Spell Resistance: Yes; see text
|
|
Source: Various (Arilou_skiff)
|
|
|
|
This spell calls pure chaos to wreak havoc upon the battlefield, roll a d20
|
|
for every creature (including the caster!) within the burst range, and look
|
|
up the effect on the following list of possible effects. Generally, hope for
|
|
a higher roll on the list.
|
|
|
|
1. Creature must make a fortitude save, or be petrified for 10 minutes/level.
|
|
2. An attempt to dispel all magic is done on the target, at a base 1d20 +
|
|
1/caster level (Maximum +10) roll, as if Dispel Magic had been cast on them.
|
|
3. Creature must make a will save, or be polymorphed into a penguin for 10
|
|
minutes/level.
|
|
4. Creature pulses red for 1 minute/level.
|
|
5. Creature must make a will save or is slowed for 1 round/level.
|
|
6. Creature loses 1d6 gold coins/caster level, unless the gold makes a will
|
|
save using the creatures own will save.
|
|
7. Gems explode around the caster, dealing 2d6 damage, but real minor gems
|
|
appear around the creatures feet.
|
|
8. Creature bursts into flames, taking 2d6 + 1/caster level, (Max 2d6 + 20)
|
|
damage, reflex save for half.
|
|
9. A loud noise affects the Creature (if they can hear) and must make a will
|
|
save, or is stunned for 1 round/level.
|
|
10. Creature suffers 3d6 points of electircal damage, but is also hasted for
|
|
1d10 minutes.
|
|
11. Creature must make a will save, or be deafened for 1 minute/level.
|
|
12. Creature becomes agile and fast, gaining +4 dexterity for 1 minute/level.
|
|
13. Creature is entangled, for 1d6 rounds.
|
|
14. Creature is made invisible (as the spell) for 1 round/level.
|
|
15. Creature, if living, is healed for 5d6 + 1/caster level damage, undead
|
|
must make a will save or take the same in damage.
|
|
16. Creature is silenced (as the spell), unless they make a sucessful will
|
|
save, for 1 round/level.
|
|
17. Creature is surrounded by a Fire Shield, which mearly does 1d6 damage
|
|
to melee attackers, for 1 minute/level.
|
|
18. Creature is made more combat aware, and gains +2 damage and +2 to hit,
|
|
for 1 round/level.
|
|
19. Creature is healed of all mental effects (Confusion, Domination,
|
|
Charming, Insanity).
|
|
20. Creature has a small Globe of Invunrability on them for 1 minute/level,
|
|
making them immune to all 1 and 0 level spells.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
This is lowered in its effects (well, some of them) then the "original",
|
|
beucause some were much too silly or stupid for a mear level 5 spell with
|
|
a huge range.
|
|
|
|
Of course, the caster can resist things (thus resisting themselves, as if
|
|
they cast fireball on themselves, heh).
|
|
|
|
Effects were made with NwN in mind!
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "SMP_INC_SPELLS"
|
|
|
|
// Do chaos effects to oTarget.
|
|
// * Easier to code like this.
|
|
// * SR and PvP are in the loop. This will not work (even if good) on people who resist.
|
|
// * Uses fDelay to apply the effects, and do saves ETC.
|
|
void DoChaosEffects(object oTarget, object oCaster, float fDelay, int nSpellSaveDC, int nCasterLevel, int nMetaMagic);
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check.
|
|
if(!SMP_SpellHookCheck(SMP_SPELL_CALL_CHAOS)) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget;
|
|
location lTarget = GetSpellTargetLocation();// Should be OBJECT_SELF's location
|
|
int nCasterLevel = SMP_GetCasterLevel();
|
|
int nSpellSaveDC = SMP_GetSpellSaveDC();
|
|
int nMetaMagic = SMP_GetMetaMagicFeat();
|
|
float fDelay;
|
|
|
|
// Apply AOE visual
|
|
effect eImpact = EffectVisualEffect(SMP_VFX_FNF_CALL_CHAOS);
|
|
SMP_ApplyLocationVFX(lTarget, eImpact);
|
|
|
|
// Get all targets in a sphere, around the caster, 20.0M
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
// Loop targets
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// PvP Check
|
|
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
|
|
// Make sure they are not immune to spells
|
|
!SMP_TotalSpellImmunity(oTarget))
|
|
{
|
|
// Fire cast spell at event for the specified target
|
|
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_CALL_CHAOS, GetIsEnemy(oTarget));
|
|
|
|
// Get a random delay.
|
|
fDelay = SMP_GetRandomDelay(0.1, 1.0);
|
|
|
|
// GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
|
|
|
|
// Spell resistance And immunity checking.
|
|
if(!SMP_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Chaos effects
|
|
DoChaosEffects(oTarget, oCaster, fDelay, nSpellSaveDC, nCasterLevel, nMetaMagic);
|
|
}
|
|
}
|
|
// Get Next Target
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 20.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|
|
|
|
// Do chaos effects to oTarget.
|
|
// * Easier to code like this.
|
|
// SR is done in the loop, as are PvP checks.
|
|
// * Uses fDelay to apply the effects, and do saves ETC.
|
|
void DoChaosEffects(object oTarget, object oCaster, float fDelay, int nSpellSaveDC, int nCasterLevel, int nMetaMagic)
|
|
{
|
|
// Randomise it
|
|
int nRand = d20();
|
|
float fDuration;
|
|
|
|
switch(nRand)
|
|
{
|
|
// 1. Creature must make a fortitude save, or be petrified for 10 minutes/level.
|
|
case 1:
|
|
{
|
|
// * Exit if creature is immune to petrification
|
|
if(SMP_SpellsIsImmuneToPetrification(oTarget)) return;
|
|
|
|
// Fortitude save
|
|
if(!SMP_SavingThrow(SAVING_THROW_FORT, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
// Declare effects
|
|
effect ePetrify = SMP_CreateProperPetrifyEffectLink();
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel * 10, nMetaMagic);
|
|
|
|
// Apply it for the duration
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, ePetrify, fDuration));
|
|
}
|
|
}
|
|
break;
|
|
// 2. An attempt to dispel all magic is done on the target, at a base 1d20 +
|
|
// 1/caster level (Maximum +10) roll, as if Dispel Magic had been cast on them.
|
|
case 2:
|
|
{
|
|
// Apply dispel magic to them, no special checks - just basic
|
|
// dispel magic all.
|
|
effect eDispel = EffectDispelMagicAll(SMP_LimitInteger(nCasterLevel, 10));
|
|
effect eDispelVis = EffectVisualEffect(VFX_IMP_DISPEL);
|
|
|
|
// Apply it with VFX
|
|
DelayCommand(fDelay, SMP_ApplyInstantAndVFX(oTarget, eDispelVis, eDispel));
|
|
}
|
|
break;
|
|
// 3. Creature must make a will save, or be polymorphed into a penguin for 10
|
|
// minutes/level.
|
|
case 3:
|
|
{
|
|
// Will save
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
// Apply the polymorph
|
|
effect ePenguin = EffectPolymorph(POLYMORPH_TYPE_PENGUIN, TRUE);
|
|
effect ePenguinVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel * 10, nMetaMagic);
|
|
|
|
// Apply the visual and effect
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, ePenguinVis, ePenguin, fDuration));
|
|
}
|
|
}
|
|
break;
|
|
// 4. Creature glows red for 1 minute/level, emmiting light like a torch would.
|
|
case 4:
|
|
{
|
|
// Just glow.
|
|
effect eGlow = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the glow.
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eGlow, fDuration));
|
|
}
|
|
break;
|
|
// 5. Creature must make a will save or is slowed for 1 round/level.
|
|
case 5:
|
|
{
|
|
// Will save
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
// Apply the slowing
|
|
effect eSlow = EffectSlow();
|
|
effect eSlowCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eSlowLink = EffectLinkEffects(eSlow, eSlowCessate);
|
|
effect eSlowVis = EffectVisualEffect(VFX_IMP_SLOW);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the visual and effect
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eSlowVis, eSlow, fDuration));
|
|
}
|
|
}
|
|
break;
|
|
// 6. Creature loses 1d6 gold coins/caster level, unless the gold makes a will
|
|
// save using the creatures own will save.
|
|
case 6:
|
|
{
|
|
// Will save
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
// Get gold to lose
|
|
int nGold = SMP_MaximizeOrEmpower(6, nCasterLevel, nMetaMagic);
|
|
// Lose some gold
|
|
TakeGoldFromCreature(nGold, oTarget, TRUE);
|
|
}
|
|
}
|
|
break;
|
|
// 7. Gems explode around the caster, dealing 2d6 damage, but real minor gems
|
|
// appear around the creatures feet.
|
|
case 7:
|
|
{
|
|
// Get damage, and gems to create
|
|
int nGems = SMP_MaximizeOrEmpower(6, 2, nMetaMagic);
|
|
|
|
// Declare effects
|
|
effect eGemVis = EffectVisualEffect(SMP_VFX_IMP_GEM_EXPLODE);
|
|
|
|
// Do damage
|
|
DelayCommand(fDelay, SMP_ApplyDamageVFXToObject(oTarget, eGemVis, nGems));
|
|
|
|
// Create some gems around the caster
|
|
location lTarget = GetLocation(oTarget);
|
|
int nCnt;
|
|
for(nCnt = 1; nCnt <= nGems; nCnt++)
|
|
{
|
|
// Choose a random position around the caster
|
|
SMP_GetRandomLocation(lTarget, 1);
|
|
|
|
// Create a gem there
|
|
CreateObject(OBJECT_TYPE_ITEM, "SMP_callchaosgem", lTarget);
|
|
}
|
|
}
|
|
break;
|
|
// 8. Creature bursts into flames, taking 2d6 + 1/caster level, (Max 2d6 + 20)
|
|
// damage, reflex save for half.
|
|
case 8:
|
|
{
|
|
// 2d6 + 1/level damage, reflex for half.
|
|
int nFlameDam = SMP_MaximizeOrEmpower(6, 2, nMetaMagic, SMP_LimitInteger(nCasterLevel, 20));
|
|
|
|
// Change damage on a reflex save
|
|
nFlameDam = SMP_GetAdjustedDamage(SAVING_THROW_REFLEX, nFlameDam, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay);
|
|
|
|
// Do damage, if any
|
|
if(nFlameDam > 0)
|
|
{
|
|
effect eFlameVis = EffectVisualEffect(VFX_IMP_FLAME_M);
|
|
|
|
// Delay damage
|
|
DelayCommand(fDelay, SMP_ApplyDamageVFXToObject(oTarget, eFlameVis, nFlameDam, DAMAGE_TYPE_FIRE));
|
|
}
|
|
}
|
|
break;
|
|
// 9. A loud noise affects the Creature (if they can hear) and must make a will
|
|
// save, or is stunned for 1 round/level.
|
|
case 9:
|
|
{
|
|
// Do the visual always
|
|
effect eLoudImpact = EffectVisualEffect(VFX_FNF_SOUND_BURST);
|
|
location lTarget = GetLocation(oTarget);
|
|
float fNewDelay = fDelay;
|
|
if(fNewDelay > 0.2) fNewDelay -= 0.1;
|
|
DelayCommand(fNewDelay, SMP_ApplyLocationVFX(lTarget, eLoudImpact));
|
|
|
|
// Must be able to hear
|
|
if(SMP_GetCanHear(oTarget))
|
|
{
|
|
// Will save negates
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
// Do stunning
|
|
effect eStun = EffectStunned();
|
|
effect eStunImp = EffectVisualEffect(VFX_IMP_STUN);
|
|
effect eStunDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
|
|
effect eStunCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eStunLink = EffectLinkEffects(eStun, eStunCessate);
|
|
eStunLink = EffectLinkEffects(eStunLink, eStunDur);
|
|
|
|
// Get duration
|
|
SMP_GetDuration(SMP_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply it
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eStunImp, eStunLink, fDuration));
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
// 10. Creature suffers 3d6 points of electircal damage, but is also hasted for
|
|
// 1d10 minutes.
|
|
case 10:
|
|
{
|
|
// 3d6 damage
|
|
int nHasteDam = SMP_MaximizeOrEmpower(6, 3, nMetaMagic);
|
|
|
|
// Delay damage
|
|
DelayCommand(fDelay, SMP_ApplyDamageToObject(oTarget, nHasteDam, DAMAGE_TYPE_ELECTRICAL));
|
|
|
|
// Apply haste too
|
|
fDuration = SMP_GetRandomDuration(SMP_ROUNDS, 10, 1, nMetaMagic);
|
|
|
|
// Apply it
|
|
effect eHaste = SMP_CreateHasteEffect();
|
|
effect eHasteCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eHasteVis = EffectVisualEffect(VFX_IMP_HASTE);
|
|
effect eHasteLink = EffectLinkEffects(eHaste, eHasteCessate);
|
|
|
|
// Apply it for the duration
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eHasteVis, eHasteLink, fDuration));
|
|
}
|
|
break;
|
|
// 11. Creature must make a will save, or be deafened for 1 minute/level.
|
|
case 11:
|
|
{
|
|
// Will save
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
effect eDeaf = EffectDeaf();
|
|
effect eDeafCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eDeafLink = EffectLinkEffects(eDeaf, eDeafCessate);
|
|
effect eDeafImp = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the deafness
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eDeafImp, eDeafLink, fDuration));
|
|
}
|
|
}
|
|
break;
|
|
// 12. Creature becomes agile and fast, gaining +4 dexterity for 1 minute/level.
|
|
case 12:
|
|
{
|
|
// Create dexterity bonus
|
|
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 4);
|
|
effect eDexCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eDexLink = EffectLinkEffects(eDex, eDexCessate);
|
|
effect eDexImp = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the dexterity
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eDexImp, eDexLink, fDuration));
|
|
}
|
|
break;
|
|
// 13. Creature is entangled, for 1d6 rounds.
|
|
case 13:
|
|
{
|
|
// Create dexterity bonus
|
|
effect eEntangle = EffectEntangle();
|
|
effect eEntangleCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eEntangleDur = EffectVisualEffect(VFX_DUR_ENTANGLE);
|
|
effect eEntangleLink = EffectLinkEffects(eEntangle, eEntangleCessate);
|
|
eEntangleLink = EffectLinkEffects(eEntangleLink, eEntangleDur);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetRandomDuration(SMP_ROUNDS, 6, 1, nMetaMagic);
|
|
|
|
// Apply the dexterity
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eEntangleLink, fDuration));
|
|
}
|
|
break;
|
|
// 14. Creature is made invisible (as the spell) for 1 round/level.
|
|
case 14:
|
|
{
|
|
// Determine duration in minutes
|
|
fDuration = SMP_GetDuration(SMP_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Declare effects
|
|
effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL);
|
|
effect eInvisCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eInvisLink = EffectLinkEffects(eInvis, eInvisCessate);
|
|
|
|
// Apply VNF and effect.
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eInvisLink, fDuration));
|
|
}
|
|
break;
|
|
// 15. Creature, if living, is healed for 5d6 + 1/caster level damage, undead
|
|
// must make a will save or take the same in damage.
|
|
case 15:
|
|
{
|
|
// Get what to heal/damage
|
|
int nToHeal = SMP_MaximizeOrEmpower(6, 5, nMetaMagic, nCasterLevel);
|
|
effect eHealVis;
|
|
|
|
// Check if alive
|
|
if(SMP_GetIsAliveCreature(oTarget))
|
|
{
|
|
// Heal for the damage
|
|
effect eHeal = EffectHeal(nToHeal);
|
|
eHealVis = EffectVisualEffect(VFX_IMP_HEALING_G);
|
|
|
|
// Do the healing and visual
|
|
DelayCommand(fDelay, SMP_ApplyInstantAndVFX(oTarget, eHealVis, eHeal));
|
|
}
|
|
else if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
|
{
|
|
// Will save for half damage
|
|
nToHeal = SMP_GetAdjustedDamage(SAVING_THROW_WILL, nToHeal, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay);
|
|
|
|
// Do damage
|
|
if(nToHeal > 0)
|
|
{
|
|
// Visual effect
|
|
eHealVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
|
// Do damage and visual
|
|
DelayCommand(fDelay, SMP_ApplyDamageVFXToObject(oTarget, eHealVis, nToHeal, DAMAGE_TYPE_DIVINE));
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
// 16. Creature is silenced (as the spell), unless they make a sucessful will
|
|
// save, for 1 round/level.
|
|
case 16:
|
|
{
|
|
// Will save
|
|
if(!SMP_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_CHAOS, oCaster, fDelay))
|
|
{
|
|
effect eSilence = EffectSilence();
|
|
effect eSilenceCessate = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
effect eSilenceVis = EffectVisualEffect(VFX_IMP_SILENCE);
|
|
effect eSilenceImmune = EffectDamageImmunityIncrease(DAMAGE_TYPE_SONIC, 100);
|
|
effect eSilenceLink = EffectLinkEffects(eSilenceCessate, eSilence);
|
|
eSilenceLink = EffectLinkEffects(eSilenceLink, eSilenceImmune);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the silence
|
|
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eSilenceVis, eSilenceLink, fDuration));
|
|
}
|
|
}
|
|
break;
|
|
// 17. Creature is surrounded by a Fire Shield, which mearly does 1d6 damage
|
|
// to melee attackers, for 1 minute/level.
|
|
case 17:
|
|
{
|
|
// Fire shield
|
|
effect eFireShield = EffectDamageShield(0, DAMAGE_BONUS_1d6, DAMAGE_TYPE_FIRE);
|
|
effect eFireShieldDur = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
|
|
effect eFireShieldCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eFireShieldLink = EffectLinkEffects(eFireShield, eFireShieldDur);
|
|
eFireShieldLink = EffectLinkEffects(eFireShieldLink, eFireShieldCessate);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the shield
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eFireShieldLink, fDuration));
|
|
}
|
|
break;
|
|
// 18. Creature is made more combat aware, and gains +2 damage and +2 to hit,
|
|
// for 1 round/level.
|
|
case 18:
|
|
{
|
|
// +2 to damage and to hit.
|
|
effect eDHDam = EffectDamageIncrease(2, DAMAGE_TYPE_MAGICAL);
|
|
effect eDHHit = EffectAttackIncrease(2);
|
|
effect eDHCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eDHLink = EffectLinkEffects(eDHDam, eDHHit);
|
|
eDHLink = EffectLinkEffects(eDHLink, eDHCessate);
|
|
|
|
// Get rounds
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the shield
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eDHLink, fDuration));
|
|
}
|
|
break;
|
|
// 19. Creature is healed of all mental effects (Confusion, Domination,
|
|
// Charming, Insanity).
|
|
case 19:
|
|
{
|
|
// Apply visual
|
|
effect eVis = EffectVisualEffect(VFX_IMP_GOOD_HELP);
|
|
DelayCommand(fDelay, SMP_ApplyVFX(oTarget, eVis));
|
|
|
|
// Remove all things as above.
|
|
// * Only thing to be done instantly.
|
|
effect eCheck = GetFirstEffect(oTarget);
|
|
while(GetIsEffectValid(eCheck))
|
|
{
|
|
// Remove it if it is the right type
|
|
switch(GetEffectType(eCheck))
|
|
{
|
|
case EFFECT_TYPE_CHARMED:
|
|
case EFFECT_TYPE_CONFUSED:
|
|
case EFFECT_TYPE_DAZED:
|
|
case EFFECT_TYPE_DOMINATED:
|
|
case EFFECT_TYPE_FRIGHTENED:
|
|
{
|
|
RemoveEffect(oTarget, eCheck);
|
|
}
|
|
}
|
|
eCheck = GetNextEffect(oTarget);
|
|
}
|
|
}
|
|
break;
|
|
// 20. Creature has a small Globe of Invunrability on them for 1 minute/level,
|
|
// making them immune to all 1 and 0 level spells.
|
|
case 20:
|
|
{
|
|
// Declare effects
|
|
effect eGlobe = EffectSpellLevelAbsorption(1, 0, SPELL_SCHOOL_GENERAL);
|
|
effect eGlobeCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eGlobeDur = EffectVisualEffect(VFX_DUR_GLOBE_MINOR);
|
|
// Link Effects
|
|
effect eGlobeLink = EffectLinkEffects(eGlobe, eGlobeCessate);
|
|
eGlobeLink = EffectLinkEffects(eGlobeLink, eGlobeDur);
|
|
|
|
// Get duration
|
|
fDuration = SMP_GetDuration(SMP_MINUTES, nCasterLevel, nMetaMagic);
|
|
|
|
// Apply the glove
|
|
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eGlobeLink, fDuration));
|
|
}
|
|
break;
|
|
// End
|
|
}
|
|
}
|