//:://///////////////////////////////////////////// //:: Pulse: Negative //:: NW_S1_PulsDeath //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* A wave of energy emanates from the creature which affects all within 10ft. Damage can be reduced by half for all damaging variants. Undead are healed. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: May 14, 2000 //:: Modified by: Shayan 27/03/2005 (For Subrace Engine) //::////////////////////////////////////////////// #include "sha_subr_methds" void main() { //Declare major variables int nDamage; float fDelay; effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M); effect eVis2 = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY); effect eHowl; int nHD = GetHitDice(OBJECT_SELF); int nDC = 10 + nHD; effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_NEGATIVE); ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, OBJECT_SELF); //Get first target in spell area object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF)); while(GetIsObjectValid(oTarget)) { if(oTarget != OBJECT_SELF) { //Determine effect delay fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20; //Roll the amount to heal or damage nDamage = d4(nHD); //If the target is undead //---------------------------------------------------------------Shayan's Subrace Engine code if (GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || Subrace_GetIsUndead(oTarget)) { //Make a faction check if(GetIsFriend(oTarget)) { //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_PULSE_HOLY, FALSE)); //Set heal effect eHowl = EffectHeal(nDamage); //Apply the VFX impact and effects DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); } } else { if(!GetIsReactionTypeFriendly(oTarget) && GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) { //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion. nDamage = GetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE); //Set damage effect eHowl = EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE); if(nDamage > 0) { //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_PULSE_HOLY)); //Apply the VFX impact and effects DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eHowl, oTarget)); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget)); } } } } //Get next target in spell area oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, GetLocation(OBJECT_SELF)); } }