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
 | |
|     }
 | |
| }
 |