diff --git a/Remove old apparition alias.esp b/Remove old apparition alias.esp new file mode 100644 index 00000000..d30f2b43 Binary files /dev/null and b/Remove old apparition alias.esp differ diff --git a/scripts/_00e_phasmalist_apparationalias.pex b/scripts/_00e_phasmalist_apparationalias.pex deleted file mode 100644 index 204d7ab7..00000000 Binary files a/scripts/_00e_phasmalist_apparationalias.pex and /dev/null differ diff --git a/scripts/_00e_phasmalist_apparitionshadersc.pex b/scripts/_00e_phasmalist_apparitionshadersc.pex deleted file mode 100644 index 19802fcc..00000000 Binary files a/scripts/_00e_phasmalist_apparitionshadersc.pex and /dev/null differ diff --git a/scripts/_fs_phasmalist_controlquest.pex b/scripts/_fs_phasmalist_controlquest.pex index f6cd0c44..5ebf00cd 100644 Binary files a/scripts/_fs_phasmalist_controlquest.pex and b/scripts/_fs_phasmalist_controlquest.pex differ diff --git a/scripts/qf__fs_phasmalist_controlque_0101ec71.pex b/scripts/qf__fs_phasmalist_controlque_0101ec71.pex index d2354180..599f2491 100644 Binary files a/scripts/qf__fs_phasmalist_controlque_0101ec71.pex and b/scripts/qf__fs_phasmalist_controlque_0101ec71.pex differ diff --git a/source/scripts/_00e_phasmalist_apparationalias.psc b/source/scripts/_00e_phasmalist_apparationalias.psc deleted file mode 100644 index fffe7829..00000000 --- a/source/scripts/_00e_phasmalist_apparationalias.psc +++ /dev/null @@ -1,358 +0,0 @@ -Scriptname _00E_Phasmalist_ApparationAlias extends ReferenceAlias -{ OBSOLETE. Left for backward save compatibility. See _00E_Phasmalist_NewApparitionAlias. } - -; on Abilities/_00E_A3_PhasmalistApparation -; script that controls the apparation stats calculation and initialization. Additionally, it is responsible for the control of the apparation communication while it is summoned - -; we prefer to place new actors instead of using only one actor -; due to the problem of keeping track of all apparations, -; which might create memory leaks because of persistence; -; Additionally, temporary or accidental changes do not cumulate -; and lead to problems - -; balancing data -float Property apparationManaRate = 1 AutoReadOnly Hidden - -float Property playerStatsMultiplier = 0.20 AutoReadOnly Hidden -float Property playerConjSkillMultiplier = 0.10 AutoReadOnly Hidden -float Property playerEnchSkillMultiplier = 0.15 AutoReadOnly Hidden - -float Property fArcaneFeverLevel01 = 7.00 AutoReadOnly Hidden -float Property fArcaneFeverLevel02 = 6.00 AutoReadOnly Hidden -float Property fArcaneFeverLevel03 = 5.00 AutoReadOnly Hidden - -int Property fArcaneFeverModWarrior = -1 AutoReadOnly Hidden -int Property fArcaneFeverModRanger = 0 AutoReadOnly Hidden -int Property fArcaneFeverModHybrid = 0 AutoReadOnly Hidden -int Property fArcaneFeverModMage = 1 AutoReadOnly Hidden - -int Property ghostlyMageBoostDestructionPowerMod1 = 7 AutoReadOnly Hidden -int Property ghostlyMageBoostDestructionPowerMod2 = 15 AutoReadOnly Hidden -int Property ghostlyMageBoostDestructionPowerMod3 = 25 AutoReadOnly Hidden - -int Property ghostlyMageBoostMagicka1 = 15 AutoReadOnly Hidden -int Property ghostlyMageBoostMagicka2 = 40 AutoReadOnly Hidden -int Property ghostlyMageBoostMagicka3 = 75 AutoReadOnly Hidden - -int Property ghostlyRangerBoostArchery1 = 7 AutoReadOnly Hidden -int Property ghostlyRangerBoostArchery2 = 17 AutoReadOnly Hidden -int Property ghostlyRangerBoostArchery3 = 30 AutoReadOnly Hidden - -int Property ghostlyRangerBoostCritChance1 = 7 AutoReadOnly Hidden -int Property ghostlyRangerBoostCritChance2 = 15 AutoReadOnly Hidden -int Property ghostlyRangerBoostCritChance3 = 25 AutoReadOnly Hidden - -int Property ghostlyWarriorBoostMelee1 = 7 AutoReadOnly Hidden -int Property ghostlyWarriorBoostMelee2 = 17 AutoReadOnly Hidden -int Property ghostlyWarriorBoostMelee3 = 30 AutoReadOnly Hidden - -int Property ghostlyWarriorBoostArmorSkill1 = 7 AutoReadOnly Hidden -int Property ghostlyWarriorBoostArmorSkill2 = 17 AutoReadOnly Hidden -int Property ghostlyWarriorBoostArmorSkill3 = 30 AutoReadOnly Hidden - -int Property iCallApparitionKeyCode = 34 Auto Hidden - -Explosion Property enterWorldExplosion auto - -Perk Property _00E_Class_Phasmalist_P04_Talent_SummonApparation auto -Perk Property _00E_Class_Phasmalist_P04_Talent_SummonApparation2 auto -Perk Property _00E_Class_Phasmalist_P04_Talent_SummonApparation3 auto - -Static Property XMarker Auto - -Perk Property _00E_Class_Phasmalist_P08a auto - -Perk[] Property _00E_Class_Phasmalist_P05a_ABC auto ; ghostly mage -{ghostly mage perks, this array should have 3 elements for all 3 perks} -Perk[] Property _00E_Class_Phasmalist_P05b_ABC auto ; ghostly ranger -{ghostly ranger perks, this array should have 3 elements for all 3 perks} -Perk[] Property _00E_Class_Phasmalist_P05c_ABC auto ; ghostly warrior -{ghostly warrior perks, this array should have 3 elements for all 3 perks} - -Location Property _00E_Dreamworld_Location auto -Keyword Property _00E_Phasmalist_NoSummonLocation auto -Message Property _00E_Phasmalist_NoSummoningMessage auto -Keyword Property _00E_Phasmalist_NoSummonLocationTown auto -Message Property _00E_Phasmalist_CurrentlyEquipped auto -Message Property _00E_Phasmalist_NoSummoningMessageTown auto - -Sound Property MAGAlterationInvisibilityIn Auto -Sound Property MAGAlterationInvisibilityOut Auto - -Perk Property _00E_Class_Phasmalist_P08b auto ; apparations can exist in towns - -EffectShader Property _00E_Phasmalist_ApparitionShaderFXS Auto - -ImageSpaceModifier Property _00E_ArkanistenfieberIMOD Auto -ImageSpaceModifier Property _00E_Phasmalist_ApparitionEnterWorldIMOD Auto - -Sound Property _00E_FS_IncreaseArcaneFeverM Auto -;Sound Property _00E_FS_Phasmalist_EnterWorld_Male Auto -;Sound Property _00E_FS_Phasmalist_EnterWorld_Female Auto - -Message Property _00E_BlitzheilungArkanistenfieber_sFeverIncreased Auto -GlobalVariable Property _00E_Phasmalist_IsApparationSummoned Auto - -Keyword Property _00E_FS_Magic_Summon auto ; the apparation should not be able to learn certain spells -Keyword Property _00E_FS_Magic_Mystical auto - -int currentBoostMagicka ; this is set in adjustBoost() to have the attribute set correctly in the stats calculation - -_00E_Phasmalist_TrinketSC equippedTrinket - -Actor Property PlayerREF Auto - -Formlist Property _00E_AllAmmos Auto - -; for a description, look to the function failsaveRefillOnLoad() of this script -Actor failsave_content - -; functions that are called from the trinkets to keep track of the currently equipped trinket -------------------------------------------------------------------------------------------- - -function onTrinketEquipped(_00E_Phasmalist_TrinketSC trinket) - equippedTrinket = trinket -Endfunction - -function onTrinketUnequipped(_00E_Phasmalist_TrinketSC trinket) - unsummonIfExists() - If trinket == equippedTrinket - equippedTrinket = None - EndIf -Endfunction - -_00E_Phasmalist_TrinketSC function getEquippedTrinket() - return equippedTrinket -Endfunction - -; summon and unsummon ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - -function unsummon(bool silent = false) -{Unsummons the phasmalist apparation content of this alias; should be used instead of delete()} - Actor SelfREF = self.GetActorReference() - If (!silent) - SelfREF.placeAtMe(enterWorldExplosion) - addArcaneFever() - EndIf - - ; empty function? - ;(SelfREF.getActorBase() as _00E_Phasmalist_ApparationSC).onUnsummon(SelfREF) - SelfREF.removeAllItems((SelfREF.GetActorBase() as _00E_Phasmalist_ApparationSC).inventoryContainer, false, true) - SelfREF.disable() - _00E_Phasmalist_IsApparationSummoned.setValue(0) - _RemoveApparationHealthBar() - SelfREF.delete() - self.clear() - failsave_content = None - SendModEvent("Phasmalist_ApparationUnSummon") -Endfunction - -function unsummonIfExists() - If getRef() - unsummon() - EndIf -Endfunction - -; utility functions ---------------------------------------------------------------------------------------------------------------------------------------------------------- - -Function _RemoveApparationHealthBar() - HealthBarManager.Hide(self.getActorReference()) -EndFunction - -Function _AddApparationHealthBar() - HealthBarManager.Show(self.getActorReference()) -EndFunction - -; local helper functions --------------------------------------------------------------------------------------------------------------------------------------------------------------- - -function addArcaneFever() - float healthLostPercentage = 0 - If self.getActorReference().isDead() - healthLostPercentage = 1 - Else - healthLostPercentage = 1 - self.getActorReference().GetActorValuePercentage("health") - EndIf - int TalentLevel = _00E_TalentLibrary.GetPlayerTalentLevel(_00E_Class_Phasmalist_P04_Talent_SummonApparation, _00E_Class_Phasmalist_P04_Talent_SummonApparation2, _00E_Class_Phasmalist_P04_Talent_SummonApparation3) - float maxArcaneFeverAdd = 0 - - If (TalentLevel == 1) - maxArcaneFeverAdd = fArcaneFeverLevel01 - ElseIf (TalentLevel == 2) - maxArcaneFeverAdd = fArcaneFeverLevel02 - Else - maxArcaneFeverAdd = fArcaneFeverLevel03 - EndIf - - If getEquippedTrinket().type == 0 - maxArcaneFeverAdd = maxArcaneFeverAdd + fArcaneFeverModWarrior - ElseIf getEquippedTrinket().type == 1 - maxArcaneFeverAdd = maxArcaneFeverAdd + fArcaneFeverModRanger - ElseIf getEquippedTrinket().type == 2 - maxArcaneFeverAdd = maxArcaneFeverAdd + fArcaneFeverModMage - Else - maxArcaneFeverAdd = maxArcaneFeverAdd + fArcaneFeverModHybrid - EndIf - - float arcaneFeverAdd = (maxArcaneFeverAdd * healthLostPercentage) as float - - If arcaneFeverAdd > 0 - - PlayerREF.ModAV("LastFlattered", -arcaneFeverAdd) - _00E_ArkanistenfieberIMOD.ApplyCrossFade() - _00E_FS_IncreaseArcaneFeverM.Play(PlayerREF) - _00E_BlitzheilungArkanistenfieber_sFeverIncreased.Show(arcaneFeverAdd, -1*PlayerREF.GetAV("LastFlattered")) - - EndIf - -Endfunction - -function adjustBoosts() - adjustBoostPerk(_00E_Class_Phasmalist_P05a_ABC, "mage") - adjustBoostPerk(_00E_Class_Phasmalist_P05b_ABC, "ranger") - adjustBoostPerk(_00E_Class_Phasmalist_P05c_ABC, "warrior") -Endfunction - -function addClassBoost(int level, string boostClass) - Actor referenceActor = self.getActorReference() - If boostClass == "mage" - int boostDestructionPowerMod = 0 - If level == 2 - boostDestructionPowerMod = ghostlyMageBoostDestructionPowerMod2 - currentBoostMagicka = ghostlyMageBoostMagicka2; since magicka is boosted later again, we have to save this boost and apply it later to prevent overwriting old boosts - ElseIf level == 3 - boostDestructionPowerMod = ghostlyMageBoostDestructionPowerMod3 - currentBoostMagicka = ghostlyMageBoostMagicka3 - Else - boostDestructionPowerMod = ghostlyMageBoostDestructionPowerMod1 - currentBoostMagicka = ghostlyMageBoostMagicka1 - EndIf - ;referenceActor.ForceAV("DestructionPowerMod", referenceActor.GetAV("DestructionPowerMod") + boostDestructionPowerMod) - referenceActor.ModAV("DestructionPowerMod", boostDestructionPowerMod) - ElseIf boostClass == "ranger" - int boostArchery = 0 - int boostCritChance = 0 - If level == 2 - boostArchery = ghostlyRangerBoostArchery2 - boostCritChance = ghostlyRangerBoostCritChance2 - ElseIf level == 3 - boostArchery = ghostlyRangerBoostArchery3 - boostCritChance = ghostlyRangerBoostCritChance3 - Else - boostArchery = ghostlyRangerBoostArchery1 - boostCritChance = ghostlyRangerBoostCritChance1 - EndIf - - ;referenceActor.ForceAV("Marksman", referenceActor.GetAV("Marksman") + boostArchery) - referenceActor.ModAV("Marksman", boostArchery) - ;referenceActor.ForceAV("CritChance", referenceActor.GetAV("CritChance") + boostCritChance) - referenceActor.ModAV("CritChance", boostCritChance) - ElseIf boostClass == "warrior" - int boostMelee = 0 - int boostArmorSkill = 0 - If level == 2 - boostMelee = ghostlyWarriorBoostMelee2 - boostArmorSkill = ghostlyWarriorBoostArmorSkill2 - ElseIf level == 3 - boostMelee = ghostlyWarriorBoostMelee3 - boostArmorSkill = ghostlyWarriorBoostArmorSkill3 - Else - boostMelee = ghostlyWarriorBoostMelee1 - boostArmorSkill = ghostlyWarriorBoostArmorSkill1 - EndIf - - ;referenceActor.ForceAV("HeavyArmor", referenceActor.GetAV("HeavyArmor") + boostArmorSkill) - referenceActor.ModAV("HeavyArmor", boostArmorSkill) - ;referenceActor.ForceAV("LightArmor", referenceActor.GetAV("LightArmor") + boostArmorSkill) - referenceActor.ModAV("LightArmor", boostArmorSkill) - ;referenceActor.ForceAV("MeleeDamage", referenceActor.GetAV("MeleeDamage") + boostMelee) - referenceActor.ModAV("MeleeDamage", boostMelee) - EndIf -Endfunction - -function adjustBoostPerk(Perk[] perks, string boostClass) - int i = perks.length - While i > 0 - i = i - 1 - If PlayerREF.HasPerk(perks[i]) - addClassBoost(i + 1, boostClass) - return - EndIf - EndWhile -Endfunction - -function init() - initBehaviour() - initNotPersistentStats() - - Actor referenceActor = self.getActorReference() - ;Actor player = Game.getPlayer() - - float attributeRaisePercentage = playerConjSkillMultiplier * PlayerREF.getActorValue("Conjuration") + playerEnchSkillMultiplier * PlayerREF.getActorValue("Enchanting") - attributeRaisePercentage = attributeRaisePercentage / 100 + 1 - - adjustBoosts() - - If (PlayerREF.hasPerk(_00E_Class_Phasmalist_P08a)) - float maxAttributeValue = PlayerREF.getBaseActorValue("Health") - If PlayerREF.getBaseActorValue("Magicka") > maxAttributeValue - maxAttributeValue = PlayerREF.getBaseActorValue("Magicka") - EndIf - If PlayerREF.getBaseActorValue("Stamina") > maxAttributeValue - maxAttributeValue = PlayerREF.getBaseActorValue("Stamina") - EndIf - referenceActor.ForceAV("Health", ((referenceActor.getBaseActorValue("Health") + maxAttributeValue * playerStatsMultiplier) * attributeRaisePercentage) as int) - referenceActor.ForceAV("Magicka", ((referenceActor.getBaseActorValue("Magicka") + maxAttributeValue * playerStatsMultiplier) * attributeRaisePercentage) as int + currentBoostMagicka) - referenceActor.ForceAV("Stamina", ((referenceActor.getBaseActorValue("Stamina") + maxAttributeValue * playerStatsMultiplier) * attributeRaisePercentage) as int) - - Else - referenceActor.ForceAV("Health", ((referenceActor.getBaseActorValue("Health") + PlayerREF.getBaseActorValue("Health") * playerStatsMultiplier) * attributeRaisePercentage) as int) - referenceActor.ForceAV("Magicka", ((referenceActor.getBaseActorValue("Magicka") + PlayerREF.getBaseActorValue("Magicka") * playerStatsMultiplier) * attributeRaisePercentage) as int + currentBoostMagicka) - referenceActor.ForceAV("Stamina", ((referenceActor.getBaseActorValue("Stamina") + PlayerREF.getBaseActorValue("Stamina") * playerStatsMultiplier) * attributeRaisePercentage) as int) - EndIf - -Endfunction - -function initBehaviour() - Actor akSelf = self.getActorReference() - If akSelf.GetRelationshipRank(PlayerREF) < 3 && akSelf.GetRelationshipRank(PlayerREF) >= 0 - akSelf.SetRelationshipRank(PlayerREF, 3) - EndIf - - akSelf.SetPlayerTeammate() - akSelf.SetActorValue("Confidence", 4) ; the apparation should never flee - akSelf.SetActorValue("Aggression", 0) ; the apparation should not initiate combat (-> stealth playstyle) - akSelf.SetActorValue("Sneak", 100) - akSelf.SetActorValue("Invisibility", 1) ; make the apparation undetectable when sneaking (-> stealth playstyle) - akSelf.IgnoreFriendlyHits() ; make the apparation ignore friendly fire from the PC -Endfunction - -function initNotPersistentStats() - - Actor akSelf = self.getActorReference() - If akSelf - akSelf.getActorBase().setCombatStyle(getEquippedTrinket().getUsedCombatStyle()) - - akSelf.setAV("HealRate", 50) - akSelf.setAV("MagickaRate", apparationManaRate) - - ;failsafe since setav doesn't work sometimes - akSelf.forceAV("HealRate", 50) - akSelf.forceAV("MagickaRate", apparationManaRate) - - _AddApparationHealthBar() - EndIf -Endfunction - -; events ----------------------------------------------------------------------------------------------------------------------------------------------------------- - -function addSpells() - int index = self.getActorReference().getNumItems() - 1 - While index >= 0 - Form item = self.getActorReference().getNthForm(index) - If item as book && !item.hasKeyword(_00E_FS_Magic_Summon) && !item.hasKeyword(_00E_FS_Magic_Mystical) - If (item as book).getSpell() - self.getActorReference().addSpell((item as book).getSpell()) - EndIf - EndIf - index = index - 1 - EndWhile -Endfunction diff --git a/source/scripts/_00e_phasmalist_apparitionshadersc.psc b/source/scripts/_00e_phasmalist_apparitionshadersc.psc deleted file mode 100644 index 458937cb..00000000 --- a/source/scripts/_00e_phasmalist_apparitionshadersc.psc +++ /dev/null @@ -1,3 +0,0 @@ -Scriptname _00E_Phasmalist_ApparitionShaderSC extends ReferenceAlias -{ OBSOLETE. Left for backward save compatibility. -The functions of the script have been moved to the apparition ability. } diff --git a/source/scripts/_fs_phasmalist_controlquest.psc b/source/scripts/_fs_phasmalist_controlquest.psc index 01067a5c..c19eb819 100644 --- a/source/scripts/_fs_phasmalist_controlquest.psc +++ b/source/scripts/_fs_phasmalist_controlquest.psc @@ -1,7 +1,6 @@ Scriptname _FS_Phasmalist_ControlQuest extends Quest ; the main phasmalist quest that aggregates references to the aliases who do the main work and provides a global interface for some utility functions -_00E_Phasmalist_ApparationAlias Property apparationAlias Auto ; Old version of the apparition alias _00E_Phasmalist_NewApparitionAlias Property NewApparitionAlias Auto _00E_Phasmalist_DespectralizeCont Property despectralizeContainerAlias Auto _00E_Phasmalist_ApparationInventory Property spectralizeContainer Auto @@ -29,7 +28,7 @@ Actor Property PlayerREF Auto Bool bCreatedFirstTrinket = false Int iScriptVersion = 0 -Int Property CURRENT_SCRIPT_VERSION = 2 AutoReadOnly +Int Property CURRENT_SCRIPT_VERSION = 3 AutoReadOnly ;===================================================================================== @@ -60,41 +59,18 @@ EndEvent ; called on loadgame by _00E_Phasmalist_LoadGameFailsave, attached to an alias of quest abilities Function LoadGameFailsave() - Bool bDoApparitionOnLoadGame = True - ; Version update If iScriptVersion < CURRENT_SCRIPT_VERSION - If iScriptVersion < 1 - apparationAlias.UnregisterForAllKeys() - EquippedTrinket = apparationAlias.getEquippedTrinket() - iTeleportApparitionKeyCode = apparationAlias.iCallApparitionKeyCode - PlayerAlias.ForceRefTo(PlayerREF) - If apparationAlias.GetRef() != None - apparationAlias.unsummon(True) - If IsBadApparitionLocation(PlayerREF.GetCurrentLocation()) == False - SummonApparition(PlayerREF, False, True) - EndIf - EndIf - apparationAlias.onTrinketEquipped(None) - _00E_Phasmalist_TankMode.SetValue(0) - RegisterTeleportKey() - ((self as Quest) as _FS_Phasmalist_AffinityControlQuest).OnGameLoad() ; Obsolete, not needed anymore, so shut it down - bDoApparitionOnLoadGame = False - Else - If iScriptVersion < 2 && PlayerREF.HasPerk(_00E_Class_Phasmalist_P05_C_Violence_01) && IsApparitionSpawned() - SummonApparition(PlayerREF, False, True) - bDoApparitionOnLoadGame = False - EndIf + If iScriptVersion < 3 + ; Update placeholder EndIf iScriptVersion = CURRENT_SCRIPT_VERSION EndIf - If bDoApparitionOnLoadGame - NewApparitionAlias.OnLoadGame() - EndIf + NewApparitionAlias.OnLoadGame() - If FS_NQ08.getStage() == 7 + If FS_NQ08.GetCurrentStageId() == 7 RegisterForModEvent("Phasmalist_Learn_Soulsmith1", "OnUnlockSoulsmithNovice") EndIf EndFunction diff --git a/source/scripts/qf__fs_phasmalist_controlque_0101ec71.psc b/source/scripts/qf__fs_phasmalist_controlque_0101ec71.psc index e71bf04a..b1cab446 100644 --- a/source/scripts/qf__fs_phasmalist_controlque_0101ec71.psc +++ b/source/scripts/qf__fs_phasmalist_controlque_0101ec71.psc @@ -7,11 +7,6 @@ Scriptname QF__FS_Phasmalist_ControlQue_0101EC71 Extends Quest Hidden ReferenceAlias Property Alias_A3_Phasmalist_SpectralizeContainer Auto ;END ALIAS PROPERTY -;BEGIN ALIAS PROPERTY A3_Phasmalist_ApparationAlias -;ALIAS PROPERTY TYPE ReferenceAlias -ReferenceAlias Property Alias_A3_Phasmalist_ApparationAlias Auto -;END ALIAS PROPERTY - ;BEGIN ALIAS PROPERTY A3_Phasmalist_DespectralizeContainer ;ALIAS PROPERTY TYPE ReferenceAlias ReferenceAlias Property Alias_A3_Phasmalist_DespectralizeContainer Auto