Scriptname _00E_FS_Entropy_BoneSpiritMonitorSC extends activemagiceffect Event OnEffectStart(Actor akTarget, Actor akCaster) akCheckActor = akTarget UpdateDamage() fLastDamageMod = 0.0 ; Force damage updae on next UpdateDamage, just in case EndEvent Event OnEffectFinish(Actor akTarget, Actor akCaster) bEffectFinished = True ; Wait for UpdateDamage to stop meddling with the magnitudes While bUpdatingDamage Utility.WaitMenuMode(0.1) EndWhile If fLastDamageMod != 1.0 If spell1 spell1.SetNthEffectMagnitude(0, fOriginalDamage1) EndIf If spell2 spell2.SetNthEffectMagnitude(0, fOriginalDamage2) EndIf EndIf EndEvent Event OnPlayerLoadGame() ; Force delayed update after player load game fLastDamageMod = 0.0 RegisterForSingleUpdate(1.0) EndEvent Event OnUpdate() UpdateDamage() EndEvent Function UpdateDamage() If bEffectFinished Return EndIf bUpdatingDamage = True Bool bUpdateSpellDamage = False ; Get equipped bone spirits Spell spellNew1 = None Spell spellNew2 = None Spell spellRight = akCheckActor.GetEquippedSpell(1) ; Right hand If spellRight && ((spellRight == spell1) || (spellRight == spell2) || _00E_FS_Entropy_BoneSpiritSpells.HasForm(spellRight)) spellNew1 = spellRight EndIf Spell spellLeft = akCheckActor.GetEquippedSpell(0) ; Left hand If spellLeft && (spellLeft != spellRight) && ((spellLeft == spell1) || (spellLeft == spell2) || _00E_FS_Entropy_BoneSpiritSpells.HasForm(spellLeft)) If spellNew1 == None spellNew1 = spellLeft Else spellNew2 = spellLeft EndIf EndIf ; New spell1? If spell1 != spellNew1 If spell1 && spell1 != spellNew2 spell1.SetNthEffectMagnitude(0, fOriginalDamage1) EndIf spell1 = spellNew1 If spell1 fOriginalDamage1 = ControlQuest.GetOriginalSpellDamage(spell1) EndIf bUpdateSpellDamage = True EndIf ; New spell2? If spell2 != spellNew2 If spell2 && spell2 != spellNew1 spell2.SetNthEffectMagnitude(0, fOriginalDamage2) EndIf spell2 = spellNew2 if spell2 fOriginalDamage2 = ControlQuest.GetOriginalSpellDamage(spell2) EndIf bUpdateSpellDamage = True EndIf ; Calculate damage modifier (+13% of damage for every 10% of health lost) Float fDamageMod = 1.0 Float fDamageMult = Math.Floor(10.0 - (akCheckActor.GetAVPercentage("Health") * 10.0)) as Float If fDamageMult > 0.0 fDamageMod += (0.13 * fDamageMult) EndIf If fDamageMod != fLastDamageMod fLastDamageMod = fDamageMod bUpdateSpellDamage = True EndIf ; Update spells' damage If bUpdateSpellDamage If spell1 spell1.SetNthEffectMagnitude(0, fOriginalDamage1 * fDamageMod) EndIf If spell2 spell2.SetNthEffectMagnitude(0, fOriginalDamage2 * fDamageMod) EndIf EndIf bUpdatingDamage = False If bEffectFinished == False RegisterForSingleUpdate(1.0) EndIf EndFunction Spell spell1 = None Spell spell2 = None Float fOriginalDamage1 Float fOriginalDamage2 Float fLastDamageMod Actor akCheckActor Bool bUpdatingDamage Bool bEffectFinished Formlist Property _00E_FS_Entropy_BoneSpiritSpells Auto _00E_BoneSpiritControlScript Property ControlQuest Auto