//:://///////////////////////////////////////////// //:: Tensor's Transformation //:: NW_S0_TensTrans.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* Gives the caster the following bonuses: +1 Attack per 2 levels +4 Natural AC 20 STR and DEX and CON 1d6 Bonus HP per level +5 on Fortitude Saves -10 Intelligence */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Oct 26, 2001 //::////////////////////////////////////////////// //: Sep2002: losing hit-points won't get rid of the rest of the bonuses //::///////////////////////////////////////////// //:: Modified by C.R. Hain (AKA Lord Niah) //:: on: Feb 3, 2003 ///////////////////////////////////////////////// /* Spell no longer applies polymorph effect so that player can now use their own equipment Also increases discipline skill */ #include "x2_inc_spellhook" //#include "x2_inc_itemprop" //#include "x2_inc_shifter" void main() { //---------------------------------------------------------------------------- // GZ, Nov 3, 2003 // There is a serious problems with creatures turning into unstoppable killer // machines when affected by tensors transformation. NPC AI can't handle that // spell anyway, so I added this code to disable the use of Tensors by any // NPC. //---------------------------------------------------------------------------- if (!GetIsPC(OBJECT_SELF)) { WriteTimestampedLogEntry(GetName(OBJECT_SELF) + "[" + GetTag (OBJECT_SELF) +"] tried to cast Tensors Transformation. Bad! Remove that spell from the creature"); return; } /* 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()) { return; } // End of Spell Cast Hook //Declare major variables int nLevel = GetCasterLevel(OBJECT_SELF); int nHP, nCnt, nDuration; nDuration = GetCasterLevel(OBJECT_SELF); //Determine bonus HP for(nCnt; nCnt <= nLevel; nCnt++) { nHP += d6(); } int nMeta = GetMetaMagicFeat(); //Metamagic if(nMeta == METAMAGIC_MAXIMIZE) { nHP = nLevel * 6; } else if(nMeta == METAMAGIC_EMPOWER) { nHP = nHP + (nHP/2); } else if(nMeta == METAMAGIC_EXTEND) { nDuration *= 2; } //Set Discipline skill if lower than what it would be for a fighter of the //same level -- CRH int nDisc = GetSkillRank(SKILL_DISCIPLINE, OBJECT_SELF); if(nDisc < (nLevel + 3)) nDisc = (nLevel + 3) - nDisc; //Declare effects effect eAttack = EffectAttackIncrease(nLevel/2); effect eSave = EffectSavingThrowIncrease(SAVING_THROW_FORT, 5); effect eAC = EffectACIncrease(4, AC_NATURAL_BONUS); effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH, d4(2)); effect eDexterity = EffectAbilityIncrease(ABILITY_DEXTERITY, d4(2)); effect eSkill = EffectSkillIncrease(SKILL_DISCIPLINE, nDisc); effect eSpellFail = EffectSpellFailure(200); effect eDur = EffectVisualEffect(VFX_DUR_PROT_STONESKIN); effect eGlow = EffectVisualEffect(VFX_DUR_GLOW_LIGHT_RED); //effect ePoly = EffectPolymorph(28); effect eSwing = EffectModifyAttacks(3); //Link effects //effect eLink = EffectLinkEffects(eAttack, ePoly); effect eLink = EffectLinkEffects(eAttack, eSave); eLink = EffectLinkEffects(eLink, eAC); eLink = EffectLinkEffects(eLink, eStrength); eLink = EffectLinkEffects(eLink, eDexterity); eLink = EffectLinkEffects(eLink, eSkill); eLink = EffectLinkEffects(eLink, eSpellFail); eLink = EffectLinkEffects(eLink, eSwing); eLink = EffectLinkEffects(eLink, eDur); eLink = EffectLinkEffects(eLink, eGlow); effect eHP = EffectTemporaryHitpoints(nHP); effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM); //int nAppearance = GetAppearanceType(OBJECT_SELF); /* //-------------------------------------------------------------------------- // 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 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_SMALLSHIELD) { oShield = OBJECT_INVALID; } } */ //-------------------------------------------------------------------------- // Here the actual polymorphing is done and effects applied //-------------------------------------------------------------------------- SignalEvent(OBJECT_SELF, EventSpellCastAt(OBJECT_SELF, SPELL_TENSERS_TRANSFORMATION, FALSE)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, OBJECT_SELF, RoundsToSeconds(nDuration)); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, RoundsToSeconds(nDuration)); //SetCreatureAppearanceType(OBJECT_SELF, APPEARANCE_TYPE_DOOM_KNIGHT); //DelayCommand(RoundsToSeconds(nDuration), SetCreatureAppearanceType(OBJECT_SELF, nAppearance)); //DelayCommand(RoundsToSeconds(nDuration), ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POLYMORPH), OBJECT_SELF)); /* //-------------------------------------------------------------------------- // This code handles the merging of item properties //-------------------------------------------------------------------------- object oWeaponNew = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,OBJECT_SELF); object oArmorNew = GetItemInSlot(INVENTORY_SLOT_CARMOUR,OBJECT_SELF); //-------------------------------------------------------------------------- // ...Weapons //-------------------------------------------------------------------------- //---------------------------------------------------------------------- // 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. //---------------------------------------------------------------------- //------------------------------------------------------------------ // Merge item properties... //------------------------------------------------------------------ IPWildShapeCopyItemProperties(oWeaponOld,oWeaponNew, TRUE); //-------------------------------------------------------------------------- // ...Armor //-------------------------------------------------------------------------- //---------------------------------------------------------------------- // Merge item properties from armor and helmet... //---------------------------------------------------------------------- IPWildShapeCopyItemProperties(oArmorOld,oArmorNew); IPWildShapeCopyItemProperties(oHelmetOld,oArmorNew); IPWildShapeCopyItemProperties(oShield,oArmorNew); //-------------------------------------------------------------------------- // ...Magic Items //-------------------------------------------------------------------------- //---------------------------------------------------------------------- // 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); */ }