//:://///////////////////////////////////////////// //:: Weird //:: NW_S0_Weird //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* All enemies in LOS of the spell must make 2 saves or die. Even IF the fortitude save is succesful, they will still take 4d10 damage. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: DEc 14 , 2001 //::////////////////////////////////////////////// //:: Last Updated By: Preston Watamaniuk, On: April 10, 2001 //:: VFX Pass By: Preston W, On: June 27, 2001 /* Patch 1.70, fix by Shadooow - had double death VFX - missing death VFX when spell killed creature lower than 7HD - second saving throw subtype changed to fear (as per spell's descriptors) - missing feedback when target was fear or mind spells immune */ #include "70_inc_spells" #include "x0_i0_spells" #include "x2_inc_spellhook" void main() { /* Spellcast Hook Code Added 2003-06-20 by Georg If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook //Declare major variables spellsDeclareMajorVariables(); effect eDam; effect eVis = EffectVisualEffect(VFX_IMP_SONIC); effect eVis2 = EffectVisualEffect(VFX_IMP_DEATH); effect eWeird = EffectVisualEffect(VFX_FNF_WEIRD); effect eAbyss = EffectVisualEffect(VFX_DUR_ANTI_LIGHT_10); int nDamage; float fDelay; //Apply the FNF VFX impact ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWeird, spell.Loc); //Get the first target in the spell area object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc, TRUE); while (GetIsObjectValid(oTarget)) { //Make a faction check if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster)) { fDelay = GetRandomDelay(3.0, 4.0); //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id)); //Make an SR Check if(!MyResistSpell(spell.Caster, oTarget, fDelay)) { if ( !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS,spell.Caster) && !GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR,spell.Caster)) { if(GetHitDice(oTarget) >= 7) { //Make a Will save against mind-affecting if(!MySavingThrow(SAVING_THROW_WILL, oTarget, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster, fDelay)) { // * I failed the saving throw. Now I die. //Apply VFX impact and death effect //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); effect eDeath = EffectDeath(); // Need to make this supernatural, so that it ignores death immunity. eDeath = SupernaturalEffect( eDeath ); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget)); } // Will save } else { // * I have less than 7HD, I die. //Apply VFX impact and death effect DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); effect eDeath = EffectDeath(); // Need to make this supernatural, so that it ignores death immunity. eDeath = SupernaturalEffect( eDeath ); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget)); } } else {//fear or mind spells immune //engine workaround to get proper feedback and VFX eVis = EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 1.0)); } } } //Get next target in spell area oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc, TRUE); } }