//:://///////////////////////////////////////////// //:: Epic Spell: Godsmite //:: Author: Boneshank (Don Armstrong) #include "prc_alterations" //#include "x2_inc_spellhook" #include "inc_epicspells" #include "x0_i0_position" void main() { if (!X2PreSpellCastCode()) return; PRCSetSchool(SPELL_SCHOOL_EVOCATION); object oCaster = OBJECT_SELF; if(GetCanCastSpell(oCaster, SPELL_EPIC_GODSMIT)) { //Declare major variables object oTarget = PRCGetSpellTargetObject(); int nSpellPower = GetTotalCastingLevel(oCaster); int nDam, iCAling, iTAling; object oArea = GetArea(oTarget); location lTarget; // if this option has been enabled, the caster will take backlash damage if(GetPRCSwitch(PRC_EPIC_BACKLASH_DAMAGE)) { effect eCast = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY); int nDamage = d4(nSpellPower); effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_DIVINE); DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eCast, oCaster)); DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oCaster)); } //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(oCaster, PRCGetSpellId())); //Roll damage iCAling = GetAlignmentGoodEvil(oCaster); iTAling = GetAlignmentGoodEvil(oTarget); if(iCAling == iTAling) nDam = d4(nSpellPower); else if(iCAling == ALIGNMENT_NEUTRAL || iTAling == ALIGNMENT_NEUTRAL) nDam = d6(nSpellPower); else nDam = d8(nSpellPower); iCAling = GetAlignmentLawChaos(oCaster); iTAling = GetAlignmentLawChaos(oTarget); if(iCAling == iTAling) nDam += d4(nSpellPower); else if(iCAling == ALIGNMENT_NEUTRAL || iTAling == ALIGNMENT_NEUTRAL) nDam += d6(nSpellPower); else nDam += d8(nSpellPower); //Set damage effect if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(oCaster, oTarget), SAVING_THROW_TYPE_SPELL, oCaster)) { nDam /=2; // This script does nothing if it has Mettle, bail if(GetHasMettle(oTarget, SAVING_THROW_FORT)) nDam = 0; } effect eDam = EffectDamage(nDam, DAMAGE_TYPE_DIVINE, DAMAGE_POWER_PLUS_TWENTY); lTarget = GetRandomLocation(oArea, oTarget, 4.0); DelayCommand(0.4, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 3.5); DelayCommand(0.8, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 3.0); DelayCommand(1.2, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 2.5); DelayCommand(1.6, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 2.0); DelayCommand(2.0, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 1.5); DelayCommand(2.4, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 1.0); DelayCommand(2.7, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); lTarget = GetRandomLocation(oArea, oTarget, 0.5); DelayCommand(3.0, ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lTarget)); ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget)); SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_INTERPOSING_HAND), oTarget, 0.75, TRUE, -1, nSpellPower); DelayCommand(0.75, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_GRASPING_HAND), oTarget, 1.0, TRUE, -1, nSpellPower)); DelayCommand(1.75, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_CLENCHED_FIST), oTarget, 0.75, TRUE, -1, nSpellPower)); DelayCommand(2.5, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_BIGBYS_CRUSHING_HAND), oTarget, 1.0, TRUE, -1, nSpellPower)); DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE), oTarget)); DelayCommand(3.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_STONE_MEDIUM), oTarget)); DelayCommand(3.1, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget)); } PRCSetSchool(); }