merge with Highlander 1.24.0

rohan
Aug 28, 2022, 4:43 AM
WWMGBP4LNJTFRB3CCVBGFRNZXCBG74A7LCAKUQEXZ52QGR7Q3ZLQC

Dependencies

  • [2] X4IR7ZAH baseline from krumiro's [WotC] RW Realistic Aiming Angles
  • [3] JSCVVDFD remove commented code and excess tabs

Change contents

  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 315
    [2.34898][2.34898:34927]()
    } //ADDED THIS LINE!!!
    [2.34898]
    [2.34927]
    }
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 369
    [2.37473][2.37473:38000]()
    if (UnitState != none && TargetState != none)
    {
    foreach UnitState.AffectedByEffects(EffectRef)
    {
    EffectState = XComGameState_Effect(History.GetGameStateForObjectID(EffectRef.ObjectID));
    if (EffectState != none)
    {
    if (EffectState.GetX2Effect().ChangeHitResultForAttacker(UnitState, TargetState, kAbility, Result, ChangeResult))
    {
    `log("Effect" @ EffectState.GetX2Effect().FriendlyName @ "changing hit result for attacker:" @ ChangeResult,true,'XCom_HitRolls');
    Result = ChangeResult;
    [2.37473]
    [2.38000]
    // Issue #426: ChangeHitResultForX() code block moved to later in method.
    /// HL-Docs: ref:Bugfixes; issue:426
    /// Fix `X2AbilityToHitCalc_StandardAim` discarding unfavorable (for XCOM) changes to hit results from effects
    // Due to how GetModifiedHitChanceForCurrentDifficulty() is implemented, it reverts attempts to change
    // XCom Hits to Misses, or enemy misses to hits.
    // The LW2 graze band issues are related to this phenomenon, since the graze band has the effect
    // of changing some what "should" be enemy misses to hits (specifically graze result)
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 377
    [2.38002][2.38002:38183](),[2.38183][2.38183:38185](),[2.38185][2.38185:38738](),[2.38738][2.38738:38896](),[2.38896][2.38896:38922]()
    //ADDED THIS LINE!!!
    if (default.ShowChances && default.ShowDiceRolls) PINotify.AddItem(UnitState.GetFullName()@"used an effect to change hit result to"@ ChangeResult);
    }
    }
    }
    foreach TargetState.AffectedByEffects(EffectRef)
    {
    EffectState = XComGameState_Effect(History.GetGameStateForObjectID(EffectRef.ObjectID));
    if (EffectState != none)
    {
    if (EffectState.GetX2Effect().ChangeHitResultForTarget(EffectState, UnitState, TargetState, kAbility, bIsPrimaryTarget, Result, ChangeResult))
    {
    `log("Effect" @ EffectState.GetX2Effect().FriendlyName @ "changing hit result for target:" @ ChangeResult, true, 'XCom_HitRolls');
    Result = ChangeResult;
    //ADDED THIS LINE!!!
    if (default.ShowChances && default.ShowDiceRolls) PINotify.AddItem(TargetState.GetFullName()@"has an effect that changes hit result to"@ ChangeResult);
    }
    }
    }
    }
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 471
    [2.42231]
    [2.42231]
    // Start Issue #426: Block moved from earlier. Only code change is for lightning reflexes,
    // because bRolledResultIsAMiss was used for both aim assist and reflexes
    if (UnitState != none && TargetState != none)
    {
    foreach UnitState.AffectedByEffects(EffectRef)
    {
    EffectState = XComGameState_Effect(History.GetGameStateForObjectID(EffectRef.ObjectID));
    if (EffectState != none)
    {
    if (EffectState.GetX2Effect().ChangeHitResultForAttacker(UnitState, TargetState, kAbility, Result, ChangeResult))
    {
    `log("Effect" @ EffectState.GetX2Effect().FriendlyName @ "changing hit result for attacker:" @ ChangeResult,true,'XCom_HitRolls');
    Result = ChangeResult;
    //ADDED THIS LINE!!!
    if (default.ShowChances && default.ShowDiceRolls) PINotify.AddItem(UnitState.GetFullName()@"used an effect to change hit result to"@ ChangeResult);
    }
    }
    }
    foreach TargetState.AffectedByEffects(EffectRef)
    {
    EffectState = XComGameState_Effect(History.GetGameStateForObjectID(EffectRef.ObjectID));
    if (EffectState != none)
    {
    if (EffectState.GetX2Effect().ChangeHitResultForTarget(EffectState, UnitState, TargetState, kAbility, bIsPrimaryTarget, Result, ChangeResult))
    {
    `log("Effect" @ EffectState.GetX2Effect().FriendlyName @ "changing hit result for target:" @ ChangeResult, true, 'XCom_HitRolls');
    Result = ChangeResult;
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 501
    [2.42233]
    [2.42233]
    //ADDED THIS LINE!!!
    if (default.ShowChances && default.ShowDiceRolls) PINotify.AddItem(UnitState.GetFullName()@"used an effect to change hit result to"@ ChangeResult);
    }
    }
    }
    }
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 511
    [2.42300][2.42300:42381]()
    if (bReactionFire && TargetState.bLightningReflexes && !bRolledResultIsAMiss)
    [2.42300]
    [2.42381]
    if (bReactionFire && TargetState.bLightningReflexes && !class'XComGameStateContext_Ability'.static.IsHitResultMiss(Result))
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 521
    [2.42831]
    [2.42831]
    // End Issue #426
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 602
    [2.46388]
    [2.46388]
    /// HL-Docs: feature:GetHitChanceEvents; issue:1031; tags:tactical
    /// WARNING! Triggering events in `X2AbilityToHitCalc::GetHitChance()` and other functions called by this function
    /// may freeze (hard hang) the game under certain circumstances.
    ///
    /// In our experiments, the game would hang when the player used a moving melee ability when an event was triggered
    /// in `UITacticalHUD_AbilityContainer::ConfirmAbility()` right above the
    /// `XComPresentationLayer(Owner.Owner).PopTargetingStates();` line or anywhere further down the script trace,
    /// while another event was also triggered in `GetHitChance()` or anywhere further down the script trace.
    ///
    /// The game hangs while executing UI code, but it is the event in the To Hit Calculation logic that induces it.
    /// The speculation is that triggering events in `GetHitChance()` somehow corrupts the event manager, or it
    /// could be a threading issue.
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 681
    [2.51044][2.51044:51117]()
    UnitState.GetStatModifiers(eStat_Offense, StatMods, StatModValues);
    [2.51044]
    [2.51117]
    // Single Line Change for Issue #313
    /// HL-Docs: ref:GetStatModifiersFixed
    UnitState.GetStatModifiersFixed(eStat_Offense, StatMods, StatModValues);
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 943
    [2.81544][2.81544:81619]()
    UnitState.GetStatModifiers(eStat_CritChance, StatMods, StatModValues);
    [2.81544]
    [2.81619]
    // Single Line Change for Issue #313
    /// HL-Docs: ref:GetStatModifiersFixed
    UnitState.GetStatModifiersFixed(eStat_CritChance, StatMods, StatModValues);
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 957
    [2.82132]
    [2.82132]
    // Issue #237 start, let upgrades modify the crit chance of the breakdown
    WeaponUpgrades = SourceWeapon.GetMyWeaponUpgradeTemplates();
    for (i = 0; i < WeaponUpgrades.Length; ++i)
    {
    // Make sure we check to only use anything from the ini that we've specified doesn't use an Effect to modify crit chance
    // Everything that does use an Effect, e.g. base game Laser Sights, get added in about 23 lines down from here
    if (WeaponUpgrades[i].AddCritChanceModifierFn != None && default.CritUpgradesThatDontUseEffects.Find(WeaponUpgrades[i].DataName) != INDEX_NONE)
    {
    if (WeaponUpgrades[i].AddCritChanceModifierFn(WeaponUpgrades[i], iWeaponMod))
    {
    AddModifier(iWeaponMod, WeaponUpgrades[i].GetItemFriendlyName(), m_ShotBreakdown, eHit_Crit, bDebugLog);
    }
    }
    }
    // Issue #237 end