diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index e69de29bb..000000000 diff --git a/.gitignore b/.gitignore index 50f30a4b8..d3ce181e1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,5 @@ /*.code-workspace BuildCache/ PublishedFileID.Id -git-sizer.exe -/LongWarOfTheChosen/Content/ -/LongWarOfTheChosen/ContentForCook/ *.upk -*.bik *.umap diff --git a/LongWarOfTheChosen/Config/OldTemplarClassData.ini b/LongWarOfTheChosen/Config/OldTemplarClassData.ini deleted file mode 100644 index b2ca6b27d..000000000 --- a/LongWarOfTheChosen/Config/OldTemplarClassData.ini +++ /dev/null @@ -1,118 +0,0 @@ - -; Pre rework Templar Class data information. If you want the old Templar, swap the Templar section of XComClassData.ini for this (and see the other Shield rework stuff) - -[Templar X2SoldierClassTemplate] - --AllowedWeapons=(SlotType=eInvSlot_SecondaryWeapon, WeaponType="sidearm") -+AllowedWeapons=(SlotType=eInvSlot_SecondaryWeapon, WeaponType="templarshield") - - -!RandomAbilityDecks=() -+RandomAbilityDecks=(DeckName="TemplarTier1XComAbilities", \\ - Abilities=((AbilityName="Salvo"), \\ - (AbilityName="Flashbanger"), \\ - (AbilityName="Phantom"), \\ - (AbilityName="ZoneOfControl_LW"), \\ - (AbilityName="Covert"), \\ - (AbilityName="FieldMedic", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="SmokeGrenade", ApplyToWeaponSlot=eInvSlot_Unknown) \\ - )) -+RandomAbilityDecks=(DeckName="TemplarTier2XComAbilities", \\ - Abilities=((AbilityName="CombatEngineer"), \\ - (AbilityName="RapidDeployment"), \\ - (AbilityName="FullKit"), \\ - (AbilityName="LoneWolf"), \\ - (AbilityName="Aggression", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="Dedication_LW"), \\ - (AbilityName="InspireAgility_LW"), \\ - (AbilityName="Infighter"), \\ - (AbilityName="Bringemon"), \\ - (AbilityName="Stealth"), \\ - (AbilityName="Formidable", ApplyToWeaponSlot=eInvSlot_Unknown) \\ - )) - -+RandomAbilityDecks=(DeckName="TemplarTier3XComAbilities", \\ - Abilities=((AbilityName="Resilience", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="Evasive"), \\ - (AbilityName="HardTarget", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="Fortify", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="CombatFitness", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="OverKill_LW", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="CenterMass", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="SurvivalInstinct_LW", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="Cutthroat", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="Tradecraft", ApplyToWeaponSlot=eInvSlot_Unknown) \\ - )) - -+RandomAbilityDecks=(DeckName="TemplarTier4XComAbilities", \\ - Abilities=((AbilityName="Lethal", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="CoupDeGrace2", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="Concentration_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="Implacable", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="TacticalSense", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="LightningReflexes_LW", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="LightningSlash_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon) \\ - )) -!SoldierRanks=() -; squaddie -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="Rend", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="Volt", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="TemplarFocus", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="Momentum"))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=0), (StatType=eStat_Strength,StatAmount=1), (StatType=eStat_PsiOffense,StatAmount=0), (StatType=eStat_CombatSims,StatAmount=1), (StatType=eStat_Will,StatAmount=5))) - -; LCPL -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="TemplarInvert")), \\ - (AbilityType=(AbilityName="Amplify")), \\ - (AbilityType=(AbilityName="Indomitable")), \\ - (RandomDeckName="TemplarTier1XComAbilities"), \\ - (AbilityType=(AbilityName="Magnum_LW", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=1), (StatType=eStat_HP,StatAmount=1), (StatType=eStat_Will,StatAmount=5))) - -; CPL -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="StunStrike")), \\ - (AbilityType=(AbilityName="ShieldBash_LW", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ - (AbilityType=(AbilityName="Brawler", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (RandomDeckName="TemplarTier1XComAbilities"), \\ - (AbilityType=(AbilityName="Quickdraw", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=1))) - -; SGT -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="Pillar", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="OverCharge_LW" )), \\ - (AbilityType=(AbilityName="Sustain")), \\ - (RandomDeckName="TemplarTier2XComAbilities"), \\ - (AbilityType=(AbilityName="ClutchShot", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=2), (StatType=eStat_HP,StatAmount=1), (StatType=eStat_Strength,StatAmount=1))) - -; SSGT -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="VoidConduit", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="Channel")), \\ - (AbilityType=(AbilityName="Fortress", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (RandomDeckName="TemplarTier2XComAbilities"), \\ - (AbilityType=(AbilityName="LightningHands", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=1))) - -; TSGT -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="DoubleRendFocus", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="ArcWavePassive")), \\ - (AbilityType=(AbilityName="CrusaderRage_LW")), \\ - (RandomDeckName="TemplarTier3XComAbilities"), \\ - (AbilityType=(AbilityName="Gunslinger", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=3), (StatType=eStat_Strength,StatAmount=1))) - -; GSGT -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="TemplarTerror", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ - (AbilityType=(AbilityName="TemplarBladeStorm", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="ImpactCompensation_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (RandomDeckName="TemplarTier3XComAbilities"), \\ - (AbilityType=(AbilityName="Faceoff", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=3), (StatType=eStat_HP,StatAmount=1))) - -; MSGT -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="IonicStorm", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="Apotheosis")), \\ - (AbilityType=(AbilityName="Ghost", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (RandomDeckName="TemplarTier4XComAbilities"), \\ - (AbilityType=(AbilityName="FanFire", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=3))) diff --git a/LongWarOfTheChosen/Config/XComAI.ini b/LongWarOfTheChosen/Config/XComAI.ini index 57ad587b1..1a8356ba7 100644 --- a/LongWarOfTheChosen/Config/XComAI.ini +++ b/LongWarOfTheChosen/Config/XComAI.ini @@ -88,9 +88,6 @@ ;Scamper root used by purifier +NewBehaviors=(BehaviorName=ScamperRoot_Purifier, NodeType=Selector, Child[0]=CounterBeaglerushManeuver, Child[1]=SniperDefense, Child[2]=MoveAggressiveUnsafe, Child[3]=HuntEnemyWithCover, Child[4]=SkipMove) -; "ScamperRoot_Warlock" - used by the chosen warlock -+NewBehaviors=(BehaviorName=ScamperRoot_ChosenWarlock, NodeType=Selector, Child[0]=CounterBeaglerushManeuver, Child[1]=TryChosenSummon, Child[2]=TryShieldAlly, Child[3]=MoveStandardWithLoSUnsafe, Child[4]=MoveStandardUnsafe, Child[5]=MoveStandardWithLoSUnsafeIgnoreHazards, Child[6]=MoveStandardUnsafeIgnoreHazards, Child[7]=SkipMove) - ; "AvoidBoundAndPanickedTargets" - Add a uniform score bonus to all non-last-resort units (+25) +BehaviorRemovals="AvoidBoundAndPanickedTargets" +NewBehaviors=(BehaviorName=AvoidBoundAndPanickedTargets, NodeType=Selector, Child[0]=ScoreIfTargetBoundOrPanicked, Child[1]=AddToTargetScore_25) @@ -395,25 +392,8 @@ Child[4]=HuntEnemyWithCover) DistributionPercentToXCom=60 [XComGame.XComGameState_AIGroup] -+FallbackExclusionList=HiveQueen -+FallbackExclusionList=ChryssalidSoldier -;Removing chosen from this is useful for debugging -+FallbackExclusionList=ChosenSniperM1 -+FallbackExclusionList=ChosenSniperM2 -+FallbackExclusionList=ChosenSniperM3 -+FallbackExclusionList=ChosenSniperM4 -+FallbackExclusionList=ChosenSniperM5 -+FallbackExclusionList=ChosenWarlockM1 -+FallbackExclusionList=ChosenWarlockM2 -+FallbackExclusionList=ChosenWarlockM3 -+FallbackExclusionList=ChosenWarlockM4 -+FallbackExclusionList=ChosenWarlockM5 -+FallbackExclusionList=ChosenAssassinM1 -+FallbackExclusionList=ChosenAssassinM2 -+FallbackExclusionList=ChosenAssassinM3 -+FallbackExclusionList=ChosenAssassinM4 -+FallbackExclusionList=ChosenAssassinM5 - ++FallbackExclusionList="HiveQueen" ++FallbackExclusionList="ChryssalidSoldier" [XComGame.XComGameState_AIPlayerData] DownThrottleUnitCount = 999 ; Number of enemies engaged to activate Down Throttling. DISABLED @@ -1303,7 +1283,7 @@ MAX_SURPRISED_SCAMPER_PATH_LENGTH=7 ; Scamper paths longer than this number of +Behaviors=(BehaviorName=TryOverwatchLastAction, NodeType=Sequence, Child[0]=IsLastActionPoint, Child[1]=AvoidDoubleMove, Child[2]=TryOverwatch) ;ChosenWarlock -+EquivalentAbilities=( KeyName=ShieldAlly, EquivalentAbilityName[0]=ShieldAllyM1, EquivalentAbilityName[1]=ShieldAllyM2, EquivalentAbilityName[2]=ShieldAllyM3, EquivalentAbilityName[3]=ShieldAllyM4, EquivalentAbilityName[4]=ShieldAllyM5) ++EquivalentAbilities=( KeyName=ShieldAlly, EquivalentAbilityName[0]=ShieldAllyM1, EquivalentAbilityName[1]=ShieldAllyM2, EquivalentAbilityName[2]=ShieldAllyM3, EquivalentAbilityName[3]=ShieldAllyM4) -Behaviors=(BehaviorName="ChosenWarlock::CharacterRoot", NodeType=Selector, Child[0]=ChosenUnactivated, Child[1]=ChosenActivated, Child[2]=ChosenEngaged, Child[3]=SkipMove) -Behaviors=(BehaviorName="ChosenWarlock::ChosenEngaged", NodeType=Selector, Child[0]=TryEndSpectralArmy, Child[1]=TryChosenSummon, Child[2]=OverwatchHandlerShootOverwatcherOption, Child[3]=WarlockMoveIfNecessary, Child[4]=TryWarlockCombatAbilities, Child[5]=OverwatchHandlerBackupOption, Child[6]=TryShootOrReloadOrOverwatch, Child[7]=HuntEnemyWithCover) @@ -1530,36 +1510,35 @@ MAX_SURPRISED_SCAMPER_PATH_LENGTH=7 ; Scamper paths longer than this number of +Behaviors=(BehaviorName="ChosenSniper::ChosenEngaged", NodeType=Selector, Child[0]=TryLWChosenkidnap, Child[1]=ChosenSniperFirstAction, Child[2]=ChosenSniperLastAction) +Behaviors=(BehaviorName="ChosenSniperFirstActionSelector", NodeType=Selector, \\ - Child[0]=TryTrackingShotMark,\\ - Child[1]=TryGrenade,\\ + Child[0]=TryGrenade,\\ + Child[1]=ShootWhenKillShot_Pistol,\\ Child[2]=TryLightningHands, \\ - Child[3]=ShootWhenFlanking_Pistol, \\ - Child[4]=TryGrappleForOffense,\\ - Child[5]=DoIfFlankedFallback, \\ - Child[6]=TryTrackingShot,\\ - Child[7]=TryFaceoff, \\ - Child[8]=TakePriorityshotsChosen_Pistol, \\ - Child[9]=TakePriorityshotsChosen, \\ - Child[10]=MoveChosenStayBack, \\ + Child[3]=TryFanFire, \\ + Child[4]=ShootWhenFlanking_Pistol, \\ + Child[5]=TryGrappleForOffense,\\ + Child[6]=DoIfFlankedFallback, \\ + Child[7]=TakePriorityshotsChosen_Pistol, \\ + Child[8]=TakePriorityshotsChosen, \\ + Child[9]=MoveChosenStayBack, \\ + Child[10]=TryFaceoff, \\ Child[11]=TryShootOrReloadOrOverwatch,\\ Child[12]=HuntEnemyWithCover, \\ Child[13]=TryCombatReadiness) +Behaviors=(BehaviorName="ChosenSniperLastActionSelector", NodeType=Selector, \\ - Child[0]=TryTrackingShotMark,\\ - Child[1]=TryGrenade,\\ - Child[2]=TryTrackingShot,\\ - Child[3]=TryLightningHands, \\ - Child[4]=TryFanFire, \\ - Child[5]=TryGrappleForOffense,\\ - Child[6]=TakePriorityshotsChosen, \\ - Child[7]=ShootWhenKillShot_Pistol, \\ - Child[8]=ShootWhenFlanking_Pistol, \\ - Child[9]=DoIfFlankedFallback, \\ - Child[10]=TryShootOrReloadOrOverwatch,\\ - Child[11]=MoveChosenStayBack, \\ - Child[12]=HuntEnemyWithCover, \\ - Child[13]=TryCombatReadiness) + Child[0]=TryGrenade,\\ + Child[1]=TryLightningHands, \\ + Child[2]=TryFanFire, \\ + Child[3]=TryGrappleForOffense,\\ + Child[4]=TryFaceoff, \\ + Child[5]=TakePriorityshotsChosen, \\ + Child[6]=ShootWhenKillShot_Pistol, \\ + Child[7]=ShootWhenFlanking_Pistol, \\ + Child[8]=DoIfFlankedFallback, \\ + Child[9]=TryShootOrReloadOrOverwatch,\\ + Child[10]=MoveChosenStayBack, \\ + Child[11]=HuntEnemyWithCover, \\ + Child[12]=TryCombatReadiness) +Behaviors=(BehaviorName=HunterReaction, NodeType=Selector, Child[0]=DoIfFlankedPrimeFallback, Child[1]=NeedsReload, Child[2]=TryCombatReadinessIfMobDebuffed, Child[3]=TryTriggerDamagedTeleportIfFlanked, Child[4]=TryCombatReadiness) diff --git a/LongWarOfTheChosen/Config/XComAcademyUnlocks.ini b/LongWarOfTheChosen/Config/XComAcademyUnlocks.ini index 41266fada..6e37cb543 100644 --- a/LongWarOfTheChosen/Config/XComAcademyUnlocks.ini +++ b/LongWarOfTheChosen/Config/XComAcademyUnlocks.ini @@ -1,4 +1,4 @@ -; Config file for the changed Parkour GTS ability -[LW_FactionBalance.X2StrategyElement_AcademyUnlocks_GrappleParkour] -PARKOUR_RANK=5 ; Rank of Skirmisher required to buy the perk, 1 is Squaddie, 5 is Captain, 7 is Colonel, etc +; Config file for the changed Parkour GTS ability +[LW_FactionBalance.X2StrategyElement_AcademyUnlocks_GrappleParkour] +PARKOUR_RANK=5 ; Rank of Skirmisher required to buy the perk, 1 is Squaddie, 5 is Captain, 7 is Colonel, etc PARKOUR_COST=75 ; Amount of Supplies required to buy the perk \ No newline at end of file diff --git a/LongWarOfTheChosen/Config/XComCamera.ini b/LongWarOfTheChosen/Config/XComCamera.ini index d0121609a..ed3f3e3f1 100644 --- a/LongWarOfTheChosen/Config/XComCamera.ini +++ b/LongWarOfTheChosen/Config/XComCamera.ini @@ -1,10 +1,3 @@ -[XComGame.X2Camera_Cinescript] -+AbilityCameras=(AbilityCameraType="IRI_SoulShot", \\ - ShooterTeam=CinescriptShooterTeam_XCom, ExtraAbilityEndDelay=0, \\ - CameraCuts[0]=(CutAnimNotify="CameraStart", NewCameraType=CinescriptCameraType_Matinee, MatineeCommentPrefix="CIN_Quick_Wide"), \\ - CameraCuts[1]=(CutAnimNotify="CameraEnd", NewCameraType=CinescriptCameraType_Exit), \\ - CameraCuts[2]=(CutAfterPrevious=True, NewCameraType=CinescriptCameraType_Exit)) - [XComGame.X2Action_ApplyWeaponDamageToTerrain] CameraShakeIntensity_Large=0.00 diff --git a/LongWarOfTheChosen/Config/XComClassData.ini b/LongWarOfTheChosen/Config/XComClassData.ini index 3b289a41c..cc4374b2a 100644 --- a/LongWarOfTheChosen/Config/XComClassData.ini +++ b/LongWarOfTheChosen/Config/XComClassData.ini @@ -43,7 +43,7 @@ NumInDeck=0 [LWS_Technical X2SoldierClassTemplate] +bMultiplayerOnly=0 +ClassPoints=3 -+IconImage="img:///UILibrary_LWOTC.class_Technical" ++IconImage="img:///UILibrary_LW_Overhaul.class_Technical" +NumInForcedDeck=1 +NumInDeck=4 +bCanHaveBonds=true @@ -139,7 +139,7 @@ NumInDeck=0 ) ; CPL -+SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="ConcussionRocket", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ ++SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="BiggestBooms_LW" )), \\ (AbilityType=(AbilityName="Fortify" )), \\ (AbilityType=(AbilityName="NapalmX", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ (RandomDeckName="Tier1_XComAbilities"), \\ @@ -148,7 +148,7 @@ NumInDeck=0 aStatProgression=((StatType=eStat_Offense,StatAmount=2), (StatType=eStat_Will,StatAmount=0)) \\ ) ; SGT -+SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="BiggestBooms_LW" )), \\ ++SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="ConcussionRocket", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ (AbilityType=(AbilityName="Shredder", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (AbilityType=(AbilityName="Burnout", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ (RandomDeckName="Tier2_XComAbilities"), \\ @@ -724,7 +724,7 @@ NumInDeck=0 (AbilityName="Tradecraft", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="LightningReflexes_LW"), \\ (AbilityName="Predator_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="TacticalSense" ), \\ + (AbilityName="ScrapMetal_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="Evasive"), \\ (AbilityName="Ruthless_LW", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon), \\ (AbilityName="Shredder", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ @@ -799,7 +799,7 @@ NumInDeck=0 ) ; GSGT +SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="RapidFire", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="ScrapMetal_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ + (AbilityType=(AbilityName="TacticalSense" )), \\ (AbilityType=(AbilityName="RapidReaction", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (RandomDeckName="Tier3_XComAbilities"), \\ (AbilityType=(AbilityName="Faceoff", ApplyToWeaponSlot=eInvSlot_Pistol)) \\ @@ -842,7 +842,7 @@ NumInDeck=0 (AbilityName="Flashbanger"), \\ (AbilityName="SmokeGrenade"), \\ (AbilityName="Salvo", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="LongWatch", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ + (AbilityName="Resilience", ApplyToWeaponSlot=eInvSlot_Unknown), \\ (AbilityName="DeepCover"), \\ (AbilityName="SurvivalInstinct_LW"), \\ (AbilityName="HardTarget"), \\ @@ -859,6 +859,7 @@ NumInDeck=0 +RandomAbilityDecks=(DeckName="Tier2_XComAbilities", \\ Abilities=((AbilityName="RapidDeployment"), \\ + (AbilityName="WeaponHandling_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="TacticalSense"), \\ (AbilityName="LeadTheTarget_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="Shadowstrike_LW", ApplyToWeaponSlot=eInvSlot_Unknown), \\ @@ -869,9 +870,8 @@ NumInDeck=0 (AbilityName="CoolUnderPressure", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="CombatEngineer", ApplyToWeaponSlot=eInvSlot_Unknown), \\ (AbilityName="Concentration_LW"), \\ - (AbilityName="Impulse_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ - (AbilityName="Untouchable", ApplyToWeaponSlot=eInvSlot_Unknown), \\ - (AbilityName="Resilience", ApplyToWeaponSlot=eInvSlot_Unknown) \\ + (AbilityName="Reposition_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ + (AbilityName="Untouchable", ApplyToWeaponSlot=eInvSlot_Unknown) \\ )) +RandomAbilityDecks=(DeckName="Tier3_XComAbilities", \\ @@ -934,9 +934,9 @@ NumInDeck=0 aStatProgression=((StatType=eStat_Offense,StatAmount=3), (StatType=eStat_Will,StatAmount=0), (StatType=eStat_HP,StatAmount=1)) \\ ) ; SSGT -+SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="LowProfile", )), \\ ++SoldierRanks=( AbilitySlots=( (AbilityType=(AbilityName="LongWatch", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (AbilityType=(AbilityName="IndependentTracking", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ - (AbilityType=(AbilityName="Reposition_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ + (AbilityType=(AbilityName="LowProfile" )), \\ (RandomDeckName="Tier2_XComAbilities"), \\ (AbilityType=(AbilityName="LightningHands", ApplyToWeaponSlot=eInvSlot_Pistol)) \\ ), \\ @@ -1680,9 +1680,13 @@ bHasClassMovie=true (AbilityName="Needle", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="RemoteStart", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="TacticalSense"), \\ + (AbilityName="Shredder", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="LightningReflexes_LW"), \\ (AbilityName="InspireAgility_LW"), \\ (AbilityName="Formidable"), \\ + (AbilityName="HoloTargeting", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ + (AbilityName="Impulse_LW", ApplyToWeaponSlot=eInvSlot_Unknown), \\ + (AbilityName="AimAssist_LW"), \\ (AbilityName="CombatEngineer"), \\ (AbilityName="Concentration_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="HardTarget"), \\ @@ -1692,11 +1696,13 @@ bHasClassMovie=true Abilities=((AbilityName="CenterMass", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="ReadyForAnything", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="RapidReaction", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ + (AbilityName="Predator_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="CoupDeGrace2", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="OpenFire_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="Overkill_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="Resilience", ApplyToWeaponSlot=eInvSlot_Unknown), \\ (AbilityName="SurvivalInstinct_LW"), \\ + (AbilityName="Executioner_LW"), \\ (AbilityName="Sting", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ (AbilityName="PaleHorse"), \\ (AbilityName="Deadeye", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ @@ -1777,17 +1783,11 @@ bHasClassMovie=true [Templar X2SoldierClassTemplate] -;NOTE ON TEMPLAR SHIELDS: If you want shields still, obtain your own class perk trees from older builds or from a rework such as Kiruka's. Then make the below changes noted as well - -;change the below to false if you want to use shields: -bNoSecondaryWeapon=true -AllowedWeapons=(SlotType=eInvSlot_SecondaryWeapon, WeaponType="sidearm") ++AllowedWeapons=(SlotType=eInvSlot_SecondaryWeapon, WeaponType="templarshield") -;If you want Templar Shields back, uncomment the below line: -;+AllowedWeapons=(SlotType=eInvSlot_SecondaryWeapon, WeaponType="templarshield") !RandomAbilityDecks=() - +RandomAbilityDecks=(DeckName="TemplarTier1XComAbilities", \\ Abilities=((AbilityName="Salvo"), \\ (AbilityName="Flashbanger"), \\ @@ -1798,7 +1798,7 @@ bNoSecondaryWeapon=true (AbilityName="SmokeGrenade", ApplyToWeaponSlot=eInvSlot_Unknown) \\ )) +RandomAbilityDecks=(DeckName="TemplarTier2XComAbilities", \\ - Abilities=((AbilityName="Blademaster", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon), \\ + Abilities=((AbilityName="CombatEngineer"), \\ (AbilityName="RapidDeployment"), \\ (AbilityName="FullKit"), \\ (AbilityName="LoneWolf"), \\ @@ -1833,32 +1833,29 @@ bNoSecondaryWeapon=true (AbilityName="LightningReflexes_LW", ApplyToWeaponSlot=eInvSlot_Unknown), \\ (AbilityName="LightningSlash_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon) \\ )) - - !SoldierRanks=() ; squaddie -+SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="Rend_LW", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ ++SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="Rend", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (AbilityType=(AbilityName="Volt", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="IRI_TemplarShield", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (AbilityType=(AbilityName="TemplarFocus", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (AbilityType=(AbilityName="Momentum"))), \\ aStatProgression=((StatType=eStat_Offense,StatAmount=0), (StatType=eStat_Strength,StatAmount=1), (StatType=eStat_PsiOffense,StatAmount=0), (StatType=eStat_CombatSims,StatAmount=1), (StatType=eStat_Will,StatAmount=5))) ; LCPL +SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="TemplarInvert")), \\ - (AbilityType=(AbilityName="Amplify", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ + (AbilityType=(AbilityName="Amplify")), \\ (AbilityType=(AbilityName="Indomitable")), \\ (RandomDeckName="TemplarTier1XComAbilities"), \\ (AbilityType=(AbilityName="Magnum_LW", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=2), (StatType=eStat_HP,StatAmount=1), (StatType=eStat_Will,StatAmount=5))) + aStatProgression=((StatType=eStat_Offense,StatAmount=1), (StatType=eStat_HP,StatAmount=1), (StatType=eStat_Will,StatAmount=5))) ; CPL +SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="StunStrike")), \\ - (AbilityType=(AbilityName="IRI_SoulShot", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ + (AbilityType=(AbilityName="ShieldBash_LW", ApplyToWeaponSlot=eInvSlot_SecondaryWeapon)), \\ (AbilityType=(AbilityName="Brawler", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ (RandomDeckName="TemplarTier1XComAbilities"), \\ (AbilityType=(AbilityName="Quickdraw", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ - aStatProgression=((StatType=eStat_Offense,StatAmount=2))) + aStatProgression=((StatType=eStat_Offense,StatAmount=1))) ; SGT +SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="Pillar", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ @@ -1878,7 +1875,7 @@ bNoSecondaryWeapon=true ; TSGT +SoldierRanks=(AbilitySlots=((AbilityType=(AbilityName="DoubleRendFocus", ApplyToWeaponSlot=eInvSlot_PrimaryWeapon)), \\ - (AbilityType=(AbilityName="ArcWavePassive_LW")), \\ + (AbilityType=(AbilityName="ArcWavePassive")), \\ (AbilityType=(AbilityName="CrusaderRage_LW")), \\ (RandomDeckName="TemplarTier3XComAbilities"), \\ (AbilityType=(AbilityName="Gunslinger", ApplyToWeaponSlot=eInvSlot_Pistol))), \\ diff --git a/LongWarOfTheChosen/Config/XComContent.ini b/LongWarOfTheChosen/Config/XComContent.ini index 825693c37..70c00b7e9 100644 --- a/LongWarOfTheChosen/Config/XComContent.ini +++ b/LongWarOfTheChosen/Config/XComContent.ini @@ -4,18 +4,9 @@ [Content.MapContent] .Map=CIN_Loading_Infiltration_CityCenter -.Package=UICollection_Dropship - .Map=CIN_Loading_Infiltration_SmallTown -.Package=UICollection_Dropship - -.Map=$ALL -.Package=UILibrary_Refs -.Package=UILibrary_SMG -.Package=UILibrary_LW_AlienPack -.Package=UILibrary_LW_Coilguns -.Package=UILibrary_LW_LaserPack -.Package=UILibrary_LWOTC ++Package=UICollection_Dropship ++Package=LWSmashNGrab [XComGame.X2BodyPartTemplateManager] ;; HAX fix for bad config in base-game diff --git a/LongWarOfTheChosen/Config/XComEncounterLists.ini b/LongWarOfTheChosen/Config/XComEncounterLists.ini index db4606450..f193c15b1 100644 --- a/LongWarOfTheChosen/Config/XComEncounterLists.ini +++ b/LongWarOfTheChosen/Config/XComEncounterLists.ini @@ -6902,30 +6902,6 @@ SpawnDistribution[67]=(Template="Faceless", MinForceLevel=7, MaxForceLevel=20, MaxCharactersPerGroup=2, SpawnWeight=20)) -;-------------------------- -; Sitreps: - -+SpawnDistributionLists=(ListID="PsionicLeaders", \\ - SpawnDistribution[0]=(Template="SectoidM2_LW", MinForceLevel=12, MaxForceLevel=99, MaxCharactersPerGroup=1, SpawnWeight=100), \\ - ) - -+SpawnDistributionLists=(ListID="PsionicFollowers", \\ - SpawnDistribution[0]=(Template="SectoidM2_LW", MinForceLevel=12, MaxForceLevel=99, MaxCharactersPerGroup=1, SpawnWeight=100), \\ - ) - -+SpawnDistributionLists=(ListID="AutomatedDefensesLeaders", \\ - SpawnDistribution[0]=(Template="AdvMEC_M3_LW", MinForceLevel=16, MaxForceLevel=99, MaxCharactersPerGroup=2, SpawnWeight=240), \\ - SpawnDistribution[1]=(Template="AdvMECArcherM1", MinForceLevel=9, MaxForceLevel=99, MaxCharactersPerGroup=2, SpawnWeight=240), \\ - SpawnDistribution[2]=(Template="AdvMECArcherM2", MinForceLevel=13, MaxForceLevel=99, MaxCharactersPerGroup=2, SpawnWeight=240), \\ - ) - -+SpawnDistributionLists=(ListID="AutomatedDefensesFollowers", \\ - SpawnDistribution[0]=(Template="AdvMEC_M3_LW", MinForceLevel=19, MaxForceLevel=99, MaxCharactersPerGroup=2, SpawnWeight=240), \\ - SpawnDistribution[1]=(Template="AdvMECArcherM1", MinForceLevel=10, MaxForceLevel=99, MaxCharactersPerGroup=2, SpawnWeight=240), \\ - SpawnDistribution[2]=(Template="AdvMECArcherM2", MinForceLevel=14, MaxForceLevel=99, MaxCharactersPerGroup=2, SpawnWeight=240), \\ - ) - - ;-------------------------- ; Normal Lost ; diff --git a/LongWarOfTheChosen/Config/XComEncounters.ini b/LongWarOfTheChosen/Config/XComEncounters.ini index dafca81bf..e2e9ffe17 100644 --- a/LongWarOfTheChosen/Config/XComEncounters.ini +++ b/LongWarOfTheChosen/Config/XComEncounters.ini @@ -2225,24 +2225,3 @@ ExcludeTacticalTag="Ruler_ArchonKingDead"), \\ EncounterIDs[3]=(EncounterID="OPNx4_Standard_LW") \\ ) - -; level 5 chosen encounters - -+ConfigurableEncounters=(EncounterID="CHOSENx1_AssassinM5", \\ - MaxSpawnCount=1, \\ - bDisableSpawn=true, \\ - ReinforcementCountdown=0, \\ - ForceSpawnTemplateNames[0]="ChosenAssassinM5") - -+ConfigurableEncounters=(EncounterID="CHOSENx1_WarlockM5", \\ - MaxSpawnCount=1, \\ - bDisableSpawn=true, \\ - ReinforcementCountdown=0, \\ - ForceSpawnTemplateNames[0]="ChosenWarlockM5") - -+ConfigurableEncounters=(EncounterID="CHOSENx1_SniperM5", \\ - MaxSpawnCount=1, \\ - bDisableSpawn=true, \\ - ReinforcementCountdown=0, \\ - ForceSpawnTemplateNames[0]="ChosenSniperM5") - \ No newline at end of file diff --git a/LongWarOfTheChosen/Config/XComEngine.ini b/LongWarOfTheChosen/Config/XComEngine.ini index a8fdb03ea..efabb506c 100644 --- a/LongWarOfTheChosen/Config/XComEngine.ini +++ b/LongWarOfTheChosen/Config/XComEngine.ini @@ -60,7 +60,6 @@ bDisablePhysXHardwareSupport=true +ModClassOverrides=(BaseGameClass="UIStrategyMapItem_AlienNetworkComponent", ModClass="LW_Overhaul.UIStrategyMapItem_AlienNetworkComponent_LW") +ModClassOverrides=(BaseGameClass="UIAdventOperations", ModClass="LW_Overhaul.UIAdventOperations_LW") +ModClassOverrides=(BaseGameClass="UIMission_ChosenAmbush", ModClass="LW_Overhaul.UIMission_ChosenAmbush_LW") -+ModClassOverrides=(BaseGameClass="XGAIBehavior_Civilian", ModClass="LW_Overhaul.XGAIBehavior_Civilian_LW") ;+UIDynamicClassOverrides=(BaseGameClass="UIPersonnel_SoldierListItem", ModClass="LW_Toolbox_Integrated.UIPersonnel_SoldierListItem_LW") ; Perfect Information for LW2 diff --git a/LongWarOfTheChosen/Config/XComGame.ini b/LongWarOfTheChosen/Config/XComGame.ini index e360a70db..2ef385d0e 100644 --- a/LongWarOfTheChosen/Config/XComGame.ini +++ b/LongWarOfTheChosen/Config/XComGame.ini @@ -34,7 +34,6 @@ LostTowersPOIForceLevel=5 [XComGame.CHHelpers] PreserveProxyUnitData=true UseTeamSwapFix=true -bDontUnequipCovertOps=true UseNewPersonnelStatusBehavior=true PlaceEvacZoneAbilityName="PlaceDelayedEvacZone" DisableExtraLOSCheckForSmoke=true @@ -54,9 +53,6 @@ DisableSkipGroupOnScamper=true +ClassesExcludedFromAWCRoll=LWS_Sharpshooter +ClassesExcludedFromAWCRoll=LWS_Shinobi +ClassesExcludedFromAWCRoll=LWS_Assault -+ClassesExcludedFromAWCRoll=Reaper -+ClassesExcludedFromAWCRoll=Skirmisher -+ClassesExcludedFromAWCRoll=Templar +TickOnMindControlRemovalEffects=Stunned @@ -67,9 +63,6 @@ DisableSkipGroupOnScamper=true +AbilityTemplatePerksToLoad=LW_SoulStorm +AbilityTemplatePerksToLoad=XCOMHunterMark_LW +AbilityTemplatePerksToLoad=CloseCombatSpecialistAttack -+AbilityTemplatePerksToLoad=IRI_SoulShot -+AbilityTemplatePerksToLoad=IRI_TemplarShield -+AbilityTemplatePerksToLoad=Apotheosis +ClassesAllowPsiPCS=PsiOperative @@ -78,9 +71,6 @@ DisableSkipGroupOnScamper=true +GrenadesRequiringUnitsOnTargetedTiles=DenseSmokeGrenade +GrenadesRequiringUnitsOnTargetedTiles=DenseSmokeGrenadeMk2 -bDisableCivilianPreMoveYell = true -bDisableYellRedAlert = true - [BetterSecondWaveSupport.X2DownloadableContentInfo_BetterSecondWaveSupport] +AddSecondWave=(ID="DisableTutorial", DifficultyValue=0) +AddSecondWave=(ID="DisableChosen", DifficultyValue=0) @@ -110,7 +100,7 @@ bDontTouchSquadSize=true [LongWarOfTheChosen CHDLCRunOrder] ;+RunBefore="PrimarySecondaries" -+RunAfter="EncounterListReplacerWOTC" +;+RunAfter [LongWarOfTheChosen CHModDependency] DisplayName="Long War of the Chosen" diff --git a/LongWarOfTheChosen/Config/XComGameCore.ini b/LongWarOfTheChosen/Config/XComGameCore.ini index a9095312e..e7bbb3d58 100644 --- a/LongWarOfTheChosen/Config/XComGameCore.ini +++ b/LongWarOfTheChosen/Config/XComGameCore.ini @@ -308,8 +308,6 @@ NUM_STARTING_SOLDIERS=22 -LootTables = ( TableName = "Andromedon_TimedLoot",Loots[0]=(Chance=100,MinCount=1,MaxCount=1,TemplateName="EleriumCore",RollGroup=1), Loots[1]=(Chance=50,MinCount=1,MaxCount=1,TableRef="MidAlienWeaponUpgrades",RollGroup=2), Loots[2]=(Chance=50,MinCount=1,MaxCount=1,TableRef="LateAlienWeaponUpgrades",RollGroup=2), Loots[3]=(Chance=25,MinCount=1,MaxCount=1,TemplateName="AlienDatapad",RollGroup=3) ) -LootTables = ( TableName = "Sectopod_TimedLoot", Loots[0]=(Chance=100,MinCount=1,MaxCount=1,TemplateName="EleriumCore",RollGroup=1), Loots[1]=(Chance=100,MinCount=1,MaxCount=1,TableRef="LateAlienWeaponUpgrades",RollGroup=2), Loots[2]=(Chance=50,MinCount=1,MaxCount=1,TemplateName="AlienDatapad",RollGroup=3) ) -LootTables = ( TableName = "Gatekeeper_TimedLoot",Loots[0]=(Chance=100,MinCount=1,MaxCount=1,TemplateName="EleriumCore",RollGroup=1), Loots[1]=(Chance=100,MinCount=1,MaxCount=1,TableRef="LateAlienWeaponUpgrades",RollGroup=2), Loots[2]=(Chance=50,MinCount=1,MaxCount=1,TemplateName="AlienDatapad",RollGroup=3) ) --LootTables = ( TableName = "Spectre_TimedLoot", Loots[0]=(Chance=100,MinCount=1,MaxCount=1,TemplateName="EleriumCore",RollGroup=1), Loots[1]=(Chance=20,MinCount=1,MaxCount=1,TableRef="MidAlienWeaponUpgrades",RollGroup=2), Loots[2]=(Chance=34,MinCount=1,MaxCount=1,TemplateName="AlienDatapad",RollGroup=3) ) - ; ALIEN TIMED LOOT -- generally add up to 80% so missions will have a mixed number of drops @@ -368,12 +366,6 @@ NUM_STARTING_SOLDIERS=22 Loots[4]=(Chance=10,MinCount=1,MaxCount=1,TableRef="EarlyAlienWeaponUpgrades",RollGroup=1), \\ Loots[5]=(Chance=20,MinCount=1,MaxCount=1,TableRef="MidAlienWeaponUpgrades",RollGroup=1) \\ ) -+LootTables = ( TableName = "Spectre_TimedLoot",\\ - Loots[0]=(Chance=35,MinCount=1,MaxCount=1,TemplateName="EleriumCore",RollGroup=1), \\ - Loots[1]=(Chance=20,MinCount=1,MaxCount=1,TableRef="EarlyAlienWeaponUpgrades",RollGroup=1), \\ - Loots[2]=(Chance=35,MinCount=1,MaxCount=1,TableRef="MidAlienWeaponUpgrades",RollGroup=1), \\ - Loots[3]=(Chance=5,MinCount=1,MaxCount=1,TemplateName="AlienDatapad",RollGroup=1) \\ - ) +LootTables = ( TableName = "Archon_TimedLoot", \\ Loots[0]=(Chance=35,MinCount=1,MaxCount=1,TemplateName="EleriumCore",RollGroup=1), \\ Loots[1]=(Chance=5,MinCount=1,MaxCount=1,TableRef="EarlyAlienWeaponUpgrades",RollGroup=1), \\ @@ -1237,11 +1229,11 @@ SATELLITE_DATA_SCAN_RATE_DURATION_HOURS=672 ENEMY_PROTOCOL_HACKING_BONUS=10 VIPER_ROUNDS_APPLICATION_CHANCE=12 --HackRewardNames=FacilityLead --HackRewardNames=LootFacilityLead_T1 --HackRewardNames=LootFacilityLead_T2 --HackRewardNames=SatelliteData_T1 --HackRewardNames=SatelliteData_T2 +-HackRewardNames="FacilityLead" +-HackRewardNames="LootFacilityLead_T1" +-HackRewardNames="LootFacilityLead_T2" +-HackRewardNames="SatelliteData_T1" +-HackRewardNames="SatelliteData_T2" +HackRewardNames="BuffEnemy_FullOverride" +HackRewardNames="ControlRobot_Mission" @@ -1462,9 +1454,9 @@ LootTemplateName=BigIntelCache [LootPCS_T1_LW X2HackRewardTemplate] RewardImagePath=img:///UILibrary_Common.HackReward_breachNetwork -MinHackSuccess=45 +MinHackSuccess=55 HackSuccessVariance=10 -bIsTier1Reward=true +bIsTier2Reward=true bPairWithLinkedReward=false bIsTacticalReward=true bIsStrategyReward=true @@ -2580,14 +2572,3 @@ DISRUPTOR_RIFLE_PSI_CRIT=100 +HideVisualizationOfResults=AA_UnitIsMindControlling +HideVisualizationOfResults=AA_NotWithAnObjectiveItem +HideVisualizationOfResults=AA_AlreadyAmplified - -[XComGame.X2Effect_ApplyWeaponDamage] - -;Temporarily add the config variable so the damage % change will work with local highlander -TRUNCATE_FINAL_DAMAGE_MODIFIER = true - -[XComGame.X2GrapplePuck] - -!GrappleDistanceModsByAbility=() --GrappleDistanceModsByAbility[0]=(AbilityName="HunterGrapple", DistanceModMeters=10) -+GrappleDistanceModsByAbility[0]=(AbilityName="HunterGrapple", DistanceModMeters=0) diff --git a/LongWarOfTheChosen/Config/XComGameData.ini b/LongWarOfTheChosen/Config/XComGameData.ini index 0c545c09c..f54ab1ad9 100644 --- a/LongWarOfTheChosen/Config/XComGameData.ini +++ b/LongWarOfTheChosen/Config/XComGameData.ini @@ -557,8 +557,8 @@ ReducedContactBaseModifier[3]=25 ;Impossible +SoldierRewardForceLevelGates=2; LCPL (3 weeks) +SoldierRewardForceLevelGates=4; CPL (9 weeks) +SoldierRewardForceLevelGates=8; SGT -+SoldierRewardForceLevelGates=14; SSGT -+SoldierRewardForceLevelGates=20; TSGT ++SoldierRewardForceLevelGates=12; SSGT ++SoldierRewardForceLevelGates=18; TSGT +SoldierRewardForceLevelGates=35; GSGT +SoldierRewardForceLevelGates=40; MSGT @@ -661,7 +661,7 @@ RURAL_CHECKPOINTS_SUPPLY_MULTIPLIER=0.5 [XComGame.X2AbilityTemplateManager] +EffectUpdatesOnMove="LWOfficerCommandAura" -+AbilityAvailabilityCodes="AA_UnitIsFocussed" ++AbilityAvailabilityCodes="AA_UnitIsFocusssedOn" +AbilityAvailabilityCodes="AA_InsufficientIntel" SuperConcealShotMax=100 @@ -708,10 +708,6 @@ bSmokeCancelsFlankCritBonus=true +PerkPackage=LW_PsiOverhaul_Perks +PerkPackage=HunterTrackingMark_LW -+PerkPackage = "IRISoulShotPerk" -+PerkPackage = "IRIParryReworkPerk" -+PerkPackage = "IRIApotheosisPerk" - [LW_Overhaul.X2StrategyElement_NewTechs_LW] RENDER_REWARD_ELERIUM_CORE=8 ; Elerium Dust RENDER_REWARD_SECTOID_CORPSE=3 ; Alien Alloy @@ -785,10 +781,8 @@ REPEAT_BASIC_ENGINEERING_INCREASE = 2800 +Loadouts=(LoadoutName="SquaddieSkirmisher", Items[0]=(Item="SkirmisherArmor"), Items[1]=(Item="Bullpup_CV"), Items[2]=(Item="WristBlade_CV"), Items[3]=(Item="FlashbangGrenade"), Items[4]=(Item="CeramicPlating")) -Loadouts=(LoadoutName="SquaddieTemplar", Items[0]=(Item="TemplarArmor"), Items[1]=(Item="ShardGauntlet_CV"), Items[2]=(Item="Sidearm_CV"), Items[3]=(Item="FragGrenade")) ++Loadouts=(LoadoutName="SquaddieTemplar", Items[0]=(Item="TemplarArmor"), Items[1]=(Item="ShardGauntlet_CV"), Items[2]=(Item="TemplarBallisticShield_CV"), Items[3]=(Item="FlashbangGrenade"), Items[4]=(Item="CeramicPlating")) -; If you want Templar Shields switch line is commented out below. -;+Loadouts=(LoadoutName="SquaddieTemplar", Items[0]=(Item="TemplarArmor"), Items[1]=(Item="ShardGauntlet_CV"), Items[2]=(Item="TemplarBallisticShield_CV"), Items[3]=(Item="FlashbangGrenade"), Items[4]=(Item="CeramicPlating")) -+Loadouts=(LoadoutName="SquaddieTemplar", Items[0]=(Item="TemplarArmor"), Items[1]=(Item="ShardGauntlet_CV"), Items[2]=(Item="FlashbangGrenade"), Items[3]=(Item="CeramicPlating")) +Loadouts=(LoadoutName="SquaddieLWS_Assault", Items[0]=(Item="Shotgun_CV"), Items[1]=(Item="Arcthrower_CV")) +Loadouts=(LoadoutName="SquaddieLWS_Shinobi", Items[0]=(Item="SMG_CV"), Items[1]=(Item="Sword_CV")) @@ -799,6 +793,9 @@ REPEAT_BASIC_ENGINEERING_INCREASE = 2800 +Loadouts=(LoadoutName="SquaddieLWS_Specialist", Items[0]=(Item="AssaultRifle_CV"), Items[1]=(Item="Gremlin_CV")) +Loadouts=(LoadoutName="SquaddieLWS_Technical", Items[0]=(Item="AssaultRifle_CV"), Items[1]=(Item="LWGauntlet_CV")) +-Loadouts=(LoadoutName="RequiredSoldier", Items[0]=(Item="XPad")) ++Loadouts=(LoadoutName="RequiredSoldier", Items[0]=(Item="XPad"), Items[1]=(Item="EvacFlare")) + +Loadouts=(LoadoutName="ResistanceMecM1_Loadout", Items[0]=(Item="AdvMEC_M1_WPN"), Items[1]=(Item="ResistanceMEC_Shoulder_WPN")) +Loadouts=(LoadoutName="RebelSoldier", Items[0]=(Item="AssaultRifle_CV"), Items[1]=(Item="FragGrenade"), Items[2]=(Item="FlashbangGrenade"), Items[3]=(Item="EvacFlare")) @@ -893,11 +890,6 @@ REPEAT_BASIC_ENGINEERING_INCREASE = 2800 +Loadouts=(LoadoutName="ChosenSniperM2_Loadout", Items[0]=(Item="ChosenSniperRifle_MG"), Items[1]=(Item="ChosenSniperPistol_MG"), Items[2]=(Item="HunterFlashbang")) +Loadouts=(LoadoutName="ChosenSniperM3_Loadout", Items[0]=(Item="ChosenSniperRifle_BM"), Items[1]=(Item="ChosenSniperPistol_BM"), Items[2]=(Item="HunterFlashbang")) +Loadouts=(LoadoutName="ChosenSniperM4_Loadout", Items[0]=(Item="ChosenSniperRifle_T4"), Items[1]=(Item="ChosenSniperPistol_T4"), Items[2]=(Item="HunterFlashbang")) -+Loadouts=(LoadoutName="ChosenSniperM5_Loadout", Items[0]=(Item="ChosenSniperRifle_T5"), Items[1]=(Item="ChosenSniperPistol_T5"), Items[2]=(Item="HunterFlashbang")) - -+Loadouts=(LoadoutName="ChosenWarlockM5_Loadout", Items[0]=(Item="ChosenRifle_T5"), Items[1]=(Item="WarlockM5_PsiWeapon")) - -+Loadouts=(LoadoutName="ChosenAssassinM5_Loadout", Items[0]=(Item="ChosenShotgun_T5"), Items[1]=(Item="ChosenSword_T5"), Items[2]=(Item="MountainMistGrenade")) ; This is for PCS stat bumps @@ -1357,17 +1349,8 @@ TIER3_STRIKE_DMG=(Damage=12, Spread=0, PlusOne=0, Crit=6, Pierce=0, Shred=0, Tag ) -+ChestDefinitions=(Type="Basic4", ArchetypePath="MissionAssets_SupplyExtraction.Archetypes.ARC_IA_SupplyCrate_Standard", LootTable="SupplyExtraction_Basic4") -+ChestDefinitions=(Type="Basic5", ArchetypePath="MissionAssets_SupplyExtraction.Archetypes.ARC_IA_SupplyCrate_Standard", LootTable="SupplyExtraction_Basic5") - [XComGame.X2StrategyGameRulesetDataStructures] -; override Bond training time modifiers. -BondProjectPoints[0]=0 -BondProjectPoints[1]=1 -BondProjectPoints[2]=1 -BondProjectPoints[3]=1 - ;-AbilityPointCosts[0]=0 ; Squaddie ;-AbilityPointCosts[1]=10 ; Corporal ;-AbilityPointCosts[2]=11 ; Sergeant @@ -1706,34 +1689,23 @@ MinimumForceLevel=15 [XComGame.X2StrategyElement_XpackStaffSlots] RESISTANCE_RING_COVERT_ACTION_DURATION_MODIFIER=0.25 -[XComGame.XComGameState_AdventChosen] -TooltipBounds=(fLeft=-0.015, fTop=-0.025, fRight=0.015, fBottom=0.015) - -MaxScoreAtKnowledgeLevel[eChosenKnowledge_Start]=24 -MaxScoreAtKnowledgeLevel[eChosenKnowledge_Saboteur]=49 -MaxScoreAtKnowledgeLevel[eChosenKnowledge_Sentinel]=74 -MaxScoreAtKnowledgeLevel[eChosenKnowledge_Collector]=99 -MaxScoreAtKnowledgeLevel[eChosenKnowledge_Raider]=100 - [ChosenAction_Retribution X2ChosenActionTemplate] MaxPerMonth=3 IndividualCooldown=2 -ActionPriority=40 -MinXComKnowledge=3 -MinKnowledgeGain=8 -MaxKnowledgeGain=8 +ActionPriority=20 +MinXComKnowledge=1 +MinKnowledgeGain=5 +MaxKnowledgeGain=5 [ChosenAction_Training X2ChosenActionTemplate] MaxPerMonth=3 -ActionPriority=20 -IndividualCooldown=2 +ActionPriority=10 [ChosenAction_Sabotage X2ChosenActionTemplate] MaxPerMonth=3 -IndividualCooldown=0 -MinXComKnowledge=0 -ActionPriority=10 -ActivationTime=(MinDays=10, MaxDays=20) +IndividualCooldown=3 +MinXComKnowledge=3 +ActionPriority=40 [ChosenAction_DarkEvent X2ChosenActionTemplate] MaxPerMonth=1 @@ -1750,84 +1722,84 @@ MinXComKnowledge=4 ActivationTime=(MinDays=2, MaxDays=10) [XComGame.X2StrategyElement_XpackChosenActions] -SabotageChance[0]=40 -SabotageChance[1]=40 -SabotageChance[2]=40 -SabotageChance[3]=40 +SabotageChance[0]=100 +SabotageChance[1]=100 +SabotageChance[2]=100 +SabotageChance[3]=100 [XComGame.X2StrategyElement_DefaultSabotages] -CargoHoldPercentDecrease[0]=0.25f -CargoHoldPercentDecrease[1]=0.25f -CargoHoldPercentDecrease[2]=0.25f -CargoHoldPercentDecrease[3]=0.25f -CargoHoldMin[0]=25 -CargoHoldMin[1]=25 -CargoHoldMin[2]=25 -CargoHoldMin[3]=25 -ServerArrayPercentDecrease[0]=0.25f -ServerArrayPercentDecrease[1]=0.25f -ServerArrayPercentDecrease[2]=0.25f -ServerArrayPercentDecrease[3]=0.25f -ServerArrayMinimum[0]=25 -ServerArrayMinimum[1]=25 -ServerArrayMinimum[2]=25 -ServerArrayMinimum[3]=25 -ScannerArrayDays[0]=4 -ScannerArrayDays[1]=4 -ScannerArrayDays[2]=4 -ScannerArrayDays[3]=4 +CargoHoldPercentDecrease[0]=0.75f +CargoHoldPercentDecrease[1]=0.75f +CargoHoldPercentDecrease[2]=0.75f +CargoHoldPercentDecrease[3]=0.75f +CargoHoldMin[0]=150 +CargoHoldMin[1]=150 +CargoHoldMin[2]=150 +CargoHoldMin[3]=150 +ServerArrayPercentDecrease[0]=0.75f +ServerArrayPercentDecrease[1]=0.75f +ServerArrayPercentDecrease[2]=0.75f +ServerArrayPercentDecrease[3]=0.75f +ServerArrayMinimum[0]=150 +ServerArrayMinimum[1]=150 +ServerArrayMinimum[2]=150 +ServerArrayMinimum[3]=150 +ScannerArrayDays[0]=14 +ScannerArrayDays[1]=14 +ScannerArrayDays[2]=14 +ScannerArrayDays[3]=14 ; If you modify these values, update the localisation for ; [Sabotage_LongRangeComms X2SabotageTemplate] in XComGame.int. -LongRangeCommsHours[0]=120 -LongRangeCommsHours[1]=120 -LongRangeCommsHours[2]=120 -LongRangeCommsHours[3]=120 - -ResearchLabsDays[0]=4 -ResearchLabsDays[1]=4 -ResearchLabsDays[2]=4 -ResearchLabsDays[3]=4 -LabStorageMinDatapads[0]=2 -LabStorageMinDatapads[1]=2 -LabStorageMinDatapads[2]=2 -LabStorageMinDatapads[3]=2 -LabStorageMaxDatapads[0]=4 -LabStorageMaxDatapads[1]=4 -LabStorageMaxDatapads[2]=4 -LabStorageMaxDatapads[3]=4 -InfirmaryDays[0]=5 -InfirmaryDays[1]=5 -InfirmaryDays[2]=5 -InfirmaryDays[3]=5 -SoldierCommsNumSoldiers[0]=3 -SoldierCommsNumSoldiers[1]=3 -SoldierCommsNumSoldiers[2]=3 -SoldierCommsNumSoldiers[3]=3 -WoundStaffMinDays[0]=15 -WoundStaffMinDays[1]=15 -WoundStaffMinDays[2]=15 -WoundStaffMinDays[3]=15 -WoundStaffMaxDays[0]=15 -WoundStaffMaxDays[1]=15 -WoundStaffMaxDays[2]=15 -WoundStaffMaxDays[3]=15 -MinSecureStorageCores[0]=2 -MinSecureStorageCores[1]=2 -MinSecureStorageCores[2]=2 -MinSecureStorageCores[3]=2 -MaxSecureStorageCores[0]=4 -MaxSecureStorageCores[1]=4 -MaxSecureStorageCores[2]=4 -MaxSecureStorageCores[3]=4 -MinWeaponLockersMods[0]=3 -MinWeaponLockersMods[1]=3 -MinWeaponLockersMods[2]=3 -MinWeaponLockersMods[3]=3 -MaxWeaponLockersMods[0]=5 -MaxWeaponLockersMods[1]=5 -MaxWeaponLockersMods[2]=5 -MaxWeaponLockersMods[3]=5 +LongRangeCommsHours[0]=336 +LongRangeCommsHours[1]=336 +LongRangeCommsHours[2]=336 +LongRangeCommsHours[3]=336 + +ResearchLabsDays[0]=12 +ResearchLabsDays[1]=12 +ResearchLabsDays[2]=12 +ResearchLabsDays[3]=12 +LabStorageMinDatapads[0]=5 +LabStorageMinDatapads[1]=5 +LabStorageMinDatapads[2]=5 +LabStorageMinDatapads[3]=5 +LabStorageMaxDatapads[0]=10 +LabStorageMaxDatapads[1]=10 +LabStorageMaxDatapads[2]=10 +LabStorageMaxDatapads[3]=10 +InfirmaryDays[0]=10 +InfirmaryDays[1]=10 +InfirmaryDays[2]=10 +InfirmaryDays[3]=10 +SoldierCommsNumSoldiers[0]=10 +SoldierCommsNumSoldiers[1]=10 +SoldierCommsNumSoldiers[2]=10 +SoldierCommsNumSoldiers[3]=10 +WoundStaffMinDays[0]=60 +WoundStaffMinDays[1]=60 +WoundStaffMinDays[2]=60 +WoundStaffMinDays[3]=60 +WoundStaffMaxDays[0]=60 +WoundStaffMaxDays[1]=60 +WoundStaffMaxDays[2]=60 +WoundStaffMaxDays[3]=60 +MinSecureStorageCores[0]=5 +MinSecureStorageCores[1]=5 +MinSecureStorageCores[2]=5 +MinSecureStorageCores[3]=5 +MaxSecureStorageCores[0]=10 +MaxSecureStorageCores[1]=10 +MaxSecureStorageCores[2]=10 +MaxSecureStorageCores[3]=10 +MinWeaponLockersMods[0]=8 +MinWeaponLockersMods[1]=8 +MinWeaponLockersMods[2]=8 +MinWeaponLockersMods[3]=8 +MaxWeaponLockersMods[0]=10 +MaxWeaponLockersMods[1]=10 +MaxWeaponLockersMods[2]=10 +MaxWeaponLockersMods[3]=10 [XComGame.XComGameState_ResistanceFaction] MaxHeroesPerFaction=2 @@ -1883,7 +1855,7 @@ ChosenSpawningDistance = 20 [XComGame.XComGameState_AdventChosen] StartingNumStrengths=0 KnowledgePerCapture=4 -GuaranteedKnowledgeGainPerMonth=0 +GuaranteedKnowledgeGainPerMonth=9 ; No need to have Chosen increasing covert action risks with ; no real counterplay, particularly as it would make ambushes @@ -1901,49 +1873,17 @@ TargetSocket=FX_CHEST ChainDelay=0.25 ReactDelay=0.2 -;Uncomment the below for 1 handed guantlet animations [LW_WeaponsAndArmor.X2DownloadableContentInfo_LW_WeaponsAndArmor] -;+TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE=ShardGauntlet_CV -;+TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE=ShardGauntlet_MG -;+TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE=ShardGauntlet_BM ++TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE=ShardGauntlet_CV ++TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE=ShardGauntlet_MG ++TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE=ShardGauntlet_BM + ++TEMPLAR_SHIELDS=TemplarBallisticShield_CV ++TEMPLAR_SHIELDS=TemplarBallisticShield_MG ++TEMPLAR_SHIELDS=TemplarBallisticShield_BM ;+AUTOPISTOL_ANIMS_WEAPONCATS_EXCLUDED=gauntlet +AUTOPISTOL_ANIMS_WEAPONCATS_EXCLUDED=sword +AUTOPISTOL_ANIMS_WEAPONCATS_EXCLUDED=pistol +AUTOPISTOL_ANIMS_WEAPONCATS_EXCLUDED=sidearm +AUTOPISTOL_ANIMS_WEAPONCATS_EXCLUDED=sawedoff - -[Chosen_Assassin X2AdventChosenTemplate] - -ChosenImages[0]="img:///UILibrary_XPACK_Common.AdventChosen_Assassin_1" -ChosenImages[1]="img:///UILibrary_XPACK_Common.AdventChosen_Assassin_2" -ChosenImages[2]="img:///UILibrary_XPACK_Common.AdventChosen_Assassin_3" -ChosenImages[3]="img:///UILibrary_XPACK_Common.AdventChosen_Assassin_4" -;ChosenImages[4]="img:///UILibrary_XPACK_Common.AdventChosen_Assassin_4" - -;-ChosenProgressionData=(CharTemplates[0]="ChosenAssassin", CharTemplates[1]="ChosenAssassinM2", CharTemplates[2]="ChosenAssassinM3", CharTemplates[3]="ChosenAssassinM4", SpawningTags[0]="Chosen_AssassinActive", SpawningTags[1]="Chosen_AssassinActiveM2", SpawningTags[2]="Chosen_AssassinActiveM3", SpawningTags[3]="Chosen_AssassinActiveM4", ReinforcementGroups[0]=(GroupNames[0]="CHSx1_Standard"), ReinforcementGroups[1]=(GroupNames[0]="CHSx2_Standard"), ReinforcementGroups[2]=(GroupNames[0]="CHSx3_Standard"), ReinforcementGroups[3]=(GroupNames[0]="CHSx4_Standard")) -;+ChosenProgressionData=(CharTemplates[0]="ChosenAssassin", CharTemplates[1]="ChosenAssassinM2", CharTemplates[2]="ChosenAssassinM3", CharTemplates[3]="ChosenAssassinM4", CharTemplates[4]="ChosenAssassinM5", SpawningTags[0]="Chosen_AssassinActive", SpawningTags[1]="Chosen_AssassinActiveM2", SpawningTags[2]="Chosen_AssassinActiveM3", SpawningTags[3]="Chosen_AssassinActiveM4", SpawningTags[4]="Chosen_AssassinActiveM5", ReinforcementGroups[0]=(GroupNames[0]="CHSx1_Standard"), ReinforcementGroups[1]=(GroupNames[0]="CHSx2_Standard"), ReinforcementGroups[2]=(GroupNames[0]="CHSx3_Standard"), ReinforcementGroups[3]=(GroupNames[0]="CHSx4_Standard"), ReinforcementGroups[4]=(GroupNames[0]="CHSx4_Standard")) - - -[Chosen_Hunter X2AdventChosenTemplate] - -ChosenImages[0]="img:///UILibrary_XPACK_Common.AdventChosen_Hunter_1" -ChosenImages[1]="img:///UILibrary_XPACK_Common.AdventChosen_Hunter_2" -ChosenImages[2]="img:///UILibrary_XPACK_Common.AdventChosen_Hunter_3" -ChosenImages[3]="img:///UILibrary_XPACK_Common.AdventChosen_Hunter_4" -;ChosenImages[4]="img:///UILibrary_XPACK_Common.AdventChosen_Hunter_4" - -;-ChosenProgressionData=(CharTemplates[0]="ChosenSniper", CharTemplates[1]="ChosenSniperM2", CharTemplates[2]="ChosenSniperM3", CharTemplates[3]="ChosenSniperM4", SpawningTags[0]="Chosen_SniperActive", SpawningTags[1]="Chosen_SniperActiveM2", SpawningTags[2]="Chosen_SniperActiveM3", SpawningTags[3]="Chosen_SniperActiveM4", ReinforcementGroups[0]=(GroupNames[0]="CHSx1_Standard"), ReinforcementGroups[1]=(GroupNames[0]="CHSx2_Standard"), ReinforcementGroups[2]=(GroupNames[0]="CHSx3_Standard"), ReinforcementGroups[3]=(GroupNames[0]="CHSx4_Standard")) -;+ChosenProgressionData=(CharTemplates[0]="ChosenSniper", CharTemplates[1]="ChosenSniperM2", CharTemplates[2]="ChosenSniperM3", CharTemplates[3]="ChosenSniperM4", CharTemplates[4]="ChosenSniperM5", SpawningTags[0]="Chosen_SniperActive", SpawningTags[1]="Chosen_SniperActiveM2", SpawningTags[2]="Chosen_SniperActiveM3", SpawningTags[3]="Chosen_SniperActiveM4", SpawningTags[4]="Chosen_SniperActiveM5", ReinforcementGroups[0]=(GroupNames[0]="CHSx1_Standard"), ReinforcementGroups[1]=(GroupNames[0]="CHSx2_Standard"), ReinforcementGroups[2]=(GroupNames[0]="CHSx3_Standard"), ReinforcementGroups[3]=(GroupNames[0]="CHSx4_Standard"), ReinforcementGroups[4]=(GroupNames[0]="CHSx4_Standard")) - -[Chosen_Warlock X2AdventChosenTemplate] - -ChosenImages[0]="img:///UILibrary_XPACK_Common.AdventChosen_Warlock_1" -ChosenImages[1]="img:///UILibrary_XPACK_Common.AdventChosen_Warlock_2" -ChosenImages[2]="img:///UILibrary_XPACK_Common.AdventChosen_Warlock_3" -ChosenImages[3]="img:///UILibrary_XPACK_Common.AdventChosen_Warlock_4" -;ChosenImages[4]="img:///UILibrary_XPACK_Common.AdventChosen_Warlock_4" - -;-ChosenProgressionData=(CharTemplates[0]="ChosenWarlock", CharTemplates[1]="ChosenWarlockM2", CharTemplates[2]="ChosenWarlockM3", CharTemplates[3]="ChosenWarlockM4", SpawningTags[0]="Chosen_WarlockActive", SpawningTags[1]="Chosen_WarlockActiveM2", SpawningTags[2]="Chosen_WarlockActiveM3", SpawningTags[3]="Chosen_WarlockActiveM4", ReinforcementGroups[0]=(GroupNames[0]="CHSx1_Standard"), ReinforcementGroups[1]=(GroupNames[0]="CHSx2_Standard"), ReinforcementGroups[2]=(GroupNames[0]="CHSx3_Standard"), ReinforcementGroups[3]=(GroupNames[0]="CHSx4_Standard")) -;+ChosenProgressionData=(CharTemplates[0]="ChosenWarlock", CharTemplates[1]="ChosenWarlockM2", CharTemplates[2]="ChosenWarlockM3", CharTemplates[3]="ChosenWarlockM4", CharTemplates[4]="ChosenWarlockM5", SpawningTags[0]="Chosen_WarlockActive", SpawningTags[1]="Chosen_WarlockActiveM2", SpawningTags[2]="Chosen_WarlockActiveM3", SpawningTags[3]="Chosen_WarlockActiveM4", SpawningTags[4]="Chosen_WarlockActiveM5", ReinforcementGroups[0]=(GroupNames[0]="CHSx1_Standard"), ReinforcementGroups[1]=(GroupNames[0]="CHSx2_Standard"), ReinforcementGroups[2]=(GroupNames[0]="CHSx3_Standard"), ReinforcementGroups[3]=(GroupNames[0]="CHSx4_Standard"), ReinforcementGroups[4]=(GroupNames[0]="CHSx4_Standard")) - diff --git a/LongWarOfTheChosen/Config/XComGameData_CharacterStats.ini b/LongWarOfTheChosen/Config/XComGameData_CharacterStats.ini index 01f2e1d91..806db8015 100644 --- a/LongWarOfTheChosen/Config/XComGameData_CharacterStats.ini +++ b/LongWarOfTheChosen/Config/XComGameData_CharacterStats.ini @@ -56,7 +56,6 @@ CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Will]=35 CharacterBaseStats[eStat_UtilityItems]=2 CharacterBaseStats[eStat_PsiOffense]=20 -CharacterBaseStats[eStat_Dodge]=5 [ReaperSoldier_Diff_0 X2CharacterTemplate] CharacterBaseStats[eStat_HP] = 5 @@ -83,7 +82,6 @@ CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Will]=35 CharacterBaseStats[eStat_UtilityItems]=2 CharacterBaseStats[eStat_PsiOffense]=20 -CharacterBaseStats[eStat_Dodge]=5 [SkirmisherSoldier_Diff_0 X2CharacterTemplate] CharacterBaseStats[eStat_HP] = 5 @@ -5404,7 +5402,7 @@ CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_HP]=7 CharacterBaseStats[eStat_Mobility]=12.01 CharacterBaseStats[eStat_Offense]=70 -CharacterBaseStats[eStat_PsiOffense]=15 +CharacterBaseStats[eStat_PsiOffense]=80 CharacterBaseStats[eStat_ReserveActionPoints]=0 CharacterBaseStats[eStat_SightRadius]=27 CharacterBaseStats[eStat_DetectionRadius]=15 @@ -5463,7 +5461,7 @@ MaxCharactersPerGroup=4 [Sectoid_Diff_1 X2CharacterTemplate] CharacterBaseStats[eStat_HP]=8 CharacterBaseStats[eStat_Offense]=75 -CharacterBaseStats[eStat_PsiOffense]=20 +CharacterBaseStats[eStat_PsiOffense]=90 CharacterBaseStats[eStat_Mobility]=12 CharacterBaseStats[eStat_Will]=85 CharacterBaseStats[eStat_FlankingCritChance]=33 @@ -5472,7 +5470,7 @@ CharacterBaseStats[eStat_FlankingCritChance]=33 CharacterBaseStats[eStat_HP]=8 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_CritChance]=10 -CharacterBaseStats[eStat_PsiOffense]=25 +CharacterBaseStats[eStat_PsiOffense]=90 CharacterBaseStats[eStat_Will]=85 CharacterBaseStats[eStat_FlankingCritChance]=40 @@ -5480,7 +5478,7 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 CharacterBaseStats[eStat_HP]=9 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_CritChance]=10 -CharacterBaseStats[eStat_PsiOffense]=30 +CharacterBaseStats[eStat_PsiOffense]=90 CharacterBaseStats[eStat_Will]=85 CharacterBaseStats[eStat_FlankingCritChance]=40 @@ -5607,7 +5605,7 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 +CharacterBaseStats[eStat_HP]=12 +CharacterBaseStats[eStat_Mobility]=12 +CharacterBaseStats[eStat_Offense]=75 -+CharacterBaseStats[eStat_PsiOffense]=30 ++CharacterBaseStats[eStat_PsiOffense]=100 +CharacterBaseStats[eStat_ReserveActionPoints]=0 +CharacterBaseStats[eStat_SightRadius]=27 +CharacterBaseStats[eStat_DetectionRadius]=18.01 @@ -5623,14 +5621,14 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [SectoidM2_LW_Diff_1 X2CharacterTemplate] +CharacterBaseStats[eStat_FlankingCritChance]=33 +CharacterBaseStats[eStat_HP]=14 -+CharacterBaseStats[eStat_PsiOffense]=35 ++CharacterBaseStats[eStat_PsiOffense]=110 +CharacterBaseStats[eStat_Will]=105 +CharacterBaseStats[eStat_Defense]=10 [SectoidM2_LW_Diff_2 X2CharacterTemplate] +CharacterBaseStats[eStat_FlankingCritChance]=40 +CharacterBaseStats[eStat_HP]=16 -+CharacterBaseStats[eStat_PsiOffense]=40 ++CharacterBaseStats[eStat_PsiOffense]=120 +CharacterBaseStats[eStat_Will]=105 +CharacterBaseStats[eStat_Offense]=80 +CharacterBaseStats[eStat_Defense]=15 @@ -5638,7 +5636,7 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [SectoidM2_LW_Diff_3 X2CharacterTemplate] +CharacterBaseStats[eStat_FlankingCritChance]=40 +CharacterBaseStats[eStat_HP]=18 -+CharacterBaseStats[eStat_PsiOffense]=45 ++CharacterBaseStats[eStat_PsiOffense]=130 +CharacterBaseStats[eStat_Will]=110 +CharacterBaseStats[eStat_Offense]=80 +CharacterBaseStats[eStat_Defense]=15 @@ -9257,7 +9255,7 @@ CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_HP]=6 CharacterBaseStats[eStat_Offense]=70 -CharacterBaseStats[eStat_PsiOffense]=20 +CharacterBaseStats[eStat_PsiOffense]=30 CharacterBaseStats[eStat_Will]=70 ; Alien-pack supported followers @@ -9300,21 +9298,21 @@ CharacterBaseStats[eStat_Will]=70 [AdvPriestM1_Diff_0 X2CharacterTemplate] CharacterBaseStats[eStat_HP]=5 CharacterBaseStats[eStat_Offense]=65 -CharacterBaseStats[eStat_PsiOffense]=15 +CharacterBaseStats[eStat_PsiOffense]=25 CharacterBaseStats[eStat_Will]=65 [AdvPriestM1_Diff_2 X2CharacterTemplate] CharacterBaseStats[eStat_Dodge]=5 CharacterBaseStats[eStat_HP]=8 CharacterBaseStats[eStat_Offense]=70 -CharacterBaseStats[eStat_PsiOffense]=20 +CharacterBaseStats[eStat_PsiOffense]=30 CharacterBaseStats[eStat_Will]=70 [AdvPriestM1_Diff_3 X2CharacterTemplate] CharacterBaseStats[eStat_Dodge]=10 CharacterBaseStats[eStat_HP]=8 CharacterBaseStats[eStat_Offense]=75 -CharacterBaseStats[eStat_PsiOffense]=25 +CharacterBaseStats[eStat_PsiOffense]=35 CharacterBaseStats[eStat_Will]=70 ; Alien-pack supported followers @@ -9451,11 +9449,11 @@ CharacterBaseStats[eStat_PsiOffense]=45 CharacterBaseStats[eStat_Will]=105 [ChosenWarlock X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=1 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=24 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_HP]=27 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=70 @@ -9463,23 +9461,23 @@ CharacterBaseStats[eStat_Offense]=70 CharacterBaseStats[eStat_ArmorMitigation]=0 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=18 -CharacterBaseStats[eStat_Mobility]=12 +CharacterBaseStats[eStat_HP]=20 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=65 [ChosenWarlock_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=29 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=34 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlock_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=36 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=41 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9487,34 +9485,34 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=1 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=32 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_HP]=41 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=70 [ChosenWarlockM2_Diff_0 X2CharacterTemplate] CharacterBaseStats[eStat_ArmorMitigation]=0 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=24 -CharacterBaseStats[eStat_Mobility]=12 +CharacterBaseStats[eStat_HP]=34 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=65 [ChosenWarlockM2_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=38 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=47 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM2_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=48 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=61 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9522,35 +9520,35 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=43 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=47 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM3_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=1 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=32 -CharacterBaseStats[eStat_Mobility]=12 +CharacterBaseStats[eStat_HP]=41 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=65 [ChosenWarlockM3_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=51 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=61 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM3_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=64 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=3 +CharacterBaseStats[eStat_HP]=74 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9558,9 +9556,9 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM4 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=57 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=3 +CharacterBaseStats[eStat_HP]=68 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9568,85 +9566,34 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM4_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=43 -CharacterBaseStats[eStat_Mobility]=12 +CharacterBaseStats[eStat_HP]=54 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=65 [ChosenWarlockM4_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=69 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=3 +CharacterBaseStats[eStat_HP]=101 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenWarlockM4_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=86 -CharacterBaseStats[eStat_Mobility]=14 -CharacterBaseStats[eStat_Offense]=75 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - - - -[ChosenWarlockM5 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=80 -CharacterBaseStats[eStat_Mobility]=14 -CharacterBaseStats[eStat_Offense]=75 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - -CharacterBaseStats[eStat_AlertLevel]=2 -CharacterBaseStats[eStat_PsiOffense]=60 -CharacterBaseStats[eStat_SightRadius]=27 -CharacterBaseStats[eStat_DetectionRadius]=12 -CharacterBaseStats[eStat_UtilityItems]=2 -CharacterBaseStats[eStat_Will]=50 -CharacterBaseStats[eStat_HackDefense]=125 -CharacterBaseStats[eStat_FlankingCritChance]=33 -CharacterBaseStats[eStat_FlankingAimBonus]=0 -CharacterBaseStats[eStat_Strength]=50 - - - -[ChosenWarlockM5_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=60 -CharacterBaseStats[eStat_Mobility]=12 -CharacterBaseStats[eStat_Offense]=65 - -[ChosenWarlockM5_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=96 -CharacterBaseStats[eStat_Mobility]=14 -CharacterBaseStats[eStat_Offense]=75 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - -[ChosenWarlockM5_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=120 -CharacterBaseStats[eStat_Mobility]=14 +CharacterBaseStats[eStat_ArmorMitigation]=4 +CharacterBaseStats[eStat_HP]=122 +CharacterBaseStats[eStat_Mobility]=15 CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 - [ChosenSniper X2CharacterTemplate] CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=26 +CharacterBaseStats[eStat_HP]=27 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9665,8 +9612,8 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniper_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=31 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=34 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=85 CharacterBaseStats[eStat_Defense]=0 @@ -9675,9 +9622,9 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniper_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=39 -CharacterBaseStats[eStat_Mobility]=16 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=41 +CharacterBaseStats[eStat_Mobility]=18 CharacterBaseStats[eStat_Offense]=90 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9686,8 +9633,8 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=35 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=36 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9697,7 +9644,7 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM2_Diff_0 X2CharacterTemplate] CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=26 +CharacterBaseStats[eStat_HP]=31 CharacterBaseStats[eStat_Mobility]=14 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9706,8 +9653,8 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM2_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=42 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=47 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=85 CharacterBaseStats[eStat_Defense]=0 @@ -9716,9 +9663,9 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM2_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=52 -CharacterBaseStats[eStat_Mobility]=16 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=57 +CharacterBaseStats[eStat_Mobility]=18 CharacterBaseStats[eStat_Offense]=90 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9728,8 +9675,8 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=46 +CharacterBaseStats[eStat_ArmorMitigation]=2 +CharacterBaseStats[eStat_HP]=47 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9738,8 +9685,8 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM3_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=35 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=41 CharacterBaseStats[eStat_Mobility]=14 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9748,8 +9695,8 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM3_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=55 +CharacterBaseStats[eStat_ArmorMitigation]=3 +CharacterBaseStats[eStat_HP]=61 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=85 CharacterBaseStats[eStat_Defense]=0 @@ -9758,9 +9705,9 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM3_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=69 -CharacterBaseStats[eStat_Mobility]=16 +CharacterBaseStats[eStat_ArmorMitigation]=3 +CharacterBaseStats[eStat_HP]=74 +CharacterBaseStats[eStat_Mobility]=18 CharacterBaseStats[eStat_Offense]=90 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9769,8 +9716,8 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM4 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=61 +CharacterBaseStats[eStat_ArmorMitigation]=3 +CharacterBaseStats[eStat_HP]=68 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9780,8 +9727,8 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM4_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=46 +CharacterBaseStats[eStat_ArmorMitigation]=1 +CharacterBaseStats[eStat_HP]=54 CharacterBaseStats[eStat_Mobility]=14 CharacterBaseStats[eStat_Offense]=80 CharacterBaseStats[eStat_Defense]=0 @@ -9790,8 +9737,8 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM4_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=74 +CharacterBaseStats[eStat_ArmorMitigation]=4 +CharacterBaseStats[eStat_HP]=88 CharacterBaseStats[eStat_Mobility]=16 CharacterBaseStats[eStat_Offense]=85 CharacterBaseStats[eStat_Defense]=0 @@ -9800,61 +9747,9 @@ CharacterBaseStats[eStat_CritChance]=0 CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenSniperM4_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=92 -CharacterBaseStats[eStat_Mobility]=16 -CharacterBaseStats[eStat_Offense]=90 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_CritChance]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - - -[ChosenSniperM5 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=89 -CharacterBaseStats[eStat_Mobility]=16 -CharacterBaseStats[eStat_Offense]=80 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_CritChance]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - -CharacterBaseStats[eStat_AlertLevel]=2 -CharacterBaseStats[eStat_PsiOffense]=60 -CharacterBaseStats[eStat_SightRadius]=27 -CharacterBaseStats[eStat_DetectionRadius]=12 -CharacterBaseStats[eStat_UtilityItems]=2 -CharacterBaseStats[eStat_Will]=50 -CharacterBaseStats[eStat_HackDefense]=125 -CharacterBaseStats[eStat_FlankingCritChance]=33 -CharacterBaseStats[eStat_FlankingAimBonus]=0 -CharacterBaseStats[eStat_Strength]=50 - -[ChosenSniperM5_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=67 -CharacterBaseStats[eStat_Mobility]=14 -CharacterBaseStats[eStat_Offense]=80 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_CritChance]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - -[ChosenSniperM5_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=106 -CharacterBaseStats[eStat_Mobility]=16 -CharacterBaseStats[eStat_Offense]=85 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=20 -CharacterBaseStats[eStat_CritChance]=0 -CharacterBaseStats[eStat_FlankingCritChance]=40 - -[ChosenSniperM5_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_HP]=133 -CharacterBaseStats[eStat_Mobility]=16 +CharacterBaseStats[eStat_ArmorMitigation]=4 +CharacterBaseStats[eStat_HP]=108 +CharacterBaseStats[eStat_Mobility]=18 CharacterBaseStats[eStat_Offense]=90 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 @@ -9863,7 +9758,7 @@ CharacterBaseStats[eStat_FlankingCritChance]=40 [ChosenAssassin X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=1 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_HP]=18 @@ -9874,29 +9769,29 @@ CharacterBaseStats[eStat_Offense]=75 CharacterBaseStats[eStat_ArmorMitigation]=0 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=14 +CharacterBaseStats[eStat_HP]=15 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=70 [ChosenAssassin_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=1 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=22 +CharacterBaseStats[eStat_HP]=26 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassin_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=27 +CharacterBaseStats[eStat_HP]=30 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=80 [ChosenAssassinM2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 CharacterBaseStats[eStat_HP]=24 @@ -9904,137 +9799,95 @@ CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassinM2_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=1 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=18 +CharacterBaseStats[eStat_HP]=20 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=70 [ChosenAssassinM2_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=29 +CharacterBaseStats[eStat_HP]=34 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassinM2_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=3 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=36 +CharacterBaseStats[eStat_HP]=39 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=80 [ChosenAssassinM3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=32 +CharacterBaseStats[eStat_HP]=31 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassinM3_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=24 +CharacterBaseStats[eStat_HP]=25 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=70 [ChosenAssassinM3_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=3 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=38 +CharacterBaseStats[eStat_HP]=44 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassinM3_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=4 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=48 +CharacterBaseStats[eStat_HP]=50 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=80 [ChosenAssassinM4 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=3 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=32 +CharacterBaseStats[eStat_HP]=40 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassinM4_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=2 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=24 +CharacterBaseStats[eStat_HP]=32 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=70 [ChosenAssassinM4_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=4 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=40 +CharacterBaseStats[eStat_HP]=56 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=75 [ChosenAssassinM4_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 +CharacterBaseStats[eStat_ArmorMitigation]=6 CharacterBaseStats[eStat_Defense]=0 CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=64 +CharacterBaseStats[eStat_HP]=67 CharacterBaseStats[eStat_Mobility]=9 CharacterBaseStats[eStat_Offense]=80 -[ChosenAssassinM5 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=56 -CharacterBaseStats[eStat_Mobility]=9 -CharacterBaseStats[eStat_Offense]=75 - -CharacterBaseStats[eStat_AlertLevel]=2 -CharacterBaseStats[eStat_PsiOffense]=60 -CharacterBaseStats[eStat_SightRadius]=27 -CharacterBaseStats[eStat_DetectionRadius]=12 -CharacterBaseStats[eStat_UtilityItems]=2 -CharacterBaseStats[eStat_Will]=50 -CharacterBaseStats[eStat_HackDefense]=125 -CharacterBaseStats[eStat_FlankingCritChance]=33 -CharacterBaseStats[eStat_FlankingAimBonus]=0 -CharacterBaseStats[eStat_Strength]=50 - -[ChosenAssassinM5_Diff_0 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=43 -CharacterBaseStats[eStat_Mobility]=9 -CharacterBaseStats[eStat_Offense]=70 - -[ChosenAssassinM5_Diff_2 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=68 -CharacterBaseStats[eStat_Mobility]=9 -CharacterBaseStats[eStat_Offense]=75 - -[ChosenAssassinM5_Diff_3 X2CharacterTemplate] -CharacterBaseStats[eStat_ArmorMitigation]=0 -CharacterBaseStats[eStat_Defense]=0 -CharacterBaseStats[eStat_Dodge]=0 -CharacterBaseStats[eStat_HP]=85 -CharacterBaseStats[eStat_Mobility]=9 -CharacterBaseStats[eStat_Offense]=80 [TheLostHP2 X2CharacterTemplate] CharacterBaseStats[eStat_Mobility]=14 diff --git a/LongWarOfTheChosen/Config/XComGameData_SoldierSkills.ini b/LongWarOfTheChosen/Config/XComGameData_SoldierSkills.ini index 70c1cb857..3ed5713af 100644 --- a/LongWarOfTheChosen/Config/XComGameData_SoldierSkills.ini +++ b/LongWarOfTheChosen/Config/XComGameData_SoldierSkills.ini @@ -27,7 +27,7 @@ SCANNING_PROTOCOL_CHARGES=1 REVIVAL_PROTOCOL_CHARGES=2 [XComGame.X2Ability_PsiOperativeAbilitySet] -SOULFIRE_COOLDOWN=3 +SOULFIRE_COOLDOWN=2 STASIS_COOLDOWN=5 INSANITY_COOLDOWN=1 DOMINATION_COOLDOWN=7 @@ -124,25 +124,17 @@ FOCUS3MOBILITY=0 FOCUS3DODGE=0 FOCUS3RENDDAMAGE=0 --FocusKillAbilities=IonicStorm --FocusKillAbilities=ArcWave --FocusKillAbilities=Rend --FocusKillAbilities=ArcWave_LW --FocusKillAbilities=Rend_LW - OVERCHARGE_FOCUS_CHANCE=100 -AmplifyBonusDamageMult=0.5f +AmplifyBonusDamageMult=0.35f AmplifyMinBonusDamage=1 AMPLIFY_COOLDOWN=3 ; Remove the semicolons behind the two lines below and add a value to the "+" line if you want to customize Pillar's cooldown. ;-PILLAR_COOLDOWN=1 ;+PILLAR_COOLDOWN= PILLAR_COOLDOWN = 4 -VoltHitMod=15 -ChannelChance=33 -ChannelPsionicChance=50 +VoltHitMod=5 INVERT_COOLDOWN=5 ; Customize the base hit chance in the "+" line all you want. StunStrikeHitChance=85 @@ -186,14 +178,15 @@ STUNSTRIKE_COOLDOWN=2 +AbilitiesGhostCantHave="GreaterPadding_BM" +AbilitiesGhostCantHave="Indomitable" +AbilitiesGhostCantHave="TemplarTerror" -+AbilitiesGhostCantHave="IRI_TemplarShield" VoidConduitInitialDamage=1 VoidConduitPerActionDamage=3 VoidConduitHPMod=1.0f -VOIDCONDUIT_COOLDOWN=3 +-FocusKillAbilities=IonicStorm +-FocusKillAbilities=ArcWave +-FocusKillAbilities=Rend [XComGame.X2AbilityMultiTarget_Volt] ;DistanceBetweenTargets=230400.0f ; unreal units squared diff --git a/LongWarOfTheChosen/Config/XComGameData_WeaponData.ini b/LongWarOfTheChosen/Config/XComGameData_WeaponData.ini index 51f5ca94b..9ae75278a 100644 --- a/LongWarOfTheChosen/Config/XComGameData_WeaponData.ini +++ b/LongWarOfTheChosen/Config/XComGameData_WeaponData.ini @@ -810,11 +810,11 @@ SNIPERRIFLE_COIL_ICLIPSIZE=3 SNIPERRIFLE_COIL_ISOUNDRANGE=30 SNIPERRIFLE_COIL_IENVIRONMENTDAMAGE=1 -AssaultRifle_Coil_ImagePath="UILibrary_LWOTC.InventoryArt.CoilRifle_Base" -SMG_Coil_ImagePath="UILibrary_LWOTC.InventoryArt.CoilSMG_Base" -Cannon_Coil_ImagePath="UILibrary_LWOTC.InventoryArt.CoilCannon_Base" -Shotgun_Coil_ImagePath="UILibrary_LWOTC.InventoryArt.CoilShotgun_Base" -SniperRifle_Coil_ImagePath="UILibrary_LWOTC.InventoryArt.CoilSniperRifle_Base" +AssaultRifle_Coil_ImagePath="UILibrary_LW_Overhaul.InventoryArt.CoilRifle_Base" +SMG_Coil_ImagePath="UILibrary_LW_Overhaul.InventoryArt.CoilSMG_Base" +Cannon_Coil_ImagePath="UILibrary_LW_Overhaul.InventoryArt.CoilCannon_Base" +Shotgun_Coil_ImagePath="UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_Base" +SniperRifle_Coil_ImagePath="UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_Base" SHORT_COIL_RANGE[0] = 60 SHORT_COIL_RANGE[1] = 60 @@ -1375,7 +1375,7 @@ LWPISTOL_COIL_IENVIRONMENTDAMAGE=0 [LW_Overhaul.X2Item_LWGauntlet] ;*********** CONVENTIONAL TIER ************* -Gauntlet_CV_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Conv_LWGauntlet" +Gauntlet_CV_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Conv_LWGauntlet" Gauntlet_Primary_CONVENTIONAL_BASEDAMAGE=(Damage=4, Spread=2, PlusOne=50, Crit=0, Pierce=0, Shred=2, Tag="", DamageType="Explosion") Gauntlet_Secondary_CONVENTIONAL_BASEDAMAGE=(Damage=3, Spread=1, PlusOne=50, Crit=0, Pierce=0, Shred=0, Tag="", DamageType="Napalm") @@ -1399,7 +1399,7 @@ Gauntlet_Secondary_CONVENTIONAL_ISOUNDRANGE=20 ; ********** MAG TIER *********** -Gauntlet_MG_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Mag_PlatedGauntlet" +Gauntlet_MG_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Mag_PlatedGauntlet" Gauntlet_Primary_MAG_BASEDAMAGE=(Damage=6, Spread=2, PlusOne=50, Crit=0, Pierce=0, Shred=2, Tag="", DamageType="Explosion") Gauntlet_Secondary_MAG_BASEDAMAGE=(Damage=6, Spread=2, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="", DamageType="Napalm") @@ -1418,7 +1418,7 @@ Gauntlet_Secondary_MAG_RADIUS=5 Gauntlet_Secondary_MAG_ISOUNDRANGE=20 ;*********** BEAM TIER ************* -Gauntlet_BM_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Beam_PowerGauntlet" +Gauntlet_BM_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Beam_PowerGauntlet" Gauntlet_Primary_BEAM_BASEDAMAGE=(Damage=8, Spread=3, PlusOne=50, Crit=0, Pierce=0, Shred=3, Tag="", DamageType="Explosion") Gauntlet_Secondary_BEAM_BASEDAMAGE=(Damage=9, Spread=2, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="", DamageType="Napalm") @@ -1436,9 +1436,9 @@ Gauntlet_Secondary_BEAM_RADIUS=5 Gauntlet_Secondary_BEAM_ISOUNDRANGE=20 [LW_Overhaul.X2Item_LWHolotargeter] -Holotargeter_CV_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Conv_LWHolotargeter" -Holotargeter_MG_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Mag_LWHolotargeter" -Holotargeter_BM_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Beam_LWHolotargeter" +Holotargeter_CV_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Conv_LWHolotargeter" +Holotargeter_MG_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Mag_LWHolotargeter" +Holotargeter_BM_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Beam_LWHolotargeter" ; Damage is amount of bonus damage that Vital Point Targeting will provide, PlusOne is supported except in UI Holotargeter_CONVENTIONAL_BASEDAMAGE=(Damage=1, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="", DamageType="Projectile_Conventional") @@ -1471,9 +1471,9 @@ Holotargeter_BEAM_ISOUNDRANGE=1 Holotargeter_BEAM_IENVIRONMENTDAMAGE = 0 [LW_Overhaul.X2Item_LWSawedOffShotgun] -SawedOffShotgun_CV_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Conv_SawedOffShotgun" -SawedOffShotgun_MG_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Mag_SawedOffShotgun" -SawedOffShotgun_BM_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_SawedOffShotgun" +SawedOffShotgun_CV_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Conv_SawedOffShotgun" +SawedOffShotgun_MG_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Mag_SawedOffShotgun" +SawedOffShotgun_BM_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_SawedOffShotgun" SawedOffShotgun_CONVENTIONAL_BASEDAMAGE=(Damage=6, Spread=2, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_Conventional") SawedOffShotgun_MAGNETIC_BASEDAMAGE=(Damage=10, Spread=3, PlusOne=0, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagXCom") SawedOffShotgun_BEAM_BASEDAMAGE=(Damage=14, Spread=4, PlusOne=0, Crit=7, Pierce=0, Shred=0, Tag="", DamageType="Projectile_BeamXCom") @@ -1515,9 +1515,9 @@ SAWED_OFF_RANGE[6]=-80 SAWED_OFF_RANGE[7]=-100 [LW_Overhaul.X2Item_ArcthrowerWeapon] -Arcthrower_CV_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Conv_Arcthrower" -Arcthrower_MG_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Mag_Arcthrower" -Arcthrower_BM_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Beam_Arcthrower" +Arcthrower_CV_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Conv_Arcthrower" +Arcthrower_MG_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Mag_Arcthrower" +Arcthrower_BM_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Beam_Arcthrower" ;damage only applies for EMPulser against mechanical units Arcthrower_CONVENTIONAL_BASEDAMAGE=(Damage=3, Spread=1, PlusOne=50, Crit=0, Pierce=9999, Shred=0, Tag="", DamageType="Projectile_Conventional") @@ -1548,9 +1548,9 @@ Arcthrower_BEAM_IENVIRONMENTDAMAGE = 0 [LW_Overhaul.X2Item_LWCombatKnife] -CombatKnife_CV_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Conv_CombatKnife" -CombatKnife_MG_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Mag_CombatKnife" -CombatKnife_BM_UIImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Mag_CombatKnife" +CombatKnife_CV_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Conv_CombatKnife" +CombatKnife_MG_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Mag_CombatKnife" +CombatKnife_BM_UIImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Mag_CombatKnife" CombatKnife_CONVENTIONAL_BASEDAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Melee") CombatKnife_MAGNETIC_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=75, Crit=5, Pierce=2, Shred=0, Tag="", DamageType="Melee") @@ -1699,9 +1699,9 @@ AdvGeneralM2_LW_WPN_BASEDAMAGE= (Damage=8, Spread = 2, PlusOne = 0, Crit = 4 [DLC_2.X2Item_DLC_Day60Weapons] -HUNTERRIFLE_CONVENTIONAL_BASEDAMAGE= (Damage=5, Spread=1, PlusOne=50, Crit=2, Pierce=1, Shred=0, Tag="", DamageType="Projectile_Conventional") -HUNTERRIFLE_MAGNETIC_BASEDAMAGE= (Damage=9, Spread=2, PlusOne=0, Crit=4, Pierce=1, Shred=0, Tag="", DamageType="Projectile_MagXCom") -HUNTERRIFLE_BEAM_BASEDAMAGE= (Damage=12, Spread=3, PlusOne=50, Crit=6, Pierce=1, Shred=0, Rupture=1, Tag="", DamageType="Projectile_BeamXCom") +HUNTERRIFLE_CONVENTIONAL_BASEDAMAGE= (Damage=5, Spread=1, PlusOne=50, Crit=2, Pierce=0, Shred=1, Tag="", DamageType="Projectile_Conventional") +HUNTERRIFLE_MAGNETIC_BASEDAMAGE= (Damage=9, Spread=2, PlusOne=0, Crit=4, Pierce=0, Shred=1, Tag="", DamageType="Projectile_MagXCom") +HUNTERRIFLE_BEAM_BASEDAMAGE= (Damage=12, Spread=3, PlusOne=50, Crit=6, Pierce=0, Shred=1, Rupture=1, Tag="", DamageType="Projectile_BeamXCom") HUNTERPISTOL_CONVENTIONAL_BASEDAMAGE=(Damage=2, Spread=1, PlusOne=0, Crit=1, Pierce=0, Shred=0, Tag="", DamageType="Projectile_Conventional") HUNTERPISTOL_MAGNETIC_BASEDAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagXCom") @@ -1922,26 +1922,20 @@ SHARDGAUNTLET_CONVENTIONAL_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pi -SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm_Psi", DamageType="Psi") -SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm_Psi", DamageType="Psi") -+SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=2, Spread=1, PlusOne=67, Crit=0, Pierce=0, Tag="Volt", DamageType="Psi") -+SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=2, Spread=1, PlusOne=67, Crit=0, Pierce=0, Tag="Volt_Psi", DamageType="Psi") -+SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=2, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm", DamageType="Psi") -+SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm_Psi", DamageType="Psi") -+SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=6, Spread=1, PlusOne=0, Crit=3, Pierce=0, Tag="IRI_SoulShot", DamageType="Psi") -+SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pierce=0, Tag="IRI_TemplarShield", DamageType="Psi") - -+SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=4, Spread=1, PlusOne=67, Crit=0, Pierce=0, Tag="Volt", DamageType="Psi") -+SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=4, Spread=1, PlusOne=67, Crit=0, Pierce=0, Tag="Volt_Psi", DamageType="Psi") ++SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=5, Spread=1, PlusOne=75, Crit=0, Pierce=0, Tag="Volt", DamageType="Psi") ++SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=7, Spread=1, PlusOne=75, Crit=0, Pierce=0, Tag="Volt_Psi", DamageType="Psi") +SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm", DamageType="Psi") +SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm_Psi", DamageType="Psi") -+SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=10, Spread=2, PlusOne=50, Crit=5, Pierce=0, Tag="IRI_SoulShot", DamageType="Psi") -+SHARDGAUNTLET_MAGNETIC_EXTRADAMAGE=(Damage=9, Spread=0, PlusOne=0, Crit=0, Pierce=0, Tag="IRI_TemplarShield", DamageType="Psi") -+SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=6, Spread=1, PlusOne=67, Crit=0, Pierce=0, Tag="Volt", DamageType="Psi") -+SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=6, Spread=1, PlusOne=67, Crit=0, Pierce=0, Tag="Volt_Psi", DamageType="Psi") ++SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=8, Spread=1, PlusOne=50, Crit=0, Pierce=0, Tag="Volt", DamageType="Psi") ++SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=11, Spread=1, PlusOne=50, Crit=0, Pierce=0, Tag="Volt_Psi", DamageType="Psi") +SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm", DamageType="Psi") +SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm_Psi", DamageType="Psi") -+SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=15, Spread=2, PlusOne=0, Crit=7, Pierce=0, Tag="IRI_SoulShot", DamageType="Psi") -+SHARDGAUNTLET_BEAM_EXTRADAMAGE=(Damage=14, Spread=0, PlusOne=0, Crit=0, Pierce=0, Tag="IRI_TemplarShield", DamageType="Psi") + ++SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="Volt", DamageType="Psi") ++SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="Volt_Psi", DamageType="Psi") ++SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=2, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm", DamageType="Psi") ++SHARDGAUNTLET_CONVENTIONAL_EXTRADAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=0, Pierce=0, Tag="IonicStorm_Psi", DamageType="Psi") SHARDGAUNTLET_CONVENTIONAL_AIM=20 SHARDGAUNTLET_CONVENTIONAL_CRITCHANCE=0 @@ -2109,36 +2103,36 @@ VEKTOR_BEAM_RANGE[25] = 0 +CHOSENSWORD_MAGNETIC_EXTRADAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=1, Pierce=0, Shred=0, Tag = "PartingSilk", DamageType="Melee") +CHOSENSWORD_BEAM_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Melee") +CHOSENSWORD_BEAM_EXTRADAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag = "PartingSilk", DamageType="Melee") -+CHOSENSWORD_T4_BASEDAMAGE=(Damage=6, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Melee") -+CHOSENSWORD_T4_EXTRADAMAGE=(Damage=6, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag = "PartingSilk", DamageType="Melee") ++CHOSENSWORD_T4_BASEDAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=3, Pierce=5, Shred=0, Tag="", DamageType="Melee") ++CHOSENSWORD_T4_EXTRADAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=3, Pierce=5, Shred=0, Tag = "PartingSilk", DamageType="Melee") +CHOSENSWORD_XCOM_BASEDAMAGE=(Damage=9, Spread=2, PlusOne=0, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Melee") +CHOSENRIFLE_CONVENTIONAL_BASEDAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENRIFLE_MAGNETIC_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=50, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENRIFLE_BEAM_BASEDAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENRIFLE_T4_BASEDAMAGE=(Damage=8, Spread=1, PlusOne=50, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENRIFLE_MAGNETIC_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=50, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENRIFLE_BEAM_BASEDAMAGE=(Damage=8, Spread=1, PlusOne=0, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENRIFLE_T4_BASEDAMAGE=(Damage=12, Spread=1, PlusOne=0, Crit=6, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") +CHOSENRIFLE_XCOM_BASEDAMAGE=(Damage=8, Spread=1, PlusOne=50, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") +CHOSENSHOTGUN_CONVENTIONAL_BASEDAMAGE=(Damage=4, Spread=0, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") +CHOSENSHOTGUN_MAGNETIC_BASEDAMAGE=(Damage=5, Spread=0, PlusOne=50, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") +CHOSENSHOTGUN_BEAM_BASEDAMAGE=(Damage=7, Spread=0, PlusOne=0, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSHOTGUN_T4_BASEDAMAGE=(Damage=8, Spread=0, PlusOne=50, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSHOTGUN_T4_BASEDAMAGE=(Damage=10, Spread=0, PlusOne=75, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSHOTGUN_XCOM_BASEDAMAGE=(Damage=10, Spread=2, PlusOne=25, Crit=8, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSHOTGUN_XCOM_BASEDAMAGE=(Damage=10, Spread=2, PlusOne=25, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERRIFLE_CONVENTIONAL_BASEDAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERRIFLE_MAGNETIC_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=50, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERRIFLE_BEAM_BASEDAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERRIFLE_T4_BASEDAMAGE=(Damage=8, Spread=1, PlusOne=50, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERRIFLE_CONVENTIONAL_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERRIFLE_MAGNETIC_BASEDAMAGE=(Damage=6, Spread=1, PlusOne=75, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERRIFLE_BEAM_BASEDAMAGE=(Damage=8, Spread=1, PlusOne=50, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERRIFLE_T4_BASEDAMAGE=(Damage=13, Spread=1, PlusOne=75, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") +CHOSENSNIPERRIFLE_XCOM_BASEDAMAGE=(Damage=10, Spread=2, PlusOne=25, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERPISTOL_CONVENTIONAL_BASEDAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=1, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERPISTOL_MAGNETIC_BASEDAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagXCom") -+CHOSENSNIPERPISTOL_BEAM_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") -+CHOSENSNIPERPISTOL_T4_BASEDAMAGE=(Damage=6, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERPISTOL_CONVENTIONAL_BASEDAMAGE=(Damage=2, Spread=0, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERPISTOL_MAGNETIC_BASEDAMAGE=(Damage=3, Spread=0, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagXCom") ++CHOSENSNIPERPISTOL_BEAM_BASEDAMAGE=(Damage=4, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") ++CHOSENSNIPERPISTOL_T4_BASEDAMAGE=(Damage=6, Spread=1, PlusOne=50, Crit=4, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") +CHOSENSNIPERPISTOL_XCOM_BASEDAMAGE=(Damage=5, Spread=1, PlusOne=0, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") @@ -2187,52 +2181,9 @@ CHOSENRIFLE_BEAM_IENVIRONMENTDAMAGE=2 CHOSENRIFLE_T4_IENVIRONMENTDAMAGE=3 CHOSENRIFLE_XCOM_IENVIRONMENTDAMAGE=3 -CHOSENRIFLE_XCOM_AIM=0 +CHOSENRIFLE_XCOM_AIM=10 CHOSENRIFLE_XCOM_CRITCHANCE=0 - -[LW_Overhaul.X2Item_ChosenWeapons] - -CHOSENSHOTGUN_T5_BASEDAMAGE=(Damage=10, Spread=0, PlusOne=0, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") - -CHOSENSHOTGUN_T5_AIM=0 -CHOSENSHOTGUN_T5_CRITCHANCE=25 -CHOSENSHOTGUN_T5_ICLIPSIZE=4 -CHOSENSHOTGUN_T5_ISOUNDRANGE=30 -CHOSENSHOTGUN_T5_IENVIRONMENTDAMAGE=3 - -CHOSENSWORD_T5_BASEDAMAGE=(Damage=7, Spread=0, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Melee") -CHOSENSWORD_T5_EXTRADAMAGE=(Damage=7, Spread=0, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag = "PartingSilk", DamageType="Melee") - -CHOSENSWORD_T5_AIM=100 -CHOSENSWORD_T5_CRITCHANCE=150 -CHOSENSWORD_T5_ISOUNDRANGE=8 -CHOSENSWORD_T5_IENVIRONMENTDAMAGE=1 - -CHOSENRIFLE_T5_BASEDAMAGE=(Damage=10, Spread=2, PlusOne=0, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") - -CHOSENRIFLE_T5_AIM=0 -CHOSENRIFLE_T5_CRITCHANCE=0 -CHOSENRIFLE_T5_ICLIPSIZE=4 -CHOSENRIFLE_T5_ISOUNDRANGE=27 -CHOSENRIFLE_T5_IENVIRONMENTDAMAGE=3 - -CHOSENSNIPERRIFLE_T5_BASEDAMAGE=(Damage=10, Spread=2, PlusOne=0, Crit=5, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") - -CHOSENSNIPERRIFLE_T5_CRITCHANCE=10 -CHOSENSNIPERRIFLE_T5_ICLIPSIZE=3 -CHOSENSNIPERRIFLE_T5_ISOUNDRANGE=27 -CHOSENSNIPERRIFLE_T5_IENVIRONMENTDAMAGE=3 - -CHOSENSNIPERPISTOL_T5_BASEDAMAGE=(Damage=7, Spread=1, PlusOne=0, Crit=3, Pierce=0, Shred=0, Tag="", DamageType="Projectile_MagAdvent") - -CHOSENSNIPERPISTOL_T5_AIM=0 -CHOSENSNIPERPISTOL_T5_CRITCHANCE=0 -CHOSENSNIPERPISTOL_T5_ICLIPSIZE=99 -CHOSENSNIPERPISTOL_T5_ISOUNDRANGE=15 -CHOSENSNIPERPISTOL_T5_IENVIRONMENTDAMAGE=3 - - [LW_WeaponsAndArmor.X2Item_FactionWeapons] ;Bukllpup stats BULLPUP_LASER_BASEDAMAGE=(Damage=4, Spread=1, PlusOne=75, Crit=2, Pierce=0, Shred=0, Tag="", DamageType="Projectile_BeamXCom") @@ -2412,7 +2363,7 @@ TEMPLAR_PISTOL_RANGE[24] = -90 TEMPLAR_PISTOL_RANGE[25] = -100 Bullpup_Laser_ImagePath="UILibrary_LW_LaserPack.LaserSMG_Base" -Bullpup_Coil_ImagePath="UILibrary_LWOTC.InventoryArt.CoilSMG_Base" +Bullpup_Coil_ImagePath="UILibrary_LW_Overhaul.InventoryArt.CoilSMG_Base" Vektor_Laser_ImagePath="UILibrary_WolfWeaponPack.UI_Laser_Strike_Rifle" Vektor_Coil_ImagePath="UILibrary_WolfWeaponPack.UI_Coil_Strike_Rifle" @@ -2551,10 +2502,8 @@ THROWING_KNIFE_BM_BLEED_CHANCE=70 THROWING_KNIFE_BM_BLEED_DURATION=2 THROWING_KNIFE_BM_BLEED_DAMAGE=1 -[LW_WeaponsAndArmor.X2Item_Shields_LW] - -ENABLE_SHIELDS=true +[LW_WeaponsAndArmor.X2Item_Shields_LW] SHIELD_CV_BASEDAMAGE=(Damage=3, Spread=1, PlusOne=0, Crit=1, Pierce=0, Shred=0, Tag="", DamageType="Projectile_Conventional") SHIELD_CV_AIM=20 SHIELD_CV_CRITCHANCE=0 @@ -2587,4 +2536,4 @@ SHIELD_BM_NUM_UPGRADE_SLOTS=0 +SHIELD_BM_ABILITIES=OneForAll +SHIELD_BM_ABILITIES=TemplarBallisticShield_BM +SHIELD_BM_ABILITIES=TemplarBallisticShield_GenerateCover -+SHIELD_BM_ABILITIES=GreaterPadding_BM \ No newline at end of file ++SHIELD_BM_ABILITIES=GreaterPadding_BM diff --git a/LongWarOfTheChosen/Config/XComLW_Activities.ini b/LongWarOfTheChosen/Config/XComLW_Activities.ini index 192913bf2..e867a7222 100644 --- a/LongWarOfTheChosen/Config/XComLW_Activities.ini +++ b/LongWarOfTheChosen/Config/XComLW_Activities.ini @@ -7,7 +7,7 @@ AVATAR_DELAY_HOURS_PER_NET_GLOBAL_VIG=10 ; Infiltration percentage that disables negative sitreps INFILTRATION_TO_DISABLE_SIT_REPS=1.25 -CHOSEN_APPEARANCE_ALERT_MOD = -3 +CHOSEN_APPEARANCE_ALERT_MOD = -5 INFILTRATION_SIT_REPS[0]="InfilSitRep_Easy" INFILTRATION_SIT_REPS[1]="InfilSitRep_Moderate" @@ -16,7 +16,6 @@ INFILTRATION_SIT_REPS[3]="InfilSitRep_UltraHard" +INFILTRATION_SIT_REP_MISSION_FAMILIES="TroopManeuvers_LW" +INFILTRATION_SIT_REP_MISSION_FAMILIES="SupplyLineRaid_LW" -+INFILTRATION_SIT_REP_MISSION_FAMILIES="SecureUFO_LW" [LW_Overhaul.X2LWActivityDetectionCalc_Terror] +RESISTANCE_INFORMANT_DETECTION_DIVIDER[0]=10.0 @@ -447,16 +446,6 @@ BUSY_HAVENS_SLOW_VIGILANCE_DECAY=TRUE MissionImagePath="img:///UILibrary_StrategyImages.X2StrategyMap.Alert_Guerrilla_Ops" \\ ) -+MissionSettings=(MissionOrFamilyName="SupplyExtraction_LW", \\ - AlertName="eAlert_GOps", \\ - MissionSound="Geoscape_NewResistOpsMissions", \\ - EventTrigger="OnGOpsPopup", \\ - MissionUIType=eMissionUI_GuerrillaOps, \\ - OverworldMeshPath="UI_3D.Overwold_Final.GorillaOps", \\ - MissionIconPath="img:///UILibrary_StrategyImages.X2StrategyMap.MissionIcon_GOPS", \\ - MissionImagePath="img:///UILibrary_StrategyImages.X2StrategyMap.Alert_Guerrilla_Ops" \\ - ) - +MissionSettings=(MissionOrFamilyName="Rendezvous_LW", \\ AlertName="eAlert_CouncilMission", \\ MissionSound="Geoscape_NewResistOpsMissions", \\ @@ -738,20 +727,15 @@ ALIEN_BASE_DOOM_REMOVAL=1 ;The FL at which the chosen activate CHOSEN_ACTIVATE_AT_FL=3 -CHOSEN_LEVEL_FL_THRESHOLDS[0]=7 -CHOSEN_LEVEL_FL_THRESHOLDS[1]=11 -CHOSEN_LEVEL_FL_THRESHOLDS[2]=16 -CHOSEN_LEVEL_FL_THRESHOLDS[3]=20 +CHOSEN_LEVEL_FL_THRESHOLDS[0]=9 +CHOSEN_LEVEL_FL_THRESHOLDS[1]=14 +CHOSEN_LEVEL_FL_THRESHOLDS[2]=20 ;new config for COINOps strength/vigilance COINOPS_MIN_ALERT=3 COINOPS_MIN_VIGILANCE=3 -; How much knowledge about XCOM a Chosen gains when a mission -; is completed in their region -CHOSEN_KNOWLEDGE_GAIN_MISSIONS=0 - [LW_Overhaul.X2LWActivityCreation_Invasion] INVASION_MIN_ALERT_TO_LAUNCH=8 @@ -858,7 +842,7 @@ RequiredRebelMissionIncome=60.0 ; Rebels have to earn this before accumulat DiscoveryPctChancePerDayPerHundredMissionIncome=31 ; MinVigilance=4 MinAlert=4 -AlertLevelModifier=0 +AlertLevelModifier=2 MissionTree[0] = ( MissionFamilies[0]="DestroyObject_LW", \\ Duration_Hours=144, \\ DurationRand_Hours=48 \\ @@ -942,7 +926,7 @@ iPriority=25 RequiredRebelMissionIncome=100.0 DiscoveryPctChancePerDayPerHundredMissionIncome=5 ForceLevelModifier=1 -AlertLevelModifier=2 +AlertLevelModifier=1 MissionTree[0] = ( MissionFamilies[0]="Recover_LW", \\ MissionFamilies[1]="Hack_LW", \\ @@ -1113,7 +1097,6 @@ DiscoveryPctChancePerDayPerHundredMissionIncome=60 MaxAlert=12 MissionTree[0] = ( MissionFamilies[0]="SmashNGrab_LW", \\ - MissionFamilies[1]="SupplyExtraction_LW", \\ Duration_Hours=216, \\ DurationRand_Hours=96 \\ ) @@ -1123,7 +1106,7 @@ MissionTree[0] = ( MissionFamilies[0]="SmashNGrab_LW", \\ iPriority=41 MinAlert=3 MinVigilance=2 -AlertLevelModifier=2 +AlertLevelModifier=4 MissionTree[0] = ( MissionFamilies[0]="IntelRaid_LW", \\ Duration_Hours=24, \\ @@ -1135,7 +1118,7 @@ MissionTree[0] = ( MissionFamilies[0]="IntelRaid_LW", \\ iPriority=42 MinAlert=4 MinVigilance=1 -AlertLevelModifier=2 +AlertLevelModifier=3 MissionTree[0] = ( MissionFamilies[0]="SupplyConvoy_LW", \\ Duration_Hours=24, \\ @@ -1147,7 +1130,7 @@ MissionTree[0] = ( MissionFamilies[0]="SupplyConvoy_LW", \\ iPriority=43 MinAlert=4 MinVigilance=2 -AlertLevelModifier=1 +AlertLevelModifier=3 MissionTree[0] = ( MissionFamilies[0]="RecruitRaid_LW", \\ Duration_Hours=24, \\ diff --git a/LongWarOfTheChosen/Config/XComLW_Content.ini b/LongWarOfTheChosen/Config/XComLW_Content.ini index ff8b3236a..3ce366577 100644 --- a/LongWarOfTheChosen/Config/XComLW_Content.ini +++ b/LongWarOfTheChosen/Config/XComLW_Content.ini @@ -1,43 +1,43 @@ [LW_Overhaul.UIPersonnel_SquadBarracks] -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon0" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon1" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon2" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon3" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon4" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon5" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon6" -;+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon7" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon8" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon9" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon10" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon11" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon12" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon13" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon14" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon15" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon16" -;+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon17" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon18" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon19" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon20" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon21" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon22" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon23" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon24" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon25" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon26" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon27" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon28" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon29" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon30" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon31" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon32" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon33" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon34" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon35" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon36" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon37" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon38" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon39" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon40" -+SquadImagePaths="img:///UILibrary_LWOTC.SampleSquadIcons.256pxPavonisLogoCirclefinalBold" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon0" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon1" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon2" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon3" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon4" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon5" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon6" +;+SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon7" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon8" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon9" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon10" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon11" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon12" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon13" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon14" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon15" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon16" +;+SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon17" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon18" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon19" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon20" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon21" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon22" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon23" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon24" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon25" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon26" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon27" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon28" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon29" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon30" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon31" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon32" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon33" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon34" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon35" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon36" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon37" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon38" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon39" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon40" ++SquadImagePaths="img:///UILibrary_LW_Overhaul.SampleSquadIcons.256pxPavonisLogoCirclefinalBold" diff --git a/LongWarOfTheChosen/Config/XComLW_FactionBalance.ini b/LongWarOfTheChosen/Config/XComLW_FactionBalance.ini index 2fdf2f123..8fbe4354e 100644 --- a/LongWarOfTheChosen/Config/XComLW_FactionBalance.ini +++ b/LongWarOfTheChosen/Config/XComLW_FactionBalance.ini @@ -1,159 +1,154 @@ -[LW_FactionBalance.X2Effect_ParryNew] -; These values control Reflect chance on Parry specifically -; I've set them to the same as the default for regular Reflect, but you can change it if you feel like it -ParryReflectPerFocusChance=10 -ParryReflectMinFocus=2 -ParryReflectBaseChance=20 - -[LW_FactionBalance.X2Effect_DeflectNew] -; These are the original Deflect/Reflect chances, I've left them as default, but you can tinker with them here too -DeflectMinFocus=1 -DeflectBaseChance=25 -DeflectPerFocusChance=5 -ReflectMinFocus=2 -ReflectBaseChance=75 - -; By the game's default you can Parry melee and area attacks, but not Deflect them; you can change that here -bCanDeflectMelee = false -bCanDeflectArea = false - - -[LW_FactionBalance.X2Ability_SkirmisherAbilitySet_LW] -RECKONING_LW_COOLDOWN=3 -RECKONING_LW_SLASH_COOLDOWN=4 -MANUAL_OVERRIDE_COOLDOWN=4 -REFLEX_COOLDOWN=1 -SKIRMISHER_INTERRUPT_COOLDOWN=2 -BATTLEFIELD_AWARENESS_COOLDOWN=3 -[LW_FactionBalance.X2Effect_PackMaster_LW] -PACKMASTER_KIT_BONUS=1 -+EXCLUDED_GRENADE_TYPES="GhostGrenade" - -[LW_FactionBalance.X2DownloadableContentInfo_LW_FactionBalance] -REAPER_DETECTION_RANGE_REDUCTION=0.25f - -[LW_FactionBalance.X2Ability_TemplarAbilitySet_LW] -SOLACE_ACTION_POINTS=1 -SOLACE_COOLDOWN=3 -GRAZE_MIN_FOCUS=1 -GRAZE_PER_FOCUS_CHANCE=5 -MEDITATION_FOCUS_RECOVERY=1 -MEDITATION_MAX_CHARGES=1 -BONUS_REND_DAMAGE_PER_TILE=0.1667f ; if 1/3, set to .334, extra will handle round-off errors -MAX_REND_FLECHE_DAMAGE=5 -VIGILANCE_MIN_POD_SIZE=3 ; Minimum number of pod members to trigger Vigilance -TERROR_STAT_CHECK_BASE_VALUE=75 -APOTHEOSIS_COOLDOWN=5 -APOTHEOSIS_DODGE_BONUS=20 -APOTHEOSIS_MOBILITY_BONUS=2 -APOTHEOSIS_DAMAGE_MULTIPLIER=0.5 - -; LWOTC Overcharge settings: bonus per level of focus -OVERCHARGE_AIM_BONUS=10 -OVERCHARGE_CRIT_BONUS=15 - -AMPLIFY_SHOTS = 2 - -[LW_FactionBalance.X2AbilityCooldown_Grapple] -GRAPPLE_COOLDOWN=3 ; Base cooldown of the Skirmisher's grapple -PARKOUR_COOLDOWN_REDUCTION=1 ; Turns of cooldown that are subtracted if the Skrimisher has Parkour - -; NOTE: changing the above does NOT change the game's text, -; so the GTS perk will still say that it only reduces the cooldown by 1, -; and the Grapple ability will still say its cooldown is 3, -; no matter what config settings you put. - -[LW_FactionBalance.X2Ability_ReaperAbilitySet_LW] -LINGERING_DURATION=1 -LINGERING_DEFENSE=15 -LINGERING_DODGE=30 - -CRIPPLING_STRIKE_COOLDOWN=2 - -TrackingRadius=21 - -DisablingShotCooldown=5 -DisablingShotAmmoCost=1 -DisablingShotBaseStunActions=2 -DisablingShotCritStunActions=2 -DisablingShotDamagePenalty=0.5 - -PARAMEDIC_BONUS_CHARGES=2 -+AlternativeMedikitNames=NanoMedikit -+AlternativeMedikitNames=BioMedikit - -+CHEAPSHOT_ABILITYNAMES=StandardShot -+CHEAPSHOT_ABILITYNAMES=LightEmUp -+CHEAPSHOT_ABILITYNAMES=SniperStandardFire -+CHEAPSHOT_ABILITYNAMES=SoulReaper -+CHEAPSHOT_ABILITYNAMES=ChainShot -[LW_FactionBalance.X2Effect_ManualOverride_LW] -OVERRIDE_REDUCTION=3 - -[LW_FactionBalance.X2Effect_BanishHitMod] -BANISH_HIT_MOD=-20 - -[LW_FactionBalance.X2LWModTemplate_ReaperAbilities] -SHADOW_DURATION=2 -SHADOW_DETECTION_RANGE_REDUCTION=0.9f - -REMOTE_START_CHARGES=1 -REMOTE_START_DEMOLITIONIST_CHARGES=1 - -BLOOD_TRAIL_ANTIDODGE_BONUS=40 - -PALE_HORSE_BASE_CRIT=10 -PALE_HORSE_PER_KILL_CRIT=4 -PALE_HORSE_MAX_CRIT=20 ; Max crit from the per-kill bonus (does not include base crit bonus) - -STING_RUPTURE=1 ; Rupture amount inflicted by Sting - -BANISH_COOLDOWN = 3 - -DEATH_DEALER_CRIT = 25 -SHADOW_FLAT_MOB_BONUS = 3 -[LW_FactionBalance.X2LWModTemplate_SkirmisherAbilities] -WRATH_COOLDOWN=3 -JUSTICE_COOLDOWN=3 -JUSTICE_IENVIRONMENT_DAMAGE=3 -WHIPLASH_COOLDOWN=4 -WHIPLASH_ACTION_POINT_COST=1 -FULL_THROTTLE_DURATION=2 -BATTLELORD_ACTION_POINT_COST=1 -BATTLELORD_COOLDOWN=5 -COMBAT_PRESENCE_COOLDOWN = 5 -REFLEX_CRIT_DEF = 15 -TOTAL_COMBAT_BONUS_RANGE = 2 -TOTAL_COMBAT_MOBILITY = 1 -TOTAL_COMBAT_AIM = 5 -[LW_FactionBalance.X2LWModTemplate_TemplarAbilities] -FOCUS4MOBILITY=0 -FOCUS4DODGE=0 -FOCUS4RENDDAMAGE=0 - -STUNSTRIKE_STUN_DURATION=2 -STUNSTRIKE_STUN_CHANCE=100 -VOLT_TILE_RADIUS=3 -VOLT_DANGER_ZONE_BONUS_RADIUS=1 - -ARCWAVE_T1_DAMAGE=4 -ARCWAVE_T2_DAMAGE=7 -ARCWAVE_T3_DAMAGE=10 - -GHOST_COOLDOWN=5 - -[LW_FactionBalance.X2Effect_TemplarShieldCritDefense] - -CritReduction = 20 - -[LW_FactionBalance.X2LWModTemplate_FactionItems] -+WHIPLASH_CONVENTIONAL_DAMAGE=(Damage=4, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash", DamageType="Electrical") -+WHIPLASH_MAGNETIC_DAMAGE=(Damage=6, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash", DamageType="Electrical") -+WHIPLASH_BEAM_DAMAGE=(Damage=8, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash", DamageType="Electrical") - -+WHIPLASH_CONVENTIONAL_DAMAGE=(Damage=8, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash_Robotic", DamageType="Electrical") -+WHIPLASH_MAGNETIC_DAMAGE=(Damage=12, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash_Robotic", DamageType="Electrical") -+WHIPLASH_BEAM_DAMAGE=(Damage=14, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash_Robotic", DamageType="Electrical") - -[LW_FactionBalance.X2Effect_SkirmisherInterrupt_LW] -MAX_INTERRUPTS = 1 +[LW_FactionBalance.X2Effect_ParryNew] +; These values control Reflect chance on Parry specifically +; I've set them to the same as the default for regular Reflect, but you can change it if you feel like it +ParryReflectPerFocusChance=10 +ParryReflectMinFocus=2 +ParryReflectBaseChance=20 + +[LW_FactionBalance.X2Effect_DeflectNew] +; These are the original Deflect/Reflect chances, I've left them as default, but you can tinker with them here too +DeflectMinFocus=1 +DeflectBaseChance=25 +DeflectPerFocusChance=5 +ReflectMinFocus=2 +ReflectBaseChance=75 + +; By the game's default you can Parry melee and area attacks, but not Deflect them; you can change that here +bCanDeflectMelee = false +bCanDeflectArea = false + + +[LW_FactionBalance.X2Ability_SkirmisherAbilitySet_LW] +RECKONING_LW_COOLDOWN=3 +RECKONING_LW_SLASH_COOLDOWN=4 +MANUAL_OVERRIDE_COOLDOWN=4 +REFLEX_COOLDOWN=1 +SKIRMISHER_INTERRUPT_COOLDOWN=2 +BATTLEFIELD_AWARENESS_COOLDOWN=4 +[LW_FactionBalance.X2Effect_PackMaster_LW] +PACKMASTER_KIT_BONUS=1 ++EXCLUDED_GRENADE_TYPES="GhostGrenade" + +[LW_FactionBalance.X2DownloadableContentInfo_LW_FactionBalance] +REAPER_DETECTION_RANGE_REDUCTION=0.25f + +[LW_FactionBalance.X2Ability_TemplarAbilitySet_LW] +SOLACE_ACTION_POINTS=1 +SOLACE_COOLDOWN=3 +GRAZE_MIN_FOCUS=1 +GRAZE_PER_FOCUS_CHANCE=5 +MEDITATION_FOCUS_RECOVERY=1 +MEDITATION_MAX_CHARGES=1 +BONUS_REND_DAMAGE_PER_TILE=0.1667f ; if 1/3, set to .334, extra will handle round-off errors +MAX_REND_FLECHE_DAMAGE=5 +VIGILANCE_MIN_POD_SIZE=3 ; Minimum number of pod members to trigger Vigilance +TERROR_STAT_CHECK_BASE_VALUE=75 +APOTHEOSIS_COOLDOWN=5 +APOTHEOSIS_DODGE_BONUS=20 +APOTHEOSIS_MOBILITY_BONUS=2 +APOTHEOSIS_DAMAGE_MULTIPLIER=0.5 + +; LWOTC Overcharge settings: bonus per level of focus +OVERCHARGE_AIM_BONUS=5 +OVERCHARGE_CRIT_BONUS=10 + +AMPLIFY_SHOTS = 3 + +[LW_FactionBalance.X2AbilityCooldown_Grapple] +GRAPPLE_COOLDOWN=3 ; Base cooldown of the Skirmisher's grapple +PARKOUR_COOLDOWN_REDUCTION=1 ; Turns of cooldown that are subtracted if the Skrimisher has Parkour + +; NOTE: changing the above does NOT change the game's text, +; so the GTS perk will still say that it only reduces the cooldown by 1, +; and the Grapple ability will still say its cooldown is 3, +; no matter what config settings you put. + +[LW_FactionBalance.X2Ability_ReaperAbilitySet_LW] +LINGERING_DURATION=1 +LINGERING_DEFENSE=15 +LINGERING_DODGE=30 + +CRIPPLING_STRIKE_COOLDOWN=2 + +TrackingRadius=21 + +DisablingShotCooldown=5 +DisablingShotAmmoCost=1 +DisablingShotBaseStunActions=2 +DisablingShotCritStunActions=2 +DisablingShotDamagePenalty=0.5 + +PARAMEDIC_BONUS_CHARGES=2 ++AlternativeMedikitNames=NanoMedikit ++AlternativeMedikitNames=BioMedikit + ++CHEAPSHOT_ABILITYNAMES=StandardShot ++CHEAPSHOT_ABILITYNAMES=LightEmUp ++CHEAPSHOT_ABILITYNAMES=SniperStandardFire ++CHEAPSHOT_ABILITYNAMES=SoulReaper ++CHEAPSHOT_ABILITYNAMES=ChainShot +[LW_FactionBalance.X2Effect_ManualOverride_LW] +OVERRIDE_REDUCTION=3 + +[LW_FactionBalance.X2Effect_BanishHitMod] +BANISH_HIT_MOD=-15 + +[LW_FactionBalance.X2LWModTemplate_ReaperAbilities] +SHADOW_DURATION=2 +SHADOW_DETECTION_RANGE_REDUCTION=0.9f + +REMOTE_START_CHARGES=1 +REMOTE_START_DEMOLITIONIST_CHARGES=1 + +BLOOD_TRAIL_ANTIDODGE_BONUS=40 + +PALE_HORSE_BASE_CRIT=10 +PALE_HORSE_PER_KILL_CRIT=4 +PALE_HORSE_MAX_CRIT=20 ; Max crit from the per-kill bonus (does not include base crit bonus) + +STING_RUPTURE=1 ; Rupture amount inflicted by Sting + +BANISH_COOLDOWN = 2 + +DEATH_DEALER_CRIT = 25 +SHADOW_FLAT_MOB_BONUS = 3 +[LW_FactionBalance.X2LWModTemplate_SkirmisherAbilities] +WRATH_COOLDOWN=4 +JUSTICE_COOLDOWN=4 +JUSTICE_IENVIRONMENT_DAMAGE=3 +WHIPLASH_COOLDOWN=4 +WHIPLASH_ACTION_POINT_COST=1 +FULL_THROTTLE_DURATION=2 +BATTLELORD_ACTION_POINT_COST=1 +BATTLELORD_COOLDOWN=5 +COMBAT_PRESENCE_COOLDOWN = 5 +REFLEX_CRIT_DEF = 15 +TOTAL_COMBAT_BONUS_RANGE = 3 +TOTAL_COMBAT_MOBILITY = 1 +TOTAL_COMBAT_AIM = 5 +[LW_FactionBalance.X2LWModTemplate_TemplarAbilities] +FOCUS4MOBILITY=0 +FOCUS4DODGE=0 +FOCUS4RENDDAMAGE=0 + +STUNSTRIKE_STUN_DURATION=2 +STUNSTRIKE_STUN_CHANCE=100 +VOLT_TILE_RADIUS=3 +VOLT_DANGER_ZONE_BONUS_RADIUS=2 + +ARCWAVE_T1_DAMAGE=4 +ARCWAVE_T2_DAMAGE=7 +ARCWAVE_T3_DAMAGE=10 + +GHOST_COOLDOWN=5 +[LW_FactionBalance.X2LWModTemplate_FactionItems] ++WHIPLASH_CONVENTIONAL_DAMAGE=(Damage=4, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash", DamageType="Electrical") ++WHIPLASH_MAGNETIC_DAMAGE=(Damage=6, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash", DamageType="Electrical") ++WHIPLASH_BEAM_DAMAGE=(Damage=8, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash", DamageType="Electrical") + ++WHIPLASH_CONVENTIONAL_DAMAGE=(Damage=8, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash_Robotic", DamageType="Electrical") ++WHIPLASH_MAGNETIC_DAMAGE=(Damage=12, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash_Robotic", DamageType="Electrical") ++WHIPLASH_BEAM_DAMAGE=(Damage=14, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="Whiplash_Robotic", DamageType="Electrical") + +[LW_FactionBalance.X2Effect_SkirmisherInterrupt_LW] +MAX_INTERRUPTS = 1 diff --git a/LongWarOfTheChosen/Config/XComLW_InfiltrationSettings.ini b/LongWarOfTheChosen/Config/XComLW_InfiltrationSettings.ini index b16b7dec1..402ba958a 100644 --- a/LongWarOfTheChosen/Config/XComLW_InfiltrationSettings.ini +++ b/LongWarOfTheChosen/Config/XComLW_InfiltrationSettings.ini @@ -53,7 +53,7 @@ InfiltrationMissionIntroDefinition=( \\ ) [LW_Overhaul.XComGameState_LWPersistentSquad] -DefaultSquadImagePath="img:///UILibrary_LWOTC.SampleSquadIcons.SquadIcon0" +DefaultSquadImagePath="img:///UILibrary_LW_Overhaul.SampleSquadIcons.SquadIcon0" RequiredInfiltrationToLaunch=-0.0000001f diff --git a/LongWarOfTheChosen/Config/XComLW_OfficerPack.ini b/LongWarOfTheChosen/Config/XComLW_OfficerPack.ini index 5d323b23c..9ba3610e1 100644 --- a/LongWarOfTheChosen/Config/XComLW_OfficerPack.ini +++ b/LongWarOfTheChosen/Config/XComLW_OfficerPack.ini @@ -62,10 +62,10 @@ TrainingDaysForRank[7] = 12.0f ;imagepaths to rank icons -- img:/// part not part of config file LWOfficerRankIcons[0]="UILibrary_Common.rank_rookie" LWOfficerRankIcons[1]="UILibrary_LW_OfficerPack.LWOfficers_RankLieutenant_resize" -LWOfficerRankIcons[2]="UILibrary_LWOTC.LWOfficers_RankFirstLieutenant" +LWOfficerRankIcons[2]="UILibrary_LW_Overhaul.LWOfficers_RankFirstLieutenant" LWOfficerRankIcons[3]="UILibrary_LW_OfficerPack.LWOfficers_RankCaptain_resize" LWOfficerRankIcons[4]="UILibrary_LW_OfficerPack.LWOfficers_RankMajor_resize" -LWOfficerRankIcons[5]="UILibrary_LWOTC.LWOfficers_RankLieutenantColonel" +LWOfficerRankIcons[5]="UILibrary_LW_Overhaul.LWOfficers_RankLieutenantColonel" LWOfficerRankIcons[6]="UILibrary_LW_OfficerPack.LWOfficers_RankColonel_resize" LWOfficerRankIcons[7]="UILibrary_LW_OfficerPack.LWOfficers_RankFieldCommander_resize" @@ -124,11 +124,6 @@ INTERVENTION_CHARGES[7]=1 INTERVENTION_EXTRA_TURNS=2 INTERVENTION_INTEL_COST=10 -; Timer names for Intervention -+KismetTimerVariableNames = "Timer.TurnsRemaining" -+KismetTimerVariableNames = "Mission.TimerTurnsRemaining" -+KismetTimerVariableNames = "Mission.TurnsRemaining" - INCOMING_COOLDOWN=5 INCOMING_EXPLOSIVES_DR=4 AIR_CONTROLLER_EVAC_TURN_REDUCTION=2 diff --git a/LongWarOfTheChosen/Config/XComLW_Overhaul.ini b/LongWarOfTheChosen/Config/XComLW_Overhaul.ini index 1bcc9b4c1..d66e7f2ad 100644 --- a/LongWarOfTheChosen/Config/XComLW_Overhaul.ini +++ b/LongWarOfTheChosen/Config/XComLW_Overhaul.ini @@ -39,7 +39,7 @@ DLCIdentifier="LongWarOfTheChosen" +AdditionalDLCResources="LWZ_PerkContent_BlasterLauncher.Archetypes.Perk_Gauntlet_FireBlasterLauncherProjectile" +AdditionalDLCResources="LWZ_PerkContent_RocketProjectile.Archetypes.Perk_Gauntlet_FireRocketProjectile" -; Disable unwanted Sitreps from being rolled normally +; Sitreps +SitrepsToDisable="Surgical" +SitrepsToDisable="TheHorde" +SitrepsToDisable="StealthInsertion" @@ -117,78 +117,126 @@ ROLL_ADITIONAL_SITREPS_WITH_SPECIAL_SITREP=false [LW_Overhaul.X2DownloadableContentInfo_LongWarOfTheChosen] CHOSEN_RETRIBUTION_DURATION = 21 -ENCRYPTION_SERVER_CHANCE = 50 -+HUNTER_STRENGTHS_T1=(Strength=Predator_LW, Weight=2.0f) +; FL5 ++HUNTER_STRENGTHS_T1=(Strength=Predator_LW, Weight=1.0f) +HUNTER_STRENGTHS_T1=(Strength=ChosenBleedingRounds, Weight=1.0f) +HUNTER_STRENGTHS_T1=(Strength=BlastShield, Weight=1.0f) ++HUNTER_STRENGTHS_T1=(Strength=Overkill_LW, Weight=1.0f) +HUNTER_STRENGTHS_T1=(Strength=Executioner_LW, Weight=1.0f) +;+HUNTER_STRENGTHS_T1=(Strength=Infighter, Weight=1.0f) +HUNTER_STRENGTHS_T1=(Strength=InstantReactionTime, Weight=1.0f) ++HUNTER_STRENGTHS_T1=(Strength=MovingTarget_LW, Weight=4.0f) +HUNTER_STRENGTHS_T1=(Strength=ChosenHoloTargeting, Weight=1.0f) -+HUNTER_STRENGTHS_T1=(Strength=ChosenVenomRounds, Weight=1.0f) -+HUNTER_STRENGTHS_T1=(Strength=DamageControl, Weight=1.0f) + ; Fl10 +HUNTER_STRENGTHS_T2=(Strength=LightningHands, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=ChosenDragonRounds, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=HazmatVestBonus_LW, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=PsychoticRage_LW, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=Faceoff, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=ChosenAllSeeing, Weight=3.0f) -+HUNTER_STRENGTHS_T2=(Strength=StingGrenades, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=RuptureImmunity, Weight=1.0f) -+HUNTER_STRENGTHS_T2=(Strength=HeroSlayer_LW, Weight=1.0f) ++HUNTER_STRENGTHS_T2=(Strength=HuntersInstinct, Weight=1.0f) ++HUNTER_STRENGTHS_T2=(Strength=ChosenVenomRounds, Weight=1.0f) ++HUNTER_STRENGTHS_T2=(Strength=DamageControl, Weight=1.0f) ++HUNTER_STRENGTHS_T2=(Strength=ApexPredator_LW, Weight=1.0f) +;;Important perks From Previous tiers ++HUNTER_STRENGTHS_T2=(Strength=MovingTarget_LW, Weight=5.0f) + ;FL 15 -+HUNTER_STRENGTHS_T3=(Strength=YouCannotHide_LW, Weight=1.0f) -+HUNTER_STRENGTHS_T3=(Strength=TriggerBot, Weight=1.0f) -+HUNTER_STRENGTHS_T3=(Strength=OverBearingSuperiority_LW, Weight=1.0f) ++HUNTER_STRENGTHS_T3=(Strength=ChosenDragonRounds, Weight=8.0f) ++HUNTER_STRENGTHS_T3=(Strength=Faceoff, Weight=1.0f) ++HUNTER_STRENGTHS_T3=(Strength=Avenger_LW, Weight=2.0f) +;+HUNTER_STRENGTHS_T3=(Strength=FanFire, Weight=1.0f) ++HUNTER_STRENGTHS_T3=(Strength=YouCannotHide_LW, Weight=8.0f) ++HUNTER_STRENGTHS_T3=(Strength=PsychoticRage_LW, Weight=1.0f) ++HUNTER_STRENGTHS_T3=(Strength=HazmatVestBonus_LW, Weight=2.0f) + + +;;Important perks From Previous tiers ++HUNTER_STRENGTHS_T3=(Strength=MovingTarget_LW, Weight=8.0f) ;FL5 ++ASSASSIN_STRENGTHS_T1=(Strength=Predator_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=ChosenVenomRounds, Weight=1.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=ChosenKineticPlating, Weight=1.0f) +ASSASSIN_STRENGTHS_T1=(Strength=BlastShield, Weight=1.0f) -+ASSASSIN_STRENGTHS_T1=(Strength=DamageControl, Weight=1.0f) -+ASSASSIN_STRENGTHS_T1=(Strength=ChosenAllSeeing, Weight=1.0f) -+ASSASSIN_STRENGTHS_T1=(Strength=Sprinter, Weight=1.0f) -+ASSASSIN_STRENGTHS_T1=(Strength=InstantReactionTime, Weight=1.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=Cutthroat, Weight=1.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=ChosenHoloTargeting, Weight=1.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=Grazingfire, Weight=1.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=MovingTarget_LW, Weight=4.0f) ++ASSASSIN_STRENGTHS_T1=(Strength=Stiletto_LW, Weight=1.0f) ;FL10 ++ASSASSIN_STRENGTHS_T2=(Strength=ChosenImmuneMelee, Weight=2.0f) +ASSASSIN_STRENGTHS_T2=(Strength=PrimaryReturnFire, Weight=1.0f) -+ASSASSIN_STRENGTHS_T2=(Strength=CloseCombatSpecialist, Weight=1.0f) -+ASSASSIN_STRENGTHS_T2=(Strength=PsychoticRage_LW, Weight=1.0f) -+ASSASSIN_STRENGTHS_T2=(Strength=MistyMadness_LW, Weight=1.0f) -+ASSASSIN_STRENGTHS_T2=(Strength=HeroSlayer_LW, Weight=1.0f) -+ASSASSIN_STRENGTHS_T2=(Strength=RuptureImmunity, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=ChosenVenomRounds, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=ChosenBleedingRounds, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=OverKill_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=Concentration_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=DamageControl, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=PreciseStrike_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T2=(Strength=ChosenWatchful, Weight=1.0f) + +;;;important strengths from previous tier just in case they missed ++ASSASSIN_STRENGTHS_T2=(Strength=MovingTarget_LW, Weight=8.0f) ;FL15 -+ASSASSIN_STRENGTHS_T3=(Strength=AssassinBladestorm, Weight=1.0f) -+ASSASSIN_STRENGTHS_T3=(Strength=HazmatVestBonus_LW, Weight=1.0f) -+ASSASSIN_STRENGTHS_T3=(Strength=BloodBath_LW, Weight=1.0f) -+ASSASSIN_STRENGTHS_T3=(Strength=Impenetrable_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=CloseCombatSpecialist, Weight=8.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=Avenger_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=HuntersInstinct, Weight=1.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=Fatality_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=PsychoticRage_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=YouCannotHide_LW, Weight=1.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=AssassinBladestorm, Weight=10.0f) ++ASSASSIN_STRENGTHS_T3=(Strength=ApexPredator_LW, Weight=1.0f) +;+ASSASSIN_STRENGTHS_T3=(Strength=HazmatVestBonus_LW, Weight=2.0f) + +;;;important strengths from previous tier just in case they missed + ++ASSASSIN_STRENGTHS_T3=(Strength=MovingTarget_LW, Weight=8.0f) ;FL 5 ++WARLOCK_STRENGTHS_T1=(Strength=ChosenKineticPlating, Weight=1.0f) ++WARLOCK_STRENGTHS_T1=(Strength=Predator_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T1=(Strength=CoolUnderPressure, Weight=4.0f) +WARLOCK_STRENGTHS_T1=(Strength=BlastShield, Weight=1.0f) +WARLOCK_STRENGTHS_T1=(Strength=Infighter, Weight=1.0f) +WARLOCK_STRENGTHS_T1=(Strength=ChosenHoloTargeting, Weight=1.0f) -+WARLOCK_STRENGTHS_T1=(Strength=SkirmisherStrike, Weight=1.0f) -+WARLOCK_STRENGTHS_T1=(Strength=DamageControl, Weight=1.0f) -+WARLOCK_STRENGTHS_T1=(Strength=InstantReactionTime, Weight=1.0f) -+WARLOCK_STRENGTHS_T1=(Strength=Concentration_LW, Weight=2.0f) ++WARLOCK_STRENGTHS_T1=(Strength=OverKill_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T1=(Strength=MovingTarget_LW, Weight=4.0f) + ;FL 10 ++WARLOCK_STRENGTHS_T2=(Strength=MindScorchDangerZone, Weight=5.0f) +WARLOCK_STRENGTHS_T2=(Strength=ChosenImmuneMelee, Weight=1.0f) -+WARLOCK_STRENGTHS_T2=(Strength=ChosenAllSeeing, Weight=1.0f) -+WARLOCK_STRENGTHS_T2=(Strength=PsychoticRage_LW, Weight=1.0f) -+WARLOCK_STRENGTHS_T2=(Strength=OverBearingSuperiority_LW, Weight=1.0f) -+WARLOCK_STRENGTHS_T2=(Strength=RuptureImmunity, Weight=1.0f) -+WARLOCK_STRENGTHS_T2=(Strength=HeroSlayer_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T2=(Strength=LightemUp, Weight=1.0f) ++WARLOCK_STRENGTHS_T2=(Strength=Aggression, Weight=1.0f) ++WARLOCK_STRENGTHS_T2=(Strength=Concentration_LW, Weight=6.0f) ++WARLOCK_STRENGTHS_T2=(Strength=DamageControl, Weight=1.0f) ++WARLOCK_STRENGTHS_T2=(Strength=ApexPredator_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T2=(Strength=InstantReactionTime, Weight=1.0f) ++WARLOCK_STRENGTHS_T2=(Strength=Fatality_LW, Weight=1.0f) + +;+WARLOCK_STRENGTHS_T2=(Strength=ReadyForAnything, Weight=1.0f) +;;;important strengths from previous tier just in case they missed ++WARLOCK_STRENGTHS_T2=(Strength=MovingTarget_LW, Weight=4.0f) + ++WARLOCK_STRENGTHS_T2=(Strength=ChosenWatchful, Weight=1.0f) + ;Fl 15 -+WARLOCK_STRENGTHS_T3=(Strength=UnholyAscension_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T3=(Strength=Avenger_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T3=(Strength=MindScorchTerror, Weight=1.0f) ++WARLOCK_STRENGTHS_T3=(Strength=PrimaryReturnFire, Weight=1.0f) ++WARLOCK_STRENGTHS_T3=(Strength=OverBearingSuperiority_LW, Weight=8.0f) ++WARLOCK_STRENGTHS_T3=(Strength=Stiletto_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T3=(Strength=PsychoticRage_LW, Weight=1.0f) ++WARLOCK_STRENGTHS_T3=(Strength=YouCannotHide_LW, Weight=1.0f) +WARLOCK_STRENGTHS_T3=(Strength=HazmatVestBonus_LW, Weight=2.0f) -+WARLOCK_STRENGTHS_T3=(Strength=MindScorchDangerZone, Weight=1.0f) + +;;;important strengths from previous tier just in case they missed ++WARLOCK_STRENGTHS_T3=(Strength=MovingTarget_LW, Weight=8.0f) ; Minimum force level before the Lost can start appearing (by difficulty) MIN_FL_FOR_LOST[0]=5 @@ -215,8 +263,6 @@ RULER_POD_SIZE_ALERT_THRESHOLDS[3]=999 +PrimaryWeaponAbilities=HitandSlither +PrimaryWeaponAbilities=Burnout +PrimaryWeaponAbilities=PrimaryReturnFire -+PrimaryWeaponAbilities=TriggerBot -+PrimaryWeaponAbilities=TriggerBotShot +PrimaryWeaponAbilities=HitAndRun +PrimaryWeaponAbilities=ReadyForAnything +PrimaryWeaponAbilities=ChosenVenomRounds @@ -401,9 +447,6 @@ ShouldCleanupObsoleteUnits=true +PlotObjectiveMods=(MapName="Plot_CTY_LgObj_Civic_02", ObjectiveTags[0]="SmashNGrab_LW") +PlotObjectiveMods=(MapName="Plot_CTY_LgObj_Mixed_01", ObjectiveTags[0]="SmashNGrab_LW") +PlotObjectiveMods=(MapName="Plot_CTY_LgObj_Mixed_02", ObjectiveTags[0]="SmashNGrab_LW") -+PlotObjectiveMods=(MapName="Plot_WLD_SupplyExtract_Ravine_Ted2", ObjectiveTags[0]="SmashNGrab_LW") -+PlotObjectiveMods=(MapName="Plot_WLD_SupplyExtract_LgObj_Stream_Ted", ObjectiveTags[0]="SmashNGrab_LW") - ;; Parcels to remove from the game. @@ -509,7 +552,7 @@ TRIGGER_EMPOWER_BONUS=2; STOCK_BSC_SW_AIM_BONUS=15 STOCK_ADV_SW_AIM_BONUS=20 STOCK_SUP_SW_AIM_BONUS=25 -STOCK_EMPOWER_BONUS=5 +STOCK_EMPOWER_BONUS=2; STOCK_BSC_SUCCESS_CHANCE=25 STOCK_ADV_SUCCESS_CHANCE=30 @@ -687,7 +730,7 @@ DEMOLITION_AMMO_COST=4 SATURATION_FIRE_AMMO_COST=4 THROW_GRENADE_COOLDOWN=2 AID_PROTOCOL_COOLDOWN=2 -FUSE_COOLDOWN=0 +FUSE_COOLDOWN=5 INSANITY_MIND_CONTROL_DURATION=2 INSANITY_ENDS_TURN=FALSE RUPTURE_CRIT_BONUS=50 @@ -708,8 +751,7 @@ KILLZONE_CONE_WIDTH=12 WARLOCKPSIM1_BASEDAMAGE = (Damage=1, Spread = 0, PlusOne = 0, Crit = 0, Pierce = 99, Tag = "", DamageType="Electrical") WARLOCKPSIM2_BASEDAMAGE = (Damage=2, Spread = 0, PlusOne = 0, Crit = 0, Pierce = 99, Tag = "", DamageType="Electrical") WARLOCKPSIM3_BASEDAMAGE = (Damage=4, Spread = 0, PlusOne = 0, Crit = 0, Pierce = 99, Tag = "", DamageType="Electrical") -WARLOCKPSIM4_BASEDAMAGE = (Damage=5, Spread = 0, PlusOne = 50, Crit = 0, Pierce = 99, Tag = "", DamageType="Electrical") -WARLOCKPSIM5_BASEDAMAGE = (Damage=7, Spread = 0, PlusOne = 0, Crit = 0, Pierce = 99, Tag = "", DamageType="Electrical") +WARLOCKPSIM4_BASEDAMAGE = (Damage=7, Spread = 0, PlusOne = 0, Crit = 0, Pierce = 99, Tag = "", DamageType="Electrical") ; This setting means you won't recover corpses from aliens when you kill them with explosives (unless you have needle grenades ability) ; Note that Codex and Avatar are not affected by this setting -- you always recover their remains regardless of how they were killed or if you evac the mission @@ -780,11 +822,11 @@ INSTANT_BUILD_TIMES=TRUE +ItemTable=(ItemTemplateName="Pistol_MG", Slots=0, Starting=false, Infinite=false, Buildable=true, RequiredTech1="MagnetizedWeapons", RequiredTech2="", SupplyCost=10, AlloyCost=1, CrystalCost=1, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=15, RequiredEngineeringScore=20, Tier = 155, Weight=1, PointsToComplete=100) +ItemTable=(ItemTemplateName="TLE_Pistol_MG", Slots=0, Starting=false, Infinite=false, Buildable=false, RequiredTech1="MagnetizedWeapons", RequiredTech2="", SupplyCost=10, AlloyCost=1, CrystalCost=1, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=15, RequiredEngineeringScore=20, Tier = 155, Weight=1, PointsToComplete=100) -+ItemTable=(ItemTemplateName="AssaultRifle_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=50, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 170, PointsToComplete=200, InventoryImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_AssaultRifle") -+ItemTable=(ItemTemplateName="Cannon_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_Cannon") -+ItemTable=(ItemTemplateName="Shotgun_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_Shotgun") -+ItemTable=(ItemTemplateName="SniperRifle_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_SniperRifle") -+ItemTable=(ItemTemplateName="SMG_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=55, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_SMG") ++ItemTable=(ItemTemplateName="AssaultRifle_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=50, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 170, PointsToComplete=200, InventoryImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_AssaultRifle") ++ItemTable=(ItemTemplateName="Cannon_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_Cannon") ++ItemTable=(ItemTemplateName="Shotgun_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_Shotgun") ++ItemTable=(ItemTemplateName="SniperRifle_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_SniperRifle") ++ItemTable=(ItemTemplateName="SMG_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=55, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_SMG") +ItemTable=(ItemTemplateName="LWPistol_CG", Slots=0, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=30, AlloyCost=2, CrystalCost=3, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=20, RequiredEngineeringScore=30, Tier = 165, Weight=1, PointsToComplete=100) +ItemTable=(ItemTemplateName="SparkRifle_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///EW_MEC_Weapons.UI.PPC") @@ -941,7 +983,7 @@ INSTANT_BUILD_TIMES=TRUE +ItemTable=(ItemTemplateName="ThrowingKnife_MG_Secondary", Slots=0, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AutopsyAdventStunLancer", RequiredTech2="", SupplyCost=25, AlloyCost=2, CrystalCost=2, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=20, RequiredEngineeringScore=20, Tier = 150, PointsToComplete=100, InventoryImage="img:///CombatKnifeMod.UI.UI_Kunai_MG") ;Coil -+ItemTable=(ItemTemplateName="Bullpup_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=55, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_SMG") ++ItemTable=(ItemTemplateName="Bullpup_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="Coilguns", RequiredTech2="", SupplyCost=55, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_SMG") +ItemTable=(ItemTemplateName="Vektor_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_WolfWeaponPack.Inv_Coil_Strike_Rifle") +ItemTable=(ItemTemplateName="Vektor_CG", Slots=3, Starting=false, Infinite=false, Buildable=true, RequiredTech1="AdvancedCoilguns", RequiredTech2="", SupplyCost=60, AlloyCost=3, CrystalCost=5, CoreCost=0, SpecialItemTemplateName="", SpecialItemCost=0, TradingPostValue=25, RequiredEngineeringScore=30, Tier = 169, PointsToComplete=200, InventoryImage="img:///UILibrary_WolfWeaponPack.Inv_Coil_Strike_Rifle") @@ -1569,16 +1611,6 @@ AMBUSH_MISSION_REGION_ALERT_LEVEL=2 +TURN_COUNT_TO_CAVALRY_ALL_CASES_MOD[2]=-4 +TURN_COUNT_TO_CAVALRY_ALL_CASES_MOD[3]=-6 -; Global Reinforcement bucket fill value divisor. 1.0f is default -; values over 1.0f will reduce bucket fill rate, values below 1.0f will increase bucket fill rate; -; Example: 2.0f will cut RNF rate in half. - -REINFORCEMENT_BUCKET_FILL_MODIFIER = 1.0f - -; Reinforcement bucket fill divisor for when Beta Strike is on. 2.0 is default, cuts RNF rate in half. - -BETA_STRIKE_RNF_MOD = 2.0f - [LW_Overhaul.SeqAct_LWCallReinforcements] ; Reinforcement encounter schedules. Each schedule can be given a name and a list of encounters. Each reinforcement in a mission will pick the next encounter in the list. If ; you get to the end of the list, it will just keep spawning the final encounter over and over. The 'Default' schedule is used by default unless a mission specifies a different @@ -1605,17 +1637,17 @@ BETA_STRIKE_RNF_MOD = 2.0f +ReinforcementList=( \\ ScheduleName=Defend_LW, \\ EncounterList[1]=ADVx2_RNFStandard_LW, \\ - EncounterList[2]=OPNx2_WithTerror_LW, \\ - EncounterList[3]=ADVx3_RNFStandard_LW, \\ - EncounterList[4]=TerrorBucketx4_LW, \\ - EncounterList[5]=ADVx5_RNFStandard_LW, \\ - EncounterList[6]=TerrorBucketx6_LW, \\ - EncounterList[7]=OPNx6_Standard_LW, \\ - EncounterList[8]=ADVx6_RNFStandard_LW, \\ - EncounterList[9]=TerrorBucketx7_LW, \\ - EncounterList[10]=TerrorBucketx7_LW, \\ - EncounterList[11]=OPNx8_Standard_LW, \\ - EncounterList[12]=TerrorBucketx8_LW, \\ + EncounterList[2]=OPNx3_WithTerror_LW, \\ + EncounterList[3]=ADVx4_RNFStandard_LW, \\ + EncounterList[4]=TerrorBucketx5_LW, \\ + EncounterList[5]=ADVx6_RNFStandard_LW, \\ + EncounterList[6]=TerrorBucketx7_LW, \\ + EncounterList[7]=OPNx7_Standard_LW, \\ + EncounterList[8]=ADVx7_RNFStandard_LW, \\ + EncounterList[9]=TerrorBucketx8_LW, \\ + EncounterList[10]=TerrorBucketx8_LW, \\ + EncounterList[11]=OPNx10_Standard_LW, \\ + EncounterList[12]=TerrorBucketx10_LW, \\ EncounterList[13]=OPNx10_WithTerror_LW, \\ ) @@ -1802,9 +1834,7 @@ SCANNING_PROTOCOL_INITIAL_CHARGES=2 MIND_SCORCH_RADIUS=3 MIND_SCORCH_BURNING_BASE_DAMAGE=2 MIND_SCORCH_BURNING_DAMAGE_SPREAD=1 -MIND_SCORCH_BURN_CHANCE=40 - -SUSTAIN_WOUND_HP_REDUCTTION = 2 +MIND_SCORCH_BURN_CHANCE=70 CHOSEN_REGENERATION_HEAL_VALUE_PCT=0.16f @@ -1821,9 +1851,7 @@ CHOSEN_REGENERATION_HEAL_VALUE_PCT=0.16f ; A list of multi-shot abilities that should be patched to fix a ; performance issue +MULTI_SHOT_ABILITIES=(AbilityName="RapidFire", FollowUpAbilityNames[0]="RapidFire2") -+MULTI_SHOT_ABILITIES=(AbilityName="RapidFireSnapShot", FollowUpAbilityNames[0]="RapidFireSnapShot2") +MULTI_SHOT_ABILITIES=(AbilityName="ChainShot", FollowUpAbilityNames[0]="ChainShot2") -+MULTI_SHOT_ABILITIES=(AbilityName="ChainShotSnapShot", FollowUpAbilityNames[0]="ChainShotSnapShot2") +MULTI_SHOT_ABILITIES=(AbilityName="CyclicFire", FollowUpAbilityNames[0]="CyclicFire2", FollowUpAbilityNames[1]="CyclicFire3") [LW_Overhaul.X2LWCovertActionsModTemplate] @@ -1932,17 +1960,6 @@ DEFAULT_MISSION_EXPERIENCE_WEIGHT=5.7f ; out at the end of missions ; CLASSES_INELIGIBLE_FOR_MISSION_XP="Spark" -[LW_Overhaul.X2EventListener_ChosenEndOfMonth] -; Chosen Knowledge per month gain settings for LW config -; NOTE: these values are in addition to the guaranteed knowledge gain per month in XComGameData.ini, set on [XComGame.XComGameState_AdventChosen] - -;knowledge gains for the starting chosen -+STARTING_CHOSEN_KNOWLEDGE_GAIN=9 - -;values randomly assigned to the other chosen. Make sure there are 2 values here. -+CHOSEN_KNOWLEDGE_GAINS=8 -+CHOSEN_KNOWLEDGE_GAINS=7 - [LW_Overhaul.X2EventListener_Reinforcements] LISTENER_PRIORITY=-1 ; Use default listener priority (LWListenerManager) diff --git a/LongWarOfTheChosen/Config/XComLW_SoldierSkills.ini b/LongWarOfTheChosen/Config/XComLW_SoldierSkills.ini index bb7a6413d..ab36fb4e0 100644 --- a/LongWarOfTheChosen/Config/XComLW_SoldierSkills.ini +++ b/LongWarOfTheChosen/Config/XComLW_SoldierSkills.ini @@ -65,7 +65,7 @@ COMBAT_FITNESS_MOBILITY=1 COMBAT_FITNESS_DODGE=4 COMBAT_FITNESS_WILL=4 COMBAT_FITNESS_DEFENSE=0 -FORTIFY_COOLDOWN=4 +FORTIFY_COOLDOWN=5 FORTIFY_DEFENSE=20 SPRINTER_MOBILITY=1 @@ -143,7 +143,7 @@ BURNOUT_RADIUS=1.5 FIRESTORM_NUM_CHARGES=1 FIRESTORM_RADIUS_METERS=8 FIRESTORM_DAMAGE_BONUS=2 -FIRESTORM_ENV_DAMAGE=20 +FIRESTORM_ENV_DAMAGE=10 FIRESTORM_HIGH_PRESSURE_CHARGES=0 SHOCK_AND_AWE_BONUS_CHARGES=1 JAVELIN_ROCKETS_BONUS_RANGE_TILES=6 @@ -152,15 +152,9 @@ BUNKER_BUSTER_RADIUS_METERS=8.0 BUNKER_BUSTER_ENV_DAMAGE=250 FIRE_AND_STEEL_DAMAGE_BONUS=1 CONCUSSION_ROCKET_RADIUS_TILES=5 - -USE_CONCUSSION_ROCKET_WILL_CALCS=false CONCUSSION_ROCKET_TARGET_WILL_MALUS_STUN=20 CONCUSSION_ROCKET_TARGET_WILL_MALUS_DISORIENT=100 - -CONCUSSION_ROCKET_STUN_CHANCE=20 -ENABLE_CONCUSSION_ROCKET_SMOKE=false - -CONCUSSION_ROCKET_DAMAGE_VALUE=(Damage=2, Spread=0, PlusOne=0, Crit=0, Pierce=0, Shred=0, Tag="", DamageType="Explosion") +CONCUSSION_ROCKET_DAMAGE_VALUE=(Damage=2, Spread=1, PlusOne=0, Crit=1, Pierce=0, Shred=0, Tag="", DamageType="Explosion") CONCUSSION_ROCKET_ENV_DAMAGE=5 MOVEMENT_SCATTER_AIM_MODIFIER=-30 MOVEMENT_SCATTER_TILE_MODIFIER=2 @@ -261,7 +255,7 @@ SOULSTORM_CHARGES = 0 SOULSTORM_CAN_BE_USED_WHILE_DISORIENTED = false SOULSTORM_CAN_BE_USED_WHILE_BURNING = false SOULSTORM_CAST_RANGE_TILES = 1 -SOULSTORM_CAST_RADIUS_METERS = 8 +SOULSTORM_CAST_RADIUS_METERS = 7 SOULSTORM_TARGET_TILE_MUST_BE_REVEALED = true SOULSTORM_CAN_TARGET_ALLIES = true @@ -330,8 +324,8 @@ WALK_FIRE_MIN_ACTION_REQ = 1 PRECISION_SHOT_AMMO_COST=1 PRECISION_SHOT_COOLDOWN=4 PRECISION_SHOT_CRIT_BONUS=30 -CYCLIC_FIRE_COOLDOWN=3 -CYCLIC_FIRE_AIM_MALUS=15 +CYCLIC_FIRE_COOLDOWN=2 +CYCLIC_FIRE_AIM_MALUS=10 CYCLIC_FIRE_MIN_ACTION_REQ=2 CYCLIC_FIRE_SHOTS=3 CYCLIC_FIRE_AMMO=3 @@ -507,16 +501,11 @@ MAIM_DURATION = 1 SCRAP_METAL_AMMO_AMOUNT = 1 -OVERBEARING_SUPERIORITY_CRIT = 20 - -TRIGGER_BOT_DAMAGE_PENALTY = 0.35 - -MOVING_TARGET_DEFENSE = 15 +MOVING_TARGET_DEFENSE = 30 MOVING_TARGET_DODGE = 50 COMBATREADINESS_DEF = 10 COMBATREADINESS_AIM = 10 -COMBAT_READINESS_EXPLOSIVE_DR = 0.1f +COMBAT_READINESS_EFFECTS_TO_REMOVE = Maim_Immobilize @@ -559,17 +548,11 @@ IMPULSE_CRIT_BONUS = 10 FATALITY_AIM = 100 FATALITY_CRIT = 100 -FATALITY_THRESHOLD = 0.5f -CRUSADER_WOUND_HP_REDUCTTION = 6 +FATALITY_THRESHOLD = 0.35f +CRUSADER_WOUND_HP_REDUCTTION = 8 QUICKDRAW_MOBILITY_INCREASE = 1.0f - -HERO_SLAYER_DMG = 0.35 - -PSYCHOTIC_RAGE_BELOW_THRESHOLD = 51 -PSYCHOTIC_RAGE_DMG_BONUS = 35 - [LW_PerkPack_Integrated.X2Effect_HitandRun] +HNR_ABILITYNAMES=StandardShot +HNR_ABILITYNAMES=LightEmUp @@ -851,49 +834,47 @@ NULLIFY_LONG_RANGE_PENALTY_MODIFIER=0.5 ; Set to below 1 to reduce the impact o [LW_Overhaul.X2Ability_LW_ChosenAbilities] COOLDOWN_AMMO_DUMP=1 -COOLDOWN_SHIELD_ALLY=3 +COOLDOWN_SHIELD_ALLY=2 MSTERROR_STAT_CHECK_BASE_VALUE=50 KIDNAP_COOLDOWN=1 SHIELDALLYM1_SHIELD=4 SHIELDALLYM2_SHIELD=6 -SHIELDALLYM3_SHIELD=9 -SHIELDALLYM4_SHIELD=12 -SHIELDALLYM5_SHIELD=15 +SHIELDALLYM3_SHIELD=8 +SHIELDALLYM4_SHIELD=15 + KIDNAP_ELIGIBLE_CHARTYPES[0]=Soldier KIDNAP_ELIGIBLE_CHARTYPES[1]=ReaperSoldier KIDNAP_ELIGIBLE_CHARTYPES[2]=SkirmisherSoldier KIDNAP_ELIGIBLE_CHARTYPES[3]=TemplarSoldier -CHOSEN_SUMMON_RNF_DATA[0]="CHSx2_LW" -CHOSEN_SUMMON_RNF_DATA[1]="CHSx2_LW" -CHOSEN_SUMMON_RNF_DATA[2]="CHSx2_LW" -CHOSEN_SUMMON_RNF_DATA[3]="CHSx2_LW" -CHOSEN_SUMMON_RNF_DATA[4]="CHSx2_LW" -CHOSEN_SUMMON_RNF_DATA[5]="CHSx2_LW" -CHOSEN_SUMMON_RNF_DATA[6]="CHSx3_LW" -CHOSEN_SUMMON_RNF_DATA[7]="CHSx3_LW" -CHOSEN_SUMMON_RNF_DATA[8]="CHSx3_LW" -CHOSEN_SUMMON_RNF_DATA[9]="CHSx3_LW" -CHOSEN_SUMMON_RNF_DATA[10]="CHSx3_LW" -CHOSEN_SUMMON_RNF_DATA[11]="CHSx3_LW" -CHOSEN_SUMMON_RNF_DATA[12]="CHSx4_LW" -CHOSEN_SUMMON_RNF_DATA[13]="CHSx4_LW" -CHOSEN_SUMMON_RNF_DATA[14]="CHSx4_LW" -CHOSEN_SUMMON_RNF_DATA[15]="CHSx5_LW" -CHOSEN_SUMMON_RNF_DATA[16]="CHSx5_LW" -CHOSEN_SUMMON_RNF_DATA[17]="CHSx5_LW" -CHOSEN_SUMMON_RNF_DATA[18]="CHSx6_LW" +CHOSEN_SUMMON_RNF_DATA[0]="CHSx3_LW" +CHOSEN_SUMMON_RNF_DATA[1]="CHSx3_LW" +CHOSEN_SUMMON_RNF_DATA[2]="CHSx3_LW" +CHOSEN_SUMMON_RNF_DATA[3]="CHSx3_LW" +CHOSEN_SUMMON_RNF_DATA[4]="CHSx3_LW" +CHOSEN_SUMMON_RNF_DATA[5]="CHSx3_LW" +CHOSEN_SUMMON_RNF_DATA[6]="CHSx4_LW" +CHOSEN_SUMMON_RNF_DATA[7]="CHSx4_LW" +CHOSEN_SUMMON_RNF_DATA[8]="CHSx4_LW" +CHOSEN_SUMMON_RNF_DATA[9]="CHSx4_LW" +CHOSEN_SUMMON_RNF_DATA[10]="CHSx4_LW" +CHOSEN_SUMMON_RNF_DATA[11]="CHSx4_LW" +CHOSEN_SUMMON_RNF_DATA[12]="CHSx5_LW" +CHOSEN_SUMMON_RNF_DATA[13]="CHSx5_LW" +CHOSEN_SUMMON_RNF_DATA[14]="CHSx5_LW" +CHOSEN_SUMMON_RNF_DATA[15]="CHSx6_LW" +CHOSEN_SUMMON_RNF_DATA[16]="CHSx6_LW" +CHOSEN_SUMMON_RNF_DATA[17]="CHSx6_LW" +CHOSEN_SUMMON_RNF_DATA[18]="CHSx8_LW" GREATEST_CHAMPION_AIM=15 GREATEST_CHAMPION_CRIT=25 GREATEST_CHAMPION_WILL=30 GREATEST_CHAMPION_PSIOFFENSE=30 -UNHOLY_ASCENSION_MOD = 2.0 - -IMPACT_COMPENSATION_PCT_DR=0.25 -IMPACT_COMPENSATION_MAX_STACKS=4 +IMPACT_COMPENSATION_PCT_DR=0.2 +IMPACT_COMPENSATION_MAX_STACKS=3 SHIELD_ALLY_PCT_DR=0.67 @@ -920,8 +901,7 @@ DamageMultiplier=0.5f BLOODTHIRST_T1_DMG = 1 BLOODTHIRST_T2_DMG = 1 BLOODTHIRST_T3_DMG = 2 -BLOODTHIRST_T4_DMG = 2 -BLOODTHIRST_T5_DMG = 3 +BLOODTHIRST_T4_DMG = 3 [LW_Overhaul.X2Effect_Phosphorus] BONUS_CV_SHRED = 1 diff --git a/LongWarOfTheChosen/Config/XComMaps.ini b/LongWarOfTheChosen/Config/XComMaps.ini index c621ea9b5..289e16727 100644 --- a/LongWarOfTheChosen/Config/XComMaps.ini +++ b/LongWarOfTheChosen/Config/XComMaps.ini @@ -29,9 +29,9 @@ +arrMapImageDefs=(MapName="md_RemoteScienceStation_01_LW" , ImagePath="UILibrary_MissionImages.Mission_MD_RemoteScience_01_Tundra", Biome="Tundra") ; Supply Convoy -+arrMapImageDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01" , ImagePath="UILibrary_LWOTC.MissionImages.Missions_PCP_WLD_SupplyConvoy_16x64_LW_01_Arid", Biome="Arid") -+arrMapImageDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01" , ImagePath="UILibrary_LWOTC.MissionImages.Missions_PCP_WLD_SupplyConvoy_16x64_LW_01_Temp", Biome="Temperate") -+arrMapImageDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01" , ImagePath="UILibrary_LWOTC.MissionImages.Missions_PCP_WLD_SupplyConvoy_16x64_LW_01_Tundra", Biome="Tundra") ++arrMapImageDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01" , ImagePath="UILibrary_LW_Overhaul.MissionImages.Missions_PCP_WLD_SupplyConvoy_16x64_LW_01_Arid", Biome="Arid") ++arrMapImageDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01" , ImagePath="UILibrary_LW_Overhaul.MissionImages.Missions_PCP_WLD_SupplyConvoy_16x64_LW_01_Temp", Biome="Temperate") ++arrMapImageDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01" , ImagePath="UILibrary_LW_Overhaul.MissionImages.Missions_PCP_WLD_SupplyConvoy_16x64_LW_01_Tundra", Biome="Tundra") ; Jailbreak +arrMapImageDefs=(MapName="lg_PropagandaCenter_02_LW" , ImagePath="UILibrary_MissionImages.Mission_lg_PropagandaCenter_02", Biome="") diff --git a/LongWarOfTheChosen/Config/XComMissionDefs.ini b/LongWarOfTheChosen/Config/XComMissionDefs.ini index b27ced479..28e08b666 100644 --- a/LongWarOfTheChosen/Config/XComMissionDefs.ini +++ b/LongWarOfTheChosen/Config/XComMissionDefs.ini @@ -2385,7 +2385,7 @@ bCanSpawnOutsideObjectiveParcel=false, bReplaceSwapActor=True) +arrMissions=(MissionName="SupplyExtraction_LW", sType="SupplyExtraction_LW", \\ - MissionFamily="SupplyExtraction_LW", \\ + MissionFamily="SmashNGrab_LW", \\ MapNames[0]="Obj_SupplyExtraction_LW", \\ MapNames[1]="UMS_MissionCore", \\ MapNames[2]="UMS_LWMissionTimer", \\ diff --git a/LongWarOfTheChosen/Config/XComMissions.ini b/LongWarOfTheChosen/Config/XComMissions.ini index 8ea309ce3..fd5d76893 100644 --- a/LongWarOfTheChosen/Config/XComMissions.ini +++ b/LongWarOfTheChosen/Config/XComMissions.ini @@ -54,10 +54,6 @@ ; when you open the cell. +ProxyRewardUnitMappings=(OriginalTemplate="FacelessRebel",ProxyTemplate="Rebel") -ChosenSpawnTagToEncounterID[12]=(EncounterID="CHOSENx1_AssassinM5", SpawningTag="Chosen_AssassinActiveM5") -ChosenSpawnTagToEncounterID[13]=(EncounterID="CHOSENx1_WarlockM5", SpawningTag="Chosen_WarlockActiveM5") -ChosenSpawnTagToEncounterID[14]=(EncounterID="CHOSENx1_SniperM5", SpawningTag="Chosen_SniperActiveM5") - [HackWorkstation] ; Prevent aliens from hunting XCOM after objective has been hacked because it's ; cheesy having the aliens know exactly where you are. @@ -123,14 +119,6 @@ BaseTimerLength_Commander=12 BaseTimerLength_Legend=12 [SupplyExtraction] -;Reminder to me to check base game XComMissions.ini for more crate race settings - -; Note that you don't always get this number, if the crate spawning system can't find a legal spot it doesn't place a crate -NumberOfCrates_Rookie=12 -NumberOfCrates_Veteran=12 -NumberOfCrates_Commander=12 -NumberOfCrates_Legend=12 - ; Controls the number of crates the player must recover to qualify as mission success NumberOfCratesRequired_Rookie=4 NumberOfCratesRequired_Veteran=4 diff --git a/LongWarOfTheChosen/Config/XComPCPs.ini b/LongWarOfTheChosen/Config/XComPCPs.ini index 028a5332c..5ef432482 100644 --- a/LongWarOfTheChosen/Config/XComPCPs.ini +++ b/LongWarOfTheChosen/Config/XComPCPs.ini @@ -1,22 +1,3 @@ [XComGame.XComPlotCoverParcelManager] +arrAllPCPDefs=(MapName="WLD_SupplyConvoy_16x64_LW_01", arrPlotTypes[0]="Wilderness", strPCPType="AdventConvoy", strTurnType="SupplyLineRaid", iWidth=16, iLength=64, ObjectiveTags[0]="SupplyConvoy_LW") -; remove the IED-infested bridge plots and swap it with another --arrAllPCPDefs=(MapName="RFT_Walkway_06x06_Skybridge_01", arrPlotTypes[0]="Rooftops", \\ - strPCPType="Walkway", strTurnType="Optional", iWidth=6, iLength=6) - --arrAllPCPDefs=(MapName="RFT_Walkway_06x06_Skybridge_01", arrPlotTypes[0]="Rooftops", \\ - strPCPType="Walkway", strTurnType="Mandatory", iWidth=6, iLength=6) - --arrAllPCPDefs=(MapName="RFT_Walkway_06x06_Skybridge_01", arrPlotTypes[0]="Rooftops", strPCPType="Walkway", strTurnType="Optional", iWidth=6, iLength=6) - --arrAllPCPDefs=(MapName="RFT_Walkway_06x06_Skybridge_01", arrPlotTypes[0]="Rooftops", strPCPType="Walkway", strTurnType="Mandatory", iWidth=6, iLength=6) - -+arrAllPCPDefs=(MapName="RFT_Walkway_06x06_Skybridge_01_fixed", arrPlotTypes[0]="Rooftops", \\ - strPCPType="Walkway", strTurnType="Optional", iWidth=6, iLength=6) - -+arrAllPCPDefs=(MapName="RFT_Walkway_06x06_Skybridge_01_fixed", arrPlotTypes[0]="Rooftops", \\ - strPCPType="Walkway", strTurnType="Mandatory", iWidth=6, iLength=6) - - -; fixed plot name: RFT_Walkway_06x06_Skybridge_01_fixed \ No newline at end of file diff --git a/LongWarOfTheChosen/Config/XComParcels.ini b/LongWarOfTheChosen/Config/XComParcels.ini index 927134b24..c2e07859e 100644 --- a/LongWarOfTheChosen/Config/XComParcels.ini +++ b/LongWarOfTheChosen/Config/XComParcels.ini @@ -47,10 +47,6 @@ arrAllParcelDefinitions=(MapName="md_ShootingRange_01_LW", eSize=eParcelSizeType +arrAllParcelDefinitions=(MapName="md_Boardroom_01_LW", eSize=eParcelSizeType_Medium, arrPlotTypes[0]=(strPlotType="Rooftops"), eFacing=EParcelFacingType_N, arrZoneTypes[0]="Boardroom") +arrAllParcelDefinitions=(MapName="md_Studio_01_LW", eSize=eParcelSizeType_Medium, arrPlotTypes[0]=(strPlotType="Rooftops"), eFacing=EParcelFacingType_N, arrZoneTypes[0]="Studio") -; modified rooftop parcels for network tower missions -+arrAllParcelDefinitions=(MapName="md_Studio_02_LW", eSize=eParcelSizeType_Medium, arrPlotTypes[0]=(strPlotType="Rooftops"), eFacing=EParcelFacingType_N, arrZoneTypes[0]="Studio_mid") -+arrAllParcelDefinitions=(MapName="md_LandingPad_01_LW", eSize=eParcelSizeType_Medium, arrPlotTypes[0]=(strPlotType="Rooftops"), eFacing=EParcelFacingType_N, arrZoneTypes[0]="Open_mid") - ; Parcels for Smash 'n' Grab +arrAllParcelDefinitions=(MapName="lg_Advent_Recruitment_01_LW", eSize=eParcelSizeType_Large, arrPlotTypes[0]=(strPlotType="SmallTown"), eFacing=EParcelFacingType_S, ObjectiveTags[0]="SmashNGrab_LW", bAllowNonObjectiveOverride=false) +arrAllParcelDefinitions=(MapName="lg_RemoteScienceStation_01_SG_LW", eSize=eParcelSizeType_Large, arrPlotTypes[0]=(strPlotType="Wilderness"), ObjectiveTags[0]="SmashNGrab_LW", bAllowNonObjectiveOverride=false) diff --git a/LongWarOfTheChosen/Config/XComPlots.ini b/LongWarOfTheChosen/Config/XComPlots.ini index b73f359bf..d3bdb3bcd 100644 --- a/LongWarOfTheChosen/Config/XComPlots.ini +++ b/LongWarOfTheChosen/Config/XComPlots.ini @@ -40,11 +40,6 @@ +arrPlots=(MapName="Plot_RFT_01_LW", strType="Rooftops", ObjectiveTags[0]="AssaultNetworkTower_LW") +arrPlots=(MapName="Plot_RFT_02_LW", strType="Rooftops", ObjectiveTags[0]="AssaultNetworkTower_LW") -; new network tower plots -+arrPlots=(MapName="Plot_RFT_03_LW", strType="Rooftops", ObjectiveTags[0]="AssaultNetworkTower_LW") -+arrPlots=(MapName="Plot_RFT_04_LW", strType="Rooftops", ObjectiveTags[0]="AssaultNetworkTower_LW") -+arrPlots=(MapName="Plot_RFT_05_LW", strType="Rooftops", ObjectiveTags[0]="AssaultNetworkTower_LW") - ; New haven maps for rendezvous missions and covert escapes (CA ambush missions) +arrPlots=(MapName="Plot_RVS_Highway_LgObj_01_LW", strType="Wilderness", ValidBiomes[0]="Temperate", ValidBiomes[1]="Arid", ValidBiomes[2]="Tundra", ObjectiveTags[0]="Rendezvous", ObjectiveTags[1]="CovertEscape_NonPCP") @@ -77,11 +72,8 @@ ; new Supply Extraction plots +arrPlots=(MapName="Plot_WLD_SupplyExtract_Ravine_Ted", strType="Wilderness", ObjectiveTags[0]="SupplyExtraction", ObjectiveTags[1]="LargePlot") -+arrPlots=(MapName="Plot_WLD_SupplyExtract_Ravine_Ted2", strType="Wilderness", ObjectiveTags[0]="SupplyExtraction", ObjectiveTags[1]="LargePlot") +arrPlots=(MapName="Plot_WLD_SupplyExtract_LgObj_Stream_Ted", strType="Wilderness", ObjectiveTags[0]="SupplyExtraction", ObjectiveTags[1]="LargePlot") -+arrPlots=(MapName="Plot_ABN_SupplyExtract_Waterfront2_Ted", strType="Abandoned", ObjectiveTags[0]="SupplyExtraction") - ; SMALLTOWN Plots ; Large Objective Parcel Plots +arrPlots=(MapName="Plot_TWN_Neigh_LgObj_01", strType="SmallTown", \\ @@ -113,9 +105,3 @@ ObjectiveTags[0]="CityCenter", ObjectiveTags[1]="LargePlot", ObjectiveTags[2]="Vehicle") +arrPlots=(MapName="Plot_CTY_LgObj_Mixed_02", strType="CityCenter", \\ ObjectiveTags[0]="CityCenter", ObjectiveTags[1]="LargePlot") - -; flipped extract plots -+arrPlots=(MapName="Plot_CTY_Extract_LgObj_Park_2", strType="CityCenter", \\ - ObjectiveTags[0]="CityCenter", ObjectiveTags[1]="Extract") -+arrPlots=(MapName="Plot_CTY_Extract_LgObj_Plaza_2", strType="CityCenter", \\ - ObjectiveTags[0]="CityCenter", ObjectiveTags[1]="Extract") \ No newline at end of file diff --git a/LongWarOfTheChosen/Config/XComStrategyTuning.ini b/LongWarOfTheChosen/Config/XComStrategyTuning.ini deleted file mode 100644 index e2d5158e0..000000000 --- a/LongWarOfTheChosen/Config/XComStrategyTuning.ini +++ /dev/null @@ -1,232 +0,0 @@ -[ExperimentalWeapons_Diff_0 X2TechTemplate] -PointsToComplete=1000 - -[ExperimentalWeapons_Diff_1 X2TechTemplate] -PointsToComplete=1000 - -[ExperimentalWeapons_Diff_2 X2TechTemplate] -PointsToComplete=1000 - -[ExperimentalWeapons_Diff_3 X2TechTemplate] -PointsToComplete=1000 - -[AutopsyViperKing_Diff_3 X2TechTemplate] -PointsToComplete=3000 - -[AutopsyBerserkerQueen_Diff_3 X2TechTemplate] -PointsToComplete=4000 - -[AutopsyArchonKing_Diff_3 X2TechTemplate] -PointsToComplete=5200 - -[SerpentSuit_Diff_3 X2TechTemplate] -PointsToComplete=1000 -Cost=(ResourceCosts[0]=(ItemTemplateName="AlienAlloy", Quantity=10), ResourceCosts[1]=(ItemTemplateName="EleriumDust", Quantity=10), ArtifactCosts[0]=(ItemTemplateName="EleriumCore", Quantity=1)) - -[RAGESuit_Diff_3 X2TechTemplate] -PointsToComplete=1000 -Cost=(ResourceCosts[0]=(ItemTemplateName="AlienAlloy", Quantity=10), ResourceCosts[1]=(ItemTemplateName="EleriumDust", Quantity=10), ArtifactCosts[0]=(ItemTemplateName="EleriumCore", Quantity=1)) - -[IcarusArmor_Diff_3 X2TechTemplate] -PointsToComplete=1750 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=125), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=20), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=30), ArtifactCosts[0]=(ItemTemplateName="EleriumCore", Quantity=1)) - -[BoltCaster_Diff_0 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=45)) - -[BoltCaster_Diff_1 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=45)) - -[BoltCaster_Diff_2 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=45)) - -[BoltCaster_Diff_3 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=45)) - -[HuntersAxe_Diff_0 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40)) - -[HuntersAxe_Diff_1 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40)) - -[HuntersAxe_Diff_2 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40)) - -[HuntersAxe_Diff_3 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40)) - -[Shadowkeeper_Diff_0 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[Shadowkeeper_Diff_1 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[Shadowkeeper_Diff_2 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[Shadowkeeper_Diff_3 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[FrostBomb_Diff_0 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[FrostBomb_Diff_1 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[FrostBomb_Diff_2 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - -[FrostBomb_Diff_3 X2TechTemplate] -PointsToComplete=210 -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=35)) - - - -[HeavyAlienArmorMk2_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=100), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=20), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=10)) - -[LightAlienArmorMk2_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=100), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=15), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=15)) - -; bolt caster - -[HunterRifle_CV_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterRifle_CV_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterRifle_CV_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterRifle_CV_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterRifle_MG_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterRifle_MG_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterRifle_MG_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterRifle_MG_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterRifle_BM_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=75), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterRifle_BM_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=75), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterRifle_BM_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=75), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterRifle_BM_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=75), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -; shadowkeeper - -[HunterPistol_CV_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterPistol_CV_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterPistol_CV_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterPistol_CV_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=20)) - -[HunterPistol_MG_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterPistol_MG_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterPistol_MG_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterPistol_MG_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=40), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterPistol_BM_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=60), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterPistol_BM_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=60), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterPistol_BM_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=60), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterPistol_BM_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=60), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -; hunter axe - -[HunterAxe_CV_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[HunterAxe_CV_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[HunterAxe_CV_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[HunterAxe_CV_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[HunterAxe_MG_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterAxe_MG_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterAxe_MG_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterAxe_MG_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5)) - -[HunterAxe_BM_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=50), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterAxe_BM_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=50), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterAxe_BM_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=50), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -[HunterAxe_BM_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=50), ResourceCosts[1]=(ItemTemplateName="AlienAlloy", Quantity=5), ResourceCosts[2]=(ItemTemplateName="EleriumDust", Quantity=5)) - -; frost bomb - -[Frostbomb_Schematic_Diff_0 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[Frostbomb_Schematic_Diff_1 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[Frostbomb_Schematic_Diff_2 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) - -[Frostbomb_Schematic_Diff_3 X2SchematicTemplate] -Cost=(ResourceCosts[0]=(ItemTemplateName="Supplies", Quantity=30)) diff --git a/LongWarOfTheChosen/Config/XComWOTC_DisplayHitChance_MCMDefaults.ini b/LongWarOfTheChosen/Config/XComWOTC_DisplayHitChance_MCMDefaults.ini deleted file mode 100644 index edf79d18b..000000000 --- a/LongWarOfTheChosen/Config/XComWOTC_DisplayHitChance_MCMDefaults.ini +++ /dev/null @@ -1,2 +0,0 @@ -[WOTC_DisplayHitChance.MCM_Defaults] -TH_AIM_ASSIST = false \ No newline at end of file diff --git a/LongWarOfTheChosen/Content/.gitignore b/LongWarOfTheChosen/Content/.gitignore new file mode 100644 index 000000000..2f95c300e --- /dev/null +++ b/LongWarOfTheChosen/Content/.gitignore @@ -0,0 +1,25 @@ +*.upk +*.umap +*.bik +*.webm +*.bk2 +/*/*.txt +!/LW_FactionBalance/* +!/LW_PerkPack_Integrated/* +!/LW_Toolbox_Integrated/* +!/BaseGameMissionAssets/README.txt +!/Missions/* +!/Parcels/* +!/Plots/* +!/CIN_TroopTransport.upk +!/LW_Heavy_Dazed_Tile.upk +!/LW_Psi* +!/UILibrary_* +!/BstarsPerkPack_Icons.upk +!/LW_StrikeRifle.upk +!/WP_BeamGrenadeLauncher.upk +!/HunterTrackingMark_LW.upk +!/AutopistolRebalance_LW.upk +!/LWHolotargeter.upk +!/*_PerkContent.upk +!/LW_Perk_OneForAll.upk \ No newline at end of file diff --git a/LongWarOfTheChosen/Content/AutopistolRebalance_LW.upk b/LongWarOfTheChosen/Content/AutopistolRebalance_LW.upk new file mode 100644 index 000000000..e66d5b51d Binary files /dev/null and b/LongWarOfTheChosen/Content/AutopistolRebalance_LW.upk differ diff --git a/LongWarOfTheChosen/Content/BstarsPerkPack_Icons.upk b/LongWarOfTheChosen/Content/BstarsPerkPack_Icons.upk new file mode 100644 index 000000000..5b7db294d Binary files /dev/null and b/LongWarOfTheChosen/Content/BstarsPerkPack_Icons.upk differ diff --git a/LongWarOfTheChosen/Content/CIN_TroopTransport.upk b/LongWarOfTheChosen/Content/CIN_TroopTransport.upk new file mode 100644 index 000000000..738d1286d Binary files /dev/null and b/LongWarOfTheChosen/Content/CIN_TroopTransport.upk differ diff --git a/LongWarOfTheChosen/Content/HunterTrackingMark_LW.upk b/LongWarOfTheChosen/Content/HunterTrackingMark_LW.upk new file mode 100644 index 000000000..398e635f1 Binary files /dev/null and b/LongWarOfTheChosen/Content/HunterTrackingMark_LW.upk differ diff --git a/LongWarOfTheChosen/Content/LWHoloTarget_PerkContent.upk b/LongWarOfTheChosen/Content/LWHoloTarget_PerkContent.upk new file mode 100644 index 000000000..77f0fe0e4 Binary files /dev/null and b/LongWarOfTheChosen/Content/LWHoloTarget_PerkContent.upk differ diff --git a/LongWarOfTheChosen/Content/LWHolotargeter.upk b/LongWarOfTheChosen/Content/LWHolotargeter.upk new file mode 100644 index 000000000..ca2662801 Binary files /dev/null and b/LongWarOfTheChosen/Content/LWHolotargeter.upk differ diff --git a/LongWarOfTheChosen/Content/LWMultiTarget_PerkContent.upk b/LongWarOfTheChosen/Content/LWMultiTarget_PerkContent.upk new file mode 100644 index 000000000..12afb1823 Binary files /dev/null and b/LongWarOfTheChosen/Content/LWMultiTarget_PerkContent.upk differ diff --git a/LongWarOfTheChosen/Content/LWRapidTarget_PerkContent.upk b/LongWarOfTheChosen/Content/LWRapidTarget_PerkContent.upk new file mode 100644 index 000000000..bfc0ab312 Binary files /dev/null and b/LongWarOfTheChosen/Content/LWRapidTarget_PerkContent.upk differ diff --git a/LongWarOfTheChosen/Content/LW_FactionBalance/HeroClassesReb.upk b/LongWarOfTheChosen/Content/LW_FactionBalance/HeroClassesReb.upk new file mode 100644 index 000000000..f0c0911a5 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_FactionBalance/HeroClassesReb.upk differ diff --git a/LongWarOfTheChosen/Content/LW_FactionBalance/UICollection_SupremeFocus.upk b/LongWarOfTheChosen/Content/LW_FactionBalance/UICollection_SupremeFocus.upk new file mode 100644 index 000000000..026a76ccc Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_FactionBalance/UICollection_SupremeFocus.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_CloseCombatSpecialist.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_CloseCombatSpecialist.upk new file mode 100644 index 000000000..e4daa55a0 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_CloseCombatSpecialist.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_CloseEncounters.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_CloseEncounters.upk new file mode 100644 index 000000000..cd2b540fb Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_CloseEncounters.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_KnifeEncounters.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_KnifeEncounters.upk new file mode 100644 index 000000000..0e8ab025a Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_KnifeEncounters.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_AbsorptionFields.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_AbsorptionFields.upk new file mode 100644 index 000000000..4276874f1 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_AbsorptionFields.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_BodyShield.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_BodyShield.upk new file mode 100644 index 000000000..c234306a8 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_BodyShield.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_CombatRush.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_CombatRush.upk new file mode 100644 index 000000000..8273bb564 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_CombatRush.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_DamageControl.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_DamageControl.upk new file mode 100644 index 000000000..c78556c26 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_DamageControl.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_DepthPerception.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_DepthPerception.upk new file mode 100644 index 000000000..d1ac3759e Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_PCS_DepthPerception.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_Psi_Bastion.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_Psi_Bastion.upk new file mode 100644 index 000000000..f01fb685f Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_Psi_Bastion.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_Psi_MindMerge.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_Psi_MindMerge.upk new file mode 100644 index 000000000..c84f02b1a Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_Psi_MindMerge.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_ZoC.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_ZoC.upk new file mode 100644 index 000000000..3ea977b5a Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/LW_Perk_ZoC.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/UILibrary_LW_PerkPack.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/UILibrary_LW_PerkPack.upk new file mode 100644 index 000000000..5b959dc6d Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/UILibrary_LW_PerkPack.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/gfxArmory_LW.upk b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/gfxArmory_LW.upk new file mode 100644 index 000000000..67f0e74ad Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PerkPack_Integrated/gfxArmory_LW.upk differ diff --git a/LongWarOfTheChosen/Content/LW_Perk_OneForAll.upk b/LongWarOfTheChosen/Content/LW_Perk_OneForAll.upk new file mode 100644 index 000000000..1d37194cb Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_Perk_OneForAll.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PsiOverhaul.upk b/LongWarOfTheChosen/Content/LW_PsiOverhaul.upk new file mode 100644 index 000000000..8c6365167 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PsiOverhaul.upk differ diff --git a/LongWarOfTheChosen/Content/LW_PsiOverhaul_Perks.upk b/LongWarOfTheChosen/Content/LW_PsiOverhaul_Perks.upk new file mode 100644 index 000000000..e3bde316a Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_PsiOverhaul_Perks.upk differ diff --git a/LongWarOfTheChosen/Content/LW_StrikeRifle.upk b/LongWarOfTheChosen/Content/LW_StrikeRifle.upk new file mode 100644 index 000000000..8b5e2320a Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_StrikeRifle.upk differ diff --git a/LongWarOfTheChosen/Content/LW_Toolbox_Integrated/CIN_PostMission1.umap b/LongWarOfTheChosen/Content/LW_Toolbox_Integrated/CIN_PostMission1.umap new file mode 100644 index 000000000..2e33acd25 Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_Toolbox_Integrated/CIN_PostMission1.umap differ diff --git a/LongWarOfTheChosen/Content/LW_Toolbox_Integrated/UILibrary_LWToolbox.upk b/LongWarOfTheChosen/Content/LW_Toolbox_Integrated/UILibrary_LWToolbox.upk new file mode 100644 index 000000000..8d81b97ec Binary files /dev/null and b/LongWarOfTheChosen/Content/LW_Toolbox_Integrated/UILibrary_LWToolbox.upk differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_AssaultAlienBase_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_AssaultAlienBase_LW.umap new file mode 100644 index 000000000..3f294a86e Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_AssaultAlienBase_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_AssaultNetworkTower_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_AssaultNetworkTower_LW.umap new file mode 100644 index 000000000..07aa06b0b Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_AssaultNetworkTower_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_Blacksite_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_Blacksite_LW.umap new file mode 100644 index 000000000..167d11ffb Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_Blacksite_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_ChosenAvengerDefense_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_ChosenAvengerDefense_LW.umap new file mode 100644 index 000000000..8a41e2ab6 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_ChosenAvengerDefense_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_CovertEscape_Evac_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_CovertEscape_Evac_LW.umap new file mode 100644 index 000000000..3f35ec5c5 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_CovertEscape_Evac_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_Defend_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_Defend_LW.umap new file mode 100644 index 000000000..2ca203fc2 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_Defend_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_DestroyObject_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_DestroyObject_LW.umap new file mode 100644 index 000000000..f94aaefba Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_DestroyObject_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_DestroyTransmitter_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_DestroyTransmitter_LW.umap new file mode 100644 index 000000000..2a485c87a Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_DestroyTransmitter_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_Forge_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_Forge_LW.umap new file mode 100644 index 000000000..f0b95be5b Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_Forge_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_HackWorkstation_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_HackWorkstation_LW.umap new file mode 100644 index 000000000..ff288fc3f Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_HackWorkstation_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_IntelRaid_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_IntelRaid_LW.umap new file mode 100644 index 000000000..68c86a874 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_IntelRaid_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_Jailbreak_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_Jailbreak_LW.umap new file mode 100644 index 000000000..d830f57d2 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_Jailbreak_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_LWAvengerDefense.umap b/LongWarOfTheChosen/Content/Missions/Obj_LWAvengerDefense.umap new file mode 100644 index 000000000..4d363586d Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_LWAvengerDefense.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_LWInvasion.umap b/LongWarOfTheChosen/Content/Missions/Obj_LWInvasion.umap new file mode 100644 index 000000000..2b0403b73 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_LWInvasion.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_LWNeutralizeTarget.umap b/LongWarOfTheChosen/Content/Missions/Obj_LWNeutralizeTarget.umap new file mode 100644 index 000000000..004f2cbcf Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_LWNeutralizeTarget.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_LWTerror.umap b/LongWarOfTheChosen/Content/Missions/Obj_LWTerror.umap new file mode 100644 index 000000000..0fd768a34 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_LWTerror.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_RecoverItem_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_RecoverItem_LW.umap new file mode 100644 index 000000000..4aad7c08f Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_RecoverItem_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_RecruitRaid_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_RecruitRaid_LW.umap new file mode 100644 index 000000000..d76717e36 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_RecruitRaid_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_Rendezvous_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_Rendezvous_LW.umap new file mode 100644 index 000000000..2cbd7e3f4 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_Rendezvous_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_SabotageCC_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_SabotageCC_LW.umap new file mode 100644 index 000000000..8dfb9cd0a Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_SabotageCC_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_SecureUFO_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_SecureUFO_LW.umap new file mode 100644 index 000000000..94af39a92 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_SecureUFO_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_SmashNGrab_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_SmashNGrab_LW.umap new file mode 100644 index 000000000..3e1a94559 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_SmashNGrab_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_SupplyConvoy_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_SupplyConvoy_LW.umap new file mode 100644 index 000000000..7eb2bdeb3 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_SupplyConvoy_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_SupplyExtraction_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_SupplyExtraction_LW.umap new file mode 100644 index 000000000..7e7d420e1 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_SupplyExtraction_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/Obj_TroopManeuvers_LW.umap b/LongWarOfTheChosen/Content/Missions/Obj_TroopManeuvers_LW.umap new file mode 100644 index 000000000..41324ccd1 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/Obj_TroopManeuvers_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/SubSystem_ContinuousRNF.umap b/LongWarOfTheChosen/Content/Missions/SubSystem_ContinuousRNF.umap new file mode 100644 index 000000000..a706fa638 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/SubSystem_ContinuousRNF.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/UMS_LWCommon.umap b/LongWarOfTheChosen/Content/Missions/UMS_LWCommon.umap new file mode 100644 index 000000000..063b17f02 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/UMS_LWCommon.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/UMS_LWContinuousReinforcements.umap b/LongWarOfTheChosen/Content/Missions/UMS_LWContinuousReinforcements.umap new file mode 100644 index 000000000..1d97e27f8 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/UMS_LWContinuousReinforcements.umap differ diff --git a/LongWarOfTheChosen/Content/Missions/UMS_LWMissionTimer.umap b/LongWarOfTheChosen/Content/Missions/UMS_LWMissionTimer.umap new file mode 100644 index 000000000..6c3a66738 Binary files /dev/null and b/LongWarOfTheChosen/Content/Missions/UMS_LWMissionTimer.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_Advent_Recruitment_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_Advent_Recruitment_01_LW.umap new file mode 100644 index 000000000..c47319b25 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_Advent_Recruitment_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_ChipTransmitter_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_ChipTransmitter_01_LW.umap new file mode 100644 index 000000000..0a3199063 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_ChipTransmitter_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_CloneStorage_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_CloneStorage_01_LW.umap new file mode 100644 index 000000000..5e2a95ede Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_CloneStorage_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_GeneClinic_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_GeneClinic_01_LW.umap new file mode 100644 index 000000000..f03d8b868 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_GeneClinic_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_HumanBodyStorage_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_HumanBodyStorage_01_LW.umap new file mode 100644 index 000000000..e30a81ab3 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_HumanBodyStorage_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_Museum_01_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/lg_Museum_01_LW_PD.umap new file mode 100644 index 000000000..d34cd4c9d Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_Museum_01_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_PropagandaCenter_02_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_PropagandaCenter_02_LW.umap new file mode 100644 index 000000000..c4df85061 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_PropagandaCenter_02_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_RemoteScienceStation_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_RemoteScienceStation_01_LW.umap new file mode 100644 index 000000000..ee40fb63a Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_RemoteScienceStation_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_RemoteScienceStation_01_SG_LW.umap b/LongWarOfTheChosen/Content/Parcels/lg_RemoteScienceStation_01_SG_LW.umap new file mode 100644 index 000000000..683014077 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_RemoteScienceStation_01_SG_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/lg_Shopping_Center_01_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/lg_Shopping_Center_01_LW_PD.umap new file mode 100644 index 000000000..66175e29d Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/lg_Shopping_Center_01_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_AdventLandingPad_03.umap b/LongWarOfTheChosen/Content/Parcels/md_AdventLandingPad_03.umap new file mode 100644 index 000000000..6fe6966d7 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_AdventLandingPad_03.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_AdventLandingPad_04.umap b/LongWarOfTheChosen/Content/Parcels/md_AdventLandingPad_04.umap new file mode 100644 index 000000000..ef87a4a30 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_AdventLandingPad_04.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_Advent_Security_03_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_Advent_Security_03_LW.umap new file mode 100644 index 000000000..8858825df Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_Advent_Security_03_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_AlienEntertainment_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_AlienEntertainment_01_LW.umap new file mode 100644 index 000000000..3e2d6908b Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_AlienEntertainment_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_Bank_01_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/md_Bank_01_LW_PD.umap new file mode 100644 index 000000000..2e609f317 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_Bank_01_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_Boardroom_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_Boardroom_01_LW.umap new file mode 100644 index 000000000..f4210f0c3 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_Boardroom_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_ChosenArtillery_01.umap b/LongWarOfTheChosen/Content/Parcels/md_ChosenArtillery_01.umap new file mode 100644 index 000000000..dac020b51 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_ChosenArtillery_01.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_ClothingStore_01_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/md_ClothingStore_01_LW_PD.umap new file mode 100644 index 000000000..38ebbb7c9 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_ClothingStore_01_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_GasStation_01_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/md_GasStation_01_LW_PD.umap new file mode 100644 index 000000000..f195d1a8c Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_GasStation_01_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_GeneClinic_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_GeneClinic_01_LW.umap new file mode 100644 index 000000000..5e13ff74b Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_GeneClinic_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_Office_03_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/md_Office_03_LW_PD.umap new file mode 100644 index 000000000..85920ced5 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_Office_03_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_RegionalNetwork_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_RegionalNetwork_01_LW.umap new file mode 100644 index 000000000..c3fce78e8 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_RegionalNetwork_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_RemoteScienceStation_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_RemoteScienceStation_01_LW.umap new file mode 100644 index 000000000..eb2e98720 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_RemoteScienceStation_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_Restaurant_01_LW_PD.umap b/LongWarOfTheChosen/Content/Parcels/md_Restaurant_01_LW_PD.umap new file mode 100644 index 000000000..afb0cb6d0 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_Restaurant_01_LW_PD.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_ShootingRange_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_ShootingRange_01_LW.umap new file mode 100644 index 000000000..6cac34be7 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_ShootingRange_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/md_Studio_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/md_Studio_01_LW.umap new file mode 100644 index 000000000..4cb6b353a Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/md_Studio_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/sm_ChosenBulwark_01.umap b/LongWarOfTheChosen/Content/Parcels/sm_ChosenBulwark_01.umap new file mode 100644 index 000000000..a35d39243 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/sm_ChosenBulwark_01.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/sm_ChosenBulwark_02.umap b/LongWarOfTheChosen/Content/Parcels/sm_ChosenBulwark_02.umap new file mode 100644 index 000000000..05c8602ef Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/sm_ChosenBulwark_02.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/sm_ServerRoom_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/sm_ServerRoom_01_LW.umap new file mode 100644 index 000000000..7d35c8534 Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/sm_ServerRoom_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Parcels/sm_VipOffice_01_LW.umap b/LongWarOfTheChosen/Content/Parcels/sm_VipOffice_01_LW.umap new file mode 100644 index 000000000..50d42a7be Binary files /dev/null and b/LongWarOfTheChosen/Content/Parcels/sm_VipOffice_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_01_LW.umap new file mode 100644 index 000000000..dabb656ca Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_02_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_02_LW.umap new file mode 100644 index 000000000..84757332e Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_02_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_03_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_03_LW.umap new file mode 100644 index 000000000..ed51e54f7 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_ALB_AlienBase_03_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_01.umap new file mode 100644 index 000000000..2ebfc5e03 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_02.umap new file mode 100644 index 000000000..a481c206d Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_10_LW.umap new file mode 100644 index 000000000..fb6f87b50 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_11_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_11_LW.umap new file mode 100644 index 000000000..e843ddb2a Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Civic_11_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_01.umap new file mode 100644 index 000000000..8eb6b5e5b Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_02.umap new file mode 100644 index 000000000..273432b4d Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_10_LW.umap new file mode 100644 index 000000000..d2afc1e30 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_LgObj_Mixed_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_vlgObj_PedShoppingCenter_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_vlgObj_PedShoppingCenter_01_LW.umap new file mode 100644 index 000000000..d611e2736 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_vlgObj_PedShoppingCenter_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CTY_vlgObj_PedShoppingCenter_02_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_CTY_vlgObj_PedShoppingCenter_02_LW.umap new file mode 100644 index 000000000..75cbfb66f Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CTY_vlgObj_PedShoppingCenter_02_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_CVY_ResistanceConvoy_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_CVY_ResistanceConvoy_01_LW.umap new file mode 100644 index 000000000..63457d9bf Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_CVY_ResistanceConvoy_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_RFT_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_RFT_01_LW.umap new file mode 100644 index 000000000..77b1a33ed Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_RFT_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_RFT_02_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_RFT_02_LW.umap new file mode 100644 index 000000000..e90b4d28e Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_RFT_02_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_RFT_CentralBroadcastTower_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_RFT_CentralBroadcastTower_01_LW.umap new file mode 100644 index 000000000..04995d479 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_RFT_CentralBroadcastTower_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_RVS_Highway_LgObj_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_RVS_Highway_LgObj_01_LW.umap new file mode 100644 index 000000000..e947aec21 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_RVS_Highway_LgObj_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_RVS_Highway_MdObj_01_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_RVS_Highway_MdObj_01_LW.umap new file mode 100644 index 000000000..c9f965267 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_RVS_Highway_MdObj_01_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_10_LW.umap new file mode 100644 index 000000000..7639fe8c6 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_11_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_11_LW.umap new file mode 100644 index 000000000..ea5daf6fc Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_11_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_12_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_12_LW.umap new file mode 100644 index 000000000..fdb58fa96 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_SLM_LgObj_12_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_SLM_MdObj_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_SLM_MdObj_10_LW.umap new file mode 100644 index 000000000..1dff3de70 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_SLM_MdObj_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_SLM_Overpass_LgObj_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_SLM_Overpass_LgObj_10_LW.umap new file mode 100644 index 000000000..be6993cff Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_SLM_Overpass_LgObj_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_01.umap new file mode 100644 index 000000000..8f5c88d91 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_02.umap new file mode 100644 index 000000000..d5df783e7 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_10_LW.umap new file mode 100644 index 000000000..c84140190 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_11_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_11_LW.umap new file mode 100644 index 000000000..e65134c51 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_11_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_20_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_20_LW.umap new file mode 100644 index 000000000..0d1d755f3 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_LgObj_20_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_MdObj_10_LW.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_MdObj_10_LW.umap new file mode 100644 index 000000000..89abc0123 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Mixed_MdObj_10_LW.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Neigh_LgObj_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Neigh_LgObj_01.umap new file mode 100644 index 000000000..d81e0aa04 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Neigh_LgObj_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Neigh_LgObj_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Neigh_LgObj_02.umap new file mode 100644 index 000000000..6a1a60db9 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Neigh_LgObj_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Retail_LgObj_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Retail_LgObj_01.umap new file mode 100644 index 000000000..2b3c0e066 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Retail_LgObj_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_TWN_Retail_LgObj_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Retail_LgObj_02.umap new file mode 100644 index 000000000..7b98cc21b Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_TWN_Retail_LgObj_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_WLD_Highway_LgObj_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Highway_LgObj_01.umap new file mode 100644 index 000000000..0c116c4cc Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Highway_LgObj_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_WLD_Highway_LgObj_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Highway_LgObj_02.umap new file mode 100644 index 000000000..390e9a1bb Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Highway_LgObj_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_WLD_Ravine_LgObj_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Ravine_LgObj_01.umap new file mode 100644 index 000000000..59966af43 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Ravine_LgObj_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_WLD_Ravine_LgObj_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Ravine_LgObj_02.umap new file mode 100644 index 000000000..9b25c3861 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Ravine_LgObj_02.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_WLD_Stream_LgObj_01.umap b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Stream_LgObj_01.umap new file mode 100644 index 000000000..797a3cdee Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Stream_LgObj_01.umap differ diff --git a/LongWarOfTheChosen/Content/Plots/Plot_WLD_Stream_LgObj_02.umap b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Stream_LgObj_02.umap new file mode 100644 index 000000000..e5de1c326 Binary files /dev/null and b/LongWarOfTheChosen/Content/Plots/Plot_WLD_Stream_LgObj_02.umap differ diff --git a/LongWarOfTheChosen/Content/README.md b/LongWarOfTheChosen/Content/README.md new file mode 100644 index 000000000..b54ec3834 --- /dev/null +++ b/LongWarOfTheChosen/Content/README.md @@ -0,0 +1,4 @@ +This directory contains many large files, so they are not stored on GitHub. +Download [this zip file][1] and unpack it into this directory. + + [1]: https://www.dropbox.com/s/5wtqt5xjg8mde02/lwotc-content.zip?dl=0 "LWOTC Content assets" diff --git a/LongWarOfTheChosen/Content/UILibrary_FavidsPerkPack.upk b/LongWarOfTheChosen/Content/UILibrary_FavidsPerkPack.upk new file mode 100644 index 000000000..e50fd20fb Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_FavidsPerkPack.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_LW_Overhaul.upk b/LongWarOfTheChosen/Content/UILibrary_LW_Overhaul.upk new file mode 100644 index 000000000..c13b3656b Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_LW_Overhaul.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_SOCombatEngineer.upk b/LongWarOfTheChosen/Content/UILibrary_SOCombatEngineer.upk new file mode 100644 index 000000000..1ff5d3c4c Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_SOCombatEngineer.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_SODragoon.upk b/LongWarOfTheChosen/Content/UILibrary_SODragoon.upk new file mode 100644 index 000000000..ff51b1007 Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_SODragoon.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_SOHunter.upk b/LongWarOfTheChosen/Content/UILibrary_SOHunter.upk new file mode 100644 index 000000000..e7d36d053 Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_SOHunter.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_WOTC_APA_Class_Pack.upk b/LongWarOfTheChosen/Content/UILibrary_WOTC_APA_Class_Pack.upk new file mode 100644 index 000000000..f0538b436 Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_WOTC_APA_Class_Pack.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_WeaponPerkIcons.upk b/LongWarOfTheChosen/Content/UILibrary_WeaponPerkIcons.upk new file mode 100644 index 000000000..ce0c0070e Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_WeaponPerkIcons.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_WolfWeaponPack.upk b/LongWarOfTheChosen/Content/UILibrary_WolfWeaponPack.upk new file mode 100644 index 000000000..3c6fc7e73 Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_WolfWeaponPack.upk differ diff --git a/LongWarOfTheChosen/Content/UILibrary_XPerkIconPack.upk b/LongWarOfTheChosen/Content/UILibrary_XPerkIconPack.upk new file mode 100644 index 000000000..3ece0f742 Binary files /dev/null and b/LongWarOfTheChosen/Content/UILibrary_XPerkIconPack.upk differ diff --git a/LongWarOfTheChosen/Content/WP_BeamGrenadeLauncher.upk b/LongWarOfTheChosen/Content/WP_BeamGrenadeLauncher.upk new file mode 100644 index 000000000..46c38d489 Binary files /dev/null and b/LongWarOfTheChosen/Content/WP_BeamGrenadeLauncher.upk differ diff --git a/LongWarOfTheChosen/ContentOptions.json b/LongWarOfTheChosen/ContentOptions.json index 8dee04645..dfd853c9f 100644 --- a/LongWarOfTheChosen/ContentOptions.json +++ b/LongWarOfTheChosen/ContentOptions.json @@ -1,123 +1,11 @@ { - - "missingUncooked": [ - "FX_Glows_Env.upk", - "FX_Exhaust_Vapors_Env.upk" - ], - "sfMaps": [ - "AdventCrate_LoCov_1x1_SmashNGrab_LW", - "Obj_AssaultAlienBase_LW", - "Obj_AssaultNetworkTower_LW", - "Obj_Blacksite_LW", - "Obj_ChosenAvengerDefense_LW", - "Obj_CovertEscape_Evac_LW", - "Obj_Defend_LW", - "Obj_DestroyObject_LW", - "Obj_DestroyTransmitter_LW", - "Obj_Forge_LW", - "Obj_HackWorkstation_LW", - "Obj_IntelRaid_LW", - "Obj_Jailbreak_LW", - "Obj_LWAvengerDefense", - "Obj_LWInvasion", - "Obj_LWNeutralizeTarget", - "Obj_LWTerror", - "Obj_RecoverItem_LW", - "Obj_RecruitRaid_LW", - "Obj_Rendezvous_LW", - "Obj_SabotageCC_LW", - "Obj_SecureUFO_LW", - "Obj_SmashNGrab_LW", - "Obj_SupplyConvoy_LW", - "Obj_SupplyExtraction_LW", - "Obj_TroopManeuvers_LW", - "SubSystem_ContinuousRNF", - "UMS_LWCommon", - "UMS_LWContinuousReinforcements", - "UMS_LWMissionTimer" - ], "sfStandalone": [ - "AdvGrenadeLauncher", - "LW_Perk_MutonM3", - "LW_Perk_Psi_MassMindspin", - "LW_Perk_Psi_MassReanimation", - "LW_Perk_RepairServos", - "LWAdvGrenadier", - "LWAdvGunner", - "LWAdvMec", - "LWAdvMecArcher", - "LWAdvRocketeer", - "LWAdvSentry", - "LWDrone", - "LWDroneWeapon", - "LWDroneWeapon_alternate_beam", - "LWHiveQueen", - "LWMutonM2", - "LWMutonM3", - "LWMutonM3Rifle", - "LWNaja", - "LWSectoidM2", - "LWSidewinder", - "LWSidewinderSMG", - "NajaRifle", - "XAdventTrooper", - - "AutopistolRebalance_LW", - "BRMeshPack_LW", - "Cannon_NoShake_LW", - "CrossbowVektor", - "GameUnit_AdvPurifier_Rusty", - "EW_MEC_Weapons", - "LW_PsiOverhaul", "LWCombatKnife", - "LWGauntletWOTC", - "LWHoloTarget_PerkContent", - "LWHolotargeter", - "LWMultiTarget_PerkContent", - "LWRapidTarget_PerkContent", - "LWResistanceMEC", - "LWSawedoffShotgun", - "MusashiCombatKnifeMod_LW", - "WP_AdventFlamethrower_Rusty", - "WP_BeamGrenadeLauncher", - - "IRISoulShotPerk", - "IRIApotheosisPerk", - "IRIParryReworkPerk", - "IRIParryReworkAnims", - - "IRIPerkPack_UILibrary_LW", - - "OneHandedGauntlet_LW", + "LWMutonM3", + "LWHiveQueen", "WoTC_Ballistic_Shield_LW", "WoTC_Plated_Shield_LW", "WoTC_Powered_Shield_LW", - "WoTC_Shield_Animations_LW", - - - "LWAssaultRifle_LS", - "LWCannon_LS", - "LWPistol_LS", - "LWShotgun_LS", - "LWSMG_LS", - "LWSniperRifle_LS", - - "LWAccessories_CG", - "LWAssaultRifle_CG", - "LWCannon_CG", - "LWPistol_CG", - "LWShotgun_CG", - "LWSMG_CG", - "LWSniperRifle_CG", - - "LWSMG_BM", - "LWSMG_CV", - "LWSMG_MG", - - "UILibrary_LWAlienPack", - "UILibrary_LW_Coilguns", - "UILibrary_LW_LaserPack", - "UILibrary_Refs" - + "WoTC_Shield_Animations_LW" ] -} \ No newline at end of file +} diff --git a/LongWarOfTheChosen/Localization/BetterSecondWaveSupport.deu b/LongWarOfTheChosen/Localization/BetterSecondWaveSupport.deu old mode 100644 new mode 100755 diff --git a/LongWarOfTheChosen/Localization/LW_AlienPack_Integrated/XComGame.deu b/LongWarOfTheChosen/Localization/LW_AlienPack_Integrated/XComGame.deu old mode 100644 new mode 100755 diff --git a/LongWarOfTheChosen/Localization/LW_FactionBalance/LW_FactionBalance.deu b/LongWarOfTheChosen/Localization/LW_FactionBalance/LW_FactionBalance.deu old mode 100644 new mode 100755 diff --git a/LongWarOfTheChosen/Localization/LW_FactionBalance/XComGame.deu b/LongWarOfTheChosen/Localization/LW_FactionBalance/XComGame.deu old mode 100644 new mode 100755 diff --git a/LongWarOfTheChosen/Localization/LW_FactionBalance/XComGame.esn b/LongWarOfTheChosen/Localization/LW_FactionBalance/XComGame.esn index d5f408942..7798e1816 100644 --- a/LongWarOfTheChosen/Localization/LW_FactionBalance/XComGame.esn +++ b/LongWarOfTheChosen/Localization/LW_FactionBalance/XComGame.esn @@ -46,8 +46,8 @@ LocPromotionPopupText=" Agrega al Templario 圣殿骑士在开始任务时比其他士兵弱,但在更高的专注水平下会å˜å¾—éžå¸¸å¼ºå¤§ã€‚
专注是通过用撕裂攻击敌人获得的(å³ä½¿æœªå‘½ä¸­ä¹Ÿèƒ½èŽ·å¾—)。
" -[ArcWave_LW X2AbilityTemplate] -LocFriendlyName="撕裂" -LocLongDescription="近战攻击有几率使目标眩晕或混乱。触å‘气势,产生专注。" -LocHelpText="近战攻击有几率使目标眩晕或混乱。触å‘气势,产生专注。" -LocPromotionPopupText=" 使用撕裂是圣殿骑士产生专注的主è¦æ–¹æ³•ã€‚
施展撕裂åŽï¼Œåœ£æ®¿éª‘士将获得气势,å…许他们进行一次移动动作。攻击åŽæ’¤å›žæŽ©ä½“。
撕裂æ¯1点专注有%几率眩晕。眩晕的目标也会被击退。
撕裂æ¯1点专注有%几率混乱。
" - -[Rend_LW X2AbilityTemplate] -LocFriendlyName="撕裂" +[Rend X2AbilityTemplate] LocLongDescription="近战攻击有几率使目标眩晕或混乱。触å‘气势,产生专注。" LocHelpText="近战攻击有几率使目标眩晕或混乱。触å‘气势,产生专注。" LocPromotionPopupText=" 使用撕裂是圣殿骑士产生专注的主è¦æ–¹æ³•ã€‚
施展撕裂åŽï¼Œåœ£æ®¿éª‘士将获得气势,å…许他们进行一次移动动作。攻击åŽæ’¤å›žæŽ©ä½“。
撕裂æ¯1点专注有%几率眩晕。眩晕的目标也会被击退。
撕裂æ¯1点专注有%几率混乱。
" @@ -6337,8 +6330,8 @@ LocFlyOverText="精神å‘ç‹‚" [YouCannotHide_LW X2AbilityTemplate] LocFriendlyName="无所éå½¢" -LocHelpText="你的主武器增加30命中。" -LocLongDescription="你的主武器增加30命中。" +LocHelpText="你的主武器增加100命中。" +LocLongDescription="你的主武器增加100命中。" LocFlyOverText="逃跑å§ã€‚" [RebelHPUpgrade_T1 X2AbilityTemplate] @@ -6422,8 +6415,8 @@ LocFlyOverText="死亡标记" [Fatality_LW X2AbilityTemplate] LocFriendlyName="宿命" -LocLongDescription="使用对%生命或更低的目标增加+100命中和暴击率。" -LocHelpText="使用对%生命或更低的目标增加+100命中和暴击率。" +LocLongDescription="使用对35%生命或更低的目标增加+100命中和暴击率。" +LocHelpText="使用对35%生命或更低的目标增加+100命中和暴击率。" LocFlyOverText="宿命" [Vampirism_LW X2AbilityTemplate] @@ -6483,7 +6476,7 @@ LocHelpText="在XCOM回åˆå—到伤害åŽï¼ŒèŽ·å¾—移动动作或战备状æ€ã€‚ LocFlyOverText="天选者å应" ; LWOTC Needs Translation (2) -[ChosenImmunities X2AbilityTemplate] +[ChosenImmunitiesPassive X2AbilityTemplate] LocFriendlyName="天选者å…ç–«" LocLongDescription="天选者对眩晕ã€æ··ä¹±å’Œå†°å†»å…疫,并é­å—-50%的致残移动力,而ä¸æ˜¯åŽŸåœ°ä¸åŠ¨ã€‚" LocHelpText="天选者对眩晕ã€æ··ä¹±å’Œå†°å†»å…疫,并é­å—-50%的致残移动力,而ä¸æ˜¯åŽŸåœ°ä¸åŠ¨ã€‚" @@ -6558,9 +6551,9 @@ SummaryText="残酷镇压å抗军,å‡å°‘该地区åæŠ—å†›æœªæ¥ è–殿騎士在開始任務時比其他士兵弱,但在更高的專注水平下會變得éžå¸¸å¼·å¤§ã€‚
專注是通éŽç”¨æ’•è£‚攻擊敵人ç²å¾—的(å³ä½¿æœªå‘½ä¸­ä¹Ÿèƒ½ç²å¾—)。
" -[ArcWave_LW X2AbilityTemplate] -LocFriendlyName="撕裂" -LocLongDescription="近戰攻擊有幾率使目標眩暈或混亂。觸發氣勢,產生專注。" -LocHelpText="近戰攻擊有幾率使目標眩暈或混亂。觸發氣勢,產生專注。" -LocPromotionPopupText=" 使用撕裂是è–殿騎士產生專注的主è¦æ–¹æ³•ã€‚
施展撕裂後,è–殿騎士將ç²å¾—氣勢,å…許他們進行一次移動動作。攻擊後撤回掩體。
撕裂æ¯1點專注有%幾率眩暈。眩暈的目標也會被擊退。
撕裂æ¯1點專注有 %幾率混亂。
" - -[Rend_LW X2AbilityTemplate] -LocFriendlyName="撕裂" +[Rend X2AbilityTemplate] LocLongDescription="近戰攻擊有幾率使目標眩暈或混亂。觸發氣勢,產生專注。" LocHelpText="近戰攻擊有幾率使目標眩暈或混亂。觸發氣勢,產生專注。" LocPromotionPopupText=" 使用撕裂是è–殿騎士產生專注的主è¦æ–¹æ³•ã€‚
施展撕裂後,è–殿騎士將ç²å¾—氣勢,å…許他們進行一次移動動作。攻擊後撤回掩體。
撕裂æ¯1點專注有%幾率眩暈。眩暈的目標也會被擊退。
撕裂æ¯1點專注有 %幾率混亂。
" @@ -6335,8 +6328,8 @@ LocFlyOverText="精神發狂" [YouCannotHide_LW X2AbilityTemplate] LocFriendlyName="無所éå½¢" -LocHelpText="你的主武器增加30命中。" -LocLongDescription="你的主武器增加30命中。" +LocHelpText="你的主武器增加100命中。" +LocLongDescription="你的主武器增加100命中。" LocFlyOverText="逃跑å§ã€‚" [RebelHPUpgrade_T1 X2AbilityTemplate] @@ -6420,8 +6413,8 @@ LocFlyOverText="死亡標記" [Fatality_LW X2AbilityTemplate] LocFriendlyName="宿命" -LocLongDescription="使用å°ï¼…生命或更低的目標增加+100命中和暴擊率。" -LocHelpText="使用å°ï¼…生命或更低的目標增加+100命中和暴擊率。" +LocLongDescription="使用å°35%生命或更低的目標增加+100命中和暴擊率。" +LocHelpText="使用å°35%生命或更低的目標增加+100命中和暴擊率。" LocFlyOverText="宿命" [Vampirism_LW X2AbilityTemplate] @@ -6481,7 +6474,7 @@ LocHelpText="在XCOM回åˆå—到傷害後,ç²å¾—移動動作或戰備狀態。 LocFlyOverText="天é¸è€…å應" ; LWOTC Needs Translation (2) -[ChosenImmunities X2AbilityTemplate] +[ChosenImmunitiesPassive X2AbilityTemplate] LocFriendlyName="天é¸è€…å…ç–«" LocLongDescription="天é¸è€…å°çœ©æšˆã€æ··äº‚和冰å‡å…疫,並é­å—-50%的致殘移動力,而ä¸æ˜¯åŽŸåœ°ä¸å‹•ã€‚" LocHelpText="天é¸è€…å°çœ©æšˆã€æ··äº‚和冰å‡å…疫,並é­å—-50%的致殘移動力,而ä¸æ˜¯åŽŸåœ°ä¸å‹•ã€‚" @@ -6556,9 +6549,9 @@ SummaryText="殘酷鎮壓å抗è»ï¼Œæ¸›å°‘該地å€å抗è»æœªä¾† Disparo en cadena consume puntos de munición.
Tiempo de reutilización de turnos.
Disparo en cadena puede ser devastador contra enemigos que no están cubiertos o cuando es potenciado con bonificaciones de puntería.
" -[ChainShotSnapShot X2AbilityTemplate] -LocFriendlyName="Disparo en cadena" -LocLongDescription="Dispara con una penalización de a la puntería. Si aciertas el objetivo, haces otro disparo al objetivo automáticamente." -LocHelpText="Dispara con una penalización de a la puntería. Si aciertas el objetivo, haces otro disparo al objetivo automáticamente." -LocFlyOverText="Disparo en cadena" -LocPromotionPopupText=" Disparo en cadena requiere puntos de munición y tiene un tiempo de enfriamiento de turnos.
Disparo en cadena puede ser devastador contra enemigos que no están a cubierto o cuando se aumenta con bonificaciones de puntería.
" - -[ChainShotSnapShot X2AbilityTemplate] -LocPromotionPopupText=" Disparo en cadena consume puntos de munición.
Tiempo de reutilización de turnos.
Disparo en cadena puede ser devastador contra enemigos que no están cubiertos o cuando es potenciado con bonificaciones de puntería.
" - -[ChainShotSnapShot2 X2AbilityTemplate] -LocFriendlyName="Disparo en cadena" -LocFlyOverText="Disparo en cadena" -LocPromotionPopupText="" - - - [SaturationFire X2AbilityTemplate] LocPromotionPopupText=" Fuego de saturación requiere puntos de munición.
Tiempo de reutilización de turnos.
Fuego de saturación realiza un disparo estándar a cada objetivo en el cono de visión y dañará o destruirá elementos de cobertura aleatorios.
" ; End translated @@ -3035,10 +3018,10 @@ ReaperTutorialTitle="Sombra de los Segadores" ReaperTutorialText="Los Segadores en Long War of The Chosen han recibido una reestructuración considerable: ya no poseen sigilo permanente; en cambio \"Sombra\" ahora es una habilidad basada en el tiempo de reutilización, y otorga una invisibilidad durante 2 turnos, que es básicamente una versión muy fuerte de ocultación. Claymore como tal ha sido eliminado a favor de Cuchillos arrojadizos. Por último, el rifle Vektor ahora se comporta más como un fusil de precisión de Long War 1, es decir, con una leve penalización para apuntar a corta distancia, pero permitirá usarlo con Vista de Pelotón, hasta cierto punto (la penalización de puntería comienza a aplicarse aproximadamente 5 casillas después del alcance normal del arma). Mientras los Segadores están en Sombra, estos tienen una movilidad aumentada y sus enemigos cuentan con un radio de detección menor." TemplarTutorialTitle="Concentración de los Templarios" -TemplarTutorialText="Los Templarios al igual que Segadores han mejorado en prestaciones (a fin de diferenciarlo del Ninja de Long War 2); la clase ahora lleva un escudo psiónico en lugar de la pistola automática que proporciona una protección ablativa extra (aun así seguirá siendo factible equiparla en la ranura creada expresamente para ello). Los Templarios continuarán ganando concentración durante las misiones al matar a unidades con Hender. Cada punto de concentración aumenta la eficacia del Templario en combate al mejorar su movilidad, capacidad de esquivar y el daño que inflige con Hender. También se puede invertir concentración en habilidades poderosas que tienen una efectividad mayor cuando se utilizan a los niveles de concentración más altos." +TemplarTutorialText="Los Templarios al igual que Segadores han mejorado en prestaciones (a fin de diferenciarlo del Ninja de Long War 2); la clase ahora lleva un escudo en lugar de la pistola automática que proporciona interesantes habilidades defensivas (aun así seguirá siendo factible equiparla en la ranura creada expresamente para ello). Los Templarios continuarán ganando concentración durante las misiones al matar a unidades con Hender. Cada punto de concentración aumenta la eficacia del Templario en combate al mejorar su movilidad, capacidad de esquivar y el daño que inflige con Hender. También se puede invertir concentración en habilidades poderosas que tienen una efectividad mayor cuando se utilizan a los niveles de concentración más altos." -TemplarMomentumTutorialTitle="Templarios: Ãmpetu y otras habilidades" -TemplarMomentumTutorialText="Después de utilizar Hender, los Templarios siempre activan Ãmpetu, una acción de movimiento sin coste que les permite volver a cubierto. El Templario también contará más adelante, si así lo deseas, con interesantes habilidades defensivas como \"Inquebrantable\", la cual mitiga el daño un 35% en un radio de hasta 4 casillas." +TemplarMomentumTutorialTitle="Templarios: Ãmpetu y Uno para todos" +TemplarMomentumTutorialText="Después de utilizar Hender, los Templarios siempre activan Ãmpetu, una acción de movimiento sin coste que les permite volver a cubierto. El Templario también cuenta con la habilidad \"Uno para todos\", que proporciona un aumento en la defensa ablativa y sirve como cobertura completa para un aliado, pero a costa de perder su defensa base." ;End translated @@ -5037,7 +5020,7 @@ ObjectiveTextPools[1]="Extrae recursos de ADVENT" ObjectiveTextPools[2]="Recupera y extrae recursos adicionales (Opcional)" ObjectiveTextPools[3]="Extrae a todos los soldados de XCOM" ObjectiveTextPools[4]="Robo relámpago" -ObjectiveTextPools[5]="La resistencia ha descubierto un almacén ADVENT vulnerable lleno de suministros y recursos valiosos. Irrumpe, toma todo lo que puedas, y escapa antes de que lleguen los refuerzos. Habrán múltiples cajas de alijos en esta misión pero sólo podrán recoger 1 por persona." +ObjectiveTextPools[5]="La resistencia ha descubierto un almacén ADVENT vulnerable lleno de suministros y recursos valiosos. Irrumpe, toma todo lo que puedas, y escapa antes de que lleguen los refuerzos. Habrán múltiples cajas de alijos en esta misión pero solamente se podrá recoger 1 por soldado." [SmashNGrabQuestItem X2EquipmentTemplate] FriendlyName="Alijo de recursos ADVENT" @@ -5309,8 +5292,7 @@ FocusLevelDescriptions[4]="Daño de Hender +\nMovilid LocPromotionPopupText=" Los Templarios comienzan las misiones más débiles que otros soldados, pero aumentarán extremadamente su fuerza en niveles de concentración más elevadas. Administrar concentración de manera efectiva para aprovechar al máximo cada habilidad y los aumentos de estadísticas es fundamental para regir un Templario.
La concentración se consigue atacando enemigos con Hender (incluso si fallas).
" ; LWOTC translated -[Rend_LW X2AbilityTemplate] -LocFriendlyName="Hender" +[Rend X2AbilityTemplate] LocLongDescription="Ataque cuerpo a cuerpo con la posibilidad de aturdir o desorientar al objetivo. Activa Ãmpetu y genera concentración en los ataques." LocHelpText="Ataque cuerpo a cuerpo con la posibilidad de aturdir o desorientar al objetivo. Activa Ãmpetu y genera concentración en los ataques." LocPromotionPopupText=" Usar Hender es el método principal de los Templarios para generar concentración.
Después de lanzar Hender el Templario ganará Ãmpetu lo que le permitirá una acción de movimiento gratuita. Empléala para volver a trasladarte a una cobertura después de atacar.
Hender tiene un % de probabilidad de aturdir con concentración. Los objetivos aturdidos también serán derribados.
Hender también posee un % de probabilidad de desorientar mediante concentración.
" @@ -6562,8 +6544,8 @@ LocFlyOverText="Rabia psicótica" [YouCannotHide_LW X2AbilityTemplate] ; LWOTC translated LocFriendlyName="No puedes esconderte" -LocHelpText="Consigues 30 de puntería con tu arma principal." -LocLongDescription="Consigues 30 de puntería con tu arma principal." +LocHelpText="Consigues 100 de puntería con tu arma principal." +LocLongDescription="Consigues 100 de puntería con tu arma principal." ; End translated LocFlyOverText="¡Correr!." @@ -6648,7 +6630,7 @@ LocFlyOverText="Ira contra indignos" [XCOMHunterMark_LW X2AbilityTemplate] LocFriendlyName="La marca de la muerte" -LocLongDescription="Marca un objetivo para la muerte garantizando la restitución de tus disparos estándar e instantáneos. Finaliza el turno del soldado. El efecto se mantiene hasta el próximo turno de XCOM." +LocLongDescription="Marca un objetivo para la muerte garantizando la restitución de tus disparos. El efecto se mantiene hasta el próximo turno de XCOM." LocHelpText="Marca un objetivo para la muerte garantizando la restitución de tus disparos." LocFlyOverText="La marca de la muerte" @@ -6736,9 +6718,9 @@ LocFlyOverText="Maremoto" [Brawler X2AbilityTemplate] LocFriendlyName="Inquebrantable" LocFlyOverText="Inquebrantable" -LocLongDescription="Recibes % menos de daño en ataques cercanos de hasta cuatro casillas de distancia. Asimismo, seguirá ejecutándose en los ataques a meleé realizados por el Templario, independientemente de la posición inicial." -LocHelpText="Recibes % menos de daño en ataques cercanos de hasta cuatro casillas de distancia. Asimismo, seguirá ejecutándose en los ataques realizados a meleé por el Templario, independientemente de la posición inicial." -LocPromotionPopupText=" Recibes % menos de daño en ataques cercanos de hasta cuatro casillas de distancia. Asimismo, seguirá ejecutándose en los ataques realizados a meleé por el Templario, independientemente de la posición inicial.
" +LocLongDescription="Recibes % menos de daño en ataques cercanos de hasta cuatro casillas de distancia." +LocHelpText="Recibes % menos de daño en ataques cercanos de hasta cuatro casillas de distancia." +LocPromotionPopupText=" Recibes % menos de daño en ataques cercanos de hasta cuatro casillas de distancia.
" [InstantReactionTime X2AbilityTemplate] LocFriendlyName="Tiempo de reacción instantáneo" @@ -6799,9 +6781,9 @@ SummaryText="Una brutal represalia contra la Resistencia, reduciendo todos los i ; LWOTC translated [XComGameState_AdventChosen] KnowledgeGainFirstBullet[eChosenKnowledge_Start]="" -KnowledgeGainFirstBullet[eChosenKnowledge_Saboteur]="¡Los Elegidos pretenden hallar la forma de sabotear al Avenger!" +KnowledgeGainFirstBullet[eChosenKnowledge_Saboteur]="¡Los Elegidos se están planteando obstaculizar las actividades rebeldes!" KnowledgeGainFirstBullet[eChosenKnowledge_Sentinel]="¡Los Elegidos aumentarán el peligro en las operaciones encubiertas!" -KnowledgeGainFirstBullet[eChosenKnowledge_Collector]="¡Los Elegidos se están planteando obstaculizar las actividades rebeldes!" +KnowledgeGainFirstBullet[eChosenKnowledge_Collector]="¡Los Elegidos pretenden hallar la forma de sabotear al Avenger!" KnowledgeGainFirstBullet[eChosenKnowledge_Raider]="¡Es posible que los Elegidos organicen un asalto contra el Avenger!" KnowledgeGainSecondBullet[eChosenKnowledge_Sentinel]="¡Los Elegidos pueden impulsar la aparición de un evento oscuro adicional!" @@ -6899,25 +6881,6 @@ LocHelpText="Otorga media cobertura a los aliados." LocLongDescription="Otorga media cobertura a los aliados." LocFlyOverText="Escudo Templario" -[TemplarInvert X2AbilityTemplate] -LocFriendlyName="Invertir" -LocLongDescription="Cambia de ubicación con una unidad. Coste de 1 de Concentración." -LocHelpText="Cambia de ubicación con una unidad. Coste de 1 de Concentración." -LocPromotionPopupText=" Invertir tiene un tiempo de enfriamiento de turnos y no finaliza el turno del Templario.
Utilizable tanto en unidades aliadas como enemigas.
No sirve con los Elegidos.
" - -[OneForAll X2AbilityTemplate] -LocFriendlyName="Uno para todos" -LocHelpText="Proporciona cobertura alta a tus compañeros de escuadrón donde sea que te encuentres y como penalización resta -30 de defensa. A favor aplicará escudos ablativos extra según el nivel de escudo del Templario durante la duración del efecto. Moverse o atacar cancelará la habilidad." -LocLongDescription="Proporciona cobertura alta a tus compañeros de escuadrón donde sea que te encuentres y como penalización resta -30 de defensa. A favor aplicará escudos ablativos extra según el nivel de escudo del Templario durante la duración del efecto. Moverse o atacar cancelará la habilidad." -LocFlyOverText="Uno para todos" - -[ShieldBash_LW X2AbilityTemplate] -LocFriendlyName="Golpe de escudo" -LocHelpText="Golpea a un enemigo adyacente con tu escudo; inflige un poco de daño y empuja al objetivo 2 casillas. Acción gratuita." -LocLongDescription="Golpea a un enemigo adyacente con tu escudo; inflige un poco de daño y empuja al objetivo 2 casillas. Acción gratuita." -LocPromotionPopupText=" El daño es equivalente al daño base del escudo actualmente equipado.
Golpe de escudo es una acción sin coste con un tiempo de reutilización de turnos.
También es posible ejecutar el talento con enemigos en casillas adyacentes que se encuentren en diagonal.
" -LocFlyOverText="Golpe de escudo" - ; LWOTC translated [TemplarBallisticShield_CV X2AbilityTemplate] LocFriendlyName="Escudo Templario" @@ -6938,6 +6901,24 @@ LocLongDescription="Otorga media cobertura a los aliados. Garantiza a esta unida LocFlyOverText="Escudo Templario" ; End translated +[ShieldBash_LW X2AbilityTemplate] +LocFriendlyName="Golpe de escudo" +LocHelpText="Golpea a un enemigo adyacente con tu escudo; inflige un poco de daño y empuja al objetivo 2 casillas. Acción gratuita." +LocLongDescription="Golpea a un enemigo adyacente con tu escudo; inflige un poco de daño y empuja al objetivo 2 casillas. Acción gratuita." +LocPromotionPopupText=" El daño es equivalente al daño base del escudo actualmente equipado.
Golpe de escudo es una acción sin coste con un tiempo de reutilización de turnos.
También es posible ejecutar el talento con enemigos en casillas adyacentes que se encuentren en diagonal.
" +LocFlyOverText="Golpe de escudo" + +[TemplarInvert X2AbilityTemplate] +LocFriendlyName="Invertir" +LocLongDescription="Cambia de ubicación con una unidad. Coste de 1 de Concentración." +LocHelpText="Cambia de ubicación con una unidad. Coste de 1 de Concentración." +LocPromotionPopupText=" Invertir tiene un tiempo de enfriamiento de turnos y no finaliza el turno del Templario.
Utilizable tanto en unidades aliadas como enemigas.
No sirve con los Elegidos.
" + +[OneForAll X2AbilityTemplate] +LocFriendlyName="Uno para todos" +LocHelpText="Proporciona cobertura alta a tus compañeros de escuadrón donde sea que te encuentres y como penalización resta -30 de defensa. A favor aplicará escudos ablativos extra según el nivel de escudo del Templario durante la duración del efecto. Moverse o atacar cancelará la habilidad." +LocLongDescription="Proporciona cobertura alta a tus compañeros de escuadrón donde sea que te encuentres y como penalización resta -30 de defensa. A favor aplicará escudos ablativos extra según el nivel de escudo del Templario durante la duración del efecto. Moverse o atacar cancelará la habilidad." +LocFlyOverText="Uno para todos" [GreaterPadding_CV X2AbilityTemplate] @@ -6961,18 +6942,6 @@ LocLongDescription="Reduce los tiempos de recuperación de las heridas de este s LocHelpText="Reduce los tiempos de recuperación de las heridas de este soldado" LocPromotionPopupText=" Mayor acolchado reduce en puntos la cantidad de salud que un soldado debe recuperar después de ser herido en batalla.
No afecta a los soldados que sufrieron heridas mortales y están estabilizados para no desangrarse." -[IRI_SoulShot X2AbilityTemplate] -LocFriendlyName="Flecha mística" -LocLongDescription="Un poderoso ataque a distancia basado en la puntería que puede generar críticos y no finaliza el turno. Cuesta 1 de Concentración." -LocHelpText="Un poderoso ataque a distancia basado en la puntería que puede generar críticos y no finaliza el turno. Cuesta 1 de Concentración." -LocPromotionPopupText=" Flecha mística no tiene tiempo de reutilización." - -[IRI_TemplarShield X2AbilityTemplate] -LocFriendlyName="Escudo Templario" -LocLongDescription="Usa tu guantelete para generar un escudo psiónico y obtener de defensa ablativa que durará hasta el inicio del siguiente turno. También es posible activarlo después de Hender." -LocHelpText="Usa tu guantelete para generar un escudo psiónico y obtener de defensa ablativa que durará hasta el inicio del siguiente turno. También es posible activarlo después de Hender." -LocPromotionPopupText=" Finaliza el turno cuando se usa.
La fuerza del escudo se irá incrementando conforme se mejore el guantelete." - [Indomitable X2AbilityTemplate] LocFriendlyName="Indomable" LocHelpText="Una vez por turno, gana 1 de concentración cuando te ataquenn." @@ -7005,7 +6974,7 @@ LocFlyOverText="Aptitud superior" LocFriendlyName="Voltio" LocLongDescription="Un ataque psiónico que inflige poco daño pero que \"salta\" a las unidades cercanas en los niveles de concentración más altos. Cuesta 1 de concentración." LocHelpText="Un ataque psiónico que inflige poco daño pero que \"salta\" a las unidades cercanas en los niveles de concentración más altos. Cuesta 1 de concentración." -LocPromotionPopupText=" Voltio no tiene tiempo de enfriamiento, pero cuesta 1 de concentración.
Voltio aumenta la puntería de tu escuadrón contra los objetivos en +.
" +LocPromotionPopupText="Voltio no tiene tiempo de enfriamiento, pero cuesta 1 de concentración.
Voltio aumenta la puntería de tu escuadrón contra los objetivos en +.
" [Amplify X2AbilityTemplate] LocFriendlyName="Amplificar" @@ -7017,8 +6986,8 @@ LocPromotionPopupText=" Amplificar durará 3 acciones una vez le tengas ; LWOTC translated [CrusaderRage_LW X2AbilityTemplate] LocFriendlyName="Rabia del Cruzado" -LocHelpText="Obtienes un aumento del daño del 25% por cada 25% de puntos de salud que falten, hasta un incremento del 50%. Reduce el tiempo de recuperación de las heridas de este soldado en 6." -LocLongDescription="Obtienes un aumento del daño del 25% por cada 25% de puntos de salud que falten, hasta un incremento del 50%. Reduce el tiempo de recuperación de las heridas de este soldado en 6." +LocHelpText="Obtienes un aumento del daño del 25% por cada 25% de puntos de salud que falten, hasta un incremento del 50%. Reduce el tiempo de recuperación de las heridas de este soldado en 8." +LocLongDescription="Obtienes un aumento del daño del 25% por cada 25% de puntos de salud que falten, hasta un incremento del 50%. Reduce el tiempo de recuperación de las heridas de este soldado en 8." LocPromotionPopupText=" La reducción en los tiempos de regeneración de heridas no se implementa si el soldado se desangró durante la misión.
" LocFlyOverText="Rabia del Cruzado" ; End translated @@ -7071,8 +7040,8 @@ LocPromotionPopupText=" Cada disparo en Desterrar genera una probabilid ; LWOTC translated [TotalCombat X2AbilityTemplate] LocFriendlyName="Combate total" -LocLongDescription="Concede 1 de movilidad y 5 de puntería. Lanzar una granada o usar un objeto ya no termina el turno y las granadas no tienen tiempo de reutilización. Además, puedes lanzar granadas a 2 casillas más de distancia y su radio aumenta en 1. Otorga un espacio sólo para granadas." -LocHelpText="Concede 1 de movilidad y 5 de puntería. Lanzar una granada o usar un objeto ya no termina el turno y las granadas no tienen tiempo de reutilización. Además, puedes lanzar granadas a 2 casillas más de distancia y su radio aumenta en 1. Otorga un espacio sólo para granadas." +LocLongDescription="Concede 1 de movilidad y 5 de puntería. Lanzar una granada o usar un objeto ya no termina el turno y las granadas no tienen tiempo de reutilización. Además, puedes lanzar granadas a 3 casillas más de distancia y su radio aumenta en 1. Otorga un espacio sólo para granadas." +LocHelpText="Concede 1 de movilidad y 5 de puntería. Lanzar una granada o usar un objeto ya no termina el turno y las granadas no tienen tiempo de reutilización. Además, puedes lanzar granadas a 3 casillas más de distancia y su radio aumenta en 1. Otorga un espacio sólo para granadas." LocPromotionPopupText=" Elimina el tiempo de reutilización de las granadas.
Obtiene Mezcla volátil, por lo tanto, no se acumula con ella." ; End translated @@ -7091,12 +7060,6 @@ LocLongDescription="Una forma poderosa de guardia. En lugar de disparar automát LocHelpText="Una forma poderosa de guardia. En lugar de disparar automáticamente realiza una sola acción. Actividad sin coste." LocPromotionPopupText=" No cuesta ninguna acción.
Algunas actividades no están disponibles durante la interrupción, como guardia.
Tiempo de enfriamiento de turnos." -[ArcWave_LW X2AbilityTemplate] -LocFriendlyName="Hender" -LocLongDescription="Ataque cuerpo a cuerpo con la posibilidad de aturdir o desorientar al objetivo. Activa Ãmpetu y genera concentración en los ataques." -LocHelpText="Ataque cuerpo a cuerpo con la posibilidad de aturdir o desorientar al objetivo. Activa Ãmpetu y genera concentración en los ataques." -LocPromotionPopupText=" Usar Hender es el método principal de los Templarios para generar concentración.
Después de lanzar Hender el Templario ganará Ãmpetu lo que le permitirá una acción de movimiento gratuita. Empléala para volver a trasladarte a una cobertura después de atacar.
Hender tiene un % de probabilidad de aturdir con concentración. Los objetivos aturdidos también serán derribados.
Hender también posee un % de probabilidad de desorientar mediante concentración.
" - [ArcWavePassive X2AbilityTemplate] LocFriendlyName="Onda psiónica" LocLongDescription="Hender genera una ola de energía psiónica en la dirección del ataque. El daño aumenta con el nivel del guantelete." @@ -7167,8 +7130,8 @@ LocHelpText="Las torres de seguridad ADVENT no pueden percibir esta unidad cuand LocLongDescription="El portador de este artilugio será inmune a las condiciones mentales negativas como el pánico, control mental y los aturdimientos." [Sustain X2AbilityTemplate] -LocLongDescription="Si la unidad recibe suficiente daño como para ser asesinada, se pone inmediatamente en Estasis durante 1 turno y su salud se reduce a 1. Esto sólo puede suceder una vez por misión. Reduce los tiempos de recuperación de heridas de este soldado en ." -LocHelpText="Si la unidad recibe suficiente daño como para ser asesinada, se pone inmediatamente en Estasis durante 1 turno y su salud se reduce a 1. Esto sólo puede suceder una vez por misión. Reduce los tiempos de recuperación de heridas de este soldado en ." +LocLongDescription="Si la unidad recibe suficiente daño como para ser asesinada, se pone inmediatamente en Estasis durante 1 turno y su salud se reduce a 1. Esto sólo puede suceder una vez por misión." +LocHelpText="Si la unidad recibe suficiente daño como para ser asesinada, se pone inmediatamente en Estasis durante 1 turno y su salud se reduce a 1. Esto sólo puede suceder una vez por misión." LocPromotionPopupText=" Ten en cuenta que una unidad en Estasis puede conservar efectos negativos dañinos como veneno o quemaduras una vez reaparezca.
" [SustainTriggered X2AbilityTemplate] diff --git a/LongWarOfTheChosen/Localization/XComGame.fra b/LongWarOfTheChosen/Localization/XComGame.fra index d7043baf0..e4f43f8a5 100644 --- a/LongWarOfTheChosen/Localization/XComGame.fra +++ b/LongWarOfTheChosen/Localization/XComGame.fra @@ -5312,8 +5312,7 @@ FocusLevelDescriptions[4]="Dégâts de Taillade + \nM LocPromotionPopupText=" En début de mission, les Templiers sont plus faibles que les autres soldats, mais plus leur niveau de concentration est élevé, plus ils deviennent puissants. Apprenez à gérer efficacement la concentration pour profiter au mieux des améliorations de statistiques et de chaque capacité.
Vous gagnez de la concentration en attaquant à l'aide de la capacité Taillade et ce, quelque soit le résultat de l'attaque (réussite, égratignure ou échec).
" ; LWOTC translated (3) -[Rend_LW X2AbilityTemplate] -LocFriendlyName="Taillade" +[Rend X2AbilityTemplate] LocLongDescription="Les attaques de mêlée ont une chance d'étourdir ou de désorienter leurs cibles. Déclenche la capacité Élan et génère de la concentration (quelque soit le résultat de l'attaque: succès, égratignure ou échec)." LocHelpText="Les attaques de mêlée ont une chance d'étourdir ou de désorienter leurs cibles. Déclenche la capacité Élan et génère de la concentration (quelque soit le résultat de l'attaque: succès, égratignure ou échec)." LocPromotionPopupText=" La capacité Taillade constitue la principale façon pour un Templier de générer de la concentration.
L'utilisation de Taillade déclenche la capacité Élan, qui octroie au Templier une action de déplacement bonus.
Taillade a % de chances par point de concentration d'étourdir sa cible. Les unités étourdies de cette façon sont également repoussées.
Taillade a % de chances par point de concentration de désorienter sa cible.
" @@ -6553,8 +6552,8 @@ LocFlyOverText="Rage psychotique" [YouCannotHide_LW X2AbilityTemplate] ; LWOTC translated (2) LocFriendlyName="Se cacher est inutile" -LocHelpText="Gagnez un bonus de +30 en visée avec votre arme principale." -LocLongDescription="Gagnez un bonus de +30 en visée avec votre arme principale." +LocHelpText="Gagnez un bonus de +100 en visée avec votre arme principale." +LocLongDescription="Gagnez un bonus de +100 en visée avec votre arme principale." ; LWOTC translated (2) LocFlyOverText="Cours." @@ -6646,8 +6645,8 @@ LocFlyOverText="Marque noire" [Fatality_LW X2AbilityTemplate] LocFriendlyName="Fatalité" ; LWOTC translated (2) -LocLongDescription="Gagnez un bonus de +100 en visée et en chances de coup critique avec votre contre les unités dont les PV actuels sont inférieurs ou égaux à % de leurs PV initiaux." -LocHelpText="Gagnez un bonus de +100 en visée et en chances de coup critique avec votre contre les unités dont les PV actuels sont inférieurs ou égaux à % de leurs PV initiaux." +LocLongDescription="Gagnez un bonus de +100 en visée et en chances de coup critique avec votre contre les unités dont les PV actuels sont inférieurs ou égaux à 35% de leurs PV initiaux." +LocHelpText="Gagnez un bonus de +100 en visée et en chances de coup critique avec votre contre les unités dont les PV actuels sont inférieurs ou égaux à 35% de leurs PV initiaux." ; End translated (2) LocFlyOverText="Fatalité" @@ -6708,7 +6707,7 @@ LocHelpText="Gagne une action de déplacement ou de Préparation au combat aprè LocFlyOverText="Réaction instinctive de l'Élu" ; LWOTC translated (2) -[ChosenImmunities X2AbilityTemplate] +[ChosenImmunitiesPassive X2AbilityTemplate] LocFriendlyName="Immunités de l'Élu" LocLongDescription="L'Élu est immunisé à l'étourdissement, la désorientation et la glace. Il subit un malus de -50% en mobilité en cas de Mutilation (au lieu d'être totalement immobilisé, comme c'est normalement le cas)." LocHelpText="L'Élu est immunisé à l'étourdissement, la désorientation et la glace. Il subit un malus de -50% en mobilité en cas de Mutilation (au lieu d'être totalement immobilisé, comme c'est normalement le cas)." @@ -6791,9 +6790,9 @@ SummaryText="De violentes représailles dirigées contre la résistance, qui a p ; LWOTC translated [XComGameState_AdventChosen] KnowledgeGainFirstBullet[eChosenKnowledge_Start]="" -KnowledgeGainFirstBullet[eChosenKnowledge_Saboteur]="L'Élu peut saboter le Talion!" +KnowledgeGainFirstBullet[eChosenKnowledge_Saboteur]="L'Élu peut gêner les activités rebelles!" KnowledgeGainFirstBullet[eChosenKnowledge_Sentinel]="L'Élu augmente les risques des missions secrètes!" -KnowledgeGainFirstBullet[eChosenKnowledge_Collector]="L'Élu peut gêner les activités rebelles!" +KnowledgeGainFirstBullet[eChosenKnowledge_Collector]="L'Élu peut saboter le Talion!" KnowledgeGainFirstBullet[eChosenKnowledge_Raider]="L'Élu peut lancer un assaut contre le Talion!" KnowledgeGainSecondBullet[eChosenKnowledge_Sentinel]="Chosen peut mener une opération supplémentaire!" @@ -7050,8 +7049,8 @@ LocPromotionPopupText=" Chaque tir effectué avec Bannissement a une ch ; LWOTC translated (3) [TotalCombat X2AbilityTemplate] LocFriendlyName="Combat total" -LocLongDescription="Procure un bonus de +1 en Mobilité et de +5 en visée. Lancer une grenade ou utiliser un objet ne met plus fin à votre tour. La portée de vos grenades est augmentée de 2 cases et leurs temps de rechargement est réduit à 0. Octroie la capacité Mélange explosif (zone d'effet des grenades +1 case). Une grenade supplémentaire peut être équipée à l'emplacement réservé aux grenades." -LocHelpText="Procure un bonus de +1 en Mobilité et de +5 en visée. Lancer une grenade ou utiliser un objet ne met plus fin à votre tour. La portée de vos grenades est augmentée de 2 cases et leurs temps de rechargement est réduit à 0. Octroie la capacité Mélange explosif (zone d'effet des grenades +1 case). Une grenade supplémentaire peut être équipée à l'emplacement réservé aux grenades." +LocLongDescription="Procure un bonus de +1 en Mobilité et de +5 en visée. Lancer une grenade ou utiliser un objet ne met plus fin à votre tour. La portée de vos grenades est augmentée de 3 cases et leurs temps de rechargement est réduit à 0. Octroie la capacité Mélange explosif (zone d'effet des grenades +1 case). Une grenade supplémentaire peut être équipée à l'emplacement réservé aux grenades." +LocHelpText="Procure un bonus de +1 en Mobilité et de +5 en visée. Lancer une grenade ou utiliser un objet ne met plus fin à votre tour. La portée de vos grenades est augmentée de 3 cases et leurs temps de rechargement est réduit à 0. Octroie la capacité Mélange explosif (zone d'effet des grenades +1 case). Une grenade supplémentaire peut être équipée à l'emplacement réservé aux grenades." LocPromotionPopupText=" Cette capacité octroie la capacité Mélange explosif, et ne peut donc pas être combinée avec cette capacité.
" ; End translated (3) @@ -7070,14 +7069,7 @@ LocLongDescription="Une forme supérieure de Vigilance. Plutôt que de tirer aut LocHelpText="Une forme supérieure de Vigilance. Plutôt que de tirer automatiquement, effectue n'importe quelle action simple. Action gratuite." LocPromotionPopupText=" Une forme supérieure de Vigilance. Plutôt que de tirer automatiquement, effectue n'importe quelle action simple. Action gratuite.
Certaines actions, telles que Vigilance, ne sont pas disponibles lors d'une Interruption.
Temps de rechargement de tour(s)." -[ArcWave_LW X2AbilityTemplate] -LocFriendlyName="Taillade" -LocLongDescription="Les attaques de mêlée ont une chance d'étourdir ou de désorienter leurs cibles. Déclenche la capacité Élan et génère de la concentration (quelque soit le résultat de l'attaque: succès, égratignure ou échec)." -LocHelpText="Les attaques de mêlée ont une chance d'étourdir ou de désorienter leurs cibles. Déclenche la capacité Élan et génère de la concentration (quelque soit le résultat de l'attaque: succès, égratignure ou échec)." -LocPromotionPopupText=" La capacité Taillade constitue la principale façon pour un Templier de générer de la concentration.
L'utilisation de Taillade déclenche la capacité Élan, qui octroie au Templier une action de déplacement bonus.
Taillade a % de chances par point de concentration d'étourdir sa cible. Les unités étourdies de cette façon sont également repoussées.
Taillade a % de chances par point de concentration de désorienter sa cible.
" - - -[ArcWavePassive_LW X2AbilityTemplate] +[ArcWavePassive X2AbilityTemplate] LocFriendlyName="Vague arquée" LocLongDescription="La Taillade génère une vague d'énergie psionique dans la direction de l'attaque. La Vague arquée n'affecte pas la cible de la Taillade originale. Les versions améliorées des gantelets augmentent les dégâts infligés par cet effet." LocHelpText="La Taillade génère une vague d'énergie psionique dans la direction de l'attaque. La Vague arquée n'affecte pas la cible de la Taillade originale." diff --git a/LongWarOfTheChosen/Localization/XComGame.int b/LongWarOfTheChosen/Localization/XComGame.int index fe80d7486..41d8a4be1 100644 Binary files a/LongWarOfTheChosen/Localization/XComGame.int and b/LongWarOfTheChosen/Localization/XComGame.int differ diff --git a/LongWarOfTheChosen/Localization/XComGame.rus b/LongWarOfTheChosen/Localization/XComGame.rus index 8995c163d..6e7e092a3 100644 --- a/LongWarOfTheChosen/Localization/XComGame.rus +++ b/LongWarOfTheChosen/Localization/XComGame.rus @@ -5531,8 +5531,7 @@ LocPromotionPopupText=" Уровень концентрации 4: ур LocPromotionPopupText=" Храмовники начинают миÑÑию более Ñлабыми по Ñравнению Ñ Ð¿Ñ€Ð¾Ñ‡Ð¸Ð¼Ð¸ бойцами, но могут радикально уÑилить ÑÐµÐ±Ñ Ð·Ð° Ñчет Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ†ÐµÐ½Ñ‚Ñ€Ð°Ñ†Ð¸Ð¸.
ÐšÐ¾Ð½Ñ†ÐµÐ½Ñ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð°ÐºÐ°Ð¿Ð»Ð¸Ð²Ð°ÐµÑ‚ÑÑ Ð·Ð° Ñчет рукопашных атак врага Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ перчаток(заÑчитываютÑÑ Ð´Ð°Ð¶Ðµ промахи).
" ; LWOTC Needs Translation (3) -[Rend_LW X2AbilityTemplate] -LocFriendlyName="Разрыв" +[Rend X2AbilityTemplate] LocLongDescription="Рукопашные атаки, могут оглушить или дезориентировать врага. Ðктивируют ÑпоÑобноÑÑ‚ÑŒ \"ИнерциÑ\" и дают концентрацию." LocHelpText="Рукопашные атаки, могут оглушить или дезориентировать врага. Ðктивируют ÑпоÑобноÑÑ‚ÑŒ \"ИнерциÑ\" и дают концентрацию." LocPromotionPopupText=" Эта ÑпоÑобноÑÑ‚ÑŒ - оÑновной метод Храмовников Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° концентрации.
ПоÑле рукопашного удара Храмовник получает \"Инерцию\", дающую дейÑтвие движениÑ. ИÑпользуйте, чтобы вернутьÑÑ Ð² укрытие.
СпоÑобноÑÑ‚ÑŒ имеет %-ный ÑˆÐ°Ð½Ñ Ð½Ð° оглушение за единицу концентрации. Оглушенные цели отбраÑываютÑÑ.
СпоÑобноÑÑ‚ÑŒ имеет %-ный ÑˆÐ°Ð½Ñ Ð´ÐµÐ·Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ цель за единицу концентрации.
" @@ -6230,8 +6229,8 @@ LocFlyOverText="ЯроÑÑ‚ÑŒ крови" [YouCannotHide_LW X2AbilityTemplate] LocFriendlyName="Тебе не ÑкрытьÑÑ" -LocHelpText="Ð‘Ð¾Ð½ÑƒÑ +30% к меткоÑти оÑновного оружиÑ." -LocLongDescription="Ð‘Ð¾Ð½ÑƒÑ +30% к меткоÑти оÑновного оружиÑ." +LocHelpText="Ð‘Ð¾Ð½ÑƒÑ +100% к меткоÑти оÑновного оружиÑ." +LocLongDescription="Ð‘Ð¾Ð½ÑƒÑ +100% к меткоÑти оÑновного оружиÑ." LocFlyOverText="Беги." [RebelHPUpgrade_T1 X2AbilityTemplate] @@ -6313,8 +6312,8 @@ LocFlyOverText="Метка Ñмерти" [Fatality_LW X2AbilityTemplate] LocFriendlyName="Фаталити" -LocLongDescription="Ð‘Ð¾Ð½ÑƒÑ +100% точноÑти и критичеÑкого Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð² целей Ñо здоровьем меньше % (оружие: )" -LocHelpText="Ð‘Ð¾Ð½ÑƒÑ +100% точноÑти и критичеÑкого Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð² целей Ñо здоровьем меньше % (оружие: )" +LocLongDescription="Ð‘Ð¾Ð½ÑƒÑ +100% точноÑти и критичеÑкого Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð² целей Ñо здоровьем меньше 35% (оружие: )" +LocHelpText="Ð‘Ð¾Ð½ÑƒÑ +100% точноÑти и критичеÑкого Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¸Ð² целей Ñо здоровьем меньше 35% (оружие: )" LocFlyOverText="Фаталити" [Vampirism_LW X2AbilityTemplate] @@ -6368,7 +6367,7 @@ LocFlyOverText="Ð ÐµÐ°ÐºÑ†Ð¸Ñ Ð˜Ð·Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾" ; End Translated ; LWOTC Translated (2) -[ChosenImmunities X2AbilityTemplate] +[ChosenImmunitiesPassive X2AbilityTemplate] LocFriendlyName="ÐеуÑзвимоÑÑ‚ÑŒ Избранного" LocLongDescription="Избранный неуÑзвим к оглушению, дезориентации, заморозке и имеет 50% штраф от ÑƒÐ²ÐµÑ‡ÑŒÑ Ð²Ð¼ÐµÑто 100%." LocHelpText="Избранный неуÑзвим к оглушению, дезориентации, заморозке и имеет 50% штраф от ÑƒÐ²ÐµÑ‡ÑŒÑ Ð²Ð¼ÐµÑто 100%." @@ -6415,9 +6414,9 @@ LocHelpText="Уменьшает Ð±Ð¾Ð½ÑƒÑ Ðº защите от укрытий ; LWOTC Translated [XComGameState_AdventChosen] KnowledgeGainFirstBullet[eChosenKnowledge_Start]="" -KnowledgeGainFirstBullet[eChosenKnowledge_Saboteur]="Избранный может уÑтроить диверÑию!" +KnowledgeGainFirstBullet[eChosenKnowledge_Saboteur]="Избранный обнаруживает деÑтельноÑÑ‚ÑŒ СопротивлениÑ!" KnowledgeGainFirstBullet[eChosenKnowledge_Sentinel]="Избранный уÑложнÑет Ñекретные заданиÑ!" -KnowledgeGainFirstBullet[eChosenKnowledge_Collector]="Избранный обнаруживает деÑтельноÑÑ‚ÑŒ СопротивлениÑ!" +KnowledgeGainFirstBullet[eChosenKnowledge_Collector]="Избранный может уÑтроить диверÑию!" KnowledgeGainFirstBullet[eChosenKnowledge_Raider]="Избранный может начать штурмовать ÐœÑтитель!" KnowledgeGainSecondBullet[eChosenKnowledge_Sentinel]="Избранный может инициировать Событие!" ; End Translated @@ -6467,8 +6466,8 @@ AbilityDescName="Огнемет ЧиÑтильщика" ;LWOTC translated [TotalCombat X2AbilityTemplate] LocFriendlyName="Ð’Ñе ÑредÑтва" -LocLongDescription="Дает +5 меткоÑти и +1 мобильноÑти. БроÑок гранаты или иÑпользование предмета больше не заканчивает ход, иÑпользование гранаты лишаетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ñ€Ñдки. К тому же, гранаты летÑÑ‚ на 2 клетки дальше, а Ñ€Ð°Ð´Ð¸ÑƒÑ Ð²Ð·Ñ€Ñ‹Ð²Ð° увеличиваетÑÑ Ð½Ð° 1. ДобавлÑет дополнительный Ñлот под гранату." -LocHelpText="Дает +5 меткоÑти и +1 мобильноÑти. БроÑок гранаты или иÑпользование предмета больше не заканчивает ход, иÑпользование гранаты лишаетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ñ€Ñдки. К тому же, гранаты летÑÑ‚ на 2 клетки дальше, а Ñ€Ð°Ð´Ð¸ÑƒÑ Ð²Ð·Ñ€Ñ‹Ð²Ð° увеличиваетÑÑ Ð½Ð° 1. ДобавлÑет дополнительный Ñлот под гранату." +LocLongDescription="Дает +5 меткоÑти и +1 мобильноÑти. БроÑок гранаты или иÑпользование предмета больше не заканчивает ход, иÑпользование гранаты лишаетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ñ€Ñдки. К тому же, гранаты летÑÑ‚ на 3 клетки дальше, а Ñ€Ð°Ð´Ð¸ÑƒÑ Ð²Ð·Ñ€Ñ‹Ð²Ð° увеличиваетÑÑ Ð½Ð° 1. ДобавлÑет дополнительный Ñлот под гранату." +LocHelpText="Дает +5 меткоÑти и +1 мобильноÑти. БроÑок гранаты или иÑпользование предмета больше не заканчивает ход, иÑпользование гранаты лишаетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ñ€Ñдки. К тому же, гранаты летÑÑ‚ на 3 клетки дальше, а Ñ€Ð°Ð´Ð¸ÑƒÑ Ð²Ð·Ñ€Ñ‹Ð²Ð° увеличиваетÑÑ Ð½Ð° 1. ДобавлÑет дополнительный Ñлот под гранату." LocPromotionPopupText=" ПозволÑет разнообразить боевые возможноÑти Ñолдата.
УдалÑет перезарÑдку иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€Ð°Ð½Ð°Ñ‚.
Ðе ÑуммируетÑÑ Ñ \"Гремучей ÑмеÑью\"." ;lwotc Translated(2) @@ -6485,13 +6484,7 @@ LocLongDescription="ОÑÐ¾Ð±Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° наблюдениÑ. ВмеÑто LocHelpText="ОÑÐ¾Ð±Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° наблюдениÑ. ВмеÑто ответного Ð¾Ð³Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑет 1 дейÑтвие. Свободное иÑпользование." LocPromotionPopupText=" Свободное дейÑтвие.
Ðекоторые ÑпоÑобноÑти недоÑтупны во Ð²Ñ€ÐµÐ¼Ñ \"ПрерываниÑ\", например, \"Ðаблюдение\".
Ходов до перезарÑдки: ." -[ArcWave_LW X2AbilityTemplate] -LocFriendlyName="Разрыв" -LocLongDescription="Рукопашные атаки, могут оглушить или дезориентировать врага. Ðктивируют ÑпоÑобноÑÑ‚ÑŒ \"ИнерциÑ\" и дают концентрацию." -LocHelpText="Рукопашные атаки, могут оглушить или дезориентировать врага. Ðктивируют ÑпоÑобноÑÑ‚ÑŒ \"ИнерциÑ\" и дают концентрацию." -LocPromotionPopupText=" Эта ÑпоÑобноÑÑ‚ÑŒ - оÑновной метод Храмовников Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° концентрации.
ПоÑле рукопашного удара Храмовник получает \"Инерцию\", дающую дейÑтвие движениÑ. ИÑпользуйте, чтобы вернутьÑÑ Ð² укрытие.
СпоÑобноÑÑ‚ÑŒ имеет %-ный ÑˆÐ°Ð½Ñ Ð½Ð° оглушение за единицу концентрации. Оглушенные цели отбраÑываютÑÑ.
СпоÑобноÑÑ‚ÑŒ имеет %-ный ÑˆÐ°Ð½Ñ Ð´ÐµÐ·Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ цель за единицу концентрации.
" - -[ArcWavePassive_LW X2AbilityTemplate] +[ArcWavePassive X2AbilityTemplate] LocFriendlyName="Волна" LocLongDescription="\"Разрыв\" Ñоздает волну из пÑи-Ñнергии по направлению атаки. Урон повышаетÑÑ Ñ ÑƒÐ»ÑƒÑ‡ÑˆÐµÐ½Ð¸ÐµÐ¼ перчаток." LocHelpText="\"Разрыв\" Ñоздает волну из пÑи-Ñнергии по направлению атаки." diff --git a/LongWarOfTheChosen/LongWarOfTheChosen.x2proj b/LongWarOfTheChosen/LongWarOfTheChosen.x2proj index 01f9e2c3f..b9828b011 100644 --- a/LongWarOfTheChosen/LongWarOfTheChosen.x2proj +++ b/LongWarOfTheChosen/LongWarOfTheChosen.x2proj @@ -1,1481 +1,1462 @@ - - - - 7a03fe19-6291-4b95-ba1c-3ec505fa8c0b - Long War of the Chosen - Long War overhaul mod for War of the Chosen (based on Long War 2) - 0 - lwotc - lwotc - {c6d96315-2f7d-4066-a9c7-6b9d4264751d} - - - $(MSBuildProjectDirectory)\..\ - $(SolutionRoot).scripts\ - $(ScriptsDir)X2ModBuildCommon\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Content - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Content - - - Content - - - Content - - - Content - - - Content - - - - - - - - - - - - - - - - - - - - - - - - - - - Content - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + 7a03fe19-6291-4b95-ba1c-3ec505fa8c0b + Long War of the Chosen + Long War overhaul mod for War of the Chosen (based on Long War 2) + 0 + lwotc + lwotc + {c6d96315-2f7d-4066-a9c7-6b9d4264751d} + + + $(MSBuildProjectDirectory)\..\ + $(SolutionRoot).scripts\ + $(ScriptsDir)X2ModBuildCommon\ + + + $(MSBuildProjectDirectory)\..\ + $(SolutionRoot).scripts\ + $(ScriptsDir)X2ModBuildCommon\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Content + + + Content + + + Content + + + Content + + + Content + + + + + + + + + + + + + + + + + + + + + + + + + + + Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LWUtilities/Classes/Helpers_LW.uc b/LongWarOfTheChosen/Src/LWUtilities/Classes/Helpers_LW.uc index 5dd3bbd8f..da1df6535 100644 --- a/LongWarOfTheChosen/Src/LWUtilities/Classes/Helpers_LW.uc +++ b/LongWarOfTheChosen/Src/LWUtilities/Classes/Helpers_LW.uc @@ -170,9 +170,7 @@ static final function bool IsModInstalled(coerce string DLCIdentifer) return default.cachedInstalledModNames.Find(DLCIdentifer) != INDEX_NONE; } - -static final function bool IsDLCInstalled(coerce string DLCIdentifer) - +static function bool IsDLCInstalled(coerce string DLCIdentifer) { local array DLCs; @@ -180,7 +178,7 @@ static final function bool IsDLCInstalled(coerce string DLCIdentifer) return DLCs.Find(DLCIdentifer) != INDEX_NONE; } -simulated final static function class LWCheckForRecursiveOverride(class ClassToCheck) +simulated static function class LWCheckForRecursiveOverride(class ClassToCheck) { local int idx; local class CurrentBestClass, TestClass; @@ -210,7 +208,7 @@ simulated final static function class LWCheckForRecursiveOverride(class< return CurrentBestClass; } -static final function XComGameState_BaseObject GetGameStateForObjectIDFromPendingOrHistory(int ObjectID, optional XComGameState NewGameState = none) +static function XComGameState_BaseObject GetGameStateForObjectIDFromPendingOrHistory(int ObjectID, optional XComGameState NewGameState = none) { local XComGameState_BaseObject GameStateObject; @@ -227,7 +225,7 @@ static final function XComGameState_BaseObject GetGameStateForObjectIDFromPendin return GameStateObject; } -static final function bool ShouldUseRadiusManagerForMission(String MissionType) +static function bool ShouldUseRadiusManagerForMission(String MissionType) { local XComGameStateHistory History; local XComGameState_BattleData BattleData; @@ -245,12 +243,12 @@ static final function bool ShouldUseRadiusManagerForMission(String MissionType) return default.RadiusManagerMissionTypes.Find(MissionType) >= 0; } -static final function bool YellowAlertEnabled() +static function bool YellowAlertEnabled() { return default.EnableYellowAlert; } -static final function bool DynamicEncounterZonesDisabled() +static function bool DynamicEncounterZonesDisabled() { return default.DisableDynamicEncounterZones; } @@ -258,7 +256,7 @@ static final function bool DynamicEncounterZonesDisabled() // Uses visibility rules to determine whether one unit is flanked by // another. This is because XCGS_Unit.IsFlanked() does not work for // squadsight attackers. -static final function bool IsUnitFlankedBy(XComGameState_Unit Target, XComGameState_Unit MaybeFlanker) +static function bool IsUnitFlankedBy(XComGameState_Unit Target, XComGameState_Unit MaybeFlanker) { local GameRulesCache_VisibilityInfo VisInfo; @@ -274,7 +272,7 @@ static final function bool IsUnitFlankedBy(XComGameState_Unit Target, XComGameSt // Copied from XComGameState_Unit::GetEnemiesInRange, except will retrieve all units on the alien team within // the specified range. -static final function GetAlienUnitsInRange(TTile kLocation, int nMeters, out array OutEnemies) +static function GetAlienUnitsInRange(TTile kLocation, int nMeters, out array OutEnemies) { local vector vCenter, vLoc; local float fDistSq; @@ -374,7 +372,7 @@ function static SoundCue FindDeathSound(String ObjectArchetypeName, int Index, o // Returns the game state object reference for the faction whose rival // Chosen controls the given region. -static final function XComGameState_ResistanceFaction GetFactionFromRegion(StateObjectReference RegionRef) +static function XComGameState_ResistanceFaction GetFactionFromRegion(StateObjectReference RegionRef) { local XComGameStateHistory History; local XComGameState_AdventChosen ChosenState; @@ -402,7 +400,7 @@ static final function XComGameState_ResistanceFaction GetFactionFromRegion(State return FactionState; } -static final function name GetChosenActiveMissionTag(XComGameState_AdventChosen ChosenState) +static function name GetChosenActiveMissionTag(XComGameState_AdventChosen ChosenState) { local name ChosenSpawningTag; @@ -418,7 +416,7 @@ static final function name GetChosenActiveMissionTag(XComGameState_AdventChosen // // Note that the HackDefenseChangeAmount should be negative for an actual reduction // in hack defense. -static final function X2Effect_PersistentStatChange CreateHackDefenseReductionStatusEffect( +static function X2Effect_PersistentStatChange CreateHackDefenseReductionStatusEffect( name EffectName, int HackDefenseChangeAmount, optional X2Condition Condition) @@ -435,7 +433,7 @@ static final function X2Effect_PersistentStatChange CreateHackDefenseReductionSt // Recursively prints all visualization actions in the tree that is rooted // at the given action. `iLayer` is the starting tree depth to start at. -static final function PrintActionRecursive(X2Action Action, int iLayer) +static function PrintActionRecursive(X2Action Action, int iLayer) { local X2Action ChildAction; @@ -454,7 +452,7 @@ static final function PrintActionRecursive(X2Action Action, int iLayer) // TODO: This check for active resistance orders is only needed for the transition // when introducing the second wave option on existing campaigns. We can't hide the // Resistance Orders UI while there are active cards. -static final function bool AreResistanceOrdersEnabled() +static function bool AreResistanceOrdersEnabled() { local XComGameState_HeadquartersResistance ResistanceHQ; local array AllFactions; @@ -489,7 +487,7 @@ static final function bool AreResistanceOrdersEnabled() // Resumes or pauses any Will recovery projects for the given unit when // updating their status. -static final function UpdateUnitWillRecoveryProject(XComGameState_Unit UnitState) +static function UpdateUnitWillRecoveryProject(XComGameState_Unit UnitState) { local XComGameState_HeadquartersProjectRecoverWill WillProject; local ESoldierStatus UnitStatus; @@ -511,12 +509,12 @@ static final function UpdateUnitWillRecoveryProject(XComGameState_Unit UnitState } } -static final function bool IsHQProjectPaused(XComGameState_HeadquartersProject ProjectState) +static function bool IsHQProjectPaused(XComGameState_HeadquartersProject ProjectState) { return ProjectState.CompletionDateTime.m_iYear == 9999; } -static final function XComGameState_HeadquartersProjectRecoverWill GetWillRecoveryProject(StateObjectReference UnitRef) +static function XComGameState_HeadquartersProjectRecoverWill GetWillRecoveryProject(StateObjectReference UnitRef) { local XComGameState_HeadquartersProjectRecoverWill WillProject; @@ -535,7 +533,7 @@ static final function XComGameState_HeadquartersProjectRecoverWill GetWillRecove // 1 - Easy // 2 - Moderate // 3 - Hard -static final function int GetCovertActionDifficulty(XComGameState_CovertAction ActionState) +static function int GetCovertActionDifficulty(XComGameState_CovertAction ActionState) { local CovertActionRisk Risk; @@ -560,7 +558,7 @@ static final function int GetCovertActionDifficulty(XComGameState_CovertAction A // Use this to determine whether a unit is interrupting another team's turn, // for example via Skirmisher's Battlelord or Skirmisher Interrupt. -static final function bool IsUnitInterruptingEnemyTurn(XComGameState_Unit UnitState) +static function bool IsUnitInterruptingEnemyTurn(XComGameState_Unit UnitState) { local XComGameState_BattleData BattleState; @@ -570,7 +568,7 @@ static final function bool IsUnitInterruptingEnemyTurn(XComGameState_Unit UnitSt // Adds the given unit to the XCom (primary) initiative group, ensuring that the unit // is controllable by the player. -static final function AddUnitToXComGroup(XComGameState NewGameState, XComGameState_Unit Unit, XComGameState_Player Player, optional XComGameStateHistory History = None) +function static AddUnitToXComGroup(XComGameState NewGameState, XComGameState_Unit Unit, XComGameState_Player Player, optional XComGameStateHistory History = None) { local XComGameState_Unit CurrentUnit; local XComGameState_AIGroup Group; @@ -597,7 +595,7 @@ static final function AddUnitToXComGroup(XComGameState NewGameState, XComGameSta // Copied from LW2's highlander. Since `XComGameState_Unit.HasSoldierAbility()` // does not take into account any mod additions to `XCGS_Unit.GetEarnedSoldierAbilities()`, // we need this custom implementation to check for officer abilities. -static final function bool HasSoldierAbility(XComGameState_Unit Unit, name Ability, optional bool bSearchAllAbilities = true) +static function bool HasSoldierAbility(XComGameState_Unit Unit, name Ability, optional bool bSearchAllAbilities = true) { local array EarnedAbilities; local SoldierClassAbilityType EarnedAbility; @@ -628,7 +626,7 @@ static final function bool HasSoldierAbility(XComGameState_Unit Unit, name Abili // // If no such soldier can be found, this returns an empty reference, i.e. the `ObjectID` // is zero. -static final function array FindAvailableCapturedSoldiers(optional XComGameState NewGameState = none) +static function array FindAvailableCapturedSoldiers(optional XComGameState NewGameState = none) { local XComGameState_HeadquartersAlien AlienHQ; local XComGameState_AdventChosen ChosenState; @@ -670,7 +668,7 @@ static final function array FindAvailableCapturedSoldiers( // Determines whether a mission or covert action has spawned that has the // given (captured) soldier as a reward. If there is such a mission or covert // action, even one that is in progress, this returns `true`. -static final function bool IsRescueMissionAvailableForSoldier(StateObjectReference CapturedSoldierRef, optional XComGameState NewGameState = none) +static function bool IsRescueMissionAvailableForSoldier(StateObjectReference CapturedSoldierRef, optional XComGameState NewGameState = none) { local XComGameStateHistory History; local XComGameState_ResistanceFaction FactionState; @@ -741,7 +739,7 @@ static final function bool IsRescueMissionAvailableForSoldier(StateObjectReferen // Determines whether the given covert action has the given reward // attached. Returns true if the covert action does have that reward. -static final function bool CovertActionHasReward(XComGameState_CovertAction ActionState, StateObjectReference RewardRef) +static function bool CovertActionHasReward(XComGameState_CovertAction ActionState, StateObjectReference RewardRef) { local XComGameStateHistory History; local XComGameState_Reward RewardState; @@ -760,7 +758,7 @@ static final function bool CovertActionHasReward(XComGameState_CovertAction Acti // be careful calling it on an ability that is already a free action, // since the behaviour may subtly change. For example if the original // ability point cost is zero and free, that will change to 1 and free. -static final function MakeFreeAction(X2AbilityTemplate Template) +static function MakeFreeAction(X2AbilityTemplate Template) { local X2AbilityCost Cost; @@ -775,7 +773,7 @@ static final function MakeFreeAction(X2AbilityTemplate Template) } } -static final function RemoveAbilityTargetEffects(X2AbilityTemplate Template, name EffectClass) +static function RemoveAbilityTargetEffects(X2AbilityTemplate Template, name EffectClass) { local int i; for (i = Template.AbilityTargetEffects.Length - 1; i >= 0; i--) @@ -787,7 +785,7 @@ static final function RemoveAbilityTargetEffects(X2AbilityTemplate Template, nam } } -static final function RemoveAbilityShooterEffects(X2AbilityTemplate Template, name EffectClass) +static function RemoveAbilityShooterEffects(X2AbilityTemplate Template, name EffectClass) { local int i; for (i = Template.AbilityShooterEffects.Length - 1; i >= 0; i--) @@ -799,7 +797,7 @@ static final function RemoveAbilityShooterEffects(X2AbilityTemplate Template, na } } -static final function RemoveAbilityShooterConditions(X2AbilityTemplate Template, name EffectClass) +static function RemoveAbilityShooterConditions(X2AbilityTemplate Template, name EffectClass) { local int i; for (i = Template.AbilityShooterConditions.Length - 1; i >= 0; i--) @@ -811,7 +809,7 @@ static final function RemoveAbilityShooterConditions(X2AbilityTemplate Template, } } -static final function RemoveAbilityTargetConditions(X2AbilityTemplate Template, name EffectClass) +static function RemoveAbilityTargetConditions(X2AbilityTemplate Template, name EffectClass) { local int i; for (i = Template.AbilityTargetConditions.Length - 1; i >= 0; i--) @@ -823,7 +821,7 @@ static final function RemoveAbilityTargetConditions(X2AbilityTemplate Template, } } -static final function RemoveAbilityMultiTargetEffects(X2AbilityTemplate Template, name EffectClass) +static function RemoveAbilityMultiTargetEffects(X2AbilityTemplate Template, name EffectClass) { local int i; for (i = Template.AbilityMultiTargetEffects.Length - 1; i >= 0; i--) @@ -835,7 +833,7 @@ static final function RemoveAbilityMultiTargetEffects(X2AbilityTemplate Template } } -static final function bool AlwaysFail() +static function bool AlwaysFail() { return false; } diff --git a/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Ability_LWAlienAbilities.uc b/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Ability_LWAlienAbilities.uc index d8b47212b..ea89f3b79 100644 --- a/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Ability_LWAlienAbilities.uc +++ b/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Ability_LWAlienAbilities.uc @@ -1125,7 +1125,7 @@ static function X2AbilityTemplate AddFireOnDeathAbility() local X2AbilityTrigger_EventListener Trigger; `CREATE_X2ABILITY_TEMPLATE(Template, 'FireOnDeath'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityIgnition"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityIgnition"; Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; diff --git a/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2EventListener_AlienCustomization.uc b/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2EventListener_AlienCustomization.uc index bdcbb33a5..f6e0ea80e 100644 --- a/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2EventListener_AlienCustomization.uc +++ b/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2EventListener_AlienCustomization.uc @@ -241,6 +241,7 @@ static function CustomizeAliens_BuildVisualization(XComGameState VisualizeGameSt static function EventListenerReturn OnUnitShownInBestiary( Object EventData, Object EventSource, XComGameState GameState, Name EventID, Object CallbackData) { local XComGameState NewGameState; + local XComGameStateContext_ChangeContainer ChangeContainer; local XComGameState_Unit_AlienCustomization AlienCustomization; local XComGameState_Unit UnitState, UpdatedUnitState; local LWUnitVariation UnitVariation; diff --git a/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Item_LWAlienWeapons.uc b/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Item_LWAlienWeapons.uc index 693043e9f..5696df3ec 100644 --- a/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Item_LWAlienWeapons.uc +++ b/LongWarOfTheChosen/Src/LW_AlienPack_Integrated/Classes/X2Item_LWAlienWeapons.uc @@ -470,7 +470,7 @@ static function X2DataTemplate CreateTemplate_Sidewinder_WPN(name TemplateName) Template.ItemCat = 'weapon'; Template.WeaponCat = 'smg'; Template.WeaponTech = 'beam'; - Template.strImage = "img:///LWSidewinderSMG.LWBeamSMG_Common"; + Template.strImage = "img:///LWSidewinderSMG.Textures.LWBeamSMG_Common"; Template.RemoveTemplateAvailablility(Template.BITFIELD_GAMEAREA_Multiplayer); //invalidates multiplayer availability Template.RangeAccuracy = class'X2Item_SMGWeapon'.default.MIDSHORT_CONVENTIONAL_RANGE; diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_ReaperAbilitySet_LW.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_ReaperAbilitySet_LW.uc index d51465b69..83a055dc7 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_ReaperAbilitySet_LW.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_ReaperAbilitySet_LW.uc @@ -47,7 +47,6 @@ static function array CreateTemplates() Templates.AddItem(AddClaymoreDisorient()); Templates.AddItem(AddBloodTrailBleedingAbility()); Templates.AddItem(AddDisablingShot()); - Templates.AddItem(AddDisablingShotSnapShot()); Templates.AddItem(AddDisablingShotCritRemoval()); Templates.AddItem(AddDemolitionist()); Templates.AddItem(AddSilentKillerCooldownReduction()); @@ -68,7 +67,7 @@ static function X2AbilityTemplate AddLingeringShadow() { local X2AbilityTemplate Template; - Template = PurePassive('LingeringShadow', "img:///UILibrary_LWOTC.PerkIcons.UIPerk_LingeringShadow", false); + Template = PurePassive('LingeringShadow', "img:///UILibrary_LW_Overhaul.PerkIcons.UIPerk_LingeringShadow", false); Template.AdditionalAbilities.AddItem('LingeringShadowTrigger'); return Template; @@ -83,7 +82,7 @@ static function X2AbilityTemplate AddLingeringShadowTrigger() `CREATE_X2ABILITY_TEMPLATE(Template, 'LingeringShadowTrigger'); - Template.IconImage = "img:///UILibrary_LWOTC.PerkIcons.UIPerk_LingeringShadow"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.PerkIcons.UIPerk_LingeringShadow"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -127,7 +126,7 @@ static function X2AbilityTemplate AddRemoveShadowOnConcealmentLostTrigger() `CREATE_X2ABILITY_TEMPLATE(Template, 'RemoveShadowOnConcealmentLostTrigger'); - Template.IconImage = "img:///UILibrary_LWOTC.PerkIcons.UIPerk_LingeringShadow"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.PerkIcons.UIPerk_LingeringShadow"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -459,7 +458,7 @@ static function X2AbilityTemplate AddDisablingShot() local X2AbilityTemplate Template; local X2AbilityCost_Ammo AmmoCost; local X2AbilityCost_ActionPoints ActionPointCost; - local X2AbilityCooldown_Shared Cooldown; + local X2AbilityCooldown Cooldown; local X2AbilityToHitCalc_StandardAim ToHitCalc; local X2Condition_Visibility VisibilityCondition; local X2Effect_DisablingShotStunned StunEffect; @@ -468,114 +467,10 @@ static function X2AbilityTemplate AddDisablingShot() local X2Condition_UnitType ImmuneUnitCondition; `CREATE_X2ABILITY_TEMPLATE (Template, 'DisablingShot'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityElectroshock"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityElectroshock"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_HideIfOtherAvailable; - Template.HideIfAvailable.AddItem('DisablingShotSnapShot'); - Template.DisplayTargetHitChance = true; - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; - Template.CinescriptCameraType = "StandardGunFiring"; - Template.TargetingMethod = class'X2TargetingMethod_OverTheShoulder'; - Template.bCrossClassEligible = false; - Template.bUsesFiringCamera = true; - Template.bPreventsTargetTeleport = false; - Template.Hostility = eHostility_Offensive; - - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); - Template.AbilityTargetStyle = default.SimpleSingleTarget; - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); - Template.AddShooterEffectExclusions(); - Template.ActivationSpeech = 'Reaper'; - Template.AdditionalAbilities.AddItem('DisablingShotCritRemoval'); - - VisibilityCondition = new class'X2Condition_Visibility'; - VisibilityCondition.bRequireGameplayVisible = true; - VisibilityCondition.bAllowSquadsight = true; - Template.AbilityTargetConditions.AddItem(VisibilityCondition); - - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); - Template.AssociatedPassives.AddItem('HoloTargeting'); - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.bAllowAmmoEffects = true; - - StunEffect = CreateDisablingShotStunnedEffect(default.DisablingShotBaseStunActions); - StunEffect.BonusStunActionsOnCrit = default.DisablingShotCritStunActions; - Template.AddTargetEffect(StunEffect); - - ActionPointCost = new class 'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 0; - ActionPointCost.bAddWeaponTypicalCost = true; - ActionPointCost.bConsumeAllPoints = true; - Template.AbilityCosts.AddItem(ActionPointCost); - - // Can't target dead; Can't target friendlies - UnitPropertyCondition = new class'X2Condition_UnitProperty'; - UnitPropertyCondition.ExcludeRobotic = false; - UnitPropertyCondition.ExcludeOrganic = false; - UnitPropertyCondition.ExcludeDead = true; - UnitPropertyCondition.ExcludeFriendlyToSource = true; - UnitPropertyCondition.RequireWithinRange = true; - Template.AbilityTargetConditions.AddItem(UnitPropertyCondition); - - ImmuneUnitCondition = new class'X2Condition_UnitType'; - ImmuneUnitCondition.ExcludeTypes.AddItem('PsiZombie'); - ImmuneUnitCondition.ExcludeTypes.AddItem('AdvPsiWitchM2'); - ImmuneUnitCondition.ExcludeTypes.AddItem('AdvPsiWitchM3'); - Template.AbilityTargetConditions.AddItem(ImmuneUnitCondition); - - SuppressedCondition = new class'X2Condition_UnitEffects'; - SuppressedCondition.AddExcludeEffect(class'X2Effect_Suppression'.default.EffectName, 'AA_UnitIsSuppressed'); - SuppressedCondition.AddExcludeEffect(class'X2Effect_AreaSuppression'.default.EffectName, 'AA_UnitIsSuppressed'); - Template.AbilityShooterConditions.AddItem(SuppressedCondition); - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Cooldown = new class'X2AbilityCooldown_Shared'; - Cooldown.iNumTurns = default.DisablingShotCooldown; - Cooldown.SharingCooldownsWith.AddItem('DisablingShotSnapShot'); - Template.AbilityCooldown = Cooldown; - - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = default.DisablingShotAmmoCost; - Template.AbilityCosts.AddItem(AmmoCost); - - Template.AdditionalAbilities.AddItem('DisablingShotSnapShot'); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - - return Template; -} - -static function X2AbilityTemplate AddDisablingShotSnapShot() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_Ammo AmmoCost; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2AbilityCooldown_Shared Cooldown; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2Condition_Visibility VisibilityCondition; - local X2Effect_DisablingShotStunned StunEffect; - local X2Condition_UnitEffects SuppressedCondition; - local X2Condition_UnitProperty UnitPropertyCondition; - local X2Condition_UnitType ImmuneUnitCondition; - local X2Condition_AbilityProperty AbilityCondition; - local X2Condition_UnitActionPoints ActionPointCondition; - - `CREATE_X2ABILITY_TEMPLATE (Template, 'DisablingShotSnapShot'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityElectroshock"; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; + Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; Template.DisplayTargetHitChance = true; Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; Template.CinescriptCameraType = "StandardGunFiring"; @@ -637,10 +532,9 @@ static function X2AbilityTemplate AddDisablingShotSnapShot() Template.AbilityToHitCalc = ToHitCalc; Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - Cooldown = new class'X2AbilityCooldown_Shared'; - Cooldown.iNumTurns = default.DisablingShotCooldown; - Cooldown.SharingCooldownsWith.AddItem('DisablingShot'); - Template.AbilityCooldown = Cooldown; + Cooldown = new class'X2AbilityCooldown'; + Cooldown.iNumTurns = default.DisablingShotCooldown; + Template.AbilityCooldown = Cooldown; AmmoCost = new class'X2AbilityCost_Ammo'; AmmoCost.iAmmo = default.DisablingShotAmmoCost; @@ -649,18 +543,6 @@ static function X2AbilityTemplate AddDisablingShotSnapShot() Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - AbilityCondition = new class'X2Condition_AbilityProperty'; - AbilityCondition.OwnerHasSoldierAbilities.AddItem('SnapShot'); - Template.AbilityShooterConditions.Additem(AbilityCondition); - - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.StandardActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.RunAndGunActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; @@ -748,7 +630,7 @@ static function X2AbilityTemplate AddDemolitionist() { local X2AbilityTemplate Template; - Template = PurePassive('Demolitionist', "img:///UILibrary_LWOTC.PerkIcons.UIPerk_Demolitionist", true); + Template = PurePassive('Demolitionist', "img:///UILibrary_LW_Overhaul.PerkIcons.UIPerk_Demolitionist", true); Template.PrerequisiteAbilities.AddItem('RemoteStart'); return Template; diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_TemplarAbilitySet_LW.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_TemplarAbilitySet_LW.uc index f5054f2b2..0377b1ae4 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_TemplarAbilitySet_LW.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Ability_TemplarAbilitySet_LW.uc @@ -50,12 +50,6 @@ static function array CreateTemplates() Templates.AddItem(DoubleRendFocus()); Templates.AddItem(DoubleRendFocusPassive()); Templates.AddItem(SingleRendFocus()); - Templates.AddItem(TemplarShield()); - Templates.AddItem(SoulShot()); - Templates.AddItem(class'XComGame.X2Ability_TemplarAbilitySet'.static.Rend('Rend_LW')); - Templates.AddItem(ArcWave_LW()); - Templates.AddItem(ArcWavePassive_LW()); - return Templates; } @@ -180,7 +174,7 @@ static function X2AbilityTemplate AddTemplarFleche() FlecheBonusDamageEffect = new class 'X2Effect_FlecheBonusDamage'; FlecheBonusDamageEffect.BonusDmgPerTile = default.BONUS_REND_DAMAGE_PER_TILE; FlecheBonusDamageEffect.MaxBonusDamage = default.MAX_REND_FLECHE_DAMAGE; - FlecheBonusDamageEffect.AbilityNames.AddItem('Rend_LW'); + FlecheBonusDamageEffect.AbilityNames.AddItem('Rend'); FlecheBonusDamageEffect.AbilityNames.AddItem('ArcWave'); FlecheBonusDamageEffect.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, false,,Template.AbilitySourceName); FlecheBonusDamageEffect.BuildPersistentEffect (1, true, false); @@ -428,7 +422,7 @@ static function X2AbilityTemplate AddTemplarTerror() { local X2AbilityTemplate Template; - Template = PurePassive('TemplarTerror', "img:///UILibrary_LWOTC.LW_AbilityNapalmX", false, 'eAbilitySource_Perk'); + Template = PurePassive('TemplarTerror', "img:///UILibrary_LW_Overhaul.LW_AbilityNapalmX", false, 'eAbilitySource_Perk'); Template.bCrossClassEligible = false; Template.PrerequisiteAbilities.AddItem('Volt'); return Template; @@ -498,7 +492,7 @@ static function X2AbilityTemplate AddApotheosis() Template.AbilitySourceName = 'eAbilitySource_Psionic'; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///IRIPerkPack_UILibrary_LW.UIPerk_Apotheosis"; + Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_andromedon_robotbattlesuit"; Template.ActivationSpeech = 'IonicStorm'; Template.Hostility = eHostility_Neutral; @@ -532,192 +526,40 @@ static function X2AbilityTemplate AddApotheosis() Effect.arrFocusModifiers.AddItem(CreateFocusLevelModifiers(2 * default.APOTHEOSIS_DODGE_BONUS, 2 * default.APOTHEOSIS_MOBILITY_BONUS)); Template.AddTargetEffect(Effect); - // State and Viz - Template.Hostility = eHostility_Neutral; - Template.bFrameEvenWhenUnitIsHidden = true; - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - //Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - Template.bShowActivation = false; // Don't show flyover, it obscures the fancy animation. - Template.CustomSelfFireAnim = 'HL_Apotheosis'; - Template.CustomFireAnim = 'HL_Apotheosis'; - Template.CinescriptCameraType = "Templar_Ghost"; - Template.bSkipExitCoverWhenFiring = true; Template.bSkipFireAction = false; - - return Template; -} - -static function X2AbilityTemplate TemplarShield() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2Effect_TemplarShieldAnimations AnimSetEffect; - local X2Effect_TemplarShield ShieldedEffect; - local X2Effect_TemplarShieldCritDefense AntiFlankEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'IRI_TemplarShield'); - - // Icon Setup - Template.IconImage = "img:///IRIPerkPack_UILibrary_LW.UIPerk_TemplarShield"; - Template.AbilitySourceName = 'eAbilitySource_Psionic'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CORPORAL_PRIORITY; - - // Shooter Conditions - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AddShooterEffectExclusions(); - - // Triggering and Targeting - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); - - // Costs - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 1; - //ActionPointCost.AllowedTypes.Length = 0; - ActionPointCost.AllowedTypes.AddItem('Momentum'); - ActionPointCost.bConsumeAllPoints = true; - Template.AbilityCosts.AddItem(ActionPointCost); - - // Effects - AnimSetEffect = new class'X2Effect_TemplarShieldAnimations'; - AnimSetEffect.BuildPersistentEffect(1, false, true,, eGameRule_PlayerTurnBegin); - AnimSetEffect.AddAnimSetWithPath("IRIParryReworkAnims.Anims.AS_BallisticShield"); - AnimSetEffect.AddAnimSetWithPath("IRIParryReworkAnims.Anims.AS_TemplarShield"); - Template.AddTargetEffect(AnimSetEffect); - - ShieldedEffect = new class'X2Effect_TemplarShield'; - ShieldedEffect.BuildPersistentEffect(1, false, true,, eGameRule_PlayerTurnBegin); - ShieldedEffect.SetDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, Template.GetMyHelpText(), Template.IconImage, true, , Template.AbilitySourceName); - ShieldedEffect.EffectName = class'X2Effect_TemplarShield'.default.EffectName; - Template.AddTargetEffect(ShieldedEffect); - - AntiFlankEffect = new class'X2Effect_TemplarShieldCritDefense'; - AntiFlankEffect.BuildPersistentEffect(1, false, true,, eGameRule_PlayerTurnBegin); - AntiFlankEffect.SetDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, Template.GetMyHelpText(), Template.IconImage, true, , Template.AbilitySourceName); - Template.AddShooterEffect(AntiFlankEffect); - - // State and Viz - Template.Hostility = eHostility_Defensive; - Template.bFrameEvenWhenUnitIsHidden = true; - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; + Template.CustomFireAnim = 'HL_IonicStorm'; Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - Template.bShowActivation = false; // Don't show flyover, it obscures the fancy animation. - Template.CustomSelfFireAnim = 'HL_Shield_Extend'; - Template.CustomFireAnim = 'HL_Shield_Extend'; - Template.bSkipExitCoverWhenFiring = true; - Template.bSkipFireAction = false; - Template.OverrideAbilityAvailabilityFn = TemplarShield_OverrideAbilityAvailability; + Template.BuildVisualizationFn = Apotheosis_BuildVisualization; - Template.OverrideAbilities.AddItem('ParryActivate'); - Template.OverrideAbilities.AddItem('Parry'); - Template.DefaultSourceItemSlot = eInvSlot_PrimaryWeapon; + // Template.AdditionalAbilities.AddItem('MeditationPreparationPassive'); return Template; } -private static function TemplarShield_OverrideAbilityAvailability(out AvailableAction Action, XComGameState_Ability AbilityState, XComGameState_Unit OwnerState) +static function Apotheosis_BuildVisualization(XComGameState VisualizeGameState) { - if (Action.AvailableCode == 'AA_Success') - { - if (OwnerState.ActionPoints.Length == 1 && OwnerState.ActionPoints[0] == 'Momentum') - Action.ShotHUDPriority = class'UIUtilities_Tactical'.const.PARRY_PRIORITY; - } -} + local XComGameStateHistory History; + local XComGameStateContext_Ability Context; + local StateObjectReference InteractingUnitRef; + local VisualizationActionMetadata EmptyTrack, BuildTrack; + local X2Action_PlaySoundAndFlyOver SoundAndFlyover; + local XComGameState_Ability Ability; -static function X2AbilityTemplate SoulShot() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2Condition_UnitProperty TargetProperty; - local X2Effect_ApplyWeaponDamage WeaponDamageEffect; - local X2Condition_Visibility TargetVisibilityCondition; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityCost_Focus FocusCost; - `CREATE_X2ABILITY_TEMPLATE(Template, 'IRI_SoulShot'); - - // Icon Setup - Template.IconImage = "img:///IRIPerkPack_UILibrary_LW.UIPerk_SoulShot"; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - Template.AbilitySourceName = 'eAbilitySource_Psionic'; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_SQUADDIE_PRIORITY; - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Template.AbilityTargetStyle = default.SimpleSingleTarget; - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); + class'X2Ability'.static.TypicalAbility_BuildVisualization(VisualizeGameState); - // Shooter Conditions - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AddShooterEffectExclusions(); - - // Target Conditions - TargetProperty = new class'X2Condition_UnitProperty'; - //TargetProperty.ExcludeRobotic = true; - TargetProperty.FailOnNonUnits = true; - TargetProperty.TreatMindControlledSquadmateAsHostile = true; - Template.AbilityTargetConditions.AddItem(TargetProperty); - - TargetVisibilityCondition = new class'X2Condition_Visibility'; - TargetVisibilityCondition.bRequireGameplayVisible = true; - TargetVisibilityCondition.bAllowSquadsight = true; - Template.AbilityTargetConditions.AddItem(TargetVisibilityCondition); - - // Costs - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - ActionPointCost.bConsumeAllPoints = false; - ActionPointCost.iNumPoints = 1; - Template.AbilityCosts.AddItem(ActionPointCost); - - FocusCost = new class'X2AbilityCost_Focus'; - FocusCost.FocusAmount = 1; - Template.AbilityCosts.AddItem(FocusCost); - - // Effects - WeaponDamageEffect = new class'X2Effect_ApplyWeaponDamage'; - WeaponDamageEffect.bIgnoreBaseDamage = true; - WeaponDamageEffect.DamageTag = 'IRI_SoulShot'; - //WeaponDamageEffect.bBypassShields = true; - //WeaponDamageEffect.bIgnoreArmor = true; - Template.AddTargetEffect(WeaponDamageEffect); - Template.AddTargetEffect(new class'X2Effect_SoulShot_ArrowHit'); - - // State and Viz - Template.bShowActivation = false; - Template.CustomFireAnim = 'HL_SoulShot'; - Template.CustomFireKillAnim = 'HL_SoulShot'; - Template.CustomMovingFireAnim = 'HL_SoulShot'; - Template.CustomMovingFireKillAnim = 'HL_SoulShot'; - Template.CustomMovingTurnLeftFireAnim = 'HL_SoulShot'; - Template.CustomMovingTurnLeftFireKillAnim = 'HL_SoulShot'; - Template.CustomMovingTurnRightFireAnim = 'HL_SoulShot'; - Template.CustomMovingTurnRightFireKillAnim = 'HL_SoulShot'; - - - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; - Template.ActivationSpeech = 'IonicStorm'; - Template.CinescriptCameraType = "IRI_SoulShot"; - - Template.bFrameEvenWhenUnitIsHidden = true; - Template.Hostility = eHostility_Offensive; - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - - return Template; + History = `XCOMHISTORY; + Context = XComGameStateContext_Ability(VisualizeGameState.GetContext()); + Ability = XComGameState_Ability(History.GetGameStateForObjectID(Context.InputContext.AbilityRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1)); + InteractingUnitRef = Context.InputContext.SourceObject; + BuildTrack = EmptyTrack; + BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1); + BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID); + BuildTrack.VisualizeActor = History.GetVisualizer(InteractingUnitRef.ObjectID); + + SoundAndFlyover = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTree(BuildTrack, Context, false, BuildTrack.LastActionAdded)); + SoundAndFlyover.SetSoundAndFlyOverParameters(none, Ability.GetMyTemplate().LocFlyOverText, 'None', eColor_Good); } - static function FocusLevelModifiers CreateFocusLevelModifiers(int DodgeBonus, int MobilityBonus) { local FocusLevelModifiers FocusLevelModifiers; @@ -942,64 +784,6 @@ static function X2AbilityTemplate DoubleRendFocusPassive() return Template; } -static function X2AbilityTemplate ArcWave_LW() -{ - local X2AbilityTemplate Template; - local X2AbilityMultiTarget_Cone ConeMultiTarget; - - Template = Rend('ArcWave_LW'); - Template.OverrideAbilities.AddItem('Rend_LW'); - Template.TargetingMethod = class'X2TargetingMethod_ArcWave'; - Template.ActionFireClass = class'X2Action_Fire_Wave'; - - // These are all handled in the editor if you want to change them! -//BEGIN AUTOGENERATED CODE: Template Overrides 'ArcWave' - Template.bSkipMoveStop = false; - Template.bFrameEvenWhenUnitIsHidden = true; - Template.AbilitySourceName = 'eAbilitySource_Psionic'; - Template.CustomFireAnim = 'FF_ArcWave_MeleeA'; - Template.CustomFireKillAnim = 'FF_ArcWave_MeleeKillA'; - Template.CustomMovingFireAnim = 'MV_ArcWave_MeleeA'; - Template.CustomMovingFireKillAnim = 'MV_ArcWave_MeleeKillA'; - Template.CustomMovingTurnLeftFireAnim = 'MV_ArcWave_RunTurn90LeftMeleeA'; - Template.CustomMovingTurnLeftFireKillAnim = 'MV_ArcWave_RunTurn90LeftMeleeKillA'; - Template.CustomMovingTurnRightFireAnim = 'MV_ArcWave_RunTurn90RightMeleeA'; - Template.CustomMovingTurnRightFireKillAnim = 'MV_ArcWave_RunTurn90RightMeleeKillA'; - Template.ActivationSpeech = 'Rend'; - Template.CinescriptCameraType = "Templar_Rend"; - Template.bSkipExitCoverWhenFiring = false; -//END AUTOGENERATED CODE: Template Overrides 'ArcWave' - //Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; - //Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_Arcwave"; - - ConeMultiTarget = new class'X2AbilityMultiTarget_Cone'; - ConeMultiTarget.ConeEndDiameter = default.ArcWaveConeEndDiameterTiles * class'XComWorldData'.const.WORLD_StepSize; - ConeMultiTarget.ConeLength = default.ArcWaveConeLengthTiles * class'XComWorldData'.const.WORLD_StepSize; - ConeMultiTarget.fTargetRadius = Sqrt(Square(ConeMultiTarget.ConeEndDiameter / 2) + Square(ConeMultiTarget.ConeLength)) * class'XComWorldData'.const.WORLD_UNITS_TO_METERS_MULTIPLIER; - ConeMultiTarget.bExcludeSelfAsTargetIfWithinRadius = true; - ConeMultiTarget.bLockShooterZ = true; - Template.AbilityMultiTargetStyle = ConeMultiTarget; - - Template.AbilityMultiTargetConditions.AddItem(default.LivingHostileUnitOnlyProperty); - - Template.AddMultiTargetEffect(new class'X2Effect_ArcWaveMultiDamage'); - - return Template; -} - -static function X2AbilityTemplate ArcWavePassive_LW() -{ - local X2AbilityTemplate Template; - - Template = PurePassive('ArcWavePassive_LW', "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_Arcwave", , 'eAbilitySource_Psionic'); - - Template.AdditionalAbilities.AddItem('ArcWave_LW'); - Template.PrerequisiteAbilities.AddItem('Rend_LW'); - - return Template; -} - - defaultproperties { PanicImpairingAbilityName = "TemplarTerrorPanic" diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Action_TemplarShield_ApplyWeaponDamageToUnit.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Action_TemplarShield_ApplyWeaponDamageToUnit.uc deleted file mode 100644 index 8ca88edb2..000000000 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Action_TemplarShield_ApplyWeaponDamageToUnit.uc +++ /dev/null @@ -1,661 +0,0 @@ -class X2Action_TemplarShield_ApplyWeaponDamageToUnit extends X2Action_ApplyWeaponDamageToUnit; - -// A version of Damage Unit action does not play any animations and plays a different voiceover if the attack didn't cause HP damage. - -simulated function bool ShouldPlayAnimation() -{ - return false; -} - -// Same as original, just using different speech when not taking health damage. -simulated state Executing -{ - simulated event BeginState(name nmPrevState) - { - super.BeginState(nmPrevState); - - //Rumbles controller - Unit.CheckForLowHealthEffects(); - } - - //Returns the string we should use to call out damage - potentially using "Burning", "Poison", etc. instead of the default - simulated function string GetDamageMessage() - { - if (X2Effect_Persistent(DamageEffect) != none) - return X2Effect_Persistent(DamageEffect).FriendlyName; - - if (X2Effect_Persistent(OriginatingEffect) != None) - return X2Effect_Persistent(OriginatingEffect).FriendlyName; - - if (X2Effect_Persistent(AncestorEffect) != None) - return X2Effect_Persistent(AncestorEffect).FriendlyName; - - return ""; - } - - simulated function ShowDamageMessage(EWidgetColor SuccessfulAttackColor, EWidgetColor UnsuccessfulAttackColor) - { - local string UIMessage; - - UIMessage = GetDamageMessage(); - if (UIMessage == "") - UIMessage = class'XGLocalizedData'.default.HealthDamaged; - - if( m_iShredded > 0 ) - { - ShowShreddedMessage(SuccessfulAttackColor); - } - if( m_iMitigated > 0 ) - { - ShowMitigationMessage(UnsuccessfulAttackColor); - } - if(m_iShielded > 0) - { - ShowShieldedMessage(UnsuccessfulAttackColor); - } - if(m_iDamage > 0) - { - ShowHPDamageMessage(UIMessage, , SuccessfulAttackColor); - } - - // ADDED - if (m_iDamage == 0) - { - Unit.UnitSpeak('TakingFire'); - } - else // END OF ADDED - if( m_iMitigated > 0 && ShouldPlayArmorHitVO()) - { - Unit.UnitSpeak('ArmorHit'); - } - else if(m_iShielded > 0 || m_iDamage > 0) - { - Unit.UnitSpeak('TakingDamage'); - } - } - - simulated function ShowCritMessage(EWidgetColor SuccessfulAttackColor, EWidgetColor UnsuccessfulAttackColor) - { - Unit.UnitSpeak('CriticallyWounded'); - - if( m_iShredded > 0 ) - { - ShowShreddedMessage(SuccessfulAttackColor); - } - if( m_iMitigated > 0 ) - { - ShowMitigationMessage(UnsuccessfulAttackColor); - } - if(m_iShielded > 0) - { - ShowShieldedMessage(UnsuccessfulAttackColor); - } - if(m_iDamage > 0) - { - ShowHPDamageMessage(GetDamageMessage(), class'XGLocalizedData'.default.CriticalHit, SuccessfulAttackColor); - } - } - - simulated function ShowGrazeMessage(EWidgetColor SuccessfulAttackColor, EWidgetColor UnsuccessfulAttackColor) - { - if( m_iShredded > 0 ) - { - ShowShreddedMessage(SuccessfulAttackColor); - } - if( m_iMitigated > 0 ) - { - ShowMitigationMessage(UnsuccessfulAttackColor); - } - if(m_iShielded > 0) - { - ShowShieldedMessage(UnsuccessfulAttackColor); - } - if(m_iDamage > 0) - { - ShowHPDamageMessage(class'XGLocalizedData'.default.GrazeHit, , SuccessfulAttackColor); - } - - // ADDED - if (m_iDamage == 0) - { - Unit.UnitSpeak('TakingFire'); - } - else // END OF ADDED - if( m_iMitigated > 0 && ShouldPlayArmorHitVO()) - { - Unit.UnitSpeak('ArmorHit'); - } - else if(m_iShielded > 0 || m_iDamage > 0) - { - Unit.UnitSpeak('TakingDamage'); - } - } - - simulated function ShowHPDamageMessage(string UIMessage, optional string CritMessage, optional EWidgetColor DisplayColor = eColor_Bad) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), UIMessage, UnitPawn.m_eTeamVisibilityFlags, , m_iDamage, 0, CritMessage, DamageTypeName == 'Psi'? eWDT_Psi : -1, DisplayColor); - } - - simulated function ShowMitigationMessage(EWidgetColor DisplayColor) - { - local int CurrentArmor; - CurrentArmor = UnitState.GetArmorMitigationForUnitFlag(); - //The flyover shows the armor amount that exists after shred has been applied. - if (CurrentArmor > 0) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XGLocalizedData'.default.ArmorMitigation, UnitPawn.m_eTeamVisibilityFlags, , CurrentArmor, /*modifier*/, /*crit*/, eWDT_Armor, DisplayColor); - } - } - - simulated function ShowShieldedMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XGLocalizedData'.default.ShieldedMessage, UnitPawn.m_eTeamVisibilityFlags, , m_iShielded,,,, DisplayColor); - } - - simulated function ShowShreddedMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XGLocalizedData'.default.ShreddedMessage, UnitPawn.m_eTeamVisibilityFlags, , m_iShredded, , , eWDT_Shred, DisplayColor); - } - - simulated function ShowImmuneMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XLocalizedData'.default.UnitIsImmuneMsg, UnitPawn.m_eTeamVisibilityFlags, , , , , , DisplayColor); - } - - simulated function ShowMissMessage(EWidgetColor DisplayColor) - { - local String MissedMessage; - - MissedMessage = OriginatingEffect.OverrideMissMessage; - if( MissedMessage == "" ) - { - MissedMessage = class'XLocalizedData'.default.MissedMessage; - } - - if (m_iDamage > 0) - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), MissedMessage, UnitPawn.m_eTeamVisibilityFlags, , m_iDamage,,,, DisplayColor); - else if (!OriginatingEffect.IsA('X2Effect_Persistent')) //Persistent effects that are failing to cause damage are not noteworthy. - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), MissedMessage,,,,,,, DisplayColor); - } - - simulated function ShowCounterattackMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XLocalizedData'.default.CounterattackMessage,,,,,,, DisplayColor); - } - - simulated function ShowLightningReflexesMessage(EWidgetColor DisplayColor) - { - local XComGameState_HeadquartersXCom XComHQ; - local XComGameStateHistory History; - local string DisplayMessageString; - - History = `XCOMHISTORY; - XComHQ = XComGameState_HeadquartersXCom(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom')); - if( XComHQ.TacticalGameplayTags.Find('DarkEvent_LightningReflexes') != INDEX_NONE ) - { - DisplayMessageString = class'XLocalizedData'.default.DarkEvent_LightningReflexesMessage; - } - else - { - DisplayMessageString = class'XLocalizedData'.default.LightningReflexesMessage; - } - - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), DisplayMessageString, , , , , , , DisplayColor); - } - - simulated function ShowUntouchableMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XLocalizedData'.default.UntouchableMessage,,,,,,, DisplayColor); - } - - simulated function ShowParryMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XLocalizedData'.default.ParryMessage,,,,,,, DisplayColor); - } - - simulated function ShowDeflectMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XLocalizedData'.default.DeflectMessage,,,,,,, DisplayColor); - } - - simulated function ShowReflectMessage(EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'XLocalizedData'.default.ReflectMessage,,,,,,, DisplayColor); - } - - simulated function ShowFreeKillMessage(name AbilityName, EWidgetColor DisplayColor) - { - local X2AbilityTemplate Template; - local string KillMessage; - - KillMessage = class'XLocalizedData'.default.FreeKillMessage; - - if (AbilityName != '') - { - Template = class'XComGameState_Ability'.static.GetMyTemplateManager( ).FindAbilityTemplate( AbilityName ); - if ((Template != none) && (Template.LocFlyOverText != "")) - { - KillMessage = Template.LocFlyOverText; - } - } - - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), KillMessage, , , , , , eWDT_Repeater, DisplayColor); - } - - simulated function ShowSpecialDamageMessage(DamageModifierInfo SpecialMessage, EWidgetColor DisplayColor) - { - class'UIWorldMessageMgr'.static.DamageDisplay(m_vHitLocation, Unit.GetVisualizedStateReference(), class'Helpers'.static.GetMessageFromDamageModifierInfo(SpecialMessage),,,,,, (SpecialMessage.Value > 0) ? eWDT_Shred : eWDT_Armor, DisplayColor); - } - - - simulated function ShowAttackMessages() - { - local int i, SpecialDamageIndex; - local ETeam TargetUnitTeam; - local EWidgetColor SuccessfulAttackColor, UnsuccessfulAttackColor; - - if(!class'X2TacticalVisibilityHelpers'.static.IsUnitVisibleToLocalPlayer(UnitState.ObjectId, CurrentHistoryIndex)) - return; - - TargetUnitTeam = UnitState.GetTeam(); - if( TargetUnitTeam == eTeam_XCom || TargetUnitTeam == eTeam_Resistance ) - { - SuccessfulAttackColor = eColor_Bad; - UnsuccessfulAttackColor = eColor_Good; - } - else - { - SuccessfulAttackColor = eColor_Good; - UnsuccessfulAttackColor = eColor_Bad; - } - - if (HitResults.Length == 0 && DamageResults.Length == 0 && bWasHit) - { - // Must be damage from World Effects (Fire, Poison, Acid) - ShowDamageMessage(SuccessfulAttackColor, UnsuccessfulAttackColor); - } - else - { - //It seems that misses contain a hit result but no damage results. So fill in some zero / null damage result entries if there is a mismatch. - if(HitResults.Length > DamageResults.Length) - { - for( i = 0; i < HitResults.Length; ++i ) - { - if( class'XComGameStateContext_Ability'.static.IsHitResultMiss(HitResults[i])) - { - DamageResults.Insert(i, 1); - } - } - } - - if( bCombineFlyovers ) - { - m_iDamage = 0; - m_iMitigated = 0; - m_iShielded = 0; - m_iShredded = 0; - for( i = 0; i < HitResults.Length && i < DamageResults.Length; i++ ) // some abilities damage the same target multiple times - { - if( HitResults[i] == eHit_Success ) - { - m_iDamage += DamageResults[i].DamageAmount; - m_iMitigated += DamageResults[i].MitigationAmount; - m_iShielded += DamageResults[i].ShieldHP; - m_iShredded += DamageResults[i].Shred; - } - } - - ShowDamageMessage(SuccessfulAttackColor, UnsuccessfulAttackColor); - } - else - { - for( i = 0; i < HitResults.Length && i < DamageResults.Length; i++ ) // some abilities damage the same target multiple times - { - HitResult = HitResults[i]; - - m_iDamage = DamageResults[i].DamageAmount; - m_iMitigated = DamageResults[i].MitigationAmount; - m_iShielded = DamageResults[i].ShieldHP; - m_iShredded = DamageResults[i].Shred; - - if( DamageResults[i].bFreeKill ) - { - ShowFreeKillMessage( DamageResults[i].FreeKillAbilityName, SuccessfulAttackColor); - return; - } - - for( SpecialDamageIndex = 0; SpecialDamageIndex < DamageResults[i].SpecialDamageFactors.Length; ++SpecialDamageIndex ) - { - ShowSpecialDamageMessage(DamageResults[i].SpecialDamageFactors[SpecialDamageIndex], (DamageResults[i].SpecialDamageFactors[SpecialDamageIndex].Value > 0) ? SuccessfulAttackColor : UnsuccessfulAttackColor); - } - - if (DamageResults[i].bImmuneToAllDamage) - { - ShowImmuneMessage(UnsuccessfulAttackColor); - continue; - } - - switch( HitResult ) - { - case eHit_CounterAttack: - ShowCounterattackMessage(UnsuccessfulAttackColor); - break; - case eHit_LightningReflexes: - ShowLightningReflexesMessage(UnsuccessfulAttackColor); - break; - case eHit_Untouchable: - ShowUntouchableMessage(UnsuccessfulAttackColor); - break; - case eHit_Crit: - ShowCritMessage(SuccessfulAttackColor, UnsuccessfulAttackColor); - break; - case eHit_Graze: - ShowGrazeMessage(SuccessfulAttackColor, UnsuccessfulAttackColor); - break; - case eHit_Success: - ShowDamageMessage(SuccessfulAttackColor, UnsuccessfulAttackColor); - break; - case eHit_Parry: - ShowParryMessage(UnsuccessfulAttackColor); - break; - case eHit_Deflect: - ShowDeflectMessage(UnsuccessfulAttackColor); - break; - case eHit_Reflect: - ShowReflectMessage(UnsuccessfulAttackColor); - break; - default: - ShowMissMessage(UnsuccessfulAttackColor); - break; - } - } - } - } - } - - function bool SingleProjectileVolley() - { - local XGUnit DealerUnit; - - DealerUnit = XGUnit(DamageDealer); - - if (DealerUnit == none) // if melee is treated as a single volley, treat collateral damage as a single as well. - return true; - - // Jwats: Melee doesn't have a volley so treat no volley as a single volley - return DealerUnit.GetPawn().GetAnimTreeController().GetNumProjectileVolleys() <= 1; - } - - function bool AttackersAnimUsesWeaponVolleyNotify() - { - local array OutNotifies; - local array OutNotifyTimes; - local XGUnit DealerUnit; - - DealerUnit = XGUnit(DamageDealer); - - if (DealerUnit == none) - return false; - - DealerUnit.GetPawn().GetAnimTreeController().GetFireWeaponVolleyNotifies(OutNotifies, OutNotifyTimes); - return (OutNotifies.length > 0); - } - - function DoTargetAdditiveAnims() - { - local name TargetAdditiveAnim; - local CustomAnimParams CustomAnim; - - CustomAnim.Additive = true; - foreach TargetAdditiveAnims(TargetAdditiveAnim) - { - CustomAnim.AnimName = TargetAdditiveAnim; - UnitPawn.GetAnimTreeController().PlayAdditiveDynamicAnim(CustomAnim); - } - } - - function UnDoTargetAdditiveAnims() - { - local name TargetAdditiveAnim; - local CustomAnimParams CustomAnim; - - CustomAnim.Additive = true; - CustomAnim.TargetWeight = 0.0f; - foreach TargetAdditiveAnims(TargetAdditiveAnim) - { - CustomAnim.AnimName = TargetAdditiveAnim; - UnitPawn.GetAnimTreeController().PlayAdditiveDynamicAnim(CustomAnim); - } - } - -Begin: - if (!bHiddenAction) - { - GroupState = UnitState.GetGroupMembership(); - if( GroupState != None ) - { - for( ScanGroup = 0; ScanGroup < GroupState.m_arrMembers.Length; ++ScanGroup ) - { - ScanUnit = XGUnit(`XCOMHISTORY.GetVisualizer(GroupState.m_arrMembers[ScanGroup].ObjectID)); - if( ScanUnit != None ) - { - ScanUnit.VisualizedAlertLevel = eAL_Red; - ScanUnit.IdleStateMachine.CheckForStanceUpdateOnIdle(); - } - } - } - - if( bShowFlyovers ) - { - ShowAttackMessages(); - } - - if( bWasHit || m_iDamage > 0 || m_iMitigated > 0) // misses can deal damage - { - `PRES.m_kUnitFlagManager.RespondToNewGameState(Unit, StateChangeContext.GetLastStateInInterruptChain(), true); - - // The unit was hit but may be locked in a persistent CustomIdleOverrideAnim state - // Check to see if we need to temporarily suspend that to play a reaction - OverrideOldUnitState = XComGameState_Unit(Metadata.StateObject_OldState); - bDoOverrideAnim = class'X2StatusEffects'.static.GetHighestEffectOnUnit(OverrideOldUnitState, OverridePersistentEffectTemplate, true); - - OverrideAnimEffectString = ""; - if( bDoOverrideAnim ) - { - // Allow new animations to play - UnitPawn.GetAnimTreeController().SetAllowNewAnimations(true); - OverrideAnimEffectString = string(OverridePersistentEffectTemplate.EffectName); - } - - if (ShouldPlayAnimation()) - { - // Particle effects should only play when the animation plays. mdomowicz 2015_07_08 - // Update: if the attacker's animation uses AnimNotify_FireWeaponVolley, the hit effect will play - // via X2UnifiedProjectile, so in that case we should skip the hit effect here. mdomowicz 2015_07_29 - if (!AttackersAnimUsesWeaponVolleyNotify()) - { - if( SourceUnitState != None && SourceUnitState.IsUnitAffectedByEffectName(class'X2Effect_BloodTrail'.default.EffectName) && HitResult == eHit_Success ) - { - EffectHitEffectsOverride = eHit_Crit; - } - else - { - EffectHitEffectsOverride = HitResult; - } - UnitPawn.PlayHitEffects(m_iDamage, DamageDealer, m_vHitLocation, DamageTypeName, m_vMomentum, bIsUnitRuptured, HitResult); - } - - Unit.ResetWeaponsToDefaultSockets(); - AnimParams.AnimName = ComputeAnimationToPlay(OverrideAnimEffectString); - - if( AnimParams.AnimName != '' ) - { - AnimParams.PlayRate = GetMoveAnimationSpeed(); - PlayingSequence = UnitPawn.GetAnimTreeController().PlayFullBodyDynamicAnim(AnimParams); - } - - kPerkContent = XGUnit(DamageDealer) != none ? XGUnit(DamageDealer).GetPawn().GetPerkContent(string(AbilityTemplate.Name)) : none; - if( kPerkContent != none && kPerkContent.m_PerkData.TargetActivationAnim.PlayAnimation && kPerkContent.m_PerkData.TargetActivationAnim.AdditiveAnim ) - { - AnimParams.AnimName = class'XComPerkContent'.static.ChooseAnimationForCover(Unit, kPerkContent.m_PerkData.TargetActivationAnim); - UnitPawn.GetAnimTreeController().PlayAdditiveDynamicAnim(AnimParams); - } - DoTargetAdditiveAnims(); - } - else if( bMoving && RunningAction != None ) - { - RunningAction.TriggerRunFlinch(); - } - else - { - //`LOG("HurtAnim not playing", , 'XCom_Visualization'); - } - - if( !bGoingToDeathOrKnockback && !bSkipWaitForAnim && (PlayingSequence != none)) - { - if( Metadata.VisualizeActor.CustomTimeDilation < 1.0 ) - { - Sleep(PlayingSequence.AnimSeq.SequenceLength * PlayingSequence.Rate * Metadata.VisualizeActor.CustomTimeDilation); - } - else - { - FinishAnim(PlayingSequence); - } - bShouldContinueAnim = false; - } - - if( bDoOverrideAnim ) - { - // Turn off new animation playing - UnitPawn.GetAnimTreeController().SetAllowNewAnimations(false); - } - } - else - { - if (ShouldPlayAnimation()) - { - if(bCounterAttackAnim) - { - AnimParams.AnimName = 'HL_Counterattack'; - } - else - { - Unit.ResetWeaponsToDefaultSockets(); - - if( Unit.IsTurret() ) //@TODO - rmcfall/jbouscher - this selection may need to eventually be based on other factors, such as the current state of the unit - { - if( Unit.GetTeam() == eTeam_Alien ) - { - AnimParams.AnimName = 'NO_Flinch_Advent'; - } - else - { - AnimParams.AnimName = 'NO_Flinch_Xcom'; - } - } - else if( HitResult == eHit_Deflect || HitResult == eHit_Parry ) - { - AnimParams.AnimName = 'HL_Deflect'; - if( AbilityTemplate != None && AbilityTemplate.IsMelee() ) - { - AnimParams.AnimName = 'HL_DeflectMelee'; - } - // Jwats: No matter what we were doing, we should now just idle (don't peek stop) - Unit.IdleStateMachine.OverwriteReturnState('Idle'); - } - else if( HitResult == eHit_Reflect ) - { - AnimParams.AnimName = 'HL_ReflectStart'; - } - else - { - switch( Unit.m_eCoverState ) - { - case eCS_LowLeft: - case eCS_HighLeft: - AnimParams.AnimName = 'HL_Flinch'; - break; - case eCS_LowRight: - case eCS_HighRight: - AnimParams.AnimName = 'HR_Flinch'; - break; - case eCS_None: - // Jwats: No cover randomizes between the 2 animations - if( Rand(2) == 0 ) - { - AnimParams.AnimName = 'HL_Flinch'; - } - else - { - AnimParams.AnimName = 'HR_Flinch'; - } - break; - } - } - } - - PlayingSequence = UnitPawn.GetAnimTreeController().PlayFullBodyDynamicAnim(AnimParams); - DoTargetAdditiveAnims(); - } - else if( bMoving && RunningAction != None ) - { - RunningAction.TriggerRunFlinch(); - } - else - { - //`LOG("DodgeAnim not playing"); - } - - if( !bGoingToDeathOrKnockback && (PlayingSequence != none)) - { - if( Metadata.VisualizeActor.CustomTimeDilation < 1.0 ) - { - Sleep(PlayingSequence.AnimSeq.SequenceLength * PlayingSequence.Rate * Metadata.VisualizeActor.CustomTimeDilation); - } - else - { - FinishAnim(PlayingSequence); - } - bShouldContinueAnim = false; - } - - if (!bWasCounterAttack) - { - Unit.UnitSpeak('TakingFire'); - } - } - - if( !bMoving ) - { - if( PlayingSequence != None && !bGoingToDeathOrKnockback ) - { - Sleep(0.0f); - while( bShouldContinueAnim ) - { - PlayingSequence.ReplayAnim(); - FinishAnim(PlayingSequence); - bShouldContinueAnim = false; - Sleep(0.0f); // Wait to see if another projectile comes - } - } - else if( PlayingSequence != None && bGoingToDeathOrKnockback ) - { - //Only play the hit react if there is more than one projectile volley - if( !SingleProjectileVolley() ) - { - Sleep(HitReactDelayTimeToDeath * GetDelayModifier()); // Let the hit react play for a little bit before we CompleteAction to go to death - } - } - } - } - - kPerkContent = XGUnit(DamageDealer) != none ? XGUnit(DamageDealer).GetPawn().GetPerkContent(string(AbilityTemplate.Name)) : none; - if( kPerkContent != none && kPerkContent.m_PerkData.TargetActivationAnim.PlayAnimation && kPerkContent.m_PerkData.TargetActivationAnim.AdditiveAnim ) - { - AnimParams.AnimName = class'XComPerkContent'.static.ChooseAnimationForCover(Unit, kPerkContent.m_PerkData.TargetActivationAnim); - UnitPawn.GetAnimTreeController().RemoveAdditiveDynamicAnim(AnimParams); - } - UnDoTargetAdditiveAnims(); - - CompleteAction(); -} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2DownloadableContentInfo_LW_FactionBalance.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2DownloadableContentInfo_LW_FactionBalance.uc index d98e3db02..2c262a369 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2DownloadableContentInfo_LW_FactionBalance.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2DownloadableContentInfo_LW_FactionBalance.uc @@ -1,310 +1,250 @@ -//credit to AngelRane, NotSoLoneWolf, Udaya, and Grobobobo -class X2DownloadableContentInfo_LW_FactionBalance extends X2DownloadableContentInfo config (LW_FactionBalance); - -var config float REAPER_DETECTION_RANGE_REDUCTION; - -static event OnPostTemplatesCreated() -{ - IgnoreSuperConcealmentOnAllMissions(); - AllowTwoSoldiersFromEachFaction(); -} - -static function IgnoreSuperConcealmentOnAllMissions() -{ - local int i; - - for (i = 0; i < `TACTICALMISSIONMGR.arrMissions.length; i++) - { - `TACTICALMISSIONMGR.arrMissions[i].IgnoreSuperConcealmentDetection = true; - } -} - -//Copy pasted Realitymachina's code -static function AllowTwoSoldiersFromEachFaction() -{ - local X2RewardTemplate RewardTemplate; - local X2StrategyElementTemplateManager StratMgr; - StratMgr = class'X2StrategyElementTemplateManager'.static.GetStrategyElementTemplateManager(); - - RewardTemplate = X2RewardTemplate(StratMgr.FindStrategyElementTemplate('Reward_ExtraFactionSoldier')); - - if(RewardTemplate != none) - RewardTemplate.IsRewardAvailableFn = IsExtraSoldierAvailable; -} - -static function bool IsExtraSoldierAvailable(optional XComGameState NewGameState, optional StateObjectReference AuxRef) -{ - local int NumFactionSoldiers; - local XComGameState_ResistanceFaction FactionState; - - FactionState = class'X2StrategyElement_DefaultRewards'.static.GetFactionState(NewGameState, AuxRef); - - if (FactionState != none) - NumFactionSoldiers = FactionState.GetNumFactionSoldiers(NewGameState); - else - return false; - - return (FactionState.bMetXCom && NumFactionSoldiers > 0 && NumFactionSoldiers < FactionState.default.MaxHeroesPerFaction); -} - -/// -/// This method is run if the player loads a saved game that was created prior to this DLC / Mod being installed, and allows the -/// DLC / Mod to perform custom processing in response. This will only be called once the first time a player loads a save that was -/// create without the content installed. Subsequent saves will record that the content was installed. -/// -static event OnLoadedSavedGame() -{} - -/// -/// Called when the player starts a new campaign while this DLC / Mod is installed -/// -static event InstallNewCampaign(XComGameState StartState) -{} - -static function bool AbilityTagExpandHandler(string InString, out string OutString) -{ - local name Type; - local float TempFloat; - local int TempInt; - - Type = name(InString); - switch(Type) - { - case 'FOCUS4MOBILITY': - OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.FOCUS4MOBILITY); - return true; - case 'FOCUS4DODGE': - OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.FOCUS4DODGE); - return true; - case 'FOCUS4RENDDAMAGE': - OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.FOCUS4RENDDAMAGE); - return true; - case 'STUNSTRIKE_STUN_CHANCE': - OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.STUNSTRIKE_STUN_CHANCE); - return true; - case 'LingeringShadowDefenseBonus': - OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.LINGERING_DEFENSE); - return true; - case 'LingeringShadowDodgeBonus': - OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.LINGERING_DODGE); - return true; - case 'BLOOD_TRAIL_ANTIDODGE_BONUS': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.BLOOD_TRAIL_ANTIDODGE_BONUS); - return true; - case 'PALE_HORSE_BASE_CRIT': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.PALE_HORSE_BASE_CRIT); - return true; - case 'PALE_HORSE_PER_KILL_CRIT': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.PALE_HORSE_PER_KILL_CRIT); - return true; - case 'PALE_HORSE_MAX_CRIT': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.PALE_HORSE_MAX_CRIT); - return true; - case 'STING_RUPTURE': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.STING_RUPTURE); - return true; - case 'StingCharges': - OutString = string(class'X2Ability_ReaperAbilitySet'.default.StingCharges); - return true; - case 'CHARGE_BATTERY_CHARGES': - OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.CHARGE_BATTERY_CHARGES); - return true; - case 'RemoteStartCharges': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.REMOTE_START_CHARGES); - return true; - case 'DemolitionistExtraChargeCount': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.REMOTE_START_DEMOLITIONIST_CHARGES); - return true; - case 'DisablingShotStunActions': - OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.DisablingShotBaseStunActions); - return true; - case 'PARAMEDIC_BONUS_CHARGES': - OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.PARAMEDIC_BONUS_CHARGES); - return true; - case 'REND_THE_MARKED_CRIT': - OutString = string(class'X2Ability_ThrowingKnifeAbilitySet'.default.REND_THE_MARKED_CRIT); - return true; - case 'IMPERSONAL_EDGE_AIM': - OutString = string(class'X2Ability_ThrowingKnifeAbilitySet'.default.IMPERSONAL_EDGE_AIM); - return true; - case 'BLUESCREEN_KNIVES_PIERCE': - OutString = string(class'X2Ability_ThrowingKnifeAbilitySet'.default.BLUESCREEN_KNIVES_PIERCE); - return true; - case 'DisablingShotCritStunActions': - OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.DisablingShotCritStunActions); - return true; - case 'FULL_THROTTLE_DURATION': - OutString = string(class'X2LWModTemplate_SkirmisherAbilities'.default.FULL_THROTTLE_DURATION); - return true; - case 'RECKONING_LW_COOLDOWN': - OutString = string(class'X2Ability_SkirmisherAbilitySet_LW'.default.RECKONING_LW_COOLDOWN); - return true; - case 'RECKONING_LW_SLASH_COOLDOWN': - OutString = string(class'X2Ability_SkirmisherAbilitySet_LW'.default.RECKONING_LW_SLASH_COOLDOWN); - return true; - case 'REND_FLECHE_BONUS_DAMAGE_PER_TILES': - TempFloat = 1 / class'X2Ability_TemplarAbilitySet_LW'.default.BONUS_REND_DAMAGE_PER_TILE; - TempFloat = Round(TempFloat * 10.0) / 10.0; - TempInt = int(TempFloat); - if ( float(TempInt) ~= TempFloat) - { - OutString = string(TempInt); - } - else - { - OutString = Repl(string(TempFloat), "0", ""); - } - return true; - case 'MeditationFocusRecovery': - OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.MEDITATION_FOCUS_RECOVERY); - return true; - case 'OverchargeAimBonus': - OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.OVERCHARGE_AIM_BONUS); - return true; - case 'OverchargeCritBonus': - OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.OVERCHARGE_CRIT_BONUS); - return true; - case 'VoltDangerZoneBonus': - OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.VOLT_DANGER_ZONE_BONUS_RADIUS); - return true; - case 'ApotheosisMobilityBonus': - OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.APOTHEOSIS_MOBILITY_BONUS); - return true; - case 'ApotheosisDodgeBonus': - OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.APOTHEOSIS_DODGE_BONUS); - return true; - case 'ApotheosisDamageMultiplier': - OutString = string(int(class'X2Ability_TemplarAbilitySet_LW'.default.APOTHEOSIS_DAMAGE_MULTIPLIER * 100)); - return true; - case 'DEATH_DEALER_CRIT': - OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.DEATH_DEALER_CRIT); - return true; - case 'BANISH_HIT_MOD': - OutString = string(class'X2Effect_BanishHitMod'.default.BANISH_HIT_MOD * -1); - return true; - case 'GREATER_PADDING_CV': - OutString = string(class'X2Ability_ShieldAbilitySet'.default.GREATER_PADDING_CV); - return true; - case 'GREATER_PADDING_MG': - OutString = string(class'X2Ability_ShieldAbilitySet'.default.GREATER_PADDING_MG); - return true; - case 'GREATER_PADDING_BM': - OutString = string(class'X2Ability_ShieldAbilitySet'.default.GREATER_PADDING_BM); - return true; - case 'OVERRIDE_REDUCTION': - OutString = string(class'X2Effect_ManualOverride_LW'.default.OVERRIDE_REDUCTION); - return true; - case 'REFLEX_CRIT_DEF': - OutString = string(class'X2LWModTemplate_SkirmisherAbilities'.default.REFLEX_CRIT_DEF); - return true; - case 'BATTLEFIELD_AWARENESS_COOLDOWN': - OutString = string(class'X2Ability_SkirmisherAbilitySet_LW'.default.BATTLEFIELD_AWARENESS_COOLDOWN); - return true; - case 'JUDGEMENT_LW_APPLYCHANCE': - OutString = string(class'X2Ability_SkirmisherAbilitySet'.default.JUDGMENT_APPLYCHANCEATTACKVAL + class'X2AbilityToHitCalc_PanicCheck'.default.BaseValue); - return true; - case 'TERROR_STAT_CHECK_BASE_VALUE': - OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.TERROR_STAT_CHECK_BASE_VALUE); - return true; - } - - return false; -} - -static function bool AbilityTagExpandHandler_CH(string InString, out string OutString, Object ParseObj, Object StrategyParseObj, XComGameState GameState) -{ - local name Type; - local XComGameState_Ability AbilityState; - local X2AbilityTemplate AbilityTemplate; - local X2Effect_CloseEncounters CEEffect; - local int i; - local XComGameStateHistory History; - local XComGameState_Effect EffectState; - local XComGameState_Unit UnitState; - - Type = name(InString); - switch(Type) - { - case 'CLOSE_ENCOUNTERS_RANGE': - AbilityTemplate = X2AbilityTemplate(ParseObj); - if (AbilityTemplate == none) - { - AbilityState = XComGameState_Ability(ParseObj); - if (AbilityState != none) - AbilityTemplate = AbilityState.GetMyTemplate(); - } - if (AbilityTemplate != none) - { - for (i = 0; i < AbilityTemplate.AbilityTargetEffects.Length; i++) - { - CEEffect = X2Effect_CloseEncounters(AbilityTemplate.AbilityTargetEffects[i]); - if (CEEffect != none) - { - OutString = string(CEEffect.MaxTiles); - return true; - } - } - } - OutString = string(class'X2Effect_CloseEncounters'.default.MaxTiles); - return true; - case 'TEMPLAR_SHIELD_TAG': - - UnitState = XComGameState_Unit(StrategyParseObj); - if (UnitState == none) - { - History = `XCOMHISTORY; - EffectState = XComGameState_Effect(ParseObj); - if (EffectState != none) - { - UnitState = XComGameState_Unit(History.GetGameStateForObjectID(EffectState.ApplyEffectParameters.TargetStateObjectRef.ObjectID)); - } - else - { - AbilityState = XComGameState_Ability(ParseObj); - if (AbilityState != none) - { - UnitState = XComGameState_Unit(History.GetGameStateForObjectID(AbilityState.OwnerStateObject.ObjectID)); - } - } - } - if (UnitState == none) - return false; - - OutString = "" $ class'X2Effect_TemplarShield'.static.GetShieldStrength(UnitState, GameState) $ ""; - return true; - - default: - return false; - } -} - -static function string DLCAppendSockets(XComUnitPawn Pawn) -{ - local array NewSockets; - local SkeletalMeshSocket NewSocket; - - // ****************************************************************** - // SOUL SHOT - - // For playing the arrow particle effect when firing the soul bow - NewSocket = new class'SkeletalMeshSocket'; - NewSocket.SocketName = 'IRI_SoulBow_Arrow'; - NewSocket.BoneName = 'RHand'; - NewSocket.RelativeRotation.Pitch = -1183; - NewSocket.RelativeRotation.Yaw = -364; - NewSockets.AddItem(NewSocket); - - // For playing the "arrow stuck in body" particle effect when hit by the soul bow - NewSocket = new class'SkeletalMeshSocket'; - NewSocket.SocketName = 'IRI_SoulBow_Arrow_Hit'; - NewSocket.BoneName = 'Ribcage'; - NewSocket.RelativeRotation.Yaw = 16384; - NewSocket.RelativeRotation.Roll = -16384; - NewSockets.AddItem(NewSocket); - - // ****************************************************************** - - Pawn.Mesh.AppendSockets(NewSockets, true); - - return ""; -} \ No newline at end of file +//credit to AngelRane, NotSoLoneWolf, Udaya, and Grobobobo +class X2DownloadableContentInfo_LW_FactionBalance extends X2DownloadableContentInfo config (LW_FactionBalance); + +var config float REAPER_DETECTION_RANGE_REDUCTION; + +static event OnPostTemplatesCreated() +{ + IgnoreSuperConcealmentOnAllMissions(); + AllowTwoSoldiersFromEachFaction(); +} + +static function IgnoreSuperConcealmentOnAllMissions() +{ + local int i; + + for (i = 0; i < `TACTICALMISSIONMGR.arrMissions.length; i++) + { + `TACTICALMISSIONMGR.arrMissions[i].IgnoreSuperConcealmentDetection = true; + } +} + +//Copy pasted Realitymachina's code +static function AllowTwoSoldiersFromEachFaction() +{ + local X2RewardTemplate RewardTemplate; + local X2StrategyElementTemplateManager StratMgr; + StratMgr = class'X2StrategyElementTemplateManager'.static.GetStrategyElementTemplateManager(); + + RewardTemplate = X2RewardTemplate(StratMgr.FindStrategyElementTemplate('Reward_ExtraFactionSoldier')); + + if(RewardTemplate != none) + RewardTemplate.IsRewardAvailableFn = IsExtraSoldierAvailable; +} + +static function bool IsExtraSoldierAvailable(optional XComGameState NewGameState, optional StateObjectReference AuxRef) +{ + local int NumFactionSoldiers; + local XComGameState_ResistanceFaction FactionState; + + FactionState = class'X2StrategyElement_DefaultRewards'.static.GetFactionState(NewGameState, AuxRef); + + if (FactionState != none) + NumFactionSoldiers = FactionState.GetNumFactionSoldiers(NewGameState); + else + return false; + + return (FactionState.bMetXCom && NumFactionSoldiers > 0 && NumFactionSoldiers < FactionState.default.MaxHeroesPerFaction); +} + +/// +/// This method is run if the player loads a saved game that was created prior to this DLC / Mod being installed, and allows the +/// DLC / Mod to perform custom processing in response. This will only be called once the first time a player loads a save that was +/// create without the content installed. Subsequent saves will record that the content was installed. +/// +static event OnLoadedSavedGame() +{} + +/// +/// Called when the player starts a new campaign while this DLC / Mod is installed +/// +static event InstallNewCampaign(XComGameState StartState) +{} + +static function bool AbilityTagExpandHandler(string InString, out string OutString) +{ + local name Type; + local float TempFloat; + local int TempInt; + + Type = name(InString); + switch(Type) + { + case 'FOCUS4MOBILITY': + OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.FOCUS4MOBILITY); + return true; + case 'FOCUS4DODGE': + OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.FOCUS4DODGE); + return true; + case 'FOCUS4RENDDAMAGE': + OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.FOCUS4RENDDAMAGE); + return true; + case 'STUNSTRIKE_STUN_CHANCE': + OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.STUNSTRIKE_STUN_CHANCE); + return true; + case 'LingeringShadowDefenseBonus': + OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.LINGERING_DEFENSE); + return true; + case 'LingeringShadowDodgeBonus': + OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.LINGERING_DODGE); + return true; + case 'BLOOD_TRAIL_ANTIDODGE_BONUS': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.BLOOD_TRAIL_ANTIDODGE_BONUS); + return true; + case 'PALE_HORSE_BASE_CRIT': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.PALE_HORSE_BASE_CRIT); + return true; + case 'PALE_HORSE_PER_KILL_CRIT': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.PALE_HORSE_PER_KILL_CRIT); + return true; + case 'PALE_HORSE_MAX_CRIT': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.PALE_HORSE_MAX_CRIT); + return true; + case 'STING_RUPTURE': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.STING_RUPTURE); + return true; + case 'StingCharges': + OutString = string(class'X2Ability_ReaperAbilitySet'.default.StingCharges); + return true; + case 'CHARGE_BATTERY_CHARGES': + OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.CHARGE_BATTERY_CHARGES); + return true; + case 'RemoteStartCharges': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.REMOTE_START_CHARGES); + return true; + case 'DemolitionistExtraChargeCount': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.REMOTE_START_DEMOLITIONIST_CHARGES); + return true; + case 'DisablingShotStunActions': + OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.DisablingShotBaseStunActions); + return true; + case 'PARAMEDIC_BONUS_CHARGES': + OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.PARAMEDIC_BONUS_CHARGES); + return true; + case 'REND_THE_MARKED_CRIT': + OutString = string(class'X2Ability_ThrowingKnifeAbilitySet'.default.REND_THE_MARKED_CRIT); + return true; + case 'IMPERSONAL_EDGE_AIM': + OutString = string(class'X2Ability_ThrowingKnifeAbilitySet'.default.IMPERSONAL_EDGE_AIM); + return true; + case 'BLUESCREEN_KNIVES_PIERCE': + OutString = string(class'X2Ability_ThrowingKnifeAbilitySet'.default.BLUESCREEN_KNIVES_PIERCE); + return true; + case 'DisablingShotCritStunActions': + OutString = string(class'X2Ability_ReaperAbilitySet_LW'.default.DisablingShotCritStunActions); + return true; + case 'FULL_THROTTLE_DURATION': + OutString = string(class'X2LWModTemplate_SkirmisherAbilities'.default.FULL_THROTTLE_DURATION); + return true; + case 'RECKONING_LW_COOLDOWN': + OutString = string(class'X2Ability_SkirmisherAbilitySet_LW'.default.RECKONING_LW_COOLDOWN); + return true; + case 'RECKONING_LW_SLASH_COOLDOWN': + OutString = string(class'X2Ability_SkirmisherAbilitySet_LW'.default.RECKONING_LW_SLASH_COOLDOWN); + return true; + case 'REND_FLECHE_BONUS_DAMAGE_PER_TILES': + TempFloat = 1 / class'X2Ability_TemplarAbilitySet_LW'.default.BONUS_REND_DAMAGE_PER_TILE; + TempFloat = Round(TempFloat * 10.0) / 10.0; + TempInt = int(TempFloat); + if ( float(TempInt) ~= TempFloat) + { + OutString = string(TempInt); + } + else + { + OutString = Repl(string(TempFloat), "0", ""); + } + return true; + case 'MeditationFocusRecovery': + OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.MEDITATION_FOCUS_RECOVERY); + return true; + case 'OverchargeAimBonus': + OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.OVERCHARGE_AIM_BONUS); + return true; + case 'OverchargeCritBonus': + OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.OVERCHARGE_CRIT_BONUS); + return true; + case 'VoltDangerZoneBonus': + OutString = string(class'X2LWModTemplate_TemplarAbilities'.default.VOLT_DANGER_ZONE_BONUS_RADIUS); + return true; + case 'ApotheosisMobilityBonus': + OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.APOTHEOSIS_MOBILITY_BONUS); + return true; + case 'ApotheosisDodgeBonus': + OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.APOTHEOSIS_DODGE_BONUS); + return true; + case 'ApotheosisDamageMultiplier': + OutString = string(int(class'X2Ability_TemplarAbilitySet_LW'.default.APOTHEOSIS_DAMAGE_MULTIPLIER * 100)); + return true; + case 'DEATH_DEALER_CRIT': + OutString = string(class'X2LWModTemplate_ReaperAbilities'.default.DEATH_DEALER_CRIT); + return true; + case 'BANISH_HIT_MOD': + OutString = string(class'X2Effect_BanishHitMod'.default.BANISH_HIT_MOD * -1); + return true; + case 'GREATER_PADDING_CV': + OutString = string(class'X2Ability_ShieldAbilitySet'.default.GREATER_PADDING_CV); + return true; + case 'GREATER_PADDING_MG': + OutString = string(class'X2Ability_ShieldAbilitySet'.default.GREATER_PADDING_MG); + return true; + case 'GREATER_PADDING_BM': + OutString = string(class'X2Ability_ShieldAbilitySet'.default.GREATER_PADDING_BM); + return true; + case 'OVERRIDE_REDUCTION': + OutString = string(class'X2Effect_ManualOverride_LW'.default.OVERRIDE_REDUCTION); + return true; + case 'REFLEX_CRIT_DEF': + OutString = string(class'X2LWModTemplate_SkirmisherAbilities'.default.REFLEX_CRIT_DEF); + return true; + case 'BATTLEFIELD_AWARENESS_COOLDOWN': + OutString = string(class'X2Ability_SkirmisherAbilitySet_LW'.default.BATTLEFIELD_AWARENESS_COOLDOWN); + return true; + case 'JUDGEMENT_LW_APPLYCHANCE': + OutString = string(class'X2Ability_SkirmisherAbilitySet'.default.JUDGMENT_APPLYCHANCEATTACKVAL + class'X2AbilityToHitCalc_PanicCheck'.default.BaseValue); + return true; + case 'TERROR_STAT_CHECK_BASE_VALUE': + OutString = string(class'X2Ability_TemplarAbilitySet_LW'.default.TERROR_STAT_CHECK_BASE_VALUE); + return true; + } + + return false; +} + +static function bool AbilityTagExpandHandler_CH(string InString, out string OutString, Object ParseObj, Object StrategyParseOb, XComGameState GameState) +{ + local name Type; + local XComGameState_Ability AbilityState; + local X2AbilityTemplate AbilityTemplate; + local X2Effect_CloseEncounters CEEffect; + local int i; + + Type = name(InString); + switch(Type) + { + case 'CLOSE_ENCOUNTERS_RANGE': + AbilityTemplate = X2AbilityTemplate(ParseObj); + if (AbilityTemplate == none) + { + AbilityState = XComGameState_Ability(ParseObj); + if (AbilityState != none) + AbilityTemplate = AbilityState.GetMyTemplate(); + } + if (AbilityTemplate != none) + { + for (i = 0; i < AbilityTemplate.AbilityTargetEffects.Length; i++) + { + CEEffect = X2Effect_CloseEncounters(AbilityTemplate.AbilityTargetEffects[i]); + if (CEEffect != none) + { + OutString = string(CEEffect.MaxTiles); + return true; + } + } + } + OutString = string(class'X2Effect_CloseEncounters'.default.MaxTiles); + return true; + default: + return false; + } +} diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_DeflectNew.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_DeflectNew.uc index 2a0a77cc3..c47cd8d53 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_DeflectNew.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_DeflectNew.uc @@ -1,87 +1,87 @@ -//from AngelRane -class X2Effect_DeflectNew extends X2Effect_Persistent - config(LW_FactionBalance); - -var config int DeflectMinFocus, DeflectBaseChance, DeflectPerFocusChance; -var config int ReflectMinFocus, ReflectBaseChance; - -var config bool bCanDeflectMelee, bCanDeflectArea; - -function bool ChangeHitResultForTarget(XComGameState_Effect EffectState, XComGameState_Unit Attacker, XComGameState_Unit TargetUnit, XComGameState_Ability AbilityState, bool bIsPrimaryTarget, const EAbilityHitResult CurrentResult, out EAbilityHitResult NewHitResult) -{ - local UnitValue ParryUnitValue; - local int FocusLevel, Chance, RandRoll; - local X2AbilityToHitCalc_StandardAim AttackToHit; - - // don't respond to reaction fire - AttackToHit = X2AbilityToHitCalc_StandardAim(AbilityState.GetMyTemplate().AbilityToHitCalc); - if (AttackToHit != none && AttackToHit.bReactionFire) - return false; - - // don't change a natural miss - if (!class'XComGameStateContext_Ability'.static.IsHitResultHit(CurrentResult)) - return false; - - if (!TargetUnit.IsAbleToAct()) - return false; - - `log("X2Effect_Deflect::ChangeHitResultForTarget", , 'XCom_HitRolls'); - // check for parry first - if the unit value is set, then a parry is guaranteed, so do not check for deflect or reflect - if (TargetUnit.HasSoldierAbility('Parry') && TargetUnit.GetUnitValue('Parry', ParryUnitValue)) - { - if (ParryUnitValue.fValue > 0) - { - // if Parry is available we will be resolving reflect there - `log("Parry is available - not triggering deflect or reflect here!", , 'XCom_HitRolls'); - return false; - } - } - - // only parry can block melee abilities, so only check non-melee abilities - if ((!AbilityState.IsMeleeAbility() || default.bCanDeflectMelee) && (bIsPrimaryTarget || default.bCanDeflectArea)) - { - FocusLevel = TargetUnit.GetTemplarFocusLevel(); - - if (FocusLevel >= default.DeflectMinFocus) - { - Chance = default.DeflectBaseChance + ((FocusLevel - 1) * default.DeflectPerFocusChance); - RandRoll = `SYNC_RAND(100); - if (RandRoll <= Chance) - { - `log("Deflect chance was" @ Chance @ "rolled" @ RandRoll @ "- success!", , 'XCom_HitRolls'); - if (TargetUnit.HasSoldierAbility('Reflect') && FocusLevel >= default.ReflectMinFocus && !AbilityState.IsMeleeAbility() && bIsPrimaryTarget) - { - Chance = default.ReflectBaseChance + ((FocusLevel - 1) * default.DeflectPerFocusChance); - RandRoll = `SYNC_RAND(100); - if (RandRoll <= Chance) - { - `log("Reflect chance was" @ Chance @ "rolled" @ RandRoll @ "- success!", , 'XCom_HitRolls'); - NewHitResult = eHit_Reflect; - return true; - } - `log("Reflect chance was" @ Chance @ "rolled" @ RandRoll @ "- failed. Cannot Reflect.", , 'XCom_HitRolls'); - } - `log("Unit does not have Reflect, or not enough Focus to trigger it.", , 'XCom_HitRolls'); - NewHitResult = eHit_Deflect; - return true; - } - `log("Deflect chance was" @ Chance @ "rolled" @ RandRoll @ "- failed.", , 'XCom_HitRolls'); - } - else - { - `log("Unit does not have enough focus for Deflect.", , 'XCom_HitRolls'); - } - } - else - { - `log("Ability is a melee attack or an AOE attack - cannot be Reflected or Deflected.", , 'XCom_HitRolls'); - } - - return false; -} - -DefaultProperties -{ - DuplicateResponse = eDupe_Ignore - EffectName = "Deflect" +//from AngelRane +class X2Effect_DeflectNew extends X2Effect_Persistent + config(LW_FactionBalance); + +var config int DeflectMinFocus, DeflectBaseChance, DeflectPerFocusChance; +var config int ReflectMinFocus, ReflectBaseChance; + +var config bool bCanDeflectMelee, bCanDeflectArea; + +function bool ChangeHitResultForTarget(XComGameState_Effect EffectState, XComGameState_Unit Attacker, XComGameState_Unit TargetUnit, XComGameState_Ability AbilityState, bool bIsPrimaryTarget, const EAbilityHitResult CurrentResult, out EAbilityHitResult NewHitResult) +{ + local UnitValue ParryUnitValue; + local int FocusLevel, Chance, RandRoll; + local X2AbilityToHitCalc_StandardAim AttackToHit; + + // don't respond to reaction fire + AttackToHit = X2AbilityToHitCalc_StandardAim(AbilityState.GetMyTemplate().AbilityToHitCalc); + if (AttackToHit != none && AttackToHit.bReactionFire) + return false; + + // don't change a natural miss + if (!class'XComGameStateContext_Ability'.static.IsHitResultHit(CurrentResult)) + return false; + + if (!TargetUnit.IsAbleToAct()) + return false; + + `log("X2Effect_Deflect::ChangeHitResultForTarget", , 'XCom_HitRolls'); + // check for parry first - if the unit value is set, then a parry is guaranteed, so do not check for deflect or reflect + if (TargetUnit.HasSoldierAbility('Parry') && TargetUnit.GetUnitValue('Parry', ParryUnitValue)) + { + if (ParryUnitValue.fValue > 0) + { + // if Parry is available we will be resolving reflect there + `log("Parry is available - not triggering deflect or reflect here!", , 'XCom_HitRolls'); + return false; + } + } + + // only parry can block melee abilities, so only check non-melee abilities + if ((!AbilityState.IsMeleeAbility() || default.bCanDeflectMelee) && (bIsPrimaryTarget || default.bCanDeflectArea)) + { + FocusLevel = TargetUnit.GetTemplarFocusLevel(); + + if (FocusLevel >= default.DeflectMinFocus) + { + Chance = default.DeflectBaseChance + ((FocusLevel - 1) * default.DeflectPerFocusChance); + RandRoll = `SYNC_RAND(100); + if (RandRoll <= Chance) + { + `log("Deflect chance was" @ Chance @ "rolled" @ RandRoll @ "- success!", , 'XCom_HitRolls'); + if (TargetUnit.HasSoldierAbility('Reflect') && FocusLevel >= default.ReflectMinFocus && !AbilityState.IsMeleeAbility() && bIsPrimaryTarget) + { + Chance = default.ReflectBaseChance + ((FocusLevel - 1) * default.DeflectPerFocusChance); + RandRoll = `SYNC_RAND(100); + if (RandRoll <= Chance) + { + `log("Reflect chance was" @ Chance @ "rolled" @ RandRoll @ "- success!", , 'XCom_HitRolls'); + NewHitResult = eHit_Reflect; + return true; + } + `log("Reflect chance was" @ Chance @ "rolled" @ RandRoll @ "- failed. Cannot Reflect.", , 'XCom_HitRolls'); + } + `log("Unit does not have Reflect, or not enough Focus to trigger it.", , 'XCom_HitRolls'); + NewHitResult = eHit_Deflect; + return true; + } + `log("Deflect chance was" @ Chance @ "rolled" @ RandRoll @ "- failed.", , 'XCom_HitRolls'); + } + else + { + `log("Unit does not have enough focus for Deflect.", , 'XCom_HitRolls'); + } + } + else + { + `log("Ability is a melee attack or an AOE attack - cannot be Reflected or Deflected.", , 'XCom_HitRolls'); + } + + return false; +} + +DefaultProperties +{ + DuplicateResponse = eDupe_Ignore + EffectName = "Deflect" } \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_Overcharge_LW.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_Overcharge_LW.uc index 3a90a61a7..2d38bae38 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_Overcharge_LW.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_Overcharge_LW.uc @@ -15,8 +15,6 @@ function GetToHitModifiers(XComGameState_Effect EffectState, XComGameState_Unit local ShotModifierInfo ShotInfo; local int CurrentFocus; - if(AbilityState.IsMeleeAbility()) - { CurrentFocus = Attacker.GetTemplarFocusLevel(); if (CurrentFocus > 0) @@ -30,6 +28,5 @@ function GetToHitModifiers(XComGameState_Effect EffectState, XComGameState_Unit ShotInfo.Reason = FriendlyName; ShotInfo.Value = CritBonusPerFocus * CurrentFocus; ShotModifiers.AddItem(ShotInfo); - } } } diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_ParryNew.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_ParryNew.uc index 2e662796c..31e283bfb 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_ParryNew.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_ParryNew.uc @@ -1,50 +1,50 @@ -//from AngelRane -class X2Effect_ParryNew extends X2Effect_Persistent - config(LW_FactionBalance); - -var config int ParryReflectPerFocusChance, ParryReflectMinFocus, ParryReflectBaseChance; - -function bool ChangeHitResultForTarget(XComGameState_Effect EffectState, XComGameState_Unit Attacker, XComGameState_Unit TargetUnit, XComGameState_Ability AbilityState, bool bIsPrimaryTarget, const EAbilityHitResult CurrentResult, out EAbilityHitResult NewHitResult) -{ - local UnitValue ParryUnitValue; - local int FocusLevel, Chance, RandRoll; - - `log("X2Effect_Parry::ChangeHitResultForTarget", , 'XCom_HitRolls'); - // check for parry - if the unit value is set, then a parry is guaranteed - if (TargetUnit.GetUnitValue('Parry', ParryUnitValue) && TargetUnit.IsAbleToAct()) - { - if (ParryUnitValue.fValue > 0) - { - if (!AbilityState.IsMeleeAbility() && bIsPrimaryTarget) - { - FocusLevel = TargetUnit.GetTemplarFocusLevel(); - - if (TargetUnit.HasSoldierAbility('Reflect') && FocusLevel >= default.ParryReflectMinFocus) - { - Chance = default.ParryReflectBaseChance + ((FocusLevel - 1) * default.ParryReflectPerFocusChance); - RandRoll = `SYNC_RAND(100); - if (RandRoll <= Chance) - { - `log("Reflect on Parry chance was" @ Chance @ "rolled" @ RandRoll @ "- success!", , 'XCom_HitRolls'); - NewHitResult = eHit_Reflect; - TargetUnit.SetUnitFloatValue('Parry', ParryUnitValue.fValue - 1); - return true; - } - } - } - `log("Parry available - using!", , 'XCom_HitRolls'); - NewHitResult = eHit_Parry; - TargetUnit.SetUnitFloatValue('Parry', ParryUnitValue.fValue - 1); - return true; - } - } - - `log("Parry not available.", , 'XCom_HitRolls'); - return false; -} - -DefaultProperties -{ - DuplicateResponse = eDupe_Ignore - EffectName = "Parry" +//from AngelRane +class X2Effect_ParryNew extends X2Effect_Persistent + config(LW_FactionBalance); + +var config int ParryReflectPerFocusChance, ParryReflectMinFocus, ParryReflectBaseChance; + +function bool ChangeHitResultForTarget(XComGameState_Effect EffectState, XComGameState_Unit Attacker, XComGameState_Unit TargetUnit, XComGameState_Ability AbilityState, bool bIsPrimaryTarget, const EAbilityHitResult CurrentResult, out EAbilityHitResult NewHitResult) +{ + local UnitValue ParryUnitValue; + local int FocusLevel, Chance, RandRoll; + + `log("X2Effect_Parry::ChangeHitResultForTarget", , 'XCom_HitRolls'); + // check for parry - if the unit value is set, then a parry is guaranteed + if (TargetUnit.GetUnitValue('Parry', ParryUnitValue) && TargetUnit.IsAbleToAct()) + { + if (ParryUnitValue.fValue > 0) + { + if (!AbilityState.IsMeleeAbility() && bIsPrimaryTarget) + { + FocusLevel = TargetUnit.GetTemplarFocusLevel(); + + if (TargetUnit.HasSoldierAbility('Reflect') && FocusLevel >= default.ParryReflectMinFocus) + { + Chance = default.ParryReflectBaseChance + ((FocusLevel - 1) * default.ParryReflectPerFocusChance); + RandRoll = `SYNC_RAND(100); + if (RandRoll <= Chance) + { + `log("Reflect on Parry chance was" @ Chance @ "rolled" @ RandRoll @ "- success!", , 'XCom_HitRolls'); + NewHitResult = eHit_Reflect; + TargetUnit.SetUnitFloatValue('Parry', ParryUnitValue.fValue - 1); + return true; + } + } + } + `log("Parry available - using!", , 'XCom_HitRolls'); + NewHitResult = eHit_Parry; + TargetUnit.SetUnitFloatValue('Parry', ParryUnitValue.fValue - 1); + return true; + } + } + + `log("Parry not available.", , 'XCom_HitRolls'); + return false; +} + +DefaultProperties +{ + DuplicateResponse = eDupe_Ignore + EffectName = "Parry" } \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_SoulShot_ArrowHit.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_SoulShot_ArrowHit.uc deleted file mode 100644 index 548e26180..000000000 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_SoulShot_ArrowHit.uc +++ /dev/null @@ -1,20 +0,0 @@ -class X2Effect_SoulShot_ArrowHit extends X2Effect; - -// If target is killed by the attack that applied this effect, play a particle effect on the target that will spawn an arrow stuck in its chest. - -simulated function AddX2ActionsForVisualization(XComGameState VisualizeGameState, out VisualizationActionMetadata ActionMetadata, const name EffectApplyResult) -{ - local X2Action_PlayEffect EffectAction; - local XComGameState_Unit UnitState; - - UnitState = XComGameState_Unit(ActionMetadata.StateObject_NewState); - - if (EffectApplyResult == 'AA_Success' && UnitState != none && UnitState.IsDead()) - { - EffectAction = X2Action_PlayEffect(class'X2Action_PlayEffect'.static.AddToVisualizationTree(ActionMetadata, VisualizeGameState.GetContext())); - EffectAction.EffectName = "IRISoulShotPerk.PS_Arrow_Persistent"; - EffectAction.AttachToUnit = true; - EffectAction.AttachToSocketName = 'IRI_SoulBow_Arrow_Hit'; - EffectAction.AttachToSocketsArrayName = 'BoneSocketActor'; - } -} diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShield.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShield.uc deleted file mode 100644 index 24f23a65a..000000000 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShield.uc +++ /dev/null @@ -1,542 +0,0 @@ -class X2Effect_TemplarShield extends X2Effect_EnergyShield; - -simulated protected function OnEffectAdded(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState, XComGameState_Effect NewEffectState) -{ - local XComGameState_Unit UnitState; - local int ShieldStrength; - - UnitState = XComGameState_Unit(kNewTargetState); - ShieldStrength = GetShieldStrength(UnitState, NewGameState); - if (UnitState != none) - { - m_aStatChanges.Length = 0; - AddPersistentStatChange(eStat_ShieldHP, ShieldStrength); - } - - UnitState.SetUnitFloatValue('TemplarShieldHP', ShieldStrength, eCleanup_BeginTactical); - UnitState.SetUnitFloatValue('PreTemplarShieldHP', UnitState.GetCurrentStat(eStat_ShieldHP), eCleanup_BeginTactical); - - super.OnEffectAdded(ApplyEffectParameters, kNewTargetState, NewGameState, NewEffectState); -} - -simulated function OnEffectRemoved(const out EffectAppliedData ApplyEffectParameters, XComGameState NewGameState, bool bCleansed, XComGameState_Effect RemovedEffectState) -{ - local int TemplarGrantedShieldHP, PreTemplarShieldHP, PreRemovalShieldHP, FullyShieldedHP, ShieldHPDamage, NewShieldHP; - local XComGameState_Unit UnitState; - local UnitValue TemplarShieldShieldHP, OtherShieldHP; - - UnitState = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(ApplyEffectParameters.TargetStateObjectRef.ObjectID)); - PreRemovalShieldHP = UnitState.GetCurrentStat(eStat_ShieldHP); - - super.OnEffectRemoved(ApplyEffectParameters, NewGameState, bCleansed, RemovedEffectState); - - UnitState = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(ApplyEffectParameters.TargetStateObjectRef.ObjectID)); - UnitState.GetUnitValue('TemplarShieldHP', TemplarShieldShieldHP); - UnitState.GetUnitValue('PreTemplarShieldHP', OtherShieldHP); - TemplarGrantedShieldHP = int(TemplarShieldShieldHP.fValue); // How many you got - PreTemplarShieldHP = int(OtherShieldHP.fValue); // how many you had - FullyShieldedHP = PreTemplarShieldHP + TemplarGrantedShieldHP; - //ShieldHP = UnitState.GetCurrentStat(eStat_ShieldHP); // how many you have now - - ShieldHPDamage = FullyShieldedHP - PreRemovalShieldHP; - if (ShieldHPDamage > 0 && PreTemplarShieldHP > 0 && ShieldHPDamage < FullyShieldedHP) - { - NewShieldHP = Clamp(PreTemplarShieldHP + TemplarGrantedShieldHP - ShieldHPDamage, 0, PreTemplarShieldHP); - UnitState = XComGameState_Unit(NewGameState.CreateStateObject(UnitState.Class, UnitState.ObjectID)); - UnitState.SetCurrentStat(estat_ShieldHP, NewShieldHP); - NewGameState.AddStateObject(UnitState); - } -} - -private function OnShieldRemoved_BuildVisualization(XComGameState VisualizeGameState, out VisualizationActionMetadata ActionMetadata, const name EffectApplyResult) -{ - local X2Action_PlayAnimation PlayAnimation; - local XGUnit Unit; - local XComUnitPawn UnitPawn; - - // Exit if the effect did not expire naturally. - // We don't want the animation to play here if the effect was removed by damage, visualization for that is handled elsewhere. - if (XComGameStateContext_TickEffect(VisualizeGameState.GetContext()) == none) - return; - - Unit = XGUnit(ActionMetadata.VisualizeActor); - if (Unit != none && Unit.IsAlive()) - { - UnitPawn = Unit.GetPawn(); - if (UnitPawn != none && UnitPawn.GetAnimTreeController().CanPlayAnimation('HL_Shield_Fold')) - { - PlayAnimation = X2Action_PlayAnimation(class'X2Action_PlayAnimation'.static.AddToVisualizationTree(ActionMetadata, VisualizeGameState.GetContext(), false, ActionMetadata.LastActionAdded)); - PlayAnimation.Params.AnimName = 'HL_Shield_Fold'; - PlayAnimation.Params.BlendTime = 0.3f; - } - } -} - -static final function bool WasUnitFullyProtected(const XComGameState_Unit OldUnitState, const XComGameState_Unit NewUnitState) -{ - local UnitValue PreAblativeValue; - - NewUnitState.GetUnitValue('PreTemplarShieldHP',PreAblativeValue); - - //`LOG(GetFuncName() @ OldUnitState.GetFullName(),, 'TemplarParryRework'); - //`LOG("Old HP:" @ OldUnitState.GetCurrentStat(eStat_HP),, 'TemplarParryRework'); - //`LOG("New HP:" @ NewUnitState.GetCurrentStat(eStat_HP),, 'TemplarParryRework'); - //`LOG("Unit fully protected:" @ NewUnitState.GetCurrentStat(eStat_HP) >= OldUnitState.GetCurrentStat(eStat_HP),, 'TemplarParryRework'); - - // Bleeding out check is required, because if the unit had 1 HP before the attack that made them start bleeding out, they will still have 1 HP while bleeding out. - return NewUnitState.GetCurrentStat(eStat_HP) >= OldUnitState.GetCurrentStat(eStat_HP) && !NewUnitState.IsBleedingOut() && NewUnitState.GetCurrentStat(eStat_ShieldHP) >= PreAblativeValue.fvalue; -} - -static final function bool WasShieldFullyConsumed(const XComGameState_Unit OldUnitState, const XComGameState_Unit NewUnitState) -{ - local UnitValue PreAblativeValue; - - NewUnitState.GetUnitValue('PreTemplarShieldHP',PreAblativeValue); - - return NewUnitState.GetCurrentStat(eStat_ShieldHP) <= PreAblativeValue.fvalue; -} - -static final function int GetShieldStrength(const XComGameState_Unit UnitState, XComGameState CheckGameState) -{ - local XComGameState_Item ItemState; - local X2WeaponTemplate WeaponTemplate; - local int Index; - - ItemState = UnitState.GetItemInSlot(eInvSlot_PrimaryWeapon, CheckGameState); - if (ItemState == none) - return 0; - - WeaponTemplate = X2WeaponTemplate(ItemState.GetMyTemplate()); - if (WeaponTemplate == none) - return 0; - - Index = WeaponTemplate.ExtraDamage.Find('Tag', 'IRI_TemplarShield'); - if (Index == INDEX_NONE) - return 0; - - return WeaponTemplate.ExtraDamage[Index].Damage; -} - - -function RegisterForEvents(XComGameState_Effect EffectGameState) -{ - local X2EventManager EventMgr; - local Object EffectObj; - - super.RegisterForEvents(EffectGameState); - - EventMgr = `XEVENTMGR; - EffectObj = EffectGameState; - - EventMgr.RegisterForEvent(EffectObj, 'OverrideHitEffects', TemplarShield_OnOverrideHitEffects, ELD_Immediate, 40); - EventMgr.RegisterForEvent(EffectObj, 'OverrideMetaHitEffect', TemplarShield_OnOverrideMetaHitEffect, ELD_Immediate, 40); - - // Has to be ELD_Immediate so that we can get the target Unit State from History before the ability has gone through and see if it had the Templar Shield effect. - EventMgr.RegisterForEvent(EffectObj, 'AbilityActivated', TemplarShield_OnAbilityActivated, ELD_Immediate, 50, /*pre filter object*/,, /* callback data*/); -} - - -// Requires CHL Issue #1114 - create psionic flashes when projectiles hit the shield. -private static function EventListenerReturn TemplarShield_OnOverrideHitEffects(Object EventData, Object EventSource, XComGameState NullGameState, Name Event, Object CallbackData) -{ - local XComUnitPawn Pawn; - local XComLWTuple Tuple; - local XComAnimTreeController AnimTreeController; - - Pawn = XComUnitPawn(EventSource); - if (Pawn == none) - return ELR_NoInterrupt; - - AnimTreeController = Pawn.GetAnimTreeController(); - if (AnimTreeController == none) - return ELR_NoInterrupt; - - // If the pawn is currently playing one of these animations, it means the psionic shield is absorbing projectiles, - // and the unit is not being wounded. - if (AnimTreeController.IsPlayingCurrentAnimation('HL_Shield_Absorb') || - AnimTreeController.IsPlayingCurrentAnimation('HL_Shield_AbsorbAndFold')) - { - Tuple = XComLWTuple(EventData); - if (Tuple == none) - return ELR_NoInterrupt; - - Tuple.Data[0].b = false; // Setting to *not* override the Hit Effect, cuz we want it to play. - // Just in case some other listener disabled it. - Tuple.Data[7].i = eHit_Reflect; // HitResult - Using eHit_Reflect to make hit effects spawn on the left hand. Purely visual change and only for this Hit Effect. - } - - return ELR_NoInterrupt; -} - -// Requires CHL Issue #1116 - remove blood gushing out of the target unit when projectiles hit the shield. -private static function EventListenerReturn TemplarShield_OnOverrideMetaHitEffect(Object EventData, Object EventSource, XComGameState NullGameState, Name Event, Object CallbackData) -{ - local XComUnitPawn Pawn; - local XComLWTuple Tuple; - local XComAnimTreeController AnimTreeController; - - Pawn = XComUnitPawn(EventSource); - if (Pawn == none) - return ELR_NoInterrupt; - - AnimTreeController = Pawn.GetAnimTreeController(); - if (AnimTreeController == none) - return ELR_NoInterrupt; - - if (AnimTreeController.IsPlayingCurrentAnimation('HL_Shield_Absorb') || - AnimTreeController.IsPlayingCurrentAnimation('HL_Shield_AbsorbAndFold')) - { - Tuple = XComLWTuple(EventData); - if (Tuple == none) - return ELR_NoInterrupt; - - Tuple.Data[0].b = false; - Tuple.Data[5].i = eHit_Reflect; - } - - return ELR_NoInterrupt; -} - -private static function EventListenerReturn TemplarShield_OnAbilityActivated(Object EventData, Object EventSource, XComGameState NewGameState, Name Event, Object CallbackData) -{ - local XComGameStateContext_Ability AbilityContext; - local XComGameState_Unit TargetUnit; - local StateObjectReference UnitRef; - local XComGameStateHistory History; - - AbilityContext = XComGameStateContext_Ability(NewGameState.GetContext()); - if (AbilityContext == none || AbilityContext.InterruptionStatus == eInterruptionStatus_Interrupt) - return ELR_NoInterrupt; - - // Insert a Post Build Vis delegate whenever an ability targets a unit affected by Templar Shield - - History = `XCOMHISTORY; - - TargetUnit = XComGameState_Unit(History.GetGameStateForObjectID(AbilityContext.InputContext.PrimaryTarget.ObjectID)); - if (TargetUnit != none && TargetUnit.IsUnitAffectedByEffectName(class'X2Effect_TemplarShield'.default.EffectName)) - { - if (AbilityContext.PostBuildVisualizationFn.Find(ReplaceHitAnimation_PostBuildVis) == INDEX_NONE) - { - AbilityContext.PostBuildVisualizationFn.AddItem(ReplaceHitAnimation_PostBuildVis); - } - } - else - { - foreach AbilityContext.InputContext.MultiTargets(UnitRef) - { - TargetUnit = XComGameState_Unit(History.GetGameStateForObjectID(UnitRef.ObjectID)); - if (TargetUnit != none && TargetUnit.IsUnitAffectedByEffectName(class'X2Effect_TemplarShield'.default.EffectName)) - { - if (AbilityContext.PostBuildVisualizationFn.Find(ReplaceHitAnimation_PostBuildVis) == INDEX_NONE) - { - AbilityContext.PostBuildVisualizationFn.AddItem(ReplaceHitAnimation_PostBuildVis); - } - break; - } - } - } - - return ELR_NoInterrupt; -} - -// This function alters the visualization tree for units affected by the Templar Shield effect when they are attacked. -private static function ReplaceHitAnimation_PostBuildVis(XComGameState VisualizeGameState) -{ - local XComGameStateContext_Ability AbilityContext; - local XComGameStateVisualizationMgr VisMgr; - local array FindActions; - local X2Action FindAction; - local X2Action ChildAction; - local VisualizationActionMetadata ActionMetadata; - local XComGameState_Unit OldUnitState; - local XComGameState_Unit NewUnitState; - local X2Action_ApplyWeaponDamageToUnit DamageAction; - local X2Action_PlayAnimation AdditionalAnimationAction; - local X2Action_TemplarShield_ApplyWeaponDamageToUnit ReplaceAction; - local X2Action_MarkerNamed EmptyAction; - local X2Action ParentAction; - local array ExitCoverActions; - local array ExitCoverParentActions; - local array FireActions; - local X2Action_PlayAnimation PlayAnimation; - local name InputEvent; - local X2Action_MoveTurn MoveTurnAction; - local XComGameState_Unit SourceUnit; - local XComGameState_Ability AbilityState; - local array HandledUnits; - local X2AbilityTemplate AbilityTemplate; - local XComGameStateHistory History; - local X2Action CycleAction; - local X2Action_TimedWait TimedWait; - local bool bGrenadeLikeAbility; - local bool bAreaTargetedAbility; - local X2Action_WaitForAnotherAction WaitForAction; - local array WaitForActions; - local array DamageUnitActions; - - AbilityContext = XComGameStateContext_Ability(VisualizeGameState.GetContext()); - if (AbilityContext == none) - return; - - History = `XCOMHISTORY; - AbilityState = XComGameState_Ability(History.GetGameStateForObjectID(AbilityContext.InputContext.AbilityRef.ObjectID)); - if (AbilityState == none) - return; - - AbilityTemplate = AbilityState.GetMyTemplate(); - if (AbilityTemplate == none) - return; - - SourceUnit = XComGameState_Unit(History.GetGameStateForObjectID(AbilityContext.InputContext.SourceObject.ObjectID)); - if (SourceUnit == none) - return; - - if (AbilityContext.InputContext.TargetLocations.Length > 0 && ClassIsChildOf(AbilityTemplate.TargetingMethod, class'X2TargetingMethod_Grenade')) - { - bAreaTargetedAbility = true; - bGrenadeLikeAbility = AbilityTemplate.TargetingMethod.static.UseGrenadePath(); - } - - // Cycle through all Damage Unit actions created by the ability. If the ability affected multiple units, all of them will be covered. - // This is a bit noodly. Rather than cycling through units present in this game state, or getting them from the game state by their ObjectID recorded in Context, - // we iterate over Damage Unit actions directly, since ultimately this is what we need to interact with. - VisMgr = `XCOMVISUALIZATIONMGR; - VisMgr.GetNodesOfType(VisMgr.BuildVisTree, class'X2Action_ApplyWeaponDamageToUnit', FindActions); - foreach FindActions(FindAction) - { - ActionMetadata = FindAction.Metadata; - OldUnitState = XComGameState_Unit(ActionMetadata.StateObject_OldState); // Unit State as it was before they were hit by the attack. - NewUnitState = XComGameState_Unit(ActionMetadata.StateObject_NewState); - - if (OldUnitState == none || NewUnitState == none || HandledUnits.Find(OldUnitState.ObjectID) != INDEX_NONE) - continue; - - HandledUnits.AddItem(OldUnitState.ObjectID); // Use a tracking array to make sure each unit's visualization is adjusted only once. - - if (!OldUnitState.IsUnitAffectedByEffectName(class'X2Effect_TemplarShield'.default.EffectName)) // Check the old unit state specifically, as the attack could have removed the effect from the target. - continue; - - // Gather various action arrays we will need. - DamageAction = X2Action_ApplyWeaponDamageToUnit(FindAction); - - // We might need all Damage Unit actions relevant to this unit later. - DamageUnitActions.Length = 0; - VisMgr.GetNodesOfType(VisMgr.BuildVisTree, class'X2Action_ApplyWeaponDamageToUnit', DamageUnitActions,, OldUnitState.ObjectID); - - // Parents of the Damage Unit action are Fire Actions (normally should be only one) - FireActions = DamageAction.ParentActions; - - // Parents of the Fire Action are Exit Cover Actions (normally should be only one) - ExitCoverActions.Length = 0; - foreach FireActions(CycleAction) - { - foreach CycleAction.ParentActions(ParentAction) - { - ExitCoverActions.AddItem(ParentAction); - } - } - ExitCoverParentActions.Length = 0; - foreach ExitCoverActions(CycleAction) - { - foreach CycleAction.ParentActions(ParentAction) - { - ExitCoverParentActions.AddItem(ParentAction); - } - } - - // #1. START. Insert a Move Turn action to force the target unit to face the danger. - if (bAreaTargetedAbility) // If the ability is area-targeted, like a grenade throw, then face the target location (the epicenter of the explosion) - { - MoveTurnAction = X2Action_MoveTurn(class'X2Action_MoveTurn'.static.AddToVisualizationTree(ActionMetadata, AbilityContext, false,, ExitCoverParentActions)); - MoveTurnAction.m_vFacePoint = AbilityContext.InputContext.TargetLocations[0]; - } - else // Otherwise face the attacker. - { // In this case Move Turn action is specifically inserted between Exit Cover's parents and Exit Cover itself, - // so Exit Cover won't begin playing until Move Turn action finishes. - // This is necessary because some Fire Actions take very little time between the Fire Action starting and damage hitting the target, - // so we have to make sure the target unit is already facing the source when the Fire Action begins. - MoveTurnAction = X2Action_MoveTurn(class'X2Action_MoveTurn'.static.AddToVisualizationTree(ActionMetadata, AbilityContext, true,, ExitCoverParentActions)); - MoveTurnAction.m_vFacePoint = `XWORLD.GetPositionFromTileCoordinates(SourceUnit.TileLocation); - } - - // Keep the target unit's visualizer occupied after turning is finished and until Exit Cover begins. This is done to prevent Idle State Machine from turning the unit away. - WaitForActions.Length = 0; - foreach ExitCoverActions(CycleAction) - { - WaitForAction = X2Action_WaitForAnotherAction(class'X2Action_WaitForAnotherAction'.static.AddToVisualizationTree(ActionMetadata, AbilityContext, false, MoveTurnAction)); - WaitForAction.ActionToWaitFor = CycleAction; - WaitForActions.AddItem(WaitForAction); - } - // #1. END. - - // #2. START. Insert a Play Animation action for "unit shields themselves from the attack" animation. - // If this ability uses a grenade path, it may take a while for the projectile to arrive to the target, so delay the animation action by amount of time that scales with distance between them. - // For the animation to look smooth, at least 0.25 seconds must pass between Additional Animation starting playing and projectiles hitting the target, - // but no more than 2 seconds, as shield is put away at that point. - // Grenade takes 1.5 seconds to fly 10 tiles and explode after being thrown, though this doesn't take throw animation time into account. - // This delay is added on top of the variable amount of time required for the Move Turn action. - if (bGrenadeLikeAbility) - { - //`LOG("Ability uses grenade path, inserting delay action for:" @ 0.05f * SourceUnit.TileDistanceBetween(NewUnitState) @ "seconds.",, 'TemplarParryRework'); - TimedWait = X2Action_TimedWait(class'X2Action_TimedWait'.static.AddToVisualizationTree(ActionMetadata, AbilityContext, false,, WaitForActions)); - TimedWait.DelayTimeSec = 0.075f * SourceUnit.TileDistanceBetween(NewUnitState); // So 0.75 second delay at 10 tile distance. - - AdditionalAnimationAction = X2Action_PlayAnimation(class'X2Action_PlayAnimation'.static.AddToVisualizationTree(ActionMetadata, AbilityContext,, TimedWait)); - } - else - { - AdditionalAnimationAction = X2Action_PlayAnimation(class'X2Action_PlayAnimation'.static.AddToVisualizationTree(ActionMetadata, AbilityContext,,, WaitForActions)); - } - AdditionalAnimationAction.Params.AnimName = 'HL_Shield_Absorb'; - - // Make child actions of the original Damage Unit action become children of the animation action. - foreach DamageAction.ChildActions(ChildAction) - { - VisMgr.ConnectAction(ChildAction, VisMgr.BuildVisTree, false, AdditionalAnimationAction); - } - // #2. END - - // If the attack missed, we stop here. - // Note: this may need to be adjusted, because grazes count as a hit. - if (!WasUnitHit(AbilityContext, OldUnitState.ObjectID)) - { - continue; - } - - // #3. START. - // If the unit did not receive health damage during this attack (i.e. shield took all the damage), then we don't need this unit to play any "unit was hit" animations. - // So we replace all original Damage Unit actions for this unit with a custom version that does not play any animations, - // and it also plays a different voiceover, since the attack, even if it damages shield HP, doesn't have a negative effect on the soldier. - // Otherwise it functions identically and can do stuff like showing flyover. - if (class'X2Effect_TemplarShield'.static.WasUnitFullyProtected(OldUnitState, NewUnitState)) - { - foreach DamageUnitActions(CycleAction) - { - DamageAction = X2Action_ApplyWeaponDamageToUnit(CycleAction); - ReplaceAction = X2Action_TemplarShield_ApplyWeaponDamageToUnit(class'X2Action_TemplarShield_ApplyWeaponDamageToUnit'.static.AddToVisualizationTree(ActionMetadata, AbilityContext,,, DamageAction.ParentActions)); - CopyActionProperties(ReplaceAction, DamageAction); - - foreach DamageAction.ChildActions(ChildAction) - { - VisMgr.ConnectAction(ChildAction, VisMgr.BuildVisTree, false, ReplaceAction); - } - - // Nuke the original action out of the tree. - EmptyAction = X2Action_MarkerNamed(class'X2Action'.static.CreateVisualizationActionClass(class'X2Action_MarkerNamed', DamageAction.StateChangeContext)); - EmptyAction.SetName("ReplaceDamageUnitAction"); - VisMgr.ReplaceNode(EmptyAction, DamageAction); - } - - // If unit didn't take any damage, but the shield was fully depleted by the attack, then play a different "absorb damage" animation that puts the shield away at the end. - if (class'X2Effect_TemplarShield'.static.WasShieldFullyConsumed(OldUnitState, NewUnitState)) - { - AdditionalAnimationAction.Params.AnimName = 'HL_Shield_AbsorbAndFold'; - } - } - else if (class'X2Effect_TemplarShield'.static.WasShieldFullyConsumed(OldUnitState, NewUnitState)) - { - // If the unit did in fact take some health damage despite being shielded (i.e. damage broke through the shield), - // Then we keep the original Damage Unit action in the tree. Its "unit hit" animation will interrupt the "absorb damage" animation from the additional action - // whenever the attack connects with the unit. - // We check the shield is actually gone, because the additive animation will stop the particle effect, hiding the shield from the unit. - // In theory the unit can take health damage without the shield being broken. - - // Play an additive animation with particle effects of the shield blowing up at the same time as the unit being hit. - PlayAnimation = X2Action_PlayAnimation(class'X2Action_PlayAnimation'.static.AddToVisualizationTree(ActionMetadata, AbilityContext,,, FireActions)); - PlayAnimation.Params.AnimName = 'ADD_Shield_Explode'; - PlayAnimation.Params.Additive = true; - - // Make this additive animation respond to the same input events as the damage action, so it plays when projectiles hit the unit. - PlayAnimation.ClearInputEvents(); - foreach DamageAction.InputEventIDs(InputEvent) - { - PlayAnimation.AddInputEvent(InputEvent); - } - - foreach DamageAction.ChildActions(ChildAction) - { - VisMgr.ConnectAction(ChildAction, VisMgr.BuildVisTree, false, PlayAnimation); - } - } - // #3. END - } -} - -// X2Action::Init() runs right before action starts playing, so we can't get this info from the action itself. -private static function bool WasUnitHit(const XComGameStateContext_Ability AbilityContext, const int ObjectID) -{ - local int Index; - - if (AbilityContext.InputContext.PrimaryTarget.ObjectID == ObjectID) - { - return AbilityContext.IsResultContextHit(); - } - - Index = AbilityContext.InputContext.MultiTargets.Find('ObjectID', ObjectID); - if (Index != INDEX_NONE) - { - return AbilityContext.IsResultContextMultiHit(Index); - } - return false; -} - -private static function CopyActionProperties(out X2Action_TemplarShield_ApplyWeaponDamageToUnit ReplaceAction, out X2Action_ApplyWeaponDamageToUnit DamageAction) -{ - ReplaceAction.AbilityTemplate = DamageAction.AbilityTemplate; - ReplaceAction.DamageDealer = DamageAction.DamageDealer; - ReplaceAction.SourceUnitState = DamageAction.SourceUnitState; - ReplaceAction.m_iDamage = DamageAction.m_iDamage; - ReplaceAction.m_iMitigated = DamageAction.m_iMitigated; - ReplaceAction.m_iShielded = DamageAction.m_iShielded; - ReplaceAction.m_iShredded = DamageAction.m_iShredded; - ReplaceAction.DamageResults = DamageAction.DamageResults; - ReplaceAction.HitResults = DamageAction.HitResults; - ReplaceAction.DamageTypeName = DamageAction.DamageTypeName; - ReplaceAction.m_vHitLocation = DamageAction.m_vHitLocation; - ReplaceAction.m_vMomentum = DamageAction.m_vMomentum; - ReplaceAction.bGoingToDeathOrKnockback = DamageAction.bGoingToDeathOrKnockback; - ReplaceAction.bWasHit = DamageAction.bWasHit; - ReplaceAction.bWasCounterAttack = DamageAction.bWasCounterAttack; - ReplaceAction.bCounterAttackAnim = DamageAction.bCounterAttackAnim; - ReplaceAction.AbilityContext = DamageAction.AbilityContext; - ReplaceAction.AnimParams = DamageAction.AnimParams; - ReplaceAction.HitResult = DamageAction.HitResult; - ReplaceAction.TickContext = DamageAction.TickContext; - ReplaceAction.AreaDamageContext = DamageAction.AreaDamageContext; - ReplaceAction.FallingContext = DamageAction.FallingContext; - ReplaceAction.WorldEffectsContext = DamageAction.WorldEffectsContext; - ReplaceAction.TickIndex = DamageAction.TickIndex; - ReplaceAction.PlayingSequence = DamageAction.PlayingSequence; - ReplaceAction.OriginatingEffect = DamageAction.OriginatingEffect; - ReplaceAction.AncestorEffect = DamageAction.AncestorEffect; - ReplaceAction.bHiddenAction = DamageAction.bHiddenAction; - ReplaceAction.CounterAttackTargetRef = DamageAction.CounterAttackTargetRef; - ReplaceAction.bDoOverrideAnim = DamageAction.bDoOverrideAnim; - ReplaceAction.OverrideOldUnitState = DamageAction.OverrideOldUnitState; - ReplaceAction.OverridePersistentEffectTemplate = DamageAction.OverridePersistentEffectTemplate; - ReplaceAction.OverrideAnimEffectString = DamageAction.OverrideAnimEffectString; - ReplaceAction.bPlayDamageAnim = DamageAction.bPlayDamageAnim; - ReplaceAction.bIsUnitRuptured = DamageAction.bIsUnitRuptured; - ReplaceAction.bShouldContinueAnim = DamageAction.bShouldContinueAnim; - ReplaceAction.bMoving = DamageAction.bMoving; - ReplaceAction.bSkipWaitForAnim = DamageAction.bSkipWaitForAnim; - ReplaceAction.RunningAction = DamageAction.RunningAction; - ReplaceAction.HitReactDelayTimeToDeath = DamageAction.HitReactDelayTimeToDeath; - ReplaceAction.UnitState = DamageAction.UnitState; - ReplaceAction.GroupState = DamageAction.GroupState; - ReplaceAction.ScanGroup = DamageAction.ScanGroup; - ReplaceAction.ScanUnit = DamageAction.ScanUnit; - ReplaceAction.kPerkContent = DamageAction.kPerkContent; - ReplaceAction.TargetAdditiveAnims = DamageAction.TargetAdditiveAnims; - ReplaceAction.bShowFlyovers = DamageAction.bShowFlyovers; - ReplaceAction.bCombineFlyovers = DamageAction.bCombineFlyovers; - ReplaceAction.EffectHitEffectsOverride = DamageAction.EffectHitEffectsOverride; - ReplaceAction.CounterattackedAction = DamageAction.CounterattackedAction; -} - - -defaultproperties -{ - EffectName = "IRI_TemplarShield_Effect" - EffectRemovedVisualizationFn = OnShieldRemoved_BuildVisualization -} diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShieldAnimations.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShieldAnimations.uc deleted file mode 100644 index 7cc094c74..000000000 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShieldAnimations.uc +++ /dev/null @@ -1,23 +0,0 @@ -class X2Effect_TemplarShieldAnimations extends X2Effect_AdditionalAnimSets; - -// A version of Additional AnimSet effects that is set up to remove itself whenever the unit's Shield HP is exhausted. - -function RegisterForEvents(XComGameState_Effect EffectGameState) -{ - local X2EventManager EventMgr; - local XComGameState_Unit UnitState; - local Object EffectObj; - - EventMgr = `XEVENTMGR; - - UnitState = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(EffectGameState.ApplyEffectParameters.TargetStateObjectRef.ObjectID)); - EffectObj = EffectGameState; - - EventMgr.RegisterForEvent(EffectObj, 'ShieldsExpended', EffectGameState.OnShieldsExpended, ELD_OnStateSubmitted, , UnitState); -} - -defaultproperties -{ - EffectName = "IRI_X2Effect_TemplarShieldAnimations" - DuplicateResponse = eDupe_Ignore -} diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShieldCritDefense.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShieldCritDefense.uc deleted file mode 100644 index 2884adfc8..000000000 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2Effect_TemplarShieldCritDefense.uc +++ /dev/null @@ -1,32 +0,0 @@ -//--------------------------------------------------------------------------------------- -// FILE: X2Effect_TemplarShieldCritDefense -// AUTHOR: Tedster - modified from Iago/bg -// PURPOSE: Gives the unit some crit mitigation even when flanked. -//--------------------------------------------------------------------------------------- -class X2Effect_TemplarShieldCritDefense extends X2Effect_Persistent config(LW_FactionBalance); - -var config int CritReduction; - -function GetToHitAsTargetModifiers(XComGameState_Effect EffectState, XComGameState_Unit Attacker, XComGameState_Unit Target, XComGameState_Ability AbilityState, class ToHitType, bool bMelee, bool bFlanking, bool bIndirectFire, out array ShotModifiers) -{ - local ShotModifierInfo ModInfo; - - if (bFlanking) //if flanked - { - - ModInfo.ModType = eHit_Crit; - ModInfo.Reason = FriendlyName; - ModInfo.Value = 0 - default.CritReduction; - - ShotModifiers.AddItem(ModInfo); - - } -} - -DefaultProperties -{ - EffectName = "TemplarCritReduction" - DuplicateResponse = eDupe_Refresh; - bApplyOnHit = true; - bApplyOnMiss = true; -} diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2LWModTemplate_TemplarAbilities.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2LWModTemplate_TemplarAbilities.uc index ef3fa5d48..cf0ac143b 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2LWModTemplate_TemplarAbilities.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2LWModTemplate_TemplarAbilities.uc @@ -25,7 +25,6 @@ static function UpdateAbilities(X2AbilityTemplate Template, int Difficulty) { //refactor the start here so SingleRendFocus is only given to Rend and not Volt case 'ArcWave': - case 'ArcWave_LW': UpdateArcWave(Template); MakeRendNotWorkWhenBurning(Template); case 'TemplarBladestormAttack': @@ -33,8 +32,6 @@ static function UpdateAbilities(X2AbilityTemplate Template, int Difficulty) X2AbilityToHitCalc_StandardMelee(Template.AbilityToHitCalc).bGuaranteedHit = false; break; case 'Rend': - case 'Rend_LW': - MakeRendNotWorkWhenBurning(Template); // Allow Rend to miss and graze. X2AbilityToHitCalc_StandardMelee(Template.AbilityToHitCalc).bGuaranteedHit = false; @@ -104,7 +101,7 @@ static function ModifyVoltTargeting(X2AbilityTemplate Template) RadiusMultiTarget.bUseWeaponRadius = false; RadiusMultiTarget.fTargetRadius = `TILESTOMETERS(default.VOLT_TILE_RADIUS) + 0.01; - DangerZoneBonus.RequiredAbility = 'TemplarTerror'; + DangerZoneBonus.RequiredAbility = 'VoltDangerZone'; DangerZoneBonus.fBonusRadius = `TILESTOMETERS(default.VOLT_DANGER_ZONE_BONUS_RADIUS) + 0.01; RadiusMultiTarget.AbilityBonusRadii.AddItem(DangerZoneBonus); diff --git a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2StrategyElement_AcademyUnlocks_GrappleParkour.uc b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2StrategyElement_AcademyUnlocks_GrappleParkour.uc index 4e1058673..3848185d6 100644 --- a/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2StrategyElement_AcademyUnlocks_GrappleParkour.uc +++ b/LongWarOfTheChosen/Src/LW_FactionBalance/Classes/X2StrategyElement_AcademyUnlocks_GrappleParkour.uc @@ -1,38 +1,38 @@ -//from NotSoLoneWolf -class X2StrategyElement_AcademyUnlocks_GrappleParkour extends X2StrategyElement_AcademyUnlocks config(AcademyUnlocks); - -var config int PARKOUR_RANK; -var config int PARKOUR_COST; - -static function array CreateTemplates() -{ - local array Templates; - - Templates.AddItem(ParkourUnlock()); - - return Templates; -} - -// Making a template with the same name as a template from base XCOM 2 overwrites that template -// I've included this here so users can change the cost of the perk easily if they think its new ability is worth more or less -static function X2SoldierUnlockTemplate ParkourUnlock() -{ - local X2SoldierAbilityUnlockTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2SoldierAbilityUnlockTemplate', Template, 'ParkourUnlock'); - Template.AllowedClasses.AddItem('Skirmisher'); - Template.AbilityName = 'Parkour'; - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.GTS_Skirmisher"; - - Template.Requirements.RequiredHighestSoldierRank = default.PARKOUR_RANK; - Template.Requirements.RequiredSoldierClass = 'Skirmisher'; - Template.Requirements.RequiredSoldierRankClassCombo = true; - Template.Requirements.bVisibleIfSoldierRankGatesNotMet = true; - - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = default.PARKOUR_COST; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; -} +//from NotSoLoneWolf +class X2StrategyElement_AcademyUnlocks_GrappleParkour extends X2StrategyElement_AcademyUnlocks config(AcademyUnlocks); + +var config int PARKOUR_RANK; +var config int PARKOUR_COST; + +static function array CreateTemplates() +{ + local array Templates; + + Templates.AddItem(ParkourUnlock()); + + return Templates; +} + +// Making a template with the same name as a template from base XCOM 2 overwrites that template +// I've included this here so users can change the cost of the perk easily if they think its new ability is worth more or less +static function X2SoldierUnlockTemplate ParkourUnlock() +{ + local X2SoldierAbilityUnlockTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2SoldierAbilityUnlockTemplate', Template, 'ParkourUnlock'); + Template.AllowedClasses.AddItem('Skirmisher'); + Template.AbilityName = 'Parkour'; + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.GTS_Skirmisher"; + + Template.Requirements.RequiredHighestSoldierRank = default.PARKOUR_RANK; + Template.Requirements.RequiredSoldierClass = 'Skirmisher'; + Template.Requirements.RequiredSoldierRankClassCombo = true; + Template.Requirements.bVisibleIfSoldierRankGatesNotMet = true; + + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = default.PARKOUR_COST; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; +} diff --git a/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2Ability_OfficerAbilitySet.uc b/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2Ability_OfficerAbilitySet.uc index f1378a144..3c17bcb60 100644 --- a/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2Ability_OfficerAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2Ability_OfficerAbilitySet.uc @@ -50,8 +50,6 @@ var config array COMMANDRANGE_DIFFICULTY_MULTIPLER; var const name OfficerSourceName; // change this once UI work is done -var config array KismetTimerVariableNames; - static function array CreateTemplates() { local array Templates; @@ -79,7 +77,7 @@ static function array CreateTemplates() Templates.AddItem(AddLeadershipAbility()); Templates.AddItem(AddEspritdeCorpsAbility()); - Templates.AddItem(PurePassive('TrialByFire', "img:///UILibrary_LWOTC.UIPerk_TrialByFire", true)); + Templates.AddItem(PurePassive('TrialByFire', "img:///UILibrary_LW_Overhaul.UIPerk_TrialByFire", true)); // Add the command bonus range ability templates, one for each officer rank. // i == 1 is 2nd Lieutenant. @@ -774,7 +772,7 @@ static function X2AbilityTemplate AddInterventionAbility() local X2Condition_HasEnoughIntel IntelCondition; `CREATE_X2ABILITY_TEMPLATE(Template, 'Intervention'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityIntervention"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityIntervention"; Template.AbilitySourceName = default.OfficerSourceName; Template.Hostility = eHostility_Neutral; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; @@ -892,10 +890,7 @@ function XComGameState InterventionAbility_BuildGameState( XComGameStateContext { UpdatedUiTimer.UiState = Normal_Blue; } - - AdjustKismetMissionTimerVariable(default.INTERVENTION_EXTRA_TURNS, NewGameState); } - //apply the intel cost CostScalars.length = 0; @@ -910,78 +905,6 @@ function XComGameState InterventionAbility_BuildGameState( XComGameStateContext return NewGameState; } -//method that bypasses the Fxs KismetVariable Manager - modified from Rusty's code -private function AdjustKismetMissionTimerVariable(int Adjustment, XComGameState NewGameState) -{ - local X2SitRepEffect_ModifyKismetVariable SitRep; - - //PrintKismetVariables(default.KismetTimerVariableNames); - - // !! NOTE !! -- Requires the ModifyKismetVariablesInternal to be UNPRIVITISED in srcOrig for compiling - // /*private*/ native function ModifyKismetVariablesInternal(XComGameState NewGameState); - - SitRep = New class'X2SitRepEffect_ModifyKismetVariable'; - SitRep.VariableNames = default.KismetTimerVariableNames; - SitRep.ValueAdjustment = Adjustment; - //SitRep.ModifyKismetVariables(); // Doesn't work due to the foreach looking for BattleData.ActiveSitReps - SitRep.ModifyKismetVariablesInternal(NewGameState); - -} - -function PrintKismetVariables(array VariableNames, optional bool bAllVars) -{ - //local array OutVariables; - local array OutObjects; - local SequenceObject SeqObj; - local SequenceVariable SeqVar; - local SeqVar_Int SeqVarTimer; - local Sequence CurrentSequence; - - /*`XWORLDINFO.MyKismetVariableMgr.RebuildVariableMap(); - `XWORLDINFO.MyKismetVariableMgr.GetVariable(name("Timer.TurnsRemaining"), OutVariables); - - foreach OutVariables(SeqVar) - { - SeqVarTimer = SeqVar_Int(SeqVar); - if(SeqVarTimer != none) - { - if(SeqVarTimer.VarName == name("Timer.TurnsRemaining")) - { - class'Helpers'.static.OutputMsg("Found KismetVariable: " $ SeqVar.VarName $ ", Value= " $ SeqVarTimer.IntValue); - SeqVarTimer.IntValue = SeqVarTimer.IntValue + Adjustment; - class'Helpers'.static.OutputMsg("-NEW- KismetVariable: " $ SeqVar.VarName $ ", Value= " $ SeqVarTimer.IntValue); - } - } - }*/ - - CurrentSequence = `XWORLDINFO.GetGameSequence(); - if(CurrentSequence == none) - { - return; - } - - CurrentSequence.FindSeqObjectsByClass(class'SequenceVariable', true, OutObjects); - - foreach OutObjects(SeqObj) - { - SeqVar = SequenceVariable(SeqObj); - if(SeqVar != none) - { - SeqVarTimer = SeqVar_Int(SeqVar); - if(SeqVarTimer != none) - { - if(VariableNames.Find(string(SeqVarTimer.VarName)) != INDEX_NONE) - { - //class'Helpers'.static.OutputMsg("KismetVariable: " $ SeqVar.VarName $ ", Value= " $ SeqVarTimer.IntValue); - //class'Helpers'.static.OutputMsg("Found KismetVariable To Adjust: " $ Adjustment); - //SeqVarTimer.IntValue = SeqVarTimer.IntValue + Adjustment; - class'Helpers'.static.OutputMsg("Named KismetVariable: " $ SeqVar.VarName $ ", Value= " $ SeqVarTimer.IntValue); - } - } - } - } -} - //code that attempts to increment the kismet timer int value //doesn't work for that (but does for Timer.DefaultTurns), so not currently used static function AddToMissionTimerVariable(int AddedValue, optional string VariableName) @@ -1101,7 +1024,7 @@ static function X2AbilityTemplate AddIncomingAbility() local X2Condition_UnitActionPoints ValidTargetCondition; `CREATE_X2ABILITY_TEMPLATE(Template, 'Incoming'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityIncoming"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityIncoming"; Template.AbilitySourceName = default.OfficerSourceName; Template.Hostility = eHostility_Neutral; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; @@ -1172,7 +1095,7 @@ static function X2AbilityTemplate AddJammerAbility() `CREATE_X2ABILITY_TEMPLATE(Template, 'Jammer'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityJammer"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityJammer"; Template.AbilitySourceName = default.OfficerSourceName; Template.Hostility = eHostility_Neutral; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; @@ -1277,7 +1200,7 @@ static function X2AbilityTemplate AddAirControllerAbility() local X2Effect_AirController AirControllerEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'AirController'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityAirController"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityAirController"; Template.AbilitySourceName = default.OfficerSourceName; Template.Hostility = eHostility_Neutral; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; @@ -1303,7 +1226,7 @@ static function X2AbilityTemplate AddInfiltratorAbility() { local X2AbilityTemplate Template; - Template = PurePassive('Infiltrator', "img:///UILibrary_LWOTC.LW_AbilityInfiltrator", false, 'eAbilitySource_Perk'); + Template = PurePassive('Infiltrator', "img:///UILibrary_LW_Overhaul.LW_AbilityInfiltrator", false, 'eAbilitySource_Perk'); return Template; } @@ -1510,7 +1433,7 @@ static function X2AbilityTemplate AddLeadershipAbility() local x2Effect_Persistent PersistentEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'Leadership'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityLeadership"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityLeadership"; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; Template.AbilityToHitCalc = default.DeadEye; @@ -1545,7 +1468,7 @@ static function X2AbilityTemplate AddEspritdeCorpsAbility() Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityLeadership"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityLeadership"; Template.AbilityToHitCalc = default.DeadEye; Template.AbilityTargetStyle = default.SimpleSingleTarget; @@ -1635,18 +1558,6 @@ static function ConfigureCommandRangeMultiTargetStyle(X2AbilityTemplate Template Template.TargetingMethod = class'X2TargetingMethod_CommandRange'; } -//helper function to submit new game states -protected static function SubmitNewGameState(out XComGameState NewGameState) -{ - if (NewGameState.GetNumGameStateObjects() > 0) - { - `GAMERULES.SubmitGameState(NewGameState); - } - else - { - `XCOMHISTORY.CleanupPendingGameState(NewGameState); - } -} DefaultProperties { diff --git a/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2DownloadableContentInfo_LWOfficerPack.uc b/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2DownloadableContentInfo_LWOfficerPack.uc index 18fa79791..9e2d22fa5 100644 --- a/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2DownloadableContentInfo_LWOfficerPack.uc +++ b/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2DownloadableContentInfo_LWOfficerPack.uc @@ -13,8 +13,8 @@ class X2DownloadableContentInfo_LWOfficerPack extends X2DownloadableContentInfo; /// static event OnLoadedSavedGame() { - //`Log("LW OfficerPack : Starting OnLoadedSavedGame"); - //UpdateOTSFacility(); + `Log("LW OfficerPack : Starting OnLoadedSavedGame"); + UpdateOTSFacility(); } static event OnPostTemplatesCreated() @@ -30,12 +30,12 @@ static event OnPostTemplatesCreated() { StaffSlotDef.StaffSlotTemplateName = 'OTSStaffSlot'; StaffSlotDef.bStartsLocked = false; - FacilityTemplate.StaffSlotDefs.InsertItem(1, StaffSlotDef); + FacilityTemplate.StaffSlotDefs.AddItem(StaffSlotDef); StaffSlotDef.StaffSlotTemplateName = 'OTSOfficerSlot'; StaffSlotDef.bStartsLocked = true; - FacilityTemplate.StaffSlotDefs.InsertItem(2, StaffSlotDef); - FacilityTemplate.StaffSlotDefs.InsertItem(3, StaffSlotDef); + FacilityTemplate.StaffSlotDefs.AddItem(StaffSlotDef); + FacilityTemplate.StaffSlotDefs.AddItem(StaffSlotDef); `log("LW OfficerPack: Added OTSOfficerSlot to facility template OfficerTrainingSchool"); FacilityTemplate.Upgrades.AddItem('OTS_LWOfficerTrainingUpgrade'); @@ -76,7 +76,7 @@ static function FindFacilityTemplateAllDifficulties(name DataName, out array static event OnLoadedSavedGameToStrategy() { - //UpdateOTSFacility(); + UpdateOTSFacility(); TransferLegacyOfficerAbilities(); } @@ -129,7 +129,7 @@ static function TransferLegacyOfficerAbilities() // update OTS Facility data static event OnPostMission() { - //UpdateOTSFacility(); + UpdateOTSFacility(); UpdateScavengerRewards(); TransferLegacyOfficerAbilities(); } @@ -350,8 +350,6 @@ static function UpdateOTSFacility() local XComGameStateHistory History; local name TemplateName; local XComGameState_FacilityXCom FacilityState, OTSState; - ///local StateObjectReference StaffSlotReference; - //local XComGameState_StaffSLot StaffSlotState; `Log("LW OfficerPack : Searching for existing OTS Facility"); TemplateName = 'OfficerTrainingSchool'; @@ -372,15 +370,7 @@ static function UpdateOTSFacility() } `Log("LW OfficerPack: Found existing OTS, Attempting to update StaffSlots"); -/* - foreach OTSState.StaffSLots(StaffSlotReference) - { - StaffSlotState = XComGameState_StaffSlot(`XCOMHISTORY.GetGameStateForObjectID(StaffSlotReference.ObjectID)); - - //loop here - } */ - - if(OTSState.StaffSlots.length == 1) + if(OTSState.StaffSlots.Length == 1) { `log("LW OfficerPack: OTS had only single staff slot, attempting to update facility"); NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Updating OTS Facility for LW_OfficerPack"); diff --git a/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2StrategyElement_LW_OTS_OfficerStaffSlot.uc b/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2StrategyElement_LW_OTS_OfficerStaffSlot.uc index 93e55f103..7e88d9801 100644 --- a/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2StrategyElement_LW_OTS_OfficerStaffSlot.uc +++ b/LongWarOfTheChosen/Src/LW_OfficerPack_Integrated/Classes/X2StrategyElement_LW_OTS_OfficerStaffSlot.uc @@ -109,20 +109,8 @@ static function X2DataTemplate CreateOTS_OfficerTrainingSecondSlotUpgradeTemplat static function OTS_LWOfficerTrainingUpgradeAdded(XComGameState NewGameState, XComGameState_FacilityUpgrade Upgrade, XComGameState_FacilityXCom Facility) { - local XComGameState_StaffSlot StaffSlotState; - local int i; - - for (i = 0; i < Facility.StaffSlots.Length; i++) - { - StaffSlotState = XComGameState_StaffSlot(`XCOMHISTORY.GetGameStateForObjectID(Facility.StaffSlots[i].ObjectID)); - - if (StaffSlotState.IsLocked() && StaffslotState.GetMyTemplate().DataName == 'OTSOfficerSlot' ) - { - StaffSlotState = XComGameState_StaffSlot(NewGameState.ModifyStateObject(class'XComGameState_StaffSlot', Facility.StaffSlots[i].ObjectID)); - StaffSlotState.UnlockSlot(); - return; - } - } + Facility.UpkeepCost += Upgrade.GetMyTemplate().UpkeepCost; + Facility.UnlockStaffSlot(NewGameState); } static function bool IsGTSProjectActive(StateObjectReference FacilityRef) diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/CHItemSlot_PistolSlot_LW.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/CHItemSlot_PistolSlot_LW.uc index d7b995221..f5ee772f7 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/CHItemSlot_PistolSlot_LW.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/CHItemSlot_PistolSlot_LW.uc @@ -50,45 +50,10 @@ static function X2DataTemplate CreatePistolSlotTemplate() Template.GetPriorityFn = PistolGetPriority; Template.ShowItemInLockerListFn = ShowPistolItemInLockerList; Template.GetSlotUnequipBehaviorFn = PistolGetUnequipBehavior; - Template.ValidateLoadoutFn = SlotValidateLoadout; return Template; } -//Code borrowed from Iridar to remove items from slots. -static function SlotValidateLoadout(CHItemSlot Slot, XComGameState_Unit Unit, XComGameState_HeadquartersXCom XComHQ, XComGameState NewGameState) -{ - local XComGameState_Item ItemState; - local string strDummy; - local bool HasSlot; - local bool bShouldUnequip; - - ItemState = Unit.GetItemInSlot(Slot.InvSlot, NewGameState); - HasSlot = Slot.UnitHasSlot(Unit, strDummy, NewGameState); - if (!HasSlot) - { - bShouldUnequip = true; - } - else if (ItemState != none) - { - if (!IsWeaponAllowedInPistolSlot(X2WeaponTemplate(ItemState.GetMyTemplate()))) - { - bShouldUnequip = true; - } - } - - // If there's an item equipped in the slot, but the unit is not supposed to have the slot, or the item is not supposed to be in the slot, then unequip it and put it into HQ Inventory. - if (bShouldUnequip && ItemState != none) - { - ItemState = XComGameState_Item(NewGameState.ModifyStateObject(class'XComGameState_Item', ItemState.ObjectID)); - Unit = XComGameState_Unit(NewGameState.ModifyStateObject(class'XComGameState_Unit', Unit.ObjectID)); - if (Unit.RemoveItemFromInventory(ItemState, NewGameState)) - { - XComHQ.PutItemInInventory(NewGameState, ItemState); - } - } -} - static function bool CanAddItemToPistolSlot( CHItemSlot Slot, XComGameState_Unit UnitState, diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWTemplateMods.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWTemplateMods.uc index bd0b06243..c0987015f 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWTemplateMods.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWTemplateMods.uc @@ -296,7 +296,6 @@ var config WeaponDamageValue WARLOCKPSIM1_BASEDAMAGE; var config WeaponDamageValue WARLOCKPSIM2_BASEDAMAGE; var config WeaponDamageValue WARLOCKPSIM3_BASEDAMAGE; var config WeaponDamageValue WARLOCKPSIM4_BASEDAMAGE; -var config WeaponDamageValue WARLOCKPSIM5_BASEDAMAGE; static function array CreateTemplates() { @@ -1155,11 +1154,11 @@ function ModifyAbilitiesGeneral(X2AbilityTemplate Template, int Difficulty) Template.PrerequisiteAbilities.RemoveItem('Soulfire'); } - // if (Template.DataName == 'Soulfire') - // { - // Cooldown = new class 'X2AbilityCooldown_Soulfire'; - // Template.AbilityCooldown = Cooldown; - // } + if (Template.DataName == 'Soulfire') + { + Cooldown = new class 'X2AbilityCooldown_Soulfire'; + Template.AbilityCooldown = Cooldown; + } if (Template.DataName == 'PoisonSpit' || Template.DataName == 'MicroMissiles') { @@ -1328,8 +1327,7 @@ function ModifyAbilitiesGeneral(X2AbilityTemplate Template, int Difficulty) } if (Template.DataName == 'Deadeye') { - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_HideIfOtherAvailable; - Template.HideIfAvailable.AddItem('DeadeyeSnapShot'); + Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; CooldownShared = new class'X2AbilityCooldown_Shared'; CooldownShared.iNumTurns = class'X2Ability_SharpshooterAbilitySet'.default.DEADEYE_COOLDOWN; CooldownShared.SharingCooldownsWith.AddItem('DeadeyeSnapShot'); @@ -1348,46 +1346,12 @@ function ModifyAbilitiesGeneral(X2AbilityTemplate Template, int Difficulty) } } - if (Template.DataName == 'ChainShot') - { - for (k = 0; k < Template.AbilityCosts.length; k++) - { - ActionPointCost = X2AbilityCost_ActionPoints(Template.AbilityCosts[k]); - if (ActionPointCost != none) - { - Template.AbilityCosts.RemoveItem(ActionPointCost); - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - - ActionPointCost.iNumPoints = 0; - ActionPointCost.bAddWeaponTypicalCost = true; - ActionPointCost.bConsumeAllPoints = true; - - Template.AbilityCosts.AddItem(ActionPointCost); - } - } - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_HideIfOtherAvailable; - Template.HideIfAvailable.AddItem('ChainShotSnapShot'); - CooldownShared = new class'X2AbilityCooldown_Shared'; - CooldownShared.iNumTurns = class'X2Ability_GrenadierAbilitySet'.default.CHAINSHOT_COOLDOWN; - CooldownShared.SharingCooldownsWith.AddItem('ChainShotSnapShot'); - Template.AbilityCooldown = CooldownShared; - - Template.AdditionalAbilities.AddItem('ChainShotSnapShot'); - } - if (Template.DataName == 'RapidFire') { - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_HideIfOtherAvailable; - Template.HideIfAvailable.AddItem('RapidFireSnapShot'); - Cooldown = new class'X2AbilityCooldown_Shared'; + Cooldown = new class'X2AbilityCooldown'; Cooldown.iNumTurns = default.RAPIDFIRE_COOLDOWN; - CooldownShared.SharingCooldownsWith.AddItem('RapidFireSnapShot'); Template.AbilityCooldown = Cooldown; - - Template.AdditionalAbilities.AddItem('RapidFireSnapShot'); } - - // Steady Hands // Stasis Vest // Air Controller @@ -2102,8 +2066,6 @@ function ReplacePlaceEvacAbility(X2CharacterTemplate Template, int Difficulty) if (Template.Abilities.Find('PlaceEvacZone') != -1) { Template.Abilities.RemoveItem('PlaceEvacZone'); - // Give them the flare instead; this ability gives PlaceDelatedEvacZone - Template.Abilities.AddItem('GrantEvacFlare'); } } @@ -2288,13 +2250,9 @@ function GeneralCharacterMod(X2CharacterTemplate Template, int Difficulty) Template.Abilities.AddItem('WarlockReaction'); //Template.Abilities.AddItem('AmmoDump_LW'); Template.Abilities.AddItem('ChosenCritImmune'); - + Template.Abilities.AddItem('ChosenImmunitiesPassive'); Template.Abilities.AddItem('ChosenLootAbility'); Template.Abilities.AddItem('TriggerDamagedTeleport_LW'); - Template.Abilities.AddItem('MovingTarget_LW'); - - Template.strScamperBT = "ScamperRoot_ChosenWarlock"; - Template.ScamperActionPoints = 3; Template.InitiativePriority = -100; @@ -2319,13 +2277,13 @@ function GeneralCharacterMod(X2CharacterTemplate Template, int Difficulty) Template.Abilities.AddItem('LongWatch'); Template.Abilities.AddItem('quickdraw'); Template.Abilities.AddItem('ChosenImmuneMelee'); - + Template.Abilities.AddItem('ReadyForAnything'); + Template.Abilities.AddItem('ChosenImmunitiesPassive'); Template.Abilities.AddItem('FreeGrenades'); Template.Abilities.AddItem('Infighter'); Template.Abilities.AddItem('Disabler'); Template.Abilities.AddItem('ChosenLootAbility'); Template.Abilities.AddItem('TriggerDamagedTeleport_LW'); - Template.Abilities.AddItem('MovingTarget_LW'); Template.ImmuneTypes.AddItem('Frost'); Template.InitiativePriority = -100; @@ -2345,14 +2303,13 @@ function GeneralCharacterMod(X2CharacterTemplate Template, int Difficulty) Template.Abilities.AddItem('BloodThirst_LW'); Template.Abilities.AddItem('Hitandrun'); Template.Abilities.AddItem('FreeGrenades'); - + Template.Abilities.AddItem('ChosenImmunitiesPassive'); Template.Abilities.AddItem('AssassinSlash_LW'); Template.Abilities.AddItem('ImpactCompensation_LW'); Template.Abilities.AddItem('Infighter'); Template.Abilities.AddItem('ChosenLootAbility'); Template.Abilities.AddItem('Unstoppable_LW'); Template.Abilities.AddItem('TriggerDamagedTeleport_LW'); - Template.Abilities.AddItem('MovingTarget_LW'); Template.ImmuneTypes.AddItem('Frost'); Template.InitiativePriority = -100; @@ -2515,13 +2472,6 @@ function ReconfigGear(X2ItemTemplate Template, int Difficulty) case 'ChosenSniperPistol_T4': WeaponTemplate.Abilities.RemoveItem('LethalDose'); break; - case 'ChosenSniperRifle_CV': - case 'ChosenSniperRifle_MG': - case 'ChosenSniperRifle_BM': - case 'ChosenSniperRifle_T4': - //WeaponTemplate.Abilities.RemoveItem('TrackingShot'); - WeaponTemplate.Abilities.RemoveItem('HunterKillzone'); - break; case 'Warlock_PsiWeapon': WeaponTemplate.Abilities.AddItem('ShieldAllyM1'); @@ -2550,15 +2500,11 @@ function ReconfigGear(X2ItemTemplate Template, int Difficulty) WeaponTemplate.Abilities.RemoveItem('SpectralArmyM4'); WeaponTemplate.Abilities.RemoveItem('CorressM4'); break; - case 'WarlockM5_PsiWeapon': - WeaponTemplate.Abilities.AddItem('ShieldAllyM5'); - WeaponTemplate.BaseDamage = default.WARLOCKPSIM5_BASEDAMAGE; - break; case 'ChosenRifle_XCOM': WeaponTemplate.Abilities.AddItem('OverbearingSuperiority_LW'); WeaponTemplate.OnAcquiredFn = none; - //WeaponTemplate.SetUIStatMarkup(class'XLocalizedData'.default.AimLabel, eStat_Offense, class'X2Item_XpackWeapons'.default.CHOSENRIFLE_XCOM_AIM); + WeaponTemplate.SetUIStatMarkup(class'XLocalizedData'.default.AimLabel, eStat_Offense, class'X2Item_XpackWeapons'.default.CHOSENRIFLE_XCOM_AIM); break; case 'ChosenSniperRifle_XCOM': WeaponTemplate.iTypicalActionCost = 2; @@ -2580,7 +2526,7 @@ function ReconfigGear(X2ItemTemplate Template, int Difficulty) WeaponTemplate.OnAcquiredFn = none; break; case 'ChosenShotgun_XCOM': - //WeaponTemplate.Abilities.AddItem('Brawler'); + WeaponTemplate.Abilities.AddItem('Brawler'); WeaponTemplate.Abilities.AddItem('Vampirism_LW'); WeaponTemplate.Abilities.AddItem('ImpactCompensation_LW'); WeaponTemplate.OnAcquiredFn = none; @@ -2596,12 +2542,6 @@ function ReconfigGear(X2ItemTemplate Template, int Difficulty) } } break; - case 'AlienHunterRifle_CV': - case 'AlienHunterRifle_MG': - case 'AlienHunterRifle_BM': - WeaponTemplate.Abilities.AddItem('LockNLoad_LW'); - WeaponTemplate.Abilities.AddItem('Concentration_LW'); - break; default: break; } @@ -2954,8 +2894,8 @@ function ReconfigGear(X2ItemTemplate Template, int Difficulty) case 'MutonGrenade' : case 'MutonM2_LWGrenade' : case 'MutonM3_LWGrenade' : - GrenadeTemplate.AddAbilityIconOverride('ThrowGrenade', "img:///UILibrary_LWOTC.UIPerk_grenade_aliengrenade"); - GrenadeTemplate.AddAbilityIconOverride('LaunchGrenade', "img:///UILibrary_LWOTC.UIPerk_grenade_aliengrenade"); + GrenadeTemplate.AddAbilityIconOverride('ThrowGrenade', "img:///UILibrary_LW_Overhaul.UIPerk_grenade_aliengrenade"); + GrenadeTemplate.AddAbilityIconOverride('LaunchGrenade', "img:///UILibrary_LW_Overhaul.UIPerk_grenade_aliengrenade"); `LWTRACE("Added Ability Icon Override for Alien Grenade"); break; default : diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWVersion.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWVersion.uc index 48f25b89a..e5c56ff16 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWVersion.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/LWVersion.uc @@ -47,8 +47,7 @@ function static int GetVersionNumber(optional out int Major, optional out int Mi defaultproperties { MajorVersion = 1; - MinorVersion = 1; - PatchVersion = 0; - Classifier = "RC8" - + MinorVersion = 0; + PatchVersion = 5; + Classifier = "Steam" } diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIResistanceManagement_ListItem.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIResistanceManagement_ListItem.uc index 6257a5dee..fa5975185 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIResistanceManagement_ListItem.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIResistanceManagement_ListItem.uc @@ -185,7 +185,7 @@ simulated function UpdateData(bool Focused = false) { strCount $= " "; strCount $= class'UIUtilities_Text'.static.GetColoredText(string(Outpost.GetResistanceMecCount()), Focused ? -1 : eUIState_Normal, TheListItemFontSize); - strCount $= class'UIUtilities_Text'.static.InjectImage("img:///UILibrary_LWOTC.Resistance_Mec_icon", TheIconSize, TheIconSize, TheIconOffset); + strCount $= class'UIUtilities_Text'.static.InjectImage("img:///UILibrary_LW_Overhaul.Resistance_Mec_icon", TheIconSize, TheIconSize, TheIconOffset); } RebelCount.SetCenteredText(strCount); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_GetPCSImageOverride.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_GetPCSImageOverride.uc index 51966b74c..260fd9271 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_GetPCSImageOverride.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_GetPCSImageOverride.uc @@ -53,28 +53,28 @@ function EventListenerReturn GetPCSImage(Object EventData, Object EventSource, X // //switch (ItemState.GetMyTemplateName()) //{ - //case 'DepthPerceptionPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_depthperception"; break; - //case 'HyperReactivePupilsPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hyperreactivepupils"; break; - //case 'CombatAwarenessPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_threatassessment"; break; - //case 'DamageControlPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_damagecontrol"; break; - //case 'AbsorptionFieldsPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_impactfield"; break; - //case 'BodyShieldPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_bodyshield"; break; - //case 'EmergencyLifeSupportPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_emergencylifesupport"; break; - //case 'IronSkinPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_ironskin"; break; - //case 'SmartMacrophagesPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_smartmacrophages"; break; - //case 'CombatRushPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_combatrush"; break; - //case 'CommonPCSDefense': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_defense"; break; - //case 'RarePCSDefense': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_defense"; break; - //case 'EpicPCSDefense': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_defense"; break; - //case 'CommonPCSAgility': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_dodge"; break; - //case 'RarePCSAgility': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_dodge"; break; - //case 'EpicPCSAgility': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_dodge"; break; - //case 'CommonPCSHacking': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hacking"; break; - //case 'RarePCSHacking': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hacking"; break; - //case 'EpicPCSHacking': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hacking"; break; - //case 'FireControl25PCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_firecontrol"; break; - //case 'FireControl50PCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_firecontrol"; break; - //case 'FireControl75PCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_firecontrol"; break; + //case 'DepthPerceptionPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_depthperception"; break; + //case 'HyperReactivePupilsPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hyperreactivepupils"; break; + //case 'CombatAwarenessPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_threatassessment"; break; + //case 'DamageControlPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_damagecontrol"; break; + //case 'AbsorptionFieldsPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_impactfield"; break; + //case 'BodyShieldPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_bodyshield"; break; + //case 'EmergencyLifeSupportPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_emergencylifesupport"; break; + //case 'IronSkinPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_ironskin"; break; + //case 'SmartMacrophagesPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_smartmacrophages"; break; + //case 'CombatRushPCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_combatrush"; break; + //case 'CommonPCSDefense': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_defense"; break; + //case 'RarePCSDefense': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_defense"; break; + //case 'EpicPCSDefense': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_defense"; break; + //case 'CommonPCSAgility': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_dodge"; break; + //case 'RarePCSAgility': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_dodge"; break; + //case 'EpicPCSAgility': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_dodge"; break; + //case 'CommonPCSHacking': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hacking"; break; + //case 'RarePCSHacking': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hacking"; break; + //case 'EpicPCSHacking': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hacking"; break; + //case 'FireControl25PCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_firecontrol"; break; + //case 'FireControl50PCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_firecontrol"; break; + //case 'FireControl75PCS': OverridePCSImageTuple.Data[0].b = true; OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_firecontrol"; break; // //default: OverridePCSImageTuple.Data[0].b = false; //} diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_ShellDifficulty.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_ShellDifficulty.uc index 9b942bfff..c88b0fcc0 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_ShellDifficulty.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIScreenListener_ShellDifficulty.uc @@ -117,13 +117,13 @@ function AddLogoAndCredits(UIScreen Screen) LongWar2Image = Screen.Spawn(class'UIImage', Screen); LongWar2Image.bAnimateOnInit = false; - LongWar2Image.InitImage('LongWar2ShellImage', "img:///UILibrary_LWOTC.longwar_fin_white"); + LongWar2Image.InitImage('LongWar2ShellImage', "img:///UILibrary_LW_Overhaul.longwar_fin_white"); LongWar2Image.SetPosition(-436, -103); LongWar2Image.SetScale(0.818); PavonisImage = Screen.Spawn(class'UIImage', Screen); PavonisImage.bAnimateOnInit = false; - PavonisImage.InitImage('PavonisShellImage', "img:///UILibrary_LWOTC.512pxPavonisLogofinalmerged"); + PavonisImage.InitImage('PavonisShellImage', "img:///UILibrary_LW_Overhaul.512pxPavonisLogofinalmerged"); PavonisImage.SetPosition(-461, 510); PavonisImage.SetScale(0.5); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIStrategyMapItem_AlienNetworkComponent_LW.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIStrategyMapItem_AlienNetworkComponent_LW.uc index f88df772c..be976eb95 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIStrategyMapItem_AlienNetworkComponent_LW.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/UIStrategyMapItem_AlienNetworkComponent_LW.uc @@ -1,517 +1,517 @@ -//--------------------------------------------------------------------------------------- -// FILE: UIStrategyMapItem_AlienNetworkComponent_LW -// AUTHOR: Joey Martinez -- 05/06/2019 -// PURPOSE: This file represents an alien network spot on the StrategyMap for Long War of the Chosen. -// The base game class is being overridden because the infiltration label was not showing -// up when you sent a squad to infiltrate an alien facility with the base implentation of -// the parent class. -// -// This class' code is a literal copy paste of the UIStrategyMapItem_Mission_LW class so -// that the alien facility strategy item has the same infiltration mechanics as other missions -// do. All of the code in this class is unique to this class and does not override any of the -// parent class behavior. -// -// KDM : The same controller code found in UIStrategyMapItem_Mission_LW has been implemented here so -// that alien facilities are 'clickable'. -//--------------------------------------------------------------------------------------- - -class UIStrategyMapItem_AlienNetworkComponent_LW extends UIStrategyMapItem_AlienNetworkComponent; - -var UIScanButton ScanButton; // used for missions being infiltrated -var UIText InfilPct; -var UIText InfilLabel; - -var UIImage SquadImage; // for cases where there is an infiltrating squad -var string CachedImageName; - -var UIProgressBar ProgressBar; // used to show remaining time for missions not yet infiltrated - -var int InDepth; // tracks depth of mouse in and outs, since it's recording from two possibly overlapping elements (2D and 3D icons) - -var localized string strRecon; - -var transient bool bScanButtonResized; -var transient float CachedScanButtonWidth; - -simulated function UIStrategyMapItem InitMapItem(out XComGameState_GeoscapeEntity Entity) -{ - // override the super so we can always use MI_alienfacility to allow displaying of doom pips - //super.InitMapItem(Entity); - - local string PinImage; - // Initialize static data - InitPanel(Name(Entity.GetUIWidgetName()), 'MI_alienFacility'); - - PinImage = Entity.GetUIPinImagePath(); - if (PinImage != "") - { - SetImage(PinImage); - } - - InitFromGeoscapeEntity(Entity); - - ScanButton = Spawn(class'UIScanButton', self).InitScanButton(); - ScanButton.SetButtonIcon(""); - ScanButton.SetDefaultDelegate(OpenInfiltrationMissionScreen); - ScanButton.SetButtonType(eUIScanButtonType_Default); - - SquadImage = Spawn(class'UIImage', self); - SquadImage.bAnimateOnInit = false; - SquadImage.InitImage().SetSize(48, 48); - - InfilPct = Spawn(class'UIText', ScanButton).InitText('InfilPct_LW', ""); - InfilPct.SetWidth(60); - InfilPct.SetPosition(154, 3); - - InfilLabel = Spawn(class'UIText', ScanButton).InitText('InfilLabel_LW', ""); - InfilLabel.SetWidth(60); - InfilLabel.SetPosition(154 - 5, 23); - - ProgressBar = Spawn(class'UIProgressBar', self).InitProgressBar('MissionInfiltrationProgress', -32, 5, 64, 8, 0.5, eUIState_Normal); - - bScanButtonResized = false; - - InstanceMapItem3DMaterial(); - - // KDM : The mission map item's help icon gets in the way of the infiltrating squad icon; the best way to deal with it is to null it. - // For more information on a similar topic please see the comments in UIStrategyMapItem_Region_LW --> InitMapItem(). - if (`ISCONTROLLERACTIVE) - { - ScanButton.MC.SetNull("consoleHint"); - } - - return self; -} - -function InstanceMapItem3DMaterial() -{ - local int i; - local MaterialInterface Mat; - local MaterialInstanceConstant MIC, NewMIC; - - if (MapItem3D == none) - return; - - - - for (i = 0; i < MapItem3D.OverworldMeshs[MapItem3D.ROOT_TILE].GetNumElements(); ++i) - { - Mat = MapItem3D.GetMeshMaterial(i); - MIC = MaterialInstanceConstant(Mat); - - // It is possible for there to be MITVs in these slots, so check - if (MIC != none) - { - // If this is not a child MIC, make it one. This is done so that the material updates below don't stomp - // on each other between units. - if (InStr(MIC.Name, "MaterialInstanceConstant") == INDEX_NONE) - { - NewMIC = new (self) class'MaterialInstanceConstant'; - NewMIC.SetParent(MIC); - MapItem3D.SetMeshMaterial(i, NewMIC); - MIC = NewMIC; - } - } - } - -} - -function UpdateFromGeoscapeEntity(const out XComGameState_GeoscapeEntity GeoscapeEntity) -{ - local int InfiltrationPct, InfiltrationTextColour; - local float ScanWidth; - local string InfiltrationPctValue, MissionInfo, MissionTitle; - local X2MissionTemplate MissionTemplate; - local XComGameState_LWPersistentSquad InfiltratingSquad; - local XComGameState_MissionSite MissionState; - - if (!bIsInited) - { - return; - } - - super(UIStrategyMapItem).UpdateFromGeoscapeEntity(GeoscapeEntity); - - InfiltratingSquad = GetInfiltratingSquad(); - - MissionState = GetMission(); - if (InfiltratingSquad != none) - { - InfiltrationTextColour = (bIsFocused) ? -1 : eUIState_Normal; - - InfiltrationPct = int(InfiltratingSquad.CurrentInfiltration * 100.0); - InfiltrationPctValue = string(InfiltrationPct) $ "%"; - - // KDM : When using a controller, there are 2 general colour states : - // 1.] This mission map item is selected, so its background is highlighted, and its text should be black. - // 2.] This mission map item is not selected, so its background is not highlighted, and its text should be normal blue. - if (`ISCONTROLLERACTIVE) - { - // KDM : When using a controller, the infiltration label needs to be continually refreshed according to the map item's selection status. - // When using a mouse & keyboard, the infiltration label doesn't need to change, so it can be called a single time down below. - InfilLabel.SetHTMLText(CenterText(class'UIUtilities_Text_LW'.static.AddFontInfoWithColor(strRecon, false, false, , 16, InfiltrationTextColour))); - InfilPct.SetHTMLText(CenterText(class'UIUtilities_Text_LW'.static.AddFontInfoWithColor(InfiltrationPctValue, false, true, , 20, InfiltrationTextColour))); - } - else - { - InfilPct.SetHTMLText(CenterText(class'UIUtilities_Text'.static.AddFontInfo(InfiltrationPctValue, false, true, , 20))); - } - - if (!bScanButtonResized) - { - MissionTitle = class'UIUtilities_Text'.static.CapsCheckForGermanScharfesS(InfiltratingSquad.sSquadName); - MissionTemplate = class'X2MissionTemplateManager'.static.GetMissionTemplateManager().FindMissionTemplate(MissionState.GeneratedMission.Mission.MissionName); - MissionInfo = class'UIUtilities_Text'.static.CapsCheckForGermanScharfesS(MissionTemplate.PostMissionType); - - ScanButton.SetText(MissionTitle, MissionInfo, " ", " "); // have to leave blank spaces so that Flash will size BG big enough - SetLevel(0); // show 0 doom pips - - // KDM : Infiltration label handling for controllers is dealt with up above. - if (!`ISCONTROLLERACTIVE) - { - InfilLabel.SetHTMLText(CenterText(class'UIUtilities_Text'.static.GetSizedText(strRecon, 16))); - } - - bScanButtonResized = true; - - CachedImageName = InfiltratingSquad.GetSquadImagePath(); - SquadImage.LoadImage(CachedImageName); - } - ScanButton.DefaultState(); - ScanButton.PulseScanner(false); - ScanButton.ShowScanIcon(false); - ScanButton.Realize(); - - // but the MC queuing system means that the width isn't set here the first time it's been invoked - ScanWidth = ScanButton.MC.GetNum("bg._width"); - - if (ScanWidth != CachedScanButtonWidth) - { - InfilPct.SetX(ScanWidth - 60); - InfilLabel.SetX(ScanWidth - 65); - ScanButton.SetX(- (ScanWidth/2)); - - CachedScanButtonWidth = ScanWidth; - - SquadImage.SetPosition(-(ScanWidth/2 + 48), 0); - } - if (CachedImageName != InfiltratingSquad.GetSquadImagePath()) - { - CachedImageName = InfiltratingSquad.GetSquadImagePath(); - SquadImage.LoadImage(CachedImageName); - } - - ProgressBar.Hide(); - } - else if (MissionState.MakesDoom()) - { - SetLevel(MissionState.Doom); - ProgressBar.Hide(); - ScanButton.Hide(); - bScanButtonResized = false; - } - else - { - ProgressBar.Show(); - UpdateProgressBar(MissionState); - - ScanButton.Hide(); - SquadImage.Hide(); - bScanButtonResized = false; - } - - // KDM : Our custom, mission map item, tooltip contains information, like mission expiration and infiltration percentage, which changes over - // time; therefore, we need to continously update it. However, there are a few caveats : - // - // 1.] Tooltips are not created under normal circumstances for mission map items; therefore, we only need to worry about updating when - // a controller is being used, and SHOW_MISSION_TOOLTIPS_CTRL is true. - // 2.] UIStrategyMap stores a single active tooltip, ActiveTooltip, which it associates with the currently selected map item; unfortunately, - // UpdateFromGeoscapeEntity() is called regardless of whether this map item is selected or not. Consequently, we don't want this mission - // map item polluting the tool tip when it is not selected. - if (GetStrategyMap().SelectedMapItem == self && `ISCONTROLLERACTIVE && class'UIStrategyMapItem_Mission_LW'.default.SHOW_MISSION_TOOLTIPS_CTRL) - { - UpdateTooltip(); - } -} - -simulated function string CenterText(string Text) -{ - return class'UIUtilities_Text'.static.AlignCenter(Text); -} - -simulated function XComGameState_LWPersistentSquad GetInfiltratingSquad() -{ - return `LWSQUADMGR.GetSquadOnMission(GeoscapeEntityRef); -} - -simulated function XComGameState_MissionSite GetMission() -{ - return XComGameState_MissionSite(`XCOMHISTORY.GetGameStateForObjectID(GeoscapeEntityRef.ObjectID)); -} - -function OpenInfiltrationMissionScreen() -{ - local UIMission_LWLaunchDelayedMission MissionScreen; - local XComHQPresentationLayer HQPres; - - HQPres = `HQPRES; - MissionScreen = HQPres.Spawn(class'UIMission_LWLaunchDelayedMission', HQPres); - MissionScreen.MissionRef = GeoscapeEntityRef; - MissionScreen.bInstantInterp = false; - MissionScreen = UIMission_LWLaunchDelayedMission(HQPres.ScreenStack.Push(MissionScreen)); -} - -simulated function OnMouseEvent(int cmd, array args) -{ - if (GetStrategyMap().m_eUIState == eSMS_Flight) - { - return; - } - - switch(cmd) - { - case class'UIUtilities_Input'.const.FXS_L_MOUSE_IN: - OnMouseIn(); - break; - case class'UIUtilities_Input'.const.FXS_L_MOUSE_OUT: - OnMouseOut(); - break; - // KDM : A mouse click opens a mission's infiltration screen if it is currently being infiltrated. - case class'UIUtilities_Input'.const.FXS_L_MOUSE_UP: - MapItemMissionClicked(); - break; - } -} - -// KDM : This code was stripped out of OnMouseEvent() --> FXS_L_MOUSE_UP and placed within a function so that it could be called from both -// 1.] OnMouseEvent() for mouse & keyboard users 2.] OnUnrealCommand() for controller users. -simulated function MapItemMissionClicked() -{ - local XComGameState_GeoscapeEntity GeoscapeEntity; - local XComGameState_LWPersistentSquad InfiltratingSquad; - local XComGameStateHistory History; - - History = `XCOMHISTORY; - InfiltratingSquad = GetInfiltratingSquad(); - - if (InfiltratingSquad == none) - { - GeoscapeEntity = XComGameState_GeoscapeEntity(History.GetGameStateForObjectID(GeoscapeEntityRef.ObjectID)); - GeoscapeEntity.AttemptSelectionCheckInterruption(); - } - else - { - OpenInfiltrationMissionScreen(); - } -} - -simulated function UpdateProgressBar(XComGameState_MissionSite MissionState) -{ - local int RemainingSeconds; - - if(ProgressBar == none) - return; - - if(MissionState.ExpirationDateTime.m_iYear < 2100) - { - RemainingSeconds = class'X2StrategyGameRulesetDataStructures'.static.DifferenceInSeconds(MissionState.ExpirationDateTime, class'XComGameState_GeoscapeEntity'.static.GetCurrentTime()); - ProgressBar.SetPercent(1.0); - SetProgressBarColor(RemainingSeconds); - ProgressBar.Show(); - } - else - { - ProgressBar.SetPercent(0.0); - ProgressBar.Hide(); - } -} - -simulated function SetProgressBarColor(float RemainingSeconds) -{ - local float PercentIdealInfiltration; - - PercentIdealInfiltration = (RemainingSeconds / 3600.0) / class'XComGameState_LWPersistentSquad'.static.GetBaselineHoursToInfiltration(GeoscapeEntityRef); - - if (PercentIdealInfiltration >= 1.0) - { - ProgressBar.SetColor(class'UIUtilities_Colors'.const.GOOD_HTML_COLOR); - } - else if(PercentIdealInfiltration >= 0.5) - { - ProgressBar.SetColor(class'UIUtilities_Colors'.const.WARNING_HTML_COLOR); - } - else if(RemainingSeconds >= 86400.0) - { - ProgressBar.SetColor(class'UIUtilities_Colors'.const.WARNING2_HTML_COLOR); - } - else - { - ProgressBar.SetColor(class'UIUtilities_Colors'.const.BAD_HTML_COLOR); - } - -} - -//---------------- 3D Map Icon Handling ------------------- -simulated function OnMouseIn() -{ - if (InDepth == 0) - { - super(UIStrategyMapItem).OnMouseIn(); - - if(MapItem3D != none) - MapItem3D.SetHoverMaterialValue(1); - if(AnimMapItem3D != none) - AnimMapItem3D.SetHoverMaterialValue(1); - } - InDepth++; -} - -// Clear mouse hover special behavior -simulated function OnMouseOut() -{ - InDepth--; - - if (InDepth <= 0) - { - super(UIStrategyMapItem).OnMouseOut(); - - if(MapItem3D != none) - MapItem3D.SetHoverMaterialValue(0); - if(AnimMapItem3D != none) - AnimMapItem3D.SetHoverMaterialValue(0); - } -} - -simulated function Show() -{ - // override to always allow showing items - super(UIPanel).Show(); -} - -simulated function OnLoseFocus() -{ - super.OnLoseFocus(); -} - -function string GetToolTipText() -{ - local int InfiltrationPct; - local string BodyStr, TitleStr, InfiltrationPctStr, TooltipHTML; - local XComGameState_LWPersistentSquad InfiltratingSquad; - local XComGameState_MissionSite Mission; - - InfiltratingSquad = GetInfiltratingSquad(); - Mission = GetMission(); - - TooltipHTML = ""; - - if (Mission != none) - { - class'X2EventListener_StrategyMap'.static.GetMissionSiteUIButtonToolTip(TitleStr, BodyStr, none, Mission); - TitleStr = class'UIUtilities_Text'.static.GetColoredText(TitleStr, eUIState_Header); - - // KDM : The title includes the amount of time left before the mission expires; this is very useful information. - TooltipHTML $= TitleStr; - TooltipHTML $= "\n"; - TooltipHTML $= "--------------------------------"; - // KDM : If a squad is infiltrating, show the infiltration percentage. - if (InfiltratingSquad != none) - { - TooltipHTML $= "\n"; - TooltipHTML $= class'UIStrategyMapItem_Mission_LW'.default.InfiltrationTooltipString $ " : "; - - InfiltrationPct = int(InfiltratingSquad.CurrentInfiltration * 100.0); - InfiltrationPctStr = class'UIUtilities_Text'.static.GetColoredText(string(InfiltrationPct), eUIState_Good); - - TooltipHTML $= InfiltrationPctStr @ "%"; - TooltipHTML $= "\n"; - TooltipHTML $= "--------------------------------"; - } - TooltipHTML $= "\n"; - TooltipHTML $= BodyStr; - } - return TooltipHTML; -} - -function UpdateTooltip() -{ - local string TooltipHTML; - local UIStrategyMap StrategyMap; - - StrategyMap = GetStrategyMap(); - - // KDM : If the strategy map has no active tooltip, then there is nothing to update. - if (StrategyMap.ActiveTooltip != none) - { - // KDM : Get the new tooltip text and update the active tooltip. - TooltipHTML = GetToolTipText(); - StrategyMap.ActiveTooltip.SetText(TooltipHTML); - StrategyMap.ActiveTooltip.UpdateData(); - - // KDM : The tooltip data has been updated; however, this information is not pushed to the flash UI element, so we don't see - // any changes. There are 2 ways around this : - // - // 1.] The flash element, TooltipBox, has a function, Show(), which updates the tooltip's : Style, Text, Size, BG, and Location. - // Furthermore, it animates the tooltip in. This is a nice 'complete' method, but it involves us having to constantly hide and show the - // tooltip within UnrealScript. Additionally, it requires us to kill the tooltip's animation since we can't have it contantly fading in - // and fading out. - // 2.] Update the flash element's : Style, Text, Size, and BG, via Actionscript calls. This is a better solution because it updates - // the tooltip text and size, without having to resort to hiding and showing the tooltip; furthermore, it doesn't mess with any - // tooltip animations. - StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeStyle"); - StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeText"); - StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeSize"); - StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeBG"); - } -} - -// KDM : Long War provides useful mission tooltips; however, they only appear over the mission icons on the bottom icon bar, and are only -// accessible to mouse & keyboard users. Consequently, we want to give controller users the opportunity to display this information as a normal tooltip -// next to the mission map item. -function GenerateTooltip(string tooltipHTML) -{ - // KDM : Normally, for mission map items, tooltipHTML will be an empty string; consequently, no tooltip will be created. - // Only show mission tooltips if the controller is active, and SHOW_MISSION_TOOLTIPS_CTRL is true. - if (`ISCONTROLLERACTIVE && class'UIStrategyMapItem_Mission_LW'.default.SHOW_MISSION_TOOLTIPS_CTRL) - { - tooltipHTML = GetToolTipText(); - } - - super.GenerateTooltip(tooltipHTML); -} - -simulated function bool OnUnrealCommand(int cmd, int arg) -{ - local bool bHandled; - - if (!CheckInputIsReleaseOrDirectionRepeat(cmd, arg)) - { - return true; - } - - bHandled = true; - - switch(cmd) - { - // KDM : The A button opens a mission's infiltration screen if it is currently being infiltrated. - // OnMouseEvent() checks if the Avenger is in flight before executing any of its code; consequently, the same is done here for consistency. - case class'UIUtilities_Input'.static.GetAdvanceButtonInputCode(): - if (GetStrategyMap().m_eUIState != eSMS_Flight) - { - MapItemMissionClicked(); - } - break; - - default : - bHandled = false; - break; - } - - return bHandled || super.OnUnrealCommand(cmd, arg); -} - -DefaultProperties -{ - bDisableHitTestWhenZoomedOut = false; - bFadeWhenZoomedOut = false; -} +//--------------------------------------------------------------------------------------- +// FILE: UIStrategyMapItem_AlienNetworkComponent_LW +// AUTHOR: Joey Martinez -- 05/06/2019 +// PURPOSE: This file represents an alien network spot on the StrategyMap for Long War of the Chosen. +// The base game class is being overridden because the infiltration label was not showing +// up when you sent a squad to infiltrate an alien facility with the base implentation of +// the parent class. +// +// This class' code is a literal copy paste of the UIStrategyMapItem_Mission_LW class so +// that the alien facility strategy item has the same infiltration mechanics as other missions +// do. All of the code in this class is unique to this class and does not override any of the +// parent class behavior. +// +// KDM : The same controller code found in UIStrategyMapItem_Mission_LW has been implemented here so +// that alien facilities are 'clickable'. +//--------------------------------------------------------------------------------------- + +class UIStrategyMapItem_AlienNetworkComponent_LW extends UIStrategyMapItem_AlienNetworkComponent; + +var UIScanButton ScanButton; // used for missions being infiltrated +var UIText InfilPct; +var UIText InfilLabel; + +var UIImage SquadImage; // for cases where there is an infiltrating squad +var string CachedImageName; + +var UIProgressBar ProgressBar; // used to show remaining time for missions not yet infiltrated + +var int InDepth; // tracks depth of mouse in and outs, since it's recording from two possibly overlapping elements (2D and 3D icons) + +var localized string strRecon; + +var transient bool bScanButtonResized; +var transient float CachedScanButtonWidth; + +simulated function UIStrategyMapItem InitMapItem(out XComGameState_GeoscapeEntity Entity) +{ + // override the super so we can always use MI_alienfacility to allow displaying of doom pips + //super.InitMapItem(Entity); + + local string PinImage; + // Initialize static data + InitPanel(Name(Entity.GetUIWidgetName()), 'MI_alienFacility'); + + PinImage = Entity.GetUIPinImagePath(); + if (PinImage != "") + { + SetImage(PinImage); + } + + InitFromGeoscapeEntity(Entity); + + ScanButton = Spawn(class'UIScanButton', self).InitScanButton(); + ScanButton.SetButtonIcon(""); + ScanButton.SetDefaultDelegate(OpenInfiltrationMissionScreen); + ScanButton.SetButtonType(eUIScanButtonType_Default); + + SquadImage = Spawn(class'UIImage', self); + SquadImage.bAnimateOnInit = false; + SquadImage.InitImage().SetSize(48, 48); + + InfilPct = Spawn(class'UIText', ScanButton).InitText('InfilPct_LW', ""); + InfilPct.SetWidth(60); + InfilPct.SetPosition(154, 3); + + InfilLabel = Spawn(class'UIText', ScanButton).InitText('InfilLabel_LW', ""); + InfilLabel.SetWidth(60); + InfilLabel.SetPosition(154 - 5, 23); + + ProgressBar = Spawn(class'UIProgressBar', self).InitProgressBar('MissionInfiltrationProgress', -32, 5, 64, 8, 0.5, eUIState_Normal); + + bScanButtonResized = false; + + InstanceMapItem3DMaterial(); + + // KDM : The mission map item's help icon gets in the way of the infiltrating squad icon; the best way to deal with it is to null it. + // For more information on a similar topic please see the comments in UIStrategyMapItem_Region_LW --> InitMapItem(). + if (`ISCONTROLLERACTIVE) + { + ScanButton.MC.SetNull("consoleHint"); + } + + return self; +} + +function InstanceMapItem3DMaterial() +{ + local int i; + local MaterialInterface Mat; + local MaterialInstanceConstant MIC, NewMIC; + + if (MapItem3D == none) + return; + + + + for (i = 0; i < MapItem3D.OverworldMeshs[MapItem3D.ROOT_TILE].GetNumElements(); ++i) + { + Mat = MapItem3D.GetMeshMaterial(i); + MIC = MaterialInstanceConstant(Mat); + + // It is possible for there to be MITVs in these slots, so check + if (MIC != none) + { + // If this is not a child MIC, make it one. This is done so that the material updates below don't stomp + // on each other between units. + if (InStr(MIC.Name, "MaterialInstanceConstant") == INDEX_NONE) + { + NewMIC = new (self) class'MaterialInstanceConstant'; + NewMIC.SetParent(MIC); + MapItem3D.SetMeshMaterial(i, NewMIC); + MIC = NewMIC; + } + } + } + +} + +function UpdateFromGeoscapeEntity(const out XComGameState_GeoscapeEntity GeoscapeEntity) +{ + local int InfiltrationPct, InfiltrationTextColour; + local float ScanWidth; + local string InfiltrationPctValue, MissionInfo, MissionTitle; + local X2MissionTemplate MissionTemplate; + local XComGameState_LWPersistentSquad InfiltratingSquad; + local XComGameState_MissionSite MissionState; + + if (!bIsInited) + { + return; + } + + super(UIStrategyMapItem).UpdateFromGeoscapeEntity(GeoscapeEntity); + + InfiltratingSquad = GetInfiltratingSquad(); + + MissionState = GetMission(); + if (InfiltratingSquad != none) + { + InfiltrationTextColour = (bIsFocused) ? -1 : eUIState_Normal; + + InfiltrationPct = int(InfiltratingSquad.CurrentInfiltration * 100.0); + InfiltrationPctValue = string(InfiltrationPct) $ "%"; + + // KDM : When using a controller, there are 2 general colour states : + // 1.] This mission map item is selected, so its background is highlighted, and its text should be black. + // 2.] This mission map item is not selected, so its background is not highlighted, and its text should be normal blue. + if (`ISCONTROLLERACTIVE) + { + // KDM : When using a controller, the infiltration label needs to be continually refreshed according to the map item's selection status. + // When using a mouse & keyboard, the infiltration label doesn't need to change, so it can be called a single time down below. + InfilLabel.SetHTMLText(CenterText(class'UIUtilities_Text_LW'.static.AddFontInfoWithColor(strRecon, false, false, , 16, InfiltrationTextColour))); + InfilPct.SetHTMLText(CenterText(class'UIUtilities_Text_LW'.static.AddFontInfoWithColor(InfiltrationPctValue, false, true, , 20, InfiltrationTextColour))); + } + else + { + InfilPct.SetHTMLText(CenterText(class'UIUtilities_Text'.static.AddFontInfo(InfiltrationPctValue, false, true, , 20))); + } + + if (!bScanButtonResized) + { + MissionTitle = class'UIUtilities_Text'.static.CapsCheckForGermanScharfesS(InfiltratingSquad.sSquadName); + MissionTemplate = class'X2MissionTemplateManager'.static.GetMissionTemplateManager().FindMissionTemplate(MissionState.GeneratedMission.Mission.MissionName); + MissionInfo = class'UIUtilities_Text'.static.CapsCheckForGermanScharfesS(MissionTemplate.PostMissionType); + + ScanButton.SetText(MissionTitle, MissionInfo, " ", " "); // have to leave blank spaces so that Flash will size BG big enough + SetLevel(0); // show 0 doom pips + + // KDM : Infiltration label handling for controllers is dealt with up above. + if (!`ISCONTROLLERACTIVE) + { + InfilLabel.SetHTMLText(CenterText(class'UIUtilities_Text'.static.GetSizedText(strRecon, 16))); + } + + bScanButtonResized = true; + + CachedImageName = InfiltratingSquad.GetSquadImagePath(); + SquadImage.LoadImage(CachedImageName); + } + ScanButton.DefaultState(); + ScanButton.PulseScanner(false); + ScanButton.ShowScanIcon(false); + ScanButton.Realize(); + + // but the MC queuing system means that the width isn't set here the first time it's been invoked + ScanWidth = ScanButton.MC.GetNum("bg._width"); + + if (ScanWidth != CachedScanButtonWidth) + { + InfilPct.SetX(ScanWidth - 60); + InfilLabel.SetX(ScanWidth - 65); + ScanButton.SetX(- (ScanWidth/2)); + + CachedScanButtonWidth = ScanWidth; + + SquadImage.SetPosition(-(ScanWidth/2 + 48), 0); + } + if (CachedImageName != InfiltratingSquad.GetSquadImagePath()) + { + CachedImageName = InfiltratingSquad.GetSquadImagePath(); + SquadImage.LoadImage(CachedImageName); + } + + ProgressBar.Hide(); + } + else if (MissionState.MakesDoom()) + { + SetLevel(MissionState.Doom); + ProgressBar.Hide(); + ScanButton.Hide(); + bScanButtonResized = false; + } + else + { + ProgressBar.Show(); + UpdateProgressBar(MissionState); + + ScanButton.Hide(); + SquadImage.Hide(); + bScanButtonResized = false; + } + + // KDM : Our custom, mission map item, tooltip contains information, like mission expiration and infiltration percentage, which changes over + // time; therefore, we need to continously update it. However, there are a few caveats : + // + // 1.] Tooltips are not created under normal circumstances for mission map items; therefore, we only need to worry about updating when + // a controller is being used, and SHOW_MISSION_TOOLTIPS_CTRL is true. + // 2.] UIStrategyMap stores a single active tooltip, ActiveTooltip, which it associates with the currently selected map item; unfortunately, + // UpdateFromGeoscapeEntity() is called regardless of whether this map item is selected or not. Consequently, we don't want this mission + // map item polluting the tool tip when it is not selected. + if (GetStrategyMap().SelectedMapItem == self && `ISCONTROLLERACTIVE && class'UIStrategyMapItem_Mission_LW'.default.SHOW_MISSION_TOOLTIPS_CTRL) + { + UpdateTooltip(); + } +} + +simulated function string CenterText(string Text) +{ + return class'UIUtilities_Text'.static.AlignCenter(Text); +} + +simulated function XComGameState_LWPersistentSquad GetInfiltratingSquad() +{ + return `LWSQUADMGR.GetSquadOnMission(GeoscapeEntityRef); +} + +simulated function XComGameState_MissionSite GetMission() +{ + return XComGameState_MissionSite(`XCOMHISTORY.GetGameStateForObjectID(GeoscapeEntityRef.ObjectID)); +} + +function OpenInfiltrationMissionScreen() +{ + local UIMission_LWLaunchDelayedMission MissionScreen; + local XComHQPresentationLayer HQPres; + + HQPres = `HQPRES; + MissionScreen = HQPres.Spawn(class'UIMission_LWLaunchDelayedMission', HQPres); + MissionScreen.MissionRef = GeoscapeEntityRef; + MissionScreen.bInstantInterp = false; + MissionScreen = UIMission_LWLaunchDelayedMission(HQPres.ScreenStack.Push(MissionScreen)); +} + +simulated function OnMouseEvent(int cmd, array args) +{ + if (GetStrategyMap().m_eUIState == eSMS_Flight) + { + return; + } + + switch(cmd) + { + case class'UIUtilities_Input'.const.FXS_L_MOUSE_IN: + OnMouseIn(); + break; + case class'UIUtilities_Input'.const.FXS_L_MOUSE_OUT: + OnMouseOut(); + break; + // KDM : A mouse click opens a mission's infiltration screen if it is currently being infiltrated. + case class'UIUtilities_Input'.const.FXS_L_MOUSE_UP: + MapItemMissionClicked(); + break; + } +} + +// KDM : This code was stripped out of OnMouseEvent() --> FXS_L_MOUSE_UP and placed within a function so that it could be called from both +// 1.] OnMouseEvent() for mouse & keyboard users 2.] OnUnrealCommand() for controller users. +simulated function MapItemMissionClicked() +{ + local XComGameState_GeoscapeEntity GeoscapeEntity; + local XComGameState_LWPersistentSquad InfiltratingSquad; + local XComGameStateHistory History; + + History = `XCOMHISTORY; + InfiltratingSquad = GetInfiltratingSquad(); + + if (InfiltratingSquad == none) + { + GeoscapeEntity = XComGameState_GeoscapeEntity(History.GetGameStateForObjectID(GeoscapeEntityRef.ObjectID)); + GeoscapeEntity.AttemptSelectionCheckInterruption(); + } + else + { + OpenInfiltrationMissionScreen(); + } +} + +simulated function UpdateProgressBar(XComGameState_MissionSite MissionState) +{ + local int RemainingSeconds; + + if(ProgressBar == none) + return; + + if(MissionState.ExpirationDateTime.m_iYear < 2100) + { + RemainingSeconds = class'X2StrategyGameRulesetDataStructures'.static.DifferenceInSeconds(MissionState.ExpirationDateTime, class'XComGameState_GeoscapeEntity'.static.GetCurrentTime()); + ProgressBar.SetPercent(1.0); + SetProgressBarColor(RemainingSeconds); + ProgressBar.Show(); + } + else + { + ProgressBar.SetPercent(0.0); + ProgressBar.Hide(); + } +} + +simulated function SetProgressBarColor(float RemainingSeconds) +{ + local float PercentIdealInfiltration; + + PercentIdealInfiltration = (RemainingSeconds / 3600.0) / class'XComGameState_LWPersistentSquad'.static.GetBaselineHoursToInfiltration(GeoscapeEntityRef); + + if (PercentIdealInfiltration >= 1.0) + { + ProgressBar.SetColor(class'UIUtilities_Colors'.const.GOOD_HTML_COLOR); + } + else if(PercentIdealInfiltration >= 0.5) + { + ProgressBar.SetColor(class'UIUtilities_Colors'.const.WARNING_HTML_COLOR); + } + else if(RemainingSeconds >= 86400.0) + { + ProgressBar.SetColor(class'UIUtilities_Colors'.const.WARNING2_HTML_COLOR); + } + else + { + ProgressBar.SetColor(class'UIUtilities_Colors'.const.BAD_HTML_COLOR); + } + +} + +//---------------- 3D Map Icon Handling ------------------- +simulated function OnMouseIn() +{ + if (InDepth == 0) + { + super(UIStrategyMapItem).OnMouseIn(); + + if(MapItem3D != none) + MapItem3D.SetHoverMaterialValue(1); + if(AnimMapItem3D != none) + AnimMapItem3D.SetHoverMaterialValue(1); + } + InDepth++; +} + +// Clear mouse hover special behavior +simulated function OnMouseOut() +{ + InDepth--; + + if (InDepth <= 0) + { + super(UIStrategyMapItem).OnMouseOut(); + + if(MapItem3D != none) + MapItem3D.SetHoverMaterialValue(0); + if(AnimMapItem3D != none) + AnimMapItem3D.SetHoverMaterialValue(0); + } +} + +simulated function Show() +{ + // override to always allow showing items + super(UIPanel).Show(); +} + +simulated function OnLoseFocus() +{ + super.OnLoseFocus(); +} + +function string GetToolTipText() +{ + local int InfiltrationPct; + local string BodyStr, TitleStr, InfiltrationPctStr, TooltipHTML; + local XComGameState_LWPersistentSquad InfiltratingSquad; + local XComGameState_MissionSite Mission; + + InfiltratingSquad = GetInfiltratingSquad(); + Mission = GetMission(); + + TooltipHTML = ""; + + if (Mission != none) + { + class'X2EventListener_StrategyMap'.static.GetMissionSiteUIButtonToolTip(TitleStr, BodyStr, none, Mission); + TitleStr = class'UIUtilities_Text'.static.GetColoredText(TitleStr, eUIState_Header); + + // KDM : The title includes the amount of time left before the mission expires; this is very useful information. + TooltipHTML $= TitleStr; + TooltipHTML $= "\n"; + TooltipHTML $= "--------------------------------"; + // KDM : If a squad is infiltrating, show the infiltration percentage. + if (InfiltratingSquad != none) + { + TooltipHTML $= "\n"; + TooltipHTML $= class'UIStrategyMapItem_Mission_LW'.default.InfiltrationTooltipString $ " : "; + + InfiltrationPct = int(InfiltratingSquad.CurrentInfiltration * 100.0); + InfiltrationPctStr = class'UIUtilities_Text'.static.GetColoredText(string(InfiltrationPct), eUIState_Good); + + TooltipHTML $= InfiltrationPctStr @ "%"; + TooltipHTML $= "\n"; + TooltipHTML $= "--------------------------------"; + } + TooltipHTML $= "\n"; + TooltipHTML $= BodyStr; + } + return TooltipHTML; +} + +function UpdateTooltip() +{ + local string TooltipHTML; + local UIStrategyMap StrategyMap; + + StrategyMap = GetStrategyMap(); + + // KDM : If the strategy map has no active tooltip, then there is nothing to update. + if (StrategyMap.ActiveTooltip != none) + { + // KDM : Get the new tooltip text and update the active tooltip. + TooltipHTML = GetToolTipText(); + StrategyMap.ActiveTooltip.SetText(TooltipHTML); + StrategyMap.ActiveTooltip.UpdateData(); + + // KDM : The tooltip data has been updated; however, this information is not pushed to the flash UI element, so we don't see + // any changes. There are 2 ways around this : + // + // 1.] The flash element, TooltipBox, has a function, Show(), which updates the tooltip's : Style, Text, Size, BG, and Location. + // Furthermore, it animates the tooltip in. This is a nice 'complete' method, but it involves us having to constantly hide and show the + // tooltip within UnrealScript. Additionally, it requires us to kill the tooltip's animation since we can't have it contantly fading in + // and fading out. + // 2.] Update the flash element's : Style, Text, Size, and BG, via Actionscript calls. This is a better solution because it updates + // the tooltip text and size, without having to resort to hiding and showing the tooltip; furthermore, it doesn't mess with any + // tooltip animations. + StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeStyle"); + StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeText"); + StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeSize"); + StrategyMap.ActiveTooltip.MC.FunctionVoid("RealizeBG"); + } +} + +// KDM : Long War provides useful mission tooltips; however, they only appear over the mission icons on the bottom icon bar, and are only +// accessible to mouse & keyboard users. Consequently, we want to give controller users the opportunity to display this information as a normal tooltip +// next to the mission map item. +function GenerateTooltip(string tooltipHTML) +{ + // KDM : Normally, for mission map items, tooltipHTML will be an empty string; consequently, no tooltip will be created. + // Only show mission tooltips if the controller is active, and SHOW_MISSION_TOOLTIPS_CTRL is true. + if (`ISCONTROLLERACTIVE && class'UIStrategyMapItem_Mission_LW'.default.SHOW_MISSION_TOOLTIPS_CTRL) + { + tooltipHTML = GetToolTipText(); + } + + super.GenerateTooltip(tooltipHTML); +} + +simulated function bool OnUnrealCommand(int cmd, int arg) +{ + local bool bHandled; + + if (!CheckInputIsReleaseOrDirectionRepeat(cmd, arg)) + { + return true; + } + + bHandled = true; + + switch(cmd) + { + // KDM : The A button opens a mission's infiltration screen if it is currently being infiltrated. + // OnMouseEvent() checks if the Avenger is in flight before executing any of its code; consequently, the same is done here for consistency. + case class'UIUtilities_Input'.static.GetAdvanceButtonInputCode(): + if (GetStrategyMap().m_eUIState != eSMS_Flight) + { + MapItemMissionClicked(); + } + break; + + default : + bHandled = false; + break; + } + + return bHandled || super.OnUnrealCommand(cmd, arg); +} + +DefaultProperties +{ + bDisableHitTestWhenZoomedOut = false; + bFadeWhenZoomedOut = false; +} diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_AssaultAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_AssaultAbilitySet.uc index 20b7426f8..bda28fa5e 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_AssaultAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_AssaultAbilitySet.uc @@ -31,9 +31,9 @@ static function array CreateTemplates() Templates.AddItem(AddArcthrowerStun()); Templates.AddItem(AddArcthrowerPassive()); Templates.AddItem(AddEMPulser()); - Templates.AddItem(PurePassive('EMPulserPassive', "img:///UILibrary_LWOTC.LW_AbilityEMPulser", true)); + Templates.AddItem(PurePassive('EMPulserPassive', "img:///UILibrary_LW_Overhaul.LW_AbilityEMPulser", true)); Templates.AddItem(StunGunner()); - Templates.AddItem(PurePassive('Electroshock', "img:///UILibrary_LWOTC.LW_AbilityElectroshock", true)); + Templates.AddItem(PurePassive('Electroshock', "img:///UILibrary_LW_Overhaul.LW_AbilityElectroshock", true)); Templates.AddItem(CreateStreetSweeper2Ability()); Templates.AddItem(CreateStreetSweeperBonusDamageAbility()); Templates.AddItem(CreateChainLightningAbility()); @@ -62,7 +62,7 @@ static function X2AbilityTemplate AddArcthrowerStun() `CREATE_X2ABILITY_TEMPLATE(Template, 'ArcthrowerStun'); // Icon Properties - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityArcthrowerStun"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityArcthrowerStun"; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.STANDARD_PISTOL_SHOT_PRIORITY; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; Template.DisplayTargetHitChance = true; @@ -168,7 +168,7 @@ static function X2AbilityTemplate AddArcthrowerPassive() local X2Effect_Arcthrower ArcthrowerEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'ArcthrowerPassive'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityStunGunner"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityStunGunner"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -250,7 +250,7 @@ static function X2AbilityTemplate StunGunner() local X2Effect_StunGunner StunGunnerEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'StunGunner'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityStunGunner"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityStunGunner"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -289,7 +289,7 @@ static function X2AbilityTemplate AddEMPulser() `CREATE_X2ABILITY_TEMPLATE(Template, 'EMPulser'); // Icon Properties - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityEMPulser"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityEMPulser"; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.STANDARD_PISTOL_SHOT_PRIORITY; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; Template.DisplayTargetHitChance = true; @@ -427,7 +427,7 @@ static function X2AbilityTemplate CreateStreetSweeper2Ability() Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_COLONEL_PRIORITY; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityStreetSweeper2"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityStreetSweeper2"; Template.ActivationSpeech = 'Reaper'; Template.CinescriptCameraType = "StandardGunFiring"; Template.bCrossClassEligible = false; @@ -554,7 +554,7 @@ static function X2AbilityTemplate CreateChainLightningAbility() Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_COLONEL_PRIORITY; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityChainLightning"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityChainLightning"; Template.bCrossClassEligible = false; Template.Hostility = eHostility_Offensive; Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ChosenAbilities.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ChosenAbilities.uc index 90686dfc0..e9f652f41 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ChosenAbilities.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ChosenAbilities.uc @@ -4,7 +4,7 @@ // PURPOSE: Defines all Long War Chosen-specific abilities, Credit to DerBK for some abilities //--------------------------------------------------------------------------------------- -class X2Ability_LW_ChosenAbilities extends XMBAbility config(LW_SoldierSkills); +class X2Ability_LW_ChosenAbilities extends X2Ability config(LW_SoldierSkills); var localized string ShieldedStatBuffsLocDescription; var localized string ImpactCompensationBuffDescription; @@ -17,9 +17,6 @@ var config int SHIELDALLYM1_SHIELD; var config int SHIELDALLYM2_SHIELD; var config int SHIELDALLYM3_SHIELD; var config int SHIELDALLYM4_SHIELD; -var config int SHIELDALLYM5_SHIELD; - - var config array KIDNAP_ELIGIBLE_CHARTYPES; var config array COMBAT_READINESS_EFFECTS_TO_REMOVE; @@ -29,7 +26,6 @@ var config int GREATEST_CHAMPION_AIM; var config int GREATEST_CHAMPION_CRIT; var config int GREATEST_CHAMPION_WILL; var config int GREATEST_CHAMPION_PSIOFFENSE; -var config float UNHOLY_ASCENSION_MOD; var config float SHIELD_ALLY_PCT_DR; var config float IMPACT_COMPENSATION_PCT_DR; var config int IMPACT_COMPENSATION_MAX_STACKS; @@ -51,15 +47,11 @@ static function array CreateTemplates() Templates.AddItem(CreateShieldAlly('ShieldAllyM2',default.SHIELDALLYM2_SHIELD)); Templates.AddItem(CreateShieldAlly('ShieldAllyM3',default.SHIELDALLYM3_SHIELD)); Templates.AddItem(CreateShieldAlly('ShieldAllyM4',default.SHIELDALLYM4_SHIELD)); - Templates.AddItem(CreateShieldAlly('ShieldAllyM5',default.SHIELDALLYM5_SHIELD)); Templates.AddItem(CreateTraitResilience()); Templates.AddItem(CreateChosenKidnap()); Templates.AddItem(CreateKeen()); Templates.AddItem(CreateFollowerDefeatedEscape()); - Templates.AddItem(CreateTrackingShotMark()); - Templates.AddItem(CreateMarkForDeathHunter()); - Templates.AddItem(ChosenDragonRounds()); Templates.AddItem(ChosenDragonRoundsPassive()); @@ -75,12 +67,6 @@ static function array CreateTemplates() Templates.AddItem(CreateBloodThirst()); Templates.AddItem(BloodThirstPassive()); Templates.AddItem(AddMindScorchTerror()); - - Templates.AddItem(UnholyAscension_LW()); - Templates.AddItem(CreaterRuptureImmunity()); - Templates.AddItem(AddBloodBath()); - Templates.AddItem(AddMistyMadness()); - Templates.AddItem(AddImpenetrable()); Templates.AddItem(FreeGrenades()); Templates.AddItem(AssassinPrimeReactionPassive()); @@ -442,9 +428,6 @@ static function X2AbilityTemplate CreateShieldAlly(name Templatename, int Shield local X2Effect_GreatestChampion StatBuffsEffect; local X2Effect_PCTDamageReduction ImpactEffect; local X2Condition_Visibility VisibilityCondition; - local X2Condition_AbilityProperty AbilityCondition; - local X2Effect_Resilience MyCritModifier; - local X2Condition_OwnerDoesNotHaveAbility DoesNotHaveAbilityCondition; `CREATE_X2ABILITY_TEMPLATE(Template, Templatename); Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_mindscorch"; @@ -491,15 +474,7 @@ static function X2AbilityTemplate CreateShieldAlly(name Templatename, int Shield TargetCondition.ExcludeUnrevealedAI = true; Template.AbilityTargetConditions.AddItem(TargetCondition); - DoesNotHaveAbilityCondition = new class 'X2Condition_OwnerDoesNotHaveAbility'; - DoesNotHaveAbilityCondition.AbilityName = 'UnholyAscension_LW'; - - AbilityCondition = new class 'X2Condition_AbilityProperty'; - AbilityCondition.OwnerHasSoldierAbilities.AddItem('UnholyAscension_LW'); - - ShieldedEffect = CreateShieldedEffect(Template.LocFriendlyName, Template.GetMyLongDescription(), ShieldAmount); - ShieldedEffect.TargetConditions.AddItem(DoesNotHaveAbilityCondition); Template.AddTargetEffect(ShieldedEffect); StatBuffsEffect = new class'X2Effect_GreatestChampion'; @@ -511,34 +486,9 @@ static function X2AbilityTemplate CreateShieldAlly(name Templatename, int Shield StatBuffsEffect.AddPersistentStatChange(eStat_CritChance, default.GREATEST_CHAMPION_CRIT); StatBuffsEffect.AddPersistentStatChange(eStat_Will, default.GREATEST_CHAMPION_WILL); StatBuffsEffect.AddPersistentStatChange(eStat_PsiOffense, default.GREATEST_CHAMPION_PSIOFFENSE); - StatBuffsEffect.TargetConditions.AddItem(DoesNotHaveAbilityCondition); Template.AddTargetEffect(StatBuffsEffect); - ShieldedEffect = CreateShieldedEffect(Template.LocFriendlyName, Template.GetMyLongDescription(), int(ShieldAmount * default.UNHOLY_ASCENSION_MOD)); - ShieldedEffect.TargetConditions.AddItem(AbilityCondition); - Template.AddTargetEffect(ShieldedEffect); - - StatBuffsEffect = new class'X2Effect_GreatestChampion'; - StatBuffsEffect.BuildPersistentEffect(1, true, true); - StatBuffsEffect.SetDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, default.ShieldedStatBuffsLocDescription, "img:///UILibrary_PerkIcons.UIPerk_adventshieldbearer_energyshield", true); - StatBuffsEffect.bRemoveWhenTargetDies = true; - //StatBuffsEffect.bRemoveWhenTargetUnconscious = true; - StatBuffsEffect.AddPersistentStatChange(eStat_Offense, int(default.GREATEST_CHAMPION_AIM * default.UNHOLY_ASCENSION_MOD)); - StatBuffsEffect.AddPersistentStatChange(eStat_CritChance, int(default.GREATEST_CHAMPION_CRIT * default.UNHOLY_ASCENSION_MOD)); - StatBuffsEffect.AddPersistentStatChange(eStat_Will, int(default.GREATEST_CHAMPION_WILL * default.UNHOLY_ASCENSION_MOD)); - StatBuffsEffect.AddPersistentStatChange(eStat_PsiOffense, int(default.GREATEST_CHAMPION_PSIOFFENSE * default.UNHOLY_ASCENSION_MOD)); - StatBuffsEffect.TargetConditions.AddItem(AbilityCondition); - Template.AddTargetEffect(StatBuffsEffect); - - MyCritModifier = new class 'X2Effect_Resilience'; - MyCritModifier.CritDef_Bonus = 200; - MyCritModifier.BuildPersistentEffect (1, true, false, true); - MyCritModifier.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, false,,Template.AbilitySourceName); - MyCritModifier.TargetConditions.AddItem(AbilityCondition); - Template.AddTargetEffect (MyCritModifier); - - ImpactEffect = new class'X2Effect_PCTDamageReduction'; ImpactEffect.PCTDamage_Reduction = default.SHIELD_ALLY_PCT_DR; ImpactEffect.bDisplayInSpecialDamageMessageUI = true; @@ -927,6 +877,39 @@ static function name GetReinforcementGroupName(int AlertLevel) return GroupName; } +/* +static function X2DataTemplate CreatePassiveChosenKidnap() +{ + local X2Effect_Kidnap KidnapEffect; + local X2AbilityTemplate Template; + + `CREATE_X2ABILITY_TEMPLATE(Template, 'LW_ChosenKidnap'); + Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_kidnap"; + Template.Hostility = eHostility_Offensive; + Template.AbilitySourceName = 'eAbilitySource_Standard'; +//BEGIN AUTOGENERATED CODE: Template Overrides 'ChosenKidnap' + Template.bFrameEvenWhenUnitIsHidden = true; + Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; +//END AUTOGENERATED CODE: Template Overrides 'ChosenKidnap' + + Template.AbilityToHitCalc = default.DeadEye; + Template.AbilityTargetStyle = default.SelfTarget; + Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); + + KidnapEffect = new class'X2Effect_Kidnap'; + KidnapEffect.BuildPersistentEffect(1, true, true, true); + Template.AddShooterEffect(KidnapEffect); + + Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); + + // The Target must be alive and a humanoid + Template.bSkipFireAction = true; + Template.bShowActivation = true; + Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; + + return Template; +} +*/ static function X2DataTemplate CreateKeen() { @@ -968,162 +951,6 @@ static function X2DataTemplate CreateKeen() return Template; } -static function X2DataTemplate CreateTrackingShotMark() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_ActionPoints ActionPointCost; - //local X2Condition_Visibility TargetVisibilityCondition; - local X2Condition_UnitProperty TargetCondition; - local X2Condition_UnitEffects UnitEffectsCondition; - local X2Effect_Persistent TrackingShotMarkSource; - local X2Effect_TrackingShotMarkTarget TrackingShotMarkTarget; - local array SkipExclusions; - local X2AbilityCooldown Cooldown; - local X2Condition_UnitValue UnitValueCheck; - `CREATE_X2ABILITY_TEMPLATE(Template, 'TrackingShotMark'); - -//BEGIN AUTOGENERATED CODE: Template Overrides 'TrackingShotMark' - Template.bShowActivation = true; - Template.bFrameEvenWhenUnitIsHidden = true; - Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_trackingshot"; -//END AUTOGENERATED CODE: Template Overrides 'TrackingShotMark' - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - Template.AbilitySourceName = 'eAbilitySource_Standard'; - Template.Hostility = eHostility_Neutral; - - Cooldown = new class'X2AbilityCooldown'; - Cooldown.iNumTurns = 1; - Template.AbilityCooldown = Cooldown; - - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 2; - ActionPointCost.bFreeCost = true; - Template.AbilityCosts.AddItem(ActionPointCost); - - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SimpleSingleTarget; - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); - - - UnitValueCheck = new class'X2Condition_UnitValue'; - UnitValueCheck.AddCheckValue('GrappledThisTurn', 1, eCheck_LessThan); - Template.AbilityShooterConditions.AddItem(UnitValueCheck); - - - // Shooter Conditions - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - - Template.AbilityTargetConditions.AddItem(default.FlankedCondition); - - // Source cannot already be targeting - UnitEffectsCondition = new class'X2Condition_UnitEffects'; - UnitEffectsCondition.AddExcludeEffect(class'X2Ability_ChosenSniper'.default.TrackingShotMarkSourceEffectName, 'AA_DuplicateEffectIgnored'); - Template.AbilityShooterConditions.AddItem(UnitEffectsCondition); - - // Source Effect - TrackingShotMarkSource = new class 'X2Effect_Persistent'; - TrackingShotMarkSource.EffectName = class'X2Ability_ChosenSniper'.default.TrackingShotMarkSourceEffectName; - TrackingShotMarkSource.DuplicateResponse = eDupe_Ignore; - TrackingShotMarkSource.BuildPersistentEffect(1, true, true, false, eGameRule_PlayerTurnBegin); - TrackingShotMarkSource.bRemoveWhenTargetDies = true; - Template.AddShooterEffect(TrackingShotMarkSource); - - // Target Conditions - Template.AbilityTargetConditions.AddItem(default.LivingHostileUnitOnlyProperty); - - // Target cannot already be targeted - UnitEffectsCondition = new class'X2Condition_UnitEffects'; - UnitEffectsCondition.AddExcludeEffect(class'X2Ability_ChosenSniper'.default.TrackingShotMarkTargetEffectName, 'AA_DuplicateEffectIgnored'); - Template.AbilityTargetConditions.AddItem(UnitEffectsCondition); - - SkipExclusions.AddItem(class'X2AbilityTemplateManager'.default.DisorientedName); - SkipExclusions.AddItem(class'X2StatusEffects'.default.BurningName); - SkipExclusions.AddItem(class'X2AbilityTemplateManager'.default.ConfusedName); - Template.AddShooterEffectExclusions(SkipExclusions); - - // Target must be visible - //TargetVisibilityCondition = new class'X2Condition_Visibility'; - //TargetVisibilityCondition.bRequireLOS = true; - //Template.AbilityTargetConditions.AddItem(TargetVisibilityCondition); - - // And not concealed - TargetCondition = new class'X2Condition_UnitProperty'; - TargetCondition.ExcludeConcealed = true; - Template.AbilityTargetConditions.AddItem(TargetCondition); - - // Target Effect - TrackingShotMarkTarget = new class 'X2Effect_TrackingShotMarkTarget'; - TrackingShotMarkTarget.EffectName = class'X2Ability_ChosenSniper'.default.TrackingShotMarkTargetEffectName; - //TrackingShotMarkTarget.ConeEndDiameter = default.TRACKINGSHOT_END_DIAMETER_TILES * class'XComWorldData'.const.WORLD_StepSize; - //TrackingShotMarkTarget.ConeLength = default.TRACKINGSHOT_LENGTH_TILES * class'XComWorldData'.const.WORLD_StepSize; - TrackingShotMarkTarget.DuplicateResponse = eDupe_Ignore; - TrackingShotMarkTarget.BuildPersistentEffect(1, true, true, false, eGameRule_PlayerTurnEnd); - TrackingShotMarkTarget.SetDisplayInfo(ePerkBuff_Penalty, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, , , Template.AbilitySourceName); - TrackingShotMarkTarget.bRemoveWhenTargetDies = true; - //TrackingShotMarkTarget.EffectTickedFn = TrackingShotMark_EffectTicked; - TrackingShotMarkTarget.VisualizationFn = class'X2Ability_ChosenSniper'.static.TrackingShotMarkTarget_VisualizationFn; - TrackingShotMarkTarget.EffectRemovedVisualizationFn = class'X2Ability_ChosenSniper'.static.TrackingShotMarkTarget_RemovedVisualizationFn; - Template.AddTargetEffect(TrackingShotMarkTarget); - - Template.bSkipFireAction = true; - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = class'X2Ability_ChosenSniper'.static.TrackingShotMark_BuildVisualization; - - Template.CinescriptCameraType = "ChosenSniper_TrackingShotMark"; - - Template.AdditionalAbilities.AddItem('MarkedForDeath_Hunter'); - - return Template; -} - - -static function X2AbilityTemplate CreateMarkForDeathHunter() -{ - local X2AbilityTemplate Template; - local X2Condition_TargetHasOneOfTheEffects NeedOneOfTheEffects; - local XMBEffect_AbilityCostRefund RefundEffect; - local XMBCondition_AbilityName NameCondition; - `CREATE_X2ABILITY_TEMPLATE(Template, 'MarkedForDeath_Hunter'); - - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; - Template.bDisplayInUITooltip = false; - Template.bDisplayInUITacticalText = false; - Template.bDontDisplayInAbilitySummary = true; - Template.bHideOnClassUnlock = true; - Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_trackingshot"; - - Template.Hostility = eHostility_Neutral; - - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - RefundEffect = new class'XMBEffect_AbilityCostRefund'; - RefundEffect.EffectName = 'MarkedForDeath'; - RefundEffect.TriggeredEvent = 'MarkedForDeath'; - RefundEffect.bShowFlyOver=false; - NeedOneOfTheEffects=new class'X2Condition_TargetHasOneOfTheEffects'; - NeedOneOfTheEffects.EffectNames.AddItem(class'X2Ability_ChosenSniper'.default.TrackingShotMarkTargetEffectName); - - NameCondition = new class'XMBCondition_AbilityName'; - NameCondition.IncludeAbilityNames.AddItem('HunterRifleShot'); - - - RefundEffect.AbilityTargetConditions.AddItem(NeedOneOfTheEffects); - RefundEffect.AbilityTargetConditions.AddItem(NameCondition); - - Template.AddTargetEffect(RefundEffect); - - Template.AddTargetEffect(new class'X2Effect_LW_RemoveMark'); - - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - - return Template; -} - - static function X2AbilityTemplate ChosenDragonRounds() { local X2AbilityTemplate Template; @@ -1176,7 +1003,7 @@ static function X2AbilityTemplate ChosenDragonRoundsPassive() { local X2AbilityTemplate Template; - Template = PurePassive('ChosenDragonRoundsPassive', "img:///UILibrary_LWOTC.UIPerk_ammo_incendiary", false); + Template = PurePassive('ChosenDragonRoundsPassive', "img:///UILibrary_LW_Overhaul.UIPerk_ammo_incendiary", false); return Template; } @@ -1241,7 +1068,7 @@ static function X2AbilityTemplate ChosenBleedingRoundsPassive() { local X2AbilityTemplate Template; - Template = PurePassive('ChosenBleedingRoundsPassive', "img:///UILibrary_LWOTC.UIPerk_ammo_incendiary", false); + Template = PurePassive('ChosenBleedingRoundsPassive', "img:///UILibrary_LW_Overhaul.UIPerk_ammo_incendiary", false); return Template; } @@ -1261,7 +1088,7 @@ static function X2AbilityTemplate ChosenVenomRounds() local X2AbilityTrigger_EventListener EventListener; `CREATE_X2ABILITY_TEMPLATE(Template, 'ChosenVenomRounds'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityVenomRounds"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityVenomRounds"; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -1303,7 +1130,7 @@ static function X2AbilityTemplate ChosenVenomRoundsPassive() { local X2AbilityTemplate Template; - Template = PurePassive('ChosenVenomRoundsPassive', "img:///UILibrary_LWOTC.LW_AbilityVenomRounds", false); + Template = PurePassive('ChosenVenomRoundsPassive', "img:///UILibrary_LW_Overhaul.LW_AbilityVenomRounds", false); return Template; } @@ -1491,40 +1318,11 @@ static function X2AbilityTemplate AddMindScorchTerror() { local X2AbilityTemplate Template; - Template = PurePassive('MindScorchTerror', "img:///UILibrary_LWOTC.LW_AbilityNapalmX", false, 'eAbilitySource_Perk'); + Template = PurePassive('MindScorchTerror', "img:///UILibrary_LW_Overhaul.LW_AbilityNapalmX", false, 'eAbilitySource_Perk'); Template.bCrossClassEligible = false; return Template; } - -static function X2AbilityTemplate AddBloodBath() -{ - local X2AbilityTemplate Template; - - Template = PurePassive('BloodBath_LW', "img:///UILibrary_XPerkIconPack.UIPerk_adrenaline_x2", false, 'eAbilitySource_Perk', true); - - return Template; -} - -static function X2AbilityTemplate AddMistyMadness() -{ - local X2AbilityTemplate Template; - - Template = PurePassive('MistyMadness_LW', "img:///UILibrary_XPerkIconPack.UIPerk_smoke_chevron_x3", false, 'eAbilitySource_Perk', true); - - return Template; -} - - -static function X2AbilityTemplate AddImpenetrable() -{ - local X2AbilityTemplate Template; - - Template = PurePassive('Impenetrable_LW', "img:///UILibrary_XPerkIconPack.UIPerk_defense_blossom", false, 'eAbilitySource_Perk', true); - - return Template; -} - static function X2DataTemplate AddTerrorPanicAbility() { local X2AbilityTemplate Template; @@ -1832,15 +1630,6 @@ static function X2AbilityTemplate BloodThirstPassive() return Template; } -static function X2AbilityTemplate UnholyAscension_LW() -{ - local X2AbilityTemplate Template; - - Template = PurePassive('UnholyAscension_LW', "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_Corrupt", , 'eAbilitySource_Perk'); - - return Template; -} - static function X2DataTemplate FreeGrenades() { local X2AbilityTemplate Template; @@ -2104,40 +1893,6 @@ static function X2AbilityTemplate CreateUnstoppablePassive() return Template; } - -static function X2AbilityTemplate CreaterRuptureImmunity() -{ - local X2AbilityTemplate Template; - local X2Effect_RuptureImmunity RuptureImmunityEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'RuptureImmunity'); - Template.IconImage = "img:///UILibrary_XPerkIconPack.UIPerk_knife_defense"; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.Hostility = eHostility_Neutral; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.bShowActivation = false; - Template.bSkipFireAction = true; - //Template.bIsPassive = true; - Template.bDisplayInUITooltip = true; - Template.bDisplayInUITacticalText = true; - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - - RuptureImmunityEffect = new class'X2Effect_RuptureImmunity'; - RuptureImmunityEffect.BuildPersistentEffect(1, true, true,, eGameRule_PlayerTurnBegin); - RuptureImmunityEffect.SetDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, true,, Template.AbilitySourceName); - Template.AddTargetEffect(RuptureImmunityEffect); - - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - //Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - return Template; -} //Because the vanilla ability has a listener at the end of the move which breaks reactions against reaction fire static function X2AbilityTemplate CreateTriggerDamagedTeleportAbility_LW() { diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GearAbilities.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GearAbilities.uc index 356824e33..f169bc77a 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GearAbilities.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GearAbilities.uc @@ -72,19 +72,19 @@ static function array CreateTemplates() Templates.AddItem(CreateFlechetteRoundsAbility()); Templates.AddItem(PurePassive('Needle_Rounds_Ability', "img:///UILibrary_PerkIcons.UIPerk_ammo_needle", false, 'eAbilitySource_Item')); - Templates.AddItem(PurePassive('Redscreen_Rounds_Ability', "img:///UILibrary_LWOTC.LW_AbilityRedscreen", false, 'eAbilitySource_Item')); + Templates.AddItem(PurePassive('Redscreen_Rounds_Ability', "img:///UILibrary_LW_Overhaul.LW_AbilityRedscreen", false, 'eAbilitySource_Item')); Templates.AddItem(PurePassive('Shredder_Rounds_Ability', "img:///UILibrary_PerkIcons.UIPerk_maximumordanance", false, 'eAbilitySource_Item')); Templates.AddItem(PurePassive('Dragon_Rounds_Ability_PP', "img:///UILibrary_PerkIcons.UIPerk_ammo_incendiary", false, 'eAbilitySource_Item')); Templates.AddItem(PurePassive('Bluescreen_Rounds_Ability_PP', "img:///UILibrary_PerkIcons.UIPerk_ammo_bluescreen", false, 'eAbilitySource_Item')); Templates.AddItem(PurePassive('Talon_Rounds_Ability_PP', "img:///UILibrary_PerkIcons.UIPerk_ammo_talon", false, 'eAbilitySource_Item')); Templates.AddItem(PurePassive('AP_Rounds_Ability_PP', "img:///UILibrary_PerkIcons.UIPerk_ammo_ap", false, 'eAbilitySource_Item')); - Templates.AddItem(PurePassive('Venom_Rounds_Ability_PP', "img:///UILibrary_LWOTC.LW_AbilityVenomRounds", false, 'eAbilitySource_Item')); + Templates.AddItem(PurePassive('Venom_Rounds_Ability_PP', "img:///UILibrary_LW_Overhaul.LW_AbilityVenomRounds", false, 'eAbilitySource_Item')); Templates.AddItem(PurePassive('Tracer_Rounds_Ability_PP', "img:///UILibrary_PerkIcons.UIPerk_ammo_tracer", false, 'eAbilitySource_Item')); - Templates.AddItem(PurePassive('FireControl25', "img:///UILibrary_LWOTC.LW_AbilityFireControl", false)); - Templates.AddItem(PurePassive('FireControl50', "img:///UILibrary_LWOTC.LW_AbilityFireControl", false)); - Templates.AddItem(PurePassive('FireControl75', "img:///UILibrary_LWOTC.LW_AbilityFireControl", false)); + Templates.AddItem(PurePassive('FireControl25', "img:///UILibrary_LW_Overhaul.LW_AbilityFireControl", false)); + Templates.AddItem(PurePassive('FireControl50', "img:///UILibrary_LW_Overhaul.LW_AbilityFireControl", false)); + Templates.AddItem(PurePassive('FireControl75', "img:///UILibrary_LW_Overhaul.LW_AbilityFireControl", false)); Templates.AddItem(CreateSmallItemWeightAbility()); Templates.AddItem(RemoveGrenadeWeightAbility()); // does not work diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GrenadierAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GrenadierAbilitySet.uc index 265b532ae..0886a5a49 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GrenadierAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GrenadierAbilitySet.uc @@ -22,12 +22,12 @@ static function array CreateTemplates() `Log("LW_GrenadierAbilitySet.CreateTemplates --------------------------------"); //Effects implemented in same code that handles damage falloff for both units and environment - Templates.AddItem(PurePassive('Sapper', "img:///UILibrary_LWOTC.LW_AbilitySapper", true)); - Templates.AddItem(PurePassive('CombatEngineer', "img:///UILibrary_LWOTC.LW_AbilityCombatEngineer", true)); - Templates.AddItem(PurePassive('TandemWarheads', "img:///UILibrary_LWOTC.LW_AbilityTandemWarheads", true)); - //Templates.AddItem(PurePassive('NeedleGrenades', "img:///UILibrary_LWOTC.LW_AbilityNeedleGrenades", true)); + Templates.AddItem(PurePassive('Sapper', "img:///UILibrary_LW_Overhaul.LW_AbilitySapper", true)); + Templates.AddItem(PurePassive('CombatEngineer', "img:///UILibrary_LW_Overhaul.LW_AbilityCombatEngineer", true)); + Templates.AddItem(PurePassive('TandemWarheads', "img:///UILibrary_LW_Overhaul.LW_AbilityTandemWarheads", true)); + //Templates.AddItem(PurePassive('NeedleGrenades', "img:///UILibrary_LW_Overhaul.LW_AbilityNeedleGrenades", true)); Templates.AddItem(NeedleGrenades()); - Templates.AddItem(PurePassive('BluescreenBombs', "img:///UILibrary_LWOTC.LW_AbilityBluescreenBombs", true)); + Templates.AddItem(PurePassive('BluescreenBombs', "img:///UILibrary_LW_Overhaul.LW_AbilityBluescreenBombs", true)); Templates.AddItem(AddHeavyOrdnance_LW()); Templates.AddItem(AddProtector()); @@ -38,7 +38,7 @@ static function array CreateTemplates() Templates.AddItem(AddBiggestBooms_LW()); //temporary common abilities so the UI will load - Templates.AddItem(PurePassive('FireInTheHole', "img:///UILibrary_LWOTC.LW_AbilityFireInTheHole", true)); + Templates.AddItem(PurePassive('FireInTheHole', "img:///UILibrary_LW_Overhaul.LW_AbilityFireInTheHole", true)); return Templates; } @@ -103,7 +103,7 @@ static function X2AbilityTemplate AddHEATWarheads() local X2Effect_HEATGrenades HEATEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'HEATWarheads'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityHEATWarheads"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityHEATWarheads"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -410,7 +410,7 @@ static function X2AbilityTemplate NeedleGrenades() `CREATE_X2ABILITY_TEMPLATE (Template, 'NeedleGrenades'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityNeedleGrenades"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityNeedleGrenades"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.Hostility = eHostility_Neutral; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GunnerAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GunnerAbilitySet.uc index 0fd695441..899f77249 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GunnerAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_GunnerAbilitySet.uc @@ -41,7 +41,7 @@ static function X2AbilityTemplate AddCombatives() { local X2AbilityTemplate Template; - Template = PurePassive('Combatives', "img:///UILibrary_LWOTC.LW_AbilityCombatives", false, 'eAbilitySource_Perk'); + Template = PurePassive('Combatives', "img:///UILibrary_LW_Overhaul.LW_AbilityCombatives", false, 'eAbilitySource_Perk'); Template.SetUIStatMarkup(class'XLocalizedData'.default.DodgeLabel, eStat_Dodge, default.COMBATIVES_DODGE, true); Template.AdditionalAbilities.AddItem('CombativesAttack'); Template.AdditionalAbilities.AddiTEm('CombativesPreparation'); @@ -57,7 +57,7 @@ static function X2AbilityTemplate CombativesStats() local X2Effect_AdditionalAnimSets AnimSetEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'CombativesStats'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_Ability_Combatives"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_Ability_Combatives"; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; Template.AbilityToHitCalc = default.DeadEye; @@ -94,7 +94,7 @@ static function X2AbilityTemplate AddCombativesAttack() local X2Effect_RemoveEffects RemoveEffects; `CREATE_X2ABILITY_TEMPLATE(Template, 'CombativesAttack'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_Ability_Combatives"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_Ability_Combatives"; Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.Hostility = eHostility_Offensive; @@ -220,7 +220,7 @@ static function X2AbilityTemplate AddCombativesCounterattackAbility() local X2AbilityTrigger_EventListener EventListener; `CREATE_X2ABILITY_TEMPLATE(Template, 'CombativesCounterattack'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_Ability_Combatives"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_Ability_Combatives"; Template.bDontDisplayInAbilitySummary = true; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; @@ -259,7 +259,7 @@ static function X2AbilityTemplate AddKnifeFighter() Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityKnifeFighter"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityKnifeFighter"; Template.bHideOnClassUnlock = false; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_SQUADDIE_PRIORITY; Template.AbilityConfirmSound = "TacticalUI_SwordConfirm"; @@ -337,7 +337,7 @@ static function X2AbilityTemplate AddFlushAbility() `CREATE_X2ABILITY_TEMPLATE(Template, 'Flush'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFlush"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFlush"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; Template.bCrossClassEligible = true; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_RangerAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_RangerAbilitySet.uc index 8a0bb509a..52f2fa017 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_RangerAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_RangerAbilitySet.uc @@ -48,7 +48,7 @@ static function X2AbilityTemplate AddPointBlank() // Icon Properties //Template.bDontDisplayInAbilitySummary = true; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityPointBlank"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityPointBlank"; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.STANDARD_PISTOL_SHOT_PRIORITY; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; Template.DisplayTargetHitChance = true; @@ -141,7 +141,7 @@ static function X2AbilityTemplate AddBothBarrels() // Icon Properties //Template.bDontDisplayInAbilitySummary = true; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityBothBarrels"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityBothBarrels"; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.STANDARD_PISTOL_SHOT_PRIORITY; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; Template.DisplayTargetHitChance = true; @@ -226,7 +226,7 @@ static function X2AbilityTemplate AddPumpAction() local X2Effect_AddAmmo AddAmmoEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'PumpAction'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityPumpAction"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityPumpAction"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -289,7 +289,7 @@ static function X2AbilityTemplate AddFortify() local X2AbilityCooldown Cooldown; `CREATE_X2ABILITY_TEMPLATE(Template, 'Fortify'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFortify"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFortify"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; Template.ShotHUDPriority = 401; @@ -333,7 +333,7 @@ static function X2AbilityTemplate AddSprinter() local X2Effect_PersistentStatChange StatEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'Sprinter'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilitySprinter"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilitySprinter"; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; Template.AbilityToHitCalc = default.DeadEye; @@ -371,7 +371,7 @@ static function X2AbilityTemplate AddPassSidearm() local X2Condition_AbilityProperty ShooterAbilityCondition; `CREATE_X2ABILITY_TEMPLATE(Template, 'TakeThis'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityTakeThis"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityTakeThis"; //Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_HideSpecificErrors; Template.Hostility = eHostility_Neutral; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SharpshooterAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SharpshooterAbilitySet.uc index a3dbd5c17..20f43e327 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SharpshooterAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SharpshooterAbilitySet.uc @@ -23,10 +23,10 @@ static function array CreateTemplates() Templates.AddItem(AddRapidTargeting()); Templates.AddItem(AddMultiTargeting()); - Templates.AddItem(PurePassive('HDHolo', "img:///UILibrary_LWOTC.LW_AbilityHDHolo", true)); - Templates.AddItem(PurePassive('IndependentTracking', "img:///UILibrary_LWOTC.LW_AbilityIndependentTracking", true)); - Templates.AddItem(PurePassive('VitalPointTargeting', "img:///UILibrary_LWOTC.LW_AbilityVitalPointTargeting", true)); - Templates.AddItem(PurePassive('RapidTargeting_Passive', "img:///UILibrary_LWOTC.LW_AbilityRapidTargeting", true)); + Templates.AddItem(PurePassive('HDHolo', "img:///UILibrary_LW_Overhaul.LW_AbilityHDHolo", true)); + Templates.AddItem(PurePassive('IndependentTracking', "img:///UILibrary_LW_Overhaul.LW_AbilityIndependentTracking", true)); + Templates.AddItem(PurePassive('VitalPointTargeting', "img:///UILibrary_LW_Overhaul.LW_AbilityVitalPointTargeting", true)); + Templates.AddItem(PurePassive('RapidTargeting_Passive', "img:///UILibrary_LW_Overhaul.LW_AbilityRapidTargeting", true)); Templates.AddItem(AddAlphaMikeFoxtrot()); Templates.AddItem(AddDoubleTap2()); @@ -42,13 +42,12 @@ static function X2AbilityTemplate AddHolotarget() local X2Effect_LWHoloTarget Effect; local X2Condition_Visibility TargetVisibilityCondition; local X2Condition_UnitEffects SuppressedCondition; - local X2Condition_AbilityProperty IndependentTargetingCondition; `CREATE_X2ABILITY_TEMPLATE(Template, 'Holotarget'); Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityHolotargeting"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityHolotargeting"; Template.bHideOnClassUnlock = false; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_SQUADDIE_PRIORITY; //Template.AbilityConfirmSound = "TacticalUI_SwordConfirm"; @@ -102,22 +101,6 @@ static function X2AbilityTemplate AddHolotarget() Effect.bApplyOnMiss = true; Template.AddTargetEffect(Effect); - //independent targeting effect - - Effect = new class'X2Effect_LWHoloTarget'; - Effect.BuildPersistentEffect(1+class'X2Effect_LWHoloTarget'.default.INDEPENDENT_TARGETING_NUM_BONUS_TURNS, false, false, false, eGameRule_PlayerTurnBegin); - Effect.SetDisplayInfo(ePerkBuff_Penalty, class'X2Effect_LWHolotarget'.default.HoloTargetEffectName, Template.GetMyLongDescription(), Template.IconImage, true,,Template.AbilitySourceName); - Effect.bRemoveWhenTargetDies = true; - Effect.bUseSourcePlayerState = true; - Effect.bApplyOnHit = true; - Effect.bApplyOnMiss = true; - - IndependentTargetingCondition = new class'X2Condition_AbilityProperty'; - IndependentTargetingCondition.OwnerHasSoldierAbilities.AddItem('IndependentTracking'); - Effect.TargetConditions.AddItem(IndependentTargetingCondition); - - Template.AddTargetEffect(Effect); - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; @@ -132,13 +115,12 @@ static function X2AbilityTemplate AddRapidTargeting() local X2AbilityCooldown Cooldown; local X2Condition_Visibility TargetVisibilityCondition; local X2Condition_UnitEffects SuppressedCondition; - local X2Condition_AbilityProperty IndependentTargetingCondition; `CREATE_X2ABILITY_TEMPLATE(Template, 'Rapidtargeting'); Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityRapidTargeting"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityRapidTargeting"; Template.bHideOnClassUnlock = false; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CORPORAL_PRIORITY; Template.Hostility = eHostility_Neutral; @@ -194,22 +176,6 @@ static function X2AbilityTemplate AddRapidTargeting() Effect.bApplyOnMiss = true; Template.AddTargetEffect(Effect); - //independent targeting effect - - Effect = new class'X2Effect_LWHoloTarget'; - Effect.BuildPersistentEffect(1+class'X2Effect_LWHoloTarget'.default.INDEPENDENT_TARGETING_NUM_BONUS_TURNS, false, false, false, eGameRule_PlayerTurnBegin); - Effect.SetDisplayInfo(ePerkBuff_Penalty, class'X2Effect_LWHolotarget'.default.HoloTargetEffectName, Template.GetMyLongDescription(), Template.IconImage, true,,Template.AbilitySourceName); - Effect.bRemoveWhenTargetDies = true; - Effect.bUseSourcePlayerState = true; - Effect.bApplyOnHit = true; - Effect.bApplyOnMiss = true; - - IndependentTargetingCondition = new class'X2Condition_AbilityProperty'; - IndependentTargetingCondition.OwnerHasSoldierAbilities.AddItem('IndependentTracking'); - Effect.TargetConditions.AddItem(IndependentTargetingCondition); - - Template.AddTargetEffect(Effect); - Template.AdditionalAbilities.AddItem('RapidTargeting_Passive'); Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; @@ -228,13 +194,12 @@ static function X2AbilityTemplate AddMultiTargeting() local X2Condition_Visibility TargetVisibilityCondition; local X2AbilityCooldown Cooldown; local X2Condition_UnitEffects SuppressedCondition; - local X2Condition_AbilityProperty IndependentTargetingCondition; `CREATE_X2ABILITY_TEMPLATE(Template, 'Multitargeting'); Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityMultiTargeting"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityMultiTargeting"; Template.bHideOnClassUnlock = false; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_COLONEL_PRIORITY; //Template.AbilityConfirmSound = "TacticalUI_SwordConfirm"; @@ -298,23 +263,6 @@ static function X2AbilityTemplate AddMultiTargeting() Template.AddTargetEffect(Effect); Template.AddMultiTargetEffect(Effect); - //independent targeting effect - - Effect = new class'X2Effect_LWHoloTarget'; - Effect.BuildPersistentEffect(1+class'X2Effect_LWHoloTarget'.default.INDEPENDENT_TARGETING_NUM_BONUS_TURNS, false, false, false, eGameRule_PlayerTurnBegin); - Effect.SetDisplayInfo(ePerkBuff_Penalty, class'X2Effect_LWHolotarget'.default.HoloTargetEffectName, Template.GetMyLongDescription(), Template.IconImage, true,,Template.AbilitySourceName); - Effect.bRemoveWhenTargetDies = true; - Effect.bUseSourcePlayerState = true; - Effect.bApplyOnHit = true; - Effect.bApplyOnMiss = true; - - IndependentTargetingCondition = new class'X2Condition_AbilityProperty'; - IndependentTargetingCondition.OwnerHasSoldierAbilities.AddItem('IndependentTracking'); - Effect.TargetConditions.AddItem(IndependentTargetingCondition); - - Template.AddTargetEffect(Effect); - Template.AddMultiTargetEffect(Effect); - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; @@ -330,7 +278,7 @@ static function X2AbilityTemplate AddAlphaMikeFoxtrot() local X2Effect_PrimaryHitBonusDamage DamageEffect; `CREATE_X2ABILITY_TEMPLATE (Template, 'AlphaMikeFoxtrot'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityAMF"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityAMF"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ShinobiAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ShinobiAbilitySet.uc index 9aa279f07..68e22e558 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ShinobiAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_ShinobiAbilitySet.uc @@ -28,7 +28,7 @@ static function array CreateTemplates() Templates.AddItem(AddCoupDeGraceAbility()); Templates.AddItem(AddCoupDeGracePassive()); Templates.AddItem(AddCoupDeGrace2Ability()); - Templates.AddItem(PurePassive('Tradecraft', "img:///UILibrary_LWOTC.LW_AbilityTradecraft", true)); + Templates.AddItem(PurePassive('Tradecraft', "img:///UILibrary_LW_Overhaul.LW_AbilityTradecraft", true)); return Templates; } @@ -40,7 +40,7 @@ static function X2AbilityTemplate AddCoupDeGrace2Ability() `CREATE_X2ABILITY_TEMPLATE(Template, 'CoupDeGrace2'); Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityCoupDeGrace"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityCoupDeGrace"; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; Template.AbilityToHitCalc = default.DeadEye; @@ -77,7 +77,7 @@ static function X2AbilityTemplate AddCoupDeGraceAbility() Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityCoupDeGrace"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityCoupDeGrace"; Template.bHideOnClassUnlock = false; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_SQUADDIE_PRIORITY; Template.AbilityConfirmSound = "TacticalUI_SwordConfirm"; @@ -148,7 +148,7 @@ static function X2AbilityTemplate AddCoupDeGracePassive() local X2Effect_CoupDeGrace CoupDeGraceEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'CoupDeGracePassive'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityCoupDeGrace"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityCoupDeGrace"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SpecialistAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SpecialistAbilitySet.uc index be8e6cb76..c1fde0470 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SpecialistAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_SpecialistAbilitySet.uc @@ -39,7 +39,7 @@ static function X2AbilityTemplate AddFailsafe() local X2Effect_Failsafe FailsafeEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'Failsafe'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFailsafe"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFailsafe"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -69,7 +69,7 @@ static function X2AbilityTemplate AddFullOverride() Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFullOverride"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFullOverride"; Charges = new class'X2AbilityCharges'; Charges.InitialCharges = 1; @@ -271,8 +271,6 @@ static function X2AbilityTemplate AddHackRewardControlRobot_Mission() bInfiniteDuration = true; ControlEffect = class'X2StatusEffects'.static.CreateMindControlStatusEffect(99, true, bInfiniteDuration); - // Rename effect so that Stasis doesn't cancel the hack. - ControlEffect.EffectName = 'FullOverrideMindControl'; Template.AddTargetEffect(ControlEffect); // Remove any pre-existing disorient. @@ -370,8 +368,6 @@ static function X2AbilityTemplate AddHackRewardControlRobot_Permanent() bInfiniteDuration = true; ControlEffect = class'X2StatusEffects'.static.CreateMindControlStatusEffect(99, true, bInfiniteDuration); - // Rename effect so that Stasis doesn't cancel the hack. - ControlEffect.EffectName = 'FullOverrideMindControl'; ControlEffect.bRemoveWhenSourceDies = false; // added for ID 1733 -- mind control effect is no longer lost when source unit dies or evacs ControlEffect.EffectRemovedVisualizationFn = none; // No visualization of this effect being removed (which happens when the unit evacs or dies) Template.AddTargetEffect(ControlEffect); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_TechnicalAbilitySet.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_TechnicalAbilitySet.uc index c18cf0f77..ccb916dc7 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_TechnicalAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_LW_TechnicalAbilitySet.uc @@ -50,9 +50,6 @@ var config int FIRE_AND_STEEL_DAMAGE_BONUS; var config int CONCUSSION_ROCKET_RADIUS_TILES; var config int CONCUSSION_ROCKET_TARGET_WILL_MALUS_DISORIENT; var config int CONCUSSION_ROCKET_TARGET_WILL_MALUS_STUN; -var config int CONCUSSION_ROCKET_STUN_CHANCE; -var config bool USE_CONCUSSION_ROCKET_WILL_CALCS; -var config bool ENABLE_CONCUSSION_ROCKET_SMOKE; var config WeaponDamageValue CONCUSSION_ROCKET_DAMAGE_VALUE; var config int CONCUSSION_ROCKET_ENV_DAMAGE; var config float BURNOUT_RADIUS; @@ -75,30 +72,28 @@ static function array CreateTemplates() { local array Templates; `Log("LW_TechnicalAbilitySet.CreateTemplates --------------------------------"); - Templates.AddItem(PurePassive('HeavyArmaments', "img:///UILibrary_LWOTC.LW_AbilityHeavyArmaments")); + Templates.AddItem(PurePassive('HeavyArmaments', "img:///UILibrary_LW_Overhaul.LW_AbilityHeavyArmaments")); Templates.AddItem(CreateLWFlamethrowerAbility()); - Templates.AddItem(PurePassive('PhosphorusPassive', "img:///UILibrary_LWOTC.LW_AbilityPhosphorus")); - Templates.AddItem(PurePassive('NapalmX', "img:///UILibrary_LWOTC.LW_AbilityNapalmX")); - Templates.AddItem(PurePassive('Incinerator', "img:///UILibrary_LWOTC.LW_AbilityHighPressure")); + Templates.AddItem(PurePassive('PhosphorusPassive', "img:///UILibrary_LW_Overhaul.LW_AbilityPhosphorus")); + Templates.AddItem(PurePassive('NapalmX', "img:///UILibrary_LW_Overhaul.LW_AbilityNapalmX")); + Templates.AddItem(PurePassive('Incinerator', "img:///UILibrary_LW_Overhaul.LW_AbilityHighPressure")); Templates.AddItem(AddQuickburn()); Templates.AddItem(CreateRoustAbility()); Templates.AddItem(CreateBurnoutAbility()); Templates.AddItem(BurnoutPassive()); Templates.AddItem(RoustDamage()); Templates.AddItem(CreateFirestorm()); - Templates.AddItem(CreateFirestormActivation()); Templates.AddItem(FirestormDamage()); - Templates.AddItem(CreateFirestorm2()); Templates.AddItem(CreateHighPressureAbility()); Templates.AddItem(CreateTechnicalFireImmunityAbility()); Templates.AddItem(CreatePhosphorusBonusAbility()); Templates.AddItem(LWRocketLauncherAbility()); Templates.AddItem(LWBlasterLauncherAbility()); - Templates.AddItem(PurePassive('FireInTheHole', "img:///UILibrary_LWOTC.LW_AbilityFireInTheHole")); - Templates.AddItem(PurePassive('TandemWarheads', "img:///UILibrary_LWOTC.LW_AbilityTandemWarheads")); + Templates.AddItem(PurePassive('FireInTheHole', "img:///UILibrary_LW_Overhaul.LW_AbilityFireInTheHole")); + Templates.AddItem(PurePassive('TandemWarheads', "img:///UILibrary_LW_Overhaul.LW_AbilityTandemWarheads")); Templates.AddItem(AddShockAndAwe()); Templates.AddItem(AddJavelinRockets()); Templates.AddItem(CreateConcussionRocketAbility()); @@ -118,7 +113,7 @@ static function X2AbilityTemplate AddJavelinRockets() local X2Effect_JavelinRockets JavelinRocketsEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'JavelinRockets'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityJavelinRockets"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityJavelinRockets"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -145,7 +140,7 @@ static function X2AbilityTemplate AddShockAndAwe() local X2Effect_BonusRocketCharges RocketChargesEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'ShockAndAwe'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityShockAndAwe"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityShockAndAwe"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -306,7 +301,7 @@ static function X2AbilityTemplate CreatePhosphorusBonusAbility() Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.bCrossClassEligible = false; Template.Hostility = eHostility_Neutral; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityPhosphorus"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityPhosphorus"; Template.bDontDisplayInAbilitySummary = true; Template.AbilityToHitCalc = default.DeadEye; Template.AbilityTargetStyle = default.SelfTarget; @@ -343,7 +338,7 @@ static function X2AbilityTemplate CreateRoustAbility() `CREATE_X2ABILITY_TEMPLATE(Template, 'Roust'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityRoust"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityRoust"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; @@ -454,7 +449,7 @@ static function X2AbilityTemplate RoustDamage() local X2Effect_RoustDamage DamagePenalty; `CREATE_X2ABILITY_TEMPLATE (Template, 'RoustDamage'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityRoust"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityRoust"; Template.bDontDisplayInAbilitySummary = true; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; Template.AbilitySourceName = 'eAbilitySource_Perk'; @@ -477,252 +472,6 @@ static function X2AbilityTemplate RoustDamage() static function X2AbilityTemplate CreateFirestorm() -{ - local X2AbilityTemplate Template; - local X2AbilityCharges_BonusCharges Charges; - local X2AbilityCost_Charges ChargeCost; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2AbilityTarget_Cursor CursorTarget; - local X2AbilityMultiTarget_Radius RadiusMultiTarget; - local X2Condition_UnitProperty UnitPropertyCondition; - local X2AbilityTrigger_PlayerInput InputTrigger; - //local X2AbilityToHitCalc_StandardAim StandardAim; - local X2Condition_UnitEffects SuppressedCondition; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'Firestorm'); - - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFirestorm"; - Template.bSKipFireAction=true; - //Template.bUseAmmoAsChargesForHUD = true; - - InputTrigger = new class'X2AbilityTrigger_PlayerInput'; - Template.AbilityTriggers.AddItem(InputTrigger); - - Template.AbilityToHitCalc=default.Deadeye; - - Charges = new class 'X2AbilityCharges_BonusCharges'; - Charges.InitialCharges = default.FIRESTORM_NUM_CHARGES; - Charges.BonusAbility = 'HighPressure'; - Charges.BonusItem = 'HighPressureTanks'; - Charges.BonusChargesCount = default.FIRESTORM_HIGH_PRESSURE_CHARGES; - Template.AbilityCharges = Charges; - - ChargeCost = new class'X2AbilityCost_Charges'; - ChargeCost.NumCharges = 1; - Template.AbilityCosts.AddItem(ChargeCost); - - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 2; - ActionPointCost.bConsumeAllPoints = true; - //ActionPointCost.DoNotConsumeAllSoldierAbilities.AddItem('Quickburn'); - Template.AbilityCosts.AddItem(ActionPointCost); - - CursorTarget = new class'X2AbilityTarget_Cursor'; - //CursorTarget.bRestrictToWeaponRange = false; - //CursorTarget.FixedAbilityRange = 15; - Template.AbilityTargetStyle=CursorTarget; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.ARMOR_ACTIVE_PRIORITY; - - RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius'; - RadiusMultiTarget.fTargetRadius = default.FIRESTORM_RADIUS_METERS; - RadiusMultiTarget.bIgnoreBlockingCover = true; - RadiusMultiTarget.bExcludeSelfAsTargetIfWithinRadius = true; - Template.AbilityMultiTargetStyle = RadiusMultiTarget; - - UnitPropertyCondition = new class'X2Condition_UnitProperty'; - UnitPropertyCondition.ExcludeDead = true; - Template.AbilityShooterConditions.AddItem(UnitPropertyCondition); - - SuppressedCondition = new class'X2Condition_UnitEffects'; - SuppressedCondition.AddExcludeEffect(class'X2Effect_Suppression'.default.EffectName, 'AA_UnitIsSuppressed'); - SuppressedCondition.AddExcludeEffect(class'X2Effect_AreaSuppression'.default.EffectName, 'AA_UnitIsSuppressed'); - Template.AbilityShooterConditions.AddItem(SuppressedCondition); - - Template.AddShooterEffectExclusions(); - - Template.bCheckCollision = true; - Template.bAffectNeighboringTiles = true; - Template.bFragileDamageOnly = true; - - Template.TargetingMethod = class'X2TargetingMethod_PathTarget'; - - - Template.ActivationSpeech = 'Flamethrower'; - Template.CinescriptCameraType = "Soldier_HeavyWeapons"; - - Template.AdditionalAbilities.AddItem('TechnicalFireImmunity'); - Template.AdditionalAbilities.AddItem('FirestormDamage'); - Template.AdditionalAbilities.AddItem('FirestormActivation'); - - - Template.PostActivationEvents.AddItem('FirestormActivation'); - - Template.DamagePreviewFn = FirestormDamagePreview; - - Template.BuildNewGameStateFn = TypicalMoveEndAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - //Template.BuildVisualizationFn = LWFirestorm_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalMoveEndAbility_BuildInterruptGameState; - - // Interactions with the Chosen and Shadow - // NOTE: Does NOT increase rate of Lost spawns - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - - return Template; -} - -function bool FirestormDamagePreview(XComGameState_Ability AbilityState, StateObjectReference TargetRef, out WeaponDamageValue MinDamagePreview, out WeaponDamageValue MaxDamagePreview, out int AllowsShield) -{ - local XComGameState_Unit AbilityOwner; - local StateObjectReference FirestormActivationRef; - local XComGameState_Ability FirestormActivationAbility; - local XComGameStateHistory History; - - History = `XCOMHISTORY; - AbilityOwner = XComGameState_Unit(History.GetGameStateForObjectID(AbilityState.OwnerStateObject.ObjectID)); - FirestormActivationRef = AbilityOwner.FindAbility('FirestormActivation'); - FirestormActivationAbility = XComGameState_Ability(History.GetGameStateForObjectID(FirestormActivationRef.ObjectID)); - if (FirestormActivationAbility == none) - { - `RedScreenOnce("Unit has Firestorm but is missing FirestormActivation. Not good. -Tedster @gameplay"); - } - else - { - FirestormActivationAbility.NormalDamagePreview(TargetRef, MinDamagePreview, MaxDamagePreview, AllowsShield); - } - return true; -} - -static function X2AbilityTemplate CreateFirestormActivation() -{ - local X2AbilityTemplate Template; - local X2AbilityTrigger_EventListener Trigger; - //local X2AbilityTarget_Cursor CursorTarget; - local X2AbilityMultiTarget_Radius RadiusMultiTarget; - //local X2Condition_UnitProperty UnitPropertyCondition; - //local X2AbilityTrigger_PlayerInput InputTrigger; - local X2Effect_ApplyFireToWorld_Limited FireToWorldEffect; - local X2AbilityToHitCalc_StandardAim StandardAim; - local X2Effect_Burning BurningEffect; - local X2Effect_ApplyWeaponDamage WeaponDamageEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'FirestormActivation'); - - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFirestorm"; - //Template.bUseAmmoAsChargesForHUD = true; - - Trigger = new class'X2AbilityTrigger_EventListener'; - Trigger.ListenerData.Deferral = ELD_OnStateSubmitted; - Trigger.ListenerData.EventID = 'FirestormActivation'; - Trigger.ListenerData.Filter = eFilter_Unit; - Trigger.Listenerdata.Priority=80; - Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.AbilityTriggerEventListener_Self; - Template.AbilityTriggers.AddItem(Trigger); - - - StandardAim = new class'X2AbilityToHitCalc_StandardAim'; - StandardAim.bAllowCrit = false; - StandardAim.bGuaranteedHit = true; - //Template.AbilityToHitCalc = StandardAim; - Template.AbilityToHitCalc = default.DeadEye; - - - //Panic effects need to come before the damage. This is needed for proper visualization ordering. - Template.AddMultiTargetEffect(CreateNapalmXPanicEffect()); - - //0 dmg effect to add environmental damage to Firestorm. - WeaponDamageEffect = new class'X2Effect_ApplyWeaponDamage'; - WeaponDamageEffect.bIgnoreBaseDamage = true; - WeaponDamageEffect.EnvironmentalDamageAmount=default.FIRESTORM_ENV_DAMAGE; - WeaponDamageEffect.bApplyOnHit = false; - WeaponDamageEffect.bApplyOnMiss = false; - WeaponDamageEffect.bApplyToWorldOnHit = true; - WeaponDamageEffect.bApplyToWorldOnMiss = true; - Template.AddMultiTargetEffect(WeaponDamageEffect); - - FireToWorldEffect = new class'X2Effect_ApplyFireToWorld_Limited'; - FireToWorldEffect.bUseFireChanceLevel = true; - FireToWorldEffect.bDamageFragileOnly = true; - FireToWorldEffect.FireChance_Level1 = 0.10f; - FireToWorldEffect.FireChance_Level2 = 0.25f; - FireToWorldEffect.FireChance_Level3 = 0.60f; - FireToWorldEffect.bCheckForLOSFromTargetLocation = false; //The flamethrower does its own LOS filtering - - - - BurningEffect = class'X2StatusEffects'.static.CreateBurningStatusEffect(default.FLAMETHROWER_BURNING_BASE_DAMAGE, default.FLAMETHROWER_BURNING_DAMAGE_SPREAD); - BurningEffect.ApplyChance = default.FLAMETHROWER_DIRECT_APPLY_CHANCE; - Template.AddMultiTargetEffect(BurningEffect); - - Template.AddMultiTargetEffect(CreateFlamethrowerDamageAbility()); - Template.AddMultiTargetEffect(FireToWorldEffect); - - - - //CursorTarget = new class'X2AbilityTarget_Cursor'; - //CursorTarget.bRestrictToWeaponRange = false; - //CursorTarget.FixedAbilityRange = 1; - //Template.AbilityTargetStyle=CursorTarget; - Template.AbilityTargetStyle = default.SelfTarget; - //Template.AbilityTargetStyle = new class'X2AbilityTarget_MovingMelee'; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.ARMOR_ACTIVE_PRIORITY; - - RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius'; - RadiusMultiTarget.fTargetRadius = default.FIRESTORM_RADIUS_METERS; - RadiusMultiTarget.bIgnoreBlockingCover = true; - RadiusMultiTarget.bExcludeSelfAsTargetIfWithinRadius=true; - Template.AbilityMultiTargetStyle = RadiusMultiTarget; - - - Template.bCheckCollision = true; - Template.bAffectNeighboringTiles = true; - Template.bFragileDamageOnly = true; - - Template.ActionFireClass = class'X2Action_Fire_Firestorm'; - - Template.ActivationSpeech = 'Flamethrower'; - Template.CinescriptCameraType = "Soldier_HeavyWeapons"; - - Template.PostActivationEvents.AddItem('FlamethrowerActivated'); - - //Template.TargetingMethod = class'X2TargetingMethod_TopDownAOE'; - - Template.ModifyNewContextFn = Firestorm_ModifyContext; - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = LWFlamethrower_BuildVisualization; - //Template.BuildVisualizationFn = LWFirestorm_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - // Interactions with the Chosen and Shadow - // NOTE: Does NOT increase rate of Lost spawns - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - - return Template; -} - -static function Firestorm_ModifyContext(XComGameStateContext Context) -{ - local XComGameStateContext_Ability AbilityContext; - local XComGameState_Unit UnitState; - local XComGameStateHistory History; - - History = `XCOMHISTORY; - AbilityContext = XComGameStateContext_Ability(Context); - UnitState = XComGameState_Unit(History.GetGameStateForObjectID(AbilityContext.InputContext.SourceObject.ObjectID)); - - AbilityContext.InputContext.TargetLocations.length = 0; - AbilityContext.InputContext.TargetLocations.AddItem(`XWORLD.GetPositionFromTileCoordinates(UnitState.TileLocation)); - -} - -static function X2AbilityTemplate CreateFirestorm2() { local X2AbilityTemplate Template; local X2AbilityCharges_BonusCharges Charges; @@ -738,11 +487,11 @@ static function X2AbilityTemplate CreateFirestorm2() local X2Condition_UnitEffects SuppressedCondition; local X2Effect_ApplyWeaponDamage WeaponDamageEffect; - `CREATE_X2ABILITY_TEMPLATE(Template, 'Firestorm2'); + `CREATE_X2ABILITY_TEMPLATE(Template, 'Firestorm'); Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFirestorm"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFirestorm"; //Template.bUseAmmoAsChargesForHUD = true; InputTrigger = new class'X2AbilityTrigger_PlayerInput'; @@ -849,7 +598,6 @@ static function X2AbilityTemplate CreateFirestorm2() return Template; } - static function X2AbilityTemplate FirestormDamage() { local X2AbilityTemplate Template; @@ -857,7 +605,7 @@ static function X2AbilityTemplate FirestormDamage() `CREATE_X2ABILITY_TEMPLATE (Template, 'FirestormDamage'); Template.bDontDisplayInAbilitySummary = true; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFirestorm"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFirestorm"; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.Hostility = eHostility_Neutral; @@ -871,7 +619,7 @@ static function X2AbilityTemplate FirestormDamage() DamageBonus.Penalty = false; DamageBonus.Mult = false; DamageBonus.DamageMod = default.FIRESTORM_DAMAGE_BONUS; - DamageBonus.ActiveAbility = 'FirestormActivation'; + DamageBonus.ActiveAbility = 'Firestorm'; DamageBonus.BuildPersistentEffect(1, true, false, false); Template.AddTargetEffect(DamageBonus); @@ -887,7 +635,7 @@ static function X2AbilityTemplate CreateTechnicalFireImmunityAbility() local X2Effect_DamageImmunity DamageImmunity; `CREATE_X2ABILITY_TEMPLATE(Template, 'TechnicalFireImmunity'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFirestorm"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFirestorm"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; @@ -936,7 +684,7 @@ static function X2AbilityTemplate CreateBurnoutAbility() local X2Effect_ApplySmokeGrenadeToWorld WeaponEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'Burnout'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityIgnition"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityIgnition"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; @@ -980,7 +728,7 @@ static function X2AbilityTemplate CreateBurnoutAbility() static function X2AbilityTemplate BurnoutPassive() { - return PurePassive('BurnoutPassive', "img:///UILibrary_LWOTC.LW_AbilityIgnition", false, 'eAbilitySource_Perk', true); + return PurePassive('BurnoutPassive', "img:///UILibrary_LW_Overhaul.LW_AbilityIgnition", false, 'eAbilitySource_Perk', true); } // this is a hack to allow the flamethrower to be merged with rocket launcher, but still have custom anims at each tier @@ -1019,192 +767,6 @@ function LWFlamethrower_BuildVisualization(XComGameState VisualizeGameState) } - -function LWFirestorm_BuildVisualization(XComGameState VisualizeGameState) -{ - local X2AbilityTemplate AbilityTemplate; - local AbilityInputContext AbilityContext; - local XComGameStateContext_Ability Context; - local X2WeaponTemplate WeaponTemplate; - local XComGameState_Item SourceWeapon; - - Context = XComGameStateContext_Ability(VisualizeGameState.GetContext()); - AbilityContext = Context.InputContext; - AbilityTemplate = class'XComGameState_Ability'.static.GetMyTemplateManager().FindAbilityTemplate(Context.InputContext.AbilityTemplateName); - SourceWeapon = XComGameState_Item(`XCOMHISTORY.GetGameStateForObjectID(AbilityContext.ItemObject.ObjectID)); - if (SourceWeapon != None) - { - WeaponTemplate = X2WeaponTemplate(SourceWeapon.GetMyTemplate()); - } - AbilityTemplate.CustomFireAnim = 'FF_FireFlameThrower'; // default to something safe - - if(WeaponTemplate != none) - { - switch (WeaponTemplate.DataName) - { - case 'LWGauntlet_CG': - case 'LWGauntlet_BM': - AbilityTemplate.CustomFireAnim = 'FF_FireFlameThrower_Lv2'; // use the fancy animation - break; - default: - break; - } - } - - //Continue building the visualization as normal. - TypicalAbility_BuildVisualization(VisualizeGameState); -} -/* -function LWFirestorm_BuildVisualization(XComGameState VisualizeGameState) -{ - local XComGameStateHistory History; - local XComGameStateVisualizationMgr VisMgr; - local X2AbilityTemplate AbilityTemplate; - local AbilityInputContext AbilityContext; - local XComGameStateContext_Ability Context; - local X2Action_Fire_Firestorm FireAction; - local X2Action_ExitCover ExitCoverAction; - local X2WeaponTemplate WeaponTemplate; - local XComGameState_Item SourceWeapon; - local StateObjectReference CurrentTarget; - local VisualizationActionMetadata SourceMetadata; - local VisualizationActionMetadata ActionMetadata; - local VisualizationActionMetadata BlankMetadata; - local X2Action_ApplyWeaponDamageToUnit UnitDamageAction; - local XGUnit SourceVisualizer; - local int ScanTargets; - local Array LeafNodes; - local X2Action_MarkerNamed JoinActions; - local int EffectIndex, TargetIndex; - local int TrackIndex; - local XComGameState_EnvironmentDamage EnvironmentDamageEvent; - local XComGameState_WorldEffectTileData WorldDataUpdate; - local XComGameState_InteractiveObject InteractiveObject; - local VisualizationActionMetadata InitData; - local VisualizationActionMetadata BuildData; - local VisualizationActionMetadata SourceData, InterruptTrack; - local array MultiTargetEffects; - local X2Action_Delay Delay; - - - - Context = XComGameStateContext_Ability(VisualizeGameState.GetContext()); - AbilityContext = Context.InputContext; - AbilityTemplate = class'XComGameState_Ability'.static.GetMyTemplateManager().FindAbilityTemplate(Context.InputContext.AbilityTemplateName); - SourceWeapon = XComGameState_Item(`XCOMHISTORY.GetGameStateForObjectID(AbilityContext.ItemObject.ObjectID)); - if (SourceWeapon != None) - { - WeaponTemplate = X2WeaponTemplate(SourceWeapon.GetMyTemplate()); - } - AbilityTemplate.CustomFireAnim = 'FF_FireFlameThrower'; // default to something safe - if(WeaponTemplate != none) - { - switch (WeaponTemplate.DataName) - { - case 'LWGauntlet_CG': - case 'LWGauntlet_BM': - AbilityTemplate.CustomFireAnim = 'FF_FireFlameThrower_Lv2'; // use the fancy animation - - break; - default: - break; - } - } - - //Continue building the visualization as normal. - History = `XCOMHISTORY; - VisMgr = `XCOMVISUALIZATIONMGR; - - MultiTargetEffects = AbilityTemplate.AbilityMultiTargetEffects; - - SourceVisualizer = XGUnit(History.GetVisualizer(Context.InputContext.SourceObject.ObjectID)); - - SourceMetadata.StateObject_OldState = History.GetGameStateForObjectID(SourceVisualizer.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1); - SourceMetadata.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(SourceVisualizer.ObjectID); - SourceMetadata.StateObjectRef = Context.InputContext.SourceObject; - SourceMetadata.VisualizeActor = SourceVisualizer; - - if(Context.InputContext.MovementPaths.Length > 0 ) - { - class'X2VisualizerHelpers'.static.ParsePath(Context, SourceMetadata); - } - - ExitCoverAction = X2Action_ExitCover(class'X2Action_ExitCover'.static.AddToVisualizationTree(SourceMetadata, Context, false, SourceMetadata.LastActionAdded)); - - Delay = X2Action_Delay(class'X2Action_Delay'.static.AddToVisualizationTree(BuildData, Context,,ExitCoverAction)); - Delay.Duration = 1.6f; - Delay.bIgnoreZipMode=true; - FireAction = X2Action_Fire_Firestorm(class'X2Action_Fire_Firestorm'.static.AddToVisualizationTree(SourceMetadata, Context, false, ExitCoverAction)); - class'X2Action_EnterCover'.static.AddToVisualizationTree(SourceMetadata, Context, false, Delay); - - for (ScanTargets = 0; ScanTargets < Context.InputContext.MultiTargets.Length; ++ScanTargets) - { - CurrentTarget = Context.InputContext.MultiTargets[ScanTargets]; - - UnitDamageAction = X2Action_ApplyWeaponDamageToUnit(class'X2Action_ApplyWeaponDamageToUnit'.static.AddToVisualizationTree(ActionMetadata, Context, false, FireAction)); - XGUnit(ActionMetadata.VisualizeActor).BuildAbilityEffectsVisualization(VisualizeGameState, ActionMetadata); - } - - - - //world damage from TypicalAbility - - foreach VisualizeGameState.IterateByClassType(class'XComGameState_EnvironmentDamage', EnvironmentDamageEvent) - { - BuildData = InitData; - BuildData.VisualizeActor = none; - BuildData.StateObject_NewState = EnvironmentDamageEvent; - BuildData.StateObject_OldState = EnvironmentDamageEvent; - - // if this is the damage associated with the exit cover action, we need to force the parenting within the tree - // otherwise LastActionAdded with be 'none' and actions will auto-parent. - - for (EffectIndex = 0; EffectIndex < AbilityTemplate.AbilityShooterEffects.Length; ++EffectIndex) - { - AbilityTemplate.AbilityShooterEffects[EffectIndex].AddX2ActionsForVisualization(VisualizeGameState, BuildData, 'AA_Success'); - } - - for (EffectIndex = 0; EffectIndex < AbilityTemplate.AbilityTargetEffects.Length; ++EffectIndex) - { - AbilityTemplate.AbilityTargetEffects[EffectIndex].AddX2ActionsForVisualization(VisualizeGameState, BuildData, 'AA_Success'); - } - - for (EffectIndex = 0; EffectIndex < MultiTargetEffects.Length; ++EffectIndex) - { - MultiTargetEffects[EffectIndex].AddX2ActionsForVisualization(VisualizeGameState, BuildData, 'AA_Success'); - } - } - - foreach VisualizeGameState.IterateByClassType(class'XComGameState_WorldEffectTileData', WorldDataUpdate) - { - BuildData = InitData; - BuildData.VisualizeActor = none; - BuildData.StateObject_NewState = WorldDataUpdate; - BuildData.StateObject_OldState = WorldDataUpdate; - - for (EffectIndex = 0; EffectIndex < AbilityTemplate.AbilityShooterEffects.Length; ++EffectIndex) - { - AbilityTemplate.AbilityShooterEffects[EffectIndex].AddX2ActionsForVisualization(VisualizeGameState, BuildData, 'AA_Success'); - } - - for (EffectIndex = 0; EffectIndex < AbilityTemplate.AbilityTargetEffects.Length; ++EffectIndex) - { - AbilityTemplate.AbilityTargetEffects[EffectIndex].AddX2ActionsForVisualization(VisualizeGameState, BuildData, 'AA_Success'); - } - - for (EffectIndex = 0; EffectIndex < MultiTargetEffects.Length; ++EffectIndex) - { - MultiTargetEffects[EffectIndex].AddX2ActionsForVisualization(VisualizeGameState, BuildData, 'AA_Success'); - } - } - - VisMgr.GetAllLeafNodes(VisMgr.BuildVisTree, LeafNodes); - JoinActions = X2Action_MarkerNamed(class'X2Action_MarkerNamed'.static.AddToVisualizationTree(SourceMetadata, Context, false, , LeafNodes)); - JoinActions.SetName("Join"); - -} -*/ - static function X2Effect_ImmediateMultiTargetAbilityActivation CreateNapalmXPanicEffect() { local X2Effect_ImmediateMultiTargetAbilityActivation NapalmXEffect; @@ -1291,7 +853,7 @@ static function X2AbilityTemplate CreateFireandSteelAbility() local X2Effect_BonusWeaponDOT DamageEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'FireandSteel'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityFireandSteel"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityFireandSteel"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; @@ -1526,7 +1088,7 @@ static function X2AbilityTemplate CreateHighPressureAbility() PostBeginPlayTrigger.Priority = 40; Template.AbilityTriggers.AddItem(PostBeginPlayTrigger); Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityInferno"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityInferno"; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; Template.Hostility = eHostility_Neutral; Template.bIsPassive = true; @@ -1553,7 +1115,7 @@ static function X2AbilityTemplate CreateConcussionRocketAbility() local X2AbilityToHitCalc_StandardAim StandardAim; local X2Effect_PersistentStatChange DisorientedEffect; local X2Effect_ApplyWeaponDamage WeaponDamageEffect; -// local X2Effect_SmokeGrenade SmokeEffect; + //local X2Effect_SmokeGrenade SmokeEffect; local X2Effect_ApplySmokeGrenadeToWorld WeaponEffect; local X2Effect_Stunned StunnedEffect; local X2Condition_UnitEffects SuppressedCondition; @@ -1564,7 +1126,7 @@ static function X2AbilityTemplate CreateConcussionRocketAbility() Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityConcussionRocket"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityConcussionRocket"; Template.bCrossClassEligible = false; Template.Hostility = eHostility_Offensive; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_COLONEL_PRIORITY; @@ -1628,27 +1190,22 @@ static function X2AbilityTemplate CreateConcussionRocketAbility() //Template.AddTargetEffect(WeaponDamageEffect); Template.AddMultiTargetEffect(WeaponDamageEffect); - StunnedEffect = class'X2StatusEffects'.static.CreateStunnedStatusEffect(2,default.CONCUSSION_ROCKET_STUN_CHANCE,false); + StunnedEffect = class'X2StatusEffects'.static.CreateStunnedStatusEffect(2,100,false); StunnedEffect.bRemoveWhenSourceDies = false; - if(default.USE_CONCUSSION_ROCKET_WILL_CALCS) - StunnedEffect.ApplyChanceFn = ApplyChance_Concussion_Stunned; + StunnedEffect.ApplyChanceFn = ApplyChance_Concussion_Stunned; //Template.AddTargetEffect(StunnedEffect); Template.AddMultiTargetEffect(StunnedEffect); DisorientedEffect = class'X2StatusEffects'.static.CreateDisorientedStatusEffect(, , false); - if(default.USE_CONCUSSION_ROCKET_WILL_CALCS) - DisorientedEffect.ApplyChanceFn = ApplyChance_Concussion_Disoriented; + DisorientedEffect.ApplyChanceFn = ApplyChance_Concussion_Disoriented; //Template.AddTargetEffect(DisorientedEffect); Template.AddMultiTargetEffect(DisorientedEffect); - if(default.ENABLE_CONCUSSION_ROCKET_SMOKE) - { - WeaponEffect = new class'X2Effect_ApplySmokeGrenadeToWorld'; - Template.AddMultiTargetEffect (WeaponEffect); + WeaponEffect = new class'X2Effect_ApplySmokeGrenadeToWorld'; + Template.AddMultiTargetEffect (WeaponEffect); + + Template.AddMultiTargetEffect (class'X2Item_DefaultGrenades'.static.SmokeGrenadeEffect()); - Template.AddMultiTargetEffect (class'X2Item_DefaultGrenades'.static.SmokeGrenadeEffect()); - } - Template.ActivationSpeech = 'Explosion'; Template.CinescriptCameraType = "Soldier_HeavyWeapons"; @@ -1799,7 +1356,7 @@ static function X2AbilityTemplate AddQuickburn() local X2AbilityCooldown Cooldown; `CREATE_X2ABILITY_TEMPLATE(Template, 'Quickburn'); - Template.IconImage = "img:///UILibrary_LWOTC.LW_AbilityQuickburn"; + Template.IconImage = "img:///UILibrary_LW_Overhaul.LW_AbilityQuickburn"; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.STASIS_LANCE_PRIORITY; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow; @@ -1967,23 +1524,7 @@ static function int TileDistanceBetween(XComGameState_Unit Unit, vector TargetLo Tiles = Dist / WorldData.WORLD_StepSize; return Tiles; } -static final function EventListenerReturn AbilityTrigger_SameLocation(Object EventData, Object EventSource, XComGameState GameState, Name EventID, Object CallbackData) -{ - local XComGameState_Ability AbilityState; - local XComGameStateContext_Ability AbilityContext; - AbilityContext = XComGameStateContext_Ability(GameState.GetContext()); - if (AbilityState == none || AbilityContext.InterruptionStatus == eInterruptionStatus_Interrupt) - return ELR_NoInterrupt; - - AbilityState = XComGameState_Ability(CallbackData); - if (AbilityState == none) - return ELR_NoInterrupt; - - AbilityState.AbilityTriggerAgainstSingleTarget(AbilityState.OwnerStateObject, false, GameState.HistoryIndex); - - return ELR_NoInterrupt; -} defaultProperties { diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_PlaceDelayedEvacZone.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_PlaceDelayedEvacZone.uc index 4cf9f69f6..e5d120d27 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_PlaceDelayedEvacZone.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Ability_PlaceDelayedEvacZone.uc @@ -22,8 +22,6 @@ static function array CreateTemplates() local array Templates; Templates.AddItem(PlaceDelayedEvacZone()); - Templates.AddItem(GrantEvacFlare()); - return Templates; } @@ -52,7 +50,6 @@ static function X2AbilityTemplate PlaceDelayedEvacZone() StandardAim = new class'X2AbilityToHitCalc_StandardAim'; StandardAim.bIndirectFire = true; - StandardAim.bGuaranteedHit = true; StandardAim.bAllowCrit = false; Template.AbilityToHitCalc = StandardAim; @@ -95,39 +92,6 @@ static function X2AbilityTemplate PlaceDelayedEvacZone() return Template; } -static function X2AbilityTemplate GrantEvacFlare() -{ - local X2AbilityTemplate Template; - local X2Effect_TemporaryItem ItemEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'GrantEvacFlare'); - - Template.AbilitySourceName = 'eAbilitySource_Standard'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - Template.bCrossClassEligible = false; - Template.bUniqueSource = true; - - Template.bDontDisplayInAbilitySummary = true; - Template.bDisplayInUITooltip = false; - - ItemEffect = new class'X2Effect_TemporaryItem'; - ItemEffect.ItemName = 'EvacFlare'; - ItemEffect.EffectName = 'GrantEvacFlareEffect'; - ItemEffect.DuplicateResponse = eDupe_Ignore; - - ItemEffect.BuildPersistentEffect(1, true, false, false); - Template.AddTargetEffect(ItemEffect); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - - return Template; - -} - static function int GetEvacDelay() { local XComGameState_LWEvacSpawner EvacSpawner; @@ -207,8 +171,6 @@ simulated function XComGameState PlaceDelayedEvacZone_BuildGameState(XComGameSta `assert(AbilityContext.InputContext.TargetLocations.Length == 1); SpawnLocation = AbilityContext.InputContext.TargetLocations[0]; - `LWTrace("Evac Target location Array length:" @ AbilityContext.InputContext.TargetLocations.Length); - `LWTrace(`SHOWVAR(AbilityContext.InputContext.TargetLocations[0])); Delay = GetEvacDelay(); class'XComGameState_LWEvacSpawner'.static.InitiateEvacZoneDeployment(Delay, SpawnLocation, NewGameState); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_Fire_Firestorm.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_Fire_Firestorm.uc index 5125b08d8..a83990686 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_Fire_Firestorm.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_Fire_Firestorm.uc @@ -30,10 +30,6 @@ var private float currDuration_F; var private float CurrentFlameLength_F; var private float TargetFlameLength_F; var private bool bWaitingToFire_F; -var bool bInitUpdateAim; - -var XGUnit SourceXGUnit; -var XComUnitPawn SourceUnitPawn; var private array alreadySignaledTracks_F; @@ -56,46 +52,28 @@ function bool FindTrack(StateObjectReference find) function Init() { + local Vector TempDir; + super.Init(); - bInitUpdateAim=false; -} -function InitUpdateAim() -{ - local Vector TempDir; - AbilityState = XComGameState_Ability(`XCOMHISTORY.GetGameStateForObjectID(AbilityContext.InputContext.AbilityRef.ObjectID)); - -//Commenting out the targeting method check so I can change the targeting method on Firestorm. -// if (ClassIsChildOf(AbilityState.GetMyTemplate().TargetingMethod, class'X2TargetingMethod_Grenade')) -// { + if (ClassIsChildOf(AbilityState.GetMyTemplate().TargetingMethod, class'X2TargetingMethod_Grenade')) + { radiusTemplate = X2AbilityMultiTarget_Radius(AbilityState.GetMyTemplate().AbilityMultiTargetStyle); //ConeLength = radiusTemplate.GetConeLength(AbilityState); //ConeWidth = radiusTemplate.GetConeEndDiameter(AbilityState) * 1.35; ConeLength = radiusTemplate.GetTargetRadius(AbilityState) * 1.35; - //StartLocation = zeroVector; - //EndLocation = zeroVector; - - if (AbilityContext.InputContext.MovementPaths.Length > 0) - { - StartLocation = AbilityContext.InputContext.MovementPaths[0].MovementData[AbilityContext.InputContext.MovementPaths[0].MovementData.Length - 1].Position; - } - else - { - StartLocation = UnitPawn.Location; - - } - EndLocation = StartLocation; - EndLocation.x += 1.0; + StartLocation = UnitPawn.Location; + EndLocation = UnitPawn.Location; EndLocation.x += 1.0; //EndLocation = AbilityContext.InputContext.TargetLocations[0]; - UnitDir = Normal(vector(UnitPawn.Rotation)); + ConeDir = EndLocation - StartLocation; - + UnitDir = Normal(vector(UnitPawn.Rotation)); ConeAngle = PI; // * 2; @@ -114,8 +92,7 @@ function InitUpdateAim() SweepEndLocation_End = StartLocation + (TempDir * ConeLength); SecondaryTiles = AbilityContext.InputContext.VisibleNeighborTiles; - //`Log("SecondaryTiles Array length: " @SecondaryTiles.Length); - //} + } PawnStartRotation = UnitPawn.Rotation; @@ -141,8 +118,6 @@ simulated state Executing simulated function UpdateAim(float DT) { - - local ParticleSystemComponent p; local int i; local float aimAngle, unitAngle; @@ -170,12 +145,6 @@ simulated state Executing local Actor HitActor; local XComGameStateVisualizationMgr VisMgr; - if (!bInitUpdateAim) - { - InitUpdateAim(); - bInitUpdateAim = true; - } - VisMgr = `XCOMVISUALIZATIONMGR; //find endlocation of target arc @@ -188,9 +157,6 @@ simulated state Executing Facing.Yaw = unitAngle * RadToUnrRot; - //experimental: - - EndLocation = StartLocation + (TempDir * ConeLength); //Modify EndLocation based on any hits against the world @@ -201,7 +167,6 @@ simulated state Executing //`SHAPEMGR.DrawLine(StartLocation, SweepEndLocation_End, 6, MakeLinearColor(1.0f, 1.0f, 0.0f, 1.0f)); //`SHAPEMGR.DrawSphere(EndLocation, Vect(10, 10, 10), MakeLinearColor(0.0f, 1.0f, 0.0f, 1.0f)); - //`log("UnitPawn class name: " @UnitPawn.Class.Name); if (UnitPawn.AimEnabled) { if (!beginAimingAnim_F) @@ -265,8 +230,7 @@ simulated state Executing } //blend aim anim - //`log("StartLocation" @StartLocation @ "Endlocation " @ EndLocation @ " aimAngle : " @ aimAngle @ " unitAngle : " @ unitAngle @"Facing: " @Facing @ " currDuration : " @ currDuration_F @ " DT : " @ DT ); - //`LOG("ArcDelta:" @ ArcDelta * RadToDeg @ "unitAngle:" @ unitAngle* RadToDeg @ "aimAngle:" @ aimAngle* RadToDeg @ "Facing:" @ Facing.Yaw * UnrRotToDeg); + `log("Endlocation " @ EndLocation @ " aimAngle : " @ aimAngle @ " unitAngle : " @ unitAngle @ " currDuration : " @ currDuration_F @ " DT : " @ DT ); UnitPawn.SetRotation(PawnStartRotation + Facing); UnitPawn.TargetLoc = EndLocation; @@ -447,11 +411,7 @@ Begin: //// Sleep long enough for the fog to be revealed //Sleep(1.0f * GetDelayModifier()); //} - //while(Unit.IdleStateMachine.IsEvaluatingStance()) -// { -// Sleep(0.0f); -// } - Unit.IdleStateMachine.GoDormant(); + Unit.CurrentFireAction = self; UnitPawn.EnableRMA(true, true); UnitPawn.EnableRMAInteractPhysics(true); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_IRI_PsiPinion.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_IRI_PsiPinion.uc index a2e1ae656..64e49334c 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_IRI_PsiPinion.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Action_IRI_PsiPinion.uc @@ -103,7 +103,7 @@ Begin: for (LW_TimeDelayIndex = 0; LW_TimeDelayIndex < AbilityContext.InputContext.MultiTargets.Length; LW_TimeDelayIndex++) { - Sleep(0.1f); + Sleep(0.2f); AddProjectiles(LW_TimeDelayIndex); } diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Character_ChosenCharacters.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Character_ChosenCharacters.uc deleted file mode 100644 index 84e11c5f2..000000000 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Character_ChosenCharacters.uc +++ /dev/null @@ -1,66 +0,0 @@ -class X2Character_ChosenCharacters extends X2Character_DefaultCharacters; - - -static function array CreateTemplates() -{ - local array Templates; - Templates.AddItem(CreateTemplate_ChosenAssassinM5()); - Templates.AddItem(CreateTemplate_ChosenSniperM5()); - Templates.AddItem(CreateTemplate_ChosenWarlockM5()); - - return Templates; -} - - - -static function X2CharacterTemplate CreateTemplate_ChosenAssassinM5() -{ - local X2CharacterTemplate CharTemplate; - - CharTemplate = CreateChosenAssassinTemplate('ChosenAssassinM5'); - CharTemplate.DefaultLoadout = 'ChosenAssassinM5_Loadout'; - CharTemplate.RevealMatineePrefix = "CIN_ChosenAssassinM4"; - CharTemplate.strPawnArchetypes.AddItem("GameUnit_ChosenAssassin.ARC_GameUnit_ChosenAssassin_M4"); -//BEGIN AUTOGENERATED CODE: Template Overrides 'ChosenAssassinM4' - CharTemplate.bCanUse_eTraversal_ClimbLadder = false; - CharTemplate.bCanUse_eTraversal_JumpUp = true; - CharTemplate.bDisableRevealForceVisible = true; -//END AUTOGENERATED CODE: Template Overrides 'ChosenAssassinM4' - - return CharTemplate; -} - -static function X2CharacterTemplate CreateTemplate_ChosenWarlockM5() -{ - local X2CharacterTemplate CharTemplate; - - CharTemplate = CreateChosenWarlockTemplate('ChosenWarlockM5'); - CharTemplate.DefaultLoadout = 'ChosenWarlockM5_Loadout'; -//BEGIN AUTOGENERATED CODE: Template Overrides 'ChosenWarlockM4' - CharTemplate.strPawnArchetypes.AddItem("GameUnit_ChosenWarlock.ARC_GameUnit_ChosenWarlockM4"); - CharTemplate.bCanUse_eTraversal_ClimbLadder = false; - CharTemplate.bCanUse_eTraversal_JumpUp = true; - CharTemplate.bDisableRevealForceVisible = true; -//END AUTOGENERATED CODE: Template Overrides 'ChosenWarlockM4' - - CharTemplate.Abilities.AddItem('WarlockLevelM4'); - CharTemplate.Abilities.AddItem('WarlockFocusM4'); - - return CharTemplate; -} - - static function X2CharacterTemplate CreateTemplate_ChosenSniperM5() -{ - local X2CharacterTemplate CharTemplate; - - CharTemplate = CreateChosenSniperTemplate('ChosenSniperM5'); - CharTemplate.DefaultLoadout = 'ChosenSniperM5_Loadout'; -//BEGIN AUTOGENERATED CODE: Template Overrides 'ChosenSniperM4' - CharTemplate.strPawnArchetypes.AddItem("GameUnit_ChosenHunter.ARC_GameUnit_ChosenHunter_M4"); - CharTemplate.bCanUse_eTraversal_ClimbLadder = false; - CharTemplate.bCanUse_eTraversal_JumpUp = true; - CharTemplate.bDisableRevealForceVisible = true; -//END AUTOGENERATED CODE: Template Overrides 'ChosenSniperM4' - - return CharTemplate; -} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2DownloadableContentInfo_LongWarOfTheChosen.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2DownloadableContentInfo_LongWarOfTheChosen.uc index 66ccb3ce7..98f15330a 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2DownloadableContentInfo_LongWarOfTheChosen.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2DownloadableContentInfo_LongWarOfTheChosen.uc @@ -40,11 +40,6 @@ var config array HUNTER_STRENGTHS_T1; var config array HUNTER_STRENGTHS_T2; var config array HUNTER_STRENGTHS_T3; -var config int ENCRYPTION_SERVER_CHANCE; - - - - // An array of mission types where we should just let vanilla do its // thing with regard to the Chosen rather than try to override its // behaviour. @@ -144,13 +139,6 @@ static event InstallNewCampaign(XComGameState StartState) local XComGameState_WorldRegion StartingRegionState; local XComGameState_ResistanceFaction StartingFactionState; - //short circuit if in shell: - if(class'WorldInfo'.static.GetWorldInfo().GRI.GameClass.name == 'XComShell') - { - `LWTrace("InstallNewCampaign called in Shell, aborting."); - return; - } - // WOTC TODO: Note that this method is called twice if you start a new campaign. // Make sure that's not causing issues. `Log("LWOTC: Installing a new campaign"); @@ -174,10 +162,6 @@ static event InstallNewCampaign(XComGameState StartState) LimitStartingSquadSize(StartState); // possibly limit the starting squad size to something smaller than the maximum DisableUnwantedObjectives(StartState); - `LWOVERHAULOPTIONS.StartingChosen = StartingRegionState.GetControllingChosen().GetMyTemplateName(); - - `LWOVERHAULOptions.InitChosenKnowledge(); - class'XComGameState_LWSquadManager'.static.CreateFirstMissionSquad(StartState); // Clear starting resistance modes because we don't actually start @@ -208,30 +192,9 @@ static event OnPostTemplatesCreated() UpdateChosenActivities(); UpdateChosenSabotages(); UpdateSitreps(); - ModifyYellAbility(); } -// Remove the red alert affect from the yell ability since it cause AI units to go into red alert -// Credit to RedDobe for this function. -static function ModifyYellAbility() -{ - local X2AbilityTemplateManager AbilityMgr; - local array arrTemplate; - local int i; - - // Access Ability Template Manager - AbilityMgr = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager(); - - // Access Template for all difficulties - AbilityMgr.FindAbilityTemplateAllDifficulties('Yell', arrTemplate); - for (i = 0; i < arrTemplate.Length; i++) - { - arrTemplate[i].AbilityMultiTargetEffects.length = 0; - `Log("Removing Yell Red Alert effects"); - } -} - /// /// This method is run when the player loads a saved game directly into Strategy while this DLC is installed /// @@ -240,113 +203,17 @@ static event OnLoadedSavedGameToStrategy() local XComGameState NewGameState; local XComGameStateHistory History; local XComGameState_Objective ObjectiveState; - local XComGameState_LWOutpostManager OutpostManager; - local XComGameState_WorldRegion RegionState; - local XComGameState_LWOutpost OutpostState; - local XComGameState_LWToolboxOptions ToolboxOptions; - local XComGameState_LWOverhaulOptions OverhaulOptions; - local XComGameState_WorldRegion_LWStrategyAI RegionalAI; - local XComGameState_HeadquartersAlien AlienHQ; - local array AllChosen; - local XComGameState_AdventChosen ChosenState; - local int i; - History = `XCOMHISTORY; - - // TODO: Remove these post 1.0 - START - - // LWOTC beta 2: Remove the 'OnMonthlyReportAlert' listener as it's no - // longer needed (Not Created Equally is handled by the 'UnitRandomizedStats' - // event now). - ToolboxOptions = class'XComGameState_LWToolboxOptions'.static.GetToolboxOptions(); - `XEVENTMGR.UnRegisterFromEvent(ToolboxOptions, 'OnMonthlyReportAlert'); - - // Make sure pistol abilities apply to the new pistol slot - LWMigratePistolAbilities(); - - // If there are rebels that have already ranked up, make sure they have some abilities - OutpostManager = `LWOUTPOSTMGR; NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Patching existing campaign data"); - foreach History.IterateByClassType(class'XComGameState_WorldRegion', RegionState) - { - if (RegionState.HaveMadeContact()) - { - OutpostState = OutpostManager.GetOutpostForRegion(RegionState); - OutpostState.UpdateRebelAbilities(NewGameState); - } - } - + if (`LWOVERHAULOPTIONS == none) class'XComGameState_LWOverhaulOptions'.static.CreateModSettingsState_ExistingCampaign(class'XComGameState_LWOverhaulOptions'); - `LWTrace("Chosen Knowledge array length:" @ `LWOVERHAULOPTIONS.GetChosenKnowledgeGains_Randomized().length); - OverhaulOptions = `LWOVERHAULOPTIONS; - if(OverhaulOptions.GetChosenKnowledgeGains_Randomized().length == 0) - { - OverhaulOptions = XComGameState_LWOverhaulOptions(NewGameState.ModifyStateObject(class'XComGameState_LWOverhaulOptions', OverhaulOptions.ObjectID)); - OverhaulOptions.StartingChosen = XComGameState_WorldRegion(History.GetGameStateForObjectID(`XCOMHQ.StartingRegion.ObjectID)).GetControllingChosen().GetMyTemplateName(); - OverhaulOptions.InitChosenKnowledge(); - } - - - - // Patch chosen if enabled: - if (!`SecondWaveEnabled('DisableChosen')) - { - - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AllChosen = AlienHQ.GetAllChosen(, true); - - - foreach History.IterateByClassType(class'XComGameState_WorldRegion', RegionState) - { - // check we're above the minimum FL to activate chosen - RegionalAI = class'XComGameState_WorldRegion_LWStrategyAI'.static.GetRegionalAI(RegionState, NewGameState, true); - if(RegionalAI.LocalForceLevel >= class'X2StrategyElement_DefaultAlienActivities'.default.CHOSEN_ACTIVATE_AT_FL) - { - // loop over each chosen - foreach AllChosen (ChosenState) - { - // Only activate chosen that aren't already active - if (!ChosenState.bMetXCom) - { - - if(!ALienHQ.bChosenActive) //mark chosen as active on HQ if they weren't active yet. - { - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AlienHQ = XComGameState_HeadquartersAlien(NewGameState.ModifyStateObject(class'XComGameState_HeadquartersAlien', AlienHQ.ObjectID)); - AlienHQ.OnChosenActivation(NewGameState); - } - - ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); - ChosenState.Strengths.length = 0; - ChosenState.NumEncounters++; - - // Activate this chosen if they aren't active yet - ChosenState.bMetXCom = true; - - for (i = ChosenState.Weaknesses.length - 1; i >= 0; i--) - { - if (ChosenState.Weaknesses[i] != 'ChosenSkirmisherAdversary' && - ChosenState.Weaknesses[i] != 'ChosenTemplarAdversary' && - ChosenState.Weaknesses[i] != 'ChosenReaperAdversary') - { - ChosenState.Weaknesses.Remove(i,1); - } - } - - } - //patch the chosen level if needed - class'X2StrategyElement_DefaultAlienActivities'.static.TryIncreasingChosenLevelWithGameState(RegionalAI.LocalForceLevel, NewGameState, ChosenState); - } - // only do the outer loop once since only one region is needed - break; - } - } - } - - `XCOMGAME.GameRuleset.SubmitGameState(NewGameState); + if (NewGameState.GetNumGameStateObjects() > 0) + History.AddGameStateToHistory(NewGameState); + else + History.CleanupPendingGameState(NewGameState); //make sure that critical narrative moments are active foreach History.IterateByClassType(class'XComGameState_Objective', ObjectiveState) @@ -938,15 +805,6 @@ static function PostEncounterCreation(out name EncounterName, out PodSpawnInfo S swap = false; - // Tedster - none check leader Character template - if(LeaderCharacterTemplate == none) - { - `LWTrace("Nonexistant Pod Leader found."); - swap = true; - SpawnInfo.SelectedCharacterTemplateNames[0] = SelectNewPodLeader(SpawnInfo, ForceLevel, LeaderSpawnList); - `LWTRACE ("Swapping Nonexistant leader for" @ SpawnInfo.SelectedCharacterTemplateNames[0] @ "and rerolling followers"); - } - // override native insisting every mission have a codex while certain tactical options are active XCOMHQ = XComGameState_HeadquartersXCom(`XCOMHistory.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom', true)); @@ -1038,25 +896,17 @@ static function PostEncounterCreation(out name EncounterName, out PodSpawnInfo S if (!swap) { - for (k = 1; k < SpawnInfo.SelectedCharacterTemplateNames.Length; k++) + for (k = 0; k < SpawnInfo.SelectedCharacterTemplateNames.Length; k++) { FollowerCharacterTemplate = TemplateManager.FindCharacterTemplate(SpawnInfo.SelectedCharacterTemplateNames[k]); - // Tedster - add none check for follower templates - if(FollowerCharacterTemplate == none) - { - `LWTrace("Detected nonexistant follower" @ SpawnInfo.SelectedCharacterTemplateNames[k]); - swap = true; - } - // Tedster - fix below check to check spawn entry and not character template MCPG setting. - if (CountMembers(SpawnInfo.SelectedCharacterTemplateNames[k], SpawnInfo.SelectedCharacterTemplateNames) > GetCharacterSpawnEntry(FollowerSpawnList, FollowerCharacterTemplate, ForceLevel).MaxCharactersPerGroup) + if (CountMembers(SpawnInfo.SelectedCharacterTemplateNames[k], SpawnInfo.SelectedCharacterTemplateNames) > FollowerCharacterTemplate.default.MaxCharactersPerGroup) { - `LWTrace ("Too many" @SpawnInfo.SelectedCharacterTemplateNames[k]); swap = true; } } if (swap) { - `LWTRACE("Mixing up pod that violates MCPG setting or contains nonexistant units."); + `LWTRACE("Mixing up pod that violates MCPG setting"); } } @@ -1091,26 +941,17 @@ static function PostEncounterCreation(out name EncounterName, out PodSpawnInfo S // let's look at foreach SpawnInfo.SelectedCharacterTemplateNames(CharacterTemplateName, idx) { - CurrentCharacterTemplate = TemplateManager.FindCharacterTemplate(SpawnInfo.SelectedCharacterTemplateNames[idx]); - `LWTrace("Looking at" @CurrentCharacterTemplate.DataName); - //Tedster - add none check here as well: - if(CurrentCharacterTemplate == none) - { - `LWTrace("Rerolling nonexistant Character Template."); - SpawnInfo.SelectedCharacterTemplateNames[idx] = SelectRandomPodFollower(SpawnInfo, LeaderCharacterTemplate.SupportedFollowers, ForceLevel, FollowerSpawnList); - } - - if (idx <= 1) // Tedster - fix off by one error 2 -> 1 + if (idx <= 2) continue; if (SpawnInfo.SelectedCharacterTemplateNames[idx] != FirstFollowerName) continue; + CurrentCharacterTemplate = TemplateManager.FindCharacterTemplate(SpawnInfo.SelectedCharacterTemplateNames[idx]); if (CurrentCharacterTemplate.bIsTurret) continue; SpawnInfo.SelectedCharacterTemplateNames[idx] = SelectRandomPodFollower(SpawnInfo, LeaderCharacterTemplate.SupportedFollowers, ForceLevel, FollowerSpawnList); - `LWTrace("Changed to" @SpawnInfo.SelectedCharacterTemplateNames[idx] ); } //`LWTRACE ("Try" @ string (tries) @ CountMembers (FirstFollowerName, SpawnInfo.SelectedCharacterTemplateNames) @ string (PodSize)); // Let's look over our outcome and see if it's any better @@ -1160,25 +1001,22 @@ static function GetSpawnDistributionList( { local SpawnDistributionList CurrentList; local SpawnDistributionListEntry CurrentListEntry; - local XComTacticalMissionManager MissionManager; local name SpawnListID; local int idx; - MissionManager = `TACTICALMISSIONMGR; - - idx = MissionManager.ConfigurableEncounters.Find('EncounterID', EncounterName); + idx = class'XComTacticalMissionManager'.default.ConfigurableEncounters.Find('EncounterID', EncounterName); if (IsLeaderList) { - if (MissionManager.ConfigurableEncounters[idx].EncounterLeaderSpawnList != '') + if (class'XComTacticalMissionManager'.default.ConfigurableEncounters[idx].EncounterLeaderSpawnList != '') { - SpawnListID = MissionManager.ConfigurableEncounters[idx].EncounterLeaderSpawnList; + SpawnListID = class'XComTacticalMissionManager'.default.ConfigurableEncounters[idx].EncounterLeaderSpawnList; } } else { - if (MissionManager.ConfigurableEncounters[idx].EncounterFollowerSpawnList != '') + if (class'XComTacticalMissionManager'.default.ConfigurableEncounters[idx].EncounterFollowerSpawnList != '') { - SpawnListID = MissionManager.ConfigurableEncounters[idx].EncounterFollowerSpawnList; + SpawnListID = class'XComTacticalMissionManager'.default.ConfigurableEncounters[idx].EncounterFollowerSpawnList; } } @@ -1187,14 +1025,14 @@ static function GetSpawnDistributionList( // Fall back to using the schedule's default spawn distribution list if (SpawnListID == '') { - idx = MissionManager.MissionSchedules.Find('ScheduleID', MissionState.SelectedMissionData.SelectedMissionScheduleName); + idx = class'XComTacticalMissionManager'.default.MissionSchedules.Find('ScheduleID', MissionState.SelectedMissionData.SelectedMissionScheduleName); if (IsLeaderList) { - SpawnListID = MissionManager.default.MissionSchedules[idx].DefaultEncounterLeaderSpawnList; + SpawnListID = class'XComTacticalMissionManager'.default.MissionSchedules[idx].DefaultEncounterLeaderSpawnList; } else { - SpawnListID = MissionManager.MissionSchedules[idx].DefaultEncounterFollowerSpawnList; + SpawnListID = class'XComTacticalMissionManager'.default.MissionSchedules[idx].DefaultEncounterFollowerSpawnList; } } @@ -1202,7 +1040,7 @@ static function GetSpawnDistributionList( // Build a merged list of all spawn distribution list entries that satisfy the selected // list ID and force level. - foreach MissionManager.SpawnDistributionLists(CurrentList) + foreach class'XComTacticalMissionManager'.default.SpawnDistributionLists(CurrentList) { if (CurrentList.ListID == SpawnListID) { @@ -1415,32 +1253,8 @@ static function name SelectRandomPodFollower(PodSpawnInfo SpawnInfo, array return PossibleChars[PossibleChars.length - 1]; } - static function PostReinforcementCreation(out name EncounterName, out PodSpawnInfo Encounter, int ForceLevel, int AlertLevel, optional XComGameState_BaseObject SourceObject, optional XComGameState_BaseObject ReinforcementState) { - // M5 chosen handling: - `LWTrace("PostReinforcementCreation called. Current Force Level:" @ ForceLevel); - - if (class'X2StrategyElement_DefaultAlienActivities'.default.CHOSEN_LEVEL_FL_THRESHOLDS.length < 4) - return; - - if (ForceLevel >= class'X2StrategyElement_DefaultAlienActivities'.default.CHOSEN_LEVEL_FL_THRESHOLDS[3]) - { - `LWTrace("Swapping M4 Chosen" @Encounter.SelectedCharacterTemplateNames[0] @"..."); //PREVIOUS CHOSEN FOR LOGGING - - switch (Encounter.SelectedCharacterTemplateNames[0]) - { - case 'ChosenWarlockM4' : Encounter.SelectedCharacterTemplateNames[0] = 'ChosenWarlockM5'; break; - case 'ChosenSniperM4' : Encounter.SelectedCharacterTemplateNames[0] = 'ChosenSniperM5'; break; - case 'ChosenAssassinM4' : Encounter.SelectedCharacterTemplateNames[0] = 'ChosenAssassinM5'; break; - default: - //selected template isn't one we care about - break; - } - - `LWTrace("... for M5 Chosen" @Encounter.SelectedCharacterTemplateNames[0]); //POST SWAP FOR LOGGING - - } } // Increase the size of Lost Brutes (unless WWL is installed) @@ -1546,7 +1360,7 @@ static function FinalizeUnitAbilitiesForInit(XComGameState_Unit UnitState, out a SetupData[i].SourceWeaponRef = UnitState.GetSecondaryWeapon().GetReference(); } } - /* + // Prevent units summoned by the Chosen from dropping loot and corpses if (StartState.GetContext().IsA(class'XComGameStateContext_Ability'.Name)) { @@ -1581,7 +1395,6 @@ static function FinalizeUnitAbilitiesForInit(XComGameState_Unit UnitState, out a } } } - */ } static function bool ShouldApplyInfiltrationModifierToCharacter(X2CharacterTemplate CharTemplate) @@ -1747,7 +1560,6 @@ static function AddObjectivesToParcels() { `LWTrace("Adding 'LargePlot' objective tag to " $ PlotDef.MapName); ParcelMgr.arrPlots[i].ObjectiveTags.AddItem("LargePlot"); - } else if (InStr(PlotDef.MapName, "_MdObj_") != INDEX_NONE && PlotDef.ObjectiveTags.Find("MediumPlot") == INDEX_NONE) { @@ -2412,19 +2224,19 @@ static function AddCritUpgrade(X2ItemTemplateManager ItemTemplateManager, Name T } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticB", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_OpticB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticB", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_OpticB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); //SMG - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticB", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_OpticB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticB", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_OpticB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); // Shotgun - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Shotgun_Optic', "BeamShotgun.Meshes.SM_BeamShotgun_OpticB", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_OpticB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Shotgun_Optic', "BeamShotgun.Meshes.SM_BeamShotgun_OpticB", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_OpticB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); // Sniper Rifle - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Sniper_Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticB", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_OpticB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Sniper_Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticB", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_OpticB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); // Cannon - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Cannon_Optic', "LWCannon_CG.Meshes.LW_CoilCannon_OpticB", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_OpticB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Cannon_Optic', "LWCannon_CG.Meshes.LW_CoilCannon_OpticB", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_OpticB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); } @@ -2440,19 +2252,19 @@ static function AddAimBonusUpgrade(X2ItemTemplateManager ItemTemplateManager, Na } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_OpticC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_OpticC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); //SMG - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_OpticC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_OpticC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); // Shotgun - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Shotgun_Optic', "BeamShotgun.Meshes.SM_BeamShotgun_OpticC", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_OpticC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Shotgun_Optic', "BeamShotgun.Meshes.SM_BeamShotgun_OpticC", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_OpticC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); // Sniper Rifle - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Sniper_Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticC", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_OpticC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Sniper_Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticC", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_OpticC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); // Cannon - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Cannon_Optic', "LWCannon_CG.Meshes.LW_CoilCannon_OpticC", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_OpticC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_Cannon_Optic', "LWCannon_CG.Meshes.LW_CoilCannon_OpticC", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_OpticC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); } @@ -2468,21 +2280,21 @@ static function AddClipSizeBonusUpgrade(X2ItemTemplateManager ItemTemplateManage } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagB", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagB", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); //SMG - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagB", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagB", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); // Shotgun - //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagB", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilShotgun_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagB", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilShotgun_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); + //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagB", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilShotgun_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagB", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilShotgun_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); // Sniper Rifle - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagB", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagB", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); // Cannon - //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagB", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagB", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); + //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagB", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagB", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); } @@ -2498,19 +2310,19 @@ static function AddFreeFireBonusUpgrade(X2ItemTemplateManager ItemTemplateManage } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); //SMG - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); // Shotgun - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_Shotgun_Stock', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_Shotgun_Stock', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); // Sniper - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); // Cannon - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_ReargripB", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_ReargripB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_ReargripB", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_ReargripB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); } @@ -2526,26 +2338,26 @@ static function AddReloadUpgrade(X2ItemTemplateManager ItemTemplateManager, Name } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagC", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagD", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_MagD", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagC", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagD", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_MagD", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); //SMG - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagC", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagD", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagD", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagC", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagD", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagD", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); // Shotgun - //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagC", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilShotgun_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagC", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilShotgun_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagD", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_MagD", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilShotgun_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); + //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagC", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilShotgun_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagC", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilShotgun_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Shotgun_Mag', "LWShotgun_CG.Meshes.LW_CoilShotgun_MagD", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_MagD", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilShotgun_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); // Sniper - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagC", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagD", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_MagD", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagC", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Sniper_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagD", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_MagD", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); // Cannon - //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagC", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagC", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagD", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_MagD", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); + //Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagC", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagC", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_Cannon_Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagD", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_MagD", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); } @@ -2561,19 +2373,19 @@ static function AddMissDamageUpgrade(X2ItemTemplateManager ItemTemplateManager, } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_StockB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); + Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_StockB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); //SMG - Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_StockB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); + Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_StockB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); // Shotgun - Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_Shotgun_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_StockB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); + Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_Shotgun_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_StockB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); // Sniper Rifle - Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_Sniper_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockC", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_StockC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_StockC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); + Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_Sniper_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockC", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_StockC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_StockC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); // Cannon - Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_Cannon_Stock', "LWCannon_CG.Meshes.LW_CoilCannon_StockB", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_StockB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); + Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_Cannon_Stock', "LWCannon_CG.Meshes.LW_CoilCannon_StockB", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_StockB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); Template.AddUpgradeAttachment('StockSupport', '', "LWCannon_CG.Meshes.LW_CoilCannon_StockSupportB", "", 'Cannon_CG'); } @@ -2590,19 +2402,19 @@ static function AddFreeKillUpgrade(X2ItemTemplateManager ItemTemplateManager, Na } //Parameters are : AttachSocket, UIArmoryCameraPointTag, MeshName, ProjectileName, MatchWeaponTemplate, AttachToPawn, IconName, InventoryIconName, InventoryCategoryIcon, ValidateAttachmentFn // Assault Rifle - Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_Silencer", "", 'AssaultRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_Suppressor", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); + Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_Silencer", "", 'AssaultRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_Suppressor", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); //SMG - Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_Silencer", "", 'SMG_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_Suppressor", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); + Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_Silencer", "", 'SMG_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_Suppressor", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); // Shotgun - Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_Shotgun_Suppressor', "LWShotgun_CG.Meshes.LW_CoilShotgun_Suppressor", "", 'Shotgun_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_Suppressor", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilShotgun_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); + Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_Shotgun_Suppressor', "LWShotgun_CG.Meshes.LW_CoilShotgun_Suppressor", "", 'Shotgun_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_Suppressor", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilShotgun_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); // Sniper Rifle - Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_Sniper_Suppressor', "LWSniperRifle_CG.Meshes.LW_CoilSniper_Suppressor", "", 'SniperRifle_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_Suppressor", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilSniperRifle_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); + Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_Sniper_Suppressor', "LWSniperRifle_CG.Meshes.LW_CoilSniper_Suppressor", "", 'SniperRifle_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_Suppressor", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); // Cannon - Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_Cannon_Suppressor', "LWCannon_CG.Meshes.LW_CoilCannon_Suppressor", "", 'Cannon_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_Suppressor", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilCannon_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); + Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_Cannon_Suppressor', "LWCannon_CG.Meshes.LW_CoilCannon_Suppressor", "", 'Cannon_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_Suppressor", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilCannon_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); } @@ -2737,7 +2549,6 @@ static function UpdateChosenSabotages() UpdateWeaponLockers(); UpdateLabStorage(); UpdateSecureStorage(); - UpdateEncryptionServer(); } @@ -2763,31 +2574,6 @@ static function UpdateSecureStorage() Template = X2SabotageTemplate(class'X2StrategyElementTemplateManager'.static.GetStrategyElementTemplateManager().FindStrategyElementTemplate('Sabotage_SecureStorage')); Template.CanActivateFn = CanActivateSecureStorage; } - -static function UpdateEncryptionServer() -{ - local X2SabotageTemplate Template; - - Template = X2SabotageTemplate(class'X2StrategyElementTemplateManager'.static.GetStrategyElementTemplateManager().FindStrategyElementTemplate('Sabotage_EncryptionServer')); - Template.CanActivateFn = CanActivateEncryptionServer; - -} - -function bool CanActivateEncryptionServer() -{ - local XComGameStateHistory History; - local XComGameState_BlackMarket MarketState; - - History = `XCOMHISTORY; - MarketState = XComGameState_BlackMarket(History.GetSingleGameStateObjectForClass(class'XComGameState_BlackMarket')); - - if(`SYNC_RAND_STATIC(100) < default.ENCRYPTION_SERVER_CHANCE) - { - return (MarketState.bIsOpen && MarketState.ForSaleItems.Length > 0); - } - else return false; -} - function bool CanActivateWeaponLockers() { local XComGameStateHistory History; @@ -2799,7 +2585,7 @@ function bool CanActivateWeaponLockers() MinMods = `ScaleStrategyArrayInt(class'X2StrategyElement_DefaultSabotages'.default.MinWeaponLockersMods); - NumUpgrades = 0; + NumUpgrades = 10; History = `XCOMHISTORY; XComHQ = XComGameState_HeadquartersXCom(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom')); @@ -2887,15 +2673,18 @@ static function GainNewStrengths(XComGameState NewGameState, int NumStrengthsPer { local X2CharacterTemplate ChosenTemplate; local array ChosenStrengths , ValidChosenStrengths; - local array BackupChosenStrengths, FurtherBackupChosenStrengths; local ChosenStrengthWeighted WStrength; + local X2AbilityTemplate TraitTemplate; + local X2AbilityTemplateManager AbilityMgr; local float finder, selection, TotalWeight; + local name Traitname, ExcludeTraitName; local int i; local XComGameState_HeadquartersAlien AlienHQ; local XComGameStateHistory History; History = `XCOMHISTORY; + AbilityMgr = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager(); ChosenTemplate = ChosenState.GetChosenTemplate(); AlienHQ = XComGameState_HeadquartersAlien(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); @@ -2905,13 +2694,10 @@ static function GainNewStrengths(XComGameState NewGameState, int NumStrengthsPer if(AlienHQ.GetForceLevel() > 14) { ChosenStrengths = default.HUNTER_STRENGTHS_T3; - BackupChosenStrengths = default.HUNTER_STRENGTHS_T2; - FurtherBackupChosenStrengths = default.HUNTER_STRENGTHS_T1; } else if(AlienHQ.GetForceLevel() > 9) { ChosenStrengths = default.HUNTER_STRENGTHS_T2; - BackupChosenStrengths = default.HUNTER_STRENGTHS_T1; } else { @@ -2923,13 +2709,10 @@ static function GainNewStrengths(XComGameState NewGameState, int NumStrengthsPer if(AlienHQ.GetForceLevel() > 14) { ChosenStrengths = default.WARLOCK_STRENGTHS_T3; - BackupChosenStrengths = default.WARLOCK_STRENGTHS_T2; - FurtherBackupChosenStrengths = default.WARLOCK_STRENGTHS_T1; } else if(AlienHQ.GetForceLevel() > 9) { ChosenStrengths = default.WARLOCK_STRENGTHS_T2; - BackupChosenStrengths = default.WARLOCK_STRENGTHS_T1; } else { @@ -2941,13 +2724,10 @@ static function GainNewStrengths(XComGameState NewGameState, int NumStrengthsPer if(AlienHQ.GetForceLevel() > 14) { ChosenStrengths = default.ASSASSIN_STRENGTHS_T3; - BackupChosenStrengths = default.ASSASSIN_STRENGTHS_T2; - FurtherBackupChosenStrengths = default.ASSASSIN_STRENGTHS_T1; } else if(AlienHQ.GetForceLevel() > 9) { ChosenStrengths = default.ASSASSIN_STRENGTHS_T2; - BackupChosenStrengths = default.ASSASSIN_STRENGTHS_T1; } else { @@ -2957,46 +2737,6 @@ static function GainNewStrengths(XComGameState NewGameState, int NumStrengthsPer ValidChosenStrengths = ChosenStrengths; //Remove Strengths Are already added, and those that are excluded by already added strengths - ValidateStrengthList(ValidChosenStrengths, ChosenState); - if(ValidChosenStrengths.Length == 0) - { - ValidChosenStrengths = BackupChosenStrengths; - ValidateStrengthList(ValidChosenStrengths, ChosenState); - if(ValidChosenStrengths.Length == 0) - { - ValidChosenStrengths = FurtherBackupChosenStrengths; - ValidateStrengthList(ValidChosenStrengths, ChosenState); - } - } - - TotalWeight = 0.0f; - foreach ValidChosenStrengths(WStrength) - { - TotalWeight+=WStrength.Weight; - } - for(i=0; i selection) - { - break; - } - } - ChosenState.Strengths.AddItem(WStrength.Strength); - } -} - -static function ValidateStrengthList(out array ValidChosenStrengths, XComGameState_AdventChosen ChosenState) -{ - local name Traitname, ExcludeTraitName; - local X2AbilityTemplate TraitTemplate; - local X2AbilityTemplateManager AbilityMgr; - local int i; - AbilityMgr = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager(); foreach ChosenState.Strengths(Traitname) { @@ -3038,8 +2778,29 @@ static function ValidateStrengthList(out array ValidChos } } } + TotalWeight = 0.0f; + foreach ValidChosenStrengths(WStrength) + { + TotalWeight+=WStrength.Weight; + } + for(i=0; i selection) + { + break; + } + } + ChosenState.Strengths.AddItem(WStrength.Strength); + } } + + static function UpdateRetribution() { local X2ChosenActionTemplate Template; @@ -3388,9 +3149,6 @@ static function bool AbilityTagExpandHandler(string InString, out string OutStri case 'MIND_SCORCH_BURN_CHANCE': Outstring = string(class'X2LWAbilitiesModTemplate'.default.MIND_SCORCH_BURN_CHANCE); return true; - case 'SUSTAIN_WOUND_HP_REDUCTTION': - Outstring = string(class'X2LWAbilitiesModTemplate'.default.SUSTAIN_WOUND_HP_REDUCTTION); - return true; case 'NULL_WARD_BASE_SHIELD': Outstring = string(class'X2Ability_LW_PsiOperativeAbilitySet'.default.NULL_WARD_BASE_SHIELD); return true; @@ -3457,9 +3215,6 @@ static function bool AbilityTagExpandHandler(string InString, out string OutStri case 'COMBATREADINESS_AIM': Outstring = string(class'X2Ability_XMBPerkAbilitySet'.default.COMBATREADINESS_AIM); return true; - case 'COMBAT_READINESS_EXPLOSIVE_DR': - Outstring = string(int(class'X2Ability_XMBPerkAbilitySet'.default.COMBAT_READINESS_EXPLOSIVE_DR * 100)); - return true; case 'BLOODTHIRST_T1_DMG': Outstring = string(class'X2Effect_BloodThirst'.default.BLOODTHIRST_T1_DMG); return true; @@ -3472,15 +3227,9 @@ static function bool AbilityTagExpandHandler(string InString, out string OutStri case 'BLOODTHIRST_T4_DMG': Outstring = string(class'X2Effect_BloodThirst'.default.BLOODTHIRST_T4_DMG); return true; - case 'BLOODTHIRST_T5_DMG': - Outstring = string(class'X2Effect_BloodThirst'.default.BLOODTHIRST_T5_DMG); - return true; case 'DISRUPTOR_RIFLE_PSI_CRIT': Outstring = string(class'X2Ability_XPackAbilitySet'.default.DISRUPTOR_RIFLE_PSI_CRIT); return true; - case 'FATALITY_THRESHOLD': - Outstring = string(int(class'X2Ability_XMBPerkAbilitySet'.default.FATALITY_THRESHOLD * 100)); - return true; default: return false; } @@ -3914,9 +3663,6 @@ exec function LWSetForceLevel(int NewLevel, optional name RegionName) local XComGameState NewGameState; local XComGameState_WorldRegion RegionState; local XComGameState_WorldRegion_LWStrategyAI RegionalAIState, UpdatedRegionalAI; - local XComGameState_HeadquartersAlien AlienHQ; - local array AllChosen; - local XComGameState_AdventChosen ChosenState; History = `XCOMHISTORY; @@ -3933,17 +3679,6 @@ exec function LWSetForceLevel(int NewLevel, optional name RegionName) UpdatedRegionalAI.LocalForceLevel = NewLevel; } } - - //patch the chosen level if needed - - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AllChosen = AlienHQ.GetAllChosen(, true); - - foreach AllChosen(ChosenState) - { - class'X2StrategyElement_DefaultAlienActivities'.static.TryIncreasingChosenLevelWithGameState(RegionalAIState.LocalForceLevel, NewGameState, ChosenState); - } - if (NewGameState.GetNumGameStateObjects() > 0) `XCOMGAME.GameRuleset.SubmitGameState(NewGameState); else @@ -4332,28 +4067,6 @@ exec function LWPrintVersion() class'Helpers'.static.OutputMsg("Long War of the Chosen Version: " $ class'LWVersion'.static.GetVersionString()); } -exec function LWOTC_RevealAvatarProject() -{ - local XComGameStateHistory History; - local XComGameState NewGameState; - local XComGameState_HeadquartersAlien AlienHQ; - - History = `XCOMHISTORY; - AlienHQ = XComGameState_HeadquartersAlien(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - if(AlienHQ != none) - { - NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Console Command Activate Avatar Project"); - AlienHQ = XComGameState_HeadquartersAlien(NewGameState.ModifyStateObject(class'XComGameState_HeadquartersAlien', AlienHQ.ObjectID)); - NewGameState.AddStateObject(AlienHQ); - - // Complete the Avatar reveal project as soon as doom is added to the fortress so players know what they're up against. - `LWTrace("Triggering Avatar Project reveal..."); - class'XComGameState_Objective'.static.StartObjectiveByName(NewGameState, 'LW_T2_M1_N2_RevealAvatarProject'); - `XEVENTMGR.TriggerEvent('StartAvatarProjectReveal'); - - `XCOMGAME.GameRuleset.SubmitGameState(NewGameState); - } -} exec function LWAddFortressDoom(optional int DoomToAdd = 1) { local XComGameState NewGameState; @@ -4923,7 +4636,11 @@ static function UpdateSitreps() `LWTrace("Disabling Sitrep" @SitRepName @"From appearing normally on missions"); Sitrep.StrategyReqs.SpecialRequirementsFn = class'Helpers_LW'.static.AlwaysFail; } + + } + + } static function CacheInstalledMods() @@ -4936,13 +4653,6 @@ static function CacheInstalledMods() class'Helpers_LW'.default.bWorldWarLostActive = class'Helpers_LW'.static.IsModInstalled("WorldWarLost"); class'Helpers_LW'.default.XCOM2RPGOverhaulActive = class'Helpers_LW'.static.IsModInstalled("XCOM2RPGOverhaul"); - `LWTrace("cached bSmokeStopsFlanksActive: " @ class'Helpers_LW'.default.bSmokeStopsFlanksActive ); - `LWTrace("cached bImprovedSmokeDefenseActive: " @class'Helpers_LW'.default.bImprovedSmokeDefenseActive); - `LWTrace("cached bWOTCRevertOverwatchRulesActive: " @class'Helpers_LW'.default.bWOTCRevertOverwatchRulesActive); - `LWTrace("cached bWOTCCostBasedAbilityColorsActive: " @class'Helpers_LW'.default.bWOTCCostBasedAbilityColorsActive); - `LWTrace("cached bWorldWarLostActive: " @class'Helpers_LW'.default.bWorldWarLostActive); - `LWTrace("cached XCOM2RPGOverhaulActive: " @class'Helpers_LW'.default.XCOM2RPGOverhaulActive); - } exec function LWOTC_SetSelectedUnitActive() @@ -4959,7 +4669,7 @@ exec function LWOTC_SetSelectedUnitActive() Armory = UIArmory(`SCREENSTACK.GetFirstInstanceOf(class'UIArmory')); if (Armory == none) { - class'Helpers'.static.OutputMsg("Error: Not in Armory"); + class'Helpers'.static.OutputMsg("No Unit Selected"); return; } @@ -4967,18 +4677,18 @@ exec function LWOTC_SetSelectedUnitActive() UnitState = XComGameState_Unit(History.GetGameStateForObjectID(UnitRef.ObjectID)); if (UnitState == none) { - class'Helpers'.static.OutputMsg("Error: No Unit Selected"); + class'Helpers'.static.OutputMsg("No Unit Selected"); return; } - NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Force unit active"); + NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Levelup Soldier"); XComHQ = XComGameState_HeadquartersXCom(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom')); XComHQ = XComGameState_HeadquartersXCom(NewGameState.ModifyStateObject(class'XComGameState_HeadquartersXCom', XComHQ.ObjectID)); UnitState = XComGameState_Unit(NewGameState.ModifyStateObject(class'XComGameState_Unit', UnitState.ObjectID)); UnitState.SetStatus(eStatus_Active); - class'Helpers'.static.OutputMsg("Unit marked as active" @ `SHOWVAR(UnitState.GetFullName() )); + class'Helpers'.static.OutputMsg("Unit marked as active"); if( NewGameState.GetNumGameStateObjects() > 0 ) { @@ -5065,123 +4775,4 @@ exec function LWOTC_ForceAllUnitsActive() { History.CleanupPendingGameState(NewGameState); } -} - -exec function LWOTC_ShowChosenKnowledgeRandomValues() -{ - local XComGameState_LWOverhaulOptions LWOverhaulOptions; - - local array chosenKnowledge; - - LWOverhaulOptions = `LWOVERHAULOPTIONS; - - chosenKnowledge = LWOverhaulOptions.GetChosenKnowledgeGains_Randomized(); - class'Helpers'.static.OutputMsg(`SHOWVAR(LWOverhaulOptions.StartingChosen)); - class'Helpers'.static.OutputMsg(`SHOWVAR(class'X2EventListener_ChosenEndOfMonth'.default.STARTING_CHOSEN_KNOWLEDGE_GAIN)); - class'Helpers'.static.OutputMsg(`SHOWVAR(LWOverhaulOptions.ChosenNames[0])); - class'Helpers'.static.OutputMsg(`SHOWVAR(chosenKnowledge[0])); - class'Helpers'.static.OutputMsg(`SHOWVAR(LWOverhaulOptions.ChosenNames[1])); - class'Helpers'.static.OutputMsg(`SHOWVAR(chosenKnowledge[1])); -} - -exec function LWOTC_ShowChosenLevels() -{ - local XComGameState_HeadquartersAlien AlienHQ; - local array AllChosen; - local XComGameState_AdventChosen ChosenState; - - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AllChosen = AlienHQ.GetAllChosen(, true); - - foreach AllChosen(ChosenState) - { - class'Helpers'.static.OutputMsg(`SHOWVAR(ChosenState.GetMyTemplateName())); - class'Helpers'.static.OutputMsg("Chosen Level:" @`SHOWVAR(ChosenState.Level)); - } -} - -exec function LWOTC_ShowChosenStrengths() -{ - local XComGameState_HeadquartersAlien AlienHQ; - local array AllChosen; - local XComGameState_AdventChosen ChosenState; - local name ChosenStrength; - - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AllChosen = AlienHQ.GetAllChosen(, true); - - foreach AllChosen(ChosenState) - { - class'Helpers'.static.OutputMsg(`SHOWVAR(ChosenState.GetMyTemplateName())); - foreach ChosenState.Strengths (ChosenStrength) - { - class'Helpers'.static.OutputMsg("Chosen strengths:" @ ChosenStrength); - } - } -} - -exec function LWOTC_ShowChosenStrongholdMissions() -{ - local XComGameState_HeadquartersAlien AlienHQ; - local array AllChosen; - local XComGameState_AdventChosen ChosenState; - - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AllChosen = AlienHQ.GetAllChosen(, true); - - foreach AllChosen(ChosenState) - { - class'Helpers'.static.OutputMsg(`SHOWVAR(ChosenState.GetMyTemplateName())); - class'Helpers'.static.OutputMsg("Chosen Stronghold Mission ID:" @ ChosenState.StrongholdMission.ObjectID); - } -} - -exec function LWOTC_SpawnChosenStrongholdMission(name ChosenName) -{ - local XComGameStateHistory History; - local XComGameState NewGameState; - local XComGameState_AdventChosen ChosenState; - local XComGameState_MissionSite MissionState; - local XComGameState_WorldRegion RegionState; - local XComGameState_Reward RewardState; - local X2RewardTemplate RewardTemplate; - local X2StrategyElementTemplateManager StratMgr; - local X2MissionSourceTemplate MissionSource; - local array MissionRewards; - local bool bFound; - - History = `XCOMHISTORY; - bFound = false; - - foreach History.IterateByClassType(class'XComGameState_AdventChosen', ChosenState) - { - if(ChosenState.GetMyTemplateName() == ChosenName) - { - bFound = true; - break; - } - } - - if(!bFound) - { - return; - } - - NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("CHEAT: TriggerChosenAvengerAssault"); - StratMgr = class'X2StrategyElementTemplateManager'.static.GetStrategyElementTemplateManager(); - RegionState = ChosenState.GetHomeRegion(); - - MissionRewards.Length = 0; - RewardTemplate = X2RewardTemplate(StratMgr.FindStrategyElementTemplate('Reward_None')); - RewardState = RewardTemplate.CreateInstanceFromTemplate(NewGameState); - MissionRewards.AddItem(RewardState); - - MissionSource = X2MissionSourceTemplate(StratMgr.FindStrategyElementTemplate('MissionSource_ChosenStronghold')); - MissionState = XComGameState_MissionSite(NewGameState.CreateNewStateObject(class'XComGameState_MissionSite')); - MissionState.BuildMission(MissionSource, RegionState.GetRandom2DLocationInRegion(), RegionState.GetReference(), MissionRewards); - MissionState.ResistanceFaction = ChosenState.RivalFaction; - ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); - ChosenState.StrongholdMission = MissionState.GetReference(); - - `XCOMGAME.GameRuleset.SubmitGameState(NewGameState); -} +} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Effect_ApplyFireToWorld_Limited.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Effect_ApplyFireToWorld_Limited.uc index a8e4aa0da..0c3b08861 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Effect_ApplyFireToWorld_Limited.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Effect_ApplyFireToWorld_Limited.uc @@ -145,11 +145,6 @@ simulated function ApplyEffectToWorld(const out EffectAppliedData ApplyEffectPar local int i; //If this damage effect has an associated position, it does world damage - `LWTrace("ApplyFireToWorld effect target locations length:" @ ApplyEffectParameters.AbilityInputContext.TargetLocations.Length); - `LWTrace("ApplyFireToWorld effect Ability Input Context name:" @ ApplyEffectParameters.AbilityInputContext.AbilityTemplateName); - `LWTrace("ApplyFireToWorld effect primary target:" @ ApplyEffectParameters.AbilityInputContext.PrimaryTarget.ObjectID); - `LWTrace("ApplyFireToWorld effect input context multitargets length:" @ ApplyEffectParameters.AbilityInputContext.MultiTargets.Length); - if( ApplyEffectParameters.AbilityInputContext.TargetLocations.Length > 0 ) { History = `XCOMHISTORY; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_ChosenEndOfMonth.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_ChosenEndOfMonth.uc deleted file mode 100644 index 30e26b4a9..000000000 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_ChosenEndOfMonth.uc +++ /dev/null @@ -1,87 +0,0 @@ -// Author: Tedster -// function to update chosen knowledge at month end - -class X2EventListener_ChosenEndOfMonth extends X2EventListener config(LW_Overhaul); - -var config int STARTING_CHOSEN_KNOWLEDGE_GAIN; -var config array CHOSEN_KNOWLEDGE_GAINS; - - - -static function array CreateTemplates() -{ - local array Templates; - - // You can create any number of Event Listener templates within one X2EventListener class. - Templates.AddItem(CreateListenerTemplate_LW_ChosenEOMListener()); - - return Templates; -} - -static function CHEventListenerTemplate CreateListenerTemplate_LW_ChosenEOMListener() -{ - local CHEventListenerTemplate Template; - - `CREATE_X2TEMPLATE(class'CHEventListenerTemplate', Template, 'LW_ChosenEOMListener'); - - // Whether this Listener should be active during tactical missions. - Template.RegisterInTactical = false; - // Whether this Listener should be active on the strategic layer (while on Avenger) - Template.RegisterInStrategy = true; - - Template.AddCHEvent('PreEndOfMonth', LW_ChosenEOM_Listener, ELD_Immediate, 50); - - return Template; -} - -static function EventListenerReturn LW_ChosenEOM_Listener(Object EventData, Object EventSource, XComGameState NewGameState, Name Event, Object CallbackData) -{ - local XComGameState_HeadquartersAlien AlienHQ; - local array AllChosen; - local XComGameState_AdventChosen ChosenState; - local array RandomChosenKnowledgeGains; - - - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - - AllChosen = AlienHQ.GetAllChosen(NewGameState); - - - //grab the randomized values from the array set up in the LWOverhaulOptions - RandomChosenKnowledgeGains = `LWOVERHAULOPTIONS.GetChosenKnowledgeGains_Randomized(); - - foreach AllChosen(ChosenState) - { - ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); - - // short circuit if chosen aren't active yet. - if(ChosenState.bMetXCom != true) - continue; - - // short circuit if chosen is defeated. - if(ChosenState.bDefeated == true) - continue; - - //actually add the chosen knowledge to the chosen. - switch (ChosenState.GetMyTemplateName()) - { - case `LWOVERHAULOPTIONS.StartingChosen: - `LWTrace("Adding" @ default.STARTING_CHOSEN_KNOWLEDGE_GAIN @ "To Chosen" @ `SHOWVAR(ChosenState.GetMyTemplateName())); - ChosenState.ModifyKnowledgeScore(NewGameState, default.STARTING_CHOSEN_KNOWLEDGE_GAIN); - break; - case `LWOVERHAULOPTIONS.ChosenNames[0]: - `LWTrace("Adding" @ RandomChosenKnowledgeGains[0] @ "To Chosen" @ `SHOWVAR(ChosenState.GetMyTemplateName())); - ChosenState.ModifyKnowledgeScore(NewGameState, RandomChosenKnowledgeGains[0]); - break; - case `LWOVERHAULOPTIONS.ChosenNames[1]: - `LWTrace("Adding" @ RandomChosenKnowledgeGains[1] @ "To Chosen" @ `SHOWVAR(ChosenState.GetMyTemplateName())); - ChosenState.ModifyKnowledgeScore(NewGameState, RandomChosenKnowledgeGains[1]); - break; - } - - - } - - return ELR_NoInterrupt; -} - diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Headquarters.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Headquarters.uc index 43d6c7e22..d434ee2d5 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Headquarters.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Headquarters.uc @@ -630,7 +630,6 @@ static function EventListenerReturn CAOverrideRewardScalar( // We need to keep track of how many times units go on the Intense // Training covert action and how many covert actions have not // been ambushed (that have an ambush risk). -// Also handles respawning failed golden path covert actions static function EventListenerReturn CAProcessCompletion( Object EventData, Object EventSource, @@ -647,14 +646,9 @@ static function EventListenerReturn CAProcessCompletion( local CovertActionStaffSlot StaffSlot; local UnitValue UnitValue; - local XComGameState_ResistanceFaction FactionState; - local X2CovertActionTemplate ActionTemplate; - CAState = XComGameState_CovertAction(EventSource); if (CAState == none) return ELR_NoInterrupt; - PrevCAState = XComGameState_CovertAction(`XCOMHISTORY.GetPreviousGameStateForObject(CAState)); - // We want to keep track of how many covert actions with an ambush // risk have not been ambushed in a row. This is so we can increase // the ambush chance the more covert actions have not been ambushed. @@ -663,8 +657,7 @@ static function EventListenerReturn CAProcessCompletion( // We need to get the last covert action state from history because // the `bAmbushed` flag is cleared just before the covert action // completion processing happens. - // line moved above if block so that PrevCAState can be used elsewhere. - + PrevCAState = XComGameState_CovertAction(`XCOMHISTORY.GetPreviousGameStateForObject(CAState)); if (PrevCAState.bAmbushed) { // Covert action was ambushed, so reset the counter @@ -689,19 +682,6 @@ static function EventListenerReturn CAProcessCompletion( `GAMERULES.SubmitGameState(NewGameState); } - // Handle respawning golden path covert action if it failed - //Grab the previous covert action template. - ActionTemplate = PrevCAState.GetMyTemplate(); - if(class'Utilities_LW'.static.DidCovertActionFail(PrevCAState) && ActionTemplate.bGoldenPath) - { - NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("Respawn golden path covert action"); - FactionState = PrevCAState.GetFaction(); - FactionState = XComGameState_ResistanceFaction(NewGameState.ModifyStateObject(class'XComGameState_ResistanceFaction', FactionState.ObjectID)); - FactionState.GoldenPathActions.AddItem(FactionState.CreateCovertAction(NewGameState, ActionTemplate, ActionTemplate.RequiredFactionInfluence)); - - `GAMERULES.SubmitGameState(NewGameState); - } - // Now handle the Intense Training covert action if (CAState.GetMyTemplateName() != 'CovertAction_IntenseTraining') return ELR_NoInterrupt; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_LWModAPI.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_LWModAPI.uc index 027070c27..1406cc03d 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_LWModAPI.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_LWModAPI.uc @@ -80,7 +80,7 @@ static protected function EventListenerReturn LWUnitInfoReturn(Object EventData, Unit = XComGameState_Unit(EventSource); //abort if inputs incorrect - if(Tuple == none || Unit == none || Tuple.Id != 'GetLWUnitInfo' ) + if(Tuple == none || Tuple.Id != 'GetLWUnitInfo' || Unit == none) { return ELR_NoInterrupt; } diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Soldiers.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Soldiers.uc index 01ece05cc..e2ce2251e 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Soldiers.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2EventListener_Soldiers.uc @@ -685,7 +685,7 @@ static function EventListenerReturn OverrideRespecSoldierProjectPoints( if (default.TIERED_RESPEC_TIMES) { // Respec days = rank * difficulty setting - Tuple.Data[1].i = UnitState.GetRank() * class'XComGameState_HeadquartersXCom'.default.XComHeadquarters_DefaultRespecSoldierDays[`STRATEGYDIFFICULTYSETTING] * 12; + Tuple.Data[1].i = UnitState.GetRank() * class'XComGameState_HeadquartersXCom'.default.XComHeadquarters_DefaultRespecSoldierDays[`STRATEGYDIFFICULTYSETTING] * 24; } return ELR_NoInterrupt; @@ -1169,28 +1169,28 @@ static function EventListenerReturn GetPCSImage(Object EventData, Object EventSo switch (ItemState.GetMyTemplateName()) { - case 'DepthPerceptionPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_depthperception"; break; - case 'HyperReactivePupilsPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hyperreactivepupils"; break; - case 'CombatAwarenessPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_threatassessment"; break; - case 'DamageControlPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_damagecontrol"; break; - case 'AbsorptionFieldsPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_impactfield"; break; - case 'BodyShieldPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_bodyshield"; break; - case 'EmergencyLifeSupportPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_emergencylifesupport"; break; - case 'IronSkinPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_ironskin"; break; - case 'SmartMacrophagesPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_smartmacrophages"; break; - case 'CombatRushPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_combatrush"; break; - case 'CommonPCSDefense': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_defense"; break; - case 'RarePCSDefense': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_defense"; break; - case 'EpicPCSDefense': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_defense"; break; - case 'CommonPCSAgility': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_dodge"; break; - case 'RarePCSAgility': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_dodge"; break; - case 'EpicPCSAgility': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_dodge"; break; - case 'CommonPCSHacking': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hacking"; break; - case 'RarePCSHacking': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hacking"; break; - case 'EpicPCSHacking': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_hacking"; break; - case 'FireControl25PCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_firecontrol"; break; - case 'FireControl50PCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_firecontrol"; break; - case 'FireControl75PCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LWOTC.implants_firecontrol"; break; + case 'DepthPerceptionPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_depthperception"; break; + case 'HyperReactivePupilsPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hyperreactivepupils"; break; + case 'CombatAwarenessPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_threatassessment"; break; + case 'DamageControlPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_damagecontrol"; break; + case 'AbsorptionFieldsPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_impactfield"; break; + case 'BodyShieldPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_bodyshield"; break; + case 'EmergencyLifeSupportPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_emergencylifesupport"; break; + case 'IronSkinPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_ironskin"; break; + case 'SmartMacrophagesPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_smartmacrophages"; break; + case 'CombatRushPCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_combatrush"; break; + case 'CommonPCSDefense': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_defense"; break; + case 'RarePCSDefense': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_defense"; break; + case 'EpicPCSDefense': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_defense"; break; + case 'CommonPCSAgility': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_dodge"; break; + case 'RarePCSAgility': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_dodge"; break; + case 'EpicPCSAgility': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_dodge"; break; + case 'CommonPCSHacking': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hacking"; break; + case 'RarePCSHacking': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hacking"; break; + case 'EpicPCSHacking': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_hacking"; break; + case 'FireControl25PCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_firecontrol"; break; + case 'FireControl50PCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_firecontrol"; break; + case 'FireControl75PCS': OverridePCSImageTuple.Data[1].s = "img:///UILibrary_LW_Overhaul.implants_firecontrol"; break; default: break; } diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ArcthrowerWeapon.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ArcthrowerWeapon.uc index d1050fa2d..f73c048a7 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ArcthrowerWeapon.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ArcthrowerWeapon.uc @@ -6,17 +6,17 @@ //--------------------------------------------------------------------------------------- class X2Item_ArcthrowerWeapon extends X2Item config(GameData_WeaponData); -//�*****�UI Image definitions��***** +// ***** UI Image definitions  ***** var config string Arcthrower_CV_UIImage; var config string Arcthrower_MG_UIImage; var config string Arcthrower_BM_UIImage; -//�*****�Damage�arrays�for�attack�actions��***** +// ***** Damage arrays for attack actions  ***** var config WeaponDamageValue Arcthrower_CONVENTIONAL_BASEDAMAGE; var config WeaponDamageValue Arcthrower_MAGNETIC_BASEDAMAGE; var config WeaponDamageValue Arcthrower_BEAM_BASEDAMAGE; -//�*****�Core properties and variables�for�weapons�***** +// ***** Core properties and variables for weapons ***** var config int Arcthrower_CONVENTIONAL_AIM; var config int Arcthrower_CONVENTIONAL_CRITCHANCE; var config int Arcthrower_CONVENTIONAL_ICLIPSIZE; @@ -44,7 +44,7 @@ var config int Arcthrower_BEAM_ISUPPLIES; var config int Arcthrower_BEAM_TRADINGPOSTVALUE; var config int Arcthrower_BEAM_IPOINTS; -//�*****�Schematic properties�***** +// ***** Schematic properties ***** var config int Arcthrower_MAGNETIC_SCHEMATIC_SUPPLYCOST; var config int Arcthrower_BEAM_SCHEMATIC_SUPPLYCOST; @@ -79,7 +79,7 @@ static function X2DataTemplate CreateTemplate_Arcthrower_Conventional() local X2WeaponTemplate Template; `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'Arcthrower_CV'); - Template.AddAbilityIconOverride('EMPulser', "img:///UILibrary_LWOTC.LW_AbilityArcthrowerStun"); + Template.AddAbilityIconOverride('EMPulser', "img:///UILibrary_LW_Overhaul.LW_AbilityArcthrowerStun"); Template.EquipSound = "Conventional_Weapon_Equip"; Template.ItemCat = 'weapon'; @@ -122,7 +122,7 @@ static function X2DataTemplate CreateTemplate_Arcthrower_Magnetic() local X2WeaponTemplate Template; `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'Arcthrower_MG'); - Template.AddAbilityIconOverride('EMPulser', "img:///UILibrary_LWOTC.LW_AbilityArcthrowerStun"); + Template.AddAbilityIconOverride('EMPulser', "img:///UILibrary_LW_Overhaul.LW_AbilityArcthrowerStun"); Template.WeaponCat = 'arcthrower'; Template.WeaponTech = 'magnetic'; Template.ItemCat = 'weapon'; @@ -165,7 +165,7 @@ static function X2DataTemplate CreateTemplate_Arcthrower_Beam() local X2WeaponTemplate Template; `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'Arcthrower_BM'); - Template.AddAbilityIconOverride('EMPulser', "img:///UILibrary_LWOTC.LW_AbilityArcthrowerStun"); + Template.AddAbilityIconOverride('EMPulser', "img:///UILibrary_LW_Overhaul.LW_AbilityArcthrowerStun"); Template.WeaponCat = 'arcthrower'; Template.WeaponTech = 'beam'; Template.ItemCat = 'weapon'; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_BeamGrenadeLauncher.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_BeamGrenadeLauncher.uc index 4c75e11fb..582b0668f 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_BeamGrenadeLauncher.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_BeamGrenadeLauncher.uc @@ -52,7 +52,6 @@ static function X2GrenadeLauncherTemplate CreateTemplate_BeamGrenadeLauncher() Template.IncreaseGrenadeRange = default.BEAMGRENADELAUNCHER_RANGEBONUS; Template.GameArchetype = "WP_BeamGrenadeLauncher.WP_BeamGrenadeLauncher"; - // Template.GameArchetype = "WP_BeamGrenadeLauncher_LW.WP_BeamGrenadeLauncher_LW"; Template.CreatorTemplateName = 'GrenadeLauncher_BM_Schematic'; // The schematic which creates this item Template.BaseItem = 'GrenadeLauncher_MG'; // Which item this will be upgraded from diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ChosenWeapons.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ChosenWeapons.uc deleted file mode 100644 index 2916f7682..000000000 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_ChosenWeapons.uc +++ /dev/null @@ -1,281 +0,0 @@ -class X2Item_ChosenWeapons extends X2Item_XpackWeapons config (GameData_WeaponData); - - -var config WeaponDamageValue CHOSENRIFLE_T5_BASEDAMAGE; - -var config int CHOSENRIFLE_T5_AIM; -var config int CHOSENRIFLE_T5_CRITCHANCE; -var config int CHOSENRIFLE_T5_ICLIPSIZE; -var config int CHOSENRIFLE_T5_ISOUNDRANGE; -var config int CHOSENRIFLE_T5_IENVIRONMENTDAMAGE; - -var config WeaponDamageValue CHOSENSWORD_T5_BASEDAMAGE; -var config array CHOSENSWORD_T5_EXTRADAMAGE; - -var config int CHOSENSWORD_T5_AIM; -var config int CHOSENSWORD_T5_CRITCHANCE; -var config int CHOSENSWORD_T5_ISOUNDRANGE; -var config int CHOSENSWORD_T5_IENVIRONMENTDAMAGE; - -var config WeaponDamageValue CHOSENSHOTGUN_T5_BASEDAMAGE; - -var config int CHOSENSHOTGUN_T5_AIM; -var config int CHOSENSHOTGUN_T5_CRITCHANCE; -var config int CHOSENSHOTGUN_T5_ICLIPSIZE; -var config int CHOSENSHOTGUN_T5_ISOUNDRANGE; -var config int CHOSENSHOTGUN_T5_IENVIRONMENTDAMAGE; - -var config WeaponDamageValue CHOSENSNIPERRIFLE_T5_BASEDAMAGE; - -var config int CHOSENSNIPERRIFLE_T5_AIM; -var config int CHOSENSNIPERRIFLE_T5_CRITCHANCE; -var config int CHOSENSNIPERRIFLE_T5_ICLIPSIZE; -var config int CHOSENSNIPERRIFLE_T5_ISOUNDRANGE; -var config int CHOSENSNIPERRIFLE_T5_IENVIRONMENTDAMAGE; - -var config WeaponDamageValue CHOSENSNIPERPISTOL_T5_BASEDAMAGE; - -var config int CHOSENSNIPERPISTOL_T5_AIM; -var config int CHOSENSNIPERPISTOL_T5_CRITCHANCE; -var config int CHOSENSNIPERPISTOL_T5_ICLIPSIZE; -var config int CHOSENSNIPERPISTOL_T5_ISOUNDRANGE; -var config int CHOSENSNIPERPISTOL_T5_IENVIRONMENTDAMAGE; - -static function array CreateTemplates() -{ - local array Weapons; - - - Weapons.AddItem(CreateTemplate_ChosenRifle_T5()); - Weapons.AddItem(CreateTemplate_WarlockM5_PsiWeapon()); - - Weapons.AddItem(CreateTemplate_ChosenShotgun_T5()); - Weapons.AddItem(CreateTemplate_ChosenSword_T5()); - - Weapons.AddItem(CreateTemplate_ChosenSniperRifle_T5()); - Weapons.AddItem(CreateTemplate_ChosenSniperPistol_T5()); - - - return Weapons; - - -} -static function X2DataTemplate CreateTemplate_ChosenRifle_T5() -{ - local X2WeaponTemplate Template; - - `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'ChosenRifle_T5'); - Template.WeaponPanelImage = "_BeamRifle"; // used by the UI. Probably determines iconview of the weapon. - - Template.WeaponCat = 'rifle'; - Template.WeaponTech = 'beam'; - Template.ItemCat = 'weapon'; - Template.strImage = "img:///UILibrary_Common.UI_BeamAssaultRifle.BeamAssaultRifle_Base"; - Template.EquipSound = "Beam_Weapon_Equip"; - Template.Tier = 5; - - Template.RangeAccuracy = class'X2Item_DefaultWeapons'.default.MEDIUM_BEAM_RANGE; - Template.BaseDamage = default.CHOSENRIFLE_T5_BASEDAMAGE; - Template.Aim = default.CHOSENRIFLE_T5_AIM; - Template.CritChance = default.CHOSENRIFLE_T5_CRITCHANCE; - Template.iClipSize = default.CHOSENRIFLE_T5_ICLIPSIZE; - Template.iSoundRange = default.CHOSENRIFLE_T5_ISOUNDRANGE; - Template.iEnvironmentDamage = default.CHOSENRIFLE_T5_IENVIRONMENTDAMAGE; - - Template.NumUpgradeSlots = 2; - - Template.InventorySlot = eInvSlot_PrimaryWeapon; - Template.Abilities.AddItem('StandardShot'); - Template.Abilities.AddItem('Overwatch'); - Template.Abilities.AddItem('OverwatchShot'); - Template.Abilities.AddItem('Reload'); - Template.Abilities.AddItem('HotLoadAmmo'); - - Template.GameArchetype = "WP_ChosenAssaultRifle.WP_ChosenAssaultRifle_T4"; - - Template.iPhysicsImpulse = 5; - Template.DamageTypeTemplateName = 'Projectile_MagAdvent'; - - return Template; -} - -static function X2DataTemplate CreateTemplate_WarlockM5_PsiWeapon() -{ - local X2WeaponTemplate Template; - - Template = X2WeaponTemplate(CreateTemplate_Warlock_PsiWeapon('WarlockM5_PsiWeapon')); - - return Template; -} - -static function X2DataTemplate CreateTemplate_ChosenShotgun_T5() -{ - local X2WeaponTemplate Template; - - `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'ChosenShotgun_T5'); - Template.WeaponPanelImage = "_BeamShotgun"; - - Template.ItemCat = 'weapon'; - Template.WeaponCat = 'shotgun'; - Template.WeaponTech = 'beam'; - Template.strImage = "img:///UILibrary_Common.UI_BeamShotgun.BeamShotgun_Base"; - Template.EquipSound = "Beam_Weapon_Equip"; - Template.Tier = 5; - - Template.RangeAccuracy = class'X2Item_DefaultWeapons'.default.SHORT_BEAM_RANGE; - Template.BaseDamage = default.CHOSENSHOTGUN_T5_BASEDAMAGE; - Template.Aim = default.CHOSENSHOTGUN_T5_AIM; - Template.CritChance = default.CHOSENSHOTGUN_T5_CRITCHANCE; - Template.iClipSize = default.CHOSENSHOTGUN_T5_ICLIPSIZE; - Template.iSoundRange = default.CHOSENSHOTGUN_T5_ISOUNDRANGE; - Template.iEnvironmentDamage = default.CHOSENSHOTGUN_T5_IENVIRONMENTDAMAGE; - Template.NumUpgradeSlots = 0; - - Template.InventorySlot = eInvSlot_PrimaryWeapon; - Template.Abilities.AddItem('StandardShot'); - Template.Abilities.AddItem('Overwatch'); - Template.Abilities.AddItem('OverwatchShot'); - Template.Abilities.AddItem('Reload'); - Template.Abilities.AddItem('HotLoadAmmo'); - - // This all the resources; sounds, animations, models, physics, the works. - Template.GameArchetype = "WP_ChosenShotgun.WP_ChosenShotgun_T4"; - - Template.iPhysicsImpulse = 5; - Template.fKnockbackDamageAmount = 10.0f; - Template.fKnockbackDamageRadius = 16.0f; - Template.DamageTypeTemplateName = 'Projectile_MagAdvent'; - - return Template; -} - -static function X2DataTemplate CreateTemplate_ChosenSword_T5() -{ - local X2WeaponTemplate Template; - - `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'ChosenSword_T5'); - Template.WeaponPanelImage = "_Pistol"; // used by the UI. Probably determines iconview of the weapon. - - Template.ItemCat = 'weapon'; - Template.WeaponCat = 'sword'; - Template.WeaponTech = 'beam'; - Template.strImage = "img:///UILibrary_Common.BeamSecondaryWeapons.BeamSword"; - Template.EquipSound = "Sword_Equip_Beam"; - Template.InventorySlot = eInvSlot_SecondaryWeapon; - Template.StowedLocation = eSlot_RightBack; - // This all the resources; sounds, animations, models, physics, the works. - Template.GameArchetype = "WP_ChosenSword.WP_ChosenSword_BM"; - Template.AddDefaultAttachment('R_Back', "BeamSword.Meshes.SM_BeamSword_Sheath", false); - Template.Tier = 5; - - Template.iRadius = 1; - Template.NumUpgradeSlots = 2; - Template.InfiniteAmmo = true; - Template.iPhysicsImpulse = 5; - - Template.iRange = 0; - Template.BaseDamage = default.CHOSENSWORD_T5_BASEDAMAGE; - Template.ExtraDamage = default.CHOSENSWORD_T5_EXTRADAMAGE; - Template.Aim = default.CHOSENSWORD_T5_AIM; - Template.CritChance = default.CHOSENSWORD_T5_CRITCHANCE; - Template.iSoundRange = default.CHOSENSWORD_T5_ISOUNDRANGE; - Template.iEnvironmentDamage = default.CHOSENSWORD_T5_IENVIRONMENTDAMAGE; - Template.BaseDamage.DamageType = 'Melee'; - - Template.Abilities.AddItem('PartingSilk'); - - Template.DamageTypeTemplateName = 'Melee'; - - return Template; -} - - - static function X2DataTemplate CreateTemplate_ChosenSniperRifle_T5() -{ - local X2WeaponTemplate Template; - - `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'ChosenSniperRifle_T5'); - Template.WeaponPanelImage = "_BeamSniperRifle"; - - Template.ItemCat = 'weapon'; - Template.WeaponCat = 'sniper_rifle'; - Template.WeaponTech = 'beam'; - Template.strImage = "img:///UILibrary_Common.UI_BeamSniper.BeamSniper_Base"; - Template.EquipSound = "Beam_Weapon_Equip"; - Template.Tier = 5; - - Template.RangeAccuracy = class'X2Item_DefaultWeapons'.default.LONG_BEAM_RANGE; - Template.BaseDamage = default.CHOSENSNIPERRIFLE_T5_BASEDAMAGE; - Template.Aim = default.CHOSENSNIPERRIFLE_T5_AIM; - Template.CritChance = default.CHOSENSNIPERRIFLE_T5_CRITCHANCE; - Template.iClipSize = default.CHOSENSNIPERRIFLE_T5_ICLIPSIZE; - Template.iSoundRange = default.CHOSENSNIPERRIFLE_T5_ISOUNDRANGE; - Template.iEnvironmentDamage = default.CHOSENSNIPERRIFLE_T5_IENVIRONMENTDAMAGE; - Template.NumUpgradeSlots = 0; - Template.iTypicalActionCost = 2; - - Template.InventorySlot = eInvSlot_PrimaryWeapon; - Template.Abilities.AddItem('HunterRifleShot'); - Template.Abilities.AddItem('SniperRifleOverwatch'); - Template.Abilities.AddItem('OverwatchShot'); - Template.Abilities.AddItem('Reload'); - Template.Abilities.AddItem('HotLoadAmmo'); - Template.Abilities.AddItem('TrackingShot'); - - // This all the resources; sounds, animations, models, physics, the works. - Template.GameArchetype = "WP_ChosenSniperRifle.WP_ChosenSniperRifle_T4"; - - Template.iPhysicsImpulse = 5; - Template.DamageTypeTemplateName = 'Projectile_MagAdvent'; - - return Template; -} - - - static function X2DataTemplate CreateTemplate_ChosenSniperPistol_T5() -{ - local X2WeaponTemplate Template; - - `CREATE_X2TEMPLATE(class'X2WeaponTemplate', Template, 'ChosenSniperPistol_T5'); - Template.WeaponPanelImage = "_Pistol"; // used by the UI. Probably determines iconview of the weapon. - - Template.ItemCat = 'weapon'; - Template.WeaponCat = 'pistol'; - Template.WeaponTech = 'beam'; - Template.strImage = "img:///UILibrary_Common.BeamSecondaryWeapons.BeamPistol"; - Template.EquipSound = "Secondary_Weapon_Equip_Beam"; - Template.Tier = 3; - - Template.iRange = default.CHOSENSNIPERPISTOL_RANGE; - Template.RangeAccuracy = class'X2Item_DefaultWeapons'.default.SHORT_MAGNETIC_RANGE; - Template.BaseDamage = default.CHOSENSNIPERPISTOL_T5_BASEDAMAGE; - Template.Aim = default.CHOSENSNIPERPISTOL_T5_AIM; - Template.CritChance = default.CHOSENSNIPERPISTOL_T5_CRITCHANCE; - Template.iClipSize = default.CHOSENSNIPERPISTOL_T5_ICLIPSIZE; - Template.iSoundRange = default.CHOSENSNIPERPISTOL_T5_ISOUNDRANGE; - Template.iEnvironmentDamage = default.CHOSENSNIPERPISTOL_T5_IENVIRONMENTDAMAGE; - - Template.NumUpgradeSlots = 0; - - Template.OverwatchActionPoint = class'X2CharacterTemplateManager'.default.PistolOverwatchReserveActionPoint; - Template.InfiniteAmmo = true; - - Template.InventorySlot = eInvSlot_SecondaryWeapon; - Template.Abilities.AddItem('PistolStandardShot'); - Template.Abilities.AddItem('PistolOverwatch'); - Template.Abilities.AddItem('PistolOverwatchShot'); - Template.Abilities.AddItem('Reload'); - Template.Abilities.AddItem('HotLoadAmmo'); - - Template.SetAnimationNameForAbility('FanFire', 'FF_FireMultiShotMagA'); - - // This all the resources; sounds, animations, models, physics, the works. - Template.GameArchetype = "WP_ChosenPistol.WP_ChosenPistol_T4"; - - Template.iPhysicsImpulse = 5; - Template.DamageTypeTemplateName = 'Projectile_MagAdvent'; - - Template.bHideClipSizeStat = true; - - return Template; -} diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_Coilguns.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_Coilguns.uc index f8beffa3a..348b96da8 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_Coilguns.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_Coilguns.uc @@ -88,9 +88,9 @@ static function X2DataTemplate CreateAssaultRifle_Coil_Template() Template.GameArchetype = "LWAssaultRifle_CG.Archetypes.WP_AssaultRifle_CG"; Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_AssaultRifle'; - Template.AddDefaultAttachment('Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagA", , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_MagA"); - Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_StockA"); - Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_ReargripA"); + Template.AddDefaultAttachment('Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_MagA"); + Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_StockA"); + Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight Template.InventorySlot = eInvSlot_PrimaryWeapon; @@ -139,9 +139,9 @@ static function X2DataTemplate CreateSMG_Coil_Template() Template.GameArchetype = "LWSMG_CG.Archetypes.WP_SMG_CG"; Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_AssaultRifle'; - Template.AddDefaultAttachment('Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagA"); - Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_StockA"); - Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_ReargripA"); + Template.AddDefaultAttachment('Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagA"); + Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_StockA"); + Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight Template.InventorySlot = eInvSlot_PrimaryWeapon; @@ -188,10 +188,10 @@ static function X2DataTemplate CreateCannon_Coil_Template() Template.GameArchetype = "LWCannon_CG.Archetypes.WP_Cannon_CG"; Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_Cannon'; - Template.AddDefaultAttachment('Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagA", , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_MagA"); - Template.AddDefaultAttachment('Stock', "LWCannon_CG.Meshes.LW_CoilCannon_StockA", , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_StockA"); + Template.AddDefaultAttachment('Mag', "LWCannon_CG.Meshes.LW_CoilCannon_MagA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_MagA"); + Template.AddDefaultAttachment('Stock', "LWCannon_CG.Meshes.LW_CoilCannon_StockA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_StockA"); Template.AddDefaultAttachment('StockSupport', "LWCannon_CG.Meshes.LW_CoilCannon_StockSupportA"); - Template.AddDefaultAttachment('Reargrip', "LWCannon_CG.Meshes.LW_CoilCannon_ReargripA", , "img:///UILibrary_LWOTC.InventoryArt.CoilCannon_ReargripA"); + Template.AddDefaultAttachment('Reargrip', "LWCannon_CG.Meshes.LW_CoilCannon_ReargripA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilCannon_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight Template.InventorySlot = eInvSlot_PrimaryWeapon; @@ -238,8 +238,8 @@ static function X2DataTemplate CreateShotgun_Coil_Template() Template.GameArchetype = "LWShotgun_CG.Archetypes.WP_Shotgun_CG"; Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_Shotgun'; - Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_StockA"); - Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LWOTC.InventoryArt.CoilShotgun_ReargripA"); + Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_StockA"); + Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilShotgun_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight Template.InventorySlot = eInvSlot_PrimaryWeapon; @@ -287,10 +287,10 @@ static function X2DataTemplate CreateSniperRifle_Coil_Template() Template.GameArchetype = "LWSniperRifle_CG.Archetypes.WP_SniperRifle_CG"; Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_AssaultRifle'; - Template.AddDefaultAttachment('Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_MagA"); - Template.AddDefaultAttachment('Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_OpticA"); - Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_StockB"); - Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_ReargripA"); + Template.AddDefaultAttachment('Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_MagA"); + Template.AddDefaultAttachment('Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_OpticA"); + Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_StockB"); + Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight Template.InventorySlot = eInvSlot_PrimaryWeapon; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWPistol.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWPistol.uc index 43314179f..bf7d8f03d 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWPistol.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWPistol.uc @@ -120,8 +120,8 @@ static function X2DataTemplate CreateTemplate_LWPistol_Coil() Template.ItemCat = 'weapon'; Template.WeaponCat = 'pistol'; - Template.WeaponTech = 'coilgun_lw'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Coil_Pistol"; + Template.WeaponTech = 'magnetic'; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Coil_Pistol"; Template.EquipSound = "Secondary_Weapon_Equip_Magnetic"; Template.Tier = 4; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWUtilityItems.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWUtilityItems.uc index c0a74dc7b..233914aff 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWUtilityItems.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2Item_LWUtilityItems.uc @@ -60,7 +60,7 @@ static function X2DataTemplate CreateCeramicPlating() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'CeramicPlating'); Template.ItemCat = 'plating'; Template.InventorySlot = eInvSlot_Utility; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Flame_Sealant_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Flame_Sealant_512"; Template.EquipSound = "StrategyUI_Vest_Equip"; Template.Tier = 0; @@ -99,7 +99,7 @@ static function X2DataTemplate CreateCarapacePlating() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'CarapacePlating'); Template.ItemCat = 'plating'; Template.InventorySlot = eInvSlot_Utility; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Power_Armor512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Power_Armor512"; Template.EquipSound = "StrategyUI_Vest_Equip"; Template.Tier = 3; @@ -119,7 +119,7 @@ static function X2DataTemplate CreateChitinPlating() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'ChitinPlating'); Template.ItemCat = 'plating'; Template.InventorySlot = eInvSlot_Utility; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Heat_Absorption_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Heat_Absorption_512"; Template.EquipSound = "StrategyUI_Vest_Equip"; Template.Tier = 2; @@ -138,7 +138,7 @@ static function X2DataTemplate CreateChameleonSuit() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'ChameleonSuit'); Template.ItemCat = 'defense'; Template.InventorySlot = eInvSlot_Utility; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Tarantula_Suit_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Tarantula_Suit_512"; Template.EquipSound = "StrategyUI_Vest_Equip"; Template.Tier = 2; @@ -156,7 +156,7 @@ static function X2AmmoTemplate CreateStilettoRounds() local WeaponDamageValue DamageValue; `CREATE_X2TEMPLATE(class'X2AmmoTemplate', Template, 'StilettoRounds'); - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Stiletto_Rounds_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Stiletto_Rounds_512"; Template.EquipSound = "StrategyUI_Ammo_Equip"; Template.Tier = 2; Template.InventorySlot = eInvSlot_Utility; @@ -185,7 +185,7 @@ static function X2DataTemplate CreateNeurowhip() Template.InventorySlot = eInvSlot_Utility; Template.CanBeBuilt = true; Template.EquipSound = "StrategyUI_Mindshield_Equip"; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Neurowhip"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Neurowhip"; Template.Abilities.AddItem('Neurowhip_Ability'); Template.SetUIStatMarkup(class'XLocalizedData'.default.PsiOffenseLabel, eStat_PsiOffense, default.NEUROWHIP_PSI_BONUS); @@ -201,7 +201,7 @@ static function X2AmmoTemplate CreateFalconRounds() local WeaponDamageValue DamageValue; `CREATE_X2TEMPLATE(class'X2AmmoTemplate', Template, 'FalconRounds'); - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Falcon_Rounds_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Falcon_Rounds_512"; Template.EquipSound = "StrategyUI_Ammo_Equip"; Template.Tier = 2; Template.InventorySlot = eInvSlot_Utility; @@ -253,7 +253,7 @@ static function X2AmmoTemplate CreateRedScreenRounds() local X2Effect_PersistentStatChange HackDefenseEffect; `CREATE_X2TEMPLATE(class'X2AmmoTemplate', Template, 'RedscreenRounds'); - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Redscreen_Rounds_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Redscreen_Rounds_512"; Template.EquipSound = "StrategyUI_Ammo_Equip"; Template.Tier = 2; Template.InventorySlot = eInvSlot_Utility; @@ -287,7 +287,7 @@ static function X2AmmoTemplate CreateNeedleRounds() local WeaponDamageValue DamageValue; `CREATE_X2TEMPLATE(class'X2AmmoTemplate', Template, 'NeedleRounds'); - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_Needle_Rounds_512"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_Needle_Rounds_512"; Template.EquipSound = "StrategyUI_Ammo_Equip"; Template.Tier = 2; Template.InventorySlot = eInvSlot_Utility; @@ -323,7 +323,7 @@ static function X2DataTemplate CreateHighPressureTanks() Template.WeaponCat = 'heavyammo'; Template.ItemCat = 'weapon'; Template.InventorySlot = eInvSlot_HeavyWeapon; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_HighPressureTanks"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_HighPressureTanks"; Template.EquipSound = "StrategyUI_Heavy_Weapon_Equip"; Template.Abilities.AddItem ('HighPressure'); Template.CanBeBuilt = false; @@ -342,7 +342,7 @@ static function X2DataTemplate CreateExtraRocket() Template.WeaponCat = 'heavyammo'; Template.ItemCat = 'weapon'; Template.InventorySlot = eInvSlot_HeavyWeapon; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.Inv_ExtraRocket"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_ExtraRocket"; Template.EquipSound = "StrategyUI_Heavy_Weapon_Equip"; Template.Abilities.AddItem ('ShockAndAwe'); Template.CanBeBuilt = false; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWAbilitiesModTemplate.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWAbilitiesModTemplate.uc index 47c33aa98..9b4fc9824 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWAbilitiesModTemplate.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWAbilitiesModTemplate.uc @@ -44,8 +44,6 @@ var config int MIND_SCORCH_BURNING_BASE_DAMAGE; var config int MIND_SCORCH_BURNING_DAMAGE_SPREAD; var config int MIND_SCORCH_BURN_CHANCE; -var config int SUSTAIN_WOUND_HP_REDUCTTION; - var config float CHOSEN_REGENERATION_HEAL_VALUE_PCT; var config array PISTOL_ABILITY_WEAPON_CATS; @@ -107,18 +105,11 @@ static function UpdateAbilities(X2AbilityTemplate Template, int Difficulty) UpdatePurifierFlamethrower(Template); break; case 'Fuse': - //class'Helpers_LW'.static.MakeFreeAction(Template); - MakeFuseNonTurnEnding(Template); + class'Helpers_LW'.static.MakeFreeAction(Template); break; case 'PriestStasis': MakeAbilityNonTurnEnding(Template); MakeAbilitiesUnusableOnLost(Template); - MakeAbilityHostile(Template); - break; - case 'HunterGrapple': - case 'Grapple': - case 'PoweredGrapple': - AddGrappledThisTurnEffect(Template); break; case 'Solace': RemoveRoboticsAsValidTargetsOfSolace(Template); @@ -188,8 +179,11 @@ static function UpdateAbilities(X2AbilityTemplate Template, int Difficulty) case 'VanishingWindReveal': Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; break; - case 'ChosenAllSeeing': - Template.ChosenExcludeTraits.Length = 0; + case 'ShadowStep': //Make these exclusive for chosen + Template.ChosenExcludeTraits.AddItem('LightningReflexes_LW'); + break; + case 'LightningReflexes_LW': + Template.ChosenExcludeTraits.AddItem('ShadowStep'); break; case 'Slash_LW': case 'SwordSlice_LW': @@ -203,9 +197,6 @@ static function UpdateAbilities(X2AbilityTemplate Template, int Difficulty) case 'ChosenRegenerate': UpdateChosenRegenerate(Template); break; - case 'TrackingShot': - class'Helpers_LW'.static.MakeFreeAction(Template); - break; case 'HarborWave': ReworkHarborWave(Template); break; @@ -730,17 +721,6 @@ static function RemoveRoboticsAsValidTargetsOfSolaceCleanse(X2AbilityTemplate Te local X2Effect_RemoveEffects RemoveEffects; local X2Condition_UnitProperty UnitCondition; local int i, j; - local X2AbilityTrigger_EventListener EventListener; - - //Tedster - swap ELR to a final one for a bit of a performance boost. - Template.AbilityTriggers.Length=0; - - EventListener = new class'X2AbilityTrigger_EventListener'; - EventListener.ListenerData.Deferral = ELD_OnStateSubmitted; - EventListener.ListenerData.EventID = 'UnitMoveFinished'; - EventListener.ListenerData.Filter = eFilter_None; - EventListener.ListenerData.EventFn = class'X2Ability_PerkPackAbilitySet2'.static.SolaceBastionCleanseListener; // keep this, since it's generically just calling the associate ability - Template.AbilityTriggers.AddItem(EventListener); for (i = 0; i < Template.AbilityTargetEffects.Length; i++) { @@ -771,7 +751,7 @@ static function RemoveTheDeathFromHolyWarriorDeath(X2AbilityTemplate Template) static function UpdateSustainEffect(X2AbilityTemplate Template) { local X2Effect_Sustain_LW SustainEffect; - local X2Effect_GreaterPadding GreaterPaddingEffect; + class'Helpers_LW'.static.RemoveAbilityTargetEffects(Template,'X2Effect_Sustain'); SustainEffect = new class'X2Effect_Sustain_LW'; @@ -779,13 +759,6 @@ static function UpdateSustainEffect(X2AbilityTemplate Template) SustainEffect.EffectName='Sustain'; SustainEffect.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, true,, Template.AbilitySourceName); Template.AddTargetEffect(SustainEffect); - - GreaterPaddingEffect = new class 'X2Effect_GreaterPadding'; - GreaterPaddingEffect.BuildPersistentEffect (1, true, false); - GreaterPaddingEffect.Padding_HealHP = default.SUSTAIN_WOUND_HP_REDUCTTION; - - Template.AddTargetEffect(GreaterPaddingEffect); - } static function UseNewDeadeyeEffect(X2AbilityTemplate Template) @@ -951,13 +924,6 @@ static function ReworkMindScorch(X2AbilityTemplate Template) local X2Effect_Burning BurningEffect; local X2Effect_ApplyWeaponDamage DamageEffect; local array SkipExclusions; - local X2AbilityCooldown_MindScorch Cooldown; - - - Cooldown = new class'X2AbilityCooldown_MindScorch'; - Cooldown.iNumTurns = class'X2Ability_ChosenWarlock'.default.MINDSCORCH_COOLDOWN_LOCAL; - Cooldown.NumGlobalTurns = class'X2Ability_ChosenWarlock'.default.MINDSCORCH_COOLDOWN_GLOBAL; - Template.AbilityCooldown = Cooldown; ShooterCondition = new class'X2Condition_UnitProperty'; ShooterCondition.ExcludeConcealed = true; @@ -1119,26 +1085,19 @@ static function BuffTeleportAlly(X2AbilityTemplate Template) Template.AddTargetEffect(ReactionEffect); */ } -//For whatever reason effects and unit value don't seem to be working -static function AddGrappledThisTurnEffect(X2AbilityTemplate Template) -{ - local AdditionalCooldownInfo CooldownInfo; - CooldownInfo.AbilityName = 'TrackingShotMark'; - CooldownInfo.NumTurns = 1; - - Template.AbilityCooldown.AditionalAbilityCooldowns.AddItem(CooldownInfo); -} - - static function UpdateSummon(X2AbilityTemplate Template) { + local X2AbilityCooldown Cooldown; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; - //class'Helpers_LW'.static.RemoveAbilityShooterEffects(Template,'X2Effect_SetUnitValue'); - //class'Helpers_LW'.static.RemoveAbilityShooterConditions(Template, 'X2Condition_UnitValue'); + class'Helpers_LW'.static.RemoveAbilityShooterEffects(Template,'X2Effect_SetUnitValue'); + class'Helpers_LW'.static.RemoveAbilityShooterConditions(Template, 'X2Condition_UnitValue'); - class'Helpers_LW'.static.RemoveAbilityShooterConditions(Template, 'X2Condition_BattleState'); + + Cooldown = new class'X2AbilityCooldown'; + Cooldown.iNumTurns = default.SUMMON_COOLDOWN; + Template.AbilityCooldown = Cooldown; Template.BuildNewGameStateFn = class'X2Ability_LW_ChosenAbilities'.static.ChosenSummonFollowers_BuildGameState; Template.BuildVisualizationFn = class'X2Ability_LW_ChosenAbilities'.static.ChosenSummonFollowers_BuildVisualization; @@ -1185,7 +1144,7 @@ static function UpdateChosenRegenerate(X2AbilityTemplate Template) static function ReworkHarborWave(X2AbilityTemplate Template) { - local X2Effect_ApplyHarborWaveDamage DamageEffect; + local X2Effect_ApplyWeaponDamage DamageEffect; Template.AbilityToHitCalc = new class'X2AbilityToHitCalc_DeadEye'; @@ -1194,7 +1153,7 @@ static function ReworkHarborWave(X2AbilityTemplate Template) class'Helpers_LW'.static.RemoveAbilityMultiTargetEffects(Template, 'X2Effect_ApplyWeaponDamage'); class'Helpers_LW'.static.RemoveAbilityMultiTargetEffects(Template, 'X2Effect_Knockback'); - DamageEffect = new class'X2Effect_ApplyHarborWaveDamage'; + DamageEffect = new class'X2Effect_ApplyWeaponDamage'; DamageEffect.bIgnoreArmor = true; Template.AddMultiTargetEffect(DamageEffect); @@ -1212,27 +1171,10 @@ static function MakeAbilityWorkWhenBurning(X2AbilityTemplate Template) static function AddQuickdrawMobilityBoost(X2AbilityTemplate Template) { - Template.AdditionalAbilities.AddItem('QuickdrawMobilityIncrease'); + Template. AdditionalAbilities.AddItem('QuickdrawMobilityIncrease'); } -static function MakeFuseNonTurnEnding(X2AbilityTemplate Template) -{ - local int i; - local X2AbilityCost_ActionPoints ActionPointCost; - - for(i = 0; i < Template.AbilityCosts.Length; i++) - { - ActionPointCost = X2AbilityCost_ActionPoints(Template.AbilityCosts[i]); - - if(ActionPointCost != none) - { - ActionPointCost.bConsumeAllPoints=false; - break; - } - } -} - static function AddDisablingShotEffect(X2AbilityTemplate Template) { local X2Effect_DisableWeapon DisableWeaponEffect; @@ -1245,10 +1187,6 @@ static function AddDisablingShotEffect(X2AbilityTemplate Template) DisableWeaponEffect.TargetConditions.AddItem(AbilityCondition); Template.AddTargetEffect(DisableWeaponEffect); - if(Template.DataName == 'FaceOff') - { - Template.AddMultiTargetEffect(DisableWeaponEffect); - } } static function DisplayMindShieldPassive(X2AbilityTemplate Template) @@ -1431,11 +1369,6 @@ static function name GetMultiShotContinueUnitValueName(name AbilityName) return name(AbilityName $ "Continue"); } -static function MakeAbilityHostile(X2AbilityTemplate Template) -{ - Template.Hostility = eHostility_Offensive; -} - defaultproperties { AbilityTemplateModFn=UpdateAbilities diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWActivityCondition_FullOutpostJobBuckets.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWActivityCondition_FullOutpostJobBuckets.uc index 377399b54..107422642 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWActivityCondition_FullOutpostJobBuckets.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWActivityCondition_FullOutpostJobBuckets.uc @@ -31,12 +31,10 @@ simulated function bool MeetsCondition(X2LWActivityCreation ActivityCreation, XC if (FullRetal) { BucketSize += OutPostState.TotalResistanceBucket; - `LWTrace("Adding" @OutPostState.TotalResistanceBucket @ "to full retal bucket."); } else { BucketSize += OutPostState.GetJobBucketForJob (Job); - `LWTrace("Adding" @ OutPostState.GetJobBucketForJob(Job) @ "to" @ Job @ "retal bucket."); } ContactedRegions += 1; } @@ -46,7 +44,7 @@ simulated function bool MeetsCondition(X2LWActivityCreation ActivityCreation, XC LiberatedRegions += 1; } } - `LWTrace("Bucket size pre adjustments:" @BucketSize); + BucketSize = BucketSize * (default.CONTACTED_REGIONS_BASE_BUCKET_MOD ** (ContactedRegions - 1)); BucketSize = Bucketsize * (default.LIBERATED_REGIONS_BASE_BUCKET_MOD ** (LiberatedRegions)); `LWTRACE ("Testing for Retalbucket (post adjustment):" @ (FullRetal ? "Full" : string(Job)) @ "Condition passed if" @ BucketSize @ ">=" @ RequiredDays); diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWCharactersModTemplate.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWCharactersModTemplate.uc index e64c624f1..6e55fc2a0 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWCharactersModTemplate.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2LWCharactersModTemplate.uc @@ -38,7 +38,6 @@ static function UpdateCharacters(X2CharacterTemplate Template, int Difficulty) case'ChosenAssassinM2': case'ChosenAssassinM3': case'ChosenAssassinM4': - case'ChosenAssassinM5': Template.SightedEvents.AddItem('ChosenSighted'); Template.SightedEvents.AddItem('AssassinSighted'); break; @@ -46,7 +45,6 @@ static function UpdateCharacters(X2CharacterTemplate Template, int Difficulty) case'ChosenWarlockM2': case'ChosenWarlockM3': case'ChosenWarlockM4': - case'ChosenWarlockM5': Template.SightedEvents.AddItem('ChosenSighted'); Template.SightedEvents.AddItem('WarlockSighted'); break; @@ -54,7 +52,6 @@ static function UpdateCharacters(X2CharacterTemplate Template, int Difficulty) case'ChosenHunterM2': case'ChosenHunterM3': case'ChosenHunterM4': - case'ChosenHunterM5': Template.SightedEvents.AddItem('ChosenSighted'); Template.SightedEvents.AddItem('HunterSighted'); break; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_DefaultAlienActivities.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_DefaultAlienActivities.uc index fd281ea93..93998d9ad 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_DefaultAlienActivities.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_DefaultAlienActivities.uc @@ -168,7 +168,6 @@ var config int RECRUIT_RAID_BUCKET; var config int ALIEN_BASE_DOOM_REMOVAL; -var config int CHOSEN_KNOWLEDGE_GAIN_MISSIONS; var config int CHOSEN_ACTIVATE_AT_FL; var config array CHOSEN_LEVEL_FL_THRESHOLDS; @@ -1816,15 +1815,6 @@ static function TryIncreasingChosenLevel(int CurrentForceLevel) { OldTacticalTag = ChosenState.GetMyTemplate().GetSpawningTag(ChosenState.Level); Chosenstate.Level++; - // Tedster - Cap chosen levels at the length of the level FL thresholds array, which should line up with the max level value since both start at 0. - ChosenState.Level = MIN(default.CHOSEN_LEVEL_FL_THRESHOLDS.Length, Chosenstate.Level); - - //5th tier of chosen created by using PostEncounterCreation - if(ChosenState.Level == 4) - { - ChosenState.Level = 3; - } - NewTacticalTag = ChosenState.GetMyTemplate().GetSpawningTag(ChosenState.Level); if (ChosenState.bMetXCom && !ChosenState.bDefeated) { @@ -1837,76 +1827,6 @@ static function TryIncreasingChosenLevel(int CurrentForceLevel) `GAMERULES.SubmitGameState(NewGameState); } -// version that takes in a NewGameState for DLCInfo use for patching existing campaigns. -static function TryIncreasingChosenLevelWithGameState(int CurrentForceLevel, XComGameState NewGameState, XComGameState_AdventChosen ChosenState) -{ - - local name OldTacticalTag, NewTacticalTag; - local int NewChosenLevel; - - - OldTacticalTag = ChosenState.GetMyTemplate().GetSpawningTag(ChosenState.Level); - - ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); - - //handle all force levels here. - switch (CurrentForceLevel) - { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - NewChosenLevel = 0; - break; - case 7: - case 8: - case 9: - case 10: - NewChosenLevel = 1; - break; - case 11: - case 12: - case 13: - case 14: - case 15: - NewChosenLevel = 2; - break; - case 16: - case 17: - case 18: - case 19: - case 20: - NewChosenLevel = 3; - break; - // default catches FL21+ campaigns - default: - NewChosenLevel = 3; - break; - } - if(NewChosenLevel == ChosenState.Level) - return; - - ChosenState.Level = NewChosenLevel; - - if(ChosenState.Level > 3) - { - ChosenState.Level = 3; - } - - - NewTacticalTag = ChosenState.GetMyTemplate().GetSpawningTag(ChosenState.Level); - if (ChosenState.bMetXCom && !ChosenState.bDefeated) - { - ChosenState.bJustLeveledUp = true; - } - // Replace Old Tag with new Tag in missions - ChosenState.RemoveTacticalTagFromAllMissions(NewGameState, OldTacticalTag, NewTacticalTag); - - -} - static function ActivateChosenIfEnabled(XComGameState NewGameState) { local XComGameState_HeadquartersAlien AlienHQ; @@ -1915,9 +1835,7 @@ static function ActivateChosenIfEnabled(XComGameState NewGameState) local int i; if (!`SecondWaveEnabled('DisableChosen')) { - AlienHQ = XComGameState_HeadquartersAlien(`XCOMHISTORY.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersAlien')); - AlienHQ = XComGameState_HeadquartersAlien(NewGameState.ModifyStateObject(class'XComGameState_HeadquartersAlien', AlienHQ.ObjectID)); AlienHQ.OnChosenActivation(NewGameState); AllChosen = AlienHQ.GetAllChosen(); @@ -1926,24 +1844,16 @@ static function ActivateChosenIfEnabled(XComGameState NewGameState) //ALSO REMOVE ALL WEAKNESSES FROM THEM foreach AllChosen(ChosenState) { - if (!ChosenState.bMetXCom) - { - ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); - ChosenState.Strengths.length = 0; - + ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); + ChosenState.Strengths.length = 0; - // Get them training and learning about XCOM straight away - ChosenState.bMetXCom = true; - ChosenState.NumEncounters++; - - for (i = ChosenState.Weaknesses.length - 1; i >= 0; i--) + for(i = ChosenState.Weaknesses.length - 1; i>=0; i--) + { + if(ChosenState.Weaknesses[i] != 'ChosenSkirmisherAdversary' && + ChosenState.Weaknesses[i] != 'ChosenTemplarAdversary' && + ChosenState.Weaknesses[i] != 'ChosenReaperAdversary') { - if (ChosenState.Weaknesses[i] != 'ChosenSkirmisherAdversary' && - ChosenState.Weaknesses[i] != 'ChosenTemplarAdversary' && - ChosenState.Weaknesses[i] != 'ChosenReaperAdversary') - { - ChosenState.Weaknesses.Remove(i,1); - } + ChosenState.Weaknesses.Remove(i,1); } } } @@ -3970,9 +3880,6 @@ static function TypicalAdvanceActivityOnMissionSuccess(XComGameState_LWAlienActi ActivityTemplate = ActivityState.GetMyTemplate(); NewGameState.AddStateObject(ActivityState); - RegionState = XComGameState_WorldRegion(NewGameState.GetGameStateForObjectID(ActivityState.PrimaryRegion.ObjectID)); - if(RegionState == none) - RegionState = XComGameState_WorldRegion(`XCOMHISTORY.GetGameStateForObjectID(ActivityState.PrimaryRegion.ObjectID)); // We need to apply the rewards immediately, but don't want to run them twice if we need to also defer the // activity update until we're back at the geoscape. @@ -3984,8 +3891,6 @@ static function TypicalAdvanceActivityOnMissionSuccess(XComGameState_LWAlienActi GiveRewards(NewGameState, MissionState, ExcludeIndices); RecordResistanceActivity(true, ActivityState, MissionState, NewGameState); - IncreaseChosenKnowledge(RegionState, NewGameState); - MissionState.RemoveEntity(NewGameState); } } @@ -4058,7 +3963,6 @@ static function TypicalAdvanceActivityOnMissionSuccess(XComGameState_LWAlienActi static function TypicalEndActivityOnMissionSuccess(XComGameState_LWAlienActivity ActivityState, XComGameState_MissionSite MissionState, XComGameState NewGameState) { local X2LWAlienActivityTemplate ActivityTemplate; - local XComGameState_WorldRegion RegionState; local array ExcludeIndices; if(ActivityState == none) @@ -4067,10 +3971,6 @@ static function TypicalEndActivityOnMissionSuccess(XComGameState_LWAlienActivity ActivityTemplate = ActivityState.GetMyTemplate(); NewGameState.AddStateObject(ActivityState); - RegionState = XComGameState_WorldRegion(NewGameState.GetGameStateForObjectID(ActivityState.PrimaryRegion.ObjectID)); - if(RegionState == none) - RegionState = XComGameState_WorldRegion(`XCOMHISTORY.GetGameStateForObjectID(ActivityState.PrimaryRegion.ObjectID)); - if (MissionState != none) { ExcludeIndices = GetRewardExcludeIndices(ActivityState, MissionState, NewGameState); @@ -4078,8 +3978,6 @@ static function TypicalEndActivityOnMissionSuccess(XComGameState_LWAlienActivity GiveRewards(NewGameState, MissionState, ExcludeIndices); RecordResistanceActivity(true, ActivityState, MissionState, NewGameState); - IncreaseChosenKnowledge(RegionState, NewGameState); - MissionState.RemoveEntity(NewGameState); } @@ -4240,15 +4138,6 @@ static function AddVigilanceNearby (XComGameState NewGameState, XComGameState_Wo } -static function IncreaseChosenKnowledge(XComGameState_WorldRegion RegionState, XComGameState NewGameState) -{ - local XComGameState_AdventChosen ChosenState; - - ChosenState = RegionState.GetControllingChosen(); - ChosenState = XComGameState_AdventChosen(NewGameState.ModifyStateObject(class'XComGameState_AdventChosen', ChosenState.ObjectID)); - ChosenState.ModifyKnowledgeScore(NewGameState, default.CHOSEN_KNOWLEDGE_GAIN_MISSIONS); -} - static function RecordResistanceActivity(bool Success, XComGameState_LWAlienActivity ActivityState, XComGameState_MissionSite MissionState, XComGameState NewGameState) { local XComGameStateHistory History; @@ -4695,7 +4584,6 @@ static function XComGameState_MissionSite GetRebelRaidMissionSite(XComGameState_ - defaultProperties { ProtectRegionEarlyName="ProtectRegionEarly"; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_NewTechs_LW.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_NewTechs_LW.uc index b8bf6ba4f..fc6a8088c 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_NewTechs_LW.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2StrategyElement_NewTechs_LW.uc @@ -66,8 +66,8 @@ static function array CreateTemplates() Techs.AddItem(CreateRenderTech ('RenderAdventPurifierCorpse', "img:///UILibrary_XPACK_StrategyImages.IC_Purifier", 'CorpseAdventPurifier', 600, 'AlienBiotech')); Techs.AddItem(CreateRenderTech ('RenderSpectreCorpse', "img:///UILibrary_XPACK_StrategyImages.IC_Spectre", 'CorpseSpectre', 600, 'AlienBiotech')); - Techs.AddItem(CreateRenderTech ('RenderAdventDroneWreck', "img:///UILibrary_LWOTC.LW_IC_AutopsyDrone", 'CorpseDrone', 300, 'HybridMaterials')); - Techs.AddItem(CreateRenderTech ('RenderBlutonCorpse', "img:///UILibrary_LWOTC.IC_AutopsyBluton", 'CorpseMutonElite', 700, 'AlienBiotech')); + Techs.AddItem(CreateRenderTech ('RenderAdventDroneWreck', "img:///UILibrary_LW_Overhaul.LW_IC_AutopsyDrone", 'CorpseDrone', 300, 'HybridMaterials')); + Techs.AddItem(CreateRenderTech ('RenderBlutonCorpse', "img:///UILibrary_LW_Overhaul.IC_AutopsyBluton", 'CorpseMutonElite', 700, 'AlienBiotech')); //O so many LW Overhaul Proving Grounds Projects Techs.AddItem(CreateHazMatVestProjectTemplate()); @@ -224,7 +224,7 @@ static function X2DataTemplate CreateAutopsyDroneTemplate() Template.PointsToComplete = 3000; Template.SortingTier = 2; - Template.strImage = "img:///UILibrary_LWOTC.LW_IC_AutopsyDrone"; + Template.strImage = "img:///UILibrary_LW_Overhaul.LW_IC_AutopsyDrone"; Template.Requirements.RequiredScienceScore = 10; Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; @@ -255,7 +255,7 @@ static function X2DataTemplate CreateAutopsyBlutonTemplate() Template.TechStartedNarrative = "LWNarrativeMoments_Bink.Strategy.Autopsy_MutonM3_LW"; - Template.strImage = "img:///UILibrary_LWOTC.IC_AutopsyBluton"; + Template.strImage = "img:///UILibrary_LW_Overhaul.IC_AutopsyBluton"; Template.Requirements.RequiredScienceScore = 10; Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2TargetingMethod_TopDownAOE.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2TargetingMethod_TopDownAOE.uc deleted file mode 100644 index f6a41d511..000000000 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/X2TargetingMethod_TopDownAOE.uc +++ /dev/null @@ -1,10 +0,0 @@ -// Tedster - Extending the TopDown AOE one to add the Firing Unit to the target location. - -class X2TargetingMethod_TopDownAOE extends X2TargetingMethod_TopDown; - -function GetTargetLocations(out array TargetLocations) -{ - `LWTrace("Ted Targeting method GetTargetLocations called"); - TargetLocations.Length = 0; - TargetLocations.AddItem(FiringUnit.GetLocation()); -} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWOverhaulOptions.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWOverhaulOptions.uc index e45e8ad0f..0a37734b6 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWOverhaulOptions.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWOverhaulOptions.uc @@ -25,15 +25,6 @@ var bool PauseOnRecruit_Cached; var localized string PauseOnRecruitMod; var localized string PauseOnRecruitModTooltip; - -// ***** CHosen Knowledge ***** // - -var Name StartingChosen; -var array ChosenKnowledgeGains_Randomized; - -var array ChosenNames; - - // ======================================================== // PROTOTYPE DEFINITIONS // ======================================================== @@ -43,8 +34,6 @@ function XComGameState_LWModOptions InitComponent(class NewClassType) super.InitComponent(NewClassType); PauseOnRecruit=EnablePauseOnRecruit; GrazeBandWidth=InitialGrazeBandWidth; - //InitChosenKnowledge(); - return self; } @@ -59,16 +48,6 @@ function InitModOptions() PauseOnRecruit_Cached = PauseOnRecruit; } -function InitChosenKnowledge() -{ - //Remove the Starting Chosen from the other Chosen names in the array - ChosenNames.RemoveItem(StartingChosen); - - //randomize the other two as well; - ChosenKnowledgeGains_Randomized = class'X2EventListener_ChosenEndOfMonth'.default.CHOSEN_KNOWLEDGE_GAINS; - ChosenKnowledgeGains_Randomized.RandomizeOrder(); -} - //returns the number of MechaItems set -- this is the number that will be enabled in the calling UIScreen function int SetModOptionsEnabled(out array m_arrMechaItems) { @@ -185,11 +164,6 @@ function bool GetPauseOnRecruit() return PauseOnRecruit; } -function array GetChosenKnowledgeGains_Randomized() -{ - return ChosenKnowledgeGains_Randomized; -} - // ======================================================== // GRAZE BAND // ======================================================== @@ -217,7 +191,4 @@ defaultProperties { GrazeBandWidth=10 PauseOnRecruit=false - ChosenNames.Add("Chosen_Assassin"); - ChosenNames.Add("Chosen_Warlock"); - ChosenNames.Add("Chosen_Hunter"); } diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWPersistentSquad.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWPersistentSquad.uc index 0cecff27d..2b1e3f76b 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWPersistentSquad.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWPersistentSquad.uc @@ -845,14 +845,11 @@ function UpdateInfiltrationState(bool AllowPause) if(MissionSite != none) { RegionState = MissionSite.GetWorldRegion(); - if(RegionState != none) + RegionalAI = class'XComGameState_WorldRegion_LWStrategyAI'.static.GetRegionalAI(RegionState); + if(RegionalAI.bLiberated) { - RegionalAI = class'XComGameState_WorldRegion_LWStrategyAI'.static.GetRegionalAI(RegionState); - if(RegionalAI.bLiberated) - { - InfiltrationBonusOnLiberation = class'X2StrategyElement_DefaultAlienActivities'.default.INFILTRATION_BONUS_ON_LIBERATION[`STRATEGYDIFFICULTYSETTING] / 100.0; - HoursOfInfiltration += GetHoursToFullInfiltrationCached_Static(SquadSoldiersOnMission, SquadCovertnessCached, CurrentMission) * InfiltrationBonusOnLiberation; - } + InfiltrationBonusOnLiberation = class'X2StrategyElement_DefaultAlienActivities'.default.INFILTRATION_BONUS_ON_LIBERATION[`STRATEGYDIFFICULTYSETTING] / 100.0; + HoursOfInfiltration += GetHoursToFullInfiltrationCached_Static(SquadSoldiersOnMission, SquadCovertnessCached, CurrentMission) * InfiltrationBonusOnLiberation; } } diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWReinforcements.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWReinforcements.uc index 1d1c900c7..3e276898c 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWReinforcements.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_LWReinforcements.uc @@ -80,10 +80,6 @@ var config array DIFFICULTY_MODIFIER; // Randomization amount for alert factor. Alert value will be randomized +/- this amount as a percentage. var config const float ALERT_RANDOM_FACTOR; -// Float value for scaling the reinforcement bucket fill rate. -var config float REINFORCEMENT_BUCKET_FILL_MODIFIER; -var config float BETA_STRIKE_RNF_MOD; - // How many times have we called reinforcements on this mission? var private int Count; @@ -423,35 +419,35 @@ function int CheckForReinforcements() PlayerState = class'Utilities_LW'.static.FindPlayer(eTeam_XCom); if (CanAddToBucket()) { - TmpValue = GetIncreaseFromRegion() / ReinforcementModifiers(); + TmpValue = GetIncreaseFromRegion() / BetaStrikeMod(); `LWTrace("LWRNF: Adding " $ TmpValue $ " to reinforcement bucket from region status"); BucketFiller += TmpValue; - TmpValue = GetIncreaseFromDarkEvents() / ReinforcementModifiers(); + TmpValue = GetIncreaseFromDarkEvents() / BetaStrikeMod(); `LWTrace("LWRNF: Adding " $ TmpValue $ " to reinforcement bucket from dark events"); BucketFiller += TmpValue; - TmpValue = GetIncreaseFromMods() / ReinforcementModifiers(); + TmpValue = GetIncreaseFromMods() / BetaStrikeMod(); `LWTrace("LWRNF: Adding " $ TmpValue $ " to reinforcement bucket from mods"); BucketFiller += TmpValue; - TmpValue = ReinfRules.BucketModifier / ReinforcementModifiers(); + TmpValue = ReinfRules.BucketModifier / BetaStrikeMod(); `LWTrace("LWRNF: Adding " $ TmpValue $ " to reinforcement bucket from mission/activity"); BucketFiller += TmpValue; - TmpValue = (default.DIFFICULTY_MODIFIER[`TACTICALDIFFICULTYSETTING]) / ReinforcementModifiers(); + TmpValue = (default.DIFFICULTY_MODIFIER[`TACTICALDIFFICULTYSETTING]) / BetaStrikeMod(); `LWTrace("LWRNF: Adding " $ string(TmpValue) $ " to reinforcement bucket from difficulty"); BucketFiller += TmpValue; - TmpValue = (ReinfRules.AccelerateMultiplier * BucketFiller * Spawns) / ReinforcementModifiers(); + TmpValue = (ReinfRules.AccelerateMultiplier * BucketFiller * Spawns) / BetaStrikeMod(); `LWTrace("LWRNF: Applying acceleration value multiplier " $ TmpValue $ " to this turn's reinforcement bucket fill value"); BucketFiller += TmpValue; - TmpValue = ReinfRules.BucketMultiplier / ReinforcementModifiers(); + TmpValue = ReinfRules.BucketMultiplier / BetaStrikeMod(); `LWTrace("LWRNF: Applying multiplier " $ TmpValue $ " to this turn's reinforcement bucket fill value from mission/activity"); BucketFiller *= TmpValue; - TmpValue = TimerBucketModifier / ReinforcementModifiers(); + TmpValue = TimerBucketModifier / BetaStrikeMod(); `LWTrace("LWRNF: Applying timer-based multiplier " $ TmpValue $ " to this turn's reinforcement bucket fill value"); BucketFiller *= TmpValue; @@ -472,7 +468,7 @@ function int CheckForReinforcements() if (AtTurnThreshhold(ReinfRules.ForcedReinforcementsTurn)) { `LWTRACE ("Adding 1.0 to bucket to Force Reinforcements on Turn" @ PlayerState.PlayerTurnCount); - Bucket += 1.0 / ReinforcementModifiers(); + Bucket += 1.0 / BetaStrikeMod(); } } } @@ -504,7 +500,7 @@ function int CheckForReinforcements() if (ReachedTurnThreshhold (ReinfRules.CavalryWinTurn, true)) { `LWTRACE("LWRNF: Forcing Reinforcements to punish loitering after victory"); - Bucket += 1.0 / ReinforcementModifiers(); + Bucket += 1.0 / BetaStrikeMod(); } } } @@ -525,7 +521,7 @@ function int CheckForReinforcements() { if (ReachedTurnThreshhold (ReinfRules.CavalryAbsoluteTurn)) { - Bucket += 1.0 / ReinforcementModifiers(); + Bucket += 1.0 / BetaStrikeMod(); } } } @@ -692,12 +688,12 @@ function DisableReinforcements() Disabled = true; } -//Adjusts RNF -function float ReinforcementModifiers() +//checks if second wave option for beta strike is on. +function float BetaStrikeMod() { if(bBetaStrike) { - return default.REINFORCEMENT_BUCKET_FILL_MODIFIER * default.BETA_STRIKE_RNF_MOD; + return 2.0f; } - else return default.REINFORCEMENT_BUCKET_FILL_MODIFIER; + else return 1.0f; } \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_WorldRegion_LWStrategyAI.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_WorldRegion_LWStrategyAI.uc index 4cb7df9b2..085185ed5 100644 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_WorldRegion_LWStrategyAI.uc +++ b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XComGameState_WorldRegion_LWStrategyAI.uc @@ -316,7 +316,6 @@ static function XComGameState_WorldRegion_LWStrategyAI GetRegionalAI(XComGameSta if (RegionState == none) { `LWTRACE("GetRegionalAI ERROR : NONE Region Passed"); - ScriptTrace(); return none; } if (NewGameState != none) diff --git a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XGAIBehavior_Civilian_LW.uc b/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XGAIBehavior_Civilian_LW.uc deleted file mode 100644 index 5c1e330e4..000000000 --- a/LongWarOfTheChosen/Src/LW_Overhaul/Classes/XGAIBehavior_Civilian_LW.uc +++ /dev/null @@ -1,26 +0,0 @@ -class XGAIBehavior_Civilian_LW extends XGAIBehavior_Civilian; - -function BTRunCompletePreExecute() -{ - local AvailableAction YellAction; - local int TargetIndex; - //super.BTRunCompletePreExecute(); - - // LWS Add: Configurable disabling of civilian yell - if (!class'Helpers_LW'.default.EnableCivilianYellOnPreMove) - return; - - if( !m_kPlayer.bCiviliansTargetedByAliens ) - { - // Yell before moving. - YellAction = FindAbilityByName('Yell'); - if( YellAction.AbilityObjectRef.ObjectID > 0 && YellAction.AvailableCode == 'AA_Success' ) - { - if( YellAction.AvailableTargets.Length == 0 ) - { - TargetIndex = INDEX_NONE; - } - class'XComGameStateContext_Ability'.static.ActivateAbility(YellAction, TargetIndex); - } - } -} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2AbilityCooldown_MindScorch.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2AbilityCooldown_MindScorch.uc deleted file mode 100644 index fe43f417d..000000000 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2AbilityCooldown_MindScorch.uc +++ /dev/null @@ -1,9 +0,0 @@ -class X2AbilityCooldown_MindScorch extends X2AbilityCooldown_LocalAndGlobal; - -simulated function int GetNumTurns(XComGameState_Ability kAbility, XComGameState_BaseObject AffectState, XComGameState_Item AffectWeapon, XComGameState NewGameState) -{ - if (XComGameState_Unit(AffectState).HasSoldierAbility('MindScorchDangerZone')) - return iNumTurns - 1; - - return iNumTurns; -} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet.uc index 10c9628b5..45167727c 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet.uc @@ -165,7 +165,6 @@ static function array CreateTemplates() Templates.AddItem(AddWalkFireAbility()); Templates.AddItem(WalkFireDamage()); //Additional Ability Templates.AddItem(AddPrecisionShotAbility()); - Templates.AddItem(AddPrecisionShotSnapShotAbility()); Templates.AddItem(PrecisionShotCritDamage()); //Additional Ability Templates.AddItem(AddCyclicFireAbility()); Templates.AddItem(CyclicFire2()); //Additional Ability @@ -1295,7 +1294,7 @@ static function X2AbilityTemplate AddPrecisionShotAbility() local X2AbilityCost_ActionPoints ActionPointCost; local X2AbilityCost_Ammo AmmoCost; local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityCooldown_Shared Cooldown; + local X2AbilityCooldown Cooldown; local X2Effect_Knockback KnockbackEffect; local X2Condition_Visibility VisibilityCondition; local X2Condition_UnitEffects SuppressedCondition; @@ -1304,8 +1303,6 @@ static function X2AbilityTemplate AddPrecisionShotAbility() Template.IconImage = "img:///UILibrary_LW_PerkPack.LW_AbilityPrecisionShot"; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_HideIfOtherAvailable; - Template.HideIfAvailable.AddItem('PrecisionShotSnapShot'); Template.DisplayTargetHitChance = true; Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; Template.CinescriptCameraType = "StandardGunFiring"; @@ -1328,95 +1325,8 @@ static function X2AbilityTemplate AddPrecisionShotAbility() Template.AbilityToHitCalc = ToHitCalc; Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - Cooldown = new class'X2AbilityCooldown_Shared'; - Cooldown.iNumTurns = default.PRECISION_SHOT_COOLDOWN; - Cooldown.SharingCooldownsWith.AddItem('PrecisionShotSnapShot'); - Template.AbilityCooldown = Cooldown; - - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = default.PRECISION_SHOT_AMMO_COST; - Template.AbilityCosts.AddItem(AmmoCost); - Template.bAllowAmmoEffects = true; - - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); - Template.AddShooterEffectExclusions(); - - SuppressedCondition = new class'X2Condition_UnitEffects'; - SuppressedCondition.AddExcludeEffect(class'X2Effect_Suppression'.default.EffectName, 'AA_UnitIsSuppressed'); - SuppressedCondition.AddExcludeEffect(class'X2Effect_AreaSuppression'.default.EffectName, 'AA_UnitIsSuppressed'); - Template.AbilityShooterConditions.AddItem(SuppressedCondition); - - VisibilityCondition = new class'X2Condition_Visibility'; - VisibilityCondition.bRequireGameplayVisible = true; - VisibilityCondition.bAllowSquadsight = true; - Template.AbilityTargetConditions.AddItem(VisibilityCondition); - - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); - Template.AssociatedPassives.AddItem('HoloTargeting'); - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.bAllowAmmoEffects = true; - - KnockbackEffect = new class'X2Effect_Knockback'; - KnockbackEffect.KnockbackDistance = 2; - Template.AddTargetEffect(KnockbackEffect); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - - Template.AdditionalAbilities.AddItem('PrecisionShotCritDamage'); - Template.AdditionalAbilities.AddItem('PrecisionShotSnapShot'); - - return Template; -} - -static function X2AbilityTemplate AddPrecisionShotSnapShotAbility() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2AbilityCost_Ammo AmmoCost; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityCooldown_Shared Cooldown; - local X2Effect_Knockback KnockbackEffect; - local X2Condition_Visibility VisibilityCondition; - local X2Condition_UnitEffects SuppressedCondition; - local X2Condition_AbilityProperty AbilityCondition; - local X2Condition_UnitActionPoints ActionPointCondition; - - `CREATE_X2ABILITY_TEMPLATE (Template, 'PrecisionShotSnapShot'); - Template.IconImage = "img:///UILibrary_LW_PerkPack.LW_AbilityPrecisionShot"; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY; - Template.DisplayTargetHitChance = true; - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; - Template.CinescriptCameraType = "StandardGunFiring"; - Template.TargetingMethod = class'X2TargetingMethod_OverTheShoulder'; - Template.bCrossClassEligible = true; - Template.bUsesFiringCamera = true; - Template.Hostility = eHostility_Offensive; - Template.bPreventsTargetTeleport = false; - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); - Template.AbilityTargetStyle = default.SimpleSingleTarget; - - ActionPointCost = new class 'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 1; - ActionPointCost.bConsumeAllPoints = true; - Template.AbilityCosts.AddItem(ActionPointCost); - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - ToHitCalc.BuiltInCritMod = default.PRECISION_SHOT_CRIT_BONUS; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Cooldown = new class'X2AbilityCooldown_Shared'; + Cooldown = new class'X2AbilityCooldown'; Cooldown.iNumTurns = default.PRECISION_SHOT_COOLDOWN; - Cooldown.SharingCooldownsWith.AddItem('PrecisionShot'); Template.AbilityCooldown = Cooldown; AmmoCost = new class'X2AbilityCost_Ammo'; @@ -1447,10 +1357,6 @@ static function X2AbilityTemplate AddPrecisionShotSnapShotAbility() KnockbackEffect.KnockbackDistance = 2; Template.AddTargetEffect(KnockbackEffect); - AbilityCondition = new class'X2Condition_AbilityProperty'; - AbilityCondition.OwnerHasSoldierAbilities.AddItem('SnapShot'); - Template.AbilityShooterConditions.Additem(AbilityCondition); - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; @@ -1461,13 +1367,6 @@ static function X2AbilityTemplate AddPrecisionShotSnapShotAbility() Template.AdditionalAbilities.AddItem('PrecisionShotCritDamage'); - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.StandardActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.RunAndGunActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - return Template; } @@ -3081,7 +2980,6 @@ static function X2AbilityTemplate AddDamageControlAbility() local X2AbilityTemplate Template; local X2AbilityTrigger_EventListener EventListener; local X2Effect_DamageControl DamageControlEffect; - local X2AbilityCooldown Cooldown; `CREATE_X2ABILITY_TEMPLATE(Template, 'DamageControl'); Template.IconImage = "img:///UILibrary_LW_PerkPack.LW_AbilityDamageControl"; @@ -3090,7 +2988,7 @@ static function X2AbilityTemplate AddDamageControlAbility() Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; Template.AbilityToHitCalc = default.DeadEye; Template.AbilityTargetStyle = default.SelfTarget; - Template.bShowActivation = false; + Template.bShowActivation = true; Template.bSkipFireAction = true; //Template.bIsPassive = true; Template.bDisplayInUITooltip = true; @@ -3105,17 +3003,11 @@ static function X2AbilityTemplate AddDamageControlAbility() EventListener.ListenerData.Filter = eFilter_Unit; Template.AbilityTriggers.AddItem(EventListener); - // Add a cooldown to reduce flyover spam - Cooldown = new class'X2AbilityCooldown'; - Cooldown.iNumTurns = 1; - Template.AbilityCooldown = Cooldown; - DamageControlEffect = new class'X2Effect_DamageControl'; DamageControlEffect.BuildPersistentEffect(default.DAMAGE_CONTROL_DURATION,false,true,,eGameRule_PlayerTurnBegin); DamageControlEffect.SetDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, true,,Template.AbilitySourceName); DamageControlEffect.DuplicateResponse = eDupe_Refresh; DamageControlEffect.BonusArmor = default.DAMAGE_CONTROL_BONUS_ARMOR; - DamageControlEffect.Flyover = Template.LocFriendlyName; Template.AddTargetEffect(DamageControlEffect); diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet2.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet2.uc index 7316c1a54..612c83f16 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet2.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_PerkPackAbilitySet2.uc @@ -146,7 +146,6 @@ static function X2AbilityTemplate AddSnapShot() //Template.OverrideAbilities.AddItem('SniperStandardFire'); Template.AdditionalAbilities.AddItem('SnapShotAimModifier'); - Template.AdditionalAbilities.AddItem('WeaponHandling_LW'); //Template.AdditionalAbilities.AddItem('SnapShotOverwatch'); return Template; @@ -815,25 +814,6 @@ static function X2AbilityTemplate AddBastionPassive() return PurePassive('BastionPassive', "img:///UILibrary_LW_PerkPack.LW_AbilityBastion", , 'eAbilitySource_Psionic'); } -final static function EventListenerReturn SolaceBastionCleanseListener(Object EventData, Object EventSource, XComGameState GameState, Name EventID, Object CallbackData) -{ - local XComGameState_Unit TargetUnit; - local XComGameState_Ability SourceAbility; - - SourceAbility = XComGameState_Ability(CallbackData); - if (SourceAbility == None) - { - return ELR_NoInterrupt; - } - - foreach `XCOMHISTORY.IterateByClassType(class'XComGameState_Unit', TargetUnit, , , GameState.HistoryIndex) - { - SourceAbility.AbilityTriggerAgainstSingleTarget(TargetUnit.GetReference(), false); - } - - return ELR_NoInterrupt; -} - static function X2AbilityTemplate AddBastionCleanse() { local X2AbilityTemplate Template; @@ -857,7 +837,7 @@ static function X2AbilityTemplate AddBastionCleanse() EventListener.ListenerData.Deferral = ELD_OnStateSubmitted; EventListener.ListenerData.EventID = 'UnitMoveFinished'; EventListener.ListenerData.Filter = eFilter_None; - EventListener.ListenerData.EventFn = SolaceBastionCleanseListener; // keep this, since it's generically just calling the associate ability + EventListener.ListenerData.EventFn = class'XComGameState_Ability'.static.SolaceCleanseListener; // keep this, since it's generically just calling the associate ability Template.AbilityTriggers.AddItem(EventListener); //removes any ongoing effects diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_XMBPerkAbilitySet.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_XMBPerkAbilitySet.uc index 4ad6925a3..e46c3ee99 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_XMBPerkAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Ability_XMBPerkAbilitySet.uc @@ -95,16 +95,11 @@ var config int MAIM_COOLDOWN; var config int SCRAP_METAL_AMMO_AMOUNT; -var config int OVERBEARING_SUPERIORITY_CRIT; - -var config float TRIGGER_BOT_DAMAGE_PENALTY; - var config int MOVING_TARGET_DEFENSE; var config int MOVING_TARGET_DODGE; var config int COMBATREADINESS_DEF; var config int COMBATREADINESS_AIM; -var config float COMBAT_READINESS_EXPLOSIVE_DR; var config int XCOM_BLOOD_THIRST_DURATION; @@ -124,11 +119,6 @@ var const string CombatReadinessBonusText; var config int CRUSADER_WOUND_HP_REDUCTTION; -var config float HERO_SLAYER_DMG; - -var config int PSYCHOTIC_RAGE_BELOW_THRESHOLD; -var config int PSYCHOTIC_RAGE_DMG_BONUS; - var config array COMBAT_READINESS_EFFECTS_TO_REMOVE; var config array BANZAI_EFFECTS_TO_REMOVE; @@ -192,10 +182,6 @@ static function array CreateTemplates() Templates.AddItem(PrimaryReturnFireShot()); Templates.AddItem(DeadeyeSnapshotAbility()); Templates.AddItem(DeadeyeSnapShotDamage()); - Templates.AddItem(RapidFireSnapshotAbility()); - Templates.AddItem(RapidFireSnapShot2()); - Templates.AddItem(ChainShotSnapShot()); - Templates.AddItem(ChainShotSnapShot2()); Templates.AddItem(PsychoticRage()); Templates.AddItem(PreciseStrike()); @@ -224,11 +210,7 @@ static function array CreateTemplates() Templates.AddItem(Magnum()); Templates.AddItem(CrusaderRage()); Templates.AddItem(QuickdrawMobility()); - Templates.AddItem(HeroSlayer_LW()); - Templates.AddItem(TriggerBot()); - Templates.AddItem(TriggerBotShot()); - Templates.AddItem(TriggerBotDamage()); @@ -2029,7 +2011,7 @@ static function X2AbilityTemplate LightningSlash() local X2AbilityToHitCalc_StandardMelee StandardMelee; local X2AbilityTarget_MovingMelee MeleeTarget; local X2Effect_ApplyWeaponDamage WeaponDamageEffect; - //local array SkipExclusions; + local array SkipExclusions; local X2AbilityCooldown Cooldown; local X2AbilityCost_ActionPoints ActionPointCost; @@ -2075,8 +2057,8 @@ static function X2AbilityTemplate LightningSlash() // Shooter Conditions // Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - //SkipExclusions.AddItem(class'X2StatusEffects'.default.BurningName); - Template.AddShooterEffectExclusions(); + SkipExclusions.AddItem(class'X2StatusEffects'.default.BurningName); + Template.AddShooterEffectExclusions(SkipExclusions); // Damage Effect // @@ -2286,171 +2268,6 @@ static function X2AbilityTemplate PrimaryReturnFireShot() return Template; } -static function X2AbilityTemplate TriggerBot() -{ - local X2AbilityTemplate Template; - local X2AbilityTargetStyle TargetStyle; - local X2AbilityTrigger Trigger; - local X2Effect_ReturnFire FireEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'TriggerBot'); - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_returnfire"; - - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - - Template.AbilityToHitCalc = default.DeadEye; - - TargetStyle = new class'X2AbilityTarget_Self'; - Template.AbilityTargetStyle = TargetStyle; - - Trigger = new class'X2AbilityTrigger_UnitPostBeginPlay'; - Template.AbilityTriggers.AddItem(Trigger); - - FireEffect = new class'X2Effect_ReturnFire'; - FireEffect.BuildPersistentEffect(1, true, false, false, eGameRule_PlayerTurnBegin); - FireEffect.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage,,,Template.AbilitySourceName); - FireEffect.EffectName = 'TriggerBotShot'; - FireEffect.AbilityToActivate = 'TriggerBotShot'; - FireEffect.bDirectAttackOnly = true; - FireEffect.bOnlyWhenAttackMisses = false; - Template.AddTargetEffect(FireEffect); - - Template.AdditionalAbilities.AddItem('TriggerBotShot'); - Template.AdditionalAbilities.AddItem('TriggerBotDamage'); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - // NOTE: No visualization on purpose! - - Template.bCrossClassEligible = false; // this can only work with pistols, which only sharpshooters have - - return Template; -} - - -static function X2AbilityTemplate TriggerBotShot() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_ReserveActionPoints ReserveActionPointCost; - local X2Condition_UnitProperty ShooterCondition; - local X2AbilityTarget_Single SingleTarget; - local X2AbilityTrigger_EventListener Trigger; - local X2Effect_Knockback KnockbackEffect; - local array SkipExclusions; - local X2Condition_Visibility TargetVisibilityCondition; - local X2AbilityCost_Ammo AmmoCost; - - - `CREATE_X2ABILITY_TEMPLATE(Template, 'TriggerBotShot'); - - Template.bDontDisplayInAbilitySummary = true; - ReserveActionPointCost = new class'X2AbilityCost_ReserveActionPoints'; - ReserveActionPointCost.iNumPoints = 1; - ReserveActionPointCost.AllowedTypes.AddItem(class'X2CharacterTemplateManager'.default.PistolOverwatchReserveActionPoint); - ReserveActionPointCost.AllowedTypes.AddItem(class'X2CharacterTemplateManager'.default.ReturnFireActionPoint); - Template.AbilityCosts.AddItem(ReserveActionPointCost); - - // pistols are typically infinite ammo weapons which will bypass the ammo cost automatically. - // but if this ability is attached to a weapon that DOES use ammo, it should use it. - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 1; - Template.AbilityCosts.AddItem(AmmoCost); - - Template.AbilityToHitCalc = default.DeadEye; - - Template.AbilityTargetConditions.AddItem(default.LivingHostileUnitDisallowMindControlProperty); - TargetVisibilityCondition = new class'X2Condition_Visibility'; - TargetVisibilityCondition.bRequireGameplayVisible = true; - TargetVisibilityCondition.bRequireBasicVisibility = true; - TargetVisibilityCondition.bDisablePeeksOnMovement = false; //Don't use peek tiles for over watch shots - Template.AbilityTargetConditions.AddItem(TargetVisibilityCondition); - - Template.AbilityTargetConditions.AddItem(new class'X2Condition_EverVigilant'); - Template.AbilityTargetConditions.AddItem(class'X2Ability_DefaultAbilitySet'.static.OverwatchTargetEffectsCondition()); - - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - ShooterCondition = new class'X2Condition_UnitProperty'; - ShooterCondition.ExcludeConcealed = true; - Template.AbilityShooterConditions.AddItem(ShooterCondition); - - SkipExclusions.AddItem(class'X2AbilityTemplateManager'.default.DisorientedName); - SkipExclusions.AddItem(class'X2StatusEffects'.default.BurningName); - Template.AddShooterEffectExclusions(SkipExclusions); - - SingleTarget = new class'X2AbilityTarget_Single'; - SingleTarget.OnlyIncludeTargetsInsideWeaponRange = false; - Template.AbilityTargetStyle = SingleTarget; - - //Trigger on movement - interrupt the move - Trigger = new class'X2AbilityTrigger_EventListener'; - Trigger.ListenerData.EventID = 'ObjectMoved'; - Trigger.ListenerData.Deferral = ELD_OnStateSubmitted; - Trigger.ListenerData.Filter = eFilter_None; - Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.TypicalOverwatchListener; - Template.AbilityTriggers.AddItem(Trigger); - - Template.CinescriptCameraType = "StandardGunFiring"; - - Template.AbilitySourceName = 'eAbilitySource_Standard'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_overwatch"; - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.PISTOL_OVERWATCH_PRIORITY; - Template.bDisplayInUITooltip = false; - Template.bDisplayInUITacticalText = false; - Template.DisplayTargetHitChance = false; - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.bAllowFreeFireWeaponUpgrade = false; - Template.bAllowAmmoEffects = true; - - // Damage Effect - // - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.bAllowBonusWeaponEffects = true; - - KnockbackEffect = new class'X2Effect_Knockback'; - KnockbackEffect.KnockbackDistance = 2; - Template.AddTargetEffect(KnockbackEffect); - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_returnfire"; - Template.bShowPostActivation = true; - Template.bFrameEvenWhenUnitIsHidden = true; - Template.DefaultSourceItemSlot = eInvSlot_PrimaryWeapon; - - return Template; -} - -static function X2AbilityTemplate TriggerBotDamage() -{ - local X2AbilityTemplate Template; - local X2Effect_AbilityDamageMult DamagePenalty; - - `CREATE_X2ABILITY_TEMPLATE (Template, 'TriggerBotDamage'); - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_momentum"; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - DamagePenalty = new class'X2Effect_AbilityDamageMult'; - DamagePenalty.Penalty = true; - DamagePenalty.Mult = true; - DamagePenalty.DamageMod = default.TRIGGER_BOT_DAMAGE_PENALTY; - DamagePenalty.ActiveAbility = 'TriggerBotShot'; - DamagePenalty.BuildPersistentEffect(1, true, false, false); - Template.AddTargetEffect(DamagePenalty); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - - return Template; -} - static function X2AbilityTemplate DeadeyeSnapshotAbility() { local X2AbilityTemplate Template; @@ -2569,334 +2386,6 @@ static function X2AbilityTemplate DeadeyeSnapShotDamage() return Template; } -static function X2AbilityTemplate RapidFireSnapshotAbility() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2AbilityCost_Ammo AmmoCost; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityCooldown_Shared Cooldown; - local X2Condition_AbilityProperty AbilityCondition; - local X2Condition_UnitActionPoints ActionPointCondition; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'RapidFireSnapShot'); - - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 1; - ActionPointCost.bConsumeAllPoints = true; - Template.AbilityCosts.AddItem(ActionPointCost); - - Template.Hostility = eHostility_Offensive; - - - // require 2 ammo to be present so that both shots can be taken - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 2; - AmmoCost.bFreeCost = true; - Template.AbilityCosts.AddItem(AmmoCost); - // actually charge 1 ammo for this shot. the 2nd shot will charge the extra ammo. - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 1; - Template.AbilityCosts.AddItem(AmmoCost); - - Cooldown = new class'X2AbilityCooldown_Shared'; - Cooldown.iNumTurns = 1; - Cooldown.SharingCooldownsWith.AddItem('RapidFire'); - Template.AbilityCooldown = Cooldown; - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - ToHitCalc.BuiltInHitMod = class'X2Ability_RangerAbilitySet'.default.RAPIDFIRE_AIM; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Template.AbilityTargetStyle = default.SimpleSingleTarget; - - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AddShooterEffectExclusions(); - - Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); - Template.AbilityTargetConditions.AddItem(default.GameplayVisibilityCondition); - - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); - Template.AssociatedPassives.AddItem('HoloTargeting'); - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.bAllowAmmoEffects = true; - Template.bAllowBonusWeaponEffects = true; - - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); - - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_COLONEL_PRIORITY; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_rapidfire"; - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; - - AbilityCondition = new class'X2Condition_AbilityProperty'; - AbilityCondition.OwnerHasSoldierAbilities.AddItem('SnapShot'); - Template.AbilityShooterConditions.Additem(AbilityCondition); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - Template.AdditionalAbilities.AddItem('RapidFireSnapShot2'); - Template.PostActivationEvents.AddItem('RapidFireSnapShot2'); - - Template.bCrossClassEligible = true; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - Template.bFrameEvenWhenUnitIsHidden = true; - - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.StandardActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.RunAndGunActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - - return Template; -} - -static function X2AbilityTemplate RapidFireSnapShot2() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_Ammo AmmoCost; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityTrigger_EventListener Trigger; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'RapidFireSnapShot2'); - - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 1; - Template.AbilityCosts.AddItem(AmmoCost); - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - ToHitCalc.BuiltInHitMod = class'X2Ability_RangerAbilitySet'.default.RAPIDFIRE_AIM; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Template.AbilityTargetStyle = default.SimpleSingleTarget; - - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AddShooterEffectExclusions(); - - Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); - - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); - Template.AssociatedPassives.AddItem('HoloTargeting'); - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.bAllowAmmoEffects = true; - Template.bAllowBonusWeaponEffects = true; - - Trigger = new class'X2AbilityTrigger_EventListener'; - Trigger.ListenerData.Deferral = ELD_OnStateSubmitted; - Trigger.ListenerData.EventID = 'RapidFireSnapShot2'; - Trigger.ListenerData.Filter = eFilter_Unit; - Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.AbilityTriggerEventListener_OriginalTarget; - Template.AbilityTriggers.AddItem(Trigger); - - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_COLONEL_PRIORITY; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_rapidfire"; - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.MergeVisualizationFn = SequentialShot_MergeVisualization; - - Template.bShowActivation = true; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; -//BEGIN AUTOGENERATED CODE: Template Overrides 'RapidFire2' - Template.bFrameEvenWhenUnitIsHidden = true; -//END AUTOGENERATED CODE: Template Overrides 'RapidFire2' - - return Template; -} - -static function X2AbilityTemplate ChainShotSnapShot() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_Ammo AmmoCost; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityCooldown_Shared Cooldown; - local X2Condition_AbilityProperty AbilityCondition; - local X2AbilityCost_ActionPoints ActionPointCost; - local X2Condition_UnitActionPoints ActionPointCondition; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'ChainShotSnapShot'); - - ActionPointCost = new class'X2AbilityCost_ActionPoints'; - ActionPointCost.iNumPoints = 1; - ActionPointCost.bConsumeAllPoints = true; - Template.AbilityCosts.AddItem(ActionPointCost); - - Template.Hostility = eHostility_Offensive; - - Cooldown = new class'X2AbilityCooldown_Shared'; - Cooldown.iNumTurns = class'X2Ability_GrenadierAbilitySet'.default.CHAINSHOT_COOLDOWN; - Cooldown.SharingCooldownsWith.AddItem('ChainShot'); - Template.AbilityCooldown = Cooldown; - - // require 2 ammo to be present so that both shots can be taken - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 2; - AmmoCost.bFreeCost = true; - Template.AbilityCosts.AddItem(AmmoCost); - // actually charge 1 ammo for this shot. the 2nd shot will charge the extra ammo. - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 1; - Template.AbilityCosts.AddItem(AmmoCost); - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - ToHitCalc.BuiltInHitMod = class'X2Ability_GrenadierAbilitySet'.default.CHAINSHOT_HIT_MOD; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Template.AbilityTargetStyle = default.SimpleSingleTarget; - - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AddShooterEffectExclusions(); - - Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); - Template.AbilityTargetConditions.AddItem(default.GameplayVisibilityCondition); - - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); - Template.AssociatedPassives.AddItem('HoloTargeting'); - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.AddTargetEffect(class'X2Ability'.default.WeaponUpgradeMissDamage); - Template.bAllowAmmoEffects = true; - Template.bAllowBonusWeaponEffects = true; - - Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); - - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_ShowIfAvailable; - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_chainshot"; - Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.BuildInterruptGameStateFn = TypicalAbility_BuildInterruptGameState; - - Template.AdditionalAbilities.AddItem('ChainShotSnapShot2'); - Template.PostActivationEvents.AddItem('ChainShotSnapShot2'); - - AbilityCondition = new class'X2Condition_AbilityProperty'; - AbilityCondition.OwnerHasSoldierAbilities.AddItem('SnapShot'); - Template.AbilityShooterConditions.Additem(AbilityCondition); - - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.StandardActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - ActionPointCondition = new class'X2Condition_UnitActionPoints'; - ActionPointCondition.AddActionPointCheck(1,class'X2CharacterTemplateManager'.default.RunAndGunActionPoint,false,eCheck_LessThanOrEqual); - Template.AbilityShooterConditions.AddItem(ActionPointCondition); - - Template.DamagePreviewFn = ChainShotSnapShotDamagePreview; - Template.bCrossClassEligible = true; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - - -//BEGIN AUTOGENERATED CODE: Template Overrides 'ChainShot' - Template.bFrameEvenWhenUnitIsHidden = true; -//END AUTOGENERATED CODE: Template Overrides 'ChainShot' - - return Template; -} - -static function X2AbilityTemplate ChainShotSnapShot2() -{ - local X2AbilityTemplate Template; - local X2AbilityCost_Ammo AmmoCost; - local X2AbilityToHitCalc_StandardAim ToHitCalc; - local X2AbilityTrigger_EventListener Trigger; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'ChainShotSnapShot2'); - - AmmoCost = new class'X2AbilityCost_Ammo'; - AmmoCost.iAmmo = 1; - Template.AbilityCosts.AddItem(AmmoCost); - - ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; - ToHitCalc.BuiltInHitMod = class'X2Ability_GrenadierAbilitySet'.default.CHAINSHOT_HIT_MOD; - Template.AbilityToHitCalc = ToHitCalc; - Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; - - Template.AbilityTargetStyle = default.SimpleSingleTarget; - - Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); - Template.AddShooterEffectExclusions(); - - Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); - - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); - Template.AssociatedPassives.AddItem('HoloTargeting'); - Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect()); - Template.AddTargetEffect(class'X2Ability'.default.WeaponUpgradeMissDamage); - Template.bAllowAmmoEffects = true; - Template.bAllowBonusWeaponEffects = true; - - Trigger = new class'X2AbilityTrigger_EventListener'; - Trigger.ListenerData.Deferral = ELD_OnStateSubmitted; - Trigger.ListenerData.EventID = 'ChainShotSnapShot2'; - Trigger.ListenerData.Filter = eFilter_Unit; - Trigger.ListenerData.EventFn = class'XComGameState_Ability'.static.ChainShotListener; - Template.AbilityTriggers.AddItem(Trigger); - - Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_CAPTAIN_PRIORITY; - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_NeverShow; - Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_chainshot"; - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; - Template.MergeVisualizationFn = SequentialShot_MergeVisualization; - Template.bShowActivation = true; - - Template.SuperConcealmentLoss = class'X2AbilityTemplateManager'.default.SuperConcealmentStandardShotLoss; - Template.ChosenActivationIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotChosenActivationIncreasePerUse; - Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.StandardShotLostSpawnIncreasePerUse; - - //BEGIN AUTOGENERATED CODE: Template Overrides 'ChainShot2' - Template.bFrameEvenWhenUnitIsHidden = true; - //END AUTOGENERATED CODE: Template Overrides 'ChainShot2' - - return Template; -} - -function bool ChainShotSnapShotDamagePreview(XComGameState_Ability AbilityState, StateObjectReference TargetRef, out WeaponDamageValue MinDamagePreview, out WeaponDamageValue MaxDamagePreview, out int AllowsShield) -{ - local XComGameState_Unit AbilityOwner; - local StateObjectReference ChainShot2Ref; - local XComGameState_Ability ChainShot2Ability; - local XComGameStateHistory History; - - AbilityState.NormalDamagePreview(TargetRef, MinDamagePreview, MaxDamagePreview, AllowsShield); - - History = `XCOMHISTORY; - AbilityOwner = XComGameState_Unit(History.GetGameStateForObjectID(AbilityState.OwnerStateObject.ObjectID)); - ChainShot2Ref = AbilityOwner.FindAbility('ChainShotSnapShot2'); - ChainShot2Ability = XComGameState_Ability(History.GetGameStateForObjectID(ChainShot2Ref.ObjectID)); - if (ChainShot2Ability == none) - { - `RedScreenOnce("Unit has ChainShot but is missing ChainShot2. Not good. -jbouscher @gameplay"); - } - else - { - ChainShot2Ability.NormalDamagePreview(TargetRef, MinDamagePreview, MaxDamagePreview, AllowsShield); - } - return true; -} - static function X2AbilityTemplate YouCannotHide() { local XMBEffect_ConditionalBonus Effect; @@ -2905,7 +2394,7 @@ static function X2AbilityTemplate YouCannotHide() Effect = new class'XMBEffect_ConditionalBonus'; // The bonus adds the aim and crit chance - Effect.AddToHitModifier(30, eHit_Success); + Effect.AddToHitModifier(100, eHit_Success); Effect.AbilityTargetConditions.AddItem(default.MatchingWeaponCondition); @@ -2923,15 +2412,15 @@ static function X2AbilityTemplate PsychoticRage() // X2Condition_UnitStatCheck can also check absolute values rather than percentages, by // using "false" instead of "true" for the last argument. Condition = new class'X2Condition_UnitStatCheck'; - Condition.AddCheckStat(eStat_HP, default.PSYCHOTIC_RAGE_BELOW_THRESHOLD, eCheck_LessThan,,, true); + Condition.AddCheckStat(eStat_HP, 36, eCheck_LessThan,,, true); // Create a conditional bonus effect Effect = new class'XMBEffect_ConditionalBonus'; //Need to add for all of them because apparently if you crit you don't hit lol - Effect.AddPercentDamageModifier(default.PSYCHOTIC_RAGE_DMG_BONUS, eHit_Success); - Effect.AddPercentDamageModifier(default.PSYCHOTIC_RAGE_DMG_BONUS, eHit_Graze); - Effect.AddPercentDamageModifier(default.PSYCHOTIC_RAGE_DMG_BONUS, eHit_Crit); + Effect.AddPercentDamageModifier(50, eHit_Success); + Effect.AddPercentDamageModifier(50, eHit_Graze); + Effect.AddPercentDamageModifier(50, eHit_Crit); Effect.EffectName = 'PsychoticRage_Bonus'; // The effect only applies while wounded @@ -3103,7 +2592,6 @@ static function X2AbilityTemplate OverbearingSuperiority() { local X2AbilityTemplate Template; local XMBEffect_AbilityCostRefund SuperiorityEffect; - local X2Effect_ToHitModifier ToHitModifier; // Create an effect that refunds the action point cost of abilities SuperiorityEffect = new class'XMBEffect_AbilityCostRefund'; @@ -3122,18 +2610,6 @@ static function X2AbilityTemplate OverbearingSuperiority() // Create the template for an activated ability using a helper function. Template = Passive('OverbearingSuperiority_LW', "img:///UILibrary_XPerkIconPack.UIPerk_enemy_crit_chevron_x3", true, SuperiorityEffect); - ToHitModifier = new class'X2Effect_ToHitModifier'; - ToHitModifier.BuildPersistentEffect(1, true, true, true); - ToHitModifier.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, false,,Template.AbilitySourceName); - ToHitModifier.AddEffectHitModifier(eHit_Crit, default.OVERBEARING_SUPERIORITY_CRIT, Template.LocFriendlyName,,,,,,,,true); - Template.AddTargetEffect(ToHitModifier); - - ToHitModifier = new class'X2Effect_ToHitModifier'; - ToHitModifier.BuildPersistentEffect(1, true, true, true); - ToHitModifier.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, false,,Template.AbilitySourceName); - ToHitModifier.AddEffectHitModifier(eHit_Crit, default.OVERBEARING_SUPERIORITY_CRIT, Template.LocFriendlyName,,,,,,,,true); - Template.AddTargetEffect(ToHitModifier); - Template.bDisplayInUITooltip = true; Template.bDisplayInUITacticalText = true; // Don't allow multiple ability-refunding abilities to be used in the same turn (e.g. Slam Fire and Serial) @@ -3413,12 +2889,10 @@ static function X2AbilityTemplate AddCombatReadiness() { local X2AbilityTemplate Template; local XMBEffect_ConditionalBonus DefenseBonus; - //local X2Effect_PersistentStatChange AimBonus; + local X2Effect_PersistentStatChange AimBonus; local X2Effect_RemoveEffects RemoveEffects; local name EffectName; local XMBCondition_CoverType CoverCondition; - local X2Effect_Formidable ExplosiveDREffect; - `CREATE_X2ABILITY_TEMPLATE(Template, 'CombatReadiness'); //BEGIN AUTOGENERATED CODE: Template Overrides 'FullThrottle' Template.IconImage = "img:///UILibrary_XPerkIconPack.UIPerk_command_defense"; @@ -3447,21 +2921,13 @@ static function X2AbilityTemplate AddCombatReadiness() DefenseBonus.EffectName = 'CombatReadinessDef'; Template.AddTargetEffect(DefenseBonus); - /* AimBonus = new class 'X2Effect_PersistentStatChange'; AimBonus.AddPersistentStatChange(eStat_Offense, default.COMBATREADINESS_AIM); AimBonus.BuildPersistentEffect(1, false, true, false, eGameRule_PlayerTurnEnd); AimBonus.DuplicateResponse = eDupe_Allow; AimBonus.EffectName = 'CombatReadiness'; Template.AddTargetEffect(AimBonus); - */ - ExplosiveDREffect = new class'X2Effect_Formidable'; - ExplosiveDREffect.ExplosiveDamageReduction = default.COMBAT_READINESS_EXPLOSIVE_DR; - ExplosiveDREffect.DuplicateResponse = eDupe_Allow; - ExplosiveDREffect.BuildPersistentEffect(1, true, false); - ExplosiveDREffect.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyHelpText(), Template.IconImage,false,,Template.AbilitySourceName); - Template.AddTargetEffect(ExplosiveDREffect); RemoveEffects = new class'X2Effect_RemoveEffects'; foreach default.COMBAT_READINESS_EFFECTS_TO_REMOVE(EffectName) { @@ -3680,34 +3146,6 @@ static function X2AbilityTemplate CrusaderRage() return Template; } -static function X2AbilityTemplate HeroSlayer_LW() -{ - local X2AbilityTemplate Template; - local X2Effect_HeroSlayer DamageEffect; - - // Icon Properties - `CREATE_X2ABILITY_TEMPLATE(Template, 'HeroSlayer_LW'); - Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_ambush"; - - Template.AbilitySourceName = 'eAbilitySource_Perk'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - DamageEffect = new class'X2Effect_HeroSlayer'; - DamageEffect.DmgMod = default.HERO_SLAYER_DMG; - DamageEffect.BuildPersistentEffect(1, true, false, false); - DamageEffect.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, false,,Template.AbilitySourceName); - Template.AddTargetEffect(DamageEffect); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - // NOTE: No visualization on purpose! - - return Template; -} defaultproperties diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Condition_OwnerDoesNotHaveAbility.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Condition_OwnerDoesNotHaveAbility.uc deleted file mode 100644 index 4a47931a6..000000000 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Condition_OwnerDoesNotHaveAbility.uc +++ /dev/null @@ -1,19 +0,0 @@ -class X2Condition_OwnerDoesNotHaveAbility extends X2Condition; - -var name AbilityName; - -event name CallMeetsConditionWithSource(XComGameState_BaseObject kTarget, XComGameState_BaseObject kSource) -{ - local XComGameState_Unit Source; - - Source = XComGameState_Unit(kSource); - - if (Source != None) - { - if (!Source.HasSoldierAbility(AbilityName)) - { - return 'AA_Success'; - } - } - return 'AA_AbilityUnavailable'; -} diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2DownloadableContentInfo_LWPerkPack.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2DownloadableContentInfo_LWPerkPack.uc index 52bdf3989..9ba4a5ef0 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2DownloadableContentInfo_LWPerkPack.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2DownloadableContentInfo_LWPerkPack.uc @@ -26,13 +26,6 @@ static event OnLoadedSavedGame() /// static event InstallNewCampaign(XComGameState StartState) { - //short circuit if in shell: - if(class'WorldInfo'.static.GetWorldInfo().GRI.GameClass.name == 'XComShell') - { - `LWTrace("InstallNewCampaign called in Shell, aborting."); - return; - } - class'XComGameState_LWPerkPackOptions'.static.CreateModSettingsState_NewCampaign(class'XComGameState_LWPerkPackOptions', StartState); } @@ -61,10 +54,6 @@ static function UpdateBaseGameThrowGrenade() X2AbilityMultiTarget_Radius(LaunchGrenadeAbilityTemplate.AbilityMultiTargetStyle).AddAbilityBonusRadius('VolatileMix', 1.0); X2AbilityMultiTarget_Radius(ProximityMineAbilityTemplate.AbilityMultiTargetStyle).AddAbilityBonusRadius('VolatileMix', 1.0); - X2AbilityMultiTarget_Radius(ThrowGrenadeAbilityTemplate.AbilityMultiTargetStyle).AddAbilityBonusRadius('MistyMadness_LW', 2.0); - X2AbilityMultiTarget_Radius(LaunchGrenadeAbilityTemplate.AbilityMultiTargetStyle).AddAbilityBonusRadius('MistyMadness_LW', 2.0); - X2AbilityMultiTarget_Radius(ProximityMineAbilityTemplate.AbilityMultiTargetStyle).AddAbilityBonusRadius('MistyMadness_LW', 2.0); - `PPDEBUG ("Updated Grenades to respect VM radius increase"); } @@ -197,12 +186,6 @@ static function bool AbilityTagExpandHandler_CH(string InString, out string OutS case 'MAIM_COOLDOWN': OutString = string(class'X2Ability_XMBPerkAbilitySet'.default.MAIM_COOLDOWN); return true; - case 'OVERBEARING_SUPERIORITY_CRIT': - OutString = string(class'X2Ability_XMBPerkAbilitySet'.default.OVERBEARING_SUPERIORITY_CRIT); - return true; - case 'TRIGGER_BOT_DAMAGE_PENALTY': - OutString = string(int(class'X2Ability_XMBPerkAbilitySet'.default.TRIGGER_BOT_DAMAGE_PENALTY * 100)); - return true; case 'LICKYOURWOUNDS_HEALAMOUNT': OutString = string(class'X2Ability_XMBPerkAbilitySet'.default.LICKYOURWOUNDS_HEALAMOUNT); return true; @@ -453,15 +436,6 @@ static function bool AbilityTagExpandHandler_CH(string InString, out string OutS case 'MOVING_TARGET_DODGE': Outstring = string(class'X2Ability_XMBPerkAbilitySet'.default.MOVING_TARGET_DODGE); return true; - case 'HERO_SLAYER_DMG': - Outstring = string(int(class'X2Ability_XMBPerkAbilitySet'.default.HERO_SLAYER_DMG * 100)); - return true; - case 'PSYCHOTIC_RAGE_BELOW_THRESHOLD': - Outstring = string(class'X2Ability_XMBPerkAbilitySet'.default.PSYCHOTIC_RAGE_BELOW_THRESHOLD); - return true; - case 'PSYCHOTIC_RAGE_DMG_BONUS': - Outstring = string(class'X2Ability_XMBPerkAbilitySet'.default.PSYCHOTIC_RAGE_DMG_BONUS); - return true; default: return false; } diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ApplyHarborWaveDamage.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ApplyHarborWaveDamage.uc index edf96652c..244a3ee32 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ApplyHarborWaveDamage.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ApplyHarborWaveDamage.uc @@ -10,16 +10,13 @@ class X2Effect_ApplyHarborWaveDamage extends X2Effect_ApplyWeaponDamage config(G //Grobo: This Feels like a heresy but I want THIS specific effect to trigger RIGHT NOW simulated protected function OnEffectAdded(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState, XComGameState_Effect NewEffectState) { - + /* local XComGameState_Unit SourceUnit; super.OnEffectAdded(ApplyEffectParameters, kNewTargetState, NewGameState, NewEffectState); SourceUnit = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(ApplyEffectParameters.SourceStateObjectRef.ObjectID)); - if(SourceUnit.HasSoldierAbility('BloodBath_LW')) - { - `XEVENTMGR.TriggerEvent('HarborWaveDealtDamage', SourceUnit, SourceUnit, NewGameState); - } - + //`XEVENTMGR.TriggerEvent('HarborWaveDealtDamage', SourceUnit, SourceUnit, NewGameState); + */ } diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_BloodThirst.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_BloodThirst.uc index f417714f4..95906f320 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_BloodThirst.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_BloodThirst.uc @@ -9,7 +9,6 @@ var config int BLOODTHIRST_T1_DMG; var config int BLOODTHIRST_T2_DMG; var config int BLOODTHIRST_T3_DMG; var config int BLOODTHIRST_T4_DMG; -var config int BLOODTHIRST_T5_DMG; function int GetAttackingDamageModifier(XComGameState_Effect EffectState, XComGameState_Unit Attacker, Damageable TargetDamageable, XComGameState_Ability AbilityState, const out EffectAppliedData AppliedData, const int CurrentDamage, optional XComGameState NewGameState) { @@ -38,8 +37,6 @@ function int GetAttackingDamageModifier(XComGameState_Effect EffectState, XComGa return default.BLOODTHIRST_T3_DMG; case 'ChosenSword_T4': return default.BLOODTHIRST_T4_DMG; - case 'ChosenSword_T5': - return default.BLOODTHIRST_T5_DMG; default: return 0; } diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_Brawler.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_Brawler.uc index 1fa6d85b2..758f6ec8f 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_Brawler.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_Brawler.uc @@ -22,7 +22,7 @@ function float GetPostDefaultDefendingDamageModifier_CH( local int Tiles; Tiles = Attacker.TileDistanceBetween(Target); - if (Tiles < default.BRAWLER_MAX_TILES || AbilityState.IsMeleeAbility()) + if (Tiles < default.BRAWLER_MAX_TILES) { return -CurrentDamage * default.BRAWLER_DR_PCT / 100; } diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_DamageControl.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_DamageControl.uc index f8588f842..4acc55ea7 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_DamageControl.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_DamageControl.uc @@ -6,7 +6,6 @@ class X2Effect_DamageControl extends X2Effect_BonusArmor; var int BonusArmor; -var string Flyover; function int GetArmorChance(XComGameState_Effect EffectState, XComGameState_Unit UnitState) { @@ -16,28 +15,4 @@ function int GetArmorChance(XComGameState_Effect EffectState, XComGameState_Unit function int GetArmorMitigation(XComGameState_Effect EffectState, XComGameState_Unit UnitState) { return BonusArmor; -} - -//show a flyover on source -simulated function AddX2ActionsForVisualizationSource(XComGameState VisualizeGameState, out VisualizationActionMetadata ActionMetadata, name EffectApplyResult) -{ - local XComGameState_Unit OldUnitState, NewUnitState; - local X2Action_PlaySoundAndFlyOver SoundAndFlyOver; - local EWidgetColor Colour; - - if (EffectApplyResult == 'AA_Success') - { - OldUnitState = XComGameState_Unit(ActionMetadata.StateObject_OldState); - NewUnitState = XComGameState_Unit(ActionMetadata.StateObject_NewState); - if (OldUnitState != none && NewUnitState != none) - { - SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTree(ActionMetadata, VisualizeGameState.GetContext(), false, ActionMetadata.LastActionAdded)); - - //////////////==ADJUST PARAMS HERE========////////////////////////////////////// - Colour = eColor_Good; //see UIUtililties_colors.uc ... for useable values - //////////////==ADJUST PARAMS HERE========////////////////////////////////////// - - SoundAndFlyOver.SetSoundAndFlyOverParameters(None, Flyover, '', Colour); - } - } -} +} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_HeroSlayer.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_HeroSlayer.uc deleted file mode 100644 index 0ff6fd8e4..000000000 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_HeroSlayer.uc +++ /dev/null @@ -1,31 +0,0 @@ -class X2Effect_HeroSlayer extends X2Effect_Persistent; - -var float DmgMod; - -function float GetPostDefaultAttackingDamageModifier_CH( - XComGameState_Effect EffectState, - XComGameState_Unit Attacker, - Damageable TargetDamageable, - XComGameState_Ability AbilityState, - const out EffectAppliedData AppliedData, - float CurrentDamage, - X2Effect_ApplyWeaponDamage WeaponDamageEffect, - XComGameState NewGameState) -{ - local XComGameState_Unit TargetUnit; - - TargetUnit = XComGameState_Unit(TargetDamageable); - - - if (TargetUnit.IsResistanceHero() && class'XComGameStateContext_Ability'.static.IsHitResultHit(AppliedData.AbilityResultContext.HitResult)) - { - return CurrentDamage * DmgMod; - } - - return 0; -} - -defaultproperties -{ - bDisplayInSpecialDamageMessageUI = true -} diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ImpactCompensation.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ImpactCompensation.uc index 77fbdcbbe..946f3d22b 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ImpactCompensation.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ImpactCompensation.uc @@ -20,14 +20,6 @@ function float GetPostDefaultDefendingDamageModifier_CH( XComGameState NewGameState) { local UnitValue Value; - local int PotentialMaxStacks; - - PotentialMaxStacks = MaxStacks; - - if(TargetDamageable.HasSoldierAbility('Impenetrable_LW')) - { - PotentialMaxStacks+= 1; - } Value.fValue = 0.0; TargetDamageable.GetUnitValue(class'X2Ability_PerkPackAbilitySet2'.const.DAMAGED_COUNT_NAME, Value); @@ -35,7 +27,7 @@ function float GetPostDefaultDefendingDamageModifier_CH( if (Value.fValue == 0) return 0; - return -CurrentDamage * (1 - ((1 - DamageModifier) ** Min(PotentialMaxStacks, Value.fValue))); + return -CurrentDamage * (1 - ((1 - DamageModifier) ** Min(MaxStacks, Value.fValue))); } defaultproperties diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LWHolotarget.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LWHolotarget.uc index 5bd9a93b2..74fe4a1ce 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LWHolotarget.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LWHolotarget.uc @@ -16,17 +16,17 @@ var config int HDHOLO_BM_CRIT_BONUS; var localized string HoloTargetEffectName; //implements independent targeting -//simulated protected function OnEffectAdded(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState, XComGameState_Effect NewEffectState) -//{ -// local XComGameState_Unit SourceUnit; -// local XComGameStateHistory History; -// -// History = `XCOMHISTORY; -// SourceUnit = XComGameState_Unit(History.GetGameStateForObjectID(NewEffectState.ApplyEffectParameters.SourceStateObjectRef.ObjectID)); -// if(SourceUnit.FindAbility('IndependentTracking').ObjectID > 0) -// NewEffectState.iTurnsRemaining += default.INDEPENDENT_TARGETING_NUM_BONUS_TURNS; -// super.OnEffectAdded(ApplyEffectParameters, kNewTargetState, NewGameState, NewEffectState); -//} +simulated protected function OnEffectAdded(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState, XComGameState_Effect NewEffectState) +{ + local XComGameState_Unit SourceUnit; + local XComGameStateHistory History; + + History = `XCOMHISTORY; + SourceUnit = XComGameState_Unit(History.GetGameStateForObjectID(NewEffectState.ApplyEffectParameters.SourceStateObjectRef.ObjectID)); + if(SourceUnit.FindAbility('IndependentTracking').ObjectID > 0) + NewEffectState.iTurnsRemaining += default.INDEPENDENT_TARGETING_NUM_BONUS_TURNS; + super.OnEffectAdded(ApplyEffectParameters, kNewTargetState, NewGameState, NewEffectState); +} function GetToHitAsTargetModifiers(XComGameState_Effect EffectState, XComGameState_Unit Attacker, XComGameState_Unit Target, XComGameState_Ability AbilityState, class ToHitType, bool bMelee, bool bFlanking, bool bIndirectFire, out array ShotModifiers) { @@ -78,11 +78,6 @@ function GetToHitAsTargetModifiers(XComGameState_Effect EffectState, XComGameSta } } -function bool IsThisEffectBetterThanExistingEffect(const out XComGameState_Effect ExistingEffect) -{ - return true; -} - function bool HasOnlySingleTargetDamage(XComGameState_Ability AbilityState) { local X2AbilityTemplate AbilityTemplate; diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LW_RemoveMark.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LW_RemoveMark.uc deleted file mode 100644 index 927c5b60b..000000000 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_LW_RemoveMark.uc +++ /dev/null @@ -1,70 +0,0 @@ -//--------------------------------------------------------------------------------------- -// FILE: X2Effect_LW_RemoveMark.uc -// AUTHOR: Grobobobo -// PURPOSE: An effect that removes the effects from both tracking mark target, and source -//--------------------------------------------------------------------------------------- -class X2Effect_LW_RemoveMark extends X2Effect_RemoveEffects; - -simulated protected function OnEffectAdded(const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState, XComGameState_Effect NewEffectState) -{ - local XComGameState_Effect EffectState; - local X2Effect_Persistent PersistentEffect; - local XComGameStateHistory History; - - History = `XCOMHISTORY; - - foreach History.IterateByClassType(class'XComGameState_Effect', EffectState) // cycle through ALL effects in History - { - //`LOG("Found effect: " @ EffectState.GetX2Effect().EffectName,, 'IRIDAR'); - // if this effect was applied BY THE SAME UNIT that is applying this Remove Effects effect - if (EffectState.ApplyEffectParameters.SourceStateObjectRef.ObjectID == ApplyEffectParameters.SourceStateObjectRef.ObjectID) - { - // and if the effect name fits - PersistentEffect = EffectState.GetX2Effect(); - if (PersistentEffect.EffectName == class'X2Ability_ChosenSniper'.default.TrackingShotMarkTargetEffectName || - PersistentEffect.EffectName == class'X2Ability_ChosenSniper'.default.TrackingShotMarkSourceEffectName) - { - //`LOG("Removing it.",, 'IRIDAR'); - // remove it - EffectState.RemoveEffect(NewGameState, NewGameState, bCleanse); - - // in practice, this implementation should allow us to remove Hunter Mark effects from the enemy target even though we're technically not passing - // the target state anywhere - } - } - } -} -/* -simulated function AddX2ActionsForVisualization(XComGameState VisualizeGameState, out VisualizationActionMetadata ActionMetadata, const name EffectApplyResult) -{ - local X2Action_AbilityPerkEnd PerkEndAction; - local XComGameState_Effect EffectState; - local X2Effect_Persistent PersistentEffect; - local XComGameStateHistory History; - - History = `XCOMHISTORY; - - foreach History.IterateByClassType(class'XComGameState_Effect', EffectState) // cycle through ALL effects in History - { - `LOG("Found effect: " @ EffectState.GetX2Effect().EffectName,, 'IRIDAR'); - // if this effect was applied BY THE SAME UNIT that is applying this Remove Effects effect - if (EffectState.ApplyEffectParameters.SourceStateObjectRef.ObjectID == ApplyEffectParameters.SourceStateObjectRef.ObjectID) - { - // and if the effect name fits - PersistentEffect = EffectState.GetX2Effect(); - if (PersistentEffect.EffectName == class'X2Ability_ChosenSniper'.default.TrackingShotMarkTargetEffectName || - PersistentEffect.EffectName == class'X2Ability_ChosenSniper'.default.TrackingShotMarkSourceEffectName) - { - `LOG("Removing it.",, 'IRIDAR'); - // remove it - PerkEndAction = X2Action_AbilityPerkEnd( class'X2Action_AbilityPerkEnd'.static.AddToVisualizationTree(ActionMetadata, VisualizeGameState.GetContext(), false, ActionMetadata.LastActionAdded)); - PerkEndAction.PersistentPerkEffect = EffectState.GetX2Effect(); - EffectState.RemoveEffect(NewGameState, NewGameState, bCleanse); - - // in practice, this implementation should allow us to remove Hunter Mark effects from the enemy target even though we're technically not passing - // the target state anywhere - } - } - } -}*/ - diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ReturnFireAOE.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ReturnFireAOE.uc index c3a3c5280..73d5b1541 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ReturnFireAOE.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_ReturnFireAOE.uc @@ -62,7 +62,7 @@ static function EventListenerReturn ReturnFireAOECheck(Object EventData, Object { //`LOG("=== ReturnFireAOECheck 2"); CoveringFireEffect = X2Effect_ReturnFireAOE(EffectState.GetX2Effect()); - //`assert(CoveringFireEffect != none); + `assert(CoveringFireEffect != none); if (CoveringFireEffect.bOnlyDuringEnemyTurn) { diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_RuptureImmunity.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_RuptureImmunity.uc deleted file mode 100644 index 66c4bd5c8..000000000 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_RuptureImmunity.uc +++ /dev/null @@ -1,40 +0,0 @@ -class X2Effect_RuptureImmunity extends X2Effect_Persistent; - -function RegisterForEvents(XComGameState_Effect EffectGameState) -{ - local Object EffectObj; - - EffectObj = EffectGameState; - - `XEVENTMGR.RegisterForEvent(EffectObj, 'UnitTakeEffectDamage', OnUnitTakeEffectDamage, ELD_OnStateSubmitted,,,, EffectGameState); -} - -static function EventListenerReturn OnUnitTakeEffectDamage(Object EventData, Object EventSource, XComGameState GameState, Name Event, Object CallbackData) -{ - local XComGameState_Effect EffectGameState; - local XComGameStateHistory History; - local XComGameState_Unit SourceUnit; - local XComGameStateContext_Ability AbilityContext; - - if (GameState.GetContext().InterruptionStatus == eInterruptionStatus_Interrupt) - return ELR_NoInterrupt; - - EffectGameState = XComGameState_Effect(CallbackData); - AbilityContext = XComGameStateContext_Ability(GameState.GetContext()); - - // if not taking damage from an ability, ignore it (e.g. damage over time effects) - if (AbilityContext == none) - return ELR_NoInterrupt; - - History = `XCOMHISTORY; - SourceUnit = XComGameState_Unit(History.GetGameStateForObjectID(EffectGameState.ApplyEffectParameters.SourceStateObjectRef.ObjectID)); - - // Check that it's the unit with the Blood Trail effect that caused the damage - if (AbilityContext.InputContext.SourceObject.ObjectID != SourceUnit.ObjectID) - return ELR_NoInterrupt; - - //Clear Out the Unit's Rupture - SourceUnit.Ruptured = 0; - - return ELR_NoInterrupt; -} \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_SlugShot.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_SlugShot.uc index 5c611ad25..099dd06a2 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_SlugShot.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_SlugShot.uc @@ -39,10 +39,6 @@ function GetToHitModifiers(XComGameState_Effect EffectState, XComGameState_Unit { ShotInfo.Value = Modifier; } - else - { - ShotInfo.Value = AccBonus; - } ShotInfo.ModType = eHit_Success; ShotInfo.Reason = FriendlyName; ShotModifiers.AddItem(ShotInfo); diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_WilltoSurvive.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_WilltoSurvive.uc index 4ad5ebc52..6599149ad 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_WilltoSurvive.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Effect_WilltoSurvive.uc @@ -21,7 +21,6 @@ function int GetDefendingDamageModifier(XComGameState_Effect EffectState, XComGa local XComGameStateHistory History; local X2AbilityTarget_Cursor TargetStyle; local X2AbilityMultiTarget_Radius MultiTargetStyle; - local int currentModifier; Target = XComGameState_Unit(`XCOMHISTORY.GetGameStateForObjectID(EffectState.ApplyEffectParameters.TargetStateObjectRef.ObjectID)); @@ -48,39 +47,20 @@ function int GetDefendingDamageModifier(XComGameState_Effect EffectState, XComGa if (MyVisInfo.TargetCover == CT_None) return 0; if (MyVisInfo.TargetCover == CT_Midlevel) - currentModifier = -W2S_LOW_COVER_ARMOR_BONUS; + return -W2S_LOW_COVER_ARMOR_BONUS; if (MyVisInfo.TargetCover == CT_Standing) - currentModifier = -W2S_HIGH_COVER_ARMOR_BONUS; - - if (currentModifier < 0 && (CurrentDamage + currentModifier < 1)) - { - if (CurrentDamage <= 1) - return 0; - - return (CurrentDamage - 1) * -1; - } - return currentModifier; - + return -W2S_HIGH_COVER_ARMOR_BONUS; } else { if(X2TacticalGameRuleset(XComGameInfo(class'Engine'.static.GetCurrentWorldInfo().Game).GameRuleset).VisibilityMgr.GetVisibilityInfo(Attacker.ObjectID, Target.ObjectID, MyVisInfo)) { - if (MyVisInfo.TargetCover == CT_None) - return 0; - if (MyVisInfo.TargetCover == CT_Midlevel) - currentModifier = -W2S_LOW_COVER_ARMOR_BONUS; - if (MyVisInfo.TargetCover == CT_Standing) - currentModifier = -W2S_HIGH_COVER_ARMOR_BONUS; - - if (currentModifier < 0 && (CurrentDamage + currentModifier < 1)) - { - if (CurrentDamage <= 1) - return 0; - - return (CurrentDamage - 1) * -1; - } - return currentModifier; + if (MyVisInfo.TargetCover == CT_None) + return 0; + if (MyVisInfo.TargetCover == CT_Midlevel) + return -W2S_LOW_COVER_ARMOR_BONUS; + if (MyVisInfo.TargetCover == CT_Standing) + return -W2S_HIGH_COVER_ARMOR_BONUS; } } return 0; diff --git a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Item_PerkPCS.uc b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Item_PerkPCS.uc index ec1f5a740..3f70d01ce 100644 --- a/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Item_PerkPCS.uc +++ b/LongWarOfTheChosen/Src/LW_PerkPack_Integrated/Classes/X2Item_PerkPCS.uc @@ -265,7 +265,7 @@ static function X2DataTemplate CreateCommonPCSDefense() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'CommonPCSDefense'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_Defense"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_Defense"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = 15; Template.bAlwaysUnique = false; @@ -284,7 +284,7 @@ static function X2DataTemplate CreateRarePCSDefense() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'RarePCSDefense'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_Defense"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_Defense"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = 15; Template.bAlwaysUnique = false; @@ -303,7 +303,7 @@ static function X2DataTemplate CreateEpicPCSDefense() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'EpicPCSDefense'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_Defense"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_Defense"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = 15; Template.bAlwaysUnique = false; @@ -380,7 +380,7 @@ static function X2DataTemplate CreateCommonPCSHacking() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'CommonPCSHacking'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_Hacking"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_Hacking"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = 15; Template.bAlwaysUnique = false; @@ -399,7 +399,7 @@ static function X2DataTemplate CreateRarePCSHacking() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'RarePCSHacking'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_Hacking"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_Hacking"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = 15; Template.bAlwaysUnique = false; @@ -418,7 +418,7 @@ static function X2DataTemplate CreateEpicPCSHacking() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'EpicPCSHacking'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_Hacking"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_Hacking"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = 15; Template.bAlwaysUnique = false; @@ -437,7 +437,7 @@ static function X2DataTemplate CreateFireControl25PCS() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'FireControl25PCS'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_FireControl"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_FireControl"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = -999; Template.bAlwaysUnique = false; @@ -454,7 +454,7 @@ static function X2DataTemplate CreateFireControl50PCS() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'FireControl50PCS'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_FireControl"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_FireControl"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = -999; Template.bAlwaysUnique = false; @@ -471,7 +471,7 @@ static function X2DataTemplate CreateFireControl75PCS() `CREATE_X2TEMPLATE(class'X2EquipmentTemplate', Template, 'FireControl75PCS'); Template.LootStaticMesh = staticmesh'AdventPCS'; - Template.strImage = "img:///UILibrary_LWOTC.InventoryArt.LW_Inv_CombatSim_FireControl"; + Template.strImage = "img:///UILibrary_LW_Overhaul.InventoryArt.LW_Inv_CombatSim_FireControl"; Template.ItemCat = 'CombatSim'; Template.TradingPostValue = -999; Template.bAlwaysUnique = false; diff --git a/LongWarOfTheChosen/Src/LW_Toolbox_Integrated/Classes/X2DownloadableContentInfo_LWToolbox.uc b/LongWarOfTheChosen/Src/LW_Toolbox_Integrated/Classes/X2DownloadableContentInfo_LWToolbox.uc index 74459efca..be6ec026c 100644 --- a/LongWarOfTheChosen/Src/LW_Toolbox_Integrated/Classes/X2DownloadableContentInfo_LWToolbox.uc +++ b/LongWarOfTheChosen/Src/LW_Toolbox_Integrated/Classes/X2DownloadableContentInfo_LWToolbox.uc @@ -56,13 +56,6 @@ static event InstallNewCampaign(XComGameState StartState) { local XComGameState_LWToolboxOptions ToolboxOptions; - //short circuit if in shell: - if(class'WorldInfo'.static.GetWorldInfo().GRI.GameClass.name == 'XComShell') - { - `LWTrace("InstallNewCampaign called in Shell, aborting."); - return; - } - `LOG("X2DLCInfo: InstallNewCampaign",, 'LW_Toolbox'); ToolboxOptions = XComGameState_LWToolboxOptions(class'XComGameState_LWToolboxOptions'.static.CreateModSettingsState_NewCampaign(class'XComGameState_LWToolboxOptions', StartState)); diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/LWTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/LWTutorial.uc index 42082e2f5..219b3b830 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/LWTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/LWTutorial.uc @@ -18,7 +18,7 @@ static function DoCampaignStart() `PRESBASE.UITutorialBox( default.CampaignStartTitle, default.CampaignStartBody, - "img:///UILibrary_LWOTC.TutorialImages.LWOTC_Logo"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWOTC_Logo"); } } diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_CovertActionsTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_CovertActionsTutorial.uc index aaf3d8b6d..5d0997683 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_CovertActionsTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_CovertActionsTutorial.uc @@ -21,7 +21,7 @@ event OnInit(UIScreen Screen) `PRESBASE.UITutorialBox( default.CovertActionsTutorialTitle, default.CovertActionsTutorialBody, - "img:///UILibrary_LWOTC.TutorialImages.LWCovert_Actions_Failure"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWCovert_Actions_Failure"); // Showing the tutorial box hides the screen below it, but we actually want // the covert actions screen to be visible behind the tutorial box. So we diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_HavenManagementTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_HavenManagementTutorial.uc index ade720044..9b574c51b 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_HavenManagementTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_HavenManagementTutorial.uc @@ -27,12 +27,12 @@ event OnInit(UIScreen Screen) `PRESBASE.UITutorialBox( default.HavenAdvisersTitle, default.HavenAdvisersBody, - "img:///UILibrary_LWOTC.TutorialImages.LWHaven_Management"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWHaven_Management"); `PRESBASE.UITutorialBox( default.HavenManagementTitle, default.HavenManagementBody, - "img:///UILibrary_LWOTC.TutorialImages.LWHaven_Management"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWHaven_Management"); // Showing the tutorial box hides the screen below it, but we actually want // the haven management screen to be visible behind the tutorial box. So we diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InfiltratingMissionTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InfiltratingMissionTutorial.uc index 1809a069a..0ccb9fe3d 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InfiltratingMissionTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InfiltratingMissionTutorial.uc @@ -25,7 +25,7 @@ event OnInit(UIScreen Screen) `PRESBASE.UITutorialBox( default.InfiltratingMissionTitle, default.InfiltratingMissionBody, - "img:///UILibrary_LWOTC.TutorialImages.LWInfiltrating_Mission"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWInfiltrating_Mission"); // Showing the tutorial box hides the screen below it, but we actually want // the mission brief screen to be visible behind the tutorial box. So we diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InitialHavenTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InitialHavenTutorial.uc index d073cf61d..27e544a23 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InitialHavenTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_InitialHavenTutorial.uc @@ -20,7 +20,7 @@ event OnRemoved(UIScreen Screen) `PRESBASE.UITutorialBox( default.HavenHighlightTitle, default.HavenHighlightBody, - "img:///UILibrary_LWOTC.TutorialImages.LWHaven_Map_Icon"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWHaven_Map_Icon"); } } diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_MissionBriefTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_MissionBriefTutorial.uc index b16844939..c248b501e 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_MissionBriefTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_MissionBriefTutorial.uc @@ -28,12 +28,12 @@ event OnInit(UIScreen Screen) `PRESBASE.UITutorialBox( default.MissionEnemyCountTitle, default.MissionEnemyCountBody, - "img:///UILibrary_LWOTC.TutorialImages.LWMission_Numbers"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWMission_Numbers"); `PRESBASE.UITutorialBox( default.MissionBriefTutorialTitle, default.MissionBriefTutorialBody, - "img:///UILibrary_LWOTC.TutorialImages.LWMission_Brief"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWMission_Brief"); // Showing the tutorial box hides the screen below it, but we actually want // the mission brief screen to be visible behind the tutorial box. So we diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_PromotionScreenTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_PromotionScreenTutorial.uc index 449afdf61..232205e6a 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_PromotionScreenTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_PromotionScreenTutorial.uc @@ -21,7 +21,7 @@ event OnInit(UIScreen Screen) `PRESBASE.UITutorialBox( default.PistolAbilitiesTutorialTitle, default.PistolAbilitiesTutorialBody, - "img:///UILibrary_LWOTC.TutorialImages.LWPistol_Abilities"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWPistol_Abilities"); // Showing the tutorial box hides the screen below it, but we actually want // the promotion screen to be visible behind the tutorial box. So we diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_SquadSelectTutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_SquadSelectTutorial.uc index dcb549bfe..70d3fd7df 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_SquadSelectTutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/UIScreenListener_SquadSelectTutorial.uc @@ -25,7 +25,7 @@ event OnInit(UIScreen Screen) `PRESBASE.UITutorialBox( default.SquadSelectInfiltrationTitle, default.SquadSelectInfiltrationBody, - "img:///UILibrary_LWOTC.TutorialImages.LWSquad_Select_Infiltration"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWSquad_Select_Infiltration"); } } diff --git a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/X2EventListener_Tutorial.uc b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/X2EventListener_Tutorial.uc index 858bf2b46..34789330b 100644 --- a/LongWarOfTheChosen/Src/LW_Tutorial/Classes/X2EventListener_Tutorial.uc +++ b/LongWarOfTheChosen/Src/LW_Tutorial/Classes/X2EventListener_Tutorial.uc @@ -94,7 +94,7 @@ static function EventListenerReturn OnDroneSighted(Object EventData, Object Even class'XComGameStateContext_TutorialBox'.static.AddModalTutorialBoxToHistoryExplicit( default.DroneSightedTitle, default.DroneSightedBody, - "img:///UILibrary_LWOTC.TutorialImages.LWDrone"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWDrone"); } return ELR_NoInterrupt; } @@ -109,7 +109,7 @@ static function EventListenerReturn OnRainbowTrooperSighted(Object EventData, Ob class'XComGameStateContext_TutorialBox'.static.AddModalTutorialBoxToHistoryExplicit( default.RainbowTrooperSightedTitle, default.RainbowTrooperSightedBody, - "img:///UILibrary_LWOTC.TutorialImages.LWRainbow"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWRainbow"); } return ELR_NoInterrupt; } @@ -187,7 +187,7 @@ static function EventListenerReturn OnMissionDiscovered( `PRESBASE.UITutorialBox( default.FirstMissionDiscoveredTitle, default.FirstMissionDiscoveredBody, - "img:///UILibrary_LWOTC.TutorialImages.LWMission_Map_Icon"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWMission_Map_Icon"); } return ELR_NoInterrupt; @@ -234,7 +234,7 @@ static function EventListenerReturn HandleFirstRetaliation( `PRESBASE.UITutorialBox( default.FirstRetaliationTitle, default.FirstRetaliationBody, - "img:///UILibrary_LWOTC.TutorialImages.LWOTC_Logo"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWOTC_Logo"); } return ELR_NoInterrupt; @@ -255,7 +255,7 @@ static function EventListenerReturn ShowArchivesTutorial( `PRESBASE.UITutorialBox( default.CommandersQuartersEnteredTitle, default.CommandersQuartersEnteredBody, - "img:///UILibrary_LWOTC.TutorialImages.LWOTC_Logo"); + "img:///UILibrary_LW_Overhaul.TutorialImages.LWOTC_Logo"); } return ELR_NoInterrupt; diff --git a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_FactionWeaponAbilities.uc b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_FactionWeaponAbilities.uc index ccba4dead..46eff35c8 100644 --- a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_FactionWeaponAbilities.uc +++ b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_FactionWeaponAbilities.uc @@ -1,124 +1,124 @@ -//--------------------------------------------------------------------------------------- -// FILE: X2Ability_SMGAbilities.uc -// AUTHOR: Joey Martinez (jmartinez989) -// CREDIT TO: Amineri (Long War Studios) -// PURPOSE: Adds stat modifier abilities for all tech tiers of Bullpups. -// -//--------------------------------------------------------------------------------------- -class X2Ability_FactionWeaponAbilities extends X2Ability config(GameData_WeaponData); - -// ***** Mobility bonuses for Bullpups -var config int BULLPUP_CONVENTIONAL_MOBILITY_BONUS; -var config int BULLPUP_MAGNETIC_MOBILITY_BONUS; -var config int BULLPUP_BEAM_MOBILITY_BONUS; - -// *****DetectionRadius bonuses for Bullpups -var config float BULLPUP_CONVENTIONAL_DETECTIONRADIUSMODIFER; -var config float BULLPUP_MAGNETIC_DETECTIONRADIUSMODIFER; -var config float BULLPUP_BEAM_DETECTIONRADIUSMODIFER; - -/// -/// Creates the abilities that add passive Mobility for Bullpups -/// -static function array CreateTemplates() -{ - local array Templates; - - Templates.AddItem(AddBullpupConventionalBonusAbility()); - Templates.AddItem(AddBullpupMagneticBonusAbility()); - Templates.AddItem(AddBullpupBeamBonusAbility()); - - return Templates; -} - -// ******************* Stat Bonuses ********************** - -static function X2AbilityTemplate AddBullpupConventionalBonusAbility() -{ - local X2AbilityTemplate Template; - local X2Effect_PersistentStatChange PersistentStatChangeEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'Bullpup_CV_StatBonus'); - Template.IconImage = "img:///gfxXComIcons.NanofiberVest"; - - Template.AbilitySourceName = 'eAbilitySource_Item'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - Template.bDisplayInUITacticalText = false; - - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - // Bonus to Mobility and DetectionRange stat effects - PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange'; - PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false); - PersistentStatChangeEffect.SetDisplayInfo(ePerkBuff_Passive, "", "", Template.IconImage, false,,Template.AbilitySourceName); - PersistentStatChangeEffect.AddPersistentStatChange(eStat_Mobility, default.BULLPUP_CONVENTIONAL_MOBILITY_BONUS); - PersistentStatChangeEffect.AddPersistentStatChange(eStat_DetectionModifier, default.BULLPUP_CONVENTIONAL_DETECTIONRADIUSMODIFER); - Template.AddTargetEffect(PersistentStatChangeEffect); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - - return Template; -} - -static function X2AbilityTemplate AddBullpupMagneticBonusAbility() -{ - local X2AbilityTemplate Template; - local X2Effect_PersistentStatChange PersistentStatChangeEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'Bullpup_MG_StatBonus'); - Template.IconImage = "img:///gfxXComIcons.NanofiberVest"; - - Template.AbilitySourceName = 'eAbilitySource_Item'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - Template.bDisplayInUITacticalText = false; - - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - // Bonus to Mobility and DetectionRange stat effects - PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange'; - PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false); - PersistentStatChangeEffect.SetDisplayInfo(ePerkBuff_Passive, "", "", Template.IconImage, false,,Template.AbilitySourceName); - PersistentStatChangeEffect.AddPersistentStatChange(eStat_Mobility, default.BULLPUP_MAGNETIC_MOBILITY_BONUS); - PersistentStatChangeEffect.AddPersistentStatChange(eStat_DetectionModifier, default.BULLPUP_MAGNETIC_DETECTIONRADIUSMODIFER); - Template.AddTargetEffect(PersistentStatChangeEffect); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - - return Template; -} - -static function X2AbilityTemplate AddBullpupBeamBonusAbility() -{ - local X2AbilityTemplate Template; - local X2Effect_PersistentStatChange PersistentStatChangeEffect; - - `CREATE_X2ABILITY_TEMPLATE(Template, 'Bullpup_BM_StatBonus'); - Template.IconImage = "img:///gfxXComIcons.NanofiberVest"; - - Template.AbilitySourceName = 'eAbilitySource_Item'; - Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; - Template.Hostility = eHostility_Neutral; - Template.bDisplayInUITacticalText = false; - - Template.AbilityToHitCalc = default.DeadEye; - Template.AbilityTargetStyle = default.SelfTarget; - Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); - - // Bonus to Mobility and DetectionRange stat effects - PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange'; - PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false); - PersistentStatChangeEffect.SetDisplayInfo(ePerkBuff_Passive, "", "", Template.IconImage, false,,Template.AbilitySourceName); - PersistentStatChangeEffect.AddPersistentStatChange(eStat_Mobility, default.BULLPUP_BEAM_MOBILITY_BONUS); - PersistentStatChangeEffect.AddPersistentStatChange(eStat_DetectionModifier, default.BULLPUP_BEAM_DETECTIONRADIUSMODIFER); - Template.AddTargetEffect(PersistentStatChangeEffect); - - Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; - - return Template; -} +//--------------------------------------------------------------------------------------- +// FILE: X2Ability_SMGAbilities.uc +// AUTHOR: Joey Martinez (jmartinez989) +// CREDIT TO: Amineri (Long War Studios) +// PURPOSE: Adds stat modifier abilities for all tech tiers of Bullpups. +// +//--------------------------------------------------------------------------------------- +class X2Ability_FactionWeaponAbilities extends X2Ability config(GameData_WeaponData); + +// ***** Mobility bonuses for Bullpups +var config int BULLPUP_CONVENTIONAL_MOBILITY_BONUS; +var config int BULLPUP_MAGNETIC_MOBILITY_BONUS; +var config int BULLPUP_BEAM_MOBILITY_BONUS; + +// *****DetectionRadius bonuses for Bullpups +var config float BULLPUP_CONVENTIONAL_DETECTIONRADIUSMODIFER; +var config float BULLPUP_MAGNETIC_DETECTIONRADIUSMODIFER; +var config float BULLPUP_BEAM_DETECTIONRADIUSMODIFER; + +/// +/// Creates the abilities that add passive Mobility for Bullpups +/// +static function array CreateTemplates() +{ + local array Templates; + + Templates.AddItem(AddBullpupConventionalBonusAbility()); + Templates.AddItem(AddBullpupMagneticBonusAbility()); + Templates.AddItem(AddBullpupBeamBonusAbility()); + + return Templates; +} + +// ******************* Stat Bonuses ********************** + +static function X2AbilityTemplate AddBullpupConventionalBonusAbility() +{ + local X2AbilityTemplate Template; + local X2Effect_PersistentStatChange PersistentStatChangeEffect; + + `CREATE_X2ABILITY_TEMPLATE(Template, 'Bullpup_CV_StatBonus'); + Template.IconImage = "img:///gfxXComIcons.NanofiberVest"; + + Template.AbilitySourceName = 'eAbilitySource_Item'; + Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; + Template.Hostility = eHostility_Neutral; + Template.bDisplayInUITacticalText = false; + + Template.AbilityToHitCalc = default.DeadEye; + Template.AbilityTargetStyle = default.SelfTarget; + Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); + + // Bonus to Mobility and DetectionRange stat effects + PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange'; + PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false); + PersistentStatChangeEffect.SetDisplayInfo(ePerkBuff_Passive, "", "", Template.IconImage, false,,Template.AbilitySourceName); + PersistentStatChangeEffect.AddPersistentStatChange(eStat_Mobility, default.BULLPUP_CONVENTIONAL_MOBILITY_BONUS); + PersistentStatChangeEffect.AddPersistentStatChange(eStat_DetectionModifier, default.BULLPUP_CONVENTIONAL_DETECTIONRADIUSMODIFER); + Template.AddTargetEffect(PersistentStatChangeEffect); + + Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; + + return Template; +} + +static function X2AbilityTemplate AddBullpupMagneticBonusAbility() +{ + local X2AbilityTemplate Template; + local X2Effect_PersistentStatChange PersistentStatChangeEffect; + + `CREATE_X2ABILITY_TEMPLATE(Template, 'Bullpup_MG_StatBonus'); + Template.IconImage = "img:///gfxXComIcons.NanofiberVest"; + + Template.AbilitySourceName = 'eAbilitySource_Item'; + Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; + Template.Hostility = eHostility_Neutral; + Template.bDisplayInUITacticalText = false; + + Template.AbilityToHitCalc = default.DeadEye; + Template.AbilityTargetStyle = default.SelfTarget; + Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); + + // Bonus to Mobility and DetectionRange stat effects + PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange'; + PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false); + PersistentStatChangeEffect.SetDisplayInfo(ePerkBuff_Passive, "", "", Template.IconImage, false,,Template.AbilitySourceName); + PersistentStatChangeEffect.AddPersistentStatChange(eStat_Mobility, default.BULLPUP_MAGNETIC_MOBILITY_BONUS); + PersistentStatChangeEffect.AddPersistentStatChange(eStat_DetectionModifier, default.BULLPUP_MAGNETIC_DETECTIONRADIUSMODIFER); + Template.AddTargetEffect(PersistentStatChangeEffect); + + Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; + + return Template; +} + +static function X2AbilityTemplate AddBullpupBeamBonusAbility() +{ + local X2AbilityTemplate Template; + local X2Effect_PersistentStatChange PersistentStatChangeEffect; + + `CREATE_X2ABILITY_TEMPLATE(Template, 'Bullpup_BM_StatBonus'); + Template.IconImage = "img:///gfxXComIcons.NanofiberVest"; + + Template.AbilitySourceName = 'eAbilitySource_Item'; + Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; + Template.Hostility = eHostility_Neutral; + Template.bDisplayInUITacticalText = false; + + Template.AbilityToHitCalc = default.DeadEye; + Template.AbilityTargetStyle = default.SelfTarget; + Template.AbilityTriggers.AddItem(default.UnitPostBeginPlayTrigger); + + // Bonus to Mobility and DetectionRange stat effects + PersistentStatChangeEffect = new class'X2Effect_PersistentStatChange'; + PersistentStatChangeEffect.BuildPersistentEffect(1, true, false, false); + PersistentStatChangeEffect.SetDisplayInfo(ePerkBuff_Passive, "", "", Template.IconImage, false,,Template.AbilitySourceName); + PersistentStatChangeEffect.AddPersistentStatChange(eStat_Mobility, default.BULLPUP_BEAM_MOBILITY_BONUS); + PersistentStatChangeEffect.AddPersistentStatChange(eStat_DetectionModifier, default.BULLPUP_BEAM_DETECTIONRADIUSMODIFER); + Template.AddTargetEffect(PersistentStatChangeEffect); + + Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; + + return Template; +} diff --git a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_ShieldAbilitySet.uc b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_ShieldAbilitySet.uc index 477a600b6..afe6947b6 100644 --- a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_ShieldAbilitySet.uc +++ b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Ability_ShieldAbilitySet.uc @@ -366,4 +366,4 @@ static function X2AbilityTemplate GreaterPadding(name AbilityName, int Amount) -} \ No newline at end of file +} diff --git a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2DownloadableContentInfo_LW_WeaponsAndArmor.uc b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2DownloadableContentInfo_LW_WeaponsAndArmor.uc index 0be0a97f4..21dbfaf01 100644 --- a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2DownloadableContentInfo_LW_WeaponsAndArmor.uc +++ b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2DownloadableContentInfo_LW_WeaponsAndArmor.uc @@ -10,8 +10,8 @@ class X2DownloadableContentInfo_LW_WeaponsAndArmor extends X2DownloadableContentInfo config(GameData); -var config array TEMPLAR_SHIELDS; var config array TEMPLAR_GAUNTLETS_FOR_ONE_HANDED_USE; +var config array TEMPLAR_SHIELDS; var config array AUTOPISTOL_ANIMS_WEAPONCATS_EXCLUDED; @@ -99,7 +99,7 @@ static function AddCritUpgrade(X2ItemTemplateManager ItemTemplateManager, Name T } //SMG Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "LWSMG_LS.Meshes.SK_LaserSMG_Optic_C", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_OpticC", "img:///UILibrary_LW_LaserPack.Inv_Laser_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticB", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_OpticB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticB", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_OpticB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "LWSniperRifle_LS.Meshes.SK_LaserSniper_Optic_C", "", 'vektor_LS', , /*"img:///UILibrary*/"_BRPack.Attach.BR_LS_OpticB", /*"img:///UILibrary*/"_LW_LaserPack.Inv_Laser_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticB", "", 'vektor_CG', , /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.CoilSniperRifle_OpticB", /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); @@ -119,7 +119,7 @@ static function AddAimBonusUpgrade(X2ItemTemplateManager ItemTemplateManager, Na //SMG Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "LWSMG_LS.Meshes.SK_LaserSMG_Optic_B", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_OpticB", "img:///UILibrary_LW_LaserPack.Inv_Laser_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); - Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_OpticC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); + Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_OpticC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "LWSniperRifle_LS.Meshes.SK_LaserSniper_Optic_B", "", 'Vektor_LS', , /*"img:///UILibrary*/"_BRPack.Attach.BR_LS_OpticC", /*"img:///UILibrary*/"_LW_LaserPack.Inv_LaserSniper_OpticB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); Template.AddUpgradeAttachment('Optic', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Optic', "BeamSniper.Meshes.SM_BeamSniper_OpticC", "", 'Vektor_CG', , /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.CoilSniperRifle_OpticC", /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_OpticC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_scope"); @@ -138,7 +138,7 @@ static function AddClipSizeBonusUpgrade(X2ItemTemplateManager ItemTemplateManage } //SMG Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAttachments_LS.Meshes.SK_Laser_Mag_B", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_MagB", "img:///UILibrary_LW_LaserPack.Inv_Laser_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagB", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagB", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAttachments_LS.Meshes.SK_Laser_Mag_B", "", 'Vektor_LS', , /*"img:///UILibrary*/"_LW_LaserPack.LaserRifle_MagB", /*"img:///UILibrary*/"_LW_LaserPack.Inv_Laser_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagB", "", 'Vektor_CG', , /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.CoilSniperRifle_MagB", /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.Inv_CoilSniperRifle_MagB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoReloadUpgradePresent); @@ -158,12 +158,12 @@ static function AddFreeFireBonusUpgrade(X2ItemTemplateManager ItemTemplateManage //SMG Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAttachments_LS.Meshes.SK_Laser_Trigger_B", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_TriggerB", "img:///UILibrary_LW_LaserPack.Inv_Laser_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAttachments_LS.Meshes.SK_Laser_Trigger_B", "", 'Vektor_LS', , /*"img:///UILibrary*/"_LW_LaserPack.LaserRifle_TriggerB", /*"img:///UILibrary*/"_LW_LaserPack.Inv_Laser_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); Template.AddUpgradeAttachment('Trigger', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "ConvAttachments.Meshes.SM_ConvTriggerB", "", 'Vektor_CG', , "", /*"img:///UILibrary*/"_StrategyImages.X2InventoryIcons.ConvAssault_ReargripB_inv", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); - Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'Vektor_CG', , /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.CoilSniperRifle_ReargripB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); + Template.AddUpgradeAttachment('Reargrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAccessories_CG.Meshes.LW_Coil_ReargripB", "", 'Vektor_CG', , /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.CoilSniperRifle_ReargripB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgunSniper_TriggerB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_trigger"); } @@ -180,8 +180,8 @@ static function AddReloadUpgrade(X2ItemTemplateManager ItemTemplateManager, Name //Bullpup Template.AddUpgradeAttachment('Foregrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAttachments_LS.Meshes.SK_Laser_Foregrip_B", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_ForegripB", "img:///UILibrary_LW_LaserPack.Inv_Laser_ForegripB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagC", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagC", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); - Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagD", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagD", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagC", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagC", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagC", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.NoClipSizeUpgradePresent); + Template.AddUpgradeAttachment('Mag', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagD", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagD", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_MagD", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip", class'X2Item_DefaultUpgrades'.static.ClipSizeUpgradePresent); Template.AddUpgradeAttachment('Foregrip', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Mag', "LWAttachments_LS.Meshes.SK_Laser_Foregrip_B", "", 'Vektor_LS', , /*"img:///UILibrary*/"_LW_LaserPack.LaserRifle_ForegripB", /*"img:///UILibrary*/"_LW_LaserPack.Inv_Laser_ForegripB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_clip"); @@ -203,7 +203,7 @@ static function AddMissDamageUpgrade(X2ItemTemplateManager ItemTemplateManager, //SMG -- switching to shared Shotgun stock to better differentiate profile compared to rifle Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWShotgun_LS.Meshes.SK_LaserShotgun_Stock_B", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_StockB", "img:///UILibrary_LW_LaserPack.Inv_LaserShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); Template.AddUpgradeAttachment('Crossbar', '', "LWAttachments_LS.Meshes.SK_Laser_Crossbar", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserBullpup_CrossBar", , , class'X2Item_DefaultUpgrades'.static.FreeFireUpgradePresent); - Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_StockB", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); + Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_StockB", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMGShotgun_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); Template.AddUpgradeAttachment('Stock', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Stock', "LWAttachments_LS.Meshes.SK_Laser_Stock_B", "", 'Vektor_LS', , /*"img:///UILibrary*/"_LW_LaserPack.LaserRifle_StockB", /*"img:///UILibrary*/"_LW_LaserPack.LaserRifle_StockB", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_stock"); Template.AddUpgradeAttachment('Crossbar', '', "LWAttachments_LS.Meshes.SK_Laser_Crossbar", "", 'Vektor_LS', , /*"img:///UILibrary*/"_LW_LaserPack.LaserShotgun_CrossBar", , , class'X2Item_DefaultUpgrades'.static.FreeFireUpgradePresent); @@ -226,7 +226,7 @@ static function AddFreeKillUpgrade(X2ItemTemplateManager ItemTemplateManager, Na //SMG Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWSMG_LS.Meshes.SK_LaserSMG_Suppressor", "", 'Bullpup_LS', , "img:///UILibrary_LW_LaserPack.LaserSMG_Suppressor", "img:///UILibrary_LW_LaserPack.Inv_LaserSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); - Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_Silencer", "", 'Bullpup_CG', , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_Suppressor", "img:///UILibrary_LWOTC.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); + Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_Silencer", "", 'Bullpup_CG', , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_Suppressor", "img:///UILibrary_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWSniperRifle_LS.Meshes.SK_LaserSniper_Suppressor", "", 'Vektor_LS', , /*"img:///UILibrary*/"_LW_LaserPack.LaserRifle_Suppressor", /*"img:///UILibrary*/"_LW_LaserPack.Inv_LaserRifle_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); Template.AddUpgradeAttachment('Suppressor', 'UIPawnLocation_WeaponUpgrade_AssaultRifle_Suppressor', "LWSniperRifle_CG.Meshes.LW_CoilSniper_Suppressor", "", 'Vektor_CG', , /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.CoilRifle_Suppressor", /*"img:///UILibrary*/"_LW_Overhaul.InventoryArt.Inv_CoilRifleSMG_Suppressor", "img:///UILibrary_StrategyImages.X2InventoryIcons.Inv_weaponIcon_barrel"); @@ -278,38 +278,6 @@ static function bool AbilityTagExpandHandler(string InString, out string OutStri } -// static function UpdateAnimations(out array CustomAnimSets, XComGameState_Unit UnitState, XComUnitPawn Pawn) -// { -// local name Item; -// local X2WeaponTemplate PrimaryWeaponTemplate, SecondaryWeaponTemplate; -// local string AnimSetToLoad; - -// PrimaryWeaponTemplate = X2WeaponTemplate(UnitState.GetPrimaryWeapon().GetMyTemplate()); -// SecondaryWeaponTemplate = X2WeaponTemplate( UnitState.GetSecondaryWeapon().GetMyTemplate()); - -// if (!UnitState.IsSoldier()) return; - -// if (UnitState.GetMyTemplateName() == 'TemplarSoldier') -// { -// if (UnitState.GetItemInSlot(eInvSlot_Pistol) != none) -// { -// if (UnitState.GetItemInSlot(eInvSlot_Pistol).GetWeaponCategory() == 'sidearm') -// { -// `LWTrace("[LW_WeaponsAndArmor] Adding animset 'AS_TemplarAutoPistol'"); -// CustomAnimSets.AddItem(AnimSet(`CONTENT.RequestGameArchetype("Templar_ANIM.AS_TemplarAutoPistol"))); -// } -// else if (UnitState.GetItemInSlot(eInvSlot_Pistol).GetWeaponCategory() == 'pistol') -// { -// `LWTrace("[LW_WeaponsAndArmor] Adding animset 'AS_Pistol'"); -// CustomAnimSets.AddItem(AnimSet(`CONTENT.RequestGameArchetype("Soldier_ANIM.AS_Pistol"))); -// } -// } -// } - -// } - -// Tedster - re-add Templar animations update - static function UpdateAnimations(out array CustomAnimSets, XComGameState_Unit UnitState, XComUnitPawn Pawn) { local name Item; diff --git a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionArmors.uc b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionArmors.uc index 1b2eac7f6..41dc40308 100644 --- a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionArmors.uc +++ b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionArmors.uc @@ -1,274 +1,274 @@ -// This is an Unreal Script -class X2Item_FactionArmors extends X2Item; - -static function array CreateTemplates() -{ - local array Armors; - - Armors.AddItem(CreatePlatedReaperArmor()); - Armors.AddItem(CreatePoweredReaperArmor()); - - Armors.AddItem(CreatePlatedTemplarArmor()); - Armors.AddItem(CreatePoweredTemplarArmor()); - - Armors.AddItem(CreatePlatedSkirmisherArmor()); - Armors.AddItem(CreatePoweredSkirmisherArmor()); - - - return Armors; -} - -static function X2DataTemplate CreatePlatedReaperArmor() -{ - local X2ArmorTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PlatedReaperArmor'); - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPlat"; - Template.ItemCat = 'armor'; - Template.bAddsUtilitySlot = false; - Template.StartingItem = false; - Template.CanBeBuilt = true; - Template.bInfiniteItem = false; - Template.TradingPostValue = 20; - Template.PointsToComplete = 0; - Template.Abilities.AddItem('MediumPlatedArmorStats'); - Template.ArmorTechCat = 'plated'; - Template.ArmorCat = 'reaper'; - Template.Tier = 1; - Template.AkAudioSoldierArmorSwitch = 'Predator'; - Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PlatedMedium"; - Template.EquipSound = "StrategyUI_Armor_Equip_Plated"; - - Template.Requirements.RequiredTechs.AddItem('PlatedArmor'); - Template.Requirements.RequiredEngineeringScore = 10; - Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; - - Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_PLATED_HEALTH_BONUS, true); - - // Cost - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = 30; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'AlienAlloy'; - Resources.Quantity = 5; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; -} - -static function X2DataTemplate CreatePoweredReaperArmor() -{ - local X2ArmorTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PoweredReaperArmor'); - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPowr"; - Template.ItemCat = 'armor'; - Template.bAddsUtilitySlot = false; - Template.StartingItem = false; - Template.CanBeBuilt = true; - Template.bInfiniteItem = false; - Template.TradingPostValue = 60; - Template.PointsToComplete = 0; - Template.Abilities.AddItem('MediumPoweredArmorStats'); - Template.ArmorTechCat = 'powered'; - Template.ArmorCat = 'reaper'; - Template.Tier = 3; - Template.AkAudioSoldierArmorSwitch = 'Warden'; - Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PoweredMedium"; - Template.EquipSound = "StrategyUI_Armor_Equip_Powered"; - - Template.Requirements.RequiredTechs.AddItem('PoweredArmor'); - Template.Requirements.RequiredEngineeringScore = 30; - Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; - - Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_HEALTH_BONUS, true); - Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_MITIGATION_AMOUNT); - - // Cost - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = 80; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'AlienAlloy'; - Resources.Quantity = 10; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'EleriumDust'; - Resources.Quantity = 10; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; -} - -static function X2DataTemplate CreatePlatedSkirmisherArmor() -{ - local X2ArmorTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PlatedSkirmisherArmor'); - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPlat"; - Template.ItemCat = 'armor'; - Template.bAddsUtilitySlot = false; - Template.StartingItem = false; - Template.CanBeBuilt = true; - Template.bInfiniteItem = false; - Template.TradingPostValue = 20; - Template.PointsToComplete = 0; - Template.Abilities.AddItem('MediumPlatedArmorStats'); - Template.ArmorTechCat = 'plated'; - Template.ArmorCat = 'skirmisher'; - Template.Tier = 1; - Template.AkAudioSoldierArmorSwitch = 'Predator'; - Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PlatedMedium"; - Template.EquipSound = "StrategyUI_Armor_Equip_Plated"; - - Template.Requirements.RequiredTechs.AddItem('PlatedArmor'); - Template.Requirements.RequiredEngineeringScore = 10; - Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; - - Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_PLATED_HEALTH_BONUS, true); - - // Cost - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = 30; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'AlienAlloy'; - Resources.Quantity = 5; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; -} - -static function X2DataTemplate CreatePoweredSkirmisherArmor() -{ - local X2ArmorTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PoweredSkirmisherArmor'); - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPowr"; - Template.ItemCat = 'armor'; - Template.bAddsUtilitySlot = false; - Template.StartingItem = false; - Template.CanBeBuilt = true; - Template.bInfiniteItem = false; - Template.TradingPostValue = 60; - Template.PointsToComplete = 0; - Template.Abilities.AddItem('MediumPoweredArmorStats'); - Template.ArmorTechCat = 'powered'; - Template.ArmorCat = 'skirmisher'; - Template.Tier = 3; - Template.AkAudioSoldierArmorSwitch = 'Warden'; - Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PoweredMedium"; - Template.EquipSound = "StrategyUI_Armor_Equip_Powered"; - - Template.Requirements.RequiredTechs.AddItem('PoweredArmor'); - Template.Requirements.RequiredEngineeringScore = 30; - Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; - - Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_HEALTH_BONUS, true); - Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_MITIGATION_AMOUNT); - - // Cost - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = 80; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'AlienAlloy'; - Resources.Quantity = 10; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'EleriumDust'; - Resources.Quantity = 10; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; -} - -static function X2DataTemplate CreatePlatedTemplarArmor() -{ - local X2ArmorTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PlatedTemplarArmor'); - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPlat"; - Template.ItemCat = 'armor'; - Template.bAddsUtilitySlot = false; - Template.StartingItem = false; - Template.CanBeBuilt = true; - Template.bInfiniteItem = false; - Template.TradingPostValue = 20; - Template.PointsToComplete = 0; - Template.Abilities.AddItem('MediumPlatedArmorStats'); - Template.ArmorTechCat = 'plated'; - Template.ArmorCat = 'templar'; - Template.Tier = 1; - Template.AkAudioSoldierArmorSwitch = 'Predator'; - Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PlatedMedium"; - Template.EquipSound = "StrategyUI_Armor_Equip_Plated"; - - Template.Requirements.RequiredTechs.AddItem('PlatedArmor'); - Template.Requirements.RequiredEngineeringScore = 10; - Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; - - Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_PLATED_HEALTH_BONUS, true); - - // Cost - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = 30; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'AlienAlloy'; - Resources.Quantity = 5; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; -} - -static function X2DataTemplate CreatePoweredTemplarArmor() -{ - local X2ArmorTemplate Template; - local ArtifactCost Resources; - - `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PoweredTemplarArmor'); - Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPowr"; - Template.ItemCat = 'armor'; - Template.bAddsUtilitySlot = false; - Template.StartingItem = false; - Template.CanBeBuilt = true; - Template.bInfiniteItem = false; - Template.TradingPostValue = 60; - Template.PointsToComplete = 0; - Template.Abilities.AddItem('MediumPoweredArmorStats'); - Template.ArmorTechCat = 'powered'; - Template.ArmorCat = 'templar'; - Template.Tier = 3; - Template.AkAudioSoldierArmorSwitch = 'Warden'; - Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PoweredMedium"; - Template.EquipSound = "StrategyUI_Armor_Equip_Powered"; - - Template.Requirements.RequiredTechs.AddItem('PoweredArmor'); - Template.Requirements.RequiredEngineeringScore = 30; - Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; - - Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_HEALTH_BONUS, true); - Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_MITIGATION_AMOUNT); - - // Cost - Resources.ItemTemplateName = 'Supplies'; - Resources.Quantity = 80; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'AlienAlloy'; - Resources.Quantity = 10; - Template.Cost.ResourceCosts.AddItem(Resources); - - Resources.ItemTemplateName = 'EleriumDust'; - Resources.Quantity = 10; - Template.Cost.ResourceCosts.AddItem(Resources); - - return Template; +// This is an Unreal Script +class X2Item_FactionArmors extends X2Item; + +static function array CreateTemplates() +{ + local array Armors; + + Armors.AddItem(CreatePlatedReaperArmor()); + Armors.AddItem(CreatePoweredReaperArmor()); + + Armors.AddItem(CreatePlatedTemplarArmor()); + Armors.AddItem(CreatePoweredTemplarArmor()); + + Armors.AddItem(CreatePlatedSkirmisherArmor()); + Armors.AddItem(CreatePoweredSkirmisherArmor()); + + + return Armors; +} + +static function X2DataTemplate CreatePlatedReaperArmor() +{ + local X2ArmorTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PlatedReaperArmor'); + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPlat"; + Template.ItemCat = 'armor'; + Template.bAddsUtilitySlot = false; + Template.StartingItem = false; + Template.CanBeBuilt = true; + Template.bInfiniteItem = false; + Template.TradingPostValue = 20; + Template.PointsToComplete = 0; + Template.Abilities.AddItem('MediumPlatedArmorStats'); + Template.ArmorTechCat = 'plated'; + Template.ArmorCat = 'reaper'; + Template.Tier = 1; + Template.AkAudioSoldierArmorSwitch = 'Predator'; + Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PlatedMedium"; + Template.EquipSound = "StrategyUI_Armor_Equip_Plated"; + + Template.Requirements.RequiredTechs.AddItem('PlatedArmor'); + Template.Requirements.RequiredEngineeringScore = 10; + Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; + + Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_PLATED_HEALTH_BONUS, true); + + // Cost + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = 30; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'AlienAlloy'; + Resources.Quantity = 5; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; +} + +static function X2DataTemplate CreatePoweredReaperArmor() +{ + local X2ArmorTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PoweredReaperArmor'); + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPowr"; + Template.ItemCat = 'armor'; + Template.bAddsUtilitySlot = false; + Template.StartingItem = false; + Template.CanBeBuilt = true; + Template.bInfiniteItem = false; + Template.TradingPostValue = 60; + Template.PointsToComplete = 0; + Template.Abilities.AddItem('MediumPoweredArmorStats'); + Template.ArmorTechCat = 'powered'; + Template.ArmorCat = 'reaper'; + Template.Tier = 3; + Template.AkAudioSoldierArmorSwitch = 'Warden'; + Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PoweredMedium"; + Template.EquipSound = "StrategyUI_Armor_Equip_Powered"; + + Template.Requirements.RequiredTechs.AddItem('PoweredArmor'); + Template.Requirements.RequiredEngineeringScore = 30; + Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; + + Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_HEALTH_BONUS, true); + Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_MITIGATION_AMOUNT); + + // Cost + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = 80; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'AlienAlloy'; + Resources.Quantity = 10; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'EleriumDust'; + Resources.Quantity = 10; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; +} + +static function X2DataTemplate CreatePlatedSkirmisherArmor() +{ + local X2ArmorTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PlatedSkirmisherArmor'); + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPlat"; + Template.ItemCat = 'armor'; + Template.bAddsUtilitySlot = false; + Template.StartingItem = false; + Template.CanBeBuilt = true; + Template.bInfiniteItem = false; + Template.TradingPostValue = 20; + Template.PointsToComplete = 0; + Template.Abilities.AddItem('MediumPlatedArmorStats'); + Template.ArmorTechCat = 'plated'; + Template.ArmorCat = 'skirmisher'; + Template.Tier = 1; + Template.AkAudioSoldierArmorSwitch = 'Predator'; + Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PlatedMedium"; + Template.EquipSound = "StrategyUI_Armor_Equip_Plated"; + + Template.Requirements.RequiredTechs.AddItem('PlatedArmor'); + Template.Requirements.RequiredEngineeringScore = 10; + Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; + + Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_PLATED_HEALTH_BONUS, true); + + // Cost + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = 30; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'AlienAlloy'; + Resources.Quantity = 5; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; +} + +static function X2DataTemplate CreatePoweredSkirmisherArmor() +{ + local X2ArmorTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PoweredSkirmisherArmor'); + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPowr"; + Template.ItemCat = 'armor'; + Template.bAddsUtilitySlot = false; + Template.StartingItem = false; + Template.CanBeBuilt = true; + Template.bInfiniteItem = false; + Template.TradingPostValue = 60; + Template.PointsToComplete = 0; + Template.Abilities.AddItem('MediumPoweredArmorStats'); + Template.ArmorTechCat = 'powered'; + Template.ArmorCat = 'skirmisher'; + Template.Tier = 3; + Template.AkAudioSoldierArmorSwitch = 'Warden'; + Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PoweredMedium"; + Template.EquipSound = "StrategyUI_Armor_Equip_Powered"; + + Template.Requirements.RequiredTechs.AddItem('PoweredArmor'); + Template.Requirements.RequiredEngineeringScore = 30; + Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; + + Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_HEALTH_BONUS, true); + Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_MITIGATION_AMOUNT); + + // Cost + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = 80; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'AlienAlloy'; + Resources.Quantity = 10; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'EleriumDust'; + Resources.Quantity = 10; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; +} + +static function X2DataTemplate CreatePlatedTemplarArmor() +{ + local X2ArmorTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PlatedTemplarArmor'); + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPlat"; + Template.ItemCat = 'armor'; + Template.bAddsUtilitySlot = false; + Template.StartingItem = false; + Template.CanBeBuilt = true; + Template.bInfiniteItem = false; + Template.TradingPostValue = 20; + Template.PointsToComplete = 0; + Template.Abilities.AddItem('MediumPlatedArmorStats'); + Template.ArmorTechCat = 'plated'; + Template.ArmorCat = 'templar'; + Template.Tier = 1; + Template.AkAudioSoldierArmorSwitch = 'Predator'; + Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PlatedMedium"; + Template.EquipSound = "StrategyUI_Armor_Equip_Plated"; + + Template.Requirements.RequiredTechs.AddItem('PlatedArmor'); + Template.Requirements.RequiredEngineeringScore = 10; + Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; + + Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_PLATED_HEALTH_BONUS, true); + + // Cost + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = 30; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'AlienAlloy'; + Resources.Quantity = 5; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; +} + +static function X2DataTemplate CreatePoweredTemplarArmor() +{ + local X2ArmorTemplate Template; + local ArtifactCost Resources; + + `CREATE_X2TEMPLATE(class'X2ArmorTemplate', Template, 'PoweredTemplarArmor'); + Template.strImage = "img:///UILibrary_XPACK_StrategyImages.Inv_HORArmorPowr"; + Template.ItemCat = 'armor'; + Template.bAddsUtilitySlot = false; + Template.StartingItem = false; + Template.CanBeBuilt = true; + Template.bInfiniteItem = false; + Template.TradingPostValue = 60; + Template.PointsToComplete = 0; + Template.Abilities.AddItem('MediumPoweredArmorStats'); + Template.ArmorTechCat = 'powered'; + Template.ArmorCat = 'templar'; + Template.Tier = 3; + Template.AkAudioSoldierArmorSwitch = 'Warden'; + Template.EquipNarrative = "X2NarrativeMoments.Strategy.CIN_ArmorIntro_PoweredMedium"; + Template.EquipSound = "StrategyUI_Armor_Equip_Powered"; + + Template.Requirements.RequiredTechs.AddItem('PoweredArmor'); + Template.Requirements.RequiredEngineeringScore = 30; + Template.Requirements.bVisibleIfPersonnelGatesNotMet = true; + + Template.SetUIStatMarkup(class'XLocalizedData'.default.HealthLabel, eStat_HP, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_HEALTH_BONUS, true); + Template.SetUIStatMarkup(class'XLocalizedData'.default.ArmorLabel, eStat_ArmorMitigation, class'X2Ability_ItemGrantedAbilitySet'.default.MEDIUM_POWERED_MITIGATION_AMOUNT); + + // Cost + Resources.ItemTemplateName = 'Supplies'; + Resources.Quantity = 80; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'AlienAlloy'; + Resources.Quantity = 10; + Template.Cost.ResourceCosts.AddItem(Resources); + + Resources.ItemTemplateName = 'EleriumDust'; + Resources.Quantity = 10; + Template.Cost.ResourceCosts.AddItem(Resources); + + return Template; } \ No newline at end of file diff --git a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionWeapons.uc b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionWeapons.uc index 456c477e6..d82fa89f7 100644 --- a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionWeapons.uc +++ b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_FactionWeapons.uc @@ -181,9 +181,9 @@ static function X2DataTemplate CreateBullpup_Coil_Template() Template.GameArchetype = "LWSMG_CG.Archetypes.WP_SMG_CG"; Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_AssaultRifle'; - Template.AddDefaultAttachment('Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_MagA"); - Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_StockA"); - Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LWOTC.InventoryArt.CoilSMG_ReargripA"); + Template.AddDefaultAttachment('Mag', "LWAssaultRifle_CG.Meshes.LW_CoilRifle_MagA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_MagA"); + Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_StockA"); + Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA", , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSMG_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight @@ -341,11 +341,11 @@ static function X2DataTemplate CreateVektor_Coil() Template.NumUpgradeSlots = 3; Template.GameArchetype = "LW_StrikeRifle.Archetypes.WP_DMR_CG"; - Template.AddDefaultAttachment('Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagA");//, , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_MagA"); - Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB");//, , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_StockA"); - Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA");//, , "img:///UILibrary_LWOTC.InventoryArt.CoilRifle_ReargripA"); + Template.AddDefaultAttachment('Mag', "LWSniperRifle_CG.Meshes.LW_CoilSniper_MagA");//, , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_MagA"); + Template.AddDefaultAttachment('Stock', "LWAccessories_CG.Meshes.LW_Coil_StockB");//, , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_StockA"); + Template.AddDefaultAttachment('Reargrip', "LWAccessories_CG.Meshes.LW_Coil_ReargripA");//, , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilRifle_ReargripA"); Template.AddDefaultAttachment('Light', "BeamAttachments.Meshes.BeamFlashLight"); //);//, , "img:///UILibrary_Common.ConvAssaultRifle.ConvAssault_LightA"); // re-use common conventional flashlight - Template.AddDefaultAttachment('Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC");//, , "img:///UILibrary_LWOTC.InventoryArt.CoilSniperRifle_OpticA"); + Template.AddDefaultAttachment('Optic', "BeamAssaultRifle.Meshes.SM_BeamAssaultRifle_OpticC");//, , "img:///UILibrary_LW_Overhaul.InventoryArt.CoilSniperRifle_OpticA"); Template.UIArmoryCameraPointTag = 'UIPawnLocation_WeaponUpgrade_Sniper'; diff --git a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_Shields_LW.uc b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_Shields_LW.uc index 0ef8e5244..ce4cfea05 100644 --- a/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_Shields_LW.uc +++ b/LongWarOfTheChosen/Src/LW_WeaponsAndArmor/Classes/X2Item_Shields_LW.uc @@ -6,8 +6,6 @@ //--------------------------------------------------------------------------------------- class X2Item_Shields_LW extends X2Item config(GameData_WeaponData); -var config bool ENABLE_SHIELDS; - var config WeaponDamageValue SHIELD_CV_BASEDAMAGE; var config WeaponDamageValue SHIELD_MG_BASEDAMAGE; var config WeaponDamageValue SHIELD_BM_BASEDAMAGE; @@ -40,12 +38,9 @@ static function array CreateTemplates() { local array Weapons; - if(default.ENABLE_SHIELDS) - { - Weapons.AddItem(BallisticShield_CV()); - Weapons.AddItem(BallisticShield_MG()); - Weapons.AddItem(BallisticShield_BM()); - } + Weapons.AddItem(BallisticShield_CV()); + Weapons.AddItem(BallisticShield_MG()); + Weapons.AddItem(BallisticShield_BM()); return Weapons; } @@ -139,7 +134,6 @@ static function X2DataTemplate BallisticShield_MG() Template.CanBeBuilt = true; Template.bInfiniteItem = false; - Template.Requirements.SpecialRequirementsFn = ShouldBuildShields; Template.DamageTypeTemplateName = 'Melee'; @@ -186,7 +180,6 @@ static function X2DataTemplate BallisticShield_BM() Template.CanBeBuilt = true; Template.bInfiniteItem = false; - Template.Requirements.SpecialRequirementsFn = ShouldBuildShields; Template.DamageTypeTemplateName = 'Melee'; @@ -204,31 +197,3 @@ static function AddAbilities(out X2WeaponTemplate Template, array Abilitie } } } - -static function bool ShouldBuildShields() -{ - local X2SoldierClassTemplateManager SoldierClassMgr; - local array SoldierClasses; - local X2SoldierClassTemplate SoldierTemplate; - local int i; - - SoldierClassMgr = class'X2SoldierClassTemplateManager'.static.GetSoldierClassTemplateManager(); - - SoldierClasses = SoldierClassMgr.GetAllSoldierClassTemplates(); - - foreach SoldierClasses (SoldierTemplate) - { - if (SoldierTemplate == none) - continue; - - for (i = 0; i < SoldierTemplate.AllowedWeapons.Length; ++i) - { - if (SoldierTemplate.AllowedWeapons[i].WeaponType == 'templarshield') - { - return true; - } - } - } - - return false; -}