Scriptname _00E_BoneSpiritControlScript extends Quest  

Event OnInit()
	RegisterForSingleUpdate(3.0)
EndEvent

Event OnUpdate()
	If bSetupDone == False
		Setup()
	EndIf
EndEvent

Function Setup()
	boneSpiritSpells = New Spell[12]
	boneSpiritMagnitudes = New Float[12]

	Actor PlayerRef = Game.GetPlayer()
	Form[] spells = _00E_FS_Entropy_BoneSpiritSpells.ToArray()
	Int Index = 0
	Bool bPlayerHasBoneSpirits = False
	While Index < spells.Length
		boneSpiritSpells[Index] = spells[Index] as Spell
		boneSpiritMagnitudes[Index] = boneSpiritSpells[Index].GetNthEffectMagnitude(0)
		If bPlayerHasBoneSpirits == False && PlayerRef.HasSpell(boneSpiritSpells[Index])
			bPlayerHasBoneSpirits = True
		EndIf
		Index += 1
	EndWhile

	; Mid-game version update
	If bPlayerHasBoneSpirits
		Index = 0
		While Index < boneSpiritSpells.Length && boneSpiritSpells[Index]
			Spell spellBoneSpirit = boneSpiritSpells[Index]
			If spellBoneSpirit == _07E_FS_BoneSpirit
				boneSpiritMagnitudes[Index] = 11.0
			ElseIf spellBoneSpirit == _17E_FS_BoneSpirit
				boneSpiritMagnitudes[Index] = 17.0
			ElseIf spellBoneSpirit == _25E_FS_BoneSpirit
				boneSpiritMagnitudes[Index] = 22.0
			ElseIf spellBoneSpirit == _40E_FS_BoneSpirit
				boneSpiritMagnitudes[Index] = 30.0
			ElseIf spellBoneSpirit == _50E_FS_BoneSpirit
				boneSpiritMagnitudes[Index] = 38.0
			EndIf

			Index += 1
		EndWhile

		RestoreSpellMagnitudes()
	EndIf

	bSetupDone = True
EndFunction

Float Function GetOriginalSpellDamage(Spell spellBoneSpirit)
	If bSetupDone == False
		Setup()
	EndIf

	Int Index = 0
	While Index < boneSpiritSpells.Length && boneSpiritSpells[Index] && boneSpiritSpells[Index] != spellBoneSpirit
		Index += 1
	EndWhile

	If Index >= boneSpiritSpells.Length
		Debug.Trace(self + ", RegisterSpell: ERROR - out of free slots for spells")
		Return spellBoneSpirit.GetNthEffectMagnitude(0)
	EndIf

	If boneSpiritSpells[Index] == None
		boneSpiritSpells[Index]     = spellBoneSpirit
		boneSpiritMagnitudes[Index] = spellBoneSpirit.GetNthEffectMagnitude(0)
	EndIf

	Return boneSpiritMagnitudes[Index]
EndFunction

Function RestoreSpellMagnitudes()
	Int Index = 0
	While Index < boneSpiritSpells.Length && boneSpiritSpells[Index]
		boneSpiritSpells[Index].SetNthEffectMagnitude(0, boneSpiritMagnitudes[Index])
		Index += 1
	EndWhile
EndFunction


Spell[] boneSpiritSpells
Float[] boneSpiritMagnitudes
Bool bSetupDone

Formlist Property _00E_FS_Entropy_BoneSpiritSpells Auto

Spell Property _07E_FS_BoneSpirit Auto
Spell Property _17E_FS_BoneSpirit Auto
Spell Property _25E_FS_BoneSpirit Auto
Spell Property _40E_FS_BoneSpirit Auto
Spell Property _50E_FS_BoneSpirit Auto