diff --git a/_removed/70_spellhook.ncs b/_removed/70_spellhook.ncs
new file mode 100644
index 0000000..c93fae0
Binary files /dev/null and b/_removed/70_spellhook.ncs differ
diff --git a/_removed/70_spellhook.nss b/_removed/70_spellhook.nss
new file mode 100644
index 0000000..6dec0bc
--- /dev/null
+++ b/_removed/70_spellhook.nss
@@ -0,0 +1,257 @@
+//::///////////////////////////////////////////////
+//:: Community Patch 1.71: Improve Spell Hook Include File
+//:: 70_spellhook
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+
+    This file acts as a hub for all code that
+    is hooked into the nwn spellscripts'
+
+    If you want to implement material components
+    into spells or add restrictions to certain
+    spells, this is the place to do it.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Shadooow
+//:: Created On: 2012-01-17
+//:://////////////////////////////////////////////
+
+#include "x2_inc_spellhook"
+
+int MusicalInstrumentsCheck(object oItem)
+{
+    int bRulesApply = GetGameDifficulty() >= GAME_DIFFICULTY_CORE_RULES;
+    if(bRulesApply)
+    {
+        switch(GetLocalInt(GetModule(),"71_RESTRICT_MUSICAL_INSTRUMENTS"))
+        {
+            case 1://perform based
+                if(GetSkillRank(SKILL_PERFORM) > -1)
+                {
+                    int nDC = GetLocalInt(oItem,"MUSICAL_INSTRUMENT_DC");
+                    if(!nDC)
+                    {
+                        nDC = 7+3*StringToInt(Get2DAString("des_crft_spells","Level",GetSpellId()));
+                    }
+                    if(!GetIsSkillSuccessful(OBJECT_SELF, SKILL_PERFORM, nDC))
+                    {
+                        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), OBJECT_SELF);
+                        return FALSE;
+                    }
+                }
+                else
+                {
+                    FloatingTextStrRefOnCreature(8288,OBJECT_SELF,FALSE);//you cannot use this skill
+                    return FALSE;
+                }
+            break;
+            case 2://song feat based
+                if(GetHasFeat(FEAT_BARD_SONGS))
+                {
+                    DecrementRemainingFeatUses(OBJECT_SELF,FEAT_BARD_SONGS);
+                }
+                else
+                {
+                    FloatingTextStrRefOnCreature(40063,OBJECT_SELF,FALSE);
+                    return FALSE;
+                }
+            break;
+        }
+    }
+    int bDeaf;
+    effect e1 = GetNextEffect(OBJECT_SELF);//part1 check for silence effect
+    while(GetIsEffectValid(e1))
+    {
+        switch(GetEffectType(e1))
+        {
+            case EFFECT_TYPE_SILENCE:
+            FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
+            return FALSE;
+            case EFFECT_TYPE_DEAF:
+            bDeaf = TRUE;
+            break;
+        }
+        e1 = GetNextEffect(OBJECT_SELF);
+    }
+    if(bDeaf && bRulesApply && d100() < 21)// 20% chance to fail under deafness
+    {
+        FloatingTextStrRefOnCreature(83576,OBJECT_SELF); //* You can not concentrate on using this ability effectively *
+        return FALSE;
+    }
+    string music = GetLocalString(oItem,"MUSICAL_INSTRUMENT_SOUND");
+    if(music == "")
+    {
+        music = "sdr_bardsong";
+    }
+    PlaySound(music);
+    return TRUE;
+}
+
+//------------------------------------------------------------------------------
+// if X2_EXECUTE_SCRIPT_END is set by this script, the original spell will not be cast
+// the order in which the functions are called here DOES MATTER, changing it
+// WILL break the crafting subsystems
+//------------------------------------------------------------------------------
+void main()
+{
+   object oTarget = GetSpellTargetObject();
+   object oItem = GetSpellCastItem();
+
+   if(oItem != OBJECT_INVALID)
+   {
+       int spellOverride = GetLocalInt(oItem,"ITEM_SPELL_OVERRIDE");
+       if(spellOverride != 0 && !GetLocalInt(GetModule(),"SPELL_OVERRIDE_FINISHED"))
+       {
+           SetLocalInt(GetModule(),"SPELL_OVERRIDE_FINISHED",TRUE);
+           ExecuteScript(Get2DAString("spells","ImpactScript",spellOverride < 0 ? 0 : spellOverride),OBJECT_SELF);
+           SetLocalInt(GetModule(),"SPELL_OVERRIDE_FINISHED",FALSE);
+           SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
+           return;
+       }
+   }
+   else//metamagic exploit handling
+   {
+       int nMeta = GetMetaMagicFeat();
+       if((nMeta == METAMAGIC_EMPOWER && !GetHasFeat(FEAT_EMPOWER_SPELL)) || (nMeta == METAMAGIC_MAXIMIZE && !GetHasFeat(FEAT_MAXIMIZE_SPELL)))
+       {
+           effect e = GetFirstEffect(OBJECT_SELF);
+           nMeta = -1;
+           while(GetIsEffectValid(e))
+           {
+               if(GetEffectType(e) == EFFECT_TYPE_POLYMORPH)//if used in polymorph nothing happens, CP fixes this exploit in engine
+               {
+                   nMeta = 0;
+                   break;
+               }
+           }
+       }
+       else if((nMeta == METAMAGIC_EXTEND && !GetHasFeat(FEAT_EXTEND_SPELL)) || (nMeta == METAMAGIC_QUICKEN && !GetHasFeat(FEAT_QUICKEN_SPELL)) ||
+              (nMeta == METAMAGIC_SILENT && !GetHasFeat(FEAT_SILENCE_SPELL)) || (nMeta == METAMAGIC_STILL && !GetHasFeat(FEAT_STILL_SPELL)))
+       {
+               nMeta = -1;
+       }
+       if(nMeta < 0)
+       {
+           //block the spell for exploit abuse
+           FloatingTextStrRefOnCreature(3734,OBJECT_SELF,FALSE);//prints "Spell failed!"
+           SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
+           return;
+       }
+   }
+   //---------------------------------------------------------------------------
+   // This small addition will check to see if the target is mounted and the
+   // spell is therefor one that should not be permitted.
+   //---------------------------------------------------------------------------
+   if(!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+   { // do check for abort due to being mounted check
+       switch(GetPhenoType(oTarget))
+       {// shape shifting not allowed while mounted
+       case 3:
+       case 5:
+       case 6:
+       case 8:
+        if(X3ShapeShiftSpell(oTarget))
+        {
+           SetLocalInt(oTarget, "Polymorphed", TRUE);
+           if(GetIsPC(oTarget))
+           {
+           FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+           }
+        SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
+        return;
+        }// shape shifting not allowed while mounted
+       break;
+       }
+   } // do check for abort due to being mounted check
+
+
+   //---------------------------------------------------------------------------
+   // This stuff is only interesting for player characters we assume that use
+   // magic device always works and NPCs don't use the crafting feats or
+   // sequencers anyway. Thus, any NON PC spellcaster always exits this script
+   // with TRUE (unless they are DM possessed or in the Wild Magic Area in
+   // Chapter 2 of Hordes of the Underdark.
+   //---------------------------------------------------------------------------
+   /*if (!GetIsPC(OBJECT_SELF))
+   {
+       if( !GetIsDMPossessed(OBJECT_SELF) && !GetLocalInt(GetArea(OBJECT_SELF), "X2_L_WILD_MAGIC"))
+       {
+            return;
+       }
+   }*/
+
+   //---------------------------------------------------------------------------
+   // Break any spell require maintaining concentration (only black blade of
+   // disaster)
+   // /*REM*/ X2BreakConcentrationSpells();
+   //---------------------------------------------------------------------------
+
+   //---------------------------------------------------------------------------
+   // Run use magic device skill check
+   //---------------------------------------------------------------------------
+   int nContinue = X2UseMagicDeviceCheck();
+
+   if (nContinue)
+   {
+       //-----------------------------------------------------------------------
+       // run any user defined spellscript here
+       //-----------------------------------------------------------------------
+       nContinue = X2RunUserDefinedSpellScript();
+   }
+
+   //---------------------------------------------------------------------------
+   // The following code is only of interest if an item was targeted
+   //---------------------------------------------------------------------------
+   if (GetIsObjectValid(oTarget) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
+   {
+       //-----------------------------------------------------------------------
+       // Check if spell was used to trigger item creation feat
+       //-----------------------------------------------------------------------
+       if (nContinue)
+       {
+           nContinue = !ExecuteScriptAndReturnInt("x2_pc_craft",OBJECT_SELF);
+       }
+
+       //-----------------------------------------------------------------------
+       // Check if spell was used for on a sequencer item
+       //-----------------------------------------------------------------------
+       if (nContinue)
+       {
+           nContinue = !X2GetSpellCastOnSequencerItem(oTarget);
+       }
+
+       //-----------------------------------------------------------------------
+       // * Execute item OnSpellCast At routing script if activated
+       //-----------------------------------------------------------------------
+       if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_TAGBASED_SCRIPTS))
+       {
+           SetUserDefinedItemEventNumber(X2_ITEM_EVENT_SPELLCAST_AT);
+           int nRet = ExecuteScriptAndReturnInt(GetUserDefinedItemEventScriptName(oTarget),OBJECT_SELF);
+           if (nRet == X2_EXECUTE_SCRIPT_END)
+           {
+               SetExecutedScriptReturnValue(X2_EXECUTE_SCRIPT_END);
+               return;
+           }
+       }
+
+       //-----------------------------------------------------------------------
+       // Prevent any spell that has no special coding to handle targetting of items
+       // from being cast on items. We do this because we can not predict how
+       // all the hundreds spells in NWN will react when cast on items
+       //-----------------------------------------------------------------------
+       if (nContinue)
+       {
+           nContinue = X2CastOnItemWasAllowed(oTarget);
+       }
+   }
+
+   if(GetLocalInt(oItem,"MUSICAL_INSTRUMENT"))//variable indicating musical instrument
+   {
+       nContinue = MusicalInstrumentsCheck(oItem);
+   }
+
+
+   SetExecutedScriptReturnValue(!nContinue);
+}
diff --git a/_removed/druid_air.ncs b/_removed/druid_air.ncs
new file mode 100644
index 0000000..a07942a
Binary files /dev/null and b/_removed/druid_air.ncs differ
diff --git a/_removed/druid_air.nss b/_removed/druid_air.nss
new file mode 100644
index 0000000..b1c053a
--- /dev/null
+++ b/_removed/druid_air.nss
@@ -0,0 +1,162 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+/* #include "x2_inc_itemprop"
+#include "70_inc_itemprop" */
+#include "prc_x2_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_HUGE_AIR_ELEMENTAL;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ELDER_AIR_ELEMENTAL;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_badger.ncs b/_removed/druid_badger.ncs
new file mode 100644
index 0000000..3977337
Binary files /dev/null and b/_removed/druid_badger.ncs differ
diff --git a/_removed/druid_badger.nss b/_removed/druid_badger.nss
new file mode 100644
index 0000000..e9ab270
--- /dev/null
+++ b/_removed/druid_badger.nss
@@ -0,0 +1,164 @@
+//::///////////////////////////////////////////////
+//:: Wild Shape
+//:: NW_S2_WildShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into animal forms.
+
+    Updated: Sept 30 2003, Georg Z.
+      * Made Armor merge with druid to make forms
+        more useful.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nMetaMagic = GetMetaMagicFeat();
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    //Enter Metamagic conditions
+    if (nMetaMagic == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    nPoly = POLYMORPH_TYPE_BADGER;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_BADGER;
+        }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+        IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+}
diff --git a/_removed/druid_bear.ncs b/_removed/druid_bear.ncs
new file mode 100644
index 0000000..09378ea
Binary files /dev/null and b/_removed/druid_bear.ncs differ
diff --git a/_removed/druid_bear.nss b/_removed/druid_bear.nss
new file mode 100644
index 0000000..9738dd4
--- /dev/null
+++ b/_removed/druid_bear.nss
@@ -0,0 +1,164 @@
+//::///////////////////////////////////////////////
+//:: Wild Shape
+//:: NW_S2_WildShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into animal forms.
+
+    Updated: Sept 30 2003, Georg Z.
+      * Made Armor merge with druid to make forms
+        more useful.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nMetaMagic = GetMetaMagicFeat();
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    //Enter Metamagic conditions
+    if (nMetaMagic == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    nPoly = POLYMORPH_TYPE_BROWN_BEAR;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_BROWN_BEAR;
+        }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+        IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+}
diff --git a/_removed/druid_blued.ncs b/_removed/druid_blued.ncs
new file mode 100644
index 0000000..9ce00b7
Binary files /dev/null and b/_removed/druid_blued.ncs differ
diff --git a/_removed/druid_blued.nss b/_removed/druid_blued.nss
new file mode 100644
index 0000000..2c52e56
--- /dev/null
+++ b/_removed/druid_blued.nss
@@ -0,0 +1,161 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_ANCIENT_BLUE_DRAGON;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ANCIENT_BLUE_DRAGON;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_boar.ncs b/_removed/druid_boar.ncs
new file mode 100644
index 0000000..cce40a8
Binary files /dev/null and b/_removed/druid_boar.ncs differ
diff --git a/_removed/druid_boar.nss b/_removed/druid_boar.nss
new file mode 100644
index 0000000..cb6b0d2
--- /dev/null
+++ b/_removed/druid_boar.nss
@@ -0,0 +1,164 @@
+//::///////////////////////////////////////////////
+//:: Wild Shape
+//:: NW_S2_WildShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into animal forms.
+
+    Updated: Sept 30 2003, Georg Z.
+      * Made Armor merge with druid to make forms
+        more useful.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nMetaMagic = GetMetaMagicFeat();
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    //Enter Metamagic conditions
+    if (nMetaMagic == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    nPoly = POLYMORPH_TYPE_BOAR;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_BOAR;
+        }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+        IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+}
diff --git a/_removed/druid_earth.ncs b/_removed/druid_earth.ncs
new file mode 100644
index 0000000..93df9fa
Binary files /dev/null and b/_removed/druid_earth.ncs differ
diff --git a/_removed/druid_earth.nss b/_removed/druid_earth.nss
new file mode 100644
index 0000000..9427bdf
--- /dev/null
+++ b/_removed/druid_earth.nss
@@ -0,0 +1,161 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_HUGE_EARTH_ELEMENTAL;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ELDER_EARTH_ELEMENTAL;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_fire.ncs b/_removed/druid_fire.ncs
new file mode 100644
index 0000000..0630bae
Binary files /dev/null and b/_removed/druid_fire.ncs differ
diff --git a/_removed/druid_fire.nss b/_removed/druid_fire.nss
new file mode 100644
index 0000000..f8bb608
--- /dev/null
+++ b/_removed/druid_fire.nss
@@ -0,0 +1,161 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_HUGE_FIRE_ELEMENTAL;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ELDER_FIRE_ELEMENTAL;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_greend.ncs b/_removed/druid_greend.ncs
new file mode 100644
index 0000000..d354c73
Binary files /dev/null and b/_removed/druid_greend.ncs differ
diff --git a/_removed/druid_greend.nss b/_removed/druid_greend.nss
new file mode 100644
index 0000000..8871743
--- /dev/null
+++ b/_removed/druid_greend.nss
@@ -0,0 +1,161 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_ANCIENT_GREEN_DRAGON;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ANCIENT_GREEN_DRAGON;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_panther.ncs b/_removed/druid_panther.ncs
new file mode 100644
index 0000000..9b3fb4f
Binary files /dev/null and b/_removed/druid_panther.ncs differ
diff --git a/_removed/druid_panther.nss b/_removed/druid_panther.nss
new file mode 100644
index 0000000..2d7290d
--- /dev/null
+++ b/_removed/druid_panther.nss
@@ -0,0 +1,164 @@
+//::///////////////////////////////////////////////
+//:: Wild Shape
+//:: NW_S2_WildShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into animal forms.
+
+    Updated: Sept 30 2003, Georg Z.
+      * Made Armor merge with druid to make forms
+        more useful.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nMetaMagic = GetMetaMagicFeat();
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    //Enter Metamagic conditions
+    if (nMetaMagic == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    nPoly = POLYMORPH_TYPE_PANTHER;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_PANTHER;
+        }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+        IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+}
diff --git a/_removed/druid_redd.ncs b/_removed/druid_redd.ncs
new file mode 100644
index 0000000..36eb006
Binary files /dev/null and b/_removed/druid_redd.ncs differ
diff --git a/_removed/druid_redd.nss b/_removed/druid_redd.nss
new file mode 100644
index 0000000..48cd844
--- /dev/null
+++ b/_removed/druid_redd.nss
@@ -0,0 +1,161 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_ANCIENT_RED_DRAGON;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ANCIENT_RED_DRAGON;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_water.ncs b/_removed/druid_water.ncs
new file mode 100644
index 0000000..9be42e7
Binary files /dev/null and b/_removed/druid_water.ncs differ
diff --git a/_removed/druid_water.nss b/_removed/druid_water.nss
new file mode 100644
index 0000000..9b77500
--- /dev/null
+++ b/_removed/druid_water.nss
@@ -0,0 +1,161 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shape
+//:: NW_S2_ElemShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into elemental forms.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID); //GetCasterLevel(OBJECT_SELF);
+    int bElder = FALSE;
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    if(GetLevelByClass(CLASS_TYPE_DRUID) >= 20)
+    {
+        bElder = TRUE;
+    }
+    //Determine Polymorph subradial type
+    if(bElder == FALSE)
+    {
+        nPoly = POLYMORPH_TYPE_HUGE_WATER_ELEMENTAL;
+    }
+    else
+    {
+        nPoly = POLYMORPH_TYPE_ELDER_WATER_ELEMENTAL;
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_ELEMENTAL_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+
+}
diff --git a/_removed/druid_wolf.ncs b/_removed/druid_wolf.ncs
new file mode 100644
index 0000000..21754d3
Binary files /dev/null and b/_removed/druid_wolf.ncs differ
diff --git a/_removed/druid_wolf.nss b/_removed/druid_wolf.nss
new file mode 100644
index 0000000..bddd70e
--- /dev/null
+++ b/_removed/druid_wolf.nss
@@ -0,0 +1,164 @@
+//::///////////////////////////////////////////////
+//:: Wild Shape
+//:: NW_S2_WildShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into animal forms.
+
+    Updated: Sept 30 2003, Georg Z.
+      * Made Armor merge with druid to make forms
+        more useful.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70, fix by Shadooow
+
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "x2_inc_itemprop"
+#include "70_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nMetaMagic = GetMetaMagicFeat();
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    //Enter Metamagic conditions
+    if (nMetaMagic == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    nPoly = POLYMORPH_TYPE_WOLF;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_WOLF;
+        }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+    if (GetIsObjectValid(oShield))
+    {
+        if (GetBaseItemType(oShield) !=BASE_ITEM_LARGESHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_SMALLSHIELD &&
+            GetBaseItemType(oShield) !=BASE_ITEM_TOWERSHIELD)
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70 patch fix by Shadooow: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SetLocalInt(OBJECT_SELF, "X2_L_STOPCASTING", 10);
+    SetLocalInt(OBJECT_SELF, "POLYMORPHED", 1);
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+        IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+
+}
diff --git a/_removed/nw_s0_animdead.ncs b/_removed/nw_s0_animdead.ncs
new file mode 100644
index 0000000..ea216ea
Binary files /dev/null and b/_removed/nw_s0_animdead.ncs differ
diff --git a/_removed/nw_s0_animdead.nss b/_removed/nw_s0_animdead.nss
new file mode 100644
index 0000000..ac7d807
--- /dev/null
+++ b/_removed/nw_s0_animdead.nss
@@ -0,0 +1,89 @@
+//::///////////////////////////////////////////////
+//:: Animate Dead
+//:: NW_S0_AnimDead.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Summons a powerful skeleton or zombie depending
+    on caster level.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: April 11, 2001
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = 24;
+    //effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
+    effect eSummon;
+    //Metamagic extension if needed
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration * 2;  //Duration is +100%
+    }
+    //Summon the appropriate creature based on the summoner level
+    if (spell.Level <= 5)
+    {
+        //Tyrant Fog Zombie
+        eSummon = EffectSummonCreature("NW_S_ZOMBTYRANT",VFX_FNF_SUMMON_UNDEAD);
+    }
+    else if ((spell.Level >= 6) && (spell.Level <= 9))
+    {
+        //Skeleton Warrior
+        eSummon = EffectSummonCreature("NW_S_SKELWARR",VFX_FNF_SUMMON_UNDEAD);
+    }
+    else
+    {
+        //Skeleton Chieftain
+        eSummon = EffectSummonCreature("NW_S_SKELCHIEF",VFX_FNF_SUMMON_UNDEAD);
+    }
+    //Apply the summon visual and summon the two undead.
+    //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
+
+    //Apply better summons instead if a caster is a level 11 or better Pale Master and the spell is not cast from an item.
+    if ( GetLevelByClass(CLASS_TYPE_PALE_MASTER, OBJECT_SELF) > 29 )
+    {
+    switch(d3())
+        {
+        case 1: eSummon = EffectSummonCreature("s_skelhero2",VFX_FNF_SUMMON_UNDEAD);break;
+        case 2: eSummon = EffectSummonCreature("S_SKELMAGE",VFX_FNF_SUMMON_UNDEAD);break;
+        case 3: eSummon = EffectSummonCreature("S_SKELPRIEST",VFX_FNF_SUMMON_UNDEAD);break;
+        }
+    }
+    else if ( GetLevelByClass(CLASS_TYPE_PALE_MASTER, OBJECT_SELF) > 10 )
+    {
+    switch(d3())
+        {
+        case 1: eSummon = EffectSummonCreature("S_SKELHERO",VFX_FNF_SUMMON_UNDEAD);break;
+        case 2: eSummon = EffectSummonCreature("S_SKELMAGE",VFX_FNF_SUMMON_UNDEAD);break;
+        case 3: eSummon = EffectSummonCreature("S_SKELPRIEST",VFX_FNF_SUMMON_UNDEAD);break;
+        }
+    }
+    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration));
+}
+
+
diff --git a/_removed/nw_s0_circdeath.ncs b/_removed/nw_s0_circdeath.ncs
new file mode 100644
index 0000000..48cef3c
Binary files /dev/null and b/_removed/nw_s0_circdeath.ncs differ
diff --git a/_removed/nw_s0_circdeath.nss b/_removed/nw_s0_circdeath.nss
new file mode 100644
index 0000000..778dd4f
--- /dev/null
+++ b/_removed/nw_s0_circdeath.nss
@@ -0,0 +1,128 @@
+//::///////////////////////////////////////////////
+//:: Circle of Death
+//:: NW_S0_CircDeath
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    The caster slays a number of HD worth of creatures
+    equal to 1d4 times level.  The creature gets a
+    Fort Save or dies.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: June 1, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Aidan Scanlan
+//:: VFX Pass By: Preston W, On: June 20, 2001
+//:: Update Pass By: Preston W, On: July 25, 2001
+
+#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();
+    object oTarget;
+    object oLowest;
+    effect eDeath =  EffectDeath();
+    effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
+    effect eFNF = EffectVisualEffect(VFX_FNF_LOS_EVIL_20);
+    int bContinueLoop = FALSE; //Used to determine if we have a next valid target
+    int nHD = MaximizeOrEmpower(4,spell.Level,spell.Meta);
+    int nDC;
+
+    int nCurrentHD;
+    int bAlreadyAffected;
+    int nMax = 40;// maximun hd creature affected, set this to 9 so that a lower HD creature is chosen automatically
+    //Also 9 is the maximum HD a creature can have and still be affected by the spell
+    float fDelay;
+    string sIdentifier = GetTag(spell.Caster);
+
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, spell.Loc);
+    //Check for at least one valid object to start the main loop
+    oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc);
+    if (GetIsObjectValid(oTarget))
+    {
+        bContinueLoop = TRUE;
+    }
+    // The above checks to see if there is at least one valid target.  If no value target exists we do not enter
+    // the loop.
+
+    while ((nHD > 0) && (bContinueLoop))
+    {
+        int nLow = nMax; //Set nLow to the lowest HD creature in the last pass through the loop
+        bContinueLoop = FALSE; //Set this to false so that the loop only continues in the case of new low HD creature
+        //Get first target creature in loop
+        oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc);
+        while (GetIsObjectValid(oTarget))
+        {
+            //Make sure the currect target is not an enemy
+            if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster) && oTarget != spell.Caster)
+            {
+                //Get a local set on the creature that checks if the spell has already allowed them to save
+                bAlreadyAffected = GetLocalInt(oTarget, "bDEATH" + sIdentifier);
+                if (!bAlreadyAffected)
+                {
+                     nCurrentHD = GetHitDice(oTarget);
+                     //If the selected creature is of lower HD then the current nLow value and
+                     //the HD of the creature is of less HD than the number of HD available for
+                     //the spell to affect then set the creature as the currect primary target
+                     if(nCurrentHD < nLow && nCurrentHD <= nHD)
+                     {
+                         nLow = nCurrentHD;
+                         oLowest = oTarget;
+                         bContinueLoop = TRUE;
+                     }
+                }
+            }
+            //Get next target in shape to test for a new
+            oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc);
+        }
+        //Check to make sure that oLowest has changed
+        if(bContinueLoop == TRUE)
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oLowest, EventSpellCastAt(spell.Caster, spell.Id));
+            fDelay = GetRandomDelay();
+            if(!MyResistSpell(spell.Caster, oLowest, fDelay))
+            {
+                if (GetHitDice(oLowest) > 10) nDC = spell.DC - 5;
+                else nDC = spell.DC;
+                //Make a Fort Save versus death effects
+                if(!MySavingThrow(SAVING_THROW_FORT, oLowest, nDC, SAVING_THROW_TYPE_DEATH, spell.Caster, fDelay))
+                {
+                    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oLowest));
+                    //DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oLowest));
+                }
+            }
+            //Even if the target made their save mark them as having been affected by the spell
+            SetLocalInt(oLowest, "bDEATH" + sIdentifier, TRUE);
+            //Destroy the local after 1/4 of a second in case other Circles of Death are cast on
+            //the creature laster
+            DelayCommand(fDelay + 0.25, DeleteLocalInt(oLowest, "bDEATH" + sIdentifier));
+            //Adjust the number of HD that have been affected by the spell
+            nHD = nHD - GetHitDice(oLowest);
+            oLowest = OBJECT_INVALID;
+        }
+    }
+}
diff --git a/_removed/nw_s0_circevil.ncs b/_removed/nw_s0_circevil.ncs
new file mode 100644
index 0000000..30c71aa
Binary files /dev/null and b/_removed/nw_s0_circevil.ncs differ
diff --git a/_removed/nw_s0_circevil.nss b/_removed/nw_s0_circevil.nss
new file mode 100644
index 0000000..fddb800
--- /dev/null
+++ b/_removed/nw_s0_circevil.nss
@@ -0,0 +1,72 @@
+//::///////////////////////////////////////////////
+//:: Magic Circle Against Evil
+//:: NW_S0_CircEvil.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: [Description of File]
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: March 18, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others,
+thats module-related)
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "nw_i0_spells"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 including Area of Effect Object
+    spellsDeclareMajorVariables();
+
+    effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCGOOD);
+    effect eVis = EffectVisualEffect(VFX_IMP_AURA_HOLY);
+    effect eLink = CreateProtectionFromAlignmentLink(ALIGNMENT_EVIL);
+
+    eLink = EffectLinkEffects(eLink, eVis);
+    eLink = EffectLinkEffects(eLink, eAOE);
+
+
+    int nDuration = spell.Level;
+    //Check Extend metamagic feat.
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+       nDuration = nDuration *2;    //Duration is +100%
+    }
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    eVis = EffectVisualEffect(VFX_IMP_GOOD_HELP);
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+
+    //Create an instance of the AOE Object using the Apply Effect function
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration));
+    spellsSetupNewAOE("VFX_MOB_CIRCGOOD");
+}
diff --git a/_removed/nw_s0_circgood.ncs b/_removed/nw_s0_circgood.ncs
new file mode 100644
index 0000000..36e5b52
Binary files /dev/null and b/_removed/nw_s0_circgood.ncs differ
diff --git a/_removed/nw_s0_circgood.nss b/_removed/nw_s0_circgood.nss
new file mode 100644
index 0000000..54a30ed
--- /dev/null
+++ b/_removed/nw_s0_circgood.nss
@@ -0,0 +1,70 @@
+//::///////////////////////////////////////////////
+//:: Magic Circle Against Good
+//:: NW_S0_CircGood.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: April 18, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others,
+thats module-related)
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "nw_i0_spells"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 including Area of Effect Object
+    spellsDeclareMajorVariables();
+
+    effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCEVIL);
+    effect eVis = EffectVisualEffect(VFX_DUR_AURA_ODD);
+    effect eLink = CreateProtectionFromAlignmentLink(ALIGNMENT_GOOD);
+
+    eLink = EffectLinkEffects(eLink, eVis);
+    eLink = EffectLinkEffects(eLink, eAOE);
+
+    int nDuration = spell.Level;
+
+    //Check Extend metamagic feat.
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+       nDuration = nDuration *2;    //Duration is +100%
+    }
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    eVis = EffectVisualEffect(VFX_IMP_EVIL_HELP);
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+
+    //Create an instance of the AOE Object using the Apply Effect function
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration));
+    spellsSetupNewAOE("VFX_MOB_CIRCEVIL");
+}
diff --git a/_removed/nw_s0_contagion.ncs b/_removed/nw_s0_contagion.ncs
new file mode 100644
index 0000000..6678b7f
Binary files /dev/null and b/_removed/nw_s0_contagion.ncs differ
diff --git a/_removed/nw_s0_contagion.nss b/_removed/nw_s0_contagion.nss
new file mode 100644
index 0000000..1092862
--- /dev/null
+++ b/_removed/nw_s0_contagion.nss
@@ -0,0 +1,92 @@
+//::///////////////////////////////////////////////
+//:: Contagion
+//:: NW_S0_Contagion.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    The target must save or be struck down with
+    Blidning Sickness, Cackle Fever, Filth Fever
+    Mind Fire, Red Ache, the Shakes or Slimy Doom.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: June 6, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.71
+
+- disease made extraordinary
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nRand = Random(7)+1;
+    int nDisease;
+    //Use a random seed to determine the disease that will be delivered.
+    switch (nRand)
+    {
+        case 1:
+            nDisease = DISEASE_BLINDING_SICKNESS;
+        break;
+        case 2:
+            nDisease = DISEASE_CACKLE_FEVER;
+        break;
+        case 3:
+            nDisease = DISEASE_FILTH_FEVER;
+        break;
+        case 4:
+            nDisease = DISEASE_MINDFIRE;
+        break;
+        case 5:
+            nDisease = DISEASE_RED_ACHE;
+        break;
+        case 6:
+            nDisease = DISEASE_SHAKES;
+        break;
+        case 7:
+            nDisease = DISEASE_SLIMY_DOOM;
+        break;
+    }
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        effect eDisease = EffectDisease(nDisease);
+        effect ePenalty = EffectAbilityDecrease(ABILITY_STRENGTH, 4);
+        ePenalty = EffectLinkEffects(EffectAbilityDecrease(ABILITY_CONSTITUTION, 2), ePenalty);
+        eDisease = ExtraordinaryEffect(eDisease);
+        //Make SR check
+        if (!MyResistSpell(spell.Caster, spell.Target))
+        {
+            //The effect is permament because the disease subsystem has its own internal resolution
+            //system in place.
+            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDisease, spell.Target);
+            if ( !FortitudeSave(spell.Target, GetCasterLevel(OBJECT_SELF), SAVING_THROW_TYPE_DISEASE) ) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePenalty, spell.Target, 60.0);
+        }
+    }
+}
+
diff --git a/_removed/nw_s0_daze.ncs b/_removed/nw_s0_daze.ncs
new file mode 100644
index 0000000..993f77a
Binary files /dev/null and b/_removed/nw_s0_daze.ncs differ
diff --git a/_removed/nw_s0_daze.nss b/_removed/nw_s0_daze.nss
new file mode 100644
index 0000000..7ba7b64
--- /dev/null
+++ b/_removed/nw_s0_daze.nss
@@ -0,0 +1,77 @@
+//::///////////////////////////////////////////////
+//:: [Daze]
+//:: [NW_S0_Daze.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Will save or the target is dazed for 1 round
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 15, 2001
+//:://////////////////////////////////////////////
+//:: Update Pass By: Preston W, On: July 27, 2001
+
+#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 eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
+    effect eDaze = EffectDazed();
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+
+    effect eLink = EffectLinkEffects(eMind, eDaze);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    effect eVis = EffectVisualEffect(VFX_IMP_DAZED_S);
+    int nDuration = 2;
+    //check meta magic for extend
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = 4;
+    }
+
+    //Make sure the target is a humaniod
+    if (AmIAHumanoid(spell.Target) == TRUE)
+    {
+        if(GetHitDice(spell.Target) <= 40)
+        {
+            if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+            {
+                //Fire cast spell at event for the specified target
+                SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+                //Make SR check
+                if (!MyResistSpell(spell.Caster, spell.Target))
+                {
+                    //Make Will Save to negate effect
+                    if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster))
+                    {
+                        //Apply VFX Impact and daze effect
+                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+                        ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_dismagic.ncs b/_removed/nw_s0_dismagic.ncs
new file mode 100644
index 0000000..e2336d1
Binary files /dev/null and b/_removed/nw_s0_dismagic.ncs differ
diff --git a/_removed/nw_s0_dismagic.nss b/_removed/nw_s0_dismagic.nss
new file mode 100644
index 0000000..bc1453e
--- /dev/null
+++ b/_removed/nw_s0_dismagic.nss
@@ -0,0 +1,88 @@
+//::///////////////////////////////////////////////
+//:: Dispel Magic
+//:: NW_S0_DisMagic.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Attempts to dispel all magic on a targeted
+//:: object, or simply the most powerful that it
+//:: can on every object in an area if no target
+//:: specified.
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:: Updated On: Oct 20, 2003, Georg Zoeller
+//:://////////////////////////////////////////////
+
+#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())
+    {
+        return;
+    }
+    // End of Spell Cast Hook
+    spellsDeclareMajorVariables();
+    effect    eVis         = EffectVisualEffect(VFX_IMP_BREACH);
+    effect    eImpact      = EffectVisualEffect(VFX_FNF_DISPEL);
+    int       nCasterLevel = spell.Level;
+
+    //--------------------------------------------------------------------------
+    // Dispel Magic is capped at caster level 10
+    //--------------------------------------------------------------------------
+    if(nCasterLevel > 10)
+    {
+        //High-level shifter version - caster level artificially set to shifter levels + 3
+        if(GetLevelByClass(CLASS_TYPE_SHIFTER) > 10 && GetRacialType(OBJECT_SELF) == RACIAL_TYPE_OUTSIDER)
+        nCasterLevel = GetLevelByClass(CLASS_TYPE_SHIFTER)+3;
+        else nCasterLevel = 10;
+    }
+
+    if (GetIsObjectValid(spell.Target))
+    {
+        //----------------------------------------------------------------------
+        // Targeted Dispel - Dispel all
+        //----------------------------------------------------------------------
+         spellsDispelMagic(spell.Target, nCasterLevel, eVis, eImpact);
+    }
+    else
+    {
+        //----------------------------------------------------------------------
+        // Area of Effect - Only dispel best effect
+        //----------------------------------------------------------------------
+
+        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc);
+        object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE );
+        while (GetIsObjectValid(oTarget))
+        {
+            if(GetObjectType(oTarget) == OBJECT_TYPE_AREA_OF_EFFECT)
+            {
+                //--------------------------------------------------------------
+                // Handle Area of Effects
+                //--------------------------------------------------------------
+                spellsDispelAoE(oTarget, spell.Caster, nCasterLevel);
+            }
+            else if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
+            {
+                SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id));
+            }
+            else
+            {
+                spellsDispelMagic(oTarget, nCasterLevel, eVis, eImpact, FALSE);
+            }
+
+           oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE,spell.Loc, FALSE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_AREA_OF_EFFECT | OBJECT_TYPE_PLACEABLE);
+        }
+    }
+}
diff --git a/_removed/nw_s0_dismissal.ncs b/_removed/nw_s0_dismissal.ncs
new file mode 100644
index 0000000..8a32304
Binary files /dev/null and b/_removed/nw_s0_dismissal.ncs differ
diff --git a/_removed/nw_s0_dismissal.nss b/_removed/nw_s0_dismissal.nss
new file mode 100644
index 0000000..d0b57c0
--- /dev/null
+++ b/_removed/nw_s0_dismissal.nss
@@ -0,0 +1,81 @@
+//::///////////////////////////////////////////////
+//:: Dismissal
+//:: NW_S0_Dismissal.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All summoned creatures within 30ft of caster
+    make a save and SR check or be banished
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Oct 22, 2001
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 20, 2001
+
+#include "X0_I0_SPELLS"
+#include "x2_inc_spellhook"
+#include "hench_i0_generic"
+
+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
+    object oMaster;
+    effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
+    effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation());
+    int nSpellDC;
+    //Get the first object in the are of effect
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    while(GetIsObjectValid(oTarget))
+    {
+        //does the creature have a master.
+        oMaster = GetMaster(oTarget);
+        //Is that master valid and is he an enemy
+        if(GetIsObjectValid(oMaster) && spellsIsTarget(oMaster,SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF ))
+        {
+            //Is the creature a summoned associate
+            if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster) == oTarget ||
+               GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == oTarget ||
+               GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) == oTarget ||
+               GetLocalInt(oTarget, sHenchPseudoSummon))
+            {
+                SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_DISMISSAL));
+                //Determine correct save
+                nSpellDC = GetSpellSaveDC() + 6;
+                //Make SR and will save checks
+                if (!MyResistSpell(OBJECT_SELF, oTarget) && !MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC))
+                {
+                    //OnDeath script... so lets kill it.
+                    effect eKill = EffectDamage(GetCurrentHitPoints(oTarget));
+                    //just to be extra-sure... :)  
+                    effect eDeath = EffectDeath(FALSE, FALSE);
+                    DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
+                    DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget));
+
+                    DestroyObject(oTarget, 0.3);
+                }
+            }
+        }
+        //Get next creature in the shape.
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    }
+}
diff --git a/_removed/nw_s0_divpower.ncs b/_removed/nw_s0_divpower.ncs
new file mode 100644
index 0000000..304e0b9
Binary files /dev/null and b/_removed/nw_s0_divpower.ncs differ
diff --git a/_removed/nw_s0_divpower.nss b/_removed/nw_s0_divpower.nss
new file mode 100644
index 0000000..71e8ee2
--- /dev/null
+++ b/_removed/nw_s0_divpower.nss
@@ -0,0 +1,127 @@
+//::///////////////////////////////////////////////
+//:: Divine Power
+//:: NW_S0_DivPower.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Improves the Clerics attack to be the
+    equivalent of a Fighter's BAB of the same level,
+    +1 HP per level and raises their strength to
+    18 if is not already there.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Oct 21, 2001
+//:://////////////////////////////////////////////
+/*
+bugfix by Kovi 2002.07.22
+- temporary hp was stacked
+- loosing temporary hp resulted in loosing the other bonuses
+- number of attacks was not increased (should have been a BAB increase)
+still problem:
+~ attacks are better still approximation (the additional attack is at full BAB)
+~ attack/ability bonuses count against the limits
+
+Patch 1.71
+
+- was removing temporary hitpoits even from other sources
+- the strength increase will always be calculated from base strength
+*/
+
+#include "70_inc_spells"
+#include "nw_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    int nCasterLevel = GetCasterLevel(spell.Caster);
+    int nTotalCharacterLevel = nCasterLevel; //Modification - we want this spell to use caster level, not character level
+
+    //int nTotalCharacterLevel = GetHitDice(spell.Caster);
+    int nBAB = GetBaseAttackBonus(spell.Caster);
+    int nEpicPortionOfBAB = (nTotalCharacterLevel - 19)/2;
+
+    if (nEpicPortionOfBAB < 0)
+    {
+        nEpicPortionOfBAB = 0;
+    }
+
+    int nExtraAttacks = 0;
+    int nAttackIncrease = 0;
+
+    if (nTotalCharacterLevel > 20 )
+    {
+        nAttackIncrease = 20 + nEpicPortionOfBAB;
+        if(nBAB - nEpicPortionOfBAB < 11)
+        {
+            nExtraAttacks = 2;
+        }
+        else if(nBAB - nEpicPortionOfBAB > 10 && nBAB - nEpicPortionOfBAB < 16)
+        {
+            nExtraAttacks = 1;
+        }
+    }
+    else
+    {
+        nAttackIncrease = nTotalCharacterLevel;
+        nExtraAttacks = ((nTotalCharacterLevel - 1)/5) - ((nBAB - 1)/5);
+    }
+    nAttackIncrease -= nBAB;
+
+    if (nAttackIncrease < 0)
+    {
+        nAttackIncrease = 0;
+    }
+
+    int nStrengthIncrease = 18-GetAbilityScore(spell.Target, ABILITY_STRENGTH, TRUE);
+
+    effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
+    effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH, nStrengthIncrease);
+    effect eHP = EffectTemporaryHitpoints(nCasterLevel);
+    effect eAttack = EffectAttackIncrease(nAttackIncrease);
+    effect eAttackMod = EffectModifyAttacks(nExtraAttacks);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eLink = EffectLinkEffects(eAttack, eAttackMod);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    //Make sure that the strength modifier is a bonus
+    if(nStrengthIncrease > 0)
+    {
+        eLink = EffectLinkEffects(eLink, eStrength);
+    }
+
+    //Meta-Magic
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+        nCasterLevel *= 2;
+    }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+    //Apply Link and VFX effects to the target
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nCasterLevel));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, spell.Target, RoundsToSeconds(nCasterLevel));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+}
diff --git a/_removed/nw_s0_doom.ncs b/_removed/nw_s0_doom.ncs
new file mode 100644
index 0000000..da60278
Binary files /dev/null and b/_removed/nw_s0_doom.ncs differ
diff --git a/_removed/nw_s0_doom.nss b/_removed/nw_s0_doom.nss
new file mode 100644
index 0000000..d16aa65
--- /dev/null
+++ b/_removed/nw_s0_doom.nss
@@ -0,0 +1,98 @@
+//::///////////////////////////////////////////////
+//:: Doom
+//:: NW_S0_Doom.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    If the target fails a save they recieve a -2
+    penalty to all saves, attack rolls, damage and
+    skill checks for the duration of the spell.
+
+    July 22 2002 (BK): Made it mind affecting.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Oct 22, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- missing saving throw VFX added
+- immunity feedback corrected
+- SR check moved before saving throw check
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+effect CreateDoomEffectsLink3()
+{
+//Declare major variables
+effect eSaves = EffectSavingThrowDecrease(SAVING_THROW_ALL,3);
+effect eAttack = EffectAttackDecrease(3);
+effect eDamage = EffectDamageDecrease(3,DAMAGE_TYPE_SLASHING);
+effect eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS,3);
+effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+
+effect eLink = EffectLinkEffects(eAttack,eDamage);
+eLink = EffectLinkEffects(eLink,eSaves);
+eLink = EffectLinkEffects(eLink,eSkill);
+return  EffectLinkEffects(eLink,eDur);
+}
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 eVis = EffectVisualEffect(VFX_IMP_DOOM);
+    effect eLink = CreateDoomEffectsLink3();
+
+    float fDuration = TurnsToSeconds(spell.Level);
+    //Meta-Magic checks
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+        fDuration *= 2;
+    }
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Spell Resistance check
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            //will saving throw
+            if(!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster))
+            {
+                //* Engine workaround for mind affecting spell without mind effect
+                if(GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster))
+                {
+                    eLink = EffectDazed();//force target to overcome the spell effect and print immunity feedback instead
+                    fDuration = 1.0;//for safety
+                }
+                else
+                {
+                    //apply doom VFX only if not immune
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+                }
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, fDuration);
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_fireshld.ncs b/_removed/nw_s0_fireshld.ncs
new file mode 100644
index 0000000..82353e1
Binary files /dev/null and b/_removed/nw_s0_fireshld.ncs differ
diff --git a/_removed/nw_s0_fireshld.nss b/_removed/nw_s0_fireshld.nss
new file mode 100644
index 0000000..11e0d4b
--- /dev/null
+++ b/_removed/nw_s0_fireshld.nss
@@ -0,0 +1,72 @@
+//::///////////////////////////////////////////////
+//:: Elemental Shield
+//:: NW_S0_FireShld.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Caster gains 50% cold and fire immunity.  Also anyone
+    who strikes the caster with melee attacks takes
+    1d6 + 1 per caster level in damage.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+//:: Created On: Aug 28, 2003, GZ: Fixed stacking issue
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 eVis = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
+    int nDuration = spell.Level;
+    int nDamage = spell.Level/2;
+    effect eShield = EffectDamageShield(nDamage, DAMAGE_BONUS_1d6, DAMAGE_TYPE_FIRE);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eCold = EffectDamageImmunityIncrease(DAMAGE_TYPE_COLD, 50);
+    effect eFire = EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE, 50);
+
+    //Link effects
+    effect eLink = EffectLinkEffects(eShield, eCold);
+    eLink = EffectLinkEffects(eLink, eFire);
+    eLink = EffectLinkEffects(eLink, eDur);
+    eLink = EffectLinkEffects(eLink, eVis);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+    //  *GZ: No longer stack this spell
+    if (GetHasSpellEffect(spell.Id,spell.Target))
+    {
+         RemoveSpellEffects(spell.Id, spell.Caster, spell.Target);
+    }
+
+    //Enter Metamagic conditions
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+    //Apply the VFX impact and effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+}
diff --git a/_removed/nw_s0_flmlash.ncs b/_removed/nw_s0_flmlash.ncs
new file mode 100644
index 0000000..e3b16e6
Binary files /dev/null and b/_removed/nw_s0_flmlash.ncs differ
diff --git a/_removed/nw_s0_flmlash.nss b/_removed/nw_s0_flmlash.nss
new file mode 100644
index 0000000..3746535
--- /dev/null
+++ b/_removed/nw_s0_flmlash.nss
@@ -0,0 +1,72 @@
+//::///////////////////////////////////////////////
+//:: Flame Lash
+//:: NW_S0_FlmLash.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Creates a whip of fire that targets a single
+    individual
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Nov 21, 2001
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nCasterLevel = spell.Level;
+
+    if(nCasterLevel > 3)
+    {
+        nCasterLevel = (nCasterLevel-3)/3;
+    }
+    else
+    {
+        nCasterLevel = 0;
+    }
+    int nDamage = MaximizeOrEmpower(8,2 + nCasterLevel,spell.Meta);
+
+    effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
+    effect eRay = EffectBeam(VFX_BEAM_FIRE_LASH, spell.Caster, BODY_NODE_HAND);
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, spell.Target, 1.7);
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        if (!MyResistSpell(spell.Caster, spell.Target, 1.0))
+        {
+            nDamage = GetReflexAdjustedDamage(nDamage, spell.Target, spell.DC, SAVING_THROW_TYPE_FIRE, spell.Caster);
+            effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
+            if(nDamage > 0)
+            {
+                //Apply the VFX impact and effects
+                DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target));
+                DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target));
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_gate.ncs b/_removed/nw_s0_gate.ncs
new file mode 100644
index 0000000..bcc2367
Binary files /dev/null and b/_removed/nw_s0_gate.ncs differ
diff --git a/_removed/nw_s0_gate.nss b/_removed/nw_s0_gate.nss
new file mode 100644
index 0000000..464ea41
--- /dev/null
+++ b/_removed/nw_s0_gate.nss
@@ -0,0 +1,76 @@
+//::///////////////////////////////////////////////
+//:: Gate
+//:: NW_S0_Gate.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Summons a Balor to fight for the caster.
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: April 12, 2001
+//:://////////////////////////////////////////////
+void CreateBalor(location lLoc);
+
+#include "70_inc_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();
+    int nDuration = spell.Level;
+    effect eSummon;
+    effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_GATE);
+    //Make metamagic extend check
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2;   //Duration is +100%
+    }
+    //Summon the Balor and apply the VFX impact
+    //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
+
+    if(GetHasSpellEffect(SPELL_PROTECTION_FROM_EVIL) ||
+       GetHasSpellEffect(SPELL_MAGIC_CIRCLE_AGAINST_EVIL) ||
+       GetHasSpellEffect(SPELL_HOLY_AURA) ||
+       GetLocalInt(OBJECT_SELF, "cleric_henchman") == 1 ||
+       GetLocalInt(OBJECT_SELF, "X4_CASTER_CLERIC") == 1)
+    {
+        if (GetCasterLevel(OBJECT_SELF) >= 35 )
+        eSummon = EffectSummonCreature("NW_S_BALOR2",VFX_FNF_SUMMON_GATE,3.0);
+        else
+        { eSummon = EffectSummonCreature("NW_S_BALOR",VFX_FNF_SUMMON_GATE,3.0); }
+        float fSeconds = RoundsToSeconds(nDuration);
+        DelayCommand(3.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, fSeconds));
+
+    }
+    else
+    {
+
+        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, spell.Loc);
+        DelayCommand(3.0, CreateBalor(spell.Loc));
+    }
+}
+
+void CreateBalor(location lLoc)
+{
+     if (GetCasterLevel(OBJECT_SELF) >= 35 )
+     CreateObject(OBJECT_TYPE_CREATURE, "NW_S_BALOR2_EVIL", lLoc);
+     else
+     CreateObject(OBJECT_TYPE_CREATURE, "NW_S_BALOR_EVIL", lLoc);
+}
diff --git a/_removed/nw_s0_grplanar.ncs b/_removed/nw_s0_grplanar.ncs
new file mode 100644
index 0000000..5ac6bfb
Binary files /dev/null and b/_removed/nw_s0_grplanar.ncs differ
diff --git a/_removed/nw_s0_grplanar.nss b/_removed/nw_s0_grplanar.nss
new file mode 100644
index 0000000..1d21b0a
--- /dev/null
+++ b/_removed/nw_s0_grplanar.nss
@@ -0,0 +1,114 @@
+//::///////////////////////////////////////////////
+//:: Greater Planar Binding
+//:: NW_S0_GrPlanar.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Summons an outsider dependant on alignment, or
+    holds an outsider if the creature fails a save.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: April 12, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70, fix by Shadooow
+
+- added saving throw subtype (paralyse)
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = spell.Level;
+    effect eSummon;
+    effect eGate;
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
+    effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
+
+    effect eLink = EffectLinkEffects(eDur, EffectParalyze());
+    eLink = EffectLinkEffects(eLink, eDur2);
+    eLink = EffectLinkEffects(eLink, eDur3);
+
+    int nRacial = GetRacialType(spell.Target);
+    //Check for metamagic extend
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2;   //Duration is +100%
+    }
+    //Check to see if a valid target has been chosen
+    if (GetIsObjectValid(spell.Target))
+    {
+        if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+            //Check for racial type
+            if(nRacial == RACIAL_TYPE_OUTSIDER)
+            {
+                //Allow will save to negate hold effect
+                if(!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC+5,SAVING_THROW_TYPE_PARALYSE, spell.Caster))
+                {
+                    //Apply the hold effect
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration/2));
+                }
+            }
+        }
+    }
+    else
+    {
+        //If the ground was clicked on summon an outsider based on alignment
+        int nAlign = GetAlignmentGoodEvil(spell.Caster);
+        float fDelay = 3.0;
+        switch (nAlign)
+        {
+            case ALIGNMENT_EVIL:
+                if (GetCasterLevel(OBJECT_SELF) >= 28)
+                eSummon = EffectSummonCreature("NW_S_VROCK2", VFX_FNF_SUMMON_GATE, 3.0);
+                else
+                eSummon = EffectSummonCreature("NW_S_VROCK", VFX_FNF_SUMMON_GATE, 3.0);
+                //eGate = EffectVisualEffect(VFX_FNF_SUMMON_GATE);
+            break;
+            case ALIGNMENT_GOOD:
+                if (GetCasterLevel(OBJECT_SELF) >= 28)
+                eSummon = EffectSummonCreature("NW_S_CTRUMPET2", VFX_FNF_SUMMON_CELESTIAL, 3.0);
+                else
+                eSummon = EffectSummonCreature("NW_S_CTRUMPET", VFX_FNF_SUMMON_CELESTIAL, 3.0);
+                //eGate = EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL);
+            break;
+            case ALIGNMENT_NEUTRAL:
+                if (GetCasterLevel(OBJECT_SELF) >= 28)
+                eSummon = EffectSummonCreature("NW_S_SLAADDETH2", VFX_FNF_SUMMON_MONSTER_3, 1.0);
+                else
+                eSummon = EffectSummonCreature("NW_S_SLAADDETH", VFX_FNF_SUMMON_MONSTER_3, 1.0);
+                //eGate = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
+                fDelay = 1.0;
+            break;
+        }
+        //Apply the VFX impact and summon effect
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration));
+    }
+}
diff --git a/_removed/nw_s0_hammgods.ncs b/_removed/nw_s0_hammgods.ncs
new file mode 100644
index 0000000..e6cf891
Binary files /dev/null and b/_removed/nw_s0_hammgods.ncs differ
diff --git a/_removed/nw_s0_hammgods.nss b/_removed/nw_s0_hammgods.nss
new file mode 100644
index 0000000..2a9acaf
--- /dev/null
+++ b/_removed/nw_s0_hammgods.nss
@@ -0,0 +1,99 @@
+//::///////////////////////////////////////////////
+//:: Hammer of the Gods
+//:: [NW_S0_HammGods.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Does 1d8 damage to all enemies within the
+//:: spells 20m radius and dazes them if a
+//:: Will save is failed.
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 12, 2001
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 21, 2001
+//:: Update Pass By: Preston W, On: Aug 1, 2001
+
+#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 eDaze = EffectDazed();
+    effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+
+    effect eLink = EffectLinkEffects(eMind, eDaze);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    effect eVis = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
+    effect eStrike = EffectVisualEffect(VFX_FNF_STRIKE_HOLY);
+    float fDelay;
+    int nDamageDice = spell.Level/2;
+    if(nDamageDice < 1)
+    {
+        nDamageDice = 1;
+    }
+    //Limit caster level
+    if (nDamageDice > 10)
+    {
+        nDamageDice = 10;
+    }
+    int nDamage;
+    //Apply the holy strike VFX
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eStrike, spell.Loc);
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc);
+    while (GetIsObjectValid(oTarget))
+    {
+       //Make faction checks
+        if (spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id));
+            //Make SR Check
+            if (!MyResistSpell(spell.Caster, oTarget))
+            {
+                fDelay = GetRandomDelay(0.6, 1.3);
+                //Roll damage
+                nDamage = MaximizeOrEmpower(8,nDamageDice,spell.Meta);
+                //Make a will save for half damage and negation of daze effect
+                if (MySavingThrow(SAVING_THROW_WILL, oTarget, spell.DC, SAVING_THROW_TYPE_DIVINE, spell.Caster, 0.5))
+                {
+                    nDamage = nDamage / 2;
+                }
+                else
+                {
+                    //Apply daze effect
+                    DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d6())));
+                }
+                //Set damage effect
+                eDam = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE );
+                //Apply the VFX impact and damage effect
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+             }
+        }
+        //Get next target in shape
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc);
+    }
+}
diff --git a/_removed/nw_s0_harm.ncs b/_removed/nw_s0_harm.ncs
new file mode 100644
index 0000000..2dcae9d
Binary files /dev/null and b/_removed/nw_s0_harm.ncs differ
diff --git a/_removed/nw_s0_harm.nss b/_removed/nw_s0_harm.nss
new file mode 100644
index 0000000..768f2d5
--- /dev/null
+++ b/_removed/nw_s0_harm.nss
@@ -0,0 +1,84 @@
+//::///////////////////////////////////////////////
+//:: [Harm]
+//:: [NW_S0_Harm.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Reduces target to 1d4 HP on successful touch
+//:: attack.  If the target is undead it is healed.
+//:://////////////////////////////////////////////
+//:: Created By: Keith Soleski
+//:: Created On: Jan 18, 2001
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 20, 2001
+//:: Update Pass By: Preston W, On: Aug 1, 2001
+//:: Last Update: Georg Zoeller On: Oct 10, 2004
+//:://////////////////////////////////////////////
+/*
+Patch 1.70, fix by Shadooow
+
+> touch attack removed if cast on undead (roll wasn't used in this case anyway)
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDamage, nHeal;
+    effect eVis = EffectVisualEffect(246);
+    effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_G);
+    effect eHeal, eDam;
+    //Check that the target is undead
+    if (GetRacialType(spell.Target) == RACIAL_TYPE_UNDEAD)
+    {
+        //Figure out the amount of damage to heal
+        nHeal = GetMaxHitPoints(spell.Target) - GetCurrentHitPoints(spell.Target);
+        //Set the heal effect
+        eHeal = EffectHeal(nHeal);
+        //Apply heal effect and VFX impact
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, spell.Target);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, spell.Target);
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    }                                      //if cast from onhit, feedback won't show
+    else if (TouchAttackMelee(spell.Target,spell.Item == OBJECT_INVALID) != FALSE)  //GZ: Fixed boolean check to work in NWScript. 1 or 2 are valid return numbers from TouchAttackMelee
+    {
+        if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, SPELL_HARM));
+            if (!MyResistSpell(spell.Caster, spell.Target))
+            {
+                //nDamage = GetCurrentHitPoints(spell.Target) - d4(1);
+                int nCasterLevel = GetCasterLevel(spell.Caster);
+                if (nCasterLevel > 20) nCasterLevel = 20;
+                nDamage = MaximizeOrEmpower(6, nCasterLevel, spell.Meta);
+
+                eDam = EffectDamage(nDamage,DAMAGE_TYPE_NEGATIVE);
+                //Apply the VFX impact and effects
+                DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target));
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_heal.ncs b/_removed/nw_s0_heal.ncs
new file mode 100644
index 0000000..e7821ff
Binary files /dev/null and b/_removed/nw_s0_heal.ncs differ
diff --git a/_removed/nw_s0_heal.nss b/_removed/nw_s0_heal.nss
new file mode 100644
index 0000000..15cbbe9
--- /dev/null
+++ b/_removed/nw_s0_heal.nss
@@ -0,0 +1,74 @@
+//::///////////////////////////////////////////////
+//:: Heal
+//:: [NW_S0_Heal.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Heals the target to full unless they are undead.
+//:: If undead they reduced to 1d4 HP.
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 12, 2001
+//:: Modified 69MEH69 JUL2003
+//:://////////////////////////////////////////////
+//:: Update Pass By: Preston W, On: Aug 1, 2001
+#include "69_hench_lib"
+#include "NW_I0_SPELLS"
+void main()
+{
+  //Declare major variables
+  object oTarget = GetSpellTargetObject();
+  effect eKill, eHeal;
+  int nDamage, nHeal, nModify, nMetaMagic, nTouch;
+  effect eSun = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
+  effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_X);
+  string sTag = GetTag(oTarget);
+  object oArea = GetArea(oTarget);
+    //Check to see if the target is an undead
+    if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+    {
+        if(!GetIsReactionTypeFriendly(oTarget))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEAL));
+            //Make a touch attack
+            if (TouchAttackMelee(oTarget))
+            {
+                //Make SR check
+                if (!MyResistSpell(OBJECT_SELF, oTarget))
+                {
+                    //Roll damage
+                    nModify = d4();
+                    nMetaMagic = GetMetaMagicFeat();
+                    //Make metamagic check
+                    if (nMetaMagic == METAMAGIC_MAXIMIZE)
+                    {
+                        nModify = 1;
+                    }
+                    //Figure out the amount of damage to inflict
+                    nDamage =  GetCurrentHitPoints(oTarget) - nModify;
+                    //Set damage
+                    eKill = EffectDamage(nDamage, DAMAGE_TYPE_POSITIVE);
+                    //Apply damage effect and VFX impact
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget);
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eSun, oTarget);
+                }
+            }
+        }
+    }
+    else
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEAL, FALSE));
+        //Figure out how much to heal
+        nHeal = GetMaxHitPoints(oTarget);
+        //Set the heal effect
+        eHeal = EffectHeal(nHeal);
+        //Apply the heal effect and the VFX impact
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHealVis, oTarget);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+        if(GetIsHenchmanDying(oTarget))
+        {
+        SetLocalInt(oArea, "nCHP" +sTag, 21);
+        }
+    }
+}
diff --git a/_removed/nw_s0_healcirc.ncs b/_removed/nw_s0_healcirc.ncs
new file mode 100644
index 0000000..a8de043
Binary files /dev/null and b/_removed/nw_s0_healcirc.ncs differ
diff --git a/_removed/nw_s0_healcirc.nss b/_removed/nw_s0_healcirc.nss
new file mode 100644
index 0000000..d580016
--- /dev/null
+++ b/_removed/nw_s0_healcirc.nss
@@ -0,0 +1,115 @@
+//::///////////////////////////////////////////////
+//:: Healing Circle
+//:: NW_S0_HealCirc
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+// Positive energy spreads out in all directions
+// from the point of origin, curing 1d8 points of
+// damage plus 1 point per caster level (maximum +20)
+// to nearby living allies.
+//
+// Like cure spells, healing circle damages undead in
+// its area rather than curing them.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Noel Borstad
+//:: Created On: Oct 18,2000
+//:: Modified 69MEH69 JUL2003
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 20, 2001
+//:: Update Pass By: Preston W, On: Aug 1, 2001
+#include "69_hench_lib"
+#include "NW_I0_SPELLS"
+void main()
+{
+  //Declare major variables
+  object oTarget;
+  int nCasterLvl = GetCasterLevel(OBJECT_SELF);
+  int nDamagen, nModify, nHurt, nHP;
+  int nMetaMagic = GetMetaMagicFeat();
+  effect eKill;
+  effect eHeal;
+  effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
+  effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_M);
+  effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
+  float fDelay;
+  string sTag = GetTag(oTarget);
+  object oArea = GetArea(oTarget);
+  int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
+  //Limit caster level
+  if (nCasterLvl > 20)
+  {
+    nCasterLvl = 20;
+  }
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation());
+    //Get first target in shape
+    oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation());
+    while (GetIsObjectValid(oTarget))
+    {
+        fDelay = GetRandomDelay();
+        //Check if racial type is undead
+        if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD )
+        {
+            if(!GetIsReactionTypeFriendly(oTarget))
+            {
+                //Fire cast spell at event for the specified target
+                SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE));
+                //Make SR check
+                if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
+                {
+                    nModify = d8() + nCasterLvl;
+                    //Make metamagic check
+                    if (nMetaMagic == METAMAGIC_MAXIMIZE)
+                    {
+                        nModify = 8 + nCasterLvl;
+                    }
+                    //Make Fort save
+                    if (MySavingThrow(SAVING_THROW_FORT, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
+                    {
+                        nModify /= 2;
+                    }
+                    //Calculate damage
+                    nHurt =  nModify;
+                    //Set damage effect
+                    eKill = EffectDamage(nHurt, DAMAGE_TYPE_POSITIVE);
+                    //Apply damage effect and VFX impact
+                    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
+                    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                }
+            }
+        }
+        else
+        {
+            // * May 2003: Heal Neutrals as well
+            if(!GetIsReactionTypeHostile(oTarget) || GetFactionEqual(oTarget))
+            {
+                //Fire cast spell at event for the specified target
+                SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEALING_CIRCLE, FALSE));
+                nHP = d8();
+                //Enter Metamagic conditions
+                if (nMetaMagic == METAMAGIC_MAXIMIZE)
+                {
+                    nHP =8;//Damage is at max
+                }
+                if (nMetaMagic == METAMAGIC_EMPOWER)
+                {
+                    nHP = nHP + (nHP/2); //Damage/Healing is +50%
+                }
+                //Set healing effect
+                nHP = nHP + nCasterLvl;
+                eHeal = EffectHeal(nHP);
+                //Apply heal effect and VFX impact
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
+                if(GetIsHenchmanDying(oTarget))
+                {
+                  SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHP);
+                }
+            }
+
+        }
+        //Get next target in the shape
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetSpellTargetLocation());
+    }
+}
diff --git a/_removed/nw_s0_holdanim.ncs b/_removed/nw_s0_holdanim.ncs
new file mode 100644
index 0000000..df660f6
Binary files /dev/null and b/_removed/nw_s0_holdanim.ncs differ
diff --git a/_removed/nw_s0_holdanim.nss b/_removed/nw_s0_holdanim.nss
new file mode 100644
index 0000000..bc1d8eb
--- /dev/null
+++ b/_removed/nw_s0_holdanim.nss
@@ -0,0 +1,83 @@
+//::///////////////////////////////////////////////
+//:: Hold Animal
+//:: S_HoldAnim
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+//:: Description: As hold person, except the spell
+//:: affects an animal instead. Hold animal does not
+//:: work on beasts, magical beasts, or vermin.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Keith Soleski
+//:: Created On:  Jan 18, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001
+//:: VFX Pass By: Preston W, On: June 20, 2001
+/*
+Patch 1.71
+
+- added missing saving throw subtype as per spell's descriptor
+- added duration scaling per game difficulty
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = spell.Level;
+    nDuration = 5; //GetScaledDuration(nDuration, spell.Target);
+    effect eParal = EffectParalyze();
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
+    effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
+
+    effect eLink = EffectLinkEffects(eDur2, eDur);
+    eLink = EffectLinkEffects(eLink, eParal);
+    eLink = EffectLinkEffects(eLink, eDur3);
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Check racial type
+        if (GetRacialType(spell.Target) == RACIAL_TYPE_ANIMAL)
+        {
+            //Make SR check
+            if (!MyResistSpell(spell.Caster, spell.Target))
+            {
+                //Make Will Save
+                if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC+4, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster))
+                {
+                    //Check metamagic extend
+                    if (spell.Meta == METAMAGIC_EXTEND)
+                    {
+                        nDuration = nDuration * 2;
+                    }
+                    //Apply paralyze and VFX impact
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_holdmon.ncs b/_removed/nw_s0_holdmon.ncs
new file mode 100644
index 0000000..22855b3
Binary files /dev/null and b/_removed/nw_s0_holdmon.ncs differ
diff --git a/_removed/nw_s0_holdmon.nss b/_removed/nw_s0_holdmon.nss
new file mode 100644
index 0000000..e2a066a
--- /dev/null
+++ b/_removed/nw_s0_holdmon.nss
@@ -0,0 +1,77 @@
+//::///////////////////////////////////////////////
+//:: Hold Monster
+//:: NW_S0_HoldMon
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Will hold any monster in place for 1
+    round per caster level.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Keith Soleski
+//:: Created On: Jan 18, 2001
+//:://////////////////////////////////////////////
+//:: Update Pass By: Preston W, On: Aug 1, 2001
+/*
+Patch 1.71
+
+- added missing saving throw subtype as per spell's descriptor
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = spell.Level;
+    nDuration = 5; //GetScaledDuration(nDuration, spell.Target);
+    effect eParal = EffectParalyze();
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
+    effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
+
+    effect eLink = EffectLinkEffects(eDur2, eDur);
+    eLink = EffectLinkEffects(eLink, eParal);
+    eLink = EffectLinkEffects(eLink, eDur3);
+
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+       //Fire cast spell at event for the specified target
+       SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+       //Make SR check
+       if (!MyResistSpell(spell.Caster, spell.Target))
+       {
+            //Make Will save
+            if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster))
+            {
+                //Check for metamagic extend
+                if (spell.Meta == METAMAGIC_EXTEND)
+                {
+                    nDuration = nDuration * 2;
+                }
+                //Apply the paralyze effect and the VFX impact
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_holdpers.ncs b/_removed/nw_s0_holdpers.ncs
new file mode 100644
index 0000000..53f93a1
Binary files /dev/null and b/_removed/nw_s0_holdpers.ncs differ
diff --git a/_removed/nw_s0_holdpers.nss b/_removed/nw_s0_holdpers.nss
new file mode 100644
index 0000000..8e54829
--- /dev/null
+++ b/_removed/nw_s0_holdpers.nss
@@ -0,0 +1,86 @@
+//::///////////////////////////////////////////////
+//:: Hold Person
+//:: NW_S0_HoldPers
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+//:: The target freezes in place, standing helpless.
+//:: He is aware and breathes normally but cannot take any physical
+//:: actions, even speech. He can, however, execute purely mental actions.
+//:: winged creature that is held cannot flap its wings and falls.
+//:: A swimmer can't swim and may drown.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Keith Soleski
+//:: Created On: Jan 18, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001
+//:: VFX Pass By: Preston W, On: June 20, 2001
+/*
+Patch 1.71
+
+- added missing saving throw subtype as per spell's descriptor
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = spell.Level;
+    nDuration = 5; //GetScaledDuration(nDuration, spell.Target);
+    effect eParal = EffectParalyze();
+    effect eVis = EffectVisualEffect(82);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eDur2 = EffectVisualEffect(VFX_DUR_PARALYZED);
+    effect eDur3 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
+
+    effect eLink = EffectLinkEffects(eDur2, eDur);
+    eLink = EffectLinkEffects(eLink, eParal);
+    eLink = EffectLinkEffects(eLink, eVis);
+    eLink = EffectLinkEffects(eLink, eDur3);
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Make sure the target is a humanoid
+        if(AmIAHumanoid(spell.Target))
+        {
+            //Make SR Check
+            if (!MyResistSpell(spell.Caster, spell.Target))
+            {
+                //Make Will save
+                if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster))
+                {
+                    //Make metamagic extend check
+                    if (spell.Meta == METAMAGIC_EXTEND)
+                    {
+                        nDuration = nDuration * 2;
+                    }
+                    //Apply paralyze effect and VFX impact
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_icestorm.ncs b/_removed/nw_s0_icestorm.ncs
new file mode 100644
index 0000000..b626c9c
Binary files /dev/null and b/_removed/nw_s0_icestorm.ncs differ
diff --git a/_removed/nw_s0_icestorm.nss b/_removed/nw_s0_icestorm.nss
new file mode 100644
index 0000000..a37c795
--- /dev/null
+++ b/_removed/nw_s0_icestorm.nss
@@ -0,0 +1,84 @@
+//::///////////////////////////////////////////////
+//:: Ice Storm
+//:: NW_S0_IceStorm
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Everyone in the area takes 3d6 Bludgeoning
+    and 2d6 Cold damage.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Sept 12, 2001
+//:://////////////////////////////////////////////
+
+#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();
+    int nDamage, nDamage2, nDamage3;
+    int nVariable = spell.Level/3;
+    float fDelay;
+    effect eExplode = EffectVisualEffect(VFX_FNF_ICESTORM); //USE THE ICESTORM FNF
+    effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
+    effect eDam,eDam2, eDam3;
+    //Apply the ice storm VFX at the location captured above.
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, spell.Loc);
+    //Declare the spell shape, size and the location.  Capture the first target object in the shape.
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    //Cycle through the targets within the spell shape until an invalid object is captured.
+    while (GetIsObjectValid(oTarget))
+    {
+        if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster))
+        {
+            fDelay = GetRandomDelay(0.75, 2.25);
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id));
+            if (!MyResistSpell(spell.Caster, oTarget, fDelay))
+            {
+                //Roll damage for each target
+                nDamage = MaximizeOrEmpower(6,3,spell.Meta);
+                nDamage2 = MaximizeOrEmpower(6,2,spell.Meta);
+                nDamage3 = MaximizeOrEmpower(6,nVariable,spell.Meta);
+
+                //High-level shifter version - damage increases
+                if(GetLevelByClass(CLASS_TYPE_SHIFTER) > 20 && GetRacialType(OBJECT_SELF) == RACIAL_TYPE_OUTSIDER)
+                nDamage3 = (GetLevelByClass(CLASS_TYPE_SHIFTER) - 17)*d6();
+
+                nDamage2 = nDamage2 + nDamage3;
+                //Set the damage effect
+                eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING);
+                eDam2 = EffectDamage(nDamage2, DAMAGE_TYPE_COLD);
+                // Apply effects to the currently selected target.
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget));
+                //This visual effect is applied to the target object not the location as above.  This visual effect
+                //represents the impact that erupts on the target not on the ground.
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+             }
+        }
+       //Select the next target within the spell shape.
+       oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    }
+}
diff --git a/_removed/nw_s0_identify.ncs b/_removed/nw_s0_identify.ncs
new file mode 100644
index 0000000..4d7e6d3
Binary files /dev/null and b/_removed/nw_s0_identify.ncs differ
diff --git a/_removed/nw_s0_identify.nss b/_removed/nw_s0_identify.nss
new file mode 100644
index 0000000..b8057e0
--- /dev/null
+++ b/_removed/nw_s0_identify.nss
@@ -0,0 +1,64 @@
+//::///////////////////////////////////////////////
+//:: Identify
+//:: NW_S0_Identify.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Gives the caster a boost to Lore skill of +25
+    plus caster level.  Lasts for 2 rounds.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Oct 22, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.71
+
+- the spell couldn't be recast if caster had also legend lore effect
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nBonus = 5;
+    effect eLore = EffectSkillIncrease(SKILL_LORE, nBonus);
+    effect eVis = EffectVisualEffect(VFX_IMP_MAGICAL_VISION);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eLink = EffectLinkEffects(eVis, eDur);
+    eLink = EffectLinkEffects(eLink, eLore);
+
+    int nDuration = 2;
+
+    //Meta-Magic checks
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = 4;
+    }
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+    //Apply linked and VFX effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+}
diff --git a/_removed/nw_s0_invpurge.ncs b/_removed/nw_s0_invpurge.ncs
new file mode 100644
index 0000000..bdda747
Binary files /dev/null and b/_removed/nw_s0_invpurge.ncs differ
diff --git a/_removed/nw_s0_invpurge.nss b/_removed/nw_s0_invpurge.nss
new file mode 100644
index 0000000..0e9760c
--- /dev/null
+++ b/_removed/nw_s0_invpurge.nss
@@ -0,0 +1,63 @@
+//::///////////////////////////////////////////////
+//:: Invisibility Purge
+//:: NW_S0_InvPurge.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All invisible creatures become invisible in the
+    area of effect even if they leave the AOE.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "nw_i0_spells"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 including Area of Effect Object
+    spellsDeclareMajorVariables();
+    effect eAOE = EffectAreaOfEffect(35);
+    int nDuration = spell.Level;
+    effect eDur1 = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT);
+    effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eLink = EffectLinkEffects(eDur1, eDur2);
+
+    //Check Extend metamagic feat.
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+       nDuration = nDuration *2;    //Duration is +100%
+    }
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Create an instance of the AOE Object using the Apply Effect function
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, spell.Target, TurnsToSeconds(nDuration));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, TurnsToSeconds(nDuration));
+    spellsSetupNewAOE("VFX_MOB_INVISIBILITY_PURGE");
+}
diff --git a/_removed/nw_s0_invsph.ncs b/_removed/nw_s0_invsph.ncs
new file mode 100644
index 0000000..5db8bc5
Binary files /dev/null and b/_removed/nw_s0_invsph.ncs differ
diff --git a/_removed/nw_s0_invsph.nss b/_removed/nw_s0_invsph.nss
new file mode 100644
index 0000000..b1d7f54
--- /dev/null
+++ b/_removed/nw_s0_invsph.nss
@@ -0,0 +1,72 @@
+//::///////////////////////////////////////////////
+//:: Invisibility Sphere
+//:: NW_S0_InvSph.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All allies within 15ft are rendered invisible.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others,
+thats module-related)
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "nw_i0_spells"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 including Area of Effect Object
+    spellsDeclareMajorVariables();
+    effect eAOE = EffectAreaOfEffect(AOE_PER_INVIS_SPHERE);
+
+    effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_NORMAL);
+    effect eVis = EffectVisualEffect(VFX_DUR_INVISIBILITY);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+
+    effect eLink = EffectLinkEffects(eInvis, eVis);
+    eLink = EffectLinkEffects(eLink, eDur);
+    eLink = EffectLinkEffects(eLink, eAOE);
+    int nDuration = spell.Level;
+
+    //Check Extend metamagic feat.
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+       nDuration = nDuration *2;    //Duration is +100%
+    }
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    //Create an instance of the AOE Object using the Apply Effect function
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, TurnsToSeconds(nDuration));
+    spellsSetupNewAOE("VFX_PER_INVIS_SPHERE");
+}
diff --git a/_removed/nw_s0_knock.ncs b/_removed/nw_s0_knock.ncs
new file mode 100644
index 0000000..098066e
Binary files /dev/null and b/_removed/nw_s0_knock.ncs differ
diff --git a/_removed/nw_s0_knock.nss b/_removed/nw_s0_knock.nss
new file mode 100644
index 0000000..c8a0a23
--- /dev/null
+++ b/_removed/nw_s0_knock.nss
@@ -0,0 +1,64 @@
+//::///////////////////////////////////////////////
+//:: Knock
+//:: NW_S0_Knock
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Opens doors not locked by magical means.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Nov 29, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Georg 2003/07/31 - Added signal event and custom door flags
+//:: VFX Pass By: Preston W, On: June 22, 2001
+
+#include "70_inc_spells"
+#include "nw_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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
+    spellsDeclareMajorVariables();
+    object oTarget;
+    effect eVis = EffectVisualEffect(VFX_IMP_KNOCK);
+    oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 50.0, spell.Loc, FALSE, OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    float fDelay;
+    int nResist;
+
+    while(GetIsObjectValid(oTarget))
+    {
+        SignalEvent(oTarget,EventSpellCastAt(spell.Caster,spell.Id));
+        fDelay = GetRandomDelay(0.5, 2.5);
+        if(!GetPlotFlag(oTarget) && GetLocked(oTarget))
+        {
+            nResist =  GetDoorFlag(oTarget,DOOR_FLAG_RESIST_KNOCK);
+            if ((nResist == 0) && (GetLockUnlockDC(oTarget) < 31))
+            {
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                AssignCommand(oTarget, ActionUnlockObject(oTarget));
+            }
+            else if  (nResist == 1)
+            {
+                FloatingTextStrRefOnCreature(83887,spell.Caster);   //
+            }
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, 50.0, spell.Loc, FALSE, OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    }
+}
diff --git a/_removed/nw_s0_lore.ncs b/_removed/nw_s0_lore.ncs
new file mode 100644
index 0000000..ae54da7
Binary files /dev/null and b/_removed/nw_s0_lore.ncs differ
diff --git a/_removed/nw_s0_lore.nss b/_removed/nw_s0_lore.nss
new file mode 100644
index 0000000..816701b
--- /dev/null
+++ b/_removed/nw_s0_lore.nss
@@ -0,0 +1,63 @@
+//::///////////////////////////////////////////////
+//:: Legend Lore
+//:: NW_S0_Lore.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Gives the caster a boost to Lore skill of 10
+    plus 1 / 2 caster levels.  Lasts for 1 Turn per
+    caster level.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Oct 22, 2001
+//:://////////////////////////////////////////////
+//:: 2003-10-29: GZ: Corrected spell target object
+//::             so potions work wit henchmen now
+/*
+Patch 1.71
+
+- the spell couldn't be recast if caster had also identify effect
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nLevel = spell.Level;
+    int nBonus = 10;
+    effect eLore = EffectSkillIncrease(SKILL_LORE, nBonus);
+    effect eVis = EffectVisualEffect(VFX_IMP_MAGICAL_VISION);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eLink = EffectLinkEffects(eLore, eDur);
+
+    //Meta-Magic checks
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+        nLevel *= 2;
+    }
+
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    //Apply linked and VFX effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, TurnsToSeconds(nLevel));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+}
diff --git a/_removed/nw_s0_magearm.ncs b/_removed/nw_s0_magearm.ncs
new file mode 100644
index 0000000..4f9e3ba
Binary files /dev/null and b/_removed/nw_s0_magearm.ncs differ
diff --git a/_removed/nw_s0_magearm.nss b/_removed/nw_s0_magearm.nss
new file mode 100644
index 0000000..201d486
--- /dev/null
+++ b/_removed/nw_s0_magearm.nss
@@ -0,0 +1,77 @@
+//::///////////////////////////////////////////////
+//:: Mage Armor
+//:: [NW_S0_MageArm.nss]
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Gives the target +1 AC Bonus to Deflection,
+    Armor Enchantment, Natural Armor and Dodge.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 12, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001
+//:: VFX Pass By: Preston W, On: June 22, 2001
+/*
+bugfix by Kovi 2002.07.23
+- dodge bonus was stacking
+
+Patch 1.70
+- fixed stacking the shadow conjuration variant with itself
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = spell.Level;
+
+    effect eVis = EffectVisualEffect(VFX_IMP_AC_BONUS);
+    effect eAC1, eAC2, eAC3, eAC4;
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    //Check for metamagic extend
+    if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+    {
+         nDuration = nDuration * 2;
+    }
+    //Set the four unique armor bonuses
+    eAC1 = EffectACIncrease(1, AC_ARMOUR_ENCHANTMENT_BONUS);
+    eAC2 = EffectACIncrease(1, AC_SHIELD_ENCHANTMENT_BONUS);
+    eAC3 = EffectACIncrease(1, AC_DODGE_BONUS);
+    eAC4 = EffectACIncrease(1, AC_NATURAL_BONUS);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+
+    effect eLink = EffectLinkEffects(eAC1, eAC2);
+    eLink = EffectLinkEffects(eLink, eAC3);
+    eLink = EffectLinkEffects(eLink, eAC4);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Apply the armor bonuses and the VFX impact
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+}
diff --git a/_removed/nw_s0_metswarm.ncs b/_removed/nw_s0_metswarm.ncs
new file mode 100644
index 0000000..2c158cc
Binary files /dev/null and b/_removed/nw_s0_metswarm.ncs differ
diff --git a/_removed/nw_s0_metswarm.nss b/_removed/nw_s0_metswarm.nss
new file mode 100644
index 0000000..79421eb
--- /dev/null
+++ b/_removed/nw_s0_metswarm.nss
@@ -0,0 +1,83 @@
+//::///////////////////////////////////////////////
+//:: Meteor Swarm
+//:: NW_S0_MetSwarm
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Everyone in a 50ft radius around the caster
+    takes 20d6 fire damage.  Those within 6ft of the
+    caster will take no damage.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 24 , 2001
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 22, 2001
+
+#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();
+    int nMetaMagic;
+    int nDamage;
+    effect eFire;
+    effect eMeteor = EffectVisualEffect(VFX_FNF_METEOR_SWARM);
+    effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
+    //Apply the meteor swarm VFX area impact
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMeteor, spell.Loc);
+    //Get first object in the spell area
+    float fDelay;
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc);
+    while(GetIsObjectValid(oTarget))
+    {
+        if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster) && oTarget != spell.Caster)
+        {
+            fDelay = GetRandomDelay();
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id));
+            //Make sure the target is outside the 2m safe zone
+            if (GetDistanceBetween(oTarget, spell.Caster) > 2.0)
+            {
+                //Make SR check
+                if (!MyResistSpell(spell.Caster, oTarget, 0.5))
+                {
+                      //Roll damage
+                      nDamage = MaximizeOrEmpower(12,20,spell.Meta);
+
+                      nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC,SAVING_THROW_TYPE_FIRE,spell.Caster);
+                      //Set the damage effect
+                      eFire = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
+                      if(nDamage > 0)
+                      {
+                          //Apply damage effect and VFX impact.
+                          DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oTarget));
+                          DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                      }
+                 }
+            }
+        }
+        //Get next target in the spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, spell.Loc);
+    }
+}
diff --git a/_removed/nw_s0_mscharm.ncs b/_removed/nw_s0_mscharm.ncs
new file mode 100644
index 0000000..843cbf8
Binary files /dev/null and b/_removed/nw_s0_mscharm.ncs differ
diff --git a/_removed/nw_s0_mscharm.nss b/_removed/nw_s0_mscharm.nss
new file mode 100644
index 0000000..2a6970c
--- /dev/null
+++ b/_removed/nw_s0_mscharm.nss
@@ -0,0 +1,109 @@
+//::///////////////////////////////////////////////
+//:: [Mass Charm]
+//:: [NW_S0_MsCharm.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    The caster attempts to charm a group of individuals
+    who's HD can be no more than his level combined.
+    The spell starts checking the area and those that
+    fail a will save are charmed.  The affected persons
+    are Charmed for 1 round per 2 caster levels.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 29, 2001
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 10, 2001
+//:: VFX Pass By: Preston W, On: June 22, 2001
+/*
+Patch 1.71
+
+- was doing charm effect even for players (replaced for daze in this case)
+- HD pool check corrected (if found target with HD matching HD pool)
+- HD pool decreased also in case of spell being resisted
+- added scaling by difficulty into duration
+- added delay into SR and saving throw's VFX
+- extended duration corrected to calculate twice of normal duration as usual
+*/
+
+#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
+
+    spellsDeclareMajorVariables();
+    effect eCharm = EffectCharmed();
+    effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
+    effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+
+    effect eLink = EffectLinkEffects(eMind, eDur);
+
+    effect eVis = EffectVisualEffect(VFX_IMP_CHARM);
+    int nDuration = spell.Level;
+    float fDelay;
+    int nAmount = spell.Level * 2;
+    //Check for metamagic extend
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration * 2;
+    }
+
+    effect scaledEffect;
+    int scaledDuration;
+
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc);
+
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc);
+    while (GetIsObjectValid(oTarget) && nAmount > 0)
+    {
+        if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster))
+        {
+            fDelay = GetRandomDelay();
+            //Check that the target is humanoid
+            if(AmIAHumanoid(oTarget) && nAmount >= GetHitDice(oTarget))
+            {
+                //Fire cast spell at event for the specified target
+                SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+                //Make an SR check
+                if (!MyResistSpell(spell.Caster, oTarget, fDelay))
+                {
+                    //Make a Will save to negate
+                    if (!MySavingThrow(SAVING_THROW_WILL, oTarget, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster, fDelay))
+                    {
+                        scaledEffect = GetScaledEffect(eCharm, oTarget);
+                        scaledEffect = EffectLinkEffects(eLink, scaledEffect);
+                        scaledDuration = GetScaledDuration(nDuration, oTarget);
+
+                        //Apply the linked effects and the VFX impact
+                        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, scaledEffect, oTarget, RoundsToSeconds(scaledDuration)));
+                        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                    }
+                    //Add the creatures HD to the count of affected creatures
+                    //nCnt = nCnt + GetHitDice(oTarget);
+                }
+                nAmount = nAmount - GetHitDice(oTarget);
+            }
+        }
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc);
+    }
+}
diff --git a/_removed/nw_s0_phankill.ncs b/_removed/nw_s0_phankill.ncs
new file mode 100644
index 0000000..552f72e
Binary files /dev/null and b/_removed/nw_s0_phankill.ncs differ
diff --git a/_removed/nw_s0_phankill.nss b/_removed/nw_s0_phankill.nss
new file mode 100644
index 0000000..846b541
--- /dev/null
+++ b/_removed/nw_s0_phankill.nss
@@ -0,0 +1,93 @@
+//::///////////////////////////////////////////////
+//:: Phantasmal Killer
+//:: NW_S0_PhantKill
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Target of the spell must make 2 saves or die.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Dec 14 , 2001
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 22, 2001
+//:: Update Pass By: Preston W, On: Aug 3, 2001
+/*
+Patch 1.70, fix by Shadooow
+
+- second saving throw subtype changed to fear (as per spell's descriptors)
+- missing feedback when target was fear immune
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDamage = MaximizeOrEmpower(6,3,spell.Meta);
+    effect eDam;
+    effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
+    effect eVis2 = EffectVisualEffect(VFX_IMP_SONIC);
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Make an SR check
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            // Immunity to fear or mind spells, makes you immune to Phantasmal Killer.
+            if (!GetIsImmune(spell.Target, IMMUNITY_TYPE_FEAR, spell.Caster) && !GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster))
+            {
+                //Make a Will save //1.70 - removed, the immunity and feedback is now handled differently
+                if (!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_MIND_SPELLS, spell.Caster))
+                {
+                    //Make a Fort save
+                    if (MySavingThrow(SAVING_THROW_FORT, spell.Target, spell.DC, SAVING_THROW_TYPE_FEAR, spell.Caster))
+                    {
+                         //Set the damage property
+                         eDam = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
+                         //Apply the damage effect and VFX impact
+                         ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target);
+                         ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, spell.Target);
+                    }
+                    else
+                    {
+                         //Apply the death effect and VFX impact
+                         // Immunity to death magic, should not make you immune to Phantasmal Killer.
+                         // So we need to make the effect supernatural.
+                         ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDeath()), spell.Target);
+                         //uncommented because of save subtype changed
+                         ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+                    }
+                }
+            }
+            else//fear or mind spells immune
+            {
+                //engine workaround to get proper feedback and VFX
+                eVis = EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE);
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), spell.Target, 1.0);
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_raisdead.ncs b/_removed/nw_s0_raisdead.ncs
new file mode 100644
index 0000000..ea3dae1
Binary files /dev/null and b/_removed/nw_s0_raisdead.ncs differ
diff --git a/_removed/nw_s0_raisdead.nss b/_removed/nw_s0_raisdead.nss
new file mode 100644
index 0000000..9b03e35
--- /dev/null
+++ b/_removed/nw_s0_raisdead.nss
@@ -0,0 +1,35 @@
+//::///////////////////////////////////////////////
+//:: [Raise Dead]
+//:: [NW_S0_RaisDead.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Brings a character back to life with 1 HP.
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 31, 2001
+//:: Modified 69MEH69 July2003
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001
+//:: VFX Pass By: Preston W, On: June 22, 2001
+#include "69_hench_lib"
+void main()
+{
+    //Declare major variables
+    object oTarget = GetSpellTargetObject();
+    effect eRaise = EffectResurrection();
+    effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RAISE_DEAD, FALSE));
+    if(GetIsDead(oTarget) &&  GetIsHenchmanDying(oTarget) == FALSE)
+    {
+        //Apply raise dead effect and VFX impact
+        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget);
+        if(GetDidDie(oTarget)) //Added for henchman
+        {
+         PostRespawnCleanup69(oTarget);
+        }
+    }
+}
+
diff --git a/_removed/nw_s0_rayfrost.ncs b/_removed/nw_s0_rayfrost.ncs
new file mode 100644
index 0000000..e625f68
Binary files /dev/null and b/_removed/nw_s0_rayfrost.ncs differ
diff --git a/_removed/nw_s0_rayfrost.nss b/_removed/nw_s0_rayfrost.nss
new file mode 100644
index 0000000..0f3b821
--- /dev/null
+++ b/_removed/nw_s0_rayfrost.nss
@@ -0,0 +1,72 @@
+//::///////////////////////////////////////////////
+//:: Ray of Frost
+//:: [NW_S0_RayFrost.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    If the caster succeeds at a ranged touch attack
+    the target takes 1d4 damage.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: feb 4, 2001
+//:://////////////////////////////////////////////
+//:: Bug Fix: Andrew Nobbs, April 17, 2003
+//:: Notes: Took out ranged attack roll.
+//:://////////////////////////////////////////////
+/*
+Patch 1.70, by Shadooow
+
+- empower metamagic empowered total value not just dice part
+*/
+
+#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();
+    //1 additional damage for every 2 caster levels.
+    int cMultiplier = GetCasterLevel(OBJECT_SELF) / 2;
+    if (cMultiplier <= 1) cMultiplier = 1;
+    if (cMultiplier >= 15) cMultiplier = 15;
+    int nDam = MaximizeOrEmpower(4,1,spell.Meta,cMultiplier);
+    effect eDam;
+    effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
+    effect eRay = EffectBeam(VFX_BEAM_COLD, spell.Caster, BODY_NODE_HAND);
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Make SR Check
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            //Set damage effect
+            eDam = EffectDamage(nDam, DAMAGE_TYPE_COLD);
+            //Apply the VFX impact and damage effect
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target);
+        }
+    }
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, spell.Target, 1.7);
+}
diff --git a/_removed/nw_s0_resserec.ncs b/_removed/nw_s0_resserec.ncs
new file mode 100644
index 0000000..3b34522
Binary files /dev/null and b/_removed/nw_s0_resserec.ncs differ
diff --git a/_removed/nw_s0_resserec.nss b/_removed/nw_s0_resserec.nss
new file mode 100644
index 0000000..b6d3b38
--- /dev/null
+++ b/_removed/nw_s0_resserec.nss
@@ -0,0 +1,40 @@
+//::///////////////////////////////////////////////
+//:: [Ressurection]
+//:: [NW_S0_Ressurec.nss]
+//:: Copyright (c) 2000 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: Brings a character back to life with full
+//:: health.
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 31, 2001
+//:: Modified 69MEH69 July2003
+//:://////////////////////////////////////////////
+//:: Last Updated By: Preston Watamaniuk, On: April 11, 2001
+//:: VFX Pass By: Preston W, On: June 22, 2001
+#include "69_hench_lib"
+void main()
+{
+    //Get the spell target
+    object oTarget = GetSpellTargetObject();
+    //Check to make sure the target is dead first
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RESURRECTION, FALSE));
+    if (GetIsDead(oTarget) &&  GetIsHenchmanDying(oTarget) == FALSE)
+    {
+        //Declare major variables
+        int nHealed = GetMaxHitPoints(oTarget);
+        effect eRaise = EffectResurrection();
+        effect eHeal = EffectHeal(nHealed + 10);
+        effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
+        //Apply the heal, raise dead and VFX impact effect
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eRaise, oTarget);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
+        if(GetDidDie(oTarget)) //Added for henchman
+        {
+         PostRespawnCleanup69(oTarget);
+        }
+    }
+}
+
diff --git a/_removed/nw_s0_sanctuary.ncs b/_removed/nw_s0_sanctuary.ncs
new file mode 100644
index 0000000..384521b
Binary files /dev/null and b/_removed/nw_s0_sanctuary.ncs differ
diff --git a/_removed/nw_s0_sanctuary.nss b/_removed/nw_s0_sanctuary.nss
new file mode 100644
index 0000000..bcad3c7
--- /dev/null
+++ b/_removed/nw_s0_sanctuary.nss
@@ -0,0 +1,58 @@
+//::///////////////////////////////////////////////
+//:: Sanctuary
+//:: NW_S0_Sanctuary.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Makes the target creature invisible to hostile
+    creatures unless they make a Will Save to ignore
+    the Sanctuary Effect
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 eVis = EffectVisualEffect(VFX_DUR_SANCTUARY);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eSanc = EffectSanctuary(spell.DC);
+
+    effect eLink = EffectLinkEffects(eVis, eSanc);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    int nDuration = spell.Level;
+    if(nDuration > 20) nDuration = 20;
+    //Enter Metamagic conditions
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    //Apply the VFX impact and effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+}
diff --git a/_removed/nw_s0_silence.ncs b/_removed/nw_s0_silence.ncs
new file mode 100644
index 0000000..e8ea49f
Binary files /dev/null and b/_removed/nw_s0_silence.ncs differ
diff --git a/_removed/nw_s0_silence.nss b/_removed/nw_s0_silence.nss
new file mode 100644
index 0000000..beff713
--- /dev/null
+++ b/_removed/nw_s0_silence.nss
@@ -0,0 +1,93 @@
+//::///////////////////////////////////////////////
+//:: Silence
+//:: NW_S0_Silence.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    The target is surrounded by a zone of silence
+    that allows them to move without sound.  Spell
+    casters caught in this area will be unable to cast
+    spells.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+- if cast on ally the effect bypass spell resistance/immunity properly
+- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others,
+thats module-related)
+*/
+
+#include "70_inc_spells"
+#include "nw_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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 including Area of Effect Object
+    spellsDeclareMajorVariables();
+
+    effect eAOE = EffectAreaOfEffect(AOE_MOB_SILENCE);
+    effect eVis = EffectVisualEffect(VFX_DUR_AURA_SILENCE);
+    effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eSilence = EffectSilence();
+    effect eImmune = EffectDamageImmunityIncrease(DAMAGE_TYPE_SONIC, 100);
+
+    effect eLink = EffectLinkEffects(eDur2, eSilence);
+    eLink = EffectLinkEffects(eLink, eImmune);
+    eLink = EffectLinkEffects(eLink, eVis);
+    eLink = EffectLinkEffects(eLink, eAOE);
+
+    int nDuration = spell.Level;
+    //Check Extend metamagic feat.
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+       nDuration = nDuration *2;    //Duration is +100%
+    }
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    if(!GetIsFriend(spell.Target))
+    {
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            if(!MySavingThrow(SAVING_THROW_WILL, spell.Target, spell.DC, SAVING_THROW_TYPE_NONE, spell.Caster))
+            {
+                //Fire cast spell at event for the specified target
+                SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+
+                //Create an instance of the AOE Object using the Apply Effect function
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+                spellsSetupNewAOE("VFX_MOB_SILENCE");
+            }
+        }
+    }
+    else
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+        //Create an instance of the AOE Object using the Apply Effect function
+        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+        spellsSetupNewAOE("VFX_MOB_SILENCE");
+    }
+}
diff --git a/_removed/nw_s0_summon.ncs b/_removed/nw_s0_summon.ncs
new file mode 100644
index 0000000..c2b7e9a
Binary files /dev/null and b/_removed/nw_s0_summon.ncs differ
diff --git a/_removed/nw_s0_summon.nss b/_removed/nw_s0_summon.nss
new file mode 100644
index 0000000..d28f770
--- /dev/null
+++ b/_removed/nw_s0_summon.nss
@@ -0,0 +1,354 @@
+//::///////////////////////////////////////////////
+//:: Summon Creature Series
+//:: NW_S0_Summon
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Carries out the summoning of the appropriate
+    creature for the Summon Monster Series of spells
+    1 to 9
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 8, 2002
+//:://////////////////////////////////////////////
+
+effect SetSummonEffect(int nSpellID);
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = 24;
+
+    effect eSummon = SetSummonEffect(spell.Id);
+
+    //Make metamagic check for extend
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2;   //Duration is +100%
+    }
+    //Apply the VFX impact and summon effect
+
+    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration));
+}
+
+
+effect SetSummonEffect(int nSpellID)
+{
+    int nFNF_Effect;
+    int nRoll = d4();
+    string sSummon;
+    if(GetHasFeat(FEAT_ANIMAL_DOMAIN_POWER)) //WITH THE ANIMAL DOMAIN
+    {
+        if(nSpellID == SPELL_SUMMON_CREATURE_I)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1;
+            sSummon = "NW_S_BOARDIRE";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_II)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1;
+            sSummon = "NW_S_WOLFDIRE";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_III)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1;
+            sSummon = "NW_S_SPIDDIRE";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_IV)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2;
+            sSummon = "NW_S_beardire";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_V)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2;
+            sSummon = "NW_S_diretiger";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_VI)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRHUGE";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERHUGE";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREHUGE";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHHUGE";
+                break;
+            }
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_VII)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRGREAT";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERGREAT";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREGREAT";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHGREAT";
+                break;
+            }
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_VIII)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            if (GetCasterLevel(OBJECT_SELF) >= 33)
+            {
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRELDER2";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERELDER2";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREELDER2";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHELDER2";
+                break;
+            }
+            }
+            else
+            {
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRELDER";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERELDER";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREELDER";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHELDER";
+                break;
+            }
+            }
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_IX)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            if (GetCasterLevel(OBJECT_SELF) >= 28)
+            {
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRELDER2";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERELDER2";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREELDER2";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHELDER2";
+                break;
+            }
+            }
+            else
+            {
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRELDER";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERELDER";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREELDER";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHELDER";
+                break;
+            }
+            }
+        }
+    }
+    else  //WITOUT THE ANIMAL DOMAIN
+    {
+        if(nSpellID == SPELL_SUMMON_CREATURE_I)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1;
+            sSummon = "NW_S_badgerdire";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_II)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1;
+            sSummon = "NW_S_BOARDIRE";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_III)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_1;
+            sSummon = "NW_S_WOLFDIRE";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_IV)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2;
+            sSummon = "NW_S_SPIDDIRE";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_V)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2;
+            sSummon = "NW_S_beardire";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_VI)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_2;
+            sSummon = "NW_S_diretiger";
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_VII)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRHUGE";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERHUGE";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREHUGE";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHHUGE";
+                break;
+            }
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_VIII)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRGREAT";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERGREAT";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREGREAT";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHGREAT";
+                break;
+            }
+        }
+        else if(nSpellID == SPELL_SUMMON_CREATURE_IX)
+        {
+            nFNF_Effect = VFX_FNF_SUMMON_MONSTER_3;
+            if (GetCasterLevel(OBJECT_SELF) >= 30)
+            {
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRELDER2";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERELDER2";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREELDER2";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHELDER2";
+                break;
+            }
+            }
+            else
+            {
+            switch (nRoll)
+            {
+                case 1:
+                    sSummon = "NW_S_AIRELDER";
+                break;
+
+                case 2:
+                    sSummon = "NW_S_WATERELDER";
+                break;
+
+                case 3:
+                    sSummon = "NW_S_FIREELDER";
+                break;
+
+                case 4:
+                    sSummon = "NW_S_EARTHELDER";
+                break;
+            }
+            }
+        }
+    }
+    //effect eVis = EffectVisualEffect(nFNF_Effect);
+    //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
+    effect eSummonedMonster = EffectSummonCreature(sSummon, nFNF_Effect);
+    return eSummonedMonster;
+}
diff --git a/_removed/nw_s0_timestop.ncs b/_removed/nw_s0_timestop.ncs
new file mode 100644
index 0000000..7deed45
Binary files /dev/null and b/_removed/nw_s0_timestop.ncs differ
diff --git a/_removed/nw_s0_timestop.nss b/_removed/nw_s0_timestop.nss
new file mode 100644
index 0000000..4e182c8
--- /dev/null
+++ b/_removed/nw_s0_timestop.nss
@@ -0,0 +1,83 @@
+//::///////////////////////////////////////////////
+//:: Time Stop
+//:: NW_S0_TimeStop.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All persons in the Area are frozen in time
+    except the caster.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.70, by Shadoow
+
+- in MP environment, spell affect only current area
+*/
+
+#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();
+    int nRoll = 1 + d4();
+
+    effect eTime, eVis = EffectVisualEffect(VFX_FNF_TIME_STOP);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(spell.Caster));
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Caster, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    if (GetLocalInt(spell.Caster, "tscooldown") == 1 && GetIsPC(OBJECT_SELF) == TRUE)
+        {
+        FloatingTextStringOnCreature("The spell has failed!", spell.Caster, FALSE);
+        return;
+        }
+    if(GetPCPublicCDKey(GetFirstPC(),FALSE) == "")//SP environment, keep default effect
+    {
+        eTime = EffectTimeStop();
+        //Apply the VFX impact and effects
+        DelayCommand(0.75, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTime, spell.Caster, IntToFloat(d6())+2.0 ));
+        SetLocalInt(spell.Caster, "tscooldown", 1);
+        DelayCommand(18.0, SetLocalInt(spell.Caster, "tscooldown", 0));
+    }
+    else//MP environment, use cutscene paralyse for all creatures in caster's area
+    {
+        eTime = ExtraordinaryEffect(EffectLinkEffects(EffectCutsceneParalyze(), EffectVisualEffect(VFX_DUR_BLUR)));
+        int nTh = 1;
+        object oTarget = GetNearestObject(OBJECT_TYPE_CREATURE, spell.Caster, nTh);
+        while(GetIsObjectValid(oTarget))
+        {
+            if(oTarget != spell.Caster && !GetIsDM(oTarget))
+            {
+                DelayCommand(0.75, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTime, oTarget, IntToFloat(d6())+2.0 ));
+                SetLocalInt(spell.Caster, "tscooldown", 1);
+                DelayCommand(18.0, SetLocalInt(spell.Caster, "tscooldown", 0));
+            }
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+            oTarget = GetNearestObject(OBJECT_TYPE_CREATURE, spell.Caster, ++nTh);
+        }
+    }
+}
diff --git a/_removed/nw_s0_wallfirea.ncs b/_removed/nw_s0_wallfirea.ncs
new file mode 100644
index 0000000..f4a4e98
Binary files /dev/null and b/_removed/nw_s0_wallfirea.ncs differ
diff --git a/_removed/nw_s0_wallfirea.nss b/_removed/nw_s0_wallfirea.nss
new file mode 100644
index 0000000..ba1eef3
--- /dev/null
+++ b/_removed/nw_s0_wallfirea.nss
@@ -0,0 +1,52 @@
+//::///////////////////////////////////////////////
+//:: Wall of Fire: On Enter
+//:: NW_S0_WallFireA.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Person within the AoE take 4d6 fire damage
+    per round.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 17, 2001
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    //Declare major variables
+    aoesDeclareMajorVariables();
+    int nDamage;
+    effect eDam;
+    //Declare and assign personal impact visual effect.
+    effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
+    //Capture the first target object in the shape.
+    object oTarget = GetEnteringObject();
+
+    if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id));
+        //Make SR check, and appropriate saving throw(s).
+        if(!MyResistSpell(aoe.Creator, oTarget))
+        {
+            //Roll damage.
+            int nDice = GetCasterLevel(aoe.Creator) / 5;
+            if (nDice < 4) nDice = 4;
+            if (nDice > 7) nDice = 7;
+            nDamage = MaximizeOrEmpower(6,nDice,spell.Meta);
+            nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC, SAVING_THROW_TYPE_FIRE, aoe.Creator);
+            if(nDamage > 0)
+            {
+                // Apply effects to the currently selected target.
+                eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+            }
+        }
+    }
+}
diff --git a/_removed/nw_s0_wallfirec.ncs b/_removed/nw_s0_wallfirec.ncs
new file mode 100644
index 0000000..8ddd9f0
Binary files /dev/null and b/_removed/nw_s0_wallfirec.ncs differ
diff --git a/_removed/nw_s0_wallfirec.nss b/_removed/nw_s0_wallfirec.nss
new file mode 100644
index 0000000..d606a02
--- /dev/null
+++ b/_removed/nw_s0_wallfirec.nss
@@ -0,0 +1,71 @@
+//::///////////////////////////////////////////////
+//:: Wall of Fire: Heartbeat
+//:: NW_S0_WallFireA.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Person within the AoE take 4d6 fire damage
+    per round.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 17, 2001
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    //Declare major variables
+    aoesDeclareMajorVariables();
+    int nDamage;
+    effect eDam;
+    //Declare and assign personal impact visual effect.
+    effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
+    //Capture the first target object in the shape.
+
+    //--------------------------------------------------------------------------
+    // GZ 2003-Oct-15
+    // When the caster is no longer there, all functions calling
+    // GetAreaOfEffectCreator will fail. Its better to remove the barrier then
+    //--------------------------------------------------------------------------
+    if (!GetIsObjectValid(aoe.Creator))
+    {
+        DestroyObject(aoe.AOE);
+        return;
+    }
+
+    object oTarget = GetFirstInPersistentObject(aoe.AOE,OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    //Declare the spell shape, size and the location.
+    while(GetIsObjectValid(oTarget))
+    {
+        if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id));
+            //Make SR check, and appropriate saving throw(s).
+            if(!MyResistSpell(aoe.Creator, oTarget))
+            {
+                //Roll damage.
+                int nDice = GetCasterLevel(aoe.Creator) / 5;
+                if (nDice < 4) nDice = 4;
+                if (nDice > 7) nDice = 7;
+                nDamage = MaximizeOrEmpower(6,nDice,spell.Meta);
+                //Enter Metamagic conditions
+
+                nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC, SAVING_THROW_TYPE_FIRE, aoe.Creator);
+                if(nDamage > 0)
+                {
+                    // Apply effects to the currently selected target.
+                    eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget, 1.0);
+                }
+            }
+        }
+        //Select the next target within the spell shape.
+        oTarget = GetNextInPersistentObject(aoe.AOE,OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    }
+}
diff --git a/_removed/nw_s0_weird.ncs b/_removed/nw_s0_weird.ncs
new file mode 100644
index 0000000..cde19ff
Binary files /dev/null and b/_removed/nw_s0_weird.ncs differ
diff --git a/_removed/nw_s0_weird.nss b/_removed/nw_s0_weird.nss
new file mode 100644
index 0000000..5cbceeb
--- /dev/null
+++ b/_removed/nw_s0_weird.nss
@@ -0,0 +1,115 @@
+//::///////////////////////////////////////////////
+//:: 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);
+    }
+}
diff --git a/_removed/nw_s1_dragacid.ncs b/_removed/nw_s1_dragacid.ncs
new file mode 100644
index 0000000..334f791
Binary files /dev/null and b/_removed/nw_s1_dragacid.ncs differ
diff --git a/_removed/nw_s1_dragacid.nss b/_removed/nw_s1_dragacid.nss
new file mode 100644
index 0000000..68ff6cb
--- /dev/null
+++ b/_removed/nw_s1_dragacid.nss
@@ -0,0 +1,113 @@
+//::///////////////////////////////////////////////
+//:: Dragon Breath Acid
+//:: NW_S1_DragAcid
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Calculates the proper damage and DC Save for the
+    breath weapon based on the HD of the dragon.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 9, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- wrong target check (could affect other NPCs)
+- damage was the same for all creatures in AoE
+- damage dice calculation wasn't correct for some HDs
+- old evasion behaviour (now that evasion is applied will appear in log)
+> breath weapon damage and DC calculation changed in order to allow higher values
+for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+
+dragon's constitution modifier.
+*/
+
+#include "70_inc_dragons"
+#include "x0_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    int nDamage = GetDragonBreathNumDice();
+    int nDC = GetDragonBreathDC();
+
+    //When used by a dragon disciple, calculate DC and damage based on their DD levels
+     if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 )
+    {
+    int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF);
+    nDamage = 2*nLevel / 3;
+    //if (nLevel == 29) nDamage = 25;
+    //if (nLevel == 30) nDamage = 30;
+
+    switch (nLevel)
+        {
+        case 1: nDC = 15; break;
+        case 2: nDC = 15; break;
+        case 3: nDC = 15; break;
+        case 4: nDC = 15; break;
+        case 5: nDC = 16; break;
+        case 6: nDC = 16; break;
+        case 7: nDC = 17; break;
+        case 8: nDC = 17; break;
+        case 9: nDC = 18; break;
+        case 10: nDC = 18; break;
+        case 11: nDC = 19; break;
+        case 12: nDC = 20; break;
+        case 13: nDC = 21; break;
+        case 14: nDC = 22; break;
+        case 15: nDC = 23; break;
+        case 16: nDC = 24; break;
+        case 17: nDC = 25; break;
+        case 18: nDC = 26; break;
+        case 19: nDC = 27; break;
+        case 20: nDC = 28; break;
+        case 21: nDC = 29; break;
+        case 22: nDC = 30; break;
+        case 23: nDC = 31; break;
+        case 24: nDC = 32; break;
+        case 25: nDC = 33; break;
+        case 26: nDC = 34; break;
+        case 27: nDC = 35; break;
+        case 28: nDC = 36; break;
+        case 29: nDC = 37; break;
+        case 30: nDC = 38; break;
+        }
+    }
+    //Done
+
+    int nDamStrike;
+    float fDelay;
+    effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
+    effect eBreath;
+
+     if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry();
+    //Get first target in spell area
+    object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_ACID));
+            //Determine effect delay
+            fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+            //randomize damage for each creature in AoE
+            nDamStrike = d10(nDamage);
+             if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d4(nDamage);
+            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
+            nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_ACID, OBJECT_SELF);
+            if (nDamStrike > 0)
+            {
+                //Set Damage
+                eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_ACID);
+                //Apply the VFX impact and effects
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget));
+             }
+        }
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    }
+    SetLocalInt(OBJECT_SELF, "ddbreath", 0);
+}
diff --git a/_removed/nw_s1_dragcold.ncs b/_removed/nw_s1_dragcold.ncs
new file mode 100644
index 0000000..f511d75
Binary files /dev/null and b/_removed/nw_s1_dragcold.ncs differ
diff --git a/_removed/nw_s1_dragcold.nss b/_removed/nw_s1_dragcold.nss
new file mode 100644
index 0000000..3199e50
--- /dev/null
+++ b/_removed/nw_s1_dragcold.nss
@@ -0,0 +1,111 @@
+//::///////////////////////////////////////////////
+//:: Dragon Breath Cold
+//:: NW_S1_DragCold
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Calculates the proper damage and DC Save for the
+    breath weapon based on the HD of the dragon.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 9, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- wrong target check (could affect other NPCs)
+- damage was the same for all creatures in AoE
+- old evasion behaviour (now that evasion is applied will appear in log)
+> breath weapon damage and DC calculation changed in order to allow higher values
+for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+
+dragon's constitution modifier.
+*/
+
+#include "70_inc_dragons"
+#include "x0_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    int nDamage = GetDragonBreathNumDice()/2;
+    int nDC = GetDragonBreathDC();
+
+    //When used by a dragon disciple, calculate DC and damage based on their DD levels
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 )
+    {
+    int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF);
+    nDamage = 2*nLevel / 3;
+    //if (nLevel == 29) nDamage = 25;
+    //if (nLevel == 30) nDamage = 30;
+
+    switch (nLevel)
+        {
+        case 1: nDC = 15; break;
+        case 2: nDC = 15; break;
+        case 3: nDC = 15; break;
+        case 4: nDC = 15; break;
+        case 5: nDC = 16; break;
+        case 6: nDC = 16; break;
+        case 7: nDC = 17; break;
+        case 8: nDC = 17; break;
+        case 9: nDC = 18; break;
+        case 10: nDC = 18; break;
+        case 11: nDC = 19; break;
+        case 12: nDC = 20; break;
+        case 13: nDC = 21; break;
+        case 14: nDC = 22; break;
+        case 15: nDC = 23; break;
+        case 16: nDC = 24; break;
+        case 17: nDC = 25; break;
+        case 18: nDC = 26; break;
+        case 19: nDC = 27; break;
+        case 20: nDC = 28; break;
+        case 21: nDC = 29; break;
+        case 22: nDC = 30; break;
+        case 23: nDC = 31; break;
+        case 24: nDC = 32; break;
+        case 25: nDC = 33; break;
+        case 26: nDC = 34; break;
+        case 27: nDC = 35; break;
+        case 28: nDC = 36; break;
+        case 29: nDC = 37; break;
+        case 30: nDC = 38; break;
+        }
+    }
+    //Done
+
+    int nDamStrike;
+    float fDelay;
+    effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
+    effect eBreath;
+
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry();
+    //Get first target in spell area
+    object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_COLD));
+            nDamStrike = d10(nDamage);
+            if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d6(nDamage);
+            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
+            nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_COLD, OBJECT_SELF);
+            if (nDamStrike > 0)
+            {
+                //Set Damage
+                eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_COLD);
+                //Determine effect delay
+                fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+                //Apply the VFX impact and effects
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget));
+             }
+        }
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    }
+    SetLocalInt(OBJECT_SELF, "ddbreath", 0);
+}
diff --git a/_removed/nw_s1_dragfire.ncs b/_removed/nw_s1_dragfire.ncs
new file mode 100644
index 0000000..ffe218d
Binary files /dev/null and b/_removed/nw_s1_dragfire.ncs differ
diff --git a/_removed/nw_s1_dragfire.nss b/_removed/nw_s1_dragfire.nss
new file mode 100644
index 0000000..a11681f
--- /dev/null
+++ b/_removed/nw_s1_dragfire.nss
@@ -0,0 +1,111 @@
+//::///////////////////////////////////////////////
+//:: Dragon Breath Fire
+//:: NW_S1_DragFire
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Calculates the proper damage and DC Save for the
+    breath weapon based on the HD of the dragon.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 9, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- wrong target check (could affect other NPCs)
+- damage was the same for all creatures in AoE
+- old evasion behaviour (now that evasion is applied will appear in log)
+> breath weapon damage and DC calculation changed in order to allow higher values
+for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+
+dragon's constitution modifier.
+*/
+
+#include "70_inc_dragons"
+#include "x0_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    int nDamage = GetDragonBreathNumDice();
+    int nDC = GetDragonBreathDC();
+
+    //When used by a dragon disciple, calculate DC and damage based on their DD levels
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 )
+    {
+    int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF);
+    nDamage = 2*nLevel / 3;
+    //if (nLevel == 29) nDamage = 25;
+    //if (nLevel == 30) nDamage = 30;
+
+    switch (nLevel)
+        {
+        case 1: nDC = 15; break;
+        case 2: nDC = 15; break;
+        case 3: nDC = 15; break;
+        case 4: nDC = 15; break;
+        case 5: nDC = 16; break;
+        case 6: nDC = 16; break;
+        case 7: nDC = 17; break;
+        case 8: nDC = 17; break;
+        case 9: nDC = 18; break;
+        case 10: nDC = 18; break;
+        case 11: nDC = 19; break;
+        case 12: nDC = 20; break;
+        case 13: nDC = 21; break;
+        case 14: nDC = 22; break;
+        case 15: nDC = 23; break;
+        case 16: nDC = 24; break;
+        case 17: nDC = 25; break;
+        case 18: nDC = 26; break;
+        case 19: nDC = 27; break;
+        case 20: nDC = 28; break;
+        case 21: nDC = 29; break;
+        case 22: nDC = 30; break;
+        case 23: nDC = 31; break;
+        case 24: nDC = 32; break;
+        case 25: nDC = 33; break;
+        case 26: nDC = 34; break;
+        case 27: nDC = 35; break;
+        case 28: nDC = 36; break;
+        case 29: nDC = 37; break;
+        case 30: nDC = 38; break;
+        }
+    }
+    //Done
+
+    int nDamStrike;
+    float fDelay;
+    effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
+    effect eBreath;
+
+     if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry();
+    //Get first target in spell area
+    object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_FIRE));
+            //randomize damage for each creature in AoE
+            nDamStrike = d10(nDamage);
+            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
+            nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_FIRE, OBJECT_SELF);
+            if (nDamStrike > 0)
+            {
+                //Set Damage
+                eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_FIRE);
+                //Determine effect delay
+                fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+                //Apply the VFX impact and effects
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget));
+             }
+        }
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    }
+    SetLocalInt(OBJECT_SELF, "ddbreath", 0);
+}
diff --git a/_removed/nw_s1_draggas.ncs b/_removed/nw_s1_draggas.ncs
new file mode 100644
index 0000000..54b1b20
Binary files /dev/null and b/_removed/nw_s1_draggas.ncs differ
diff --git a/_removed/nw_s1_draggas.nss b/_removed/nw_s1_draggas.nss
new file mode 100644
index 0000000..82bd9e8
--- /dev/null
+++ b/_removed/nw_s1_draggas.nss
@@ -0,0 +1,112 @@
+//::///////////////////////////////////////////////
+//:: Dragon Breath Gas Cloud
+//:: NW_S1_DragGas
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Calculates the proper damage and DC Save for the
+    breath weapon based on the HD of the dragon.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 9, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- wrong target check (could affect other NPCs)
+- damage was the same for all creatures in AoE
+- old evasion behaviour (now that evasion is applied will appear in log)
+> breath weapon damage and DC calculation changed in order to allow higher values
+for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+
+dragon's constitution modifier.
+*/
+
+#include "70_inc_dragons"
+#include "x0_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    int nDamage = GetDragonBreathNumDice();
+    int nDC = GetDragonBreathDC();
+
+    //When used by a dragon disciple, calculate DC and damage based on their DD levels
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 )
+    {
+    int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF);
+    nDamage = 2*nLevel / 3;
+    //if (nLevel == 29) nDamage = 25;
+    //if (nLevel == 30) nDamage = 30;
+
+    switch (nLevel)
+        {
+        case 1: nDC = 15; break;
+        case 2: nDC = 15; break;
+        case 3: nDC = 15; break;
+        case 4: nDC = 15; break;
+        case 5: nDC = 16; break;
+        case 6: nDC = 16; break;
+        case 7: nDC = 17; break;
+        case 8: nDC = 17; break;
+        case 9: nDC = 18; break;
+        case 10: nDC = 18; break;
+        case 11: nDC = 19; break;
+        case 12: nDC = 20; break;
+        case 13: nDC = 21; break;
+        case 14: nDC = 22; break;
+        case 15: nDC = 23; break;
+        case 16: nDC = 24; break;
+        case 17: nDC = 25; break;
+        case 18: nDC = 26; break;
+        case 19: nDC = 27; break;
+        case 20: nDC = 28; break;
+        case 21: nDC = 29; break;
+        case 22: nDC = 30; break;
+        case 23: nDC = 31; break;
+        case 24: nDC = 32; break;
+        case 25: nDC = 33; break;
+        case 26: nDC = 34; break;
+        case 27: nDC = 35; break;
+        case 28: nDC = 36; break;
+        case 29: nDC = 37; break;
+        case 30: nDC = 38; break;
+        }
+    }
+    //Done
+
+    int nDamStrike;
+    float fDelay;
+    effect eVis = EffectVisualEffect(VFX_IMP_POISON_L);
+    effect eBreath;
+
+     if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry();
+    //Get first target in spell area
+    object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_GAS));
+            //randomize damage for each creature in AoE
+            nDamStrike = d10(nDamage);
+             if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d6(nDamage);
+            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
+            nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_ACID, OBJECT_SELF);
+            if (nDamStrike > 0)
+            {
+                //Set Damage and VFX
+                eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_ACID);
+                //Determine effect delay
+                fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+                //Apply the VFX impact and effects
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget));
+             }
+        }
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation(), TRUE);
+    }
+    SetLocalInt(OBJECT_SELF, "ddbreath", 0);
+}
diff --git a/_removed/nw_s1_draglight.ncs b/_removed/nw_s1_draglight.ncs
new file mode 100644
index 0000000..bc69e87
Binary files /dev/null and b/_removed/nw_s1_draglight.ncs differ
diff --git a/_removed/nw_s1_draglight.nss b/_removed/nw_s1_draglight.nss
new file mode 100644
index 0000000..20169b4
--- /dev/null
+++ b/_removed/nw_s1_draglight.nss
@@ -0,0 +1,113 @@
+//::///////////////////////////////////////////////
+//:: Dragon Breath Lightning
+//:: NW_S1_DragLightn
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Calculates the proper damage and DC Save for the
+    breath weapon based on the HD of the dragon.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: May 9, 2001
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- wrong target check (could affect other NPCs)
+- damage was the same for all creatures in AoE
+- old evasion behaviour (now that evasion is applied will appear in log)
+- did signalized wrong spell id
+> breath weapon damage and DC calculation changed in order to allow higher values
+for custom content dragons with 40+ HD. DC calculation is now 10+1/2 dragon's HD+
+dragon's constitution modifier.
+*/
+
+#include "70_inc_dragons"
+#include "x0_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    int nDamage = GetDragonBreathNumDice();
+    int nDC = GetDragonBreathDC();
+
+    //When used by a dragon disciple, calculate DC and damage based on their DD levels
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1 )
+    {
+    int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, OBJECT_SELF);
+    nDamage = 2*nLevel / 3;
+    //if (nLevel == 29) nDamage = 25;
+    //if (nLevel == 30) nDamage = 30;
+
+    switch (nLevel)
+        {
+        case 1: nDC = 15; break;
+        case 2: nDC = 15; break;
+        case 3: nDC = 15; break;
+        case 4: nDC = 15; break;
+        case 5: nDC = 16; break;
+        case 6: nDC = 16; break;
+        case 7: nDC = 17; break;
+        case 8: nDC = 17; break;
+        case 9: nDC = 18; break;
+        case 10: nDC = 18; break;
+        case 11: nDC = 19; break;
+        case 12: nDC = 20; break;
+        case 13: nDC = 21; break;
+        case 14: nDC = 22; break;
+        case 15: nDC = 23; break;
+        case 16: nDC = 24; break;
+        case 17: nDC = 25; break;
+        case 18: nDC = 26; break;
+        case 19: nDC = 27; break;
+        case 20: nDC = 28; break;
+        case 21: nDC = 29; break;
+        case 22: nDC = 30; break;
+        case 23: nDC = 31; break;
+        case 24: nDC = 32; break;
+        case 25: nDC = 33; break;
+        case 26: nDC = 34; break;
+        case 27: nDC = 35; break;
+        case 28: nDC = 36; break;
+        case 29: nDC = 37; break;
+        case 30: nDC = 38; break;
+        }
+    }
+    //Done
+
+    int nDamStrike;
+    float fDelay;
+    //effect eLightning = EffectBeam(VFX_BEAM_LIGHTNING, OBJECT_SELF,BODY_NODE_HAND);
+    effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
+    effect eBreath;
+
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) PlayDragonBattleCry();
+    //Get first target in spell area
+    object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation());
+    while (GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_DRAGON_BREATH_LIGHTNING));
+            //randomize damage for each creature in AoE
+            nDamStrike = d10(nDamage);
+            if (GetLocalInt(OBJECT_SELF, "ddbreath") == 0 ) nDamStrike = d8(nDamage);
+            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
+            nDamStrike = GetReflexAdjustedDamage(nDamStrike, oTarget, nDC, SAVING_THROW_TYPE_ELECTRICITY, OBJECT_SELF);
+            if(nDamStrike > 0)
+            {
+                //Set the damage effect
+                eBreath = EffectDamage(nDamStrike, DAMAGE_TYPE_ELECTRICAL);
+                //Determine effect delay
+                fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+                //Apply the VFX impact and effects
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eBreath,oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget));
+            }
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 14.0, GetSpellTargetLocation());
+    }
+    SetLocalInt(OBJECT_SELF, "ddbreath", 0);
+}
diff --git a/_removed/nw_s2_animalcom.ncs b/_removed/nw_s2_animalcom.ncs
new file mode 100644
index 0000000..d3ab5d6
Binary files /dev/null and b/_removed/nw_s2_animalcom.ncs differ
diff --git a/_removed/nw_s2_animalcom.nss b/_removed/nw_s2_animalcom.nss
new file mode 100644
index 0000000..a50a7ab
--- /dev/null
+++ b/_removed/nw_s2_animalcom.nss
@@ -0,0 +1,24 @@
+//::///////////////////////////////////////////////
+//:: Summon Animal Companion
+//:: NW_S2_AnimalComp
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    This spell summons a Druid's animal companion
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Sept 27, 2001
+//:: Modified: 69MEH69 Sep2005
+//:://////////////////////////////////////////////
+#include "69_hench_lib"
+void main()
+{
+    if(!GetIsPC(OBJECT_SELF))
+    {
+      HenchSummonCreature69(OBJECT_SELF);
+      return;
+    }
+    //Yep thats it
+    SummonAnimalCompanion();
+}
diff --git a/_removed/nw_s2_bardsong.ncs b/_removed/nw_s2_bardsong.ncs
new file mode 100644
index 0000000..a6a9afe
Binary files /dev/null and b/_removed/nw_s2_bardsong.ncs differ
diff --git a/_removed/nw_s2_bardsong.nss b/_removed/nw_s2_bardsong.nss
new file mode 100644
index 0000000..2637e79
--- /dev/null
+++ b/_removed/nw_s2_bardsong.nss
@@ -0,0 +1,445 @@
+//::///////////////////////////////////////////////
+//:: Bard Song
+//:: NW_S2_BardSong
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    This spells applies bonuses to all of the
+    bard's allies within 30ft for a set duration of
+    10 rounds.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Feb 25, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Georg Zoeller Oct 1, 2003
+/*
+bugfix by Kovi 2002.07.30
+- loosing temporary hp resulted in loosing the other bonuses
+*/
+
+#include "x0_i0_spells"
+
+void main()
+{
+    if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
+    {
+        FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
+        return;
+    }
+    string sTag = GetTag(OBJECT_SELF);
+
+    if (sTag == "x0_hen_dee" || sTag == "x2_hen_deekin")
+    {
+        // * Deekin has a chance of singing a doom song
+        // * same effect, better tune
+        if (Random(100) + 1 > 80)
+        {
+            // the Xp2 Deekin knows more than one doom song
+            if (d3() ==1 && sTag == "x2_hen_deekin")
+            {
+                DelayCommand(0.0, PlaySound("vs_nx2deekM_050"));
+            }
+            else
+            {
+                DelayCommand(0.0, PlaySound("vs_nx0deekM_074"));
+                DelayCommand(5.0, PlaySound("vs_nx0deekM_074"));
+            }
+        }
+    }
+
+
+    //Declare major variables
+    int nLevel = GetLevelByClass(CLASS_TYPE_BARD);
+    int nRanks = GetSkillRank(SKILL_PERFORM);
+    int nChr = GetAbilityModifier(ABILITY_CHARISMA);
+    int nPerform = nRanks;
+    int nDuration = 10; //+ nChr;
+
+    effect eAttack;
+    effect eDamage;
+    effect eWill;
+    effect eFort;
+    effect eReflex;
+    effect eHP;
+    effect eAC;
+    effect eSkill;
+
+    int nAttack;
+    int nDamage;
+    int nWill;
+    int nFort;
+    int nReflex;
+    int nHP;
+    int nAC;
+    int nSkill;
+
+    // lingering song
+    if(GetHasFeat(424)) // lingering song
+    {
+        nDuration += 5;
+    }
+
+    //Check to see if the caster has Lasting Impression and increase duration.
+    if(GetHasFeat(870))
+    {
+        nDuration *= 5;
+    }
+
+    //SpeakString("Level: " + IntToString(nLevel) + " Ranks: " + IntToString(nRanks));
+
+    if(nPerform >= 100 && nLevel >= 40)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 48;
+        nAC = 7;
+        nSkill = 19;
+    }
+    else if(nPerform >= 95 && nLevel >= 38)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 46;
+        nAC = 6;
+        nSkill = 18;
+    }
+    else if(nPerform >= 90 && nLevel >= 36)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 44;
+        nAC = 6;
+        nSkill = 17;
+    }
+    else if(nPerform >= 85 && nLevel >= 34)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 42;
+        nAC = 6;
+        nSkill = 16;
+    }
+    else if(nPerform >= 80 && nLevel >= 32)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 40;
+        nAC = 6;
+        nSkill = 15;
+    }
+    else if(nPerform >= 75 && nLevel >= 30)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 38;
+        nAC = 6;
+        nSkill = 14;
+    }
+    else if(nPerform >= 70 && nLevel >= 28)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 36;
+        nAC = 5;
+        nSkill = 13;
+    }
+    else if(nPerform >= 65 && nLevel >= 26)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 34;
+        nAC = 5;
+        nSkill = 12;
+    }
+    else if(nPerform >= 60 && nLevel >= 24)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 32;
+        nAC = 5;
+        nSkill = 11;
+    }
+    else if(nPerform >= 55 && nLevel >= 22)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 30;
+        nAC = 5;
+        nSkill = 9;
+    }
+    else if(nPerform >= 50 && nLevel >= 20)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 28;
+        nAC = 5;
+        nSkill = 8;
+    }
+    else if(nPerform >= 45 && nLevel >= 19)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 26;
+        nAC = 5;
+        nSkill = 7;
+    }
+    else if(nPerform >= 40 && nLevel >= 18)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 24;
+        nAC = 5;
+        nSkill = 6;
+    }
+    else if(nPerform >= 35 && nLevel >= 17)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 22;
+        nAC = 5;
+        nSkill = 5;
+    }
+    else if(nPerform >= 30 && nLevel >= 16)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 20;
+        nAC = 5;
+        nSkill = 4;
+    }
+    else if(nPerform >= 24 && nLevel >= 15)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 2;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 16;
+        nAC = 4;
+        nSkill = 3;
+    }
+    else if(nPerform >= 21 && nLevel >= 14)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 16;
+        nAC = 3;
+        nSkill = 2;
+    }
+    else if(nPerform >= 18 && nLevel >= 11)
+    {
+        nAttack = 2;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 8;
+        nAC = 2;
+        nSkill = 2;
+    }
+    else if(nPerform >= 15 && nLevel >= 8)
+    {
+        nAttack = 2;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 8;
+        nAC = 0;
+        nSkill = 1;
+    }
+    else if(nPerform >= 12 && nLevel >= 6)
+    {
+        nAttack = 1;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 1;
+    }
+    else if(nPerform >= 9 && nLevel >= 3)
+    {
+        nAttack = 1;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 0;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 0;
+    }
+    else if(nPerform >= 6 && nLevel >= 2)
+    {
+        nAttack = 1;
+        nDamage = 1;
+        nWill = 1;
+        nFort = 0;
+        nReflex = 0;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 0;
+    }
+    else if(nPerform >= 3 && nLevel >= 1)
+    {
+        nAttack = 1;
+        nDamage = 1;
+        nWill = 0;
+        nFort = 0;
+        nReflex = 0;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 0;
+    }
+
+    //If the bard has Extra Music and is at least 12lvl, give a small random bonus to this song
+    if (nLevel >= 12 && GetHasFeat(FEAT_EXTRA_MUSIC, OBJECT_SELF) )
+    {
+    switch(d10())
+        {
+        case 1: nAttack = nAttack + 1;break;
+        case 2: nDamage = nDamage + 1;break;
+        case 3: nWill = nWill + 1;break;
+        case 4: nFort = nFort + 1;break;
+        case 5: nReflex = nReflex + 1;break;
+        case 6: nAC = nAC + 1;break;
+        case 7: nSkill = nSkill + 1;break;
+        case 8: nWill = nWill + 2;break;
+        case 9: nFort = nFort + 2;break;
+        case 10: nReflex = nReflex + 2;break;
+        }
+    }
+    //End of Extra Music bonus
+
+
+    effect eVis = EffectVisualEffect(VFX_DUR_BARD_SONG);
+
+    eAttack = EffectAttackIncrease(nAttack);
+    eDamage = EffectDamageIncrease(nDamage, DAMAGE_TYPE_BLUDGEONING);
+    effect eLink = EffectLinkEffects(eAttack, eDamage);
+
+    if(nWill > 0)
+    {
+        eWill = EffectSavingThrowIncrease(SAVING_THROW_WILL, nWill);
+        eLink = EffectLinkEffects(eLink, eWill);
+    }
+    if(nFort > 0)
+    {
+        eFort = EffectSavingThrowIncrease(SAVING_THROW_FORT, nFort);
+        eLink = EffectLinkEffects(eLink, eFort);
+    }
+    if(nReflex > 0)
+    {
+        eReflex = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nReflex);
+        eLink = EffectLinkEffects(eLink, eReflex);
+    }
+    if(nHP > 0)
+    {
+        //SpeakString("HP Bonus " + IntToString(nHP));
+        eHP = EffectTemporaryHitpoints(nHP);
+//        eLink = EffectLinkEffects(eLink, eHP);
+    }
+    if(nAC > 0)
+    {
+        eAC = EffectACIncrease(nAC, AC_DODGE_BONUS);
+        eLink = EffectLinkEffects(eLink, eAC);
+    }
+    if(nSkill > 0)
+    {
+        eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, nSkill);
+        eLink = EffectLinkEffects(eLink, eSkill);
+    }
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_SONIC);
+    effect eFNF = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));
+
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+
+    eHP = ExtraordinaryEffect(eHP);
+    eLink = ExtraordinaryEffect(eLink);
+
+    while(GetIsObjectValid(oTarget))
+    {
+        if(!GetHasFeatEffect(FEAT_BARD_SONGS, oTarget) && !GetHasSpellEffect(GetSpellId(),oTarget))
+        {
+             // * GZ Oct 2003: If we are silenced, we can not benefit from bard song
+             if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
+             {
+                if(oTarget == OBJECT_SELF)
+                {
+                    effect eLinkBard = EffectLinkEffects(eLink, eVis);
+                    eLinkBard = ExtraordinaryEffect(eLinkBard);
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLinkBard, oTarget, RoundsToSeconds(nDuration));
+                    if (nHP > 0)
+                    {
+                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration));
+                    }
+                }
+                else if(GetIsFriend(oTarget))
+                {
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget);
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
+                    if (nHP > 0)
+                    {
+                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration));
+                    }
+                }
+            }
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    }
+}
+
diff --git a/_removed/nw_s2_familiar.ncs b/_removed/nw_s2_familiar.ncs
new file mode 100644
index 0000000..f576cb1
Binary files /dev/null and b/_removed/nw_s2_familiar.ncs differ
diff --git a/_removed/nw_s2_familiar.nss b/_removed/nw_s2_familiar.nss
new file mode 100644
index 0000000..77414a5
--- /dev/null
+++ b/_removed/nw_s2_familiar.nss
@@ -0,0 +1,33 @@
+//::///////////////////////////////////////////////
+//:: Summon Familiar
+//:: NW_S2_Familiar
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    This spell summons an Arcane casters familiar
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Sept 27, 2001
+//:: Modified: 69MEH69 Sep2005
+//:://////////////////////////////////////////////
+#include "69_hench_lib"
+void main()
+{
+    if(!GetIsPC(OBJECT_SELF))
+    {
+      HenchSummonCreature69(OBJECT_SELF);
+      return;
+    }
+    //Yep thats it
+    SummonFamiliar();
+
+    //If the familiar has lockpicking higher than 10, set it to 10
+    object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR);
+    if (GetSkillRank(SKILL_OPEN_LOCK, oFamiliar, TRUE) > 10)
+    {
+        effect eSkillNerf = EffectSkillDecrease(SKILL_OPEN_LOCK, GetSkillRank(SKILL_OPEN_LOCK, oFamiliar, TRUE)-10);
+        ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eSkillNerf), oFamiliar);
+    }
+
+}
diff --git a/_removed/nw_s2_layonhand.ncs b/_removed/nw_s2_layonhand.ncs
new file mode 100644
index 0000000..bd6aabc
Binary files /dev/null and b/_removed/nw_s2_layonhand.ncs differ
diff --git a/_removed/nw_s2_layonhand.nss b/_removed/nw_s2_layonhand.nss
new file mode 100644
index 0000000..ed99be4
--- /dev/null
+++ b/_removed/nw_s2_layonhand.nss
@@ -0,0 +1,75 @@
+//::///////////////////////////////////////////////
+//:: Lay_On_Hands
+//:: NW_S2_LayOnHand.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    The Paladin is able to heal his Chr Bonus times
+    his level.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Aug 15, 2001
+//:: Modified 69MEH69 JUL2003
+//:://////////////////////////////////////////////
+#include "69_hench_lib"
+#include "NW_I0_SPELLS"
+void main()
+{
+    //Declare major variables
+    object oTarget = GetSpellTargetObject();
+    int nChr = GetAbilityModifier(ABILITY_CHARISMA);
+    if (nChr < 0)
+    {
+        nChr = 0;
+    }
+    int nLevel = GetLevelByClass(CLASS_TYPE_PALADIN);
+    //Caluclate the amount to heal
+    int nHeal = nLevel * nChr;
+    if(nHeal <= 0)
+    {
+        nHeal = 1;
+    }
+    effect eHeal = EffectHeal(nHeal);
+    effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M);
+    effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
+    effect eDam;
+    int nTouch;
+    string sTag = GetTag(oTarget);
+    object oArea = GetArea(oTarget);
+    int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
+    //Check if the target is an undead
+    if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS));
+        //Make a ranged touch attack
+        nTouch = TouchAttackMelee(oTarget);
+        if(nTouch > 0)
+        {
+            if(nTouch == 2)
+            {
+                nHeal *= 2;
+            }
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS));
+            eDam = EffectDamage(nHeal, DAMAGE_TYPE_DIVINE);
+            //Apply the VFX impact and effects
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
+        }
+    }
+    else
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS, FALSE));
+        //Apply the VFX impact and effects
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+        if(GetIsHenchmanDying(oTarget))
+        {
+          SetLocalInt(oArea, "nCHP" +sTag, nCHP + nHeal);
+        }
+    }
+
+}
+
diff --git a/_removed/nw_s2_turndead.ncs b/_removed/nw_s2_turndead.ncs
new file mode 100644
index 0000000..e878efa
Binary files /dev/null and b/_removed/nw_s2_turndead.ncs differ
diff --git a/_removed/nw_s2_turndead.nss b/_removed/nw_s2_turndead.nss
new file mode 100644
index 0000000..68d22e6
--- /dev/null
+++ b/_removed/nw_s2_turndead.nss
@@ -0,0 +1,268 @@
+//::///////////////////////////////////////////////
+//:: Turn Undead
+//:: NW_S2_TurnDead
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Checks domain powers and class to determine
+    the proper turning abilities of the casting
+    character.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Nov 2, 2001
+//:: Updated On: Jul 15, 2003 - Georg Zoeller
+//:://////////////////////////////////////////////
+//:: MODIFIED MARCH 5 2003 for Blackguards
+//:: MODIFIED JULY 24 2003 for Planar Turning to include turn resistance hd
+/*
+Patch 1.70, by Shadooow
+
+- takes into account turn resistance of player character (but only from itemproperty)
+*/
+
+int GetPCTurnResistance(object oPC);
+
+void main()
+{
+    int nClericLevel = GetLevelByClass(CLASS_TYPE_CLERIC);
+    int nPaladinLevel = GetLevelByClass(CLASS_TYPE_PALADIN);
+    int nBlackguardlevel = GetLevelByClass(CLASS_TYPE_BLACKGUARD);
+    int nTotalLevel =  GetHitDice(OBJECT_SELF);
+
+    int nTurnLevel = nClericLevel;
+    int nClassLevel = nClericLevel;
+
+    // GZ: Since paladin levels stack when turning, blackguard levels should stack as well
+    // GZ: but not with the paladin levels (thus else if).
+    if((nBlackguardlevel - 2) > 0 && (nBlackguardlevel > nPaladinLevel))
+    {
+        nClassLevel += (nBlackguardlevel - 2);
+        nTurnLevel  += (nBlackguardlevel - 2);
+    }
+    else if((nPaladinLevel - 2) > 0)
+    {
+        nClassLevel += (nPaladinLevel -2);
+        nTurnLevel  += (nPaladinLevel - 2);
+    }
+
+    //Flags for bonus turning types
+    int nElemental = GetHasFeat(FEAT_AIR_DOMAIN_POWER) + GetHasFeat(FEAT_EARTH_DOMAIN_POWER) + GetHasFeat(FEAT_FIRE_DOMAIN_POWER) + GetHasFeat(FEAT_WATER_DOMAIN_POWER);
+    int nVermin = GetHasFeat(FEAT_PLANT_DOMAIN_POWER);// + GetHasFeat(FEAT_ANIMAL_COMPANION);
+    int nConstructs = GetHasFeat(FEAT_DESTRUCTION_DOMAIN_POWER);
+    int nGoodOrEvilDomain =  GetHasFeat(FEAT_GOOD_DOMAIN_POWER) + GetHasFeat(FEAT_EVIL_DOMAIN_POWER);
+    int nPlanar = GetHasFeat(854);
+
+    //Flag for improved turning ability
+    int nSun = GetHasFeat(FEAT_SUN_DOMAIN_POWER);
+
+    //Make a turning check roll, modify if have the Sun Domain
+    int nChrMod = GetAbilityModifier(ABILITY_CHARISMA);
+    int nTurnCheck = d20() + nChrMod;              //The roll to apply to the max HD of undead that can be turned --> nTurnLevel
+    int nTurnHD = d6(2) + nChrMod + nClassLevel;   //The number of HD of undead that can be turned.
+
+    if(nSun == TRUE)
+    {
+        nTurnCheck += d4();
+        nTurnHD += d6();
+    }
+    //Determine the maximum HD of the undead that can be turned.
+    if(nTurnCheck <= 0)
+    {
+        nTurnLevel -= 4;
+    }
+    else if(nTurnCheck >= 1 && nTurnCheck <= 3)
+    {
+        nTurnLevel -= 3;
+    }
+    else if(nTurnCheck >= 4 && nTurnCheck <= 6)
+    {
+        nTurnLevel -= 2;
+    }
+    else if(nTurnCheck >= 7 && nTurnCheck <= 9)
+    {
+        nTurnLevel -= 1;
+    }
+    else if(nTurnCheck >= 10 && nTurnCheck <= 12)
+    {
+        //Stays the same
+    }
+    else if(nTurnCheck >= 13 && nTurnCheck <= 15)
+    {
+        nTurnLevel += 1;
+    }
+    else if(nTurnCheck >= 16 && nTurnCheck <= 18)
+    {
+        nTurnLevel += 2;
+    }
+    else if(nTurnCheck >= 19 && nTurnCheck <= 21)
+    {
+        nTurnLevel += 3;
+    }
+    else if(nTurnCheck >= 22)
+    {
+        nTurnLevel += 4;
+    }
+
+    //Gets all creatures in a 20m radius around the caster and turns them or not.  If the creatures
+    //HD are 1/2 or less of the nClassLevel then the creature is destroyed.
+    int nCnt = 1;
+    int nHD, nRacial, nHDCount, bValid, nDamage;
+    nHDCount = 0;
+    effect eVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
+    effect eVisTurn = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
+    effect eDamage;
+    effect eTurned = EffectTurned();
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eLink = EffectLinkEffects(eVisTurn, eTurned);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    effect eDeath = SupernaturalEffect(EffectDeath(TRUE));
+
+    effect eImpactVis = EffectVisualEffect(VFX_FNF_LOS_HOLY_30);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpactVis, GetLocation(OBJECT_SELF));
+
+    //Get nearest enemy within 20m (60ft)
+    //Why are you using GetNearest instead of GetFirstObjectInShape
+    object oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE , OBJECT_SELF, nCnt,CREATURE_TYPE_PERCEPTION , PERCEPTION_SEEN);
+
+    while(GetIsObjectValid(oTarget) && nHDCount < nTurnHD && GetDistanceToObject(oTarget) <= 20.0)
+    {
+        if(!GetIsFriend(oTarget))
+        {
+            nRacial = GetRacialType(oTarget);
+
+            if (nRacial == RACIAL_TYPE_OUTSIDER )
+            {
+                if (nPlanar)
+                {
+                     //Planar turning decreases spell resistance against turning by 1/2
+                     nHD = GetHitDice(oTarget) + (GetSpellResistance(oTarget) /2) + GetTurnResistanceHD(oTarget);
+                }
+                else
+                {
+                    nHD = GetHitDice(oTarget) + (GetSpellResistance(oTarget) + GetTurnResistanceHD(oTarget) );
+                }
+            }
+            else //(full turn resistance)
+            {
+                  nHD = GetHitDice(oTarget) + GetTurnResistanceHD(oTarget);
+            }
+            //1.70 by Shadooow: special workaround for player characters wearing custom items with turn resistance and shifter in spectre form
+            if(GetIsPC(oTarget) && !GetIsDMPossessed(oTarget) && !GetIsPossessedFamiliar(oTarget))
+            {
+                nHD+= GetPCTurnResistance(oTarget);
+            }
+
+            if(nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount))
+            {
+                //Check the various domain turning types
+                if(nRacial == RACIAL_TYPE_UNDEAD)
+                {
+                    bValid = TRUE;
+                }
+                else if (nRacial == RACIAL_TYPE_VERMIN && nVermin > 0)
+                {
+                    bValid = TRUE;
+                }
+                else if (nRacial == RACIAL_TYPE_ELEMENTAL && nElemental > 0)
+                {
+                    bValid = TRUE;
+                }
+                else if (nRacial == RACIAL_TYPE_CONSTRUCT && nConstructs > 0)
+                {
+                    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_TURN_UNDEAD));
+                    nDamage = d3(nTurnLevel);
+                    eDamage = EffectDamage(nDamage, DAMAGE_TYPE_MAGICAL);
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+                    DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget));
+                    nHDCount += nHD;
+                }
+                else if (nRacial == RACIAL_TYPE_OUTSIDER && (nGoodOrEvilDomain+nPlanar > 0) )
+                {
+                    bValid = TRUE;
+                }
+                // * if wearing gauntlets of the lich,then can be turned
+                else if (GetIsObjectValid(GetItemPossessedBy(oTarget, "x2_gauntletlich")) == TRUE)
+                {
+                    if (GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS)) == "x2_gauntletlich")
+                    {
+                        bValid = TRUE;
+                    }
+                }
+
+                //Apply results of the turn
+                if( bValid == TRUE)
+                {
+
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+
+                    if (nPlanar>0 && nRacial == RACIAL_TYPE_OUTSIDER)
+                    {
+                        effect ePlane = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
+                        ApplyEffectToObject(DURATION_TYPE_INSTANT, ePlane, oTarget);
+                    }
+                    //if(IntToFloat(nClassLevel)/2.0 >= IntToFloat(nHD))
+                    //{
+
+                    if((nClassLevel/2) >= nHD)
+                    {
+                        if (nPlanar>0 && nRacial == RACIAL_TYPE_OUTSIDER)
+                        {
+                            effect ePlane2 = EffectVisualEffect(VFX_IMP_UNSUMMON);
+                            ApplyEffectToObject(DURATION_TYPE_INSTANT, ePlane2, oTarget);
+                        }
+
+                        effect ePlane2 = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
+
+                        //Fire cast spell at event for the specified target
+                        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_TURN_UNDEAD));
+                        //Destroy the target
+                        DelayCommand(0.1f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget));
+                    }
+                    else
+                    {
+                        //Turn the target
+                        //Fire cast spell at event for the specified target
+                        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_TURN_UNDEAD));
+                        AssignCommand(oTarget, ActionMoveAwayFromObject(OBJECT_SELF, TRUE));
+                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nClassLevel + 5));
+                    }
+                    nHDCount = nHDCount + nHD;
+                }
+            }
+            bValid = FALSE;
+        }
+        nCnt++;
+        oTarget = GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE, OBJECT_SELF, nCnt,CREATURE_TYPE_PERCEPTION , PERCEPTION_SEEN);
+    }
+}
+
+int GetPCTurnResistance(object oPC)
+{
+ if(!GetIsPC(oPC) || GetIsDMPossessed(oPC) || GetIsPossessedFamiliar(oPC))
+ {
+ return 0;//in these cases the default function works fine
+ }
+int nTurnResistance;
+object oItem;
+int nSlot;
+itemproperty ip;
+ for(;nSlot < NUM_INVENTORY_SLOTS;nSlot++)
+ {
+ oItem = GetItemInSlot(nSlot,oPC);
+  if(GetIsObjectValid(oItem))
+  {
+  ip = GetFirstItemProperty(oItem);
+   while(GetIsItemPropertyValid(ip))
+   {
+    if(GetItemPropertyType(ip) == ITEM_PROPERTY_TURN_RESISTANCE)
+    {
+    nTurnResistance+= GetItemPropertyCostTableValue(ip);//turn resistance stacks even on one item
+    }
+   ip = GetNextItemProperty(oItem);
+   }
+  }
+ }
+return nTurnResistance;
+}
diff --git a/_removed/nw_s2_wildshape.ncs b/_removed/nw_s2_wildshape.ncs
new file mode 100644
index 0000000..64e6981
Binary files /dev/null and b/_removed/nw_s2_wildshape.ncs differ
diff --git a/_removed/nw_s2_wildshape.nss b/_removed/nw_s2_wildshape.nss
new file mode 100644
index 0000000..62374b7
--- /dev/null
+++ b/_removed/nw_s2_wildshape.nss
@@ -0,0 +1,215 @@
+//::///////////////////////////////////////////////
+//:: Wild Shape
+//:: NW_S2_WildShape
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the Druid to change into animal forms.
+
+    Updated: Sept 30 2003, Georg Z.
+      * Made Armor merge with druid to make forms
+        more useful.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 22, 2002
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 15th-16th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.70
+
+- allowed to merge any custom non-weapon in left hand slot such as flags or
+musical instruments
+- added optional feature to stack ability bonuses from multiple items together
+- added optional feature to merge bracers (when items are allowed to merge)
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "70_inc_itemprop"
+#include "x2_inc_itemprop"
+
+void main()
+{
+    //Declare major variables
+    int nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    effect ePoly;
+    int nPoly;
+    int nMetaMagic = GetMetaMagicFeat();
+    int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+    //Enter Metamagic conditions
+    if (nMetaMagic == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    //Determine Polymorph subradial type
+    if(nSpell == 401)
+    {
+        nPoly = POLYMORPH_TYPE_BROWN_BEAR;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_BROWN_BEAR;
+        }
+    }
+    else if (nSpell == 402)
+    {
+        nPoly = POLYMORPH_TYPE_PANTHER;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_PANTHER;
+        }
+    }
+    else if (nSpell == 403)
+    {
+        nPoly = POLYMORPH_TYPE_WOLF;
+
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_WOLF;
+        }
+    }
+    else if (nSpell == 404)
+    {
+        nPoly = POLYMORPH_TYPE_BOAR;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_BOAR;
+        }
+    }
+    else if (nSpell == 405)
+    {
+        nPoly = POLYMORPH_TYPE_BADGER;
+        if (nDuration >= 12)
+        {
+            nPoly = POLYMORPH_TYPE_DIRE_BADGER;
+        }
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_WILD_SHAPE, FALSE));
+
+    int bWeapon = StringToInt(Get2DAString("polymorph","MergeW",nPoly)) == 1;
+    int bArmor  = StringToInt(Get2DAString("polymorph","MergeA",nPoly)) == 1;
+    int bItems  = StringToInt(Get2DAString("polymorph","MergeI",nPoly)) == 1;
+    int bArms = bItems && GetLocalInt(GetModule(),"71_POLYMORPH_MERGE_ARMS");
+
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oArmsOld = GetItemInSlot(INVENTORY_SLOT_ARMS,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+
+    if (GetIsObjectValid(oShield))
+    {   //1.71: this is now custom content compatible, polymorph will merge custom left-hand only items such as flags
+        if (GetWeaponRanged(oShield) || IPGetIsMeleeWeapon(oShield))
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+    if (bArms)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmsOld);
+    }
+
+    //Apply the VFX impact and effects
+    ePoly = EffectPolymorph(nPoly);
+    if (nSpell == 402 && nDuration >= 12) ePoly = EffectLinkEffects(EffectMovementSpeedIncrease(50), ePoly); //A little extra for druids in dire panther form :)
+     if(nConBonus > 0)
+     {//1.70: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+    ePoly = ExtraordinaryEffect(ePoly);
+
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePoly, OBJECT_SELF, HoursToSeconds(nDuration));
+
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    if (bWeapon)
+    {
+        IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+    }
+    if (bArmor)
+    {
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+    }
+    if (bItems)
+    {
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+    if (bArms)
+    {
+        IPWildShapeCopyItemProperties(oArmsOld,oArmorNew);
+    }
+    if (GetLocalInt(GetModule(),"71_POLYMORPH_STACK_ABILITY_BONUSES"))
+    {
+        IPWildShapeStackAbilityBonuses(oArmorNew);
+    }
+}
diff --git a/_removed/x0_s0_acidsplash.ncs b/_removed/x0_s0_acidsplash.ncs
new file mode 100644
index 0000000..eed85f5
Binary files /dev/null and b/_removed/x0_s0_acidsplash.ncs differ
diff --git a/_removed/x0_s0_acidsplash.nss b/_removed/x0_s0_acidsplash.nss
new file mode 100644
index 0000000..a638eb7
--- /dev/null
+++ b/_removed/x0_s0_acidsplash.nss
@@ -0,0 +1,60 @@
+//::///////////////////////////////////////////////
+//:: Acid Splash
+//:: [X0_S0_AcidSplash.nss]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+1d3 points of acid damage to one target.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 17 2002
+//:://////////////////////////////////////////////
+
+#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 eVis = EffectVisualEffect(VFX_IMP_ACID_S);
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Make SR Check
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            //Set damage effect
+            //1d3 of additional damage roughly for every 3 caster levels, but no more than 10d3.
+            int cMultiplier = GetCasterLevel(OBJECT_SELF) / 3;
+            if (cMultiplier <= 1) cMultiplier = 1;
+            if (cMultiplier >= 7) cMultiplier = 7;
+            int nDamage =  MaximizeOrEmpower(3, cMultiplier, spell.Meta);
+            effect eBad = EffectDamage(nDamage, DAMAGE_TYPE_ACID);
+            //Apply the VFX impact and damage effect
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eBad, spell.Target);
+        }
+    }
+}
diff --git a/_removed/x0_s0_banishment.ncs b/_removed/x0_s0_banishment.ncs
new file mode 100644
index 0000000..3ba1c89
Binary files /dev/null and b/_removed/x0_s0_banishment.ncs differ
diff --git a/_removed/x0_s0_banishment.nss b/_removed/x0_s0_banishment.nss
new file mode 100644
index 0000000..f7209f5
--- /dev/null
+++ b/_removed/x0_s0_banishment.nss
@@ -0,0 +1,119 @@
+//::///////////////////////////////////////////////
+//:: Banishment
+//:: x0_s0_banishment.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All summoned creatures within 30ft of caster
+    make a save and SR check or be banished
+    + As well any Outsiders being must make a
+    save and SR check or be banished (up to
+    2 HD creatures / level can be banished)
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Oct 22, 2001
+//:://////////////////////////////////////////////
+//:: VFX Pass By: Preston W, On: June 20, 2001
+
+#include "X0_I0_SPELLS"
+#include "x2_inc_spellhook"
+#include "hench_i0_generic"
+
+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
+    object oMaster;
+    effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
+    effect eImpact = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation());
+    int nSpellDC;
+    //Get the first object in the are of effect
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+
+    // * the pool is the number of hit dice of creatures that can be banished
+    int nPool = 2* GetCasterLevel(OBJECT_SELF);
+
+    while(GetIsObjectValid(oTarget))
+    {
+        //does the creature have a master.
+        oMaster = GetMaster(oTarget);
+        if (oMaster == OBJECT_INVALID)
+        {
+            oMaster = OBJECT_SELF;  // TO prevent problems with invalid objects
+                                    // passed into GetAssociate
+        }
+
+        // * BK: Removed the master check, only applys to Dismissal not banishment
+        //Is that master valid and is he an enemy
+       // if(GetIsObjectValid(oMaster) && GetIsEnemy(oMaster))
+        {
+            // * Is the creature a summoned associate
+            // * or is the creature an outsider
+            // * and is there enough points in the pool
+            if(
+               (GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster) == oTarget ||
+               GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) == oTarget ||
+               GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) == oTarget ) ||
+               ((GetRacialType((oTarget)) == RACIAL_TYPE_OUTSIDER)  &&
+               (nPool > 0)) ||
+               GetLocalInt(oTarget, sHenchPseudoSummon))
+            {
+                // * March 2003. Added a check so that 'friendlies' will not be
+                // * unsummoned.
+                if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+                {
+                    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 430));
+                    //Determine correct save
+                    nSpellDC = GetSpellSaveDC();// + 6;
+                    // * Must be enough points in the pool to destroy target
+                    if (nPool >= GetHitDice(oTarget))
+                    // * Make SR and will save checks
+                    if (!MyResistSpell(OBJECT_SELF, oTarget) && !MySavingThrow(SAVING_THROW_WILL, oTarget, nSpellDC))
+                    {
+                         //Apply the VFX and delay the destruction of the summoned monster so
+                         //that the script and VFX can play.
+
+                         nPool = nPool - GetHitDice(oTarget);
+                         ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
+                         if (CanCreatureBeDestroyed(oTarget) == TRUE)
+                         {
+                            //bugfix: Simply destroying the object won't fire it's OnDeath script.
+                            //Which is bad when you have plot-specific things being done in that
+                            //OnDeath script... so lets kill it.
+                            effect eKill = EffectDamage(GetCurrentHitPoints(oTarget));
+                            //just to be extra-sure... :)
+                            effect eDeath = EffectDeath(FALSE, FALSE);
+                            DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eKill, oTarget));
+                            DelayCommand(0.25, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget));
+
+                            DestroyObject(oTarget, 0.3);
+                         }
+                    }
+                } // rep check
+            }
+        }
+        //Get next creature in the shape.
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    }
+}
+
+
diff --git a/_removed/x0_s0_bigby1.ncs b/_removed/x0_s0_bigby1.ncs
new file mode 100644
index 0000000..395a338
Binary files /dev/null and b/_removed/x0_s0_bigby1.ncs differ
diff --git a/_removed/x0_s0_bigby1.nss b/_removed/x0_s0_bigby1.nss
new file mode 100644
index 0000000..219da0a
--- /dev/null
+++ b/_removed/x0_s0_bigby1.nss
@@ -0,0 +1,68 @@
+//::///////////////////////////////////////////////
+//:: Bigby's Interposing Hand
+//:: [x0_s0_bigby1]
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Grants -10 to hit to target for 1 round / level
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: September 7, 2002
+//:://////////////////////////////////////////////
+//:: VFX Pass By:
+
+#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();
+    int nDuration = 5;
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster,
+                                              spell.Id,
+                                              TRUE));
+        //Check for metamagic extend
+        if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+        {
+             nDuration = nDuration * 2;
+        }
+        if (!MyResistSpell(spell.Caster, spell.Target))
+        {
+
+        effect eAC1 = EffectAttackDecrease(5);
+        effect eVis = EffectVisualEffect(VFX_DUR_BIGBYS_INTERPOSING_HAND);
+        effect eLink = EffectLinkEffects(eAC1, eVis);
+
+
+        //Apply the TO HIT PENALTIES bonuses and the VFX impact
+        ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
+                           eLink,
+                           spell.Target,
+                           RoundsToSeconds(nDuration));
+        }
+    }
+}
diff --git a/_removed/x0_s0_bigby2.ncs b/_removed/x0_s0_bigby2.ncs
new file mode 100644
index 0000000..10eb9be
Binary files /dev/null and b/_removed/x0_s0_bigby2.ncs differ
diff --git a/_removed/x0_s0_bigby2.nss b/_removed/x0_s0_bigby2.nss
new file mode 100644
index 0000000..bfa46b8
--- /dev/null
+++ b/_removed/x0_s0_bigby2.nss
@@ -0,0 +1,97 @@
+//::///////////////////////////////////////////////
+//:: Bigby's Forceful Hand
+//:: [x0_s0_bigby2]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    dazed vs strength check (+14 on strength check); Target knocked down.
+    Target dazed down for 1 round per level of caster
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: September 7, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs May 01, 2003
+/*
+Patch 1.71
+
+- disabled self-stacking
+- added duration scaling per game difficulty
+*/
+
+#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();
+
+    //--------------------------------------------------------------------------
+    // This spell no longer stacks. If there is one hand, that's enough
+    //--------------------------------------------------------------------------
+    if (GetHasSpellEffect(spell.Id,spell.Target))
+    {
+        FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE);
+        return;
+    }
+
+    int nDuration = 2;
+    nDuration = GetScaledDuration(nDuration, spell.Target);
+    //Check for metamagic extend
+    if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+    {
+         nDuration = nDuration * 2;
+    }
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        // Apply the impact effect
+        effect eImpact = EffectVisualEffect(VFX_IMP_BIGBYS_FORCEFUL_HAND);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, spell.Target);
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE));
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            int nCasterRoll = d20(1);
+            int nTargetRoll = d20(1) + GetAbilityModifier(ABILITY_STRENGTH, spell.Target) + GetSizeModifier(spell.Target);
+            // * bullrush succesful, knockdown target for duration of spell
+            if (nCasterRoll >= nTargetRoll)
+            {
+                effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
+                effect eKnockdown = EffectDazed();
+                effect eKnockdown2 = EffectKnockdown();
+                effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+                //Link effects
+                effect eLink = EffectLinkEffects(eKnockdown, eDur);
+                eLink = EffectLinkEffects(eLink, eKnockdown2);
+                //Apply the penalty
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, spell.Target, RoundsToSeconds(nDuration));
+                // * Bull Rush succesful
+                FloatingTextStrRefOnCreature(8966,spell.Caster, FALSE);
+            }
+            else
+            {
+                FloatingTextStrRefOnCreature(8967,spell.Caster, FALSE);
+            }
+        }
+    }
+}
diff --git a/_removed/x0_s0_bigby3.ncs b/_removed/x0_s0_bigby3.ncs
new file mode 100644
index 0000000..eb7c0e9
Binary files /dev/null and b/_removed/x0_s0_bigby3.ncs differ
diff --git a/_removed/x0_s0_bigby3.nss b/_removed/x0_s0_bigby3.nss
new file mode 100644
index 0000000..6619d21
--- /dev/null
+++ b/_removed/x0_s0_bigby3.nss
@@ -0,0 +1,136 @@
+//::///////////////////////////////////////////////
+//:: Bigby's Grasping Hand
+//:: [x0_s0_bigby3]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    make an attack roll. If succesful target is held for 1 round/level
+
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: September 7, 2002
+//:://////////////////////////////////////////////
+//:: VFX Pass By:
+/*
+Patch 1.71
+
+- stunning visual effect removed if the target is mind/paralyse immune
+- added duration scaling per game difficulty
+- disabled self-stacking
+- incorporeal creatures won't be grappled anymore
+*/
+
+#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();
+
+    //--------------------------------------------------------------------------
+    // This spell no longer stacks. If there is one hand, that's enough
+    //--------------------------------------------------------------------------
+    if (GetHasSpellEffect(spell.Id,spell.Target))
+    {
+        FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE);
+        return;
+    }
+
+    int nDuration = 3;
+    nDuration = GetScaledDuration(nDuration, spell.Target);
+    effect eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
+
+    //Check for metamagic extend
+    if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+    {
+         nDuration = nDuration * 2;
+    }
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE));
+
+        // Check spell resistance
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            // Check caster ability vs. target's AC
+
+            int nCasterModifier = GetCasterAbilityModifier(spell.Caster);
+            int nCasterRoll = d20(1)
+                + nCasterModifier
+                + spell.Level/2 + 10 + -1;
+
+            int nTargetRoll = GetAC(spell.Target) + d20(1);
+
+            // * grapple HIT succesful,
+            if (nCasterRoll >= nTargetRoll)
+            {
+                // * now must make a GRAPPLE check to
+                // * hold target for duration of spell
+                // * check caster ability vs. target's size & strength
+                nCasterRoll = d20(1) + nCasterModifier
+                    + spell.Level;
+
+                nTargetRoll = d20(1)
+                             + GetBaseAttackBonus(spell.Target)
+                             + GetSizeModifier(spell.Target)
+                             + GetAbilityModifier(ABILITY_STRENGTH, spell.Target) + GetSkillRank(SKILL_SPELLCRAFT, spell.Target)/2 + 10;
+                                                  //1.71: incorporeal creatures cannot be grappled
+                if (nCasterRoll >= nTargetRoll && !GetCreatureFlag(spell.Target, CREATURE_VAR_IS_INCORPOREAL))
+                {
+                    // Hold the target paralyzed
+                    effect eKnockdown = EffectParalyze();
+
+                    // creatures immune to paralzation are still prevented from moving
+                    if (GetIsImmune(spell.Target, IMMUNITY_TYPE_PARALYSIS, spell.Caster) ||
+                        GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster))
+                    {
+                        eKnockdown = EffectCutsceneImmobilize();
+                    }
+                    else
+                    {
+                        eKnockdown = EffectLinkEffects(eVis, eKnockdown);
+                    }
+
+                    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+                    effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND);
+                    effect eLink = EffectLinkEffects(eKnockdown, eDur);
+                    eLink = EffectLinkEffects(eHand, eLink);
+
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
+                                        eLink, spell.Target,
+                                        RoundsToSeconds(nDuration));
+
+//                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
+//                                        eVis, oTarget,RoundsToSeconds(nDuration));
+                    FloatingTextStrRefOnCreature(2478, spell.Caster);
+                }
+                else
+                {
+                    FloatingTextStrRefOnCreature(83309, spell.Caster);
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/x0_s0_bigby4.ncs b/_removed/x0_s0_bigby4.ncs
new file mode 100644
index 0000000..5643b66
Binary files /dev/null and b/_removed/x0_s0_bigby4.ncs differ
diff --git a/_removed/x0_s0_bigby4.nss b/_removed/x0_s0_bigby4.nss
new file mode 100644
index 0000000..a948e46
--- /dev/null
+++ b/_removed/x0_s0_bigby4.nss
@@ -0,0 +1,119 @@
+//::///////////////////////////////////////////////
+//:: Bigby's Clenched Fist
+//:: [x0_s0_bigby4]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Does an attack EACH ROUND for 1 round/level.
+    If the attack hits does
+     1d8 +12 points of damage
+
+    Any creature struck must make a FORT save or
+    be stunned for one round.
+
+    GZ, Oct 15 2003:
+    Changed how this spell works by adding duration
+    tracking based on the VFX added to the character.
+    Makes the spell dispellable and solves some other
+    issues with wrong spell DCs, checks, etc.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: September 7, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Georg Zoeller October 15, 2003
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "x2_i0_spells"
+
+void RunHandImpact(object oTarget, object oCaster, int nSpellID, int nMeta)
+{
+    //--------------------------------------------------------------------------
+    // Check if the spell has expired (check also removes effects)
+    //--------------------------------------------------------------------------
+    if (GZGetDelayedSpellEffectsExpired(nSpellID,oTarget,oCaster))
+    {
+        return;
+    }
+
+    int nCasterModifiers = GetCasterAbilityModifier(oCaster) + GetCasterLevel(oCaster)/2;
+    int nCasterRoll = d20(1) + nCasterModifiers + 11 + -1;
+    int nTargetRoll = GetAC(oTarget);
+    if (nCasterRoll >= nTargetRoll)
+    {
+       int nDC = GetLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (nSpellID));
+
+       int nDam  = MaximizeOrEmpower(8, 1, nMeta, 6);
+       effect eDam = EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING);
+       effect eVis = EffectVisualEffect(VFX_IMP_ACID_L);
+
+       ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
+       ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+
+       if (!MySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SPELL, oCaster))
+       {
+           ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, RoundsToSeconds(1));
+       }
+
+      DelayCommand(6.0,RunHandImpact(oTarget,oCaster,nSpellID,nMeta));
+   }
+}
+
+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
+
+    spellsDeclareMajorVariables();
+
+    //--------------------------------------------------------------------------
+    // This spell no longer stacks. If there is one hand, that's enough
+    //--------------------------------------------------------------------------
+    if (GetHasSpellEffect(spell.Id,spell.Target) ||  GetHasSpellEffect(SPELL_BIGBYS_CRUSHING_HAND,spell.Target))
+    {
+        FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE);
+        return;
+    }
+
+    int nDuration = 10;
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+         nDuration = nDuration * 2;
+    }
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE));
+        int nResult = MyResistSpell(spell.Caster, spell.Target);
+
+        if(nResult  == 0)
+        {
+            int nCasterModifier = GetCasterAbilityModifier(spell.Caster);
+            effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_CLENCHED_FIST);
+            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHand, spell.Target, RoundsToSeconds(nDuration));
+
+            //----------------------------------------------------------
+            // GZ: 2003-Oct-15
+            // Save the current save DC on the character because
+            // GetSpellSaveDC won't work when delayed
+            //----------------------------------------------------------
+            SetLocalInt(spell.Target,"XP2_L_SPELL_SAVE_DC_" + IntToString (spell.Id), spell.DC);
+
+            RunHandImpact(spell.Target,spell.Caster, spell.Id, spell.Meta);
+        }
+    }
+}
diff --git a/_removed/x0_s0_bigby5.ncs b/_removed/x0_s0_bigby5.ncs
new file mode 100644
index 0000000..fd11e5e
Binary files /dev/null and b/_removed/x0_s0_bigby5.ncs differ
diff --git a/_removed/x0_s0_bigby5.nss b/_removed/x0_s0_bigby5.nss
new file mode 100644
index 0000000..fd44890
--- /dev/null
+++ b/_removed/x0_s0_bigby5.nss
@@ -0,0 +1,146 @@
+//::///////////////////////////////////////////////
+//:: Bigby's Crushing Hand
+//:: [x0_s0_bigby5]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Similar to Bigby's Grasping Hand.
+    If Grapple succesful then will hold the opponent and do 2d6 + 12 points
+    of damage EACH round for 1 round/level
+
+
+   // Mark B's famous advice:
+   // Note:  if the target is dead during one of these second-long heartbeats,
+   // the DelayCommand doesn't get run again, and the whole package goes away.
+   // Do NOT attempt to put more than two parameters on the delay command.  They
+   // may all end up on the stack, and that's all bad.  60 x 2 = 120.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: September 7, 2002
+//:://////////////////////////////////////////////
+//:: VFX Pass By:
+/*
+Patch 1.71
+
+- added duration scaling per game difficulty
+- incorporeal creatures won't be grappled anymore
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "x2_i0_spells"
+
+void RunHandImpact(object oTarget, object oCaster, int nSpellID, int nMeta)
+{
+
+    //--------------------------------------------------------------------------
+    // Check if the spell has expired (check also removes effects)
+    //--------------------------------------------------------------------------
+    if (GZGetDelayedSpellEffectsExpired(nSpellID,oTarget,oCaster))
+    {
+        return;
+    }
+
+    int nDam = MaximizeOrEmpower(6,2,nMeta, 6);
+    effect eDam = EffectDamage(nDam, DAMAGE_TYPE_BLUDGEONING);
+    effect eVis = EffectVisualEffect(VFX_IMP_ACID_L);
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+    DelayCommand(6.0,RunHandImpact(oTarget,oCaster,nSpellID,nMeta));
+}
+
+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
+
+    spellsDeclareMajorVariables();
+
+    //--------------------------------------------------------------------------
+    // This spell no longer stacks. If there is one hand, that's enough
+    //--------------------------------------------------------------------------
+    if (GetHasSpellEffect(spell.Id,spell.Target) ||  GetHasSpellEffect(SPELL_BIGBYS_CLENCHED_FIST,spell.Target))
+    {
+        FloatingTextStrRefOnCreature(100775,spell.Caster,FALSE);
+        return;
+    }
+
+    int nDuration = 4;
+    nDuration = GetScaledDuration(nDuration, spell.Target);
+
+    //Check for metamagic extend
+    if (spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+    {
+         nDuration = nDuration * 2;
+    }
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, TRUE));
+
+        //SR
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            int nCasterModifier = GetCasterAbilityModifier(spell.Caster);
+            int nCasterRoll = d20(1)
+                + nCasterModifier
+                + GetCasterLevel(spell.Caster);
+            int nTargetRoll = GetAC(spell.Target);
+
+            // * grapple HIT succesful,
+            if (nCasterRoll >= nTargetRoll)
+            {
+                // * now must make a GRAPPLE check
+                // * hold target for duration of spell
+
+                nCasterRoll = d20(1) + nCasterModifier
+                    + GetCasterLevel(spell.Caster);
+
+                nTargetRoll = d20(1)
+                             + GetBaseAttackBonus(spell.Target)
+                             + GetSizeModifier(spell.Target)
+                             + GetAbilityModifier(ABILITY_STRENGTH, spell.Target) + GetSkillRank(SKILL_SPELLCRAFT, spell.Target)/2 + 10;
+                                                  //1.71: incorporeal creatures cannot be grappled
+                if (nCasterRoll >= nTargetRoll && !GetCreatureFlag(spell.Target, CREATURE_VAR_IS_INCORPOREAL))
+                {
+                    effect eKnockdown = EffectParalyze();
+
+                    // creatures immune to paralzation are still prevented from moving
+                    if (GetIsImmune(spell.Target, IMMUNITY_TYPE_PARALYSIS, spell.Caster) ||
+                        GetIsImmune(spell.Target, IMMUNITY_TYPE_MIND_SPELLS, spell.Caster))
+                    {
+                        eKnockdown = EffectCutsceneImmobilize();
+                    }
+
+                    effect eHand = EffectVisualEffect(VFX_DUR_BIGBYS_CRUSHING_HAND);
+                    effect eLink = EffectLinkEffects(eKnockdown, eHand);
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
+                                        eLink, spell.Target,
+                                        RoundsToSeconds(nDuration));
+
+                    RunHandImpact(spell.Target, spell.Caster, spell.Id, spell.Meta);
+                    FloatingTextStrRefOnCreature(2478, spell.Caster);
+
+                }
+                else
+                {
+                    FloatingTextStrRefOnCreature(83309, spell.Caster);
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/x0_s0_clight.ncs b/_removed/x0_s0_clight.ncs
new file mode 100644
index 0000000..bd6d08e
Binary files /dev/null and b/_removed/x0_s0_clight.ncs differ
diff --git a/_removed/x0_s0_clight.nss b/_removed/x0_s0_clight.nss
new file mode 100644
index 0000000..771326b
--- /dev/null
+++ b/_removed/x0_s0_clight.nss
@@ -0,0 +1,80 @@
+//::///////////////////////////////////////////////
+//:: Continual Flame
+//:: x0_s0_clight.nss
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+ Permanent Light spell
+
+    XP2
+    If cast on an item, item will get permanently
+    get the property "light".
+    Previously existing permanent light properties
+    will be removed!
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent Knowles
+//:: Created On: July 18, 2002
+//:://////////////////////////////////////////////
+//:: VFX Pass By:
+//:: Added XP2 cast on item code: Georg Z, 2003-06-05
+//:://////////////////////////////////////////////
+/*
+Patch 1.71
+
+- any item that this spell is cast at is now marked as stolen to disable the cast/sell exploit
+- spell can dispell the shadowblend effect
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run
+    // this spell.
+    if (!X2PreSpellCastCode())
+    {
+        return;
+    }
+    int nDuration;
+    int nMetaMagic;
+
+    spellsDeclareMajorVariables();
+
+    // Handle spell cast on item....
+    if (GetObjectType(spell.Target) == OBJECT_TYPE_ITEM && ! CIGetIsCraftFeatBaseItem(spell.Target))
+    {
+        // Do not allow casting on not equippable items
+        if (!IPGetIsItemEquipable(spell.Target))
+        {
+            // Item must be equipable...
+            FloatingTextStrRefOnCreature(83326,spell.Caster);
+            return;
+        }
+        itemproperty ip = ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_BRIGHT, IP_CONST_LIGHTCOLOR_WHITE);
+        IPSafeAddItemProperty(spell.Target, ip, 0.0,X2_IP_ADDPROP_POLICY_REPLACE_EXISTING,TRUE,TRUE);
+        //casting this spell on every crap and then sell it is very well known exploit
+        //SetStolenFlag(spell.Target, TRUE);//sets item to be stolen, thus harder to sell  //no need anymore - the value of light item property has been set to zero
+    }
+    else
+    {
+        if(GetHasSpellEffect(757, spell.Target))
+        {
+            //Continual light effectively dispells shadowblend effect
+            RemoveEffectsFromSpell(spell.Target, 757);
+        }
+        //Declare major variables
+        effect eVis = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20);
+        effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+        effect eLink = SupernaturalEffect(EffectLinkEffects(eVis, eDur));
+
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+        //Apply the VFX impact and effects
+        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, spell.Target);
+   }
+}
diff --git a/_removed/x0_s0_dirge.ncs b/_removed/x0_s0_dirge.ncs
new file mode 100644
index 0000000..3b277c0
Binary files /dev/null and b/_removed/x0_s0_dirge.ncs differ
diff --git a/_removed/x0_s0_dirge.nss b/_removed/x0_s0_dirge.nss
new file mode 100644
index 0000000..4613125
--- /dev/null
+++ b/_removed/x0_s0_dirge.nss
@@ -0,0 +1,77 @@
+//::///////////////////////////////////////////////
+//:: Dirge
+//:: x0_s0_dirge.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All creatures within the AoE take 2 points of Strength
+    and Dexterity ability score damage.
+    Lasts 1 round/level
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+- aoe signalized wrong spell ID
+- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others,
+thats module-related)
+*/
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+#include "nw_i0_spells"
+
+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 including Area of Effect Object
+    spellsDeclareMajorVariables();
+    //change from AOE_PER_FOGMIND to AOE_MOB_CIRCGOOD
+    effect eAOE = EffectAreaOfEffect(AOE_MOB_CIRCGOOD, "x0_s0_dirgeEN", "x0_s0_dirgeHB", "x0_s0_dirgeEX");
+    effect eVis = EffectVisualEffect(VFX_DUR_AURA_ODD);
+    eAOE = EffectLinkEffects(eAOE, eVis);
+    int nDuration = spell.Level;
+
+//    effect eCaster = EffectVisualEffect(VFX_DUR_BARD_SONG); //unused
+
+    effect eFNF = EffectVisualEffect(VFX_FNF_SOUND_BURST);
+    //Apply the FNF to the spell location
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, spell.Loc);
+
+    effect eImpact = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc);
+
+    //Check Extend metamagic feat.
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+       nDuration = nDuration *2;    //Duration is +100%
+    }
+    //Create an instance of the AOE Object using the Apply Effect function
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAOE, spell.Target, RoundsToSeconds(nDuration));
+    spellsSetupNewAOE("VFX_MOB_CIRCGOOD","x0_s0_dirgehb");
+}
diff --git a/_removed/x0_s0_earthquake.ncs b/_removed/x0_s0_earthquake.ncs
new file mode 100644
index 0000000..ca0beb3
Binary files /dev/null and b/_removed/x0_s0_earthquake.ncs differ
diff --git a/_removed/x0_s0_earthquake.nss b/_removed/x0_s0_earthquake.nss
new file mode 100644
index 0000000..36514a0
--- /dev/null
+++ b/_removed/x0_s0_earthquake.nss
@@ -0,0 +1,93 @@
+//::///////////////////////////////////////////////
+//:: Earthquake
+//:: X0_S0_Earthquake
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+// Ground shakes. 1d6 damage, max 10d6
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 22 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs May 01, 2003
+
+#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();
+    int nCasterLvl = spell.Level;
+    int nDamage;
+    float fDelay;
+    float nSize =  RADIUS_SIZE_COLOSSAL;
+    effect eExplode = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
+    effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
+    effect eDam;
+    effect eShake = EffectVisualEffect(356);
+    //Limit Caster level for the purposes of damage
+    if (nCasterLvl > 20)
+    {
+        nCasterLvl = 20;
+    }
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShake, spell.Caster, RoundsToSeconds(6));
+
+    //Apply epicenter explosion on caster
+    //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, GetLocation(OBJECT_SELF));
+
+
+    //Declare the spell shape, size and the location.  Capture the first target object in the shape.
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, nSize, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    //Cycle through the targets within the spell shape until an invalid object is captured.
+    while (GetIsObjectValid(oTarget))
+    {
+        if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster))
+        {
+            //Fire cast spell at event for the specified target
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id));
+            //Get the distance between the explosion and the target to calculate delay
+            fDelay = GetDistanceBetweenLocations(spell.Loc, GetLocation(oTarget))/20;
+// Earthquake does not allow spell resistance
+//            if (!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
+//            {
+                nDamage = MaximizeOrEmpower(6, nCasterLvl, spell.Meta);
+                //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. (Don't bother for caster)
+                nDamage = GetReflexAdjustedDamage(nDamage, oTarget, spell.DC, SAVING_THROW_TYPE_NONE, spell.Caster);
+                //Set the damage effect
+                eDam = EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING);
+                // * caster can't be affected by the spell
+                if(nDamage > 0)
+                {
+                    // Apply effects to the currently selected target.
+                    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+                    //This visual effect is applied to the target object not the location as above.  This visual effect
+                    //represents the flame that erupts on the target not on the ground.
+                    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                }
+//             }
+        }
+       //Select the next target within the spell shape.
+       oTarget = GetNextObjectInShape(SHAPE_SPHERE, nSize, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    }
+}
diff --git a/_removed/x0_s0_elecjolt.ncs b/_removed/x0_s0_elecjolt.ncs
new file mode 100644
index 0000000..364d130
Binary files /dev/null and b/_removed/x0_s0_elecjolt.ncs differ
diff --git a/_removed/x0_s0_elecjolt.nss b/_removed/x0_s0_elecjolt.nss
new file mode 100644
index 0000000..3cd91c1
--- /dev/null
+++ b/_removed/x0_s0_elecjolt.nss
@@ -0,0 +1,61 @@
+//::///////////////////////////////////////////////
+//:: Electric Jolt
+//:: [x0_s0_ElecJolt.nss]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+1d3 points of electrical damage to one target.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 17 2002
+//:://////////////////////////////////////////////
+
+#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 eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Make SR Check
+        if(!MyResistSpell(spell.Caster, spell.Target))
+        {
+            //Set damage effect
+
+            //1d3 of additional damage roughly for every 3 caster levels, but no more than 10d3.
+            int cMultiplier = GetCasterLevel(OBJECT_SELF) / 3;
+            if (cMultiplier <= 1) cMultiplier = 1;
+            if (cMultiplier >= 7) cMultiplier = 7;
+            int nDamage =  MaximizeOrEmpower(3, cMultiplier, spell.Meta);
+            effect eBad = EffectDamage(nDamage, DAMAGE_TYPE_ELECTRICAL);
+            //Apply the VFX impact and damage effect
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eBad, spell.Target);
+        }
+    }
+}
diff --git a/_removed/x0_s0_ether.ncs b/_removed/x0_s0_ether.ncs
new file mode 100644
index 0000000..124ca02
Binary files /dev/null and b/_removed/x0_s0_ether.ncs differ
diff --git a/_removed/x0_s0_ether.nss b/_removed/x0_s0_ether.nss
new file mode 100644
index 0000000..a1322bd
--- /dev/null
+++ b/_removed/x0_s0_ether.nss
@@ -0,0 +1,57 @@
+//::///////////////////////////////////////////////
+//:: Etherealness
+//:: x0_s0_ether.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Like sanctuary except almost always guaranteed
+    to work.
+    Lasts one turn per level.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+
+#include "70_inc_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 eVis = EffectVisualEffect(VFX_DUR_SANCTUARY);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    effect eSanc = EffectEthereal();
+
+    effect eLink = EffectLinkEffects(eVis, eSanc);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    int nDuration = GetCasterLevel(spell.Caster);
+    //Enter Metamagic conditions
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    //Apply the VFX impact and effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+}
diff --git a/_removed/x0_s0_fleshsto.ncs b/_removed/x0_s0_fleshsto.ncs
new file mode 100644
index 0000000..874f703
Binary files /dev/null and b/_removed/x0_s0_fleshsto.ncs differ
diff --git a/_removed/x0_s0_fleshsto.nss b/_removed/x0_s0_fleshsto.nss
new file mode 100644
index 0000000..487d204
--- /dev/null
+++ b/_removed/x0_s0_fleshsto.nss
@@ -0,0 +1,45 @@
+//::///////////////////////////////////////////////
+//:: Flesh to Stone
+//:: x0_s0_fleshsto
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+//:: The target freezes in place, standing helpless.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent Knowles
+//:: Created On: October 16, 2002
+//:://////////////////////////////////////////////
+
+#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();
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        DoPetrification(spell.Level, spell.Caster, spell.Target, spell.Id, spell.DC+40);
+    }
+}
diff --git a/_removed/x0_s0_inflict.ncs b/_removed/x0_s0_inflict.ncs
new file mode 100644
index 0000000..1bcd80f
Binary files /dev/null and b/_removed/x0_s0_inflict.ncs differ
diff --git a/_removed/x0_s0_inflict.nss b/_removed/x0_s0_inflict.nss
new file mode 100644
index 0000000..e64c32c
--- /dev/null
+++ b/_removed/x0_s0_inflict.nss
@@ -0,0 +1,63 @@
+//::///////////////////////////////////////////////
+//:: [Inflict Wounds]
+//:: [X0_S0_Inflict.nss]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+//:: This script is used by all the inflict spells
+//::
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 2002
+//:: Modified: 69MEH69 JUL2003
+//:://////////////////////////////////////////////
+//:: VFX Pass By:
+#include "X0_I0_SPELLS" // * this is the new spells include for expansion packs
+
+void main()
+{
+    int nSpellID = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    string sTag = GetTag(oTarget);
+    object oArea = GetArea(oTarget);
+    int nCHP = GetLocalInt(oArea, "nCHP" +sTag);
+    int nCure;
+    switch (nSpellID)
+    {
+/*Minor*/     case 431: spellsInflictTouchAttack(1, 0, 1, 246, VFX_IMP_HEALING_G, nSpellID);
+                        nCure = 1;
+                        if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+                        {
+                            SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
+                        }
+                        break;
+/*Light*/     case 432: case 609: spellsInflictTouchAttack(d8(), 5, 8, 246, VFX_IMP_HEALING_G, nSpellID);
+                                  nCure = d8(1);
+                                  if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+                                  {
+                                    SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
+                                  }
+                                  break;
+/*Moderate*/  case 433: case 610: spellsInflictTouchAttack(d8(2), 10, 16, 246, VFX_IMP_HEALING_G, nSpellID);
+                                  nCure = d8(2);
+                                  if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+                                  {
+                                    SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
+                                  }
+                                  break;
+/*Serious*/   case 434: case 611: spellsInflictTouchAttack(d8(3), 15, 24, 246, VFX_IMP_HEALING_G, nSpellID);
+                                  nCure = d8(3);
+                                  if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+                                  {
+                                    SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
+                                  }
+                                  break;
+/*Critical*/  case 435: case 612: spellsInflictTouchAttack(d8(4), 20, 32, 246, VFX_IMP_HEALING_G, nSpellID);
+                                  nCure = d8(4);
+                                  if(GetIsHenchmanDying(oTarget) && GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
+                                  {
+                                    SetLocalInt(oArea, "nCHP" +sTag, nCHP + nCure);
+                                  }
+                                  break;
+
+    }
+}
diff --git a/_removed/x0_s0_missstorm1.ncs b/_removed/x0_s0_missstorm1.ncs
new file mode 100644
index 0000000..558156f
Binary files /dev/null and b/_removed/x0_s0_missstorm1.ncs differ
diff --git a/_removed/x0_s0_missstorm1.nss b/_removed/x0_s0_missstorm1.nss
new file mode 100644
index 0000000..10975a2
--- /dev/null
+++ b/_removed/x0_s0_missstorm1.nss
@@ -0,0 +1,211 @@
+//::///////////////////////////////////////////////
+//:: Isaacs Lesser Missile Storm
+//:: x0_s0_MissStorm1
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+ Up to 10 missiles, each doing 1d6 damage to all
+ targets in area.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 31, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By:
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+//This version of the spell applies all damage as a cumulated single hit instead of spreading it among all the missiles.
+//This has been done because before that the spell used to be useless against any target with 15 magical resistance or more.
+void DoMassMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE)
+{
+    if(spell.Caster == OBJECT_INVALID) spellsDeclareMajorVariables();//pre 1.70 spellscripts support
+    int nCasterLvl = spell.Level;
+    int i, nSAVETYPE, nCnt = 1;
+    effect eMissile = EffectVisualEffect(nMIRV);
+    effect eVis = EffectVisualEffect(nVIS);
+    float fDist = 0.0;
+    float fDelay = 0.0;
+    float fDelay2, fTime;
+    int nMissiles = nCasterLvl;
+
+    if (nMissiles > nCap)
+    {
+        nMissiles = nCap;
+    }
+
+        /* New Algorithm
+            1. Count # of targets
+            2. Determine number of missiles
+            3. First target gets a missile and all Excess missiles
+            4. Rest of targets (max nMissiles) get one missile
+       */
+    int nEnemies = 0;
+
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+    //Cycle through the targets within the spell shape until an invalid object is captured.
+    while (GetIsObjectValid(oTarget))
+    {
+        // * caster cannot be harmed by this spell
+        if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster))
+        {
+            // GZ: You can only fire missiles on visible targets
+            // If the firing object is a placeable (such as a projectile trap),
+            // we skip the line of sight check as placeables can't "see" things.
+            if ( ( GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE ) ||
+                   GetObjectSeen(oTarget,spell.Caster))
+            {
+                nEnemies++;
+            }
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+     }
+
+     if (nEnemies == 0) return; // * Exit if no enemies to hit
+     int nExtraMissiles = nMissiles / nEnemies;
+
+     // April 2003
+     // * if more enemies than missiles, need to make sure that at least
+     // * one missile will hit each of the enemies
+     if (nExtraMissiles <= 0)
+     {
+        nExtraMissiles = 1;
+     }
+
+     switch(nDAMAGETYPE)//1.71: support for custom content missile storm spells with nonstandard damage type
+     {
+     case DAMAGE_TYPE_ACID:
+     nSAVETYPE = SAVING_THROW_TYPE_ACID;
+     break;
+     case DAMAGE_TYPE_ELECTRICAL:
+     nSAVETYPE = SAVING_THROW_TYPE_ELECTRICITY;
+     break;
+     case DAMAGE_TYPE_FIRE:
+     nSAVETYPE = SAVING_THROW_TYPE_FIRE;
+     break;
+     case DAMAGE_TYPE_COLD:
+     nSAVETYPE = SAVING_THROW_TYPE_COLD;
+     break;
+     case DAMAGE_TYPE_SONIC:
+     nSAVETYPE = SAVING_THROW_TYPE_SONIC;
+     break;
+     case DAMAGE_TYPE_POSITIVE:
+     nSAVETYPE = SAVING_THROW_TYPE_POSITIVE;
+     break;
+     case DAMAGE_TYPE_NEGATIVE:
+     nSAVETYPE = SAVING_THROW_TYPE_NEGATIVE;
+     break;
+     }
+
+     // by default the Remainder will be 0 (if more than enough enemies for all the missiles)
+     int nRemainder = 0;
+
+     if (nExtraMissiles >0)
+        nRemainder = nMissiles % nEnemies;
+
+     if (nEnemies > nMissiles)
+        nEnemies = nMissiles;
+
+    oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+    if (nSpell == SPELL_BALL_LIGHTNING)//1.71: ball lightning has a single target area of effect
+    {
+        oTarget = spell.Target;
+        nEnemies = 1;
+        nExtraMissiles = nMissiles;
+        nRemainder = 0;
+    }
+    //Cycle through the targets within the spell shape until an invalid object is captured.
+    while (GetIsObjectValid(oTarget) && nCnt <= nEnemies)
+    {
+        // * caster cannot be harmed by this spell
+        if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster) &&
+           (GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE || GetObjectSeen(oTarget,spell.Caster)))
+        {
+                //Fire cast spell at event for the specified target
+                SignalEvent(oTarget, EventSpellCastAt(spell.Caster, nSpell));
+
+                // * recalculate appropriate distances
+                fDist = GetDistanceBetween(spell.Caster, oTarget);
+                fDelay = fDist/(3.0 * log(fDist) + 2.0);
+
+                // Firebrand.
+                // It means that once the target has taken damage this round from the
+                // spell it won't take subsequent damage
+                if (nONEHIT)
+                {
+                    nExtraMissiles = 1;
+                    nRemainder = 0;
+                }
+
+                //--------------------------------------------------------------
+                // GZ: Moved SR check out of loop to have 1 check per target
+                //     not one check per missile, which would rip spell mantels
+                //     apart
+                //--------------------------------------------------------------
+                if (!MyResistSpell(spell.Caster, oTarget, fDelay))
+                {
+                    nCap = nExtraMissiles + (nRemainder > 0);//1.71: this will distribute remainder missiles evenly amongs all targets
+                    for (i=1; i <= nCap; i++)
+                    {
+                        //Roll damage
+                        int nDam = MaximizeOrEmpower(6,nD6Dice,spell.Meta);
+                        // if reflexsave allowed, make evasion check
+                        if(nReflexSave)
+                        {
+                            nDam = GetReflexAdjustedDamage(nDam, oTarget, spell.DC, nSAVETYPE, spell.Caster);
+                        }
+
+                        fDelay2 += 0.1;
+                        fTime = fDelay + fDelay2;
+
+                        //Set damage effect
+                        effect eDam = EffectDamage(nDam, nDAMAGETYPE);
+                        //Apply the MIRV and damage effect
+                        DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget));
+                        DelayCommand(fDelay2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
+                        //do not bother when no damage should happen anyway
+                        SetLocalInt(oTarget, "msldmg", GetLocalInt(oTarget, "msldmg") + nDam );
+                        if(i == (nExtraMissiles + nRemainder))
+                        {
+                         effect eDamage = EffectDamage(GetLocalInt(oTarget, "msldmg"), nDAMAGETYPE);
+                         DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget));
+                         DelayCommand(fTime, SetLocalInt(oTarget, "msldmg", 0));
+                        }
+                    }
+                } // for
+                else
+                {   // * apply a dummy visual effect
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget);
+                }
+                nCnt++;// * increment count of missiles fired
+                nRemainder--;
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+    }
+}
+
+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
+
+    spellsDeclareMajorVariables();
+   //SpawnScriptDebugger();
+    DoMassMissileStorm(1, 10, spell.Id);
+}
diff --git a/_removed/x0_s0_missstorm2.ncs b/_removed/x0_s0_missstorm2.ncs
new file mode 100644
index 0000000..472e173
Binary files /dev/null and b/_removed/x0_s0_missstorm2.ncs differ
diff --git a/_removed/x0_s0_missstorm2.nss b/_removed/x0_s0_missstorm2.nss
new file mode 100644
index 0000000..bceac53
--- /dev/null
+++ b/_removed/x0_s0_missstorm2.nss
@@ -0,0 +1,211 @@
+//::///////////////////////////////////////////////
+//:: Isaacs Greater Missile Storm
+//:: x0_s0_MissStorm2
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+ Up to 20 missiles, each doing 3d6 damage to each
+ target in area.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 31, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By:
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+//This version of the spell applies all damage as a cumulated single hit instead of spreading it among all the missiles.
+//This has been done because before that the spell used to be useless against any target with 15 magical resistance or more.
+void DoMassMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE)
+{
+    if(spell.Caster == OBJECT_INVALID) spellsDeclareMajorVariables();//pre 1.70 spellscripts support
+    int nCasterLvl = spell.Level;
+    int i, nSAVETYPE, nCnt = 1;
+    effect eMissile = EffectVisualEffect(nMIRV);
+    effect eVis = EffectVisualEffect(nVIS);
+    float fDist = 0.0;
+    float fDelay = 0.0;
+    float fDelay2, fTime;
+    int nMissiles = nCasterLvl;
+
+    if (nMissiles > nCap)
+    {
+        nMissiles = nCap;
+    }
+
+        /* New Algorithm
+            1. Count # of targets
+            2. Determine number of missiles
+            3. First target gets a missile and all Excess missiles
+            4. Rest of targets (max nMissiles) get one missile
+       */
+    int nEnemies = 0;
+
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+    //Cycle through the targets within the spell shape until an invalid object is captured.
+    while (GetIsObjectValid(oTarget))
+    {
+        // * caster cannot be harmed by this spell
+        if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster))
+        {
+            // GZ: You can only fire missiles on visible targets
+            // If the firing object is a placeable (such as a projectile trap),
+            // we skip the line of sight check as placeables can't "see" things.
+            if ( ( GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE ) ||
+                   GetObjectSeen(oTarget,spell.Caster))
+            {
+                nEnemies++;
+            }
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+     }
+
+     if (nEnemies == 0) return; // * Exit if no enemies to hit
+     int nExtraMissiles = nMissiles / nEnemies;
+
+     // April 2003
+     // * if more enemies than missiles, need to make sure that at least
+     // * one missile will hit each of the enemies
+     if (nExtraMissiles <= 0)
+     {
+        nExtraMissiles = 1;
+     }
+
+     switch(nDAMAGETYPE)//1.71: support for custom content missile storm spells with nonstandard damage type
+     {
+     case DAMAGE_TYPE_ACID:
+     nSAVETYPE = SAVING_THROW_TYPE_ACID;
+     break;
+     case DAMAGE_TYPE_ELECTRICAL:
+     nSAVETYPE = SAVING_THROW_TYPE_ELECTRICITY;
+     break;
+     case DAMAGE_TYPE_FIRE:
+     nSAVETYPE = SAVING_THROW_TYPE_FIRE;
+     break;
+     case DAMAGE_TYPE_COLD:
+     nSAVETYPE = SAVING_THROW_TYPE_COLD;
+     break;
+     case DAMAGE_TYPE_SONIC:
+     nSAVETYPE = SAVING_THROW_TYPE_SONIC;
+     break;
+     case DAMAGE_TYPE_POSITIVE:
+     nSAVETYPE = SAVING_THROW_TYPE_POSITIVE;
+     break;
+     case DAMAGE_TYPE_NEGATIVE:
+     nSAVETYPE = SAVING_THROW_TYPE_NEGATIVE;
+     break;
+     }
+
+     // by default the Remainder will be 0 (if more than enough enemies for all the missiles)
+     int nRemainder = 0;
+
+     if (nExtraMissiles >0)
+        nRemainder = nMissiles % nEnemies;
+
+     if (nEnemies > nMissiles)
+        nEnemies = nMissiles;
+
+    oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+    if (nSpell == SPELL_BALL_LIGHTNING)//1.71: ball lightning has a single target area of effect
+    {
+        oTarget = spell.Target;
+        nEnemies = 1;
+        nExtraMissiles = nMissiles;
+        nRemainder = 0;
+    }
+    //Cycle through the targets within the spell shape until an invalid object is captured.
+    while (GetIsObjectValid(oTarget) && nCnt <= nEnemies)
+    {
+        // * caster cannot be harmed by this spell
+        if (oTarget != spell.Caster && spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, spell.Caster) &&
+           (GetObjectType(spell.Caster) == OBJECT_TYPE_PLACEABLE || GetObjectSeen(oTarget,spell.Caster)))
+        {
+                //Fire cast spell at event for the specified target
+                SignalEvent(oTarget, EventSpellCastAt(spell.Caster, nSpell));
+
+                // * recalculate appropriate distances
+                fDist = GetDistanceBetween(spell.Caster, oTarget);
+                fDelay = fDist/(3.0 * log(fDist) + 2.0);
+
+                // Firebrand.
+                // It means that once the target has taken damage this round from the
+                // spell it won't take subsequent damage
+                if (nONEHIT)
+                {
+                    nExtraMissiles = 1;
+                    nRemainder = 0;
+                }
+
+                //--------------------------------------------------------------
+                // GZ: Moved SR check out of loop to have 1 check per target
+                //     not one check per missile, which would rip spell mantels
+                //     apart
+                //--------------------------------------------------------------
+                if (!MyResistSpell(spell.Caster, oTarget, fDelay))
+                {
+                    nCap = nExtraMissiles + (nRemainder > 0);//1.71: this will distribute remainder missiles evenly amongs all targets
+                    for (i=1; i <= nCap; i++)
+                    {
+                        //Roll damage
+                        int nDam = MaximizeOrEmpower(6,nD6Dice,spell.Meta);
+                        // if reflexsave allowed, make evasion check
+                        if(nReflexSave)
+                        {
+                            nDam = GetReflexAdjustedDamage(nDam, oTarget, spell.DC, nSAVETYPE, spell.Caster);
+                        }
+
+                        fDelay2 += 0.1;
+                        fTime = fDelay + fDelay2;
+
+                        //Set damage effect
+                        effect eDam = EffectDamage(nDam, nDAMAGETYPE);
+                        //Apply the MIRV and damage effect
+                        DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget));
+                        DelayCommand(fDelay2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
+                        //do not bother when no damage should happen anyway
+                        SetLocalInt(oTarget, "msldmg", GetLocalInt(oTarget, "msldmg") + nDam );
+                        if(i == (nExtraMissiles + nRemainder))
+                        {
+                         effect eDamage = EffectDamage(GetLocalInt(oTarget, "msldmg"), nDAMAGETYPE);
+                         DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget));
+                         DelayCommand(fTime, SetLocalInt(oTarget, "msldmg", 0));
+                        }
+                    }
+                } // for
+                else
+                {   // * apply a dummy visual effect
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget);
+                }
+                nCnt++;// * increment count of missiles fired
+                nRemainder--;
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, spell.Loc, TRUE, OBJECT_TYPE_CREATURE);
+    }
+}
+
+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
+
+    spellsDeclareMajorVariables();
+   //SpawnScriptDebugger();
+    DoMassMissileStorm(1, 15, spell.Id);
+}
diff --git a/_removed/x0_s0_quillfire.ncs b/_removed/x0_s0_quillfire.ncs
new file mode 100644
index 0000000..4ecfa5d
Binary files /dev/null and b/_removed/x0_s0_quillfire.ncs differ
diff --git a/_removed/x0_s0_quillfire.nss b/_removed/x0_s0_quillfire.nss
new file mode 100644
index 0000000..d190e09
--- /dev/null
+++ b/_removed/x0_s0_quillfire.nss
@@ -0,0 +1,83 @@
+//::///////////////////////////////////////////////
+//:: Quillfire
+//:: [x0_s0_quillfire.nss]
+//:: Copyright (c) 2002 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Fires a cluster of quills at a target. Ranged Attack.
+    2d8 + 1 point /2 levels (max 5)
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 17 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs May 02, 2003
+/*
+Patch 1.71
+
+- poison made extraordinary
+*/
+
+#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  ( fDist / (3.0f * log( fDist ) + 2.0f) )
+    spellsDeclareMajorVariables();
+    int nCasterLvl = spell.Level;
+    int nDamage = 0;
+    int nCnt;
+    effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Apply a single damage hit for each missile instead of as a single mass
+        //Make SR Check
+//        {
+            // BK: No spell resistance for quillfire
+            //if(!MyResistSpell(OBJECT_SELF, oTarget, fDelay))
+//            {
+                //eMissile = EffectVisualEffect(VFX_IMP_MIRV_FLAME);
+                //* apply bonus damage for level
+                int nBonus = spell.Level / 2;
+                if (nBonus > 5)
+                {
+                    nBonus = 5;
+                }
+                //Roll damage
+                int nDam = MaximizeOrEmpower(8,nBonus,spell.Meta,nBonus);
+                effect eDam = EffectDamage(nDam, DAMAGE_TYPE_MAGICAL);
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target);
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, spell.Target);
+                // * also applies poison damage
+                effect ePoison = EffectPoison(POISON_LARGE_SCORPION_VENOM);
+                ePoison = ExtraordinaryEffect(ePoison);
+                ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, spell.Target);
+
+                //Apply the MIRV and damage effect
+                //ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget);
+//            }
+//      }
+    }
+}
diff --git a/_removed/x0_s0_spikegroen.ncs b/_removed/x0_s0_spikegroen.ncs
new file mode 100644
index 0000000..5bc3814
Binary files /dev/null and b/_removed/x0_s0_spikegroen.ncs differ
diff --git a/_removed/x0_s0_spikegroen.nss b/_removed/x0_s0_spikegroen.nss
new file mode 100644
index 0000000..c121c41
--- /dev/null
+++ b/_removed/x0_s0_spikegroen.nss
@@ -0,0 +1,56 @@
+//::///////////////////////////////////////////////
+//:: Spike Growth: On Enter
+//:: x0_s0_spikegroEN.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All creatures within the AoE take 1d4 acid damage
+    per round
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent Knowles
+//:: Created On: September 6, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- flying and incorporeal creatures are immune
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    aoesDeclareMajorVariables();
+    object oTarget = GetEnteringObject();
+    float fDelay = GetRandomDelay(1.0, 2.2);
+    if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator))
+    {
+        //Fire cast spell at event for the target
+        SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id));
+        //Spell resistance check
+        if(!spellsIsFlying(oTarget) && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL) && !MyResistSpell(aoe.Creator, oTarget, fDelay))
+        {
+            int nDam = MaximizeOrEmpower(8, 1, spell.Meta);
+
+            effect eDam = EffectDamage(nDam, DAMAGE_TYPE_PIERCING);
+            effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
+            //Apply damage and visuals
+            DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+            DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+
+            // * only apply a slow effect from this spell once
+            if(!GetHasSpellEffect(spell.Id, oTarget))
+            {
+                //Make a Reflex Save to avoid the effects of the movement hit.
+                if(!MySavingThrow(SAVING_THROW_REFLEX, oTarget, spell.DC, SAVING_THROW_TYPE_NONE, aoe.Creator, fDelay))
+                {
+                    effect eSpeed = EffectMovementSpeedDecrease(50);
+                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpeed, oTarget, HoursToSeconds(24));
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/x0_s0_spikegrohb.ncs b/_removed/x0_s0_spikegrohb.ncs
new file mode 100644
index 0000000..7407449
Binary files /dev/null and b/_removed/x0_s0_spikegrohb.ncs differ
diff --git a/_removed/x0_s0_spikegrohb.nss b/_removed/x0_s0_spikegrohb.nss
new file mode 100644
index 0000000..dcf4b7c
--- /dev/null
+++ b/_removed/x0_s0_spikegrohb.nss
@@ -0,0 +1,78 @@
+//::///////////////////////////////////////////////
+//:: Spike Growth: On Heartbeat
+//:: x0_s0_spikegroHB.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    All creatures within the AoE take 1d4 acid damage
+    per round
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent Knowles
+//:: Created On: September 6, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- aoe will vanish with caster
+- flying and incorporeal creatures are immune
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    aoesDeclareMajorVariables();
+    //--------------------------------------------------------------------------
+    // When the caster is no longer there, all functions calling
+    // GetAreaOfEffectCreator will fail. Its better to remove the barrier then
+    //--------------------------------------------------------------------------
+    if(!GetIsObjectValid(aoe.Creator))
+    {
+        DestroyObject(aoe.AOE);
+        return;
+    }
+
+    spellsDeclareMajorVariables();
+    effect eSpeed = EffectMovementSpeedDecrease(50);
+    effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
+    effect eDam;
+    float fDelay;
+    int nDamage;
+
+    //Start cycling through the AOE Object for viable targets including doors and placable objects.
+    object oTarget = GetFirstInPersistentObject(aoe.AOE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator))
+        {
+            //Fire cast spell at event for the target
+            SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id));
+            fDelay = GetRandomDelay(1.0, 2.2);
+            //Spell resistance check
+            if(!spellsIsFlying(oTarget) && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL) && !MyResistSpell(aoe.Creator, oTarget, fDelay))
+            {
+                nDamage = MaximizeOrEmpower(8, 1, spell.Meta);
+                eDam = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING);
+
+                //Apply damage and visuals
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+
+                // * only apply a slow effect from this spell once
+                if (!GetHasSpellEffect(spell.Id, oTarget))
+                {
+                    //Make a Reflex Save to avoid the effects of the movement hit.
+                    if(!MySavingThrow(SAVING_THROW_REFLEX, oTarget, spell.DC, SAVING_THROW_TYPE_NONE, aoe.Creator, fDelay))
+                    {
+                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpeed, oTarget, HoursToSeconds(24));
+                    }
+                }
+            }
+        }
+    //Get next target.
+    oTarget = GetNextInPersistentObject(aoe.AOE);
+    }
+}
diff --git a/_removed/x0_s0_woundwhis.ncs b/_removed/x0_s0_woundwhis.ncs
new file mode 100644
index 0000000..3c3c993
Binary files /dev/null and b/_removed/x0_s0_woundwhis.ncs differ
diff --git a/_removed/x0_s0_woundwhis.nss b/_removed/x0_s0_woundwhis.nss
new file mode 100644
index 0000000..dcf1aff
--- /dev/null
+++ b/_removed/x0_s0_woundwhis.nss
@@ -0,0 +1,74 @@
+//::///////////////////////////////////////////////
+//:: Wounding Whispers
+//:: x0_s0_WoundWhis.nss
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Magical whispers cause 1d8 sonic damage to attackers who hit you.
+    Made the damage slightly more than the book says because we cannot
+    do the +1 per level.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:://////////////////////////////////////////////
+//:: Modified for wounding whispers, July 30 2002, Brent
+//:://////////////////////////////////////////////
+//:: Last Update By: Andrew Nobbs May 01, 2003
+/*
+Patch 1.70
+
+- damage wasn't random
+*/
+
+#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 eVis = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE);
+    int nDuration = spell.Level;
+    int nBonus = spell.Level/2;
+    effect eShield = EffectDamageShield(nBonus, DAMAGE_BONUS_1d6, DAMAGE_TYPE_SONIC);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+
+    //Link effects
+    effect eLink = EffectLinkEffects(eShield, eDur);
+    eLink = EffectLinkEffects(eLink, eVis);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+    if (GetHasSpellEffect(spell.Id, spell.Target))
+    {
+        RemoveEffectsFromSpell(spell.Target,spell.Id);//the old function would allow stacking after changes i have done
+    }
+
+    //Enter Metamagic conditions
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+    //Apply the VFX impact and effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+}
diff --git a/_removed/x0_s1_petrbreath.ncs b/_removed/x0_s1_petrbreath.ncs
new file mode 100644
index 0000000..8ae390c
Binary files /dev/null and b/_removed/x0_s1_petrbreath.ncs differ
diff --git a/_removed/x0_s1_petrbreath.nss b/_removed/x0_s1_petrbreath.nss
new file mode 100644
index 0000000..8455ee0
--- /dev/null
+++ b/_removed/x0_s1_petrbreath.nss
@@ -0,0 +1,36 @@
+//::///////////////////////////////////////////////////
+//:: X0_S1_PETRBREATH
+//:: Petrification breath monster ability.
+//:: Fortitude save (DC 17) or be turned to stone permanently.
+//:: This will be changed to a temporary effect.
+//:: Copyright (c) 2002 Floodgate Entertainment
+//:: Created By: Naomi Novik
+//:: Created On: 11/14/2002
+//::///////////////////////////////////////////////////
+
+#include "x0_i0_spells"
+
+void main()
+{
+    object oTarget = GetSpellTargetObject();
+    int nHitDice = GetHitDice(OBJECT_SELF);
+
+    location lTargetLocation = GetSpellTargetLocation();
+
+    //Get first target in spell area
+    oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            int nSpellID = GetSpellId();
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID));
+            float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+
+            object oSelf = OBJECT_SELF;
+            DelayCommand(fDelay, DoPetrification(nHitDice, oSelf, oTarget, nSpellID, 17));
+        }
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
+    }
+}
diff --git a/_removed/x0_s1_petrgaze.ncs b/_removed/x0_s1_petrgaze.ncs
new file mode 100644
index 0000000..0eec807
Binary files /dev/null and b/_removed/x0_s1_petrgaze.ncs differ
diff --git a/_removed/x0_s1_petrgaze.nss b/_removed/x0_s1_petrgaze.nss
new file mode 100644
index 0000000..a47d221
--- /dev/null
+++ b/_removed/x0_s1_petrgaze.nss
@@ -0,0 +1,52 @@
+//::///////////////////////////////////////////////////
+//:: X0_S1_PETRGAZE
+//:: Petrification gaze monster ability.
+//:: Fortitude save (DC 15) or be turned to stone permanently.
+//:: This will be changed to a temporary effect.
+//:: Copyright (c) 2002 Floodgate Entertainment
+//:: Created By: Naomi Novik
+//:: Created On: 11/14/2002
+//::///////////////////////////////////////////////////
+//:: Used by Basilisk
+/*
+Patch 1.70, fix by Shadoow
+
+- was missing blinded check
+*/
+
+#include "x2_i0_spells"
+
+void main()
+{
+    //--------------------------------------------------------------------------
+    // Make sure we are not blind
+    //--------------------------------------------------------------------------
+    if( GZCanNotUseGazeAttackCheck(OBJECT_SELF))
+    {
+        return;
+    }
+
+    object oTarget = GetSpellTargetObject();
+    int nHitDice = GetHitDice(OBJECT_SELF);
+
+
+    location lTargetLocation = GetSpellTargetLocation();
+
+    //Get first target in spell area
+    oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
+        {
+            int nSpellID = GetSpellId();
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID));
+            float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+
+            object oSelf = OBJECT_SELF;
+            DelayCommand(fDelay, DoPetrification(nHitDice, oSelf, oTarget, nSpellID, 13));
+        }
+
+        //Get next target in spell area
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lTargetLocation, TRUE);
+    }
+}
diff --git a/_removed/x0_s1_petrtouch.ncs b/_removed/x0_s1_petrtouch.ncs
new file mode 100644
index 0000000..392a558
Binary files /dev/null and b/_removed/x0_s1_petrtouch.ncs differ
diff --git a/_removed/x0_s1_petrtouch.nss b/_removed/x0_s1_petrtouch.nss
new file mode 100644
index 0000000..36767ec
--- /dev/null
+++ b/_removed/x0_s1_petrtouch.nss
@@ -0,0 +1,29 @@
+//::///////////////////////////////////////////////////
+//:: X0_S1_PETRGAZE
+//:: Petrification touch attack monster ability.
+//:: Fortitude save (DC 15) or be turned to stone permanently.
+//:: Copyright (c) 2002 Floodgate Entertainment
+//:: Created By: Naomi Novik
+//:: Created On: 11/14/2002
+//::///////////////////////////////////////////////////
+/*
+Patch 1.70, fix by Shadooow
+
+- duration corrected (was target's HD instead of caster's)
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+
+void main()
+{
+    object oTarget = GetSpellTargetObject();
+    int nHitDice = GetHitDice(OBJECT_SELF);
+
+    if(spellsIsTarget(oTarget, SPELL_TARGET_SINGLETARGET, OBJECT_SELF))
+    {
+        int nSpellID = GetSpellId();
+        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID));
+        DoPetrification(nHitDice, OBJECT_SELF, oTarget, nSpellID, 15);
+    }
+}
diff --git a/_removed/x0_s2_blkdead.ncs b/_removed/x0_s2_blkdead.ncs
new file mode 100644
index 0000000..e702bdf
Binary files /dev/null and b/_removed/x0_s2_blkdead.ncs differ
diff --git a/_removed/x0_s2_blkdead.nss b/_removed/x0_s2_blkdead.nss
new file mode 100644
index 0000000..eab66ed
--- /dev/null
+++ b/_removed/x0_s2_blkdead.nss
@@ -0,0 +1,33 @@
+//::///////////////////////////////////////////////
+//:: x0_s2_blkdead
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Level 3 - 6:  Summons Ghast
+    Level 7 - 10: Doom Knight
+*/
+//:://////////////////////////////////////////////
+//:: Created By:
+//:: Created On:
+//:://////////////////////////////////////////////
+
+void main()
+{
+
+
+
+
+   int nLevel = GetLevelByClass(CLASS_TYPE_BLACKGUARD, OBJECT_SELF);
+    effect eSummon;
+    float fDelay = 3.0;
+    int nDuration = nLevel;
+    if (nLevel >= 21)
+        eSummon = EffectSummonCreature("NW_S_DOOMKGHT2",VFX_FNF_SUMMON_UNDEAD);
+    else if (nLevel >= 7)
+        eSummon = EffectSummonCreature("NW_S_DOOMKGHT",VFX_FNF_SUMMON_UNDEAD);
+    else
+     eSummon = EffectSummonCreature("NW_S_GHAST",VFX_FNF_SUMMON_UNDEAD);
+
+    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration));
+
+}
diff --git a/_removed/x1_s2_deatharrow.ncs b/_removed/x1_s2_deatharrow.ncs
new file mode 100644
index 0000000..af0ba05
Binary files /dev/null and b/_removed/x1_s2_deatharrow.ncs differ
diff --git a/_removed/x1_s2_deatharrow.nss b/_removed/x1_s2_deatharrow.nss
new file mode 100644
index 0000000..ecd6eda
--- /dev/null
+++ b/_removed/x1_s2_deatharrow.nss
@@ -0,0 +1,70 @@
+//::///////////////////////////////////////////////
+//:: x1_s2_deatharrow
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Seeker Arrow
+     - creates an arrow that automatically hits target.
+     - At level 4 the arrow does +2 magic damage
+     - at level 5 the arrow does +3 magic damage
+
+     - normal arrow damage, based on base item type
+
+     - Must have shortbow or longbow in hand.
+*/
+//:://////////////////////////////////////////////
+//:: Created By:
+//:: Created On:
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- critical hit damage corrected (damage was always even before)
+- added death VFX
+- signal event placed before hit check, so it now removes GS/invis every time
+*/
+
+#include "x0_i0_spells"
+#include "x2_inc_itemprop"
+
+void main()
+{
+    int nBonus = ArcaneArcherCalculateBonus();
+    object oTarget = GetSpellTargetObject();
+
+    if (GetIsObjectValid(oTarget))
+    {
+        // * Roll Touch Attack
+        int nTouch = TouchAttackRanged(oTarget, TRUE);
+
+        //Fire cast spell at event for the specified target
+        SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
+
+        if (nTouch > 0)
+        {
+            int nDamage = ArcaneArcherDamageDoneByBow(nTouch == 2);
+            if (nDamage > 0)
+            {
+                effect ePhysical = EffectDamage(nDamage, DAMAGE_TYPE_PIERCING,IPGetDamagePowerConstantFromNumber(nBonus));
+                effect eMagic = EffectDamage(nBonus, DAMAGE_TYPE_MAGICAL);
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, ePhysical, oTarget);
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eMagic, oTarget);
+
+                int nSaveType = SAVING_THROW_TYPE_NONE;
+                if(GetIsImmune(oTarget, IMMUNITY_TYPE_DEATH, OBJECT_SELF))
+                {
+                    nSaveType = SAVING_THROW_TYPE_DEATH;//workaround for action cancel bug without changing save type
+                }
+                // * if target fails a save DC20 they die
+                int nDC = GetCasterLevel(OBJECT_SELF)+10;
+                if (!MySavingThrow(SAVING_THROW_FORT, oTarget, nDC, nSaveType))
+                {
+                    effect eDeath = EffectDeath();
+                    effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
+                }
+            }
+        }
+    }
+}
diff --git a/_removed/x2_inc_craft.nss b/_removed/x2_inc_craft.nss
new file mode 100644
index 0000000..ee53e44
--- /dev/null
+++ b/_removed/x2_inc_craft.nss
@@ -0,0 +1,1439 @@
+//::///////////////////////////////////////////////
+//:: x2_inc_craft
+//:: Copyright (c) 2003 Bioare Corp.
+//:://////////////////////////////////////////////
+/*
+
+    Central include for crafting feat and
+    crafting skill system.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: 2003-05-09
+//:: Last Updated On: 2003-10-14
+//:://////////////////////////////////////////////
+#include "x2_inc_itemprop"
+#include "x2_inc_switches"
+
+struct craft_struct
+{
+    int    nRow;
+    string sResRef;
+    int    nDC;
+    int    nCost;
+    string sLabel;
+};
+
+struct craft_receipe_struct
+{
+    int nMode;
+    object oMajor;
+    object oMinor;
+};
+
+const string  X2_CI_CRAFTSKILL_CONV ="x2_p_craftskills";
+
+// Brew Potion related Constants
+
+const int     X2_CI_BREWPOTION_FEAT_ID        = 944;                    // Brew Potion feat simulation
+const int     X2_CI_BREWPOTION_MAXLEVEL       = 9;                      // Max Level for potions
+const int     X2_CI_BREWPOTION_COSTMODIFIER   = 50;                     // gp Brew Potion XPCost Modifier
+
+const string  X2_CI_BREWPOTION_NEWITEM_RESREF = "x2_it_pcpotion";       // ResRef for new potion item
+
+// Scribe Scroll related constants
+const int     X2_CI_SCRIBESCROLL_FEAT_ID        = 945;
+const int     X2_CI_SCRIBESCROLL_COSTMODIFIER   = 25;                 // Scribescroll Cost Modifier
+const string  X2_CI_SCRIBESCROLL_NEWITEM_RESREF = "x2_it_pcscroll";   // ResRef for new scroll item
+
+// Craft Wand related constants
+const int     X2_CI_CRAFTWAND_FEAT_ID        = 946;
+const int     X2_CI_CRAFTWAND_MAXLEVEL       = 9;
+const int     X2_CI_CRAFTWAND_COSTMODIFIER   = 750;
+const string  X2_CI_CRAFTWAND_NEWITEM_RESREF = "x2_it_pcwand";
+
+// 2da for the craftskills
+const string X2_CI_CRAFTING_WP_2DA = "des_crft_weapon" ;
+const string X2_CI_CRAFTING_AR_2DA = "des_crft_armor" ;
+const string X2_CI_CRAFTING_MAT_2DA = "des_crft_mat";
+
+
+// 2da for matching spells to properties
+const string X2_CI_CRAFTING_SP_2DA = "des_crft_spells" ;
+// Base custom token for item modification conversations (do not change unless you want to change the conversation too)
+const int     X2_CI_CRAFTINGSKILL_CTOKENBASE = 13220;
+
+// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too)
+const int     X2_CI_CRAFTINGSKILL_DC_CTOKENBASE = 14220;
+
+// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too)
+const int     X2_CI_CRAFTINGSKILL_GP_CTOKENBASE = 14320;
+
+// Base custom token for DC item modification conversations (do not change unless you want to change the conversation too)
+const int     X2_CI_MODIFYARMOR_GP_CTOKENBASE = 14420;
+
+//How many items per 2da row in X2_IP_CRAFTING_2DA, do not change>4 until you want to create more conversation condition scripts as well
+const int     X2_CI_CRAFTING_ITEMS_PER_ROW = 5;
+
+// name of the scroll 2da
+const string  X2_CI_2DA_SCROLLS = "des_crft_scroll";
+
+const int X2_CI_CRAFTMODE_INVALID   = 0;
+const int X2_CI_CRAFTMODE_CONTAINER = 1; // no longer used, but left in for the community to reactivate
+const int X2_CI_CRAFTMODE_BASE_ITEM  = 2;
+const int X2_CI_CRAFTMODE_ASSEMBLE = 3;
+
+const int X2_CI_MAGICTYPE_INVALID = 0;
+const int X2_CI_MAGICTYPE_ARCANE  = 1;
+const int X2_CI_MAGICTYPE_DIVINE  = 2;
+
+const int X2_CI_MODMODE_INVALID = 0;
+const int X2_CI_MODMODE_ARMOR = 1;
+const int X2_CI_MODMODE_WEAPON = 2;
+
+// *  Returns TRUE if an item is a Craft Base Item
+// *  to be used in spellscript that can be cast on items - i.e light
+int   CIGetIsCraftFeatBaseItem( object oItem );
+
+// *  Checks if the last spell cast was used to brew potion and will do the brewing process.
+// *  Returns TRUE if the spell was indeed used to brew a potion (regardless of the actual outcome of the brewing process)
+// *  Meant to be used in spellscripts only
+int   CICraftCheckBrewPotion(object oSpellTarget, object oCaster);
+
+// *  Checks if the last spell cast was used to scribe a scroll and handles the scribe scroll process
+// *  Returns TRUE if the spell was indeed used to scribe a scroll (regardless of the actual outcome)
+// *  Meant to be used in spellscripts only
+int   CICraftCheckScribeScroll(object oSpellTarget, object oCaster);
+
+// *   Create a new potion item based on the spell nSpellID  on the creator
+object CICraftBrewPotion(object oCreator, int nSpellID );
+
+// *   Create a new scroll item based on the spell nSpellID on the creator
+object CICraftScribeScroll(object oCreator, int nSpellID);
+
+
+// *  Checks if the caster intends to use his item creation feats and
+// *  calls appropriate item creation subroutine if conditions are met (spell cast on correct item, etc).
+// *  Returns TRUE if the spell was used for an item creation feat
+int   CIGetSpellWasUsedForItemCreation(object oSpellTarget);
+
+
+// *  Returns the innate level of a spell. If bDefaultZeroToOne is given
+// *  Level 0 spell will be returned as level 1 spells
+int   CIGetSpellInnateLevel(int nSpellID, int bDefaultZeroToOne = FALSE)
+{
+    int nRet = StringToInt(Get2DAString(X2_CI_CRAFTING_SP_2DA, "Level", nSpellID));
+    if (nRet == 0)
+        nRet =1;
+
+    return nRet;
+}
+
+// * Makes oPC do a Craft check using nSkill to create the item supplied in sResRe
+// * If oContainer is specified, the item will be created there.
+// * Throwing weapons are created with stack sizes of 10, ammo with 20
+// *  oPC       - The player crafting
+// *  nSkill    - SKILL_CRAFT_WEAPON or SKILL_CRAFT_ARMOR,
+// *  sResRef   - ResRef of the item to be crafted
+// *  nDC       - DC to beat to succeed
+// *  oContainer - if a container is specified, create item inside
+object CIUseCraftItemSkill(object oPC, int nSkill, string sResRef, int nDC, object oContainer = OBJECT_INVALID);
+
+// *  Returns TRUE if a spell is prevented from being used with one of the crafting feats
+int   CIGetIsSpellRestrictedFromCraftFeat(int nSpellID, int nFeatID);
+
+// *  Return craftitemstructdata
+struct craft_struct CIGetCraftItemStructFrom2DA(string s2DA, int nRow, int nItemNo);
+
+// *  Return the type of magic as one of the following constants
+// *  const int X2_CI_MAGICTYPE_INVALID = 0;
+// *  const int X2_CI_MAGICTYPE_ARCANE  = 1;
+// *  const int X2_CI_MAGICTYPE_DIVINE  = 2;
+// *  Parameters:
+// *    nClass - CLASS_TYPE_* constant
+int CI_GetClassMagicType(int nClass)
+{
+  switch (nClass)
+  {
+        case CLASS_TYPE_CLERIC:
+                return X2_CI_MAGICTYPE_DIVINE; break;
+        case CLASS_TYPE_DRUID:
+                return X2_CI_MAGICTYPE_DIVINE; break;
+        case CLASS_TYPE_PALADIN:
+                return X2_CI_MAGICTYPE_DIVINE; break;
+        case CLASS_TYPE_BARD:
+                return X2_CI_MAGICTYPE_ARCANE; break;
+        case CLASS_TYPE_SORCERER:
+                return X2_CI_MAGICTYPE_ARCANE; break;
+        case CLASS_TYPE_WIZARD:
+                return X2_CI_MAGICTYPE_ARCANE; break;
+        case CLASS_TYPE_RANGER:
+                return X2_CI_MAGICTYPE_DIVINE; break;
+    }
+    return X2_CI_MAGICTYPE_INVALID;
+}
+
+string GetMaterialComponentTag(int nPropID)
+{
+    string sRet = Get2DAString("des_matcomp","comp_tag",nPropID);
+    return sRet;
+}
+
+
+// -----------------------------------------------------------------------------
+// Return true if oItem is a crafting target item
+// -----------------------------------------------------------------------------
+int CIGetIsCraftFeatBaseItem(object oItem)
+{
+    int nBt = GetBaseItemType(oItem);
+    // blank scroll, empty potion, wand
+    if (nBt == 101 || nBt == 102 || nBt == 103)
+      return TRUE;
+    else
+      return FALSE;
+}
+
+
+// -----------------------------------------------------------------------------
+// Georg, 2003-06-12
+// Create a new playermade potion object with properties matching nSpellID and return it
+// -----------------------------------------------------------------------------
+object CICraftBrewPotion(object oCreator, int nSpellID )
+{
+
+    int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID);
+
+    object oTarget;
+    // * GZ 2003-09-11: If the current spell cast is not acid fog, and
+    // *                returned property ID is 0, bail out to prevent
+    // *                creation of acid fog items.
+    if (nPropID == 0 && nSpellID != 0)
+    {
+        FloatingTextStrRefOnCreature(84544,oCreator);
+        return OBJECT_INVALID;
+    }
+
+    if (nPropID != -1)
+    {
+        itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_SINGLE_USE);
+        oTarget = CreateItemOnObject(X2_CI_BREWPOTION_NEWITEM_RESREF,oCreator);
+        AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget);
+    }
+    return oTarget;
+}
+
+// -----------------------------------------------------------------------------
+// Wrapper for the crafting cost calculation, returns GP required
+// -----------------------------------------------------------------------------
+int CIGetCraftGPCost(int nLevel, int nMod)
+{
+    int nLvlRow =   IPGetIPConstCastSpellFromSpellID(GetSpellId());
+    int nCLevel = StringToInt(Get2DAString("irpr_spells","CasterLvl",nLvlRow));
+
+    // -------------------------------------------------------------------------
+    // in case we don't get a valid CLevel, use spell level instead
+    // -------------------------------------------------------------------------
+    if (nCLevel ==0)
+    {
+        nCLevel = nLevel;
+    }
+    int nRet = nCLevel * nLevel * nMod;
+    return nRet;
+
+}
+
+// -----------------------------------------------------------------------------
+// Georg, 2003-06-12
+// Create a new playermade wand object with properties matching nSpellID
+// and return it
+// -----------------------------------------------------------------------------
+object CICraftCraftWand(object oCreator, int nSpellID )
+{
+    int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID);
+
+    object oTarget;
+    // * GZ 2003-09-11: If the current spell cast is not acid fog, and
+    // *                returned property ID is 0, bail out to prevent
+    // *                creation of acid fog items.
+    if (nPropID == 0 && nSpellID != 0)
+    {
+        FloatingTextStrRefOnCreature(84544,oCreator);
+        return OBJECT_INVALID;
+    }
+
+
+    if (nPropID != -1)
+    {
+        itemproperty ipProp = ItemPropertyCastSpell(nPropID,IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE);
+        oTarget = CreateItemOnObject(X2_CI_CRAFTWAND_NEWITEM_RESREF,oCreator);
+        AddItemProperty(DURATION_TYPE_PERMANENT,ipProp,oTarget);
+
+
+        int nType = CI_GetClassMagicType(GetLastSpellCastClass());
+        itemproperty ipLimit;
+
+        if (nType == X2_CI_MAGICTYPE_DIVINE)
+        {
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_PALADIN);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_RANGER);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_DRUID);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_CLERIC);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+        }
+        else if (nType == X2_CI_MAGICTYPE_ARCANE)
+        {
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_WIZARD);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_SORCERER);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+             ipLimit = ItemPropertyLimitUseByClass(CLASS_TYPE_BARD);
+             AddItemProperty(DURATION_TYPE_PERMANENT,ipLimit,oTarget);
+        }
+
+        int nCharges = GetLevelByClass(GetLastSpellCastClass(),OBJECT_SELF) + d10();
+
+        if (nCharges == 0) // stupi cheaters
+        {
+            nCharges = 10+d20();
+        }
+        // Hard core rule mode enabled
+        if (GetModuleSwitchValue(MODULE_SWITCH_ENABLE_CRAFT_WAND_50_CHARGES))
+        {
+            SetItemCharges(oTarget,50);
+        }
+        else
+        {
+            SetItemCharges(oTarget,nCharges);
+        }
+        // TODOL Add use restrictions there when item becomes available
+    }
+    return oTarget;
+}
+
+// -----------------------------------------------------------------------------
+// Georg, 2003-06-12
+// Create and Return a magic wand with an item property
+// matching nSpellID. Charges are set to d20 + casterlevel
+// capped at 50 max
+// -----------------------------------------------------------------------------
+object CICraftScribeScroll(object oCreator, int nSpellID)
+{
+    int nPropID = IPGetIPConstCastSpellFromSpellID(nSpellID);
+    object oTarget;
+    // Handle optional material components
+    string sMat = GetMaterialComponentTag(nPropID);
+    if (sMat != "")
+    {
+        object oMat = GetItemPossessedBy(oCreator,sMat);
+        if (oMat== OBJECT_INVALID)
+        {
+            FloatingTextStrRefOnCreature(83374, oCreator); // Missing material component
+            return OBJECT_INVALID;
+        }
+        else
+        {
+            DestroyObject (oMat);
+        }
+     }
+
+    // get scroll resref from scrolls lookup 2da
+    int nClass =GetLastSpellCastClass ();
+    string sClass = "Wiz_Sorc";
+    switch (nClass)
+    {
+       case CLASS_TYPE_WIZARD:
+            sClass = "Wiz_Sorc";
+            break;
+
+       case CLASS_TYPE_SORCERER:
+            sClass = "Wiz_Sorc";
+            break;
+       case CLASS_TYPE_CLERIC:
+            sClass = "Cleric";
+            break;
+       case CLASS_TYPE_PALADIN:
+            sClass = "Paladin";
+            break;
+       case CLASS_TYPE_DRUID:
+            sClass = "Druid";
+            break;
+       case CLASS_TYPE_RANGER:
+            sClass = "Ranger";
+            break;
+       case CLASS_TYPE_BARD:
+            sClass = "Bard";
+            break;
+    }
+
+    if (sClass != "")
+    {
+        string sResRef = Get2DAString(X2_CI_2DA_SCROLLS,sClass,nSpellID);
+        if (sResRef != "")
+        {
+            oTarget = CreateItemOnObject(sResRef,oCreator);
+        }
+
+        if (oTarget == OBJECT_INVALID)
+        {
+           WriteTimestampedLogEntry("x2_inc_craft::CICraftScribeScroll failed - Resref: " + sResRef + " Class: " + sClass + "(" +IntToString(nClass) +") " + " SpellID " + IntToString (nSpellID));
+        }
+    }
+    return oTarget;
+}
+
+// -----------------------------------------------------------------------------
+// Returns TRUE if the player used the last spell to brew a potion
+// -----------------------------------------------------------------------------
+int CICraftCheckBrewPotion(object oSpellTarget, object oCaster)
+{
+
+    object oSpellTarget = GetSpellTargetObject();
+    object oCaster      = OBJECT_SELF;
+    int    nID          = GetSpellId();
+    int    nLevel       = CIGetSpellInnateLevel(nID,TRUE);
+
+    // -------------------------------------------------------------------------
+    // check if brew potion feat is there
+    // -------------------------------------------------------------------------
+    if (GetHasFeat(X2_CI_BREWPOTION_FEAT_ID, oCaster) != TRUE)
+    {
+      FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item
+      return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // check if spell is below maxlevel for brew potions
+    // -------------------------------------------------------------------------
+    if (nLevel > X2_CI_BREWPOTION_MAXLEVEL)
+    {
+        FloatingTextStrRefOnCreature(76416, oCaster);
+        return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // Check if the spell is allowed to be used with Brew Potions
+    // -------------------------------------------------------------------------
+    if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_BREWPOTION_FEAT_ID))
+    {
+        FloatingTextStrRefOnCreature(83450, oCaster);
+        return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // XP/GP Cost Calculation
+    // -------------------------------------------------------------------------
+    int nCost = CIGetCraftGPCost(nLevel, X2_CI_BREWPOTION_COSTMODIFIER);
+    float nExperienceCost = 0.04  * nCost; // xp = 1/25 of gp value
+    int nGoldCost = nCost ;
+
+    // -------------------------------------------------------------------------
+    // Does Player have enough gold?
+    // -------------------------------------------------------------------------
+    if (GetGold(oCaster) < nGoldCost)
+    {
+        FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold!
+        return TRUE;
+    }
+
+    int nHD = GetHitDice(oCaster);
+    int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000;
+    int nNewXP = FloatToInt(GetXP(oCaster) - nExperienceCost);
+
+
+    // -------------------------------------------------------------------------
+    // check for sufficient XP to cast spell
+    // -------------------------------------------------------------------------
+    if (nMinXPForLevel > nNewXP || nNewXP == 0 )
+    {
+        FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP
+        return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // Here we brew the new potion
+    // -------------------------------------------------------------------------
+    object oPotion = CICraftBrewPotion(oCaster, nID);
+
+    // -------------------------------------------------------------------------
+    // Verify Results
+    // -------------------------------------------------------------------------
+    if (GetIsObjectValid(oPotion))
+    {
+        TakeGoldFromCreature(nGoldCost, oCaster, TRUE);
+        SetXP(oCaster, nNewXP);
+        DestroyObject (oSpellTarget);
+        FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful
+        return TRUE;
+     }
+     else
+     {
+         FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed
+        return TRUE;
+     }
+
+}
+
+
+
+// -----------------------------------------------------------------------------
+// Returns TRUE if the player used the last spell to create a scroll
+// -----------------------------------------------------------------------------
+int CICraftCheckScribeScroll(object oSpellTarget, object oCaster)
+{
+    int  nID = GetSpellId();
+
+    // -------------------------------------------------------------------------
+    // check if scribe scroll feat is there
+    // -------------------------------------------------------------------------
+    if (GetHasFeat(X2_CI_SCRIBESCROLL_FEAT_ID, oCaster) != TRUE)
+    {
+      FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item
+      return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // Check if the spell is allowed to be used with Scribe Scroll
+    // -------------------------------------------------------------------------
+    if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_SCRIBESCROLL_FEAT_ID))
+    {
+        FloatingTextStrRefOnCreature(83451, oCaster); // can not be used with this feat
+        return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // XP/GP Cost Calculation
+    // -------------------------------------------------------------------------
+    int  nLevel    = CIGetSpellInnateLevel(nID,TRUE);
+    int nCost = CIGetCraftGPCost(nLevel, X2_CI_SCRIBESCROLL_COSTMODIFIER);
+    float fExperienceCost = 0.04 * nCost;
+    int nGoldCost = nCost ;
+
+    // -------------------------------------------------------------------------
+    // Does Player have enough gold?
+    // -------------------------------------------------------------------------
+    if (GetGold(oCaster) < nGoldCost)  //  enough gold?
+    {
+        FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold!
+        return TRUE;
+    }
+
+    int nHD = GetHitDice(oCaster);
+    int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000;
+    int nNewXP = FloatToInt(GetXP(oCaster) - fExperienceCost);
+
+    // -------------------------------------------------------------------------
+    // check for sufficient XP to cast spell
+    // -------------------------------------------------------------------------
+    if (nMinXPForLevel > nNewXP || nNewXP == 0 )
+    {
+         FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP
+         return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // Here we scribe the scroll
+    // -------------------------------------------------------------------------
+    object oScroll = CICraftScribeScroll(oCaster, nID);
+
+    // -------------------------------------------------------------------------
+    // Verify Results
+    // -------------------------------------------------------------------------
+    if (GetIsObjectValid(oScroll))
+    {
+        //----------------------------------------------------------------------
+        // Some scrollsare ar not identified ... fix that here
+        //----------------------------------------------------------------------
+        SetIdentified(oScroll,TRUE);
+        ActionPlayAnimation (ANIMATION_FIREFORGET_READ,1.0);
+        TakeGoldFromCreature(nGoldCost, oCaster, TRUE);
+        SetXP(oCaster, nNewXP);
+        DestroyObject (oSpellTarget);
+        FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful
+        return TRUE;
+     }
+     else
+     {
+        FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed
+        return TRUE;
+     }
+
+    return FALSE;
+}
+
+
+// -----------------------------------------------------------------------------
+// Returns TRUE if the player used the last spell to craft a wand
+// -----------------------------------------------------------------------------
+int CICraftCheckCraftWand(object oSpellTarget, object oCaster)
+{
+
+    int nID = GetSpellId();
+
+    // -------------------------------------------------------------------------
+    // check if craft wand feat is there
+    // -------------------------------------------------------------------------
+    if (GetHasFeat(X2_CI_CRAFTWAND_FEAT_ID, oCaster) != TRUE)
+    {
+      FloatingTextStrRefOnCreature(40487, oCaster); // Item Creation Failed - Don't know how to create that type of item
+      return TRUE; // tried item creation but do not know how to do it
+    }
+
+    // -------------------------------------------------------------------------
+    // Check if the spell is allowed to be used with Craft Wand
+    // -------------------------------------------------------------------------
+    if (CIGetIsSpellRestrictedFromCraftFeat(nID, X2_CI_CRAFTWAND_FEAT_ID))
+    {
+        FloatingTextStrRefOnCreature(83452, oCaster); // can not be used with this feat
+        return TRUE;
+    }
+
+    int nLevel = CIGetSpellInnateLevel(nID,TRUE);
+
+    // -------------------------------------------------------------------------
+    // check if spell is below maxlevel for brew potions
+    // -------------------------------------------------------------------------
+    if (nLevel > X2_CI_CRAFTWAND_MAXLEVEL)
+    {
+        FloatingTextStrRefOnCreature(83623, oCaster);
+        return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // XP/GP Cost Calculation
+    // -------------------------------------------------------------------------
+    int nCost = CIGetCraftGPCost( nLevel, X2_CI_CRAFTWAND_COSTMODIFIER);
+    float nExperienceCost = 0.04 * nCost;
+    int nGoldCost = nCost;
+
+    // -------------------------------------------------------------------------
+    // Does Player have enough gold?
+    // -------------------------------------------------------------------------
+     if (GetGold(oCaster) < nGoldCost)  //  enough gold?
+    {
+        FloatingTextStrRefOnCreature(3786, oCaster); // Item Creation Failed - not enough gold!
+        return TRUE;
+    }
+
+    // more calculations on XP cost
+    int nHD = GetHitDice(oCaster);
+    int nMinXPForLevel = ((nHD * (nHD - 1)) / 2) * 1000;
+    int nNewXP = FloatToInt(GetXP(oCaster) - nExperienceCost);
+
+    // -------------------------------------------------------------------------
+    // check for sufficient XP to cast spell
+    // -------------------------------------------------------------------------
+     if (nMinXPForLevel > nNewXP || nNewXP == 0 )
+    {
+         FloatingTextStrRefOnCreature(3785, oCaster); // Item Creation Failed - Not enough XP
+         return TRUE;
+    }
+
+    // -------------------------------------------------------------------------
+    // Here we craft the wand
+    // -------------------------------------------------------------------------
+    object oWand = CICraftCraftWand(oCaster, nID);
+
+    // -------------------------------------------------------------------------
+    // Verify Results
+    // -------------------------------------------------------------------------
+    if (GetIsObjectValid(oWand))
+    {
+        TakeGoldFromCreature(nGoldCost, oCaster, TRUE);
+        SetXP(oCaster, nNewXP);
+        DestroyObject (oSpellTarget);
+        FloatingTextStrRefOnCreature(8502, oCaster); // Item Creation successful
+        return TRUE;
+     }
+     else
+     {
+        FloatingTextStrRefOnCreature(76417, oCaster); // Item Creation Failed
+        return TRUE;
+     }
+
+    return FALSE;
+}
+
+// -----------------------------------------------------------------------------
+// Georg, July 2003
+// Checks if the caster intends to use his item creation feats and
+// calls appropriate item creation subroutine if conditions are met
+// (spell cast on correct item, etc).
+// Returns TRUE if the spell was used for an item creation feat
+// -----------------------------------------------------------------------------
+int CIGetSpellWasUsedForItemCreation(object oSpellTarget)
+{
+    object oCaster = OBJECT_SELF;
+
+    // -------------------------------------------------------------------------
+    // Spell cast on crafting base item (blank scroll, etc) ?
+    // -------------------------------------------------------------------------
+    if (!CIGetIsCraftFeatBaseItem(oSpellTarget))
+    {
+       return FALSE; // not blank scroll baseitem
+    }
+    else
+    {
+        // ---------------------------------------------------------------------
+        // Check Item Creation Feats were disabled through x2_inc_switches
+        // ---------------------------------------------------------------------
+        if (GetModuleSwitchValue(MODULE_SWITCH_DISABLE_ITEM_CREATION_FEATS) == TRUE)
+        {
+            FloatingTextStrRefOnCreature(83612, oCaster); // item creation disabled
+            return FALSE;
+        }
+
+        // ---------------------------------------------------------------------
+        // Ensure that item creation does not work one item was cast on another
+        // ---------------------------------------------------------------------
+        if (GetSpellCastItem() != OBJECT_INVALID)
+        {
+            FloatingTextStrRefOnCreature(83373, oCaster); // can not use one item to enchant another
+            return TRUE;
+        }
+
+        // ---------------------------------------------------------------------
+        // Ok, what kind of feat the user wants to use by examining the base itm
+        // ---------------------------------------------------------------------
+        int nBt = GetBaseItemType(oSpellTarget);
+        int nRet = FALSE;
+        switch (nBt)
+        {
+                case 101 :
+                            // -------------------------------------------------
+                            // Brew Potion
+                            // -------------------------------------------------
+                           nRet = CICraftCheckBrewPotion(oSpellTarget,oCaster);
+                           break;
+
+
+                case 102 :
+                            // -------------------------------------------------
+                            // Scribe Scroll
+                            // -------------------------------------------------
+                           nRet = CICraftCheckScribeScroll(oSpellTarget,oCaster);
+                           break;
+
+
+                case 103 :
+                            // -------------------------------------------------
+                            // Craft Wand
+                            // -------------------------------------------------
+                           nRet = CICraftCheckCraftWand(oSpellTarget,oCaster);
+                           break;
+
+                // you could add more crafting basetypes here....
+        }
+
+        return nRet;
+
+    }
+
+}
+
+// -----------------------------------------------------------------------------
+// Makes oPC do a Craft check using nSkill to create the item supplied in sResRe
+// If oContainer is specified, the item will be created there.
+// Throwing weapons are created with stack sizes of 10, ammo with 20
+// -----------------------------------------------------------------------------
+object CIUseCraftItemSkill(object oPC, int nSkill, string sResRef, int nDC, object oContainer = OBJECT_INVALID)
+{
+    int bSuccess = GetIsSkillSuccessful(oPC, nSkill, nDC);
+    object oNew;
+    if (bSuccess)
+    {
+        // actual item creation
+        // if a crafting container was specified, create inside
+        if (oContainer == OBJECT_INVALID)
+        {
+            oNew =CreateItemOnObject(sResRef,oPC);
+
+        }
+        else
+        {
+            oNew =CreateItemOnObject(sResRef,oContainer);
+        }
+
+        int nBase = GetBaseItemType(oNew);
+        if (nBase ==  BASE_ITEM_BOLT || nBase ==  BASE_ITEM_ARROW || nBase ==  BASE_ITEM_BULLET)
+        {
+            SetItemStackSize(oNew, 20);
+        }
+        else if (nBase ==  BASE_ITEM_THROWINGAXE || nBase ==  BASE_ITEM_SHURIKEN || nBase ==  BASE_ITEM_DART)
+        {
+            SetItemStackSize(oNew, 10);
+        }
+    }
+    else
+    {
+        oNew = OBJECT_INVALID;
+    }
+
+    return oNew;
+}
+
+// -----------------------------------------------------------------------------
+// georg, 2003-06-13 (
+// Craft an item. This is only to be called from the crafting conversation
+// spawned by x2_s2_crafting!!!
+// -----------------------------------------------------------------------------
+int CIDoCraftItemFromConversation(int nNumber)
+{
+  string    sNumber     = IntToString(nNumber);
+  object    oPC         = GetPCSpeaker();
+  //object    oMaterial   = GetLocalObject(oPC,"X2_CI_CRAFT_MATERIAL");
+  object    oMajor       = GetLocalObject(oPC,"X2_CI_CRAFT_MAJOR");
+  object    oMinor       = GetLocalObject(oPC,"X2_CI_CRAFT_MINOR");
+  int       nSkill      =  GetLocalInt(oPC,"X2_CI_CRAFT_SKILL");
+  int       nMode       =  GetLocalInt(oPC,"X2_CI_CRAFT_MODE");
+  string    sResult;
+  string    s2DA;
+  int       nDC;
+
+
+    DeleteLocalObject(oPC,"X2_CI_CRAFT_MAJOR");
+    DeleteLocalObject(oPC,"X2_CI_CRAFT_MINOR");
+
+    if (!GetIsObjectValid(oMajor))
+    {
+          FloatingTextStrRefOnCreature(83374,oPC);    //"Invalid target"
+          DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS");
+          return FALSE;
+    }
+    else
+    {
+          if (GetItemPossessor(oMajor) != oPC)
+          {
+               FloatingTextStrRefOnCreature(83354,oPC);     //"Invalid target"
+               DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS");
+               return FALSE;
+          }
+    }
+
+    // If we are in container mode,
+    if (nMode == X2_CI_CRAFTMODE_CONTAINER)
+    {
+        if (!GetIsObjectValid(oMinor))
+        {
+              FloatingTextStrRefOnCreature(83374,oPC);    //"Invalid target"
+              DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS");
+              return FALSE;
+        }
+        else if (GetItemPossessor(oMinor) != oPC)
+         {
+              FloatingTextStrRefOnCreature(83354,oPC);   //"Invalid target"
+              DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS");
+              return FALSE;
+         }
+   }
+
+
+  if (nSkill == 26) // craft weapon
+  {
+        s2DA = X2_CI_CRAFTING_WP_2DA;
+  }
+  else if (nSkill == 25)
+  {
+        s2DA = X2_CI_CRAFTING_AR_2DA;
+  }
+
+  int nRow = GetLocalInt(oPC,"X2_CI_CRAFT_RESULTROW");
+  struct craft_struct stItem =  CIGetCraftItemStructFrom2DA(s2DA,nRow,nNumber);
+  object oContainer = OBJECT_INVALID;
+
+  // ---------------------------------------------------------------------------
+  // We once used a crafting container, but found it too complicated. Code is still
+  // left in here for the community
+  // ---------------------------------------------------------------------------
+  if (nMode == X2_CI_CRAFTMODE_CONTAINER)
+  {
+        oContainer = GetItemPossessedBy(oPC,"x2_it_craftcont");
+  }
+
+  // Do the crafting...
+  object oRet = CIUseCraftItemSkill( oPC, nSkill, stItem.sResRef, stItem.nDC, oContainer) ;
+
+  // * If you made an item, it should always be identified;
+  SetIdentified(oRet,TRUE);
+
+  if (GetIsObjectValid(oRet))
+  {
+      // -----------------------------------------------------------------------
+      // Copy all item properties from the major object on the resulting item
+      // Through we problably won't use this, its a neat thing to have for the
+      // community
+      // to enable magic item creation from the crafting system
+      // -----------------------------------------------------------------------
+       if (GetGold(oPC)<stItem.nCost)
+       {
+          DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS");
+          FloatingTextStrRefOnCreature(86675,oPC);
+          DestroyObject(oRet);
+          return FALSE;
+       }
+       else
+       {
+          TakeGoldFromCreature(stItem.nCost, oPC,TRUE);
+          IPCopyItemProperties(oMajor,oRet);
+        }
+      // set success variable for conversation
+      SetLocalInt(oPC,"X2_CRAFT_SUCCESS",TRUE);
+  }
+  else
+  {
+      TakeGoldFromCreature(stItem.nCost / 4, oPC,TRUE);
+      // make sure there is no success
+      DeleteLocalInt(oPC,"X2_CRAFT_SUCCESS");
+  }
+
+  // Destroy first material component
+  DestroyObject (oMajor);
+
+  // if we are running in a container, destroy the second material component as well
+  if (nMode == X2_CI_CRAFTMODE_CONTAINER || nMode == X2_CI_CRAFTMODE_ASSEMBLE)
+  {
+      DestroyObject (oMinor);
+  }
+  int nRet = (oRet != OBJECT_INVALID);
+  return nRet;
+}
+
+// -----------------------------------------------------------------------------
+// Retrieve craft information on a certain item
+// -----------------------------------------------------------------------------
+struct craft_struct CIGetCraftItemStructFrom2DA(string s2DA, int nRow, int nItemNo)
+{
+   struct craft_struct stRet;
+   string sNumber = IntToString(nItemNo);
+
+   stRet.nRow    =  nRow;
+   string sLabel = Get2DAString(s2DA,"Label"+ sNumber, nRow);
+   if (sLabel == "")
+   {
+      return stRet;  // empty, no need to read further
+   }
+   int nStrRef = StringToInt(sLabel);
+   if (nStrRef != 0)  // Handle bioware StrRefs
+   {
+      sLabel = GetStringByStrRef(nStrRef);
+   }
+   stRet.sLabel  = sLabel;
+   stRet.nDC     =  StringToInt(Get2DAString(s2DA,"DC"+ sNumber, nRow));
+   stRet.nCost   =  StringToInt(Get2DAString(s2DA,"CostGP"+ sNumber, nRow));
+   stRet.sResRef =  Get2DAString(s2DA,"ResRef"+ sNumber, nRow);
+
+   return stRet;
+}
+
+// -----------------------------------------------------------------------------
+// Return the cost
+// -----------------------------------------------------------------------------
+int CIGetItemPartModificationCost(object oOldItem, int nPart)
+{
+    int nRet = StringToInt(Get2DAString(X2_IP_ARMORPARTS_2DA,"CraftCost",nPart));
+    nRet = (GetGoldPieceValue(oOldItem) / 100 * nRet);
+
+    // minimum cost for modification is 1 gp
+    if (nRet == 0)
+    {
+        nRet =1;
+    }
+    return nRet;
+}
+
+// -----------------------------------------------------------------------------
+// Return the DC for modifying a certain armor part on oOldItem
+// -----------------------------------------------------------------------------
+int CIGetItemPartModificationDC(object oOldItem, int nPart)
+{
+    int nRet = StringToInt(Get2DAString(X2_IP_ARMORPARTS_2DA,"CraftDC",nPart));
+    // minimum cost for modification is 1 gp
+    return nRet;
+}
+
+// -----------------------------------------------------------------------------
+// returns the dc
+// dc to modify oOlditem to look like oNewItem
+// -----------------------------------------------------------------------------
+int CIGetArmorModificationCost(object oOldItem, object oNewItem)
+{
+   int nTotal = 0;
+   int nPart;
+   for (nPart = 0; nPart<ITEM_APPR_ARMOR_NUM_MODELS; nPart++)
+   {
+
+        if (GetItemAppearance(oOldItem,ITEM_APPR_TYPE_ARMOR_MODEL, nPart) !=GetItemAppearance(oNewItem,ITEM_APPR_TYPE_ARMOR_MODEL, nPart))
+        {
+            nTotal+= CIGetItemPartModificationCost(oOldItem,nPart);
+        }
+   }
+
+   // Modification Cost should not exceed value of old item +1 GP
+   if (nTotal > GetGoldPieceValue(oOldItem))
+   {
+        nTotal = GetGoldPieceValue(oOldItem)+1;
+   }
+   return nTotal;
+}
+
+// -----------------------------------------------------------------------------
+// returns the cost in gold piece that it would
+// cost to modify oOlditem to look like oNewItem
+// -----------------------------------------------------------------------------
+int CIGetArmorModificationDC(object oOldItem, object oNewItem)
+{
+   int nTotal = 0;
+   int nPart;
+   int nDC =0;
+   for (nPart = 0; nPart<ITEM_APPR_ARMOR_NUM_MODELS; nPart++)
+   {
+
+        if (GetItemAppearance(oOldItem,ITEM_APPR_TYPE_ARMOR_MODEL, nPart) !=GetItemAppearance(oNewItem,ITEM_APPR_TYPE_ARMOR_MODEL, nPart))
+        {
+            nDC = CIGetItemPartModificationDC(oOldItem,nPart);
+            if (nDC>nTotal)
+            {
+                nTotal = nDC;
+            }
+        }
+   }
+
+   nTotal = GetItemACValue(oOldItem) + nTotal + 5;
+
+   return nTotal;
+}
+
+// -----------------------------------------------------------------------------
+// returns TRUE if the spell matching nSpellID is prevented from being used
+// with the CraftFeat matching nFeatID
+// This is controlled in des_crft_spells.2da
+// -----------------------------------------------------------------------------
+int CIGetIsSpellRestrictedFromCraftFeat(int nSpellID, int nFeatID)
+{
+    string sCol;
+    if (nFeatID == X2_CI_BREWPOTION_FEAT_ID)
+    {
+        sCol ="NoPotion";
+    }
+    else if (nFeatID == X2_CI_SCRIBESCROLL_FEAT_ID)
+    {
+        sCol = "NoScroll";
+    }
+    else if (nFeatID == X2_CI_CRAFTWAND_FEAT_ID)
+    {
+         sCol = "NoWand";
+    }
+
+    string sRet = Get2DAString(X2_CI_CRAFTING_SP_2DA,sCol,nSpellID);
+    int nRet = (sRet == "1") ;
+
+    return nRet;
+}
+
+// -----------------------------------------------------------------------------
+// Retrieve the row in des_crft_bmat too look up receipe
+// -----------------------------------------------------------------------------
+int CIGetCraftingReceipeRow(int nMode, object oMajor, object oMinor, int nSkill)
+{
+    if (nMode == X2_CI_CRAFTMODE_CONTAINER || nMode == X2_CI_CRAFTMODE_ASSEMBLE )
+    {
+        int nMinorId = StringToInt(Get2DAString("des_crft_amat",GetTag(oMinor),1));
+        int nMajorId = StringToInt(Get2DAString("des_crft_bmat",GetTag(oMajor),nMinorId));
+        return nMajorId;
+    }
+    else if (nMode == X2_CI_CRAFTMODE_BASE_ITEM)
+    {
+       int nLookUpRow;
+       string sTag = GetTag(oMajor);
+       switch (nSkill)
+       {
+            case 26: nLookUpRow =1 ; break;
+            case 25: nLookUpRow= 2 ; break;
+       }
+       int nRet = StringToInt(Get2DAString(X2_CI_CRAFTING_MAT_2DA,sTag,nLookUpRow));
+       return nRet;
+    }
+    else
+    {
+        return 0; // error
+    }
+}
+
+// -----------------------------------------------------------------------------
+// used to set all variable required for the crafting conversation
+// (Used materials, number of choises, 2da row, skill and mode)
+// -----------------------------------------------------------------------------
+void CISetupCraftingConversation(object oPC, int nNumber, int nSkill, int nReceipe, object oMajor, object oMinor, int nMode)
+{
+
+  SetLocalObject(oPC,"X2_CI_CRAFT_MAJOR",oMajor);
+  if (nMode == X2_CI_CRAFTMODE_CONTAINER ||  nMode == X2_CI_CRAFTMODE_ASSEMBLE )
+  {
+      SetLocalObject(oPC,"X2_CI_CRAFT_MINOR", oMinor);
+  }
+  SetLocalInt(oPC,"X2_CI_CRAFT_NOOFITEMS",nNumber);    // number of crafting choises for this material
+  SetLocalInt(oPC,"X2_CI_CRAFT_SKILL",nSkill);          // skill used (craft armor or craft waeapon)
+  SetLocalInt(oPC,"X2_CI_CRAFT_RESULTROW",nReceipe);    // number of crafting choises for this material
+  SetLocalInt(oPC,"X2_CI_CRAFT_MODE",nMode);
+}
+
+// -----------------------------------------------------------------------------
+// oItem - The item used for crafting
+// -----------------------------------------------------------------------------
+struct craft_receipe_struct CIGetCraftingModeFromTarget(object oPC,object oTarget, object oItem = OBJECT_INVALID)
+{
+  struct craft_receipe_struct stStruct;
+
+
+  if (GetBaseItemType(oItem) == 112 ) // small
+  {
+       stStruct.oMajor = oItem;
+       stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM;
+       return stStruct;
+  }
+
+  if (!GetIsObjectValid(oTarget))
+  {
+     stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+     return stStruct;
+  }
+
+
+  // A small craftitem was used on a large one
+  if (GetBaseItemType(oItem) == 110 ) // small
+  {
+        if (GetBaseItemType(oTarget) == 109)  // large
+        {
+            stStruct.nMode = X2_CI_CRAFTMODE_ASSEMBLE; // Mode is ASSEMBLE
+            stStruct.oMajor = oTarget;
+            stStruct.oMinor = oItem;
+            return stStruct;
+        }
+        else
+        {
+            FloatingTextStrRefOnCreature(84201,oPC);
+        }
+
+  }
+
+  // -----------------------------------------------------------------------------
+  // *** CONTAINER IS NO LONGER USED IN OFFICIAL CAMPAIGN
+  //     BUT CODE LEFT IN FOR COMMUNITY.
+  //     THE FOLLOWING CONDITION IS NEVER TRUE FOR THE OC (no crafting container)
+  //     To reactivate, create a container with tag x2_it_craftcont
+  int bCraftCont = (GetTag(oTarget) == "x2_it_craftcont");
+
+
+  if (bCraftCont == TRUE)
+  {
+    // First item in container is baseitem  .. mode = baseitem
+    if ( GetBaseItemType(GetFirstItemInInventory(oTarget)) == 112)
+    {
+        stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM;
+        stStruct.oMajor = GetFirstItemInInventory(oTarget);
+        return stStruct;
+    }
+    else
+    {
+        object oTest = GetFirstItemInInventory(oTarget);
+        int nCount =1;
+        int bMajor = FALSE;
+        int bMinor = FALSE;
+        // No item in inventory ... mode = fail
+        if (!GetIsObjectValid(oTest))
+        {
+            FloatingTextStrRefOnCreature(84200,oPC);
+            stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+            return stStruct;
+        }
+        else
+        {
+            while (GetIsObjectValid(oTest) && nCount <3)
+            {
+                if (GetBaseItemType(oTest) == 109)
+                {
+                    stStruct.oMajor = oTest;
+                    bMajor = TRUE;
+                }
+                else if (GetBaseItemType(oTest) == 110)
+                {
+                    stStruct.oMinor = oTest;
+                    bMinor = TRUE;
+                }
+                else if ( GetBaseItemType(oTest) == 112)
+                {
+                    stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM;
+                    stStruct.oMajor = oTest;
+                    return stStruct;
+                }
+                oTest = GetNextItemInInventory(oTarget);
+                if (GetIsObjectValid(oTest))
+                {
+                    nCount ++;
+                }
+            }
+
+            if (nCount >2)
+            {
+                FloatingTextStrRefOnCreature(84356,oPC);
+                stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+                return stStruct;
+            }
+            else if (nCount <2)
+            {
+                FloatingTextStrRefOnCreature(84356,oPC);
+                stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+                return stStruct;
+            }
+
+            if (bMajor && bMinor)
+            {
+                stStruct.nMode =  X2_CI_CRAFTMODE_CONTAINER;
+                return stStruct;
+            }
+            else
+            {
+                FloatingTextStrRefOnCreature(84356,oPC);
+                //FloatingTextStringOnCreature("Temp: Wrong combination of items in the crafting container",oPC);
+                stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+                return stStruct;
+            }
+
+        }
+    }
+  }
+  else
+  {
+    // not a container but a baseitem
+    if (GetBaseItemType(oTarget) == 112)
+    {
+       stStruct.nMode = X2_CI_CRAFTMODE_BASE_ITEM;
+       stStruct.oMajor = oTarget;
+       return stStruct;
+
+    }
+    else
+    {
+          if (GetBaseItemType(oTarget) == 109 || GetBaseItemType(oTarget) == 110)
+          {
+              FloatingTextStrRefOnCreature(84357,oPC);
+              stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+              return stStruct;
+          }
+          else
+          {
+              FloatingTextStrRefOnCreature(84357,oPC);
+              // not a valid item
+              stStruct.nMode = X2_CI_CRAFTMODE_INVALID;
+              return stStruct;
+
+          }
+    }
+  }
+}
+
+// -----------------------------------------------------------------------------
+//                 *** Crafting Conversation Functions ***
+// -----------------------------------------------------------------------------
+int CIGetInModWeaponOrArmorConv(object oPC)
+{
+    return GetLocalInt(oPC,"X2_L_CRAFT_MODIFY_CONVERSATION");
+}
+
+
+void CISetCurrentModMode(object oPC, int nMode)
+{
+    if (nMode == X2_CI_MODMODE_INVALID)
+    {
+        DeleteLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE");
+    }
+    else
+    {
+        SetLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE",nMode);
+    }
+}
+
+int CIGetCurrentModMode(object oPC)
+{
+  return GetLocalInt(oPC,"X2_L_CRAFT_MODIFY_MODE");
+}
+
+
+object CIGetCurrentModBackup(object oPC)
+{
+    return GetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_BACKUP");
+}
+
+object CIGetCurrentModItem(object oPC)
+{
+    return GetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_ITEM");
+}
+
+
+void CISetCurrentModBackup(object oPC, object oBackup)
+{
+    SetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_BACKUP",oBackup);
+}
+
+void CISetCurrentModItem(object oPC, object oItem)
+{
+    SetLocalObject(GetPCSpeaker(),"X2_O_CRAFT_MODIFY_ITEM",oItem);
+}
+
+
+// -----------------------------------------------------------------------------
+// * This does multiple things:
+//   -  store the part currently modified
+//   -  setup the custom token for the conversation
+//   -  zoom the camera to that part
+// -----------------------------------------------------------------------------
+void CISetCurrentModPart(object oPC, int nPart, int nStrRef)
+{
+    SetLocalInt(oPC,"X2_TAILOR_CURRENT_PART",nPart);
+
+    if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR)
+    {
+
+        // * Make the camera float near the PC
+        float fFacing  = GetFacing(oPC) + 180.0;
+
+        if (nPart == ITEM_APPR_ARMOR_MODEL_LSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_LFOREARM ||
+            nPart == ITEM_APPR_ARMOR_MODEL_LHAND || nPart == ITEM_APPR_ARMOR_MODEL_LBICEP)
+        {
+            fFacing += 80.0;
+        }
+
+        if (nPart == ITEM_APPR_ARMOR_MODEL_RSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_RFOREARM ||
+            nPart == ITEM_APPR_ARMOR_MODEL_RHAND || nPart == ITEM_APPR_ARMOR_MODEL_RBICEP)
+        {
+            fFacing -= 80.0;
+        }
+
+        float fPitch = 75.0;
+        if (fFacing > 359.0)
+        {
+            fFacing -=359.0;
+        }
+
+        float  fDistance = 3.5f;
+        if (nPart == ITEM_APPR_ARMOR_MODEL_PELVIS || nPart == ITEM_APPR_ARMOR_MODEL_BELT )
+        {
+            fDistance = 2.0f;
+        }
+
+        if (nPart == ITEM_APPR_ARMOR_MODEL_LSHOULDER || nPart == ITEM_APPR_ARMOR_MODEL_RSHOULDER )
+        {
+            fPitch = 50.0f;
+            fDistance = 3.0f;
+        }
+        else  if (nPart == ITEM_APPR_ARMOR_MODEL_LFOREARM || nPart == ITEM_APPR_ARMOR_MODEL_LHAND)
+        {
+            fDistance = 2.0f;
+            fPitch = 60.0f;
+        }
+        else if (nPart == ITEM_APPR_ARMOR_MODEL_NECK)
+        {
+            fPitch = 90.0f;
+        }
+        else if (nPart == ITEM_APPR_ARMOR_MODEL_RFOOT || nPart == ITEM_APPR_ARMOR_MODEL_LFOOT  )
+        {
+            fDistance = 3.5f;
+            fPitch = 47.0f;
+        }
+         else if (nPart == ITEM_APPR_ARMOR_MODEL_LTHIGH || nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH )
+        {
+            fDistance = 2.5f;
+            fPitch = 65.0f;
+        }
+        else if (        nPart == ITEM_APPR_ARMOR_MODEL_RSHIN || nPart == ITEM_APPR_ARMOR_MODEL_LSHIN    )
+        {
+            fDistance = 3.5f;
+            fPitch = 95.0f;
+        }
+
+        if (GetRacialType(oPC)  == RACIAL_TYPE_HALFORC)
+        {
+            fDistance += 1.0f;
+        }
+
+        SetCameraFacing(fFacing, fDistance, fPitch,CAMERA_TRANSITION_TYPE_VERY_FAST) ;
+    }
+
+    int nCost = GetLocalInt(oPC,"X2_TAILOR_CURRENT_COST");
+    int nDC = GetLocalInt(oPC,"X2_TAILOR_CURRENT_DC");
+
+    SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE,IntToString(nCost));
+    SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE+1,IntToString(nDC));
+
+
+    SetCustomToken(XP_IP_ITEMMODCONVERSATION_CTOKENBASE,GetStringByStrRef(nStrRef));
+}
+
+int CIGetCurrentModPart(object oPC)
+{
+    return GetLocalInt(oPC,"X2_TAILOR_CURRENT_PART");
+}
+
+
+void CISetDefaultModItemCamera(object oPC)
+{
+    float fDistance = 3.5f;
+    float fPitch =  75.0f;
+    float fFacing;
+
+    if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_ARMOR)
+    {
+        fFacing  = GetFacing(oPC) + 180.0;
+        if (fFacing > 359.0)
+        {
+            fFacing -=359.0;
+        }
+    }
+    else if (CIGetCurrentModMode(oPC) == X2_CI_MODMODE_WEAPON)
+    {
+        fFacing  = GetFacing(oPC) + 180.0;
+        fFacing -= 90.0;
+        if (fFacing > 359.0)
+        {
+            fFacing -=359.0;
+        }
+    }
+
+    SetCameraFacing(fFacing, fDistance, fPitch,CAMERA_TRANSITION_TYPE_VERY_FAST) ;
+}
+
+void CIUpdateModItemCostDC(object oPC, int nDC, int nCost)
+{
+        SetLocalInt(oPC,"X2_TAILOR_CURRENT_COST", nCost);
+        SetLocalInt(oPC,"X2_TAILOR_CURRENT_DC",nDC);
+        SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE,IntToString(nCost));
+        SetCustomToken(X2_CI_MODIFYARMOR_GP_CTOKENBASE+1,IntToString(nDC));
+}
+
+
+// dc to modify oOlditem to look like oNewItem
+int CIGetWeaponModificationCost(object oOldItem, object oNewItem)
+{
+   int nTotal = 0;
+   int nPart;
+   for (nPart = 0; nPart<=2; nPart++)
+   {
+        if (GetItemAppearance(oOldItem,ITEM_APPR_TYPE_WEAPON_MODEL, nPart) !=GetItemAppearance(oNewItem,ITEM_APPR_TYPE_WEAPON_MODEL, nPart))
+        {
+            nTotal+= (GetGoldPieceValue(oOldItem)/4)+1;
+        }
+   }
+
+   // Modification Cost should not exceed value of old item +1 GP
+   if (nTotal > GetGoldPieceValue(oOldItem))
+   {
+        nTotal = GetGoldPieceValue(oOldItem)+1;
+   }
+   return nTotal;
+}
+
+
+
diff --git a/_removed/x2_s0_acidshth.ncs b/_removed/x2_s0_acidshth.ncs
new file mode 100644
index 0000000..e9ae392
Binary files /dev/null and b/_removed/x2_s0_acidshth.ncs differ
diff --git a/_removed/x2_s0_acidshth.nss b/_removed/x2_s0_acidshth.nss
new file mode 100644
index 0000000..1e9d140
--- /dev/null
+++ b/_removed/x2_s0_acidshth.nss
@@ -0,0 +1,69 @@
+//::///////////////////////////////////////////////
+//:: Mestil's Acid Sheath
+//:: X2_S0_AcidShth
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    This spell creates an acid shield around your
+    person. Any creature striking you with its body
+    does normal damage, but at the same time the
+    attacker takes 1d6 points +2 points per caster
+    level of acid damage. Weapons with exceptional
+    reach do not endanger thier uses in this way.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Preston Watamaniuk
+//:: Created On: Jan 7, 2002
+//:: 2003-07-07: Stacking Spell Pass, Georg Zoeller
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+
+/*
+  Spellcast Hook Code
+  Added 2003-07-07 by Georg Zoeller
+  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 eVis = EffectVisualEffect(448);
+    int nDuration = spell.Level;
+    int nDamage = spell.Level/2;
+    effect eShield = EffectDamageShield(nDamage, DAMAGE_BONUS_1d6, DAMAGE_TYPE_ACID);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+
+    //Link effects
+    effect eLink = EffectLinkEffects(eShield, eDur);
+    eLink = EffectLinkEffects(eLink, eVis);
+
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+    //Enter Metamagic conditions
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2; //Duration is +100%
+    }
+
+    // 2003-07-07: Stacking Spell Pass, Georg
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Apply the VFX impact and effects
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+}
diff --git a/_removed/x2_s0_batttide.ncs b/_removed/x2_s0_batttide.ncs
new file mode 100644
index 0000000..1e911f9
Binary files /dev/null and b/_removed/x2_s0_batttide.ncs differ
diff --git a/_removed/x2_s0_batttide.nss b/_removed/x2_s0_batttide.nss
new file mode 100644
index 0000000..273371f
--- /dev/null
+++ b/_removed/x2_s0_batttide.nss
@@ -0,0 +1,84 @@
+//::///////////////////////////////////////////////
+//:: Battletide
+//:: X2_S0_BattTide
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    You create an aura that steals energy from your
+    enemies. Your enemies suffer a -2 circumstance
+    penalty on saves, attack rolls, and damage rolls,
+    once entering the aura. On casting, you gain a
+    +2 circumstance bonus to your saves, attack rolls,
+    and damage rolls.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Dec 04, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs 06/06/03
+/*
+Patch 1.71, fix by Shadoow
+
+- disabled aura stacking
+- moving bug fixed, now caster gains benefit of aura all the time, (cannot guarantee the others,
+thats module-related)
+*/
+
+#include "70_inc_spells"
+#include "x2_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-07-07 by Georg Zoeller
+  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 eAOE = EffectAreaOfEffect(AOE_MOB_TIDE_OF_BATTLE);
+    effect eVis = EffectVisualEffect(VFX_IMP_AURA_UNEARTHLY);
+    effect eVis2 = EffectVisualEffect(VFX_IMP_HOLY_AID);
+    effect eSaves = EffectSavingThrowIncrease(SAVING_THROW_ALL,2);
+    effect eAttack = EffectAttackIncrease(2);
+    effect eDamage = EffectDamageIncrease(2,DAMAGE_TYPE_MAGICAL);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    //Link the effects
+    effect eLink = EffectLinkEffects(eAttack,eDamage);
+    eLink = EffectLinkEffects(eLink,eSaves);
+    eLink = EffectLinkEffects(eLink,eDur);
+
+    eLink = EffectLinkEffects(eLink,eVis);
+    eLink = EffectLinkEffects(eLink,eAOE);
+
+    int nDuration = spell.Level;
+
+    //Make metamagic check for extend
+    if(spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration *2;   //Duration is +100%
+    }
+
+    //prevent stacking
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    //Apply the VFX impact and linked effects
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, spell.Target);
+
+    //Create the AOE object at the selected location
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+    spellsSetupNewAOE("VFX_MOB_BATTLETIDE");
+}
diff --git a/_removed/x2_s0_blckstff.ncs b/_removed/x2_s0_blckstff.ncs
new file mode 100644
index 0000000..4cda8f6
Binary files /dev/null and b/_removed/x2_s0_blckstff.ncs differ
diff --git a/_removed/x2_s0_blckstff.nss b/_removed/x2_s0_blckstff.nss
new file mode 100644
index 0000000..a0e2f4a
--- /dev/null
+++ b/_removed/x2_s0_blckstff.nss
@@ -0,0 +1,96 @@
+//::///////////////////////////////////////////////
+//:: Blackstaff
+//:: X2_S0_Blckstff
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+  Adds +4 enhancement bonus, On Hit: Dispel.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Nov 29, 2002
+//:://////////////////////////////////////////////
+//:: Updated by Andrew Nobbs May 07, 2003
+//:: 2003-07-07: Stacking Spell Pass, Georg Zoeller
+//:: 2003-07-15: Complete Rewrite to make use of Item Property System
+/*
+Patch 1.70, fix by Shadooow
+
+- VFX added if cast on weapon on ground
+*/
+
+#include "70_inc_spells"
+#include "x2_i0_spells"
+#include "x2_inc_spellhook"
+
+void AddBlackStaffEffectOnWeapon (object oTarget, float fDuration)
+{
+    IPSafeAddItemProperty(oTarget, ItemPropertyEnhancementBonus(5), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
+    //IPSafeAddItemProperty(oTarget, ItemPropertyOnHitProps(IP_CONST_ONHIT_DISPELMAGIC, IP_CONST_ONHIT_SAVEDC_16), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
+    itemproperty pStaff = ItemPropertyOnHitCastSpell(125, 1);
+    IPSafeAddItemProperty(oTarget, pStaff, fDuration);
+    SetLocalInt(oTarget, "Blackstaff", 1);
+    DelayCommand(fDuration-0.1, SetLocalInt(oTarget, "Blackstaff", 0));
+    IPSafeAddItemProperty(oTarget, ItemPropertyVisualEffect(ITEM_VISUAL_EVIL), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
+}
+
+void main()
+{
+    /*
+      Spellcast Hook Code
+      Added 2003-07-07 by Georg Zoeller
+      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 eVis = EffectVisualEffect(VFX_IMP_EVIL_HELP);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    int nDuration = spell.Level;
+
+    object oMyWeapon = IPGetTargetedOrEquippedMeleeWeapon(spell.Target);
+    object oPossessor = GetItemPossessor(oMyWeapon);
+
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration * 2; //Duration is +100%
+    }
+
+    if(GetIsObjectValid(oMyWeapon))
+    {
+        //if the possessor isn't valid, nothing should happen
+        SignalEvent(oPossessor, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+        if (GetBaseItemType(oMyWeapon) == BASE_ITEM_QUARTERSTAFF)
+        {
+            if(GetIsObjectValid(oPossessor))
+            {
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPossessor);
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oPossessor, RoundsToSeconds(nDuration));
+            }
+            else
+            {
+                ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, spell.Loc);
+            }
+            AddBlackStaffEffectOnWeapon(oMyWeapon, RoundsToSeconds(nDuration));
+        }
+        else
+        {
+            FloatingTextStrRefOnCreature(83620, spell.Caster);  // not a qstaff
+        }
+    }
+    else
+    {
+        FloatingTextStrRefOnCreature(83615, spell.Caster);
+    }
+}
diff --git a/_removed/x2_s0_bldethst.ncs b/_removed/x2_s0_bldethst.ncs
new file mode 100644
index 0000000..f368561
Binary files /dev/null and b/_removed/x2_s0_bldethst.ncs differ
diff --git a/_removed/x2_s0_bldethst.nss b/_removed/x2_s0_bldethst.nss
new file mode 100644
index 0000000..d6fd98e
--- /dev/null
+++ b/_removed/x2_s0_bldethst.nss
@@ -0,0 +1,91 @@
+//::///////////////////////////////////////////////
+//:: Blade Thrist
+//:: X2_S0_BldeThst
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+  Grants a +3 enhancement bonus to a slashing weapon
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Nov 27, 2002
+//:://////////////////////////////////////////////
+//:: Updated by Andrew Nobbs May 08, 2003
+//:: 2003-07-07: Stacking Spell Pass, Georg Zoeller
+//:: 2003-07-21: Complete Rewrite to make use of Item Property System
+/*
+Patch 1.70
+
+- signal event never fired
+- VFX added if cast on weapon on ground
+*/
+
+#include "70_inc_spells"
+#include "x2_i0_spells"
+#include "x2_inc_spellhook"
+
+void  AddEnhanceEffectToWeapon(object oMyWeapon, float fDuration)
+{
+    IPSafeAddItemProperty(oMyWeapon, ItemPropertyEnhancementBonus(3), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
+}
+
+void main()
+{
+    /*
+      Spellcast Hook Code
+      Added 2003-07-07 by Georg Zoeller
+      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 eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+    int nDuration = 2 * spell.Level;
+
+    object oMyWeapon = IPGetTargetedOrEquippedMeleeWeapon();
+    object oPossessor = GetItemPossessor(oMyWeapon);
+
+    if (spell.Meta == METAMAGIC_EXTEND)
+    {
+        nDuration = nDuration * 2; //Duration is +100%
+    }
+
+    if(GetIsObjectValid(oMyWeapon))
+    {
+        //if the possessor isn't valid, nothing should happen
+        SignalEvent(oPossessor, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+
+        //if (GetSlashingWeapon(oMyWeapon))
+        //{
+            if(GetIsObjectValid(oPossessor))
+            {
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPossessor);
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oPossessor, RoundsToSeconds(nDuration));
+            }
+            else
+            {
+                ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, spell.Loc);
+            }
+            AddEnhanceEffectToWeapon(oMyWeapon, RoundsToSeconds(nDuration));
+        /*}
+        else
+        {
+            FloatingTextStrRefOnCreature(83621, spell.Caster); // not a slashing weapon
+        } */
+    }
+    else
+    {
+        FloatingTextStrRefOnCreature(83615, spell.Caster);
+    }
+}
diff --git a/_removed/x2_s0_crumble.ncs b/_removed/x2_s0_crumble.ncs
new file mode 100644
index 0000000..4cbe299
Binary files /dev/null and b/_removed/x2_s0_crumble.ncs differ
diff --git a/_removed/x2_s0_crumble.nss b/_removed/x2_s0_crumble.nss
new file mode 100644
index 0000000..73f7c2a
--- /dev/null
+++ b/_removed/x2_s0_crumble.nss
@@ -0,0 +1,118 @@
+//::///////////////////////////////////////////////
+//:: Crumble
+//:: X2_S0_Crumble
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+// This spell inflicts 1d6 points of damage per
+// caster level to Constructs to a maximum of 15d6.
+// This spell does not affect living creatures.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: Oct 2003/
+//:: 2004-01-02: GZ: Removed Spell resistance check
+//:://////////////////////////////////////////////
+/*
+Patch 1.70, fix by Shadooow
+
+- was missing target check and could affect friendly tarets at no-pvp area
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void DoCrumble (int nDam, object oCaster, object oTarget);
+
+void main()
+{
+
+    /*
+      Spellcast Hook Code
+      Added 2003-07-07 by Georg Zoeller
+      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
+
+    spellsDeclareMajorVariables();
+    int  nCasterLvl = spell.Level;
+    int  nType      = GetObjectType(spell.Target);
+    int  nRacial    = GetRacialType(spell.Target);
+
+    //Maximum caster level of 15. //minimum safety check is handled in new engine
+    if (nCasterLvl > 12)
+    {
+        nCasterLvl = 12;
+    }
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster) &&
+    (nType == OBJECT_TYPE_CREATURE || nType == OBJECT_TYPE_PLACEABLE || nType == OBJECT_TYPE_DOOR) &&
+    (GetRacialType(spell.Target) == RACIAL_TYPE_CONSTRUCT || GetLevelByClass(CLASS_TYPE_CONSTRUCT,spell.Target)))
+    {
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        effect eCrumb = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrumb, spell.Target);
+
+        int nDam = MaximizeOrEmpower(6,nCasterLvl,spell.Meta);
+        nDam = FloatToInt(nDam * 1.5);
+        if (nDam>0)//can't happen anyway
+        {
+            //----------------------------------------------------------------------
+            // * Sever the tie between spellId and effect, allowing it to
+            // * bypass any magic resistance
+            //----------------------------------------------------------------------
+            /*DelayCommand(0.1,*/DoCrumble(nDam, spell.Caster, spell.Target);//);
+        }
+    }
+    //Make it work on non-constructs
+    else if (spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster) &&
+    (nType == OBJECT_TYPE_CREATURE || nType == OBJECT_TYPE_PLACEABLE || nType == OBJECT_TYPE_DOOR))
+    {
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        effect eCrumb = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrumb, spell.Target);
+
+        int nDam = MaximizeOrEmpower(6,nCasterLvl,spell.Meta);
+        if (nDam>0)//can't happen anyway
+        {
+            //----------------------------------------------------------------------
+            // * Sever the tie between spellId and effect, allowing it to
+            // * bypass any magic resistance
+            //----------------------------------------------------------------------
+            /*DelayCommand(0.1,*/DoCrumble(nDam, spell.Caster, spell.Target);//);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+// This part is moved into a delayed function in order to alllow it to bypass
+// Golem Spell Immunity. Magic works by rendering all effects applied
+// from within a spellscript useless. Delaying the creation and application of
+// an effect causes it to loose it's SpellId, making it possible to ignore
+// Magic Immunity. Hacktastic!  //shadooow: BS, useless, it does work without delay
+//------------------------------------------------------------------------------
+void DoCrumble (int nDam, object oCaster, object oTarget)
+{
+    float  fDist = GetDistanceBetween(oCaster, oTarget);
+    float  fDelay = fDist/(3.0 * log(fDist) + 2.0);
+    effect eDam = EffectDamage(nDam, DAMAGE_TYPE_SONIC);
+    effect eMissile = EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION);
+    effect eCrumb = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
+    effect eVis = EffectVisualEffect(135);
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eCrumb, oTarget);
+    if (GetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT || GetLevelByClass(CLASS_TYPE_CONSTRUCT,oTarget))
+        {
+        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget));
+        }
+    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+    DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
+}
diff --git a/_removed/x2_s0_icedagg.ncs b/_removed/x2_s0_icedagg.ncs
new file mode 100644
index 0000000..8090b49
Binary files /dev/null and b/_removed/x2_s0_icedagg.ncs differ
diff --git a/_removed/x2_s0_icedagg.nss b/_removed/x2_s0_icedagg.nss
new file mode 100644
index 0000000..939d6db
--- /dev/null
+++ b/_removed/x2_s0_icedagg.nss
@@ -0,0 +1,79 @@
+//::///////////////////////////////////////////////
+//:: Ice Dagger
+//:: X2_S0_IceDagg
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+// You create a dagger shapped piece of ice that
+// flies toward the target and deals 1d4 points of
+// cold damage per level (maximum od 5d4)
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Nov 25 , 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs, 02/06/2003
+/*
+Patch 1.70
+
+- removed delay from VFX and effect applications
+*/
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-07-07 by Georg Zoeller
+  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();
+    int nCasterLvl = spell.Level;
+    int nDamage;
+    effect eVis = EffectVisualEffect(VFX_IMP_FROST_S);
+    effect eDam;
+
+    //Limit Caster level for the purposes of damage
+    if (nCasterLvl > 5)
+    {
+        nCasterLvl = 5;
+    }
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Get the distance between the explosion and the target to calculate delay
+//        fDelay = GetDistanceBetweenLocations(spell.Loc, GetLocation(spell.Target))/20;//there shouldn't be delay
+        if (!MyResistSpell(spell.Caster, spell.Target))
+        {
+            //Roll damage for each target
+            nDamage = MaximizeOrEmpower(4,nCasterLvl,spell.Meta,2);
+            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
+            nDamage = GetReflexAdjustedDamage(nDamage, spell.Target, spell.DC, SAVING_THROW_TYPE_COLD, spell.Caster);
+            //Set the damage effect
+            eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
+            if(nDamage > 0)
+            {
+                // Apply effects to the currently selected target.
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target);
+                //This visual effect is applied to the target object not the location as above.  This visual effect
+                //represents the flame that erupts on the target not on the ground.
+                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target);
+            }
+        }
+    }
+}
diff --git a/_removed/x2_s0_vinemcama.ncs b/_removed/x2_s0_vinemcama.ncs
new file mode 100644
index 0000000..11a9f61
Binary files /dev/null and b/_removed/x2_s0_vinemcama.ncs differ
diff --git a/_removed/x2_s0_vinemcama.nss b/_removed/x2_s0_vinemcama.nss
new file mode 100644
index 0000000..82113af
--- /dev/null
+++ b/_removed/x2_s0_vinemcama.nss
@@ -0,0 +1,44 @@
+//::///////////////////////////////////////////////
+//:: Vine Mine, Camouflage: On Enter
+//:: X2_S0_VineMCamA
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Friendly creatures entering the zone of Vine Mine,
+    Camouflage have a +4 added to hide checks.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Nov 25, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs, 02/06/2003
+/*
+Patch 1.70
+
+- aoe signalized wrong spell ID
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    aoesDeclareMajorVariables();
+    object oTarget = GetEnteringObject();
+    if(spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, aoe.Creator))
+    {
+        if(!GetHasSpellEffect(spell.Id, oTarget))
+        {
+            //Fire cast spell at event for the target
+            SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id, FALSE));
+
+            effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
+            effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+            effect eSkill = EffectSkillIncrease(SKILL_HIDE, 8);
+            effect eLink = EffectLinkEffects(eDur, eSkill);
+            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
+        }
+    }
+}
diff --git a/_removed/x2_s0_vinemhmpa.ncs b/_removed/x2_s0_vinemhmpa.ncs
new file mode 100644
index 0000000..fc78be7
Binary files /dev/null and b/_removed/x2_s0_vinemhmpa.ncs differ
diff --git a/_removed/x2_s0_vinemhmpa.nss b/_removed/x2_s0_vinemhmpa.nss
new file mode 100644
index 0000000..1e97b82
--- /dev/null
+++ b/_removed/x2_s0_vinemhmpa.nss
@@ -0,0 +1,47 @@
+//::///////////////////////////////////////////////
+//:: Vine Mine, Hamper Movement: On Enter
+//:: X2_S0_VineMHmpA
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Creatures entering the zone of Vine Mine, Hamper
+    Movement have their movement reduced by 1/2.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Nov 25, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs, 02/06/2003
+/*
+Patch 1.70
+
+- aoe signalized wrong spell ID
+- incorporeal creatures could been affected
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    //Declare major variables
+    aoesDeclareMajorVariables();
+    object oTarget = GetEnteringObject();
+    //float fDelay = GetRandomDelay(1.0, 2.2); //unused
+    if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator))
+    {
+        if(!GetHasFeat(FEAT_WOODLAND_STRIDE, oTarget) && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL))
+        {
+            //Fire cast spell at event for the target
+            SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id));
+
+            effect eVis = EffectVisualEffect(VFX_IMP_SLOW);
+            effect eSlow = EffectMovementSpeedDecrease(70);
+            effect eLink = EffectLinkEffects(eVis, eSlow);
+
+            //Apply reduced movement effect and VFX_Impact
+            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
+        }
+    }
+}
diff --git a/_removed/x2_s0_vinemhmpc.ncs b/_removed/x2_s0_vinemhmpc.ncs
new file mode 100644
index 0000000..53d3e76
Binary files /dev/null and b/_removed/x2_s0_vinemhmpc.ncs differ
diff --git a/_removed/x2_s0_vinemhmpc.nss b/_removed/x2_s0_vinemhmpc.nss
new file mode 100644
index 0000000..c21e4c9
--- /dev/null
+++ b/_removed/x2_s0_vinemhmpc.nss
@@ -0,0 +1,63 @@
+//::///////////////////////////////////////////////
+//:: Vine Mine, Hamper Movement: Heartbeat
+//:: X2_S0_VineMHmpC
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Creatures entering the zone of Vine Mine, Hamper
+    Movement have their movement reduced by 1/2.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Now 25, 2002
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs, 02/06/2003
+/*
+Patch 1.70
+
+- aoe signalized wrong spell ID
+- incorporeal creatures could been affected
+*/
+
+#include "70_inc_spells"
+#include "x0_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+    //Declare major variables
+    aoesDeclareMajorVariables();
+
+    //--------------------------------------------------------------------------
+    // GZ 2003-Oct-15
+    // When the caster is no longer there, all functions calling
+    // GetAreaOfEffectCreator will fail. Its better to remove the barrier then
+    //--------------------------------------------------------------------------
+    if(!GetIsObjectValid(aoe.Creator))
+    {
+        DestroyObject(aoe.AOE);
+        return;
+    }
+
+    effect eVis = EffectVisualEffect(VFX_IMP_SLOW);
+    effect eSlow = EffectMovementSpeedDecrease(70);
+    effect eLink = EffectLinkEffects(eVis, eSlow);
+    float fDelay;
+
+    //Get first target in spell area
+    object oTarget = GetFirstInPersistentObject(aoe.AOE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(!GetHasFeat(FEAT_WOODLAND_STRIDE, oTarget) && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL))
+        {
+            if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, aoe.Creator))
+            {
+                SignalEvent(oTarget, EventSpellCastAt(aoe.AOE, spell.Id));
+                fDelay = GetRandomDelay(0.0, 2.0);
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget));
+            }
+        }
+        //Get next target in spell area
+        oTarget = GetNextInPersistentObject(aoe.AOE);
+    }
+}
diff --git a/_removed/x2_s1_beholdatt.ncs b/_removed/x2_s1_beholdatt.ncs
new file mode 100644
index 0000000..29fa555
Binary files /dev/null and b/_removed/x2_s1_beholdatt.ncs differ
diff --git a/_removed/x2_s1_beholdatt.nss b/_removed/x2_s1_beholdatt.nss
new file mode 100644
index 0000000..0280767
--- /dev/null
+++ b/_removed/x2_s1_beholdatt.nss
@@ -0,0 +1,30 @@
+//::///////////////////////////////////////////////
+//:: x2_s1_beholdatt
+//:: Beholder Attack Spell Logic
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+
+    This spellscript is the core of the beholder's
+    attack logic.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: 2003-08-28
+//:://////////////////////////////////////////////
+// Modified by Tony K for NWN2 2008-05-18 - only left
+// for backward compatability
+// Modified by Tony K for NWN1 2008-07-22
+
+
+#include "x2_inc_behai"
+
+
+void main()
+{
+//  Jug_Debug(GetName(OBJECT_SELF) + " running special beholder ray AI");
+    object oTarget = GetSpellTargetObject();
+
+    RunBeholderEyeAttacks(oTarget, TRUE);
+}
\ No newline at end of file
diff --git a/_removed/x2_s1_beholdray.ncs b/_removed/x2_s1_beholdray.ncs
new file mode 100644
index 0000000..97e4299
Binary files /dev/null and b/_removed/x2_s1_beholdray.ncs differ
diff --git a/_removed/x2_s1_beholdray.nss b/_removed/x2_s1_beholdray.nss
new file mode 100644
index 0000000..052a20a
--- /dev/null
+++ b/_removed/x2_s1_beholdray.nss
@@ -0,0 +1,73 @@
+//::///////////////////////////////////////////////
+//:: Beholder Ray Attacks
+//:: x2_s2_beholdray
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Implementation for the new version of the
+    beholder rays, using projectiles instead of
+    rays
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: 2003-09-16
+//:://////////////////////////////////////////////
+// Modified by dirtywick and Tony K for NWN2 2008-04-06
+// Modified by Tony K for NWN1 2008-07-22
+
+#include "x0_i0_spells"
+
+#include "x2_inc_beholder"
+
+void main()
+{
+    int     nSpell = GetSpellId();
+    object  oTarget = GetSpellTargetObject();
+
+    int nRay;
+
+    switch (nSpell)
+    {
+        case 776:
+            nRay = BEHOLDER_RAY_DEATH;
+            break;
+
+        case 777:
+            nRay = BEHOLDER_RAY_TK_THRUST;
+            break;
+
+        case 778:
+            nRay = BEHOLDER_RAY_PETRI;
+            break;
+
+        case 779:
+            nRay = BEHOLDER_RAY_CHARM_MON;
+            break;
+
+        case 780:
+            nRay = BEHOLDER_RAY_SLOW;
+            break;
+
+        case 783:
+            nRay = BEHOLDER_RAY_WOUND;
+            break;
+
+        case 784:
+            nRay = BEHOLDER_RAY_FEAR;
+            break;
+
+        case 785:
+            nRay = BEHOLDER_RAY_CHARM_PER;
+            break;
+
+        case 786:
+            nRay = BEHOLDER_RAY_SLEEP;
+            break;
+
+        case 787:
+            nRay = BEHOLDER_RAY_DISINTEGRATE;
+            break;
+    }
+
+    DoBeholderRayAttack(nRay, oTarget, FALSE);
+}
\ No newline at end of file
diff --git a/_removed/x2_s1_petrgaze.ncs b/_removed/x2_s1_petrgaze.ncs
new file mode 100644
index 0000000..1ce6e1d
Binary files /dev/null and b/_removed/x2_s1_petrgaze.ncs differ
diff --git a/_removed/x2_s1_petrgaze.nss b/_removed/x2_s1_petrgaze.nss
new file mode 100644
index 0000000..eaf235d
--- /dev/null
+++ b/_removed/x2_s1_petrgaze.nss
@@ -0,0 +1,81 @@
+//::///////////////////////////////////////////////
+//:: Gaze attack for shifter forms
+//:: x2_s1_petrgaze
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+
+  Petrification gaze  for polymorph type
+  basilisk and medusa
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: July, 09, 2003
+//:://////////////////////////////////////////////
+
+#include "x0_i0_spells"
+#include "x2_inc_shifter"
+
+void main()
+{
+    //--------------------------------------------------------------------------
+    // Enforce artifical use limit on that ability
+    //--------------------------------------------------------------------------
+    if(ShifterDecrementGWildShapeSpellUsesLeft() < 1)
+    {
+        FloatingTextStrRefOnCreature(83576, OBJECT_SELF);
+        return;
+    }
+
+    //--------------------------------------------------------------------------
+    // Make sure we are not blind
+    //--------------------------------------------------------------------------
+    if(GZCanNotUseGazeAttackCheck(OBJECT_SELF))
+    {
+        return;
+    }
+
+    //--------------------------------------------------------------------------
+    // Calculate Save DC
+    //--------------------------------------------------------------------------
+    int nDC = ShifterGetSaveDC(OBJECT_SELF,SHIFTER_DC_EASY_MEDIUM);
+
+    float fDelay;
+    object oTarget = GetSpellTargetObject();
+    int nHitDice = GetCasterLevel(OBJECT_SELF);
+    int nSpellID = GetSpellId();
+    object oSelf = OBJECT_SELF;
+
+    //--------------------------------------------------------------------------
+    // Loop through all available targets in spellcone
+    //--------------------------------------------------------------------------
+    location lFinalTarget = GetSpellTargetLocation();
+    vector vFinalPosition;
+    if(lFinalTarget == GetLocation(OBJECT_SELF))
+    {
+        // Since the target and origin are the same, we have to determine the
+        // direction of the spell from the facing of OBJECT_SELF (which is more
+        // intuitive than defaulting to East everytime).
+
+        // In order to use the direction that OBJECT_SELF is facing, we have to
+        // instead we pick a point slightly in front of OBJECT_SELF as the target.
+        vector lTargetPosition = GetPositionFromLocation(lFinalTarget);
+        vFinalPosition.x = lTargetPosition.x +  cos(GetFacing(OBJECT_SELF));
+        vFinalPosition.y = lTargetPosition.y +  sin(GetFacing(OBJECT_SELF));
+        lFinalTarget = Location(GetAreaFromLocation(lFinalTarget),vFinalPosition,GetFacingFromLocation(lFinalTarget));
+    }
+    oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 11.0, lFinalTarget, TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(spellsIsTarget(oTarget,SPELL_TARGET_STANDARDHOSTILE,OBJECT_SELF) && oTarget != OBJECT_SELF)
+        {
+            // Let target know the negative spell has been cast
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID));
+            fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+            DelayCommand(fDelay, DoPetrification(nHitDice, oSelf, oTarget, nSpellID, nDC));
+            //Get next target in spell area
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 11.0, lFinalTarget, TRUE);
+    }
+}
diff --git a/_removed/x2_s2_cursesong.ncs b/_removed/x2_s2_cursesong.ncs
new file mode 100644
index 0000000..102cfdd
Binary files /dev/null and b/_removed/x2_s2_cursesong.ncs differ
diff --git a/_removed/x2_s2_cursesong.nss b/_removed/x2_s2_cursesong.nss
new file mode 100644
index 0000000..9daf11b
--- /dev/null
+++ b/_removed/x2_s2_cursesong.nss
@@ -0,0 +1,431 @@
+//::///////////////////////////////////////////////
+//:: Curse Song
+//:: X2_S2_CurseSong
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    This spells applies penalties to all of the
+    bard's enemies within 30ft for a set duration of
+    10 rounds.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: May 16, 2003
+//:://////////////////////////////////////////////
+//:: Last Updated By: Andrew Nobbs May 20, 2003
+
+#include "x2_i0_spells"
+
+void main()
+{
+
+   if (!GetHasFeat(FEAT_BARD_SONGS, OBJECT_SELF))
+   {
+        FloatingTextStrRefOnCreature(85587,OBJECT_SELF); // no more bardsong uses left
+        return;
+   }
+
+    if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
+    {
+        FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
+        return;
+    }
+
+
+    //Declare major variables
+    int nLevel = GetLevelByClass(CLASS_TYPE_BARD);
+    int nRanks = GetSkillRank(SKILL_PERFORM);
+    int nPerform = nRanks;
+    int nDuration = 10; //+ nChr;
+
+    effect eAttack;
+    effect eDamage;
+    effect eWill;
+    effect eFort;
+    effect eReflex;
+    effect eHP;
+    effect eAC;
+    effect eSkill;
+
+    int nAttack;
+    int nDamage;
+    int nWill;
+    int nFort;
+    int nReflex;
+    int nHP;
+    int nAC;
+    int nSkill;
+
+    if(GetHasFeat(424)) // lingering song
+    {
+        nDuration += 5;
+    }
+
+    //Check to see if the caster has Lasting Impression and increase duration.
+    if(GetHasFeat(870))
+    {
+        nDuration *= 5;
+    }
+
+    /*if(nPerform >= 100 && nLevel >= 30)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 48;
+        nAC = 7;
+        nSkill = 18;
+    }
+    else if(nPerform >= 95 && nLevel >= 29)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 46;
+        nAC = 6;
+        nSkill = 17;
+    }
+    else if(nPerform >= 90 && nLevel >= 28)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 44;
+        nAC = 6;
+        nSkill = 16;
+    }
+    else if(nPerform >= 85 && nLevel >= 27)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 42;
+        nAC = 6;
+        nSkill = 15;
+    }
+    else if(nPerform >= 80 && nLevel >= 26)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 40;
+        nAC = 6;
+        nSkill = 14;
+    }
+    else*/
+    if(nPerform >= 100 && nLevel >= 40)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 38;
+        nAC = 5;
+        nSkill = 13;
+    }
+    else if(nPerform >= 90 && nLevel >= 36)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 36;
+        nAC = 5;
+        nSkill = 12;
+    }
+    else if(nPerform >= 80 && nLevel >= 32)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 34;
+        nAC = 5;
+        nSkill = 11;
+    }
+    else if(nPerform >= 70 && nLevel >= 28)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 32;
+        nAC = 5;
+        nSkill = 10;
+    }
+    else if(nPerform >= 60 && nLevel >= 24)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 30;
+        nAC = 5;
+        nSkill = 9;
+    }
+    else if(nPerform >= 50 && nLevel >= 20)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 28;
+        nAC = 5;
+        nSkill = 8;
+    }
+    else if(nPerform >= 45 && nLevel >= 19)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 26;
+        nAC = 5;
+        nSkill = 7;
+    }
+    else if(nPerform >= 40 && nLevel >= 18)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 24;
+        nAC = 5;
+        nSkill = 6;
+    }
+    else if(nPerform >= 35 && nLevel >= 17)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 22;
+        nAC = 5;
+        nSkill = 5;
+    }
+    else if(nPerform >= 30 && nLevel >= 16)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 3;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 20;
+        nAC = 5;
+        nSkill = 4;
+    }
+    else if(nPerform >= 24 && nLevel >= 15)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 2;
+        nFort = 2;
+        nReflex = 2;
+        nHP = 16;
+        nAC = 4;
+        nSkill = 3;
+    }
+    else if(nPerform >= 21 && nLevel >= 14)
+    {
+        nAttack = 2;
+        nDamage = 3;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 16;
+        nAC = 3;
+        nSkill = 2;
+    }
+    else if(nPerform >= 18 && nLevel >= 11)
+    {
+        nAttack = 2;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 8;
+        nAC = 2;
+        nSkill = 2;
+    }
+    else if(nPerform >= 15 && nLevel >= 8)
+    {
+        nAttack = 2;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 8;
+        nAC = 0;
+        nSkill = 1;
+    }
+    else if(nPerform >= 12 && nLevel >= 6)
+    {
+        nAttack = 1;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 1;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 1;
+    }
+    else if(nPerform >= 9 && nLevel >= 3)
+    {
+        nAttack = 1;
+        nDamage = 2;
+        nWill = 1;
+        nFort = 1;
+        nReflex = 0;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 0;
+    }
+    else if(nPerform >= 6 && nLevel >= 2)
+    {
+        nAttack = 1;
+        nDamage = 1;
+        nWill = 1;
+        nFort = 0;
+        nReflex = 0;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 0;
+    }
+    else if(nPerform >= 3 && nLevel >= 1)
+    {
+        nAttack = 1;
+        nDamage = 1;
+        nWill = 0;
+        nFort = 0;
+        nReflex = 0;
+        nHP = 0;
+        nAC = 0;
+        nSkill = 0;
+    }
+
+    //If the bard has Extra Music and is at least 12lvl, give a small random bonus to this song
+    if (nLevel >= 12 && GetHasFeat(FEAT_EXTRA_MUSIC, OBJECT_SELF) )
+    {
+    switch(d10())
+        {
+        case 1: nAttack = nAttack + 1;break;
+        case 2: nDamage = nDamage + 1;break;
+        case 3: nWill = nWill + 1;break;
+        case 4: nFort = nFort + 1;break;
+        case 5: nReflex = nReflex + 1;break;
+        case 6: nAC = nAC + 1;break;
+        case 7: nSkill = nSkill + 1;break;
+        case 8: nWill = nWill + 2;break;
+        case 9: nFort = nFort + 2;break;
+        case 10: nReflex = nReflex + 2;break;
+        }
+    }
+    //End of Extra Music bonus
+
+    effect eVis = EffectVisualEffect(VFX_IMP_DOOM);
+
+    eAttack = EffectAttackDecrease(nAttack);
+    eDamage = EffectDamageDecrease(nDamage, DAMAGE_TYPE_SLASHING);
+    effect eLink = EffectLinkEffects(eAttack, eDamage);
+
+    if(nWill > 0)
+    {
+        eWill = EffectSavingThrowDecrease(SAVING_THROW_WILL, nWill);
+        eLink = EffectLinkEffects(eLink, eWill);
+    }
+    if(nFort > 0)
+    {
+        eFort = EffectSavingThrowDecrease(SAVING_THROW_FORT, nFort);
+        eLink = EffectLinkEffects(eLink, eFort);
+    }
+    if(nReflex > 0)
+    {
+        eReflex = EffectSavingThrowDecrease(SAVING_THROW_REFLEX, nReflex);
+        eLink = EffectLinkEffects(eLink, eReflex);
+    }
+    if(nHP > 0)
+    {
+        //SpeakString("HP Bonus " + IntToString(nHP));
+        eHP = EffectDamage(nHP, DAMAGE_TYPE_SONIC, DAMAGE_POWER_NORMAL);
+//        eLink = EffectLinkEffects(eLink, eHP);
+    }
+    if(nAC > 0)
+    {
+        eAC = EffectACDecrease(nAC, AC_DODGE_BONUS);
+        eLink = EffectLinkEffects(eLink, eAC);
+    }
+    if(nSkill > 0)
+    {
+        eSkill = EffectSkillDecrease(SKILL_ALL_SKILLS, nSkill);
+        eLink = EffectLinkEffects(eLink, eSkill);
+    }
+    effect eDur  = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eDur2 = EffectVisualEffect(507);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_SONIC);
+    effect eFNF = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));
+
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+
+    eHP = ExtraordinaryEffect(eHP);
+    eLink = ExtraordinaryEffect(eLink);
+
+    if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget))
+    {
+        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur2, OBJECT_SELF, RoundsToSeconds(nDuration));
+    }
+    float fDelay;
+    while(GetIsObjectValid(oTarget))
+    {
+        if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, OBJECT_SELF))
+        {
+             // * GZ Oct 2003: If we are deaf, we do not have negative effects from curse song
+            if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
+            {
+                if(!GetHasFeatEffect(871, oTarget)&& !GetHasSpellEffect(GetSpellId(),oTarget))
+                {
+                    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
+                    if (nHP > 0)
+                    {
+                        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_SONIC), oTarget);
+                        DelayCommand(0.01, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHP, oTarget));
+                    }
+
+                    if (!GetIsDead(oTarget))
+                    {
+                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
+                        DelayCommand(GetRandomDelay(0.1,0.5),ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                   }
+                }
+            }
+            else
+            {
+                   ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE), oTarget);
+            }
+        }
+
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    }
+    DecrementRemainingFeatUses(OBJECT_SELF, FEAT_BARD_SONGS);
+}
diff --git a/_removed/x2_s2_discbreath.ncs b/_removed/x2_s2_discbreath.ncs
new file mode 100644
index 0000000..65f089d
Binary files /dev/null and b/_removed/x2_s2_discbreath.ncs differ
diff --git a/_removed/x2_s2_discbreath.nss b/_removed/x2_s2_discbreath.nss
new file mode 100644
index 0000000..bbf703a
--- /dev/null
+++ b/_removed/x2_s2_discbreath.nss
@@ -0,0 +1,63 @@
+//::///////////////////////////////////////////////
+//:: Breath Weapon for Dragon Disciple Class
+//:: x2_s2_discbreath
+//:: Copyright (c) 2003Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+
+  Damage Type is Fire
+  Save is Reflex
+  Shape is cone, 30' == 10m
+
+  Level      Damage      Save
+  ---------------------------
+  3          2d10         19
+  7          4d10         19
+  10          6d10        19
+
+  after 10:
+   damage: 6d10  + 1d10 per 3 levels after 10
+   savedc: increasing by 1 every 4 levels after 10
+
+
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: June, 17, 2003
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- wrong target check (could affect other NPCs)
+- damage was the same for all creatures in AoE
+- old evasion behaviour (now that evasion is applied will appear in log)
+*/
+
+#include "x0_i0_spells"
+
+void main()
+{
+    //This part is to avoid some weird stacking issues
+    if (GetLocalInt(OBJECT_SELF, "ddbreath") == 1)
+        {
+            IncrementRemainingFeatUses(OBJECT_SELF, FEAT_DRAGON_DIS_BREATH);
+            return;
+        }
+    location lLocation = GetSpellTargetLocation();
+    SetLocalInt(OBJECT_SELF, "ddbreath", 1);
+    switch (GetCreatureWingType(OBJECT_SELF))
+    {
+        case 4: ActionCastSpellAtLocation(239, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //red dragon breathing fire
+        case 34: ActionCastSpellAtLocation(236, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //black dragon breathing acid
+        case 35: ActionCastSpellAtLocation(241, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //blue dragon breathing lightning
+        case 36: ActionCastSpellAtLocation(239, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //brass dragon breathing fire
+        case 37: ActionCastSpellAtLocation(241, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //bronze dragon breathing lightning
+        case 38: ActionCastSpellAtLocation(236, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //copper dragon breathing acid
+        case 39: ActionCastSpellAtLocation(239, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //gold dragon breathing fire
+        case 40: ActionCastSpellAtLocation(240, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //green dragon breathing gas
+        case 41: ActionCastSpellAtLocation(237, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //silver dragon breathing cold
+        case 42: ActionCastSpellAtLocation(237, lLocation, METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);break; //white dragon breathing cold
+    }
+
+}
diff --git a/_removed/x2_s2_divwrath.ncs b/_removed/x2_s2_divwrath.ncs
new file mode 100644
index 0000000..d73405b
Binary files /dev/null and b/_removed/x2_s2_divwrath.ncs differ
diff --git a/_removed/x2_s2_divwrath.nss b/_removed/x2_s2_divwrath.nss
new file mode 100644
index 0000000..3cbc785
--- /dev/null
+++ b/_removed/x2_s2_divwrath.nss
@@ -0,0 +1,142 @@
+//::///////////////////////////////////////////////
+//:: Divine Wrath
+//:: x2_s2_DivWrath
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    The Divine Champion is able to channel a portion
+    of their gods power once per day giving them a +3
+    bonus on attack rolls, damage, and saving throws
+    for a number of rounds equal to their Charisma
+    bonus. They also gain damage reduction of +1/5.
+    At 10th level, an additional +2 is granted to
+    attack rolls and saving throws.
+
+    Epic Progression
+    Every five levels past 10 an additional +2
+    on attack rolls, damage and saving throws is added. As well the damage
+    reduction increases by 5 and the damage power required to penetrate
+    damage reduction raises by +1 (to a maximum of /+5).
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Feb 05, 2003
+//:: Updated On: Jul 21, 2003 Georg Zoeller -
+//                            Epic Level progession
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- did signalized wrong spell ID
+*/
+
+#include "nw_i0_spells"
+
+void main()
+{
+    //Declare major variables
+    object oTarget = OBJECT_SELF;
+    int nDuration = GetAbilityModifier(ABILITY_CHARISMA, OBJECT_SELF);
+    //Check that if nDuration is not above 0, make it 1.
+    if(nDuration <= 0)
+    {
+        FloatingTextStrRefOnCreature(100967,OBJECT_SELF);
+        return;
+    }
+
+    effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
+    eVis = EffectLinkEffects(EffectVisualEffect(VFX_IMP_GOOD_HELP),eVis);
+    effect eAttack, eDamage, eSaving, eReduction;
+    //Fire cast spell at event for the specified target
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 622, FALSE));
+
+    int nAttackB = 3;
+    int nDamageB = DAMAGE_BONUS_3;
+    int nSaveB = 3 ;
+    int nDmgRedB = 5;
+    int nDmgRedP = DAMAGE_POWER_PLUS_ONE;
+
+    // --------------- Epic Progression ---------------------------
+
+    int nLevelDiv = GetLevelByClass(CLASS_TYPE_DIVINECHAMPION,oTarget);
+    int nLevelPal = GetLevelByClass(CLASS_TYPE_PALADIN,oTarget)-10;
+    int nLevelBlg = GetLevelByClass(CLASS_TYPE_BLACKGUARD,oTarget);
+    int nLevel = nLevelDiv;
+    if (nLevelPal > nLevel) nLevel = nLevelPal;
+    if (nLevelBlg > nLevel) nLevel = nLevelBlg;
+
+    int nLevelB = (nLevel / 5)-1;
+    if (nLevelB <=0)
+    {
+        nLevelB =0;
+    }
+    else
+    {
+        nAttackB += (nLevelB*2); // +2 to attack every 5 levels past 5
+        nSaveB += (nLevelB*2); // +2 to saves every 5 levels past 5
+    }
+
+    if (nLevelB >6 )
+    {
+        nDmgRedP = DAMAGE_POWER_PLUS_FIVE;
+        nDmgRedB = 7*5;
+        nDamageB = DAMAGE_BONUS_17;
+    }
+    else if (nLevelB >5 )
+    {
+        nDmgRedP = DAMAGE_POWER_PLUS_FIVE;
+        nDmgRedB = 6*5;
+        nDamageB = DAMAGE_BONUS_15;
+    }
+    else if (nLevelB >4 )
+    {
+        nDmgRedP = DAMAGE_POWER_PLUS_FIVE;
+        nDmgRedB = 5*5;
+        nDamageB = DAMAGE_BONUS_13;
+    }
+    else if (nLevelB >3)
+    {
+        nDmgRedP = DAMAGE_POWER_PLUS_FOUR;
+        nDmgRedB = 4*5;
+        nDamageB = DAMAGE_BONUS_11;
+    }
+    else if (nLevelB >2)
+    {
+        nDmgRedP = DAMAGE_POWER_PLUS_THREE;
+        nDmgRedB = 3*5;
+        nDamageB = DAMAGE_BONUS_9;
+    }
+    else if (nLevelB >1)
+    {
+        nDmgRedP = DAMAGE_POWER_PLUS_TWO;
+        nDmgRedB = 2*5;
+        nDamageB = DAMAGE_BONUS_7;
+    }
+    else if (nLevelB >0)
+    {
+        nDamageB = DAMAGE_BONUS_5;
+    }
+    //--------------------------------------------------------------
+    //
+    //--------------------------------------------------------------
+
+    eAttack = EffectAttackIncrease(nAttackB,ATTACK_BONUS_MISC);
+    eDamage = EffectDamageIncrease(nDamageB, DAMAGE_TYPE_DIVINE);
+    eSaving = EffectSavingThrowIncrease(SAVING_THROW_ALL,nSaveB, SAVING_THROW_TYPE_ALL);
+    eReduction = EffectDamageReduction(nDmgRedB, nDmgRedP);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
+
+    effect eLink = EffectLinkEffects(eAttack, eDamage);
+    eLink = EffectLinkEffects(eSaving,eLink);
+    eLink = EffectLinkEffects(eReduction,eLink);
+    eLink = EffectLinkEffects(eDur,eLink);
+    eLink = SupernaturalEffect(eLink);
+
+    // prevent stacking with self
+    RemoveEffectsFromSpell(oTarget, GetSpellId());
+
+
+    //Apply the armor bonuses and the VFX impact
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+}
diff --git a/_removed/x2_s2_dragknght.ncs b/_removed/x2_s2_dragknght.ncs
new file mode 100644
index 0000000..43e3600
Binary files /dev/null and b/_removed/x2_s2_dragknght.ncs differ
diff --git a/_removed/x2_s2_dragknght.nss b/_removed/x2_s2_dragknght.nss
new file mode 100644
index 0000000..2f1c6ca
--- /dev/null
+++ b/_removed/x2_s2_dragknght.nss
@@ -0,0 +1,74 @@
+//::///////////////////////////////////////////////
+//:: Dragon Knight
+//:: X2_S2_DragKnght
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+     Summons an adult red dragon for you to
+     command.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Feb 07, 2003
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x2_inc_toollib"
+#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;
+    }
+
+    //Declare major variables
+    spellsDeclareMajorVariables();
+    effect eVis = EffectVisualEffect(460);
+
+    if (GetCasterLevel(OBJECT_SELF) >= 40)
+        {
+        int nDuration = 10;
+        SetLocalString(OBJECT_SELF, "summoned_dragon", "na_s_epicdk");
+        effect eSummon = EffectSummonCreature(GetLocalString(OBJECT_SELF, "summoned_dragon"),481,0.0,TRUE);
+
+        // * make it so dragon cannot be dispelled
+        eSummon = ExtraordinaryEffect(eSummon);
+        //Apply the summon visual and summon the dragon.
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration));
+        DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, spell.Loc));
+        }
+        else if (GetCasterLevel(OBJECT_SELF) >= 31)
+        {
+        int nDuration = 20;
+        SetLocalString(OBJECT_SELF, "summoned_dragon", "na_s_dkadult");
+        effect eSummon = EffectSummonCreature(GetLocalString(OBJECT_SELF, "summoned_dragon"),481,0.0,TRUE);
+
+        // * make it so dragon cannot be dispelled
+        eSummon = ExtraordinaryEffect(eSummon);
+        //Apply the summon visual and summon the dragon.
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration));
+        DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, spell.Loc));
+        }
+        else
+        {
+        int nDuration = 20;
+        SetLocalString(OBJECT_SELF, "summoned_dragon", "na_s_dkyoung");
+        effect eSummon = EffectSummonCreature(GetLocalString(OBJECT_SELF, "summoned_dragon"),481,0.0,TRUE);
+
+        // * make it so dragon cannot be dispelled
+        eSummon = ExtraordinaryEffect(eSummon);
+        //Apply the summon visual and summon the dragon.
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, RoundsToSeconds(nDuration));
+        DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eVis, spell.Loc));
+        }
+
+}
diff --git a/_removed/x2_s2_epicward.ncs b/_removed/x2_s2_epicward.ncs
new file mode 100644
index 0000000..b928f9a
Binary files /dev/null and b/_removed/x2_s2_epicward.ncs differ
diff --git a/_removed/x2_s2_epicward.nss b/_removed/x2_s2_epicward.nss
new file mode 100644
index 0000000..183336a
--- /dev/null
+++ b/_removed/x2_s2_epicward.nss
@@ -0,0 +1,60 @@
+//::///////////////////////////////////////////////
+//:: Epic Ward
+//:: X2_S2_EpicWard.
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Makes the caster invulnerable to damage
+    (equals damage reduction 50/+20)
+    Lasts 1 round per level
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: Aug 12, 2003
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "nw_i0_spells"
+#include "x2_inc_spellhook"
+
+void main()
+{
+/*
+  Spellcast Hook Code
+  Added 2003-06-23 by GeorgZ
+  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();
+    int nDuration = spell.Level / 2;
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    int nLimit = 50*nDuration;
+    //Check for metamagic extend
+    if(spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+    {//1.70 added in order to allow metamagic override feature
+        nDuration = nDuration * 2;
+    }
+    effect eDur = EffectVisualEffect(495);
+    effect eProt = EffectDamageReduction(15, DAMAGE_POWER_PLUS_SIX, nLimit);
+    effect eLink = EffectLinkEffects(eDur, eProt);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    // * Brent, Nov 24, making extraodinary so cannot be dispelled
+    eLink = ExtraordinaryEffect(eLink);
+
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+    //Apply the armor bonuses and the VFX impact
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, RoundsToSeconds(nDuration));
+}
diff --git a/_removed/x2_s2_epmagearm.ncs b/_removed/x2_s2_epmagearm.ncs
new file mode 100644
index 0000000..8e584bd
Binary files /dev/null and b/_removed/x2_s2_epmagearm.ncs differ
diff --git a/_removed/x2_s2_epmagearm.nss b/_removed/x2_s2_epmagearm.nss
new file mode 100644
index 0000000..963e3cd
--- /dev/null
+++ b/_removed/x2_s2_epmagearm.nss
@@ -0,0 +1,67 @@
+//::///////////////////////////////////////////////
+//:: Epic Mage Armor
+//:: X2_S2_EpMageArm
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Gives the target +20 AC Bonus to Deflection,
+    Armor Enchantment, Natural Armor and Dodge.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Feb 07, 2003
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "nw_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;
+    }
+
+    //Declare major variables
+    spellsDeclareMajorVariables();
+    int nDuration = spell.Level;
+    effect eVis = EffectVisualEffect(495);
+    effect eAC1, eAC2, eAC3, eAC4;
+    //Fire cast spell at event for the specified target
+    SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE));
+    //Check for metamagic extend
+    if(spell.Meta == METAMAGIC_EXTEND) //Duration is +100%
+    {
+        nDuration = nDuration * 2;
+    }
+    //Set the four unique armor bonuses
+    eAC1 = EffectACIncrease(3, AC_ARMOUR_ENCHANTMENT_BONUS);
+    eAC2 = EffectACIncrease(3, AC_SHIELD_ENCHANTMENT_BONUS);
+    eAC3 = EffectACIncrease(3, AC_DODGE_BONUS);
+    eAC4 = EffectACIncrease(3, AC_NATURAL_BONUS);
+    effect eDur = EffectVisualEffect(VFX_DUR_SANCTUARY);
+
+    effect eLink = EffectLinkEffects(eAC1, eAC2);
+    eLink = EffectLinkEffects(eLink, eAC3);
+    eLink = EffectLinkEffects(eLink, eAC4);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    RemoveEffectsFromSpell(spell.Target, spell.Id);
+
+    // * Brent, Nov 24, making extraodinary so cannot be dispelled
+    eLink = ExtraordinaryEffect(eLink);
+
+    //Apply the armor bonuses and the VFX impact
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, spell.Target, HoursToSeconds(nDuration));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, spell.Target, 1.0);
+}
diff --git a/_removed/x2_s2_gwildshp.ncs b/_removed/x2_s2_gwildshp.ncs
new file mode 100644
index 0000000..9f80655
Binary files /dev/null and b/_removed/x2_s2_gwildshp.ncs differ
diff --git a/_removed/x2_s2_gwildshp.nss b/_removed/x2_s2_gwildshp.nss
new file mode 100644
index 0000000..e40b15f
--- /dev/null
+++ b/_removed/x2_s2_gwildshp.nss
@@ -0,0 +1,621 @@
+//::///////////////////////////////////////////////
+//:: Greater Wild Shape, Humanoid Shape
+//:: x2_s2_gwildshp
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Allows the character to shift into one of these
+    forms, gaining special abilities
+
+    Credits must be given to mr_bumpkin from the NWN
+    community who had the idea of merging item properties
+    from weapon and armor to the creatures new forms.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: 2003-07-02
+//:://////////////////////////////////////////////
+//:: Modified By: Deva Winblood
+//:: Modified Date: January 26th, 2008
+//:://////////////////////////////////////////////
+/*
+    Modified to insure no shapeshifting spells are castable upon
+    mounted targets.  This prevents problems that can occur due
+    to dismounting after shape shifting, or other issues that can
+    occur due to preserved appearances getting out of synch.
+
+    This can additional check can be disabled by setting the variable
+    X3_NO_SHAPESHIFT_SPELL_CHECK to 1 on the module object.  If this
+    variable is set then this script will function as it did prior to
+    this modification.
+
+Patch 1.71
+
+- allowed to merge any custom non-weapon in left hand slot such as flags or
+musical instruments
+- added optional feature to stack ability bonuses from multiple items together
+- added optional feature to merge bracers (when items are allowed to merge)
+- added benefits of being incorporeal to the spectre shape (50% concealment and
+the ability to walk through other creatures)
+- a spectre polymorph now also release character from the effects of the grappling
+- cured from horse include while retaining the shapeshifting horse check
+- fixed dying when unpolymorphed as an result of sudden constitution bonus drop
+which also could result to the server crash
+*/
+
+#include "70_inc_itemprop"
+#include "x2_inc_itemprop"
+#include "x2_inc_shifter"
+#include "x3_inc_horse"
+
+
+void main()
+{
+    //--------------------------------------------------------------------------
+    // Declare major variables
+    //--------------------------------------------------------------------------
+    int    nSpell = GetSpellId();
+    object oTarget = GetSpellTargetObject();
+    effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
+    int    nShifter = GetLevelByClass(CLASS_TYPE_SHIFTER);
+    effect ePoly;
+    int    nPoly;
+
+    if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
+    { // check to see if abort due to being mounted
+        switch(GetPhenoType(oTarget))
+        {// shape shifting not allowed while mounted
+            case 3:
+            case 5:
+            case 6:
+            case 8:
+            if(GetIsPC(oTarget))
+            {
+                FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
+            }
+            // shape shifting not allowed while mounted
+            return;
+        }
+    } // check to see if abort due to being mounted
+
+    // Feb 13, 2004, Jon: Added scripting to take care of case where it's an NPC
+    // using one of the feats. It will randomly pick one of the shapes associated
+    // with the feat.
+    switch(nSpell)
+    {
+        // Greater Wildshape I
+        case 646: nSpell = Random(5)+658; break;
+        // Greater Wildshape II
+        case 675: switch(Random(3))
+                  {
+                    case 0: nSpell = 672; break;
+                    case 1: nSpell = 678; break;
+                    case 2: nSpell = 680;
+                  }
+                  break;
+        // Greater Wildshape III
+        case 676: switch(Random(3))
+                  {
+                    case 0: nSpell = 670; break;
+                    case 1: nSpell = 673; break;
+                    case 2: nSpell = 674;
+                  }
+                  break;
+        // Greater Wildshape IV
+        case 677: switch(Random(3))
+                  {
+                    case 0: nSpell = 679; break;
+                    case 1: nSpell = 691; break;
+                    case 2: nSpell = 694;
+                  }
+                  break;
+        // Humanoid Shape
+        case 681:  nSpell = Random(3)+682; break;
+        // Undead Shape
+        case 685:  nSpell = Random(3)+704; break;
+        // Dragon Shape
+        case 725:  nSpell = Random(3)+707; break;
+        // Outsider Shape
+        case 732:  nSpell = Random(3)+733; break;
+        // Construct Shape
+        case 737:  nSpell = Random(3)+738; break;
+    }
+
+    //--------------------------------------------------------------------------
+    // Determine which form to use based on spell id, gender and level
+    //--------------------------------------------------------------------------
+    switch (nSpell)
+    {
+
+        //-----------------------------------------------------------------------
+        // Greater Wildshape I - Wyrmling Shape
+        //-----------------------------------------------------------------------
+        case 658:  nPoly = POLYMORPH_TYPE_WYRMLING_RED; break;
+        case 659:  nPoly = POLYMORPH_TYPE_WYRMLING_BLUE; break;
+        case 660:  nPoly = POLYMORPH_TYPE_WYRMLING_BLACK; break;
+        case 661:  nPoly = POLYMORPH_TYPE_WYRMLING_WHITE; break;
+        case 662:  nPoly = POLYMORPH_TYPE_WYRMLING_GREEN; break;
+
+        //-----------------------------------------------------------------------
+        // Greater Wildshape II  - Minotaur, Gargoyle, Harpy
+        //-----------------------------------------------------------------------
+        case 672: if (nShifter < X2_GW2_EPIC_THRESHOLD)
+                     nPoly = POLYMORPH_TYPE_HARPY;
+                  else
+                     nPoly = 97;
+                  break;
+
+        case 678: if (nShifter < X2_GW2_EPIC_THRESHOLD)
+                     nPoly = POLYMORPH_TYPE_GARGOYLE;
+                  else
+                     nPoly = 98;
+                  break;
+
+        case 680: if (nShifter < X2_GW2_EPIC_THRESHOLD)
+                     nPoly = POLYMORPH_TYPE_MINOTAUR;
+                  else
+                     nPoly = 96;
+                  break;
+
+        //-----------------------------------------------------------------------
+        // Greater Wildshape III  - Drider, Basilisk, Manticore
+        //-----------------------------------------------------------------------
+        case 670: if (nShifter < X2_GW3_EPIC_THRESHOLD)
+                     nPoly = POLYMORPH_TYPE_BASILISK;
+                  else
+                     nPoly = 99;
+                  break;
+
+        case 673: if (nShifter < X2_GW3_EPIC_THRESHOLD)
+                     nPoly = POLYMORPH_TYPE_DRIDER;
+                  else
+                     nPoly = 100;
+                  break;
+
+        case 674: if (nShifter < X2_GW3_EPIC_THRESHOLD)
+                     nPoly = POLYMORPH_TYPE_MANTICORE;
+                  else
+                     nPoly = 101;
+                  break;
+
+       //-----------------------------------------------------------------------
+       // Greater Wildshape IV - Dire Tiger, Medusa, MindFlayer
+       //-----------------------------------------------------------------------
+        case 679: nPoly = POLYMORPH_TYPE_MEDUSA; break;
+        case 691: nPoly = 68; break; // Mindflayer
+        case 694: nPoly = 69; break; // DireTiger
+
+
+       //-----------------------------------------------------------------------
+       // Humanoid Shape - Kobold Commando, Drow, Lizard Crossbow Specialist
+       //-----------------------------------------------------------------------
+       case 682:
+                 if(nShifter< 17)
+                 {
+                     if (GetGender(OBJECT_SELF) == GENDER_MALE) //drow
+                         nPoly = 59;
+                     else
+                         nPoly = 70;
+                 }
+                 else
+                 {
+                     if (GetGender(OBJECT_SELF) == GENDER_MALE) //drow
+                         nPoly = 105;
+                     else
+                         nPoly = 106;
+                 }
+                 break;
+       case 683:
+                 if(nShifter< 17)
+                 {
+                    nPoly = 82; break; // Lizard
+                 }
+                 else
+                 {
+                    nPoly =104; break; // Epic Lizard
+                 }
+       case 684: if(nShifter< 17)
+                 {
+                    nPoly = 83; break; // Kobold Commando
+                 }
+                 else
+                 {
+                    nPoly = 103; break; // Kobold Commando
+                 }
+
+       //-----------------------------------------------------------------------
+       // Undead Shape - Spectre, Risen Lord, Vampire
+       //-----------------------------------------------------------------------
+       case 704: nPoly = 75; break; // Risen lord
+
+       case 705: if (GetGender(OBJECT_SELF) == GENDER_MALE) // vampire
+                     nPoly = 74;
+                  else
+                     nPoly = 77;
+                 break;
+
+       case 706: nPoly = 76; break; /// spectre
+
+       //-----------------------------------------------------------------------
+       // Dragon Shape - Red Blue and Green Dragons
+       //-----------------------------------------------------------------------
+       case 707: nPoly = 72; break; // Ancient Red   Dragon
+       case 708: nPoly = 71; break; // Ancient Blue  Dragon
+       case 709: nPoly = 73; break; // Ancient Green Dragon
+
+
+       //-----------------------------------------------------------------------
+       // Outsider Shape - Rakshasa, Azer Chieftain, Black Slaad
+       //-----------------------------------------------------------------------
+       case 733:   if (GetGender(OBJECT_SELF) == GENDER_MALE) //azer
+                      nPoly = 85;
+                    else // anything else is female
+                      nPoly = 86;
+                    break;
+
+       case 734:   if (GetGender(OBJECT_SELF) == GENDER_MALE) //rakshasa
+                      nPoly = 88;
+                    else // anything else is female
+                      nPoly = 89;
+                    break;
+
+       case 735: nPoly =87; break; // slaad
+
+       //-----------------------------------------------------------------------
+       // Construct Shape - Stone Golem, Iron Golem, Demonflesh Golem
+       //-----------------------------------------------------------------------
+       case 738: nPoly =91; break; // stone golem
+       case 739: nPoly =92; break; // demonflesh golem
+       case 740: nPoly =90; break; // iron golem
+
+    }
+
+
+    //--------------------------------------------------------------------------
+    // Determine which items get their item properties merged onto the shifters
+    // new form.
+    //--------------------------------------------------------------------------
+    int bWeapon = ShifterMergeWeapon(nPoly);
+    int bArmor  = ShifterMergeArmor(nPoly);
+    int bItems  = ShifterMergeItems(nPoly);
+    int bArms = bItems && GetLocalInt(GetModule(),"71_POLYMORPH_MERGE_ARMS");
+    //--------------------------------------------------------------------------
+    // Store the old objects so we can access them after the character has
+    // changed into his new form
+    //--------------------------------------------------------------------------
+    object oWeaponOld = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorOld  = GetItemInSlot(INVENTORY_SLOT_CHEST,OBJECT_SELF);
+    object oRing1Old  = GetItemInSlot(INVENTORY_SLOT_LEFTRING,OBJECT_SELF);
+    object oRing2Old  = GetItemInSlot(INVENTORY_SLOT_RIGHTRING,OBJECT_SELF);
+    object oAmuletOld = GetItemInSlot(INVENTORY_SLOT_NECK,OBJECT_SELF);
+    object oCloakOld  = GetItemInSlot(INVENTORY_SLOT_CLOAK,OBJECT_SELF);
+    object oBootsOld  = GetItemInSlot(INVENTORY_SLOT_BOOTS,OBJECT_SELF);
+    object oBeltOld   = GetItemInSlot(INVENTORY_SLOT_BELT,OBJECT_SELF);
+    object oArmsOld   = GetItemInSlot(INVENTORY_SLOT_ARMS,OBJECT_SELF);
+    object oHelmetOld = GetItemInSlot(INVENTORY_SLOT_HEAD,OBJECT_SELF);
+    object oShield    = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,OBJECT_SELF);
+
+    if (GetIsObjectValid(oShield))
+    {   //1.71: this is now custom content compatible, polymorph will merge custom left-hand only items such as flags
+        if (GetWeaponRanged(oShield) || IPGetIsMeleeWeapon(oShield))
+        {
+            oShield = OBJECT_INVALID;
+        }
+    }
+
+    int nConBonus;
+    if (bWeapon)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oWeaponOld);
+    }
+    if (bArmor)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmorOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oHelmetOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oShield);
+    }
+    if (bItems)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oRing1Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oRing2Old);
+        nConBonus = IPGetBestConBonus(nConBonus,oAmuletOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oCloakOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBeltOld);
+        nConBonus = IPGetBestConBonus(nConBonus,oBootsOld);
+    }
+    if (bArms)
+    {
+        nConBonus = IPGetBestConBonus(nConBonus,oArmsOld);
+    }
+
+    //--------------------------------------------------------------------------
+    // Here the actual polymorphing is done
+    //--------------------------------------------------------------------------
+    ePoly = EffectPolymorph(nPoly);
+     if(nConBonus > 0)
+     {//1.70: this fixes dying when unpolymorphed issue as well as server crash related to this
+     ePoly = EffectLinkEffects(ePoly,EffectAbilityIncrease(ABILITY_CONSTITUTION,nConBonus));
+     }
+     if(nPoly == 76)
+     {//1.71: added benefits of being incorporeal into polymorph effect for spectre shape
+     ePoly = EffectLinkEffects(ePoly,EffectConcealment(50));
+     ePoly = EffectLinkEffects(ePoly,EffectCutsceneGhost());
+      if(GetHasSpellEffect(SPELL_BIGBYS_CRUSHING_HAND))//in a spectre polymorph, player releases from any kind of grapple
+      {
+      RemoveEffectsFromSpell(OBJECT_SELF, SPELL_BIGBYS_CRUSHING_HAND);
+      }
+      if(GetHasSpellEffect(SPELL_BIGBYS_GRASPING_HAND))
+      {
+      RemoveEffectsFromSpell(OBJECT_SELF, SPELL_BIGBYS_GRASPING_HAND);
+      }
+     RemoveSpecificEffect(EFFECT_TYPE_ENTANGLE,OBJECT_SELF);
+     }
+
+
+    //This chunk of code makes outsider, undead and construct shapes stronger at shifter lvls 25, 27 and 30.
+    if (GetLevelByClass(CLASS_TYPE_SHIFTER) >= 25)
+    {
+    if (GetLevelByClass(CLASS_TYPE_SHIFTER) >= 30)
+        {
+        if (nSpell == 738) //Stone golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(20, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectACIncrease(3, AC_NATURAL_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 5), ePoly);
+            }
+        if (nSpell == 739) //Demonflesh golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(7, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(13), ePoly);
+            ePoly = EffectLinkEffects(EffectSpellResistanceIncrease(58), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 5), ePoly);
+            }
+        if (nSpell == 740) //Iron golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(5, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(13), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly);
+            }
+        if (nSpell == 733) //Azer
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(11, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(11), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(3, DAMAGE_TYPE_SLASHING), ePoly);
+            }
+        if (nSpell == 735) //Death slaad
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(5, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(17), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly);
+            }
+        if (nSpell == 704) //Risen Lord
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(11, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(11), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(6, DAMAGE_TYPE_SLASHING), ePoly);
+            }
+        if (nSpell == 705) //Vampire
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(3, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(15), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(6, DAMAGE_TYPE_BLUDGEONING), ePoly);
+            ePoly = EffectLinkEffects(EffectRegenerate(6, 6.0), ePoly);
+            }
+        if (nSpell == 706) //Spectre
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(16, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(13), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 5), ePoly);
+            }
+        }
+    else if (GetLevelByClass(CLASS_TYPE_SHIFTER) >= 27)
+        {
+        if (nSpell == 738) //Stone golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(16, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 4), ePoly);
+            }
+        if (nSpell == 739) //Demonflesh golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(5, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(7), ePoly);
+            ePoly = EffectLinkEffects(EffectSpellResistanceIncrease(56), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 4), ePoly);
+            }
+        if (nSpell == 740) //Iron golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(9), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            }
+        if (nSpell == 733) //Azer
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(8, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(8), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(2, DAMAGE_TYPE_SLASHING), ePoly);
+            }
+        if (nSpell == 735) //Death slaad
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(12), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            }
+        if (nSpell == 704) //Risen Lord
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(7, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(7), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(4, DAMAGE_TYPE_SLASHING), ePoly);
+            }
+        if (nSpell == 705) //Vampire
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(2, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(10), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(4, DAMAGE_TYPE_BLUDGEONING), ePoly);
+            ePoly = EffectLinkEffects(EffectRegenerate(4, 6.0), ePoly);
+            }
+        if (nSpell == 706) //Spectre
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(11, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(9), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 4), ePoly);
+            }
+        }
+    else
+        {
+        if (nSpell == 738) //Stone golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(8, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            }
+        if (nSpell == 739) //Demonflesh golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(3, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(4), ePoly);
+            ePoly = EffectLinkEffects(EffectSpellResistanceIncrease(54), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            }
+        if (nSpell == 740) //Iron golem
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(2, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(5), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly);
+            }
+        if (nSpell == 733) //Azer
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(4), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(1, DAMAGE_TYPE_SLASHING), ePoly);
+            }
+        if (nSpell == 735) //Death slaad
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(2, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(6), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly);
+            }
+        if (nSpell == 704) //Risen Lord
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(4, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(4), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(2, DAMAGE_TYPE_SLASHING), ePoly);
+            }
+        if (nSpell == 705) //Vampire
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(1, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(5), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1), ePoly);
+            ePoly = EffectLinkEffects(EffectDamageIncrease(2, DAMAGE_TYPE_BLUDGEONING), ePoly);
+            ePoly = EffectLinkEffects(EffectRegenerate(2, 6.0), ePoly);
+            }
+        if (nSpell == 706) //Spectre
+            {
+            ePoly = EffectLinkEffects(EffectACIncrease(6, AC_SHIELD_ENCHANTMENT_BONUS), ePoly);
+            ePoly = EffectLinkEffects(EffectAttackIncrease(5), ePoly);
+            ePoly = EffectLinkEffects(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2), ePoly);
+            }
+        if ((nSpell == 707 || nSpell == 708 || nSpell == 709) && GetLevelByClass(CLASS_TYPE_SHIFTER, OBJECT_SELF) < 10) //Dragon nerf for pure druids
+            {
+            ePoly = EffectLinkEffects(EffectAttackDecrease(5), ePoly);
+            }
+        }
+    }
+    if (nSpell == 694) ePoly = EffectLinkEffects(EffectMovementSpeedIncrease(50), ePoly); //A little extra for shifters in dire tiger form :)
+    //The end of the shape boosts
+
+
+    ePoly = ExtraordinaryEffect(ePoly);
+    ClearAllActions(); // prevents an exploit
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
+    ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoly, OBJECT_SELF);
+    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
+
+    //--------------------------------------------------------------------------
+    // This code handles the merging of item properties
+    //--------------------------------------------------------------------------
+    object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF);
+    object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF);
+
+    //identify weapon
+    SetIdentified(oWeaponNew, TRUE);
+
+    //--------------------------------------------------------------------------
+    // ...Weapons
+    //--------------------------------------------------------------------------
+    if (bWeapon)
+    {
+        //----------------------------------------------------------------------
+        // GZ: 2003-10-20
+        // Sorry, but I was forced to take that out, it was confusing people
+        // and there were problems with updating the stats sheet.
+        //----------------------------------------------------------------------
+        /* if (!GetIsObjectValid(oWeaponOld))
+        {
+            //------------------------------------------------------------------
+            // If we had no weapon equipped before, remove the old weapon
+            // to allow monks to change into unarmed forms by not equipping any
+            // weapon before polymorphing
+            //------------------------------------------------------------------
+            DestroyObject(oWeaponNew);
+        }
+        else*/
+        {
+            //------------------------------------------------------------------
+            // Merge item properties...
+            //------------------------------------------------------------------
+            IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE);
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // ...Armor
+    //--------------------------------------------------------------------------
+    if (bArmor)
+    {
+        //----------------------------------------------------------------------
+        // Merge item properties from armor and helmet...
+        //----------------------------------------------------------------------
+        IPWildShapeCopyItemProperties(oArmorOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oShield,oArmorNew);
+    }
+
+    //--------------------------------------------------------------------------
+    // ...Magic Items
+    //--------------------------------------------------------------------------
+    if (bItems)
+    {
+        //----------------------------------------------------------------------
+        // Merge item properties from from rings, amulets, cloak, boots, belt
+        //----------------------------------------------------------------------
+        IPWildShapeCopyItemProperties(oRing1Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oRing2Old,oArmorNew);
+        IPWildShapeCopyItemProperties(oAmuletOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oCloakOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBootsOld,oArmorNew);
+        IPWildShapeCopyItemProperties(oBeltOld,oArmorNew);
+    }
+    if (bArms)
+    {
+        IPWildShapeCopyItemProperties(oArmsOld,oArmorNew);
+    }
+    if (GetLocalInt(GetModule(),"71_POLYMORPH_STACK_ABILITY_BONUSES"))
+    {
+        IPWildShapeStackAbilityBonuses(oArmorNew);
+    }
+
+    //--------------------------------------------------------------------------
+    // Set artificial usage limits for special ability spells to work around
+    // the engine limitation of not being able to set a number of uses for
+    // spells in the polymorph radial
+    //--------------------------------------------------------------------------
+    ShifterSetGWildshapeSpellLimits(nSpell);
+
+}
diff --git a/_removed/x2_s2_hellball.ncs b/_removed/x2_s2_hellball.ncs
new file mode 100644
index 0000000..3b3b823
Binary files /dev/null and b/_removed/x2_s2_hellball.ncs differ
diff --git a/_removed/x2_s2_hellball.nss b/_removed/x2_s2_hellball.nss
new file mode 100644
index 0000000..0d544bd
--- /dev/null
+++ b/_removed/x2_s2_hellball.nss
@@ -0,0 +1,147 @@
+//::///////////////////////////////////////////////
+//:: Hellball
+//:: X2_S2_HELLBALL
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Long range area of effect spell
+    10d6 sonic, acid, fire and lightning damage to all
+    objects in the area
+
+    10d6 points of negative energy damage to caster
+    if MODULE_SWITCH_EPIC_SPELLS_HURT_CASTER switch
+    was enabled on the module.
+
+    This spell is supposed to hurt the caster if he
+    is stupid enough to stand in the area of effect
+    when all hell breaks loose. It will hurt other
+    players allied with the caster as well. These
+    effects are dependent on your difficulty setting
+
+    Save is 20 + relevant ability score, or, when cast
+    by a placeable, equal to the placeables WILL Save
+
+    There is no benefit from the evasion feats here
+    as the are of the spell is too large to avoid it
+
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Noobs, Georg Zoeller
+//:: Created On: 2003-08-20
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- if cast on self, caster wont be affected in order to make the spell bit more usefull
+*/
+
+#include "70_inc_spells"
+#include "x2_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();
+    int nDamage1, nDamage2, nDamage3, nDamage4;
+    float fDelay;
+    effect eExplode = EffectVisualEffect(464);
+    effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
+    effect eVis2 = EffectVisualEffect(VFX_IMP_ACID_L);
+    effect eVis3 = EffectVisualEffect(VFX_IMP_SONIC);
+
+    int nSpellDC = GetEpicSpellSaveDC(spell.Caster)+5;
+
+    // if this option has been enabled, the caster will take damage for casting
+    // epic spells, as descripbed in the ELHB
+    if(GetModuleSwitchValue(MODULE_SWITCH_EPIC_SPELLS_HURT_CASTER))
+    {
+        effect eCast = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
+        int nDamage5 = d6(10);
+        effect eDam5 = EffectDamage(nDamage5, DAMAGE_TYPE_NEGATIVE);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, spell.Caster);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam5, spell.Caster);
+    }
+
+    effect eDam1, eDam2, eDam3, eDam4, eDam5;
+    effect eKnock = EffectKnockdown();
+    object oExclude = spell.Target == spell.Caster ? spell.Target : OBJECT_INVALID;
+
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, spell.Loc);
+
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+
+    int nTotalDamage;
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != oExclude && spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster))
+        {
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, spell.Id));
+
+            fDelay = GetDistanceBetweenLocations(spell.Loc, GetLocation(oTarget))/20 + 0.5;
+            //Roll damage for each target
+            nDamage1 = d6(30);
+            nDamage2 = d6(30);
+            nDamage3 = d6(30);
+            nDamage4 = d6(30);
+            // no we don't care about evasion. there is no evasion to hellball
+            if(spell.Caster == spell.Target) //the spell is weaker when cast on self
+                {
+                    nDamage1 = d6(10);
+                    nDamage2 = d6(10);
+                    nDamage3 = d6(10);
+                    nDamage4 = d6(10);
+                }
+            if(MySavingThrow(SAVING_THROW_REFLEX, oTarget, nSpellDC, SAVING_THROW_TYPE_SPELL, spell.Caster, fDelay))
+            {
+                nDamage1 /=2;
+                nDamage2 /=2;
+                nDamage3 /=2;
+                nDamage4 /=2;
+            }
+            nTotalDamage = nDamage1+nDamage2+nDamage3+nDamage4;
+            //Set the damage effect
+            eDam1 = EffectDamage(nDamage1, DAMAGE_TYPE_ACID);
+            eDam2 = EffectDamage(nDamage2, DAMAGE_TYPE_ELECTRICAL);
+            eDam3 = EffectDamage(nDamage3, DAMAGE_TYPE_FIRE);
+            eDam4 = EffectDamage(nDamage4, DAMAGE_TYPE_SONIC);
+
+            if(nTotalDamage > 0)
+            {
+                if(nTotalDamage > 50)
+                {
+                    DelayCommand(fDelay+0.3, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnock, oTarget, 3.0));
+                }
+
+                // Apply effects to the currently selected target.
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam1, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam3, oTarget));
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam4, oTarget));
+                //This visual effect is applied to the target object not the location as above.  This visual effect
+                //represents the flame that erupts on the target not on the ground.
+                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                DelayCommand(fDelay+0.2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget));
+                DelayCommand(fDelay+0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis3, oTarget));
+            }
+        }
+        //Select the next target within the spell shape.
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, 20.0, spell.Loc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
+    }
+}
diff --git a/_removed/x2_s2_mumdust.ncs b/_removed/x2_s2_mumdust.ncs
new file mode 100644
index 0000000..e1362d9
Binary files /dev/null and b/_removed/x2_s2_mumdust.ncs differ
diff --git a/_removed/x2_s2_mumdust.nss b/_removed/x2_s2_mumdust.nss
new file mode 100644
index 0000000..bd8f388
--- /dev/null
+++ b/_removed/x2_s2_mumdust.nss
@@ -0,0 +1,77 @@
+//::///////////////////////////////////////////////
+//:: Mummy Dust
+//:: X2_S2_MumDust
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+     Summons a strong warrior mummy for you to
+     command.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Feb 07, 2003
+//:://////////////////////////////////////////////
+
+#include "70_inc_spells"
+#include "x2_inc_spellhook"
+
+const float cDist = 5.0;
+const int cNumbersumm = 2;
+
+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;
+        }
+
+    //Declare major variables
+    spellsDeclareMajorVariables();
+    int nDuration = 24;
+    //effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
+    //Summon the appropriate creature based on the summoner level
+    //Warrior Mummy
+
+    //If PC is a powerful pale master, ignore the fact that he has low caster level and summon the strongest mummy
+    if ( GetLevelByClass(CLASS_TYPE_PALE_MASTER, OBJECT_SELF) > 19 )
+        {
+        effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST3",496,1.0);
+        eSummon = ExtraordinaryEffect(eSummon);
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration));
+
+        }
+    else if (GetCasterLevel(OBJECT_SELF) >= 40)
+        {
+        effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST3",496,1.0);
+        if (GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 20) eSummon = EffectSummonCreature("NA_S_TREANTDUST3",496,1.0);
+        eSummon = ExtraordinaryEffect(eSummon);
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration));
+
+        }
+    else if (GetCasterLevel(OBJECT_SELF) >= 31)
+        {
+        effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST2",496,1.0);
+        if (GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 20) eSummon = EffectSummonCreature("NA_S_TREANTDUST2",496,1.0);
+        eSummon = ExtraordinaryEffect(eSummon);
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration));
+
+        }
+    else
+        {
+        effect eSummon = EffectSummonCreature("NA_S_MUMMYDUST1",496,1.0);
+        if (GetLevelByClass(CLASS_TYPE_DRUID, OBJECT_SELF) > 20) eSummon = EffectSummonCreature("NA_S_TREANTDUST1",496,1.0);
+        eSummon = ExtraordinaryEffect(eSummon);
+        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, spell.Loc, HoursToSeconds(nDuration));
+
+        }
+
+}
diff --git a/_removed/x2_s2_poisonwp.ncs b/_removed/x2_s2_poisonwp.ncs
new file mode 100644
index 0000000..09b5e1b
Binary files /dev/null and b/_removed/x2_s2_poisonwp.ncs differ
diff --git a/_removed/x2_s2_poisonwp.nss b/_removed/x2_s2_poisonwp.nss
new file mode 100644
index 0000000..c58f7da
--- /dev/null
+++ b/_removed/x2_s2_poisonwp.nss
@@ -0,0 +1,145 @@
+//::///////////////////////////////////////////////
+//:: Poison Weapon spellscript
+//:: x2_s2_poisonwp
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Spell allows to add temporary poison properties
+    to a melee weapon or stack of arrows
+
+    The exact details of the poison are loaded from
+    a 2da defined in x2_inc_itemprop X2_IP_POSIONWEAPON_2DA
+    taken from the row that matches the last three letters
+    of GetTag(GetSpellCastItem())
+
+    Example: if an item is given the poison weapon property
+             and its tag ending on 004, the 4th row of the
+             2da will be used (1d2IntDmg DC14 18 seconds)
+
+             Rows 0 to 99 are bioware reserved
+
+    Non Assassins have a chance of poisoning themselves
+    when handling an item with this spell
+
+    Restrictions
+    ... only weapons and ammo can be poisoned
+    ... restricted to piercing / slashing  damage
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: 2003-05-11
+//:: Updated On: 2003-08-21
+//:://////////////////////////////////////////////
+/*
+Patch 1.70, fix by ILKAY
+
+- may now poison user if he fails in dexterity check
+*/
+
+#include "x2_inc_itemprop"
+#include "x2_inc_switches"
+
+void main()
+{
+
+  object oItem   = GetSpellCastItem();
+  object oPC     = OBJECT_SELF;
+  object oTarget = GetSpellTargetObject();
+  string sTag    = GetTag(oItem);
+
+  if (oTarget == OBJECT_INVALID || GetObjectType(oTarget) != OBJECT_TYPE_ITEM)
+  {
+       FloatingTextStrRefOnCreature(83359,oPC);         //"Invalid target "
+       return;
+  }
+  int nType = GetBaseItemType(oTarget);
+  if (!IPGetIsMeleeWeapon(oTarget) &&
+      !IPGetIsProjectile(oTarget)   &&
+       nType != BASE_ITEM_SHURIKEN &&
+       nType != BASE_ITEM_DART &&
+       nType != BASE_ITEM_THROWINGAXE)
+  {
+       FloatingTextStrRefOnCreature(83359,oPC);         //"Invalid target "
+       return;
+  }
+
+  if (IPGetIsBludgeoningWeapon(oTarget) && nType != BASE_ITEM_MORNINGSTAR)
+  {
+       FloatingTextStrRefOnCreature(83367,oPC);         //"Weapon does not do slashing or piercing damage "
+       return;
+  }
+
+  if (IPGetItemHasItemOnHitPropertySubType(oTarget, 19)) // 19 == itempoison
+  {
+        FloatingTextStrRefOnCreature(83407,oPC); // weapon already poisoned
+        return;
+  }
+
+  // Get the 2da row to lookup the poison from the last three letters of the tag
+  int nRow = StringToInt(GetStringRight(sTag,3));
+
+  if (nRow ==0)
+  {
+     FloatingTextStrRefOnCreature(83360,oPC);         //"Nothing happens
+     WriteTimestampedLogEntry ("Error: Item with tag " +GetTag(oItem) + " has the PoisonWeapon spellscript attached but tag does not contain 3 letter receipe code at the end!");
+     return;
+  }
+
+   int nSaveDC     =  StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"SaveDC",nRow));
+   int nDuration   =  StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"Duration",nRow));
+   int nPoisonType =  StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"PoisonType",nRow)) ;
+   int nApplyDC    =  StringToInt(Get2DAString(X2_IP_POISONWEAPON_2DA,"ApplyCheckDC",nRow)) ;
+
+   int bHasFeat = GetHasFeat(960, oPC);
+   if (!bHasFeat) // without handle poison feat, do ability check
+   {
+       // * Force attacks of opportunity
+       AssignCommand(oPC,ClearAllActions(TRUE));
+
+
+       // Poison restricted to assassins and blackguards only?
+       if (GetModuleSwitchValue(MODULE_SWITCH_RESTRICT_USE_POISON_TO_FEAT) == TRUE)
+       {
+            FloatingTextStrRefOnCreature(84420,oPC);               //"Failed"
+            return;
+       }
+
+       int nDex = GetAbilityModifier(ABILITY_DEXTERITY,oPC) ;
+       int nCheck = d10(1)+10+nDex;
+       if (nCheck < nApplyDC)
+       {
+           ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(nPoisonType, d2(1)), oPC, IntToFloat(nDuration));
+           ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oPC);
+           FloatingTextStrRefOnCreature(83368,oPC);               //"Failed"
+           return;
+       }
+       else
+       {
+          FloatingTextStrRefOnCreature(83370,oPC);               //"Success"
+       }
+   }
+   else
+   {
+       // some feedback to
+       FloatingTextStrRefOnCreature(83369,oPC);         //"Auto success "
+    }
+
+    itemproperty ip = ItemPropertyOnHitProps(IP_CONST_ONHIT_ITEMPOISON,nSaveDC,nPoisonType);
+   IPSafeAddItemProperty(oTarget, ip,IntToFloat(nDuration),X2_IP_ADDPROP_POLICY_KEEP_EXISTING,TRUE,TRUE);
+
+   effect eVis = EffectVisualEffect(VFX_IMP_PULSE_NATURE);
+   //technically this is not 100% safe but since there is no way to retrieve the sub
+   //properties of an item (i.e. itempoison), there is nothing we can do about it
+   if (IPGetItemHasItemOnHitPropertySubType(oTarget, 19))
+   {
+       FloatingTextStrRefOnCreature(83361,oPC);         //"Weapon is coated with poison"
+       IPSafeAddItemProperty(oTarget, ItemPropertyVisualEffect(ITEM_VISUAL_ACID),IntToFloat(nDuration),X2_IP_ADDPROP_POLICY_KEEP_EXISTING,TRUE,FALSE);
+       ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, GetItemPossessor(oTarget));
+   }
+   else
+   {
+       FloatingTextStrRefOnCreature(83360,oPC);         //"Nothing happens
+   }
+
+}
diff --git a/_removed/x2_s2_ruin.ncs b/_removed/x2_s2_ruin.ncs
new file mode 100644
index 0000000..1a15890
Binary files /dev/null and b/_removed/x2_s2_ruin.ncs differ
diff --git a/_removed/x2_s2_ruin.nss b/_removed/x2_s2_ruin.nss
new file mode 100644
index 0000000..89497b6
--- /dev/null
+++ b/_removed/x2_s2_ruin.nss
@@ -0,0 +1,70 @@
+//::///////////////////////////////////////////////
+//:: Greater Ruin
+//:: X2_S2_Ruin
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+// The caster deals 35d6 damage to a single target
+   fort save for half damage
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Nov 18, 2002
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- spell now same as any non-epic direct target spell can hurt even neutral target
+*/
+
+#include "70_inc_spells"
+#include "x2_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();
+
+    float fDist = GetDistanceBetween(spell.Caster, spell.Target);
+    float fDelay = fDist/(3.0 * log(fDist) + 2.0);
+
+    int nSpellDC = GetEpicSpellSaveDC(spell.Caster)+5;
+
+    if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster))
+    {
+        //Fire cast spell at event for the specified target
+        SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id));
+        //Roll damage
+        int nDam = d6(40);
+        //Set damage effect
+
+        if(!MySavingThrow(SAVING_THROW_FORT, spell.Target, nSpellDC, SAVING_THROW_TYPE_SPELL, spell.Caster))
+        {
+            nDam = d100(20);
+        }
+
+        effect eDam = EffectDamage(nDam, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_PLUS_TWENTY);
+        ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), spell.Loc);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(487), spell.Target);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_BLOOD_CRT_RED), spell.Target);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM), spell.Target);
+        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target));
+    }
+}
diff --git a/_removed/x2_s2_shiftdom.ncs b/_removed/x2_s2_shiftdom.ncs
new file mode 100644
index 0000000..f76af0c
Binary files /dev/null and b/_removed/x2_s2_shiftdom.ncs differ
diff --git a/_removed/x2_s2_shiftdom.nss b/_removed/x2_s2_shiftdom.nss
new file mode 100644
index 0000000..a27edc4
--- /dev/null
+++ b/_removed/x2_s2_shiftdom.nss
@@ -0,0 +1,93 @@
+//::///////////////////////////////////////////////
+//:: Gaze: Dominate (Shifter)
+//:: x2_s2_shiftdom
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Cone shape that affects all within the AoE if they
+    fail a Will Save.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Georg Zoeller
+//:: Created On: Oct, 2003
+//:://////////////////////////////////////////////
+/*
+Patch 1.70
+
+- ability could been wasted on mind immune target
+*/
+
+#include "x0_i0_spells"
+#include "x2_inc_shifter"
+
+void main()
+{
+    //-------------------------------------------------------------------------
+    // If blinded, I am not able to use this attack
+    //--------------------------------------------------------------------------
+    if( GZCanNotUseGazeAttackCheck(OBJECT_SELF))
+    {
+        return;
+    }
+
+    //--------------------------------------------------------------------------
+    // Enforce artifical use limit on that ability
+    //--------------------------------------------------------------------------
+    /*if (ShifterDecrementGWildShapeSpellUsesLeft() <1 )
+    {
+        FloatingTextStrRefOnCreature(83576, OBJECT_SELF);
+        return;
+    }*/
+
+    //--------------------------------------------------------------------------
+    // Set up save DC and duration
+    //--------------------------------------------------------------------------
+    int nDuration = Random(GetAbilityModifier(ABILITY_WISDOM))+d4();
+    int nDC = ShifterGetSaveDC(OBJECT_SELF,SHIFTER_DC_VERY_EASY) + GetAbilityModifier(ABILITY_WISDOM);
+
+    location lTargetLocation = GetSpellTargetLocation();
+    effect eGaze = EffectDominated();
+    effect eVis = EffectVisualEffect(VFX_IMP_DOMINATE_S);
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
+    effect eVisDur = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED);
+    effect eLink = EffectLinkEffects(eDur, eVisDur);
+
+    //Make it more useful for high-level shifters
+    int nBonus;
+    if (GetLevelByClass(CLASS_TYPE_SHIFTER) > 25) nBonus = GetLevelByClass(CLASS_TYPE_SHIFTER) - 25;
+    else nBonus = 0;
+    nDC = nDC + nBonus;
+    nDuration = nDuration + nBonus;
+
+    //--------------------------------------------------------------------------
+    // Loop through all targets in the cone, but only dominate one!
+    //--------------------------------------------------------------------------
+    object oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
+    while(GetIsObjectValid(oTarget))
+    {
+        if(oTarget != OBJECT_SELF && spellsIsTarget(oTarget,SPELL_TARGET_SELECTIVEHOSTILE,OBJECT_SELF))
+        {
+            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_GAZE_DOMINATE));
+            float fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
+            if(!GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS, OBJECT_SELF))
+            {
+                if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS, OBJECT_SELF, fDelay))
+                {
+                    //--------------------------------------------------------------------------
+                    // Effects do not stack
+                    //--------------------------------------------------------------------------
+                    if (!GetHasSpellEffect(GetSpellId(),oTarget))
+                    {
+                        eGaze = GetScaledEffect(eGaze, oTarget);
+                        eLink = EffectLinkEffects(eLink, eGaze);
+                        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+                        DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration)));
+                        break;
+                    }
+                }
+            }
+        }
+        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, lTargetLocation, TRUE);
+    }
+}
diff --git a/_removed/x2_s2_sumgrund.ncs b/_removed/x2_s2_sumgrund.ncs
new file mode 100644
index 0000000..6e704da
Binary files /dev/null and b/_removed/x2_s2_sumgrund.ncs differ
diff --git a/_removed/x2_s2_sumgrund.nss b/_removed/x2_s2_sumgrund.nss
new file mode 100644
index 0000000..e6e8269
--- /dev/null
+++ b/_removed/x2_s2_sumgrund.nss
@@ -0,0 +1,132 @@
+//::///////////////////////////////////////////////
+//:: Summon Greater Undead
+//:: X2_S2_SumGrUnd
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+     2003-10-03 - GZ: Added Epic Progression
+     The level of the Pale Master determines the
+     type of undead that is summoned.
+
+     Level 9 <= Mummy Warrior
+     Level 10 <= Spectre
+     Level 12 <= Vampire Rogue
+     Level 14 <= Bodak
+     Level 16 <= Ghoul King
+     Level 18 <= Vampire Mage
+     Level 20 <= Skeleton Blackguard
+     Level 22 <= Lich
+     Level 24 <= Lich Lord
+     Level 26 <= Alhoon
+     Level 28 <= Elder Alhoon
+     Level 30 <= Lesser Demi Lich
+
+     Lasts 14 + Casterlevel rounds
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Feb 05, 2003
+//:://////////////////////////////////////////////
+
+void PMUpgradeSummon(object oSelf, string sScript)
+{
+    object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oSelf);
+    ExecuteScript ( sScript, oSummon);
+}
+
+void main()
+{
+
+    int nCasterLevel = GetLevelByClass(CLASS_TYPE_PALEMASTER,OBJECT_SELF);
+    int nDuration = 14 + nCasterLevel;
+
+    effect eSummon;
+
+    //--------------------------------------------------------------------------
+    // Summon the appropriate creature based on the summoner level
+    //--------------------------------------------------------------------------
+    if (nCasterLevel >= 30)
+    {
+        // * Dracolich
+        eSummon = EffectSummonCreature("S_DRACOLICH",496,0.0f,1);
+    }
+    else if (nCasterLevel >= 29)
+    {
+        // * Demi Lich
+        eSummon = EffectSummonCreature("X2_S_LICH_30",496,0.0f,1);
+    }
+    else if (nCasterLevel >= 28)
+    {
+        // * Mega Alhoon
+        eSummon = EffectSummonCreature("x2_s_lich_26",496,0.0f,1);
+    }
+    else if (nCasterLevel >= 26)
+    {
+        // * Alhoon
+        eSummon = EffectSummonCreature("X2_S_LICH_24",496,0.0f,1);
+    }
+    else if (nCasterLevel >= 24)
+    {
+        // * Lich
+        eSummon = EffectSummonCreature("X2_S_LICH_22",496,0.0f,0);
+    }
+    else if (nCasterLevel >= 22)
+    {
+        // * Lich
+        eSummon = EffectSummonCreature("X2_S_LICH_20",496,0.0f,0);
+    }
+    else if (nCasterLevel >= 20)
+    {
+        // * Skeleton Blackguard
+        eSummon = EffectSummonCreature("x2_s_bguard_18",VFX_IMP_HARM,0.0f,0);
+    }
+    else if (nCasterLevel >= 18)
+    {
+        // * Vampire Mage
+        eSummon = EffectSummonCreature("x2_s_vamp_18",VFX_FNF_SUMMON_UNDEAD,0.0f,1);
+    }
+    else if (nCasterLevel >= 16)
+    {
+        // * Ghoul King
+        eSummon = EffectSummonCreature("X2_S_GHOUL_16",VFX_IMP_HARM,0.0f,0);
+    }
+    else if (nCasterLevel >= 14)
+    {
+        // * Greater Bodak
+        eSummon = EffectSummonCreature("X2_S_BODAK_14",VFX_IMP_HARM,0.0f,0);
+    }
+    else if (nCasterLevel >= 12)
+    {
+        // * Vampire Rogue
+        eSummon = EffectSummonCreature("X2_S_VAMP_10",VFX_FNF_SUMMON_UNDEAD,0.0f,1);
+    }
+    else if (nCasterLevel >= 10)
+    {
+      eSummon = EffectSummonCreature("X2_S_SPECTRE_10",VFX_FNF_SUMMON_UNDEAD, 0.0f,1);
+    }
+    else
+    {
+        // * Mummy
+        eSummon = EffectSummonCreature("X2_S_MUMMY_9",VFX_IMP_HARM, 0.0f,0);
+    }
+
+
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_LOS_EVIL_10),GetSpellTargetLocation());
+    //Apply the summon visual and summon the two undead.
+    //ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
+    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration));
+
+    // * If the character has a special pale master item equipped (variable set via OnEquip)
+    // * run a script on the summoned monster.
+    string sScript = GetLocalString(OBJECT_SELF,"X2_S_PM_SPECIAL_ITEM");
+    if (sScript != "")
+    {
+        object oSelf = OBJECT_SELF;
+        DelayCommand(1.0,PMUpgradeSummon(oSelf,sScript));
+    }
+}
+
+
+
+
+
diff --git a/_removed/x2_s2_sumundead.ncs b/_removed/x2_s2_sumundead.ncs
new file mode 100644
index 0000000..fc0d929
Binary files /dev/null and b/_removed/x2_s2_sumundead.ncs differ
diff --git a/_removed/x2_s2_sumundead.nss b/_removed/x2_s2_sumundead.nss
new file mode 100644
index 0000000..0833efd
--- /dev/null
+++ b/_removed/x2_s2_sumundead.nss
@@ -0,0 +1,78 @@
+//::///////////////////////////////////////////////
+//:: Summon Undead
+//:: X2_S2_SumUndead
+//:: Copyright (c) 2001 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+     The level of the Pale Master determines the
+     type of undead that is summoned.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Andrew Nobbs
+//:: Created On: Feb 05, 2003
+//:: Updated By: Georg Zoeller, Oct 2003
+//:://////////////////////////////////////////////
+
+void PMUpgradeSummon(object oSelf, string sScript)
+{
+    object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED,oSelf);
+    ExecuteScript ( sScript, oSummon);
+}
+
+void main()
+{
+    //Declare major variables
+    int nCasterLevel = GetLevelByClass(CLASS_TYPE_PALEMASTER,OBJECT_SELF);
+    int nDuration = 14 + nCasterLevel;
+
+
+    //effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
+    effect eSummon;
+    //Summon the appropriate creature based on the summoner level
+    if (nCasterLevel <= 5)
+    {
+        //Ghoul
+        eSummon = EffectSummonCreature("NW_S_GHOUL",VFX_IMP_HARM,0.0f,0);
+    }
+    else if (nCasterLevel == 6)
+    {
+        //Shadow
+        eSummon = EffectSummonCreature("NW_S_SHADOW",VFX_IMP_HARM,0.0f,0);
+    }
+    else if (nCasterLevel == 7)
+    {
+        //Ghast
+        eSummon = EffectSummonCreature("NW_S_GHAST",VFX_IMP_HARM,0.0f,1);
+    }
+    else if (nCasterLevel == 8)
+    {
+        //Wight
+        eSummon = EffectSummonCreature("NW_S_WIGHT",VFX_FNF_SUMMON_UNDEAD,0.0f,1);
+    }
+    else if (nCasterLevel >= 9)
+    {
+        //Wraith
+        eSummon = EffectSummonCreature("X2_S_WRAITH",VFX_FNF_SUMMON_UNDEAD,0.0f,1);
+    }
+
+    if (nCasterLevel >= 20)
+    {
+        // * Soul Stealer
+        eSummon = EffectSummonCreature("S_STEALER",496,0.0f,1);
+    }
+    // * Apply the summon visual and summon the two undead.
+    // * ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_LOS_EVIL_10),GetSpellTargetLocation());
+    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration));
+
+    // * If the character has a special pale master item equipped (variable set via OnEquip)
+    // * run a script on the summoned monster.
+    string sScript = GetLocalString(OBJECT_SELF,"X2_S_PM_SPECIAL_ITEM");
+    if (sScript != "")
+    {
+        object oSelf = OBJECT_SELF;
+        DelayCommand(1.0,PMUpgradeSummon(oSelf,sScript));
+    }
+}
+
+
diff --git a/_removed/x2_s3_sequencer.ncs b/_removed/x2_s3_sequencer.ncs
new file mode 100644
index 0000000..3412fc2
Binary files /dev/null and b/_removed/x2_s3_sequencer.ncs differ
diff --git a/_removed/x2_s3_sequencer.nss b/_removed/x2_s3_sequencer.nss
new file mode 100644
index 0000000..77eba8b
--- /dev/null
+++ b/_removed/x2_s3_sequencer.nss
@@ -0,0 +1,73 @@
+//::///////////////////////////////////////////////
+//:: x2_s3_sequencer
+//:: Copyright (c) 2003 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+    Fires the spells stored on this sequencer.
+    GZ: - Also handles clearing off spells if the
+          item has the clear sequencer property
+        - added feedback strings
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Brent
+//:: Created On: July 31, 2003
+//:: Updated By: Georg
+//:://////////////////////////////////////////////
+
+#include "x2_inc_itemprop"
+void main()
+{
+    object oItem = GetSpellCastItem();
+    object oPC =   OBJECT_SELF;
+
+    int i = 0;
+    int nSpellId = -1;
+    int nMode = GetSpellId();
+
+    int iMax = IPGetItemSequencerProperty(oItem);
+
+    if (iMax ==0) // Should never happen unless you added clear sequencer to a non sequencer item
+    {
+        return;
+    }
+    if (nMode == 720 ) // clear seqencer
+    {
+        for (i = 1; i <= iMax; i++)
+        {
+            DeleteLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i));
+        }
+        DeleteLocalInt(oItem, "X2_L_NUMTRIGGERS");
+        effect eClear = EffectVisualEffect(VFX_IMP_BREACH);
+        ApplyEffectToObject(DURATION_TYPE_INSTANT,eClear,OBJECT_SELF);
+        FloatingTextStrRefOnCreature(83882,OBJECT_SELF); // sequencer cleared
+    }
+    else
+    {
+        if (GetLocalInt(oPC, "SequencerUsed") == TRUE)
+        {
+            SendMessageToPC(oPC, "You can only use a single magic staff per day!");
+            return;
+        }
+        int bSuccess = FALSE;
+        for (i = 1; i <= iMax; i++)
+        {
+            nSpellId = GetLocalInt(oItem, "X2_L_SPELLTRIGGER" + IntToString(i));
+            if (nSpellId>0)
+            {
+                bSuccess = TRUE;
+                nSpellId --; // I added +1 to the spellID when the sequencer was created, so I have to remove it here
+                if (nSpellId == 636 || nSpellId == 637 || nSpellId == 638 || nSpellId == 639 || nSpellId == 640 || nSpellId == 695)
+                {
+                FloatingTextStringOnCreature("This spell is too powerful to be cast with your staff!",OBJECT_SELF);
+                return;
+                }
+                ActionCastSpellAtObject(nSpellId, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE);
+                SetLocalInt(oPC, "SequencerUsed", TRUE);
+            }
+        }
+        if (!bSuccess)
+        {
+            FloatingTextStrRefOnCreature(83886,OBJECT_SELF); // no spells stored
+         }
+    }
+}
diff --git a/_removed/x3_s2_palmount.ncs b/_removed/x3_s2_palmount.ncs
new file mode 100644
index 0000000..ec10f35
Binary files /dev/null and b/_removed/x3_s2_palmount.ncs differ
diff --git a/_removed/x3_s2_palmount.nss b/_removed/x3_s2_palmount.nss
new file mode 100644
index 0000000..b55046d
--- /dev/null
+++ b/_removed/x3_s2_palmount.nss
@@ -0,0 +1,39 @@
+//::///////////////////////////////////////////////
+//:: Post Mount Script for a Paladin Mount
+//:: x3_s2_palmount
+//:: Copyright (c) 2007 Bioware Corp.
+//:://////////////////////////////////////////////
+/*
+     This script is fired by the rider after successfully mounting
+     a summoned paladin mount.  It's primary duty is to make sure monitoring
+     for paladin mount unsummoning still occurs while the mount is mounted.
+
+     X3_EXTEND_PALMOUNT = string variable that if set on the module object
+     will allow a person to extend this paladin mount script to call other
+     scripts in a daisy chain type situation such as saddle bag handling ones.
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Deva B. Winblood
+//:: Created On: 2008-01-01
+//:: Last Update: March 29th, 2008
+//:://////////////////////////////////////////////
+
+#include "x3_inc_horse"
+void main()
+{
+
+   object oRider = OBJECT_SELF;
+   object oHorse = GetLocalObject(oRider, "oX3_TempHorse");
+   string sScript = GetLocalString(GetModule(), "X3_EXTEND_PALMOUNT");
+   SetLocalObject(oRider, "oX3_PALADIN_MOUNT", oRider);
+   HORSE_SupportIncreaseSpeed(oRider, OBJECT_INVALID);
+   HORSE_SupportAdjustMountedArcheryPenalty(oRider);
+   HORSE_SupportApplyACBonus(oRider, oHorse);
+   HORSE_SupportApplyHPBonus(oRider, oHorse);
+   DelayCommand(0.5, HORSE_SupportApplyMountedSkillDecreases(oRider));
+   SetLocalInt(oRider, "bX3_HORSE_MODIFIERS", TRUE);
+   HORSE_SupportMonitorPaladinUnsummon(oRider);
+   if (GetStringLength(sScript) >  0) ExecuteScript(sScript, oRider);
+
+}
diff --git a/_removed/x3_s2_pdk_fear.ncs b/_removed/x3_s2_pdk_fear.ncs
new file mode 100644
index 0000000..1141644
Binary files /dev/null and b/_removed/x3_s2_pdk_fear.ncs differ
diff --git a/_removed/x3_s2_pdk_fear.nss b/_removed/x3_s2_pdk_fear.nss
new file mode 100644
index 0000000..b054a37
--- /dev/null
+++ b/_removed/x3_s2_pdk_fear.nss
@@ -0,0 +1,79 @@
+//::///////////////////////////////////////////////
+//:: Purple Dragon Knight - Fear ability
+//:: x3_s2_pdk_fear.nss
+//:://////////////////////////////////////////////
+//:: Identical to the Fear Spell, except it uses
+//:: the PDK's character level
+//:://////////////////////////////////////////////
+//:: Created By: Stratovarius
+//:: Created On: Sept 22, 2005
+//:://////////////////////////////////////////////
+
+#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 - Spell Cast Hook -------------------------------------------
+
+    // Declare/assign major variables
+    spellsDeclareMajorVariables();
+    int nDamage;// Will hold damage value
+    float fDelay;// For delay value
+    int nCasterLevel = GetHitDice(spell.Caster);// Character level for caster level
+    float fDuration = RoundsToSeconds(nCasterLevel);// Determine duration based on level
+//    effect eVis = EffectVisualEffect(VFX_IMP_FEAR_S); //invalid vfx
+    effect eFear = EffectFrightened();// Get Frightened effect
+    effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);// Get VFX
+    effect eImpact = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);// Get VFX
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);// Get VFX
+
+    // Link the fear and mind effects
+    effect eLink = EffectLinkEffects(eFear, eMind);
+    eLink = EffectLinkEffects(eLink, eDur);
+
+    // Apply Impact
+    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, spell.Loc);
+
+    // Get first target in the spell cone
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc, TRUE);
+
+    // Keep processing targets until no valid ones left
+    int nDC = 5 + nCasterLevel/2 + GetAbilityModifier(ABILITY_STRENGTH, spell.Caster);
+    while(GetIsObjectValid(oTarget))
+    {
+        if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, spell.Caster))
+        {
+            fDelay = GetRandomDelay();
+
+            // Cause the SpellCastAt event to be triggered on oTarget
+            SignalEvent(oTarget, EventSpellCastAt(spell.Caster, SPELL_FEAR));//direct ID here, well ok seems like intend
+
+            // Make SR Check
+            if(!MyResistSpell(spell.Caster, oTarget, fDelay))
+            {
+                //Make a will save
+                if(!MySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, spell.Caster, fDelay))
+                {
+                    //Apply the linked effects and the VFX impact
+                    DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration));
+                }
+            }
+        }
+        //Get next target in the spell cone
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, spell.Loc, TRUE);
+    }
+}
diff --git a/_removed/x3_s2_pdk_inspir.ncs b/_removed/x3_s2_pdk_inspir.ncs
new file mode 100644
index 0000000..77dfdae
Binary files /dev/null and b/_removed/x3_s2_pdk_inspir.ncs differ
diff --git a/_removed/x3_s2_pdk_inspir.nss b/_removed/x3_s2_pdk_inspir.nss
new file mode 100644
index 0000000..d90c439
--- /dev/null
+++ b/_removed/x3_s2_pdk_inspir.nss
@@ -0,0 +1,75 @@
+//::///////////////////////////////////////////////
+//:: Purple Dragon Knight - Inspire Courage
+//:: x3_s2_pdk_inspir.nss
+//:://////////////////////////////////////////////
+//:: Increase attack, damage, saving throws to
+//:: friends in area of spell
+//:://////////////////////////////////////////////
+//:: Created By: Stratovarius
+//:: Created On: Sept 22, 2005
+//:://////////////////////////////////////////////
+/*
+    Modified By : gaoneng erick
+    Modified On : may 6, 2006
+    added custom vfx
+*/
+
+#include "x0_i0_spells"
+
+void main()
+{
+    if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
+    {
+     // Not useable when silenced. Floating text to user
+        FloatingTextStrRefOnCreature(85764,OBJECT_SELF);
+        return;
+    }
+
+    //Declare major variables
+    int nChr = GetAbilityModifier(ABILITY_CHARISMA,OBJECT_SELF);
+    int nDuration = 5+ nChr;
+    effect eAttack = EffectAttackIncrease(2);// Attack effect increased
+    effect eDamage = EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BLUDGEONING);// Increased damage effect
+    effect eLink = EffectLinkEffects(eAttack, eDamage);// link effects
+
+    effect eSave = EffectSavingThrowIncrease(SAVING_THROW_WILL, 3, SAVING_THROW_TYPE_MIND_SPELLS);// Saving throw increase
+    eLink = EffectLinkEffects(eLink, eSave);// link in saving throw
+    eLink = ExtraordinaryEffect(eLink);// make effects ExtraOrdinary
+
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);// Get VFX
+    eLink = EffectLinkEffects(eLink, eDur);// link VFXs
+
+    effect eImpact = EffectVisualEffect(VFX_IMP_PDK_GENERIC_HEAD_HIT);// Get VFX
+
+    // Apply effect at location
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_INSPIRE_COURAGE), OBJECT_SELF);
+    DelayCommand(0.8, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_GENERIC_PULSE), OBJECT_SELF));
+
+    // Get first target
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+
+    // Keep processing while oTarget is valid
+    while(GetIsObjectValid(oTarget))
+    {
+         // * GZ Oct 2003: If we are silenced, we can not benefit from bard song
+         if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
+         {
+            if(oTarget == OBJECT_SELF)
+            {
+                // oTarget is caster, apply effects
+                DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget));
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eLink), oTarget, RoundsToSeconds(nDuration));
+
+            }
+            else if(GetIsNeutral(oTarget) || GetIsFriend(oTarget))
+            {
+                // oTarget is a friend, apply effects
+                DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget));
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
+            }
+        }
+
+        // Get next object in the sphere
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    }
+}
diff --git a/_removed/x3_s2_pdk_rally.ncs b/_removed/x3_s2_pdk_rally.ncs
new file mode 100644
index 0000000..d7546be
Binary files /dev/null and b/_removed/x3_s2_pdk_rally.ncs differ
diff --git a/_removed/x3_s2_pdk_rally.nss b/_removed/x3_s2_pdk_rally.nss
new file mode 100644
index 0000000..0f9ec5e
--- /dev/null
+++ b/_removed/x3_s2_pdk_rally.nss
@@ -0,0 +1,69 @@
+//::///////////////////////////////////////////////
+//:: Purple Dragon Knight - Rallying Cry
+//:: x3_s2_pdk_rally.nss
+//:://////////////////////////////////////////////
+//:: Increase attack & movement for friends in
+//:: area of spell
+//:://////////////////////////////////////////////
+//:: Created By: Stratovarius
+//:: Created On: Sept 22, 2005
+//:://////////////////////////////////////////////
+/*
+    Modified By : gaoneng erick
+    Modified On : may 6, 2006
+    added custom vfx
+*/
+
+#include "x0_i0_spells"
+
+void main()
+{
+    if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
+    {
+// Not useable when silenced. Floating text to user
+        FloatingTextStrRefOnCreature(85764,OBJECT_SELF);
+        return;
+    }
+
+    //Declare major variables
+    int nChr = GetAbilityModifier(ABILITY_CHARISMA,OBJECT_SELF);
+    int nDuration = 1+ nChr;
+    effect eAttack = EffectAttackIncrease(2);// Increase attack by 1
+    effect eSpeed = EffectMovementSpeedIncrease(25);// Increase movement
+    effect eLink = EffectLinkEffects(eAttack, eSpeed);// Link effects
+    eLink = ExtraordinaryEffect(eLink);// Make effects ExtraOrdinary
+
+    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);// Get VFX
+    eLink = EffectLinkEffects(eLink, eDur);// Link effects
+
+    effect eImpact = EffectVisualEffect(VFX_IMP_PDK_GENERIC_HEAD_HIT);// Get VFX
+
+    // Apply effect at a location
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_RALLYING_CRY), OBJECT_SELF);
+    DelayCommand(0.8, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_GENERIC_PULSE), OBJECT_SELF));
+
+    // Get first object in sphere
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    // Keep processing until oTarget is not valid
+    while(GetIsObjectValid(oTarget))
+    {
+         // * GZ Oct 2003: If we are silenced, we can not benefit from bard song
+         if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
+         {
+            if(oTarget == OBJECT_SELF)
+            {
+                // oTarget is caster, apply effects
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(eLink), oTarget, RoundsToSeconds(nDuration));
+
+            }
+            else if(GetIsNeutral(oTarget) || GetIsFriend(oTarget))
+            {
+                // oTarget is a friend, apply effects
+                DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget));
+                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
+            }
+        }
+        // Get next object in the sphere
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
+    }
+}
diff --git a/_removed/x3_s2_pdk_shield.ncs b/_removed/x3_s2_pdk_shield.ncs
new file mode 100644
index 0000000..18e30b0
Binary files /dev/null and b/_removed/x3_s2_pdk_shield.ncs differ
diff --git a/_removed/x3_s2_pdk_shield.nss b/_removed/x3_s2_pdk_shield.nss
new file mode 100644
index 0000000..ed4ea1f
--- /dev/null
+++ b/_removed/x3_s2_pdk_shield.nss
@@ -0,0 +1,40 @@
+//::///////////////////////////////////////////////
+//:: Purple Dragon Knight - Heroic Shield
+//:: x3_s2_pdk_shield.nss
+//:://////////////////////////////////////////////
+//:: Applies a temporary AC bonus to one ally
+//:://////////////////////////////////////////////
+//:: Created By: Stratovarius
+//:://////////////////////////////////////////////
+/*
+    Modified By : gaoneng erick
+    Modified On : may 6, 2006
+    added custom vfx
+*/
+
+
+void main()
+{
+    //Declare main variables.
+    object oPC = OBJECT_SELF;
+    object oTarget = GetSpellTargetObject();
+    int nBonus = 4;
+
+    if (GetLocalInt(oPC, "PDKHeroicTracking"))
+    {
+        FloatingTextStringOnCreature("You can only use this ability once a round", oPC, FALSE);
+        return;
+    }
+    if (!GetIsFriend(oTarget))
+    {
+        FloatingTextStringOnCreature("You cannot aid an enemy using this ability", oPC, FALSE);
+        return;
+    }
+
+    effect eAC = EffectACIncrease(nBonus);
+    effect eVFX = EffectVisualEffect(VFX_IMP_PDK_HEROIC_SHIELD);
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAC, oTarget, RoundsToSeconds(2));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oTarget);
+    SetLocalInt(oPC, "PDKHeroicTracking", TRUE);
+    DelayCommand(10.0, DeleteLocalInt(oPC, "PDKHeroicTracking"));
+}
diff --git a/_removed/x3_s2_pdk_stand.ncs b/_removed/x3_s2_pdk_stand.ncs
new file mode 100644
index 0000000..9650328
Binary files /dev/null and b/_removed/x3_s2_pdk_stand.ncs differ
diff --git a/_removed/x3_s2_pdk_stand.nss b/_removed/x3_s2_pdk_stand.nss
new file mode 100644
index 0000000..cc3f09c
--- /dev/null
+++ b/_removed/x3_s2_pdk_stand.nss
@@ -0,0 +1,58 @@
+//::///////////////////////////////////////////////
+//:: Purple Dragon Knight - Final Stand
+//:: x3_s2_pdk_stand.nss
+//:://////////////////////////////////////////////
+//:: Add temporary hitpoints to friends in spell
+//:: sphere.
+//:://////////////////////////////////////////////
+//:: Created By: Stratovarius
+//:: Created On: Sept 22, 2005
+//:://////////////////////////////////////////////
+/*
+    Modified By : gaoneng erick
+    Modified On : may 6, 2006
+    added custom vfx
+*/
+
+
+void main()
+{
+    object oPDK = OBJECT_SELF;
+    int nCount = GetLevelByClass(CLASS_TYPE_PURPLE_DRAGON_KNIGHT, oPDK) + GetAbilityModifier(ABILITY_CHARISMA, oPDK);
+
+    int nHP = d10(10);
+    effect eHP = EffectTemporaryHitpoints(nHP);// Increase hit points
+    eHP = ExtraordinaryEffect(eHP);// Make effect ExtraOrdinary
+    effect eVis = EffectVisualEffect(VFX_IMP_PDK_GENERIC_HEAD_HIT);// Get VFX
+
+    DelayCommand(0.8, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_GENERIC_PULSE), oPDK));
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_FINAL_STAND), oPDK);
+
+    int nTargetsLeft = nCount;// Number of targets equals level
+
+    // Declare the spell shape, size and the location.  Capture the first target object in the shape.
+    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE);
+
+    // Cycle through the targets within the spell shape until you run out of targets.
+    while (GetIsObjectValid(oTarget) && nTargetsLeft > 0)
+    {
+        if(oTarget == OBJECT_SELF)
+        {
+            DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nCount));
+            // Every time you apply effects, count down remaining targets
+            nTargetsLeft -= 1;
+
+        }
+        else if(GetIsNeutral(oTarget) || GetIsFriend(oTarget))
+        {
+            DelayCommand(0.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
+            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nCount));
+            // Every time you apply effects, count down
+            nTargetsLeft -= 1;
+        }
+
+        // Select the next target within the spell shape.
+        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF), TRUE, OBJECT_TYPE_CREATURE);
+    }
+}
diff --git a/_removed/x3_s2_pdk_wrath.ncs b/_removed/x3_s2_pdk_wrath.ncs
new file mode 100644
index 0000000..8368628
Binary files /dev/null and b/_removed/x3_s2_pdk_wrath.ncs differ
diff --git a/_removed/x3_s2_pdk_wrath.nss b/_removed/x3_s2_pdk_wrath.nss
new file mode 100644
index 0000000..8ee17d4
--- /dev/null
+++ b/_removed/x3_s2_pdk_wrath.nss
@@ -0,0 +1,60 @@
+//::///////////////////////////////////////////////
+//:: Purple Dragon Knight - Oath of Wrath
+//:: x3_s2_pdk_wrath.nss
+//:://////////////////////////////////////////////
+//:: Applies a temporary Attack, Save, Damage, Skill bonus vs
+//:: monsters of the targets racial type
+//:://////////////////////////////////////////////
+//:: Created By: Stratovarius
+//:: Created On: Sept 22, 2005
+//:://////////////////////////////////////////////
+/*
+    Modified By : gaoneng erick
+    Modified On : may 6, 2006
+    added custom vfx
+*/
+
+
+void main()
+{
+    //Declare main variables.
+    object oPC = OBJECT_SELF;
+    object oTarget = GetSpellTargetObject();// Target
+
+    if (oPC == oTarget)
+    {
+         FloatingTextStringOnCreature("You cannot target yourself using this ability", oPC, FALSE);
+         return;
+    }
+    if (GetIsFriend(oTarget))
+    {
+         FloatingTextStringOnCreature("You cannot target an ally using this ability", oPC, FALSE);
+         return;
+    }
+
+    int nRace = GetRacialType(oTarget);// Get race of target
+    int nClass = GetLevelByClass(CLASS_TYPE_PURPLE_DRAGON_KNIGHT, oPC);
+    int nDur = nClass * 2;// Duration
+    int nBonus = 2;// Bonus value
+
+    effect eAttack = EffectAttackIncrease(nBonus);// Increase attack
+    effect eDamage = EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BLUDGEONING);// Increase damage
+    effect eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus);// Increase saving throws
+    effect eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, nBonus);    // Increase skills
+
+    // Create 'versis racial type' effects
+    eAttack = VersusRacialTypeEffect(eAttack, nRace);
+    eDamage = VersusRacialTypeEffect(eDamage, nRace);
+    eSave = VersusRacialTypeEffect(eSave, nRace);
+    eSkill = VersusRacialTypeEffect(eSkill, nRace);
+
+    // Apply effects to caster
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, RoundsToSeconds(nDur));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDamage, oPC, RoundsToSeconds(nDur));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSave, oPC, RoundsToSeconds(nDur));
+    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSkill, oPC, RoundsToSeconds(nDur));
+
+    // apply fx
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_OATH), oPC);
+    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PDK_WRATH), oTarget);
+}