simplify far cover by starting at only the peek tile

rohan
Sep 11, 2022, 7:40 AM
VHVL5HH44FNS7FRY53O7727TZ3OP26HDQQGGHQZ4JTJAYXMP27UAC

Dependencies

  • [2] 6GNTEDE4 use real LOS functions to determine Far Cover (automatically accounts for roof edge protection)
  • [3] MPALURGP maximum far cover is low cover malus
  • [4] X4IR7ZAH baseline from krumiro's [WotC] RW Realistic Aiming Angles
  • [5] UA2L2WYU use correct config file
  • [6] JSCVVDFD remove commented code and excess tabs

Change contents

  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 525
    [2.56][2.56:122]()
    local TTile PeekTile, PeekHead, LosTile, TargetPeekTile;
    [2.56]
    [2.122]
    local TTile PeekHead, LosTile, TargetPeekTile;
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 770
    [2.634][2.634:859]()
    PeekTile = VisInfo.SourceTile;
    PeekHead = PeekTile; PeekHead.Z = `XWORLD.GetFloorTileZ(PeekTile) + UnitState.UnitHeight;
    `log("PeekTile:"@PeekTile.X@","@PeekTile.Y@","@PeekTile.Z, true, 'XCom_HitRolls');
    [2.634]
    [2.859]
    PeekHead = VisInfo.SourceTile; PeekHead.Z = `XWORLD.GetFloorTileZ(PeekHead) + UnitState.UnitHeight;
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 784
    [3.7964][2.1481:1551](),[2.1551][3.446:456](),[3.446][3.446:456](),[3.456][2.1552:1680](),[2.1680][3.564:575](),[3.564][3.564:575](),[3.575][2.1681:1800](),[2.1800][3.723:744](),[3.723][3.723:744](),[3.744][2.1801:1803]()
    if (`XWORLD.VoxelRaytrace_Tiles(PeekTile, LosTile, RayTrace))
    {
    if ((i == 0 && VisInfo.TargetCover == CT_None) || ((i == 1 || i == 2) && VisInfo.TargetCover != CT_Standing) || i > 2)
    {
    `log("LOS blocked by far cover:"@i@","@VisInfo.TargetCover, true, 'XCom_HitRolls');
    FarCover += 1;
    }
    }
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 789
    [2.2097]
    [2.2097]
    `log("Blocking tile:"@RayTrace.BlockedTile.X@","@RayTrace.BlockedTile.Y@","@RayTrace.BlockedTile.Z, true, 'XCom_HitRolls');
  • edit in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 802
    [3.1249][2.2357:2542]()
    if (`XWORLD.VoxelRaytrace_Tiles(PeekTile, LosTile, RayTrace))
    {
    `log("LOS blocked by far cover:"@i, true, 'XCom_HitRolls');
    FarCover += 1;
    }
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 825
    [2.2852][2.2852:2924]()
    FarCover = Max(0, FarCover - (TargetState.UnitHeight - 2) * 2);
    [2.2852]
    [2.2924]
    FarCover = Max(0, FarCover - (TargetState.UnitHeight - 2));
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 828
    [2.2935][2.2935:3043]()
    if (default.GiveHitChanceZeroWhenTargetableEnemiesAreInsteadNotTrulyInLineOfSight && FarCover == 12)
    [2.2935]
    [2.3043]
    if (default.GiveHitChanceZeroWhenTargetableEnemiesAreInsteadNotTrulyInLineOfSight && FarCover == 6)
  • replacement in RWRealisticAimingAnglesHL/Src/RWRealisticAimingAnglesHL/Classes/Override_X2AbilityToHitCalc_StandardAim.uc at line 836
    [2.3593][2.3593:3687]()
    FarCoverBonus = FarCover * HIGH_COVER_BONUS / 12; // 12 is the maximum considered ray
    [2.3593]
    [2.3687]
    FarCoverBonus = FarCover * HIGH_COVER_BONUS / 6; // 6 is the maximum considered ray