XCOM Squadsight Aim Penalty Adjust To Hit Notes
Overview
This contains the development notes for the changes to the function XGAbility_Targeted.AdjustToHit in XComGame.upk.
This change supports the additional of an aim penalty when using Squadsight.
XCOM_Squadsight_Aim_Penalty_Mod
Development Notes
Notes for applying long range squadsight aim penalty to RollForHit This is where the actual hit chances are modified. 1) XGAbility_Targeted.AdjustToHit Old code: if(m_bReactionFire || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_iDifficulty >= 2) { return iHitChance; } // End:0x424 if((m_kUnit.IsMine() && !GetPrimaryTarget().IsMine()) && iHitChance > 0) { iAdjustment = iHitChance / 5; // End:0x421 if(iHitChance >= 50) { iMissAdjustment = m_kUnit.GetPlayer().m_iMissCounter * 15; } } // End:0x4B2 else { // End:0x4B2 if(!m_kUnit.IsMine() && GetPrimaryTarget().IsMine()) { iAdjustment = -GetPrimaryTarget().GetPlayer().m_iHitCounter * 10; } } // End:0x4F9 if(kPlayer.GetSquad().GetNumAliveAndWell() > 4) { iAdjustment = 0; } iAdjustedHitChance = Clamp((iHitChance + iAdjustment) + iMissAdjustment, 1, 95); } // End:0x53D else { iAdjustedHitChance = iHitChance; } return iAdjustedHitChance; New Code: m_fDistanceToTarget = VSize(m_kUnit.GetLocation() - GetPrimaryTarget().GetLocation()) / float(64); iAdjustedHitChance = iHitChance if(m_fDistanceToTarget > m_kUnit.m_aCurrentStats[10]) { iAdjustedHitChance += Min(-25 + 5*Max(GetPrimaryTarget().m_arrEnemiesSeenBy.Length, 5) - int(1.1*m_fDistanceToTarget), 5) } iAdjustedHitChance = Max(iAdjustedHitChance, 1) --------------------------------------------------------- New hex code: (188 bytes) (have 228 available -- 40 extra, up to 8 dummy variable calls) m_fDistanceToTarget = VSize(m_kUnit.GetLocation() - GetPrimaryTarget().GetLocation())/ float(64); (67 file bytes) 0F 01 1A BC 00 00 AC E1 D8 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 19 1B 38 34 00 00 00 00 00 00 16 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 16 16 38 3F 2C 40 16 iAdjustedHitChance = iHitChance 0F 00 C2 7C 00 00 00 C6 7C 00 00 if(m_fDistanceToTarget > float(m_kUnit.m_aCurrentStats[10])) (33 file bytes) 07 CD 03 B1 01 1A BC 00 00 38 3F 1A 2C 0A 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 += A1 iAdjustedHitChance 00 C2 7C 00 00 Min((5*Min(GetPrimaryTarget().m_arrEnemiesSeenBy.Length, 5) -25) - int (1.1*(m_fDistanceToTarget - float(m_kUnit.m_aCurrentStats[10]))), 5); (81 file bytes) F9 93 93 90 2C 05 F9 36 19 1B 38 34 00 00 00 00 00 00 16 09 00 9A 30 00 00 00 01 9A 30 00 00 2C 05 16 16 2C 19 16 38 44 AB 1E CD CC 8C 3F AF 01 1A BC 00 00 38 3F 1A 2C 0A 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 16 16 2C 05 16 execute += 16 iAdjustedHitChance = Max(iAdjustedHitChance, 1) 0F 00 C2 7C 00 00 FA 00 C2 7C 00 00 2C 01 16 -------------------------- alternative : look at AdjustToHit original hex: (virtual size 0x552) header: DB 7C 00 00 50 55 00 00 00 00 00 00 C0 7C 00 00 00 00 00 00 00 00 00 00 C6 7C 00 00 00 00 00 00 A9 02 00 00 2C 5C 00 00 52 05 00 00 B6 03 00 00 body: if(!DoesDamage()) 07 19 00 81 1B 9B 1A 00 00 00 00 00 00 16 16 return iHitChance; 04 00 C6 7C 00 00 if(WorldInfo.NetMode == NM_Standalone) 07 2A 05 9A 38 3A 19 01 E9 F9 FF FF 09 00 AB FE FF FF 00 01 AB FE FF FF 38 3A 24 00 16 07 6C 00 97 1A 26 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 2C C7 16 04 2C 64 07 E7 00 82 77 2E DA 72 00 00 19 1C 69 FC FF FF 16 09 00 B9 F9 FF FF 00 01 B9 F9 FF FF 2A 16 18 3F 00 19 2E DA 72 00 00 19 1C 69 FC FF FF 16 09 00 B9 F9 FF FF 00 01 B9 F9 FF FF 0A 00 46 6F 00 00 00 2D 01 46 6F 00 00 16 04 00 C6 7C 00 00 0F 00 C1 7C 00 00 19 2E 33 9F 00 00 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 0A 00 E2 9E 00 00 00 1B AE 32 00 00 00 00 00 00 16 07 BA 01 82 82 19 01 E6 7B 00 00 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 18 20 00 19 00 C1 7C 00 00 0A 00 D9 93 00 00 00 2D 01 D9 93 00 00 16 18 0B 00 2D 01 E6 BB 00 00 16 04 2C 64 07 C2 02 84 19 00 C1 7C 00 00 0A 00 D9 93 00 00 00 2D 01 D9 93 00 00 18 80 00 9A 19 19 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 09 00 A3 9C 00 00 00 01 A3 9C 00 00 09 00 B2 9F 00 00 00 01 B2 9F 00 00 25 16 16 0F 00 C2 7C 00 00 1B E1 35 00 00 00 00 00 00 00 C6 7C 00 00 00 C1 7C 00 00 19 00 C1 7C 00 00 0A 00 D9 93 00 00 00 2D 01 D9 93 00 00 16 07 C2 02 9B 00 C2 7C 00 00 1D FF FF FF FF 16 04 00 C2 7C 00 00 if(m_bReactionFire || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_iDifficulty >= 2) 07 5E 03 84 2D 01 D2 7B 00 00 18 81 00 99 19 19 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 09 00 A3 9C 00 00 00 01 A3 9C 00 00 09 00 B2 9F 00 00 00 01 B2 9F 00 00 2C 02 16 16 return iHitChance; 04 00 C6 7C 00 00 07 24 04 82 82 19 01 E6 7B 00 00 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 18 23 00 81 19 1B 38 34 00 00 00 00 00 00 16 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 16 16 18 0D 00 97 00 C6 7C 00 00 25 16 16 0F 00 C3 7C 00 00 91 00 C6 7C 00 00 2C 05 16 07 21 04 99 00 C6 7C 00 00 2C 32 16 0F 00 C4 7C 00 00 90 19 19 01 E6 7B 00 00 0A 00 EB B2 00 00 00 1B 0A 34 00 00 00 00 00 00 16 09 00 DB 93 00 00 00 01 DB 93 00 00 2C 0F 16 06 B2 04 07 B2 04 82 81 19 01 E6 7B 00 00 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 16 18 21 00 19 1B 38 34 00 00 00 00 00 00 16 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 16 0F 00 C3 7C 00 00 90 8F 19 19 1B 38 34 00 00 00 00 00 00 16 0A 00 EB B2 00 00 00 1B 0A 34 00 00 00 00 00 00 16 09 00 DC 93 00 00 00 01 DC 93 00 00 16 2C 0A 16 07 F9 04 97 19 19 00 C1 7C 00 00 0A 00 56 94 00 00 00 1B C5 34 00 00 00 00 00 00 16 0A 00 40 AC 00 00 00 1B 95 33 00 00 00 00 00 00 16 2C 04 16 0F 00 C3 7C 00 00 25 0F 00 C2 7C 00 00 FB 92 92 00 C6 7C 00 00 00 C3 7C 00 00 16 00 C4 7C 00 00 16 26 2C 5F 16 else 06 3D 05 iAdjustedHitChance = iHitChance; 0F 00 C2 7C 00 00 00 C6 7C 00 00 return iAdjustedHitChance; 04 00 C2 7C 00 00 return returnvalue, endofscript 04 3A C5 7C 00 00 53 new hex: header: DB 7C 00 00 50 55 00 00 00 00 00 00 C0 7C 00 00 00 00 00 00 00 00 00 00 C6 7C 00 00 00 00 00 00 A9 02 00 00 2C 5C 00 00 52 05 00 00 B6 03 00 00 body: if(!DoesDamage()) 07 19 00 81 1B 9B 1A 00 00 00 00 00 00 16 16 return iHitChance; 04 00 C6 7C 00 00 if(WorldInfo.NetMode == NM_Standalone) 07 2A 05 9A 38 3A 19 01 E9 F9 FF FF 09 00 AB FE FF FF 00 01 AB FE FF FF 38 3A 24 00 16 07 6C 00 97 1A 26 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 2C C7 16 04 2C 64 07 E7 00 82 77 2E DA 72 00 00 19 1C 69 FC FF FF 16 09 00 B9 F9 FF FF 00 01 B9 F9 FF FF 2A 16 18 3F 00 19 2E DA 72 00 00 19 1C 69 FC FF FF 16 09 00 B9 F9 FF FF 00 01 B9 F9 FF FF 0A 00 46 6F 00 00 00 2D 01 46 6F 00 00 16 04 00 C6 7C 00 00 0F 00 C1 7C 00 00 19 2E 33 9F 00 00 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 0A 00 E2 9E 00 00 00 1B AE 32 00 00 00 00 00 00 16 07 BA 01 82 82 19 01 E6 7B 00 00 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 18 20 00 19 00 C1 7C 00 00 0A 00 D9 93 00 00 00 2D 01 D9 93 00 00 16 18 0B 00 2D 01 E6 BB 00 00 16 04 2C 64 07 C2 02 84 19 00 C1 7C 00 00 0A 00 D9 93 00 00 00 2D 01 D9 93 00 00 18 80 00 9A 19 19 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 09 00 A3 9C 00 00 00 01 A3 9C 00 00 09 00 B2 9F 00 00 00 01 B2 9F 00 00 25 16 16 0F 00 C2 7C 00 00 1B E1 35 00 00 00 00 00 00 00 C6 7C 00 00 00 C1 7C 00 00 19 00 C1 7C 00 00 0A 00 D9 93 00 00 00 2D 01 D9 93 00 00 16 07 C2 02 9B 00 C2 7C 00 00 1D FF FF FF FF 16 04 00 C2 7C 00 00 m_fDistanceToTarget = VSize(m_kUnit.GetLocation() - GetPrimaryTarget().GetLocation())/ float(64); (67 file bytes) 0F 01 1A BC 00 00 AC E1 D8 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 19 1B 38 34 00 00 00 00 00 00 16 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 16 16 38 3F 2C 40 16 iAdjustedHitChance = iHitChance 0F 00 C2 7C 00 00 00 C6 7C 00 00 if(m_fDistanceToTarget > float(m_kUnit.m_aCurrentStats[10])) (33 file bytes) 07 CD 03 B1 01 1A BC 00 00 38 3F 1A 2C 0A 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 += A1 iAdjustedHitChance 00 C2 7C 00 00 Min((5*Min(GetPrimaryTarget().m_arrEnemiesSeenBy.Length, 5) -25) - int (1.1*(m_fDistanceToTarget - float(m_kUnit.m_aCurrentStats[10]))), 5); (81 file bytes) F9 93 93 90 2C 05 F9 36 19 1B 38 34 00 00 00 00 00 00 16 09 00 9A 30 00 00 00 01 9A 30 00 00 2C 05 16 16 2C 19 16 38 44 AB 1E CD CC 8C 3F AF 01 1A BC 00 00 38 3F 1A 2C 0A 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 16 16 2C 05 16 execute += 16 iAdjustedHitChance = Max(iAdjustedHitChance, 1) 0F 00 C2 7C 00 00 FA 00 C2 7C 00 00 2C 01 16 null ops (235 bytes) 0B 0B 0B 0B 0B 0B 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B else 06 3D 05 iAdjustedHitChance = iHitChance; 0F 00 C2 7C 00 00 00 C6 7C 00 00 return iAdjustedHitChance 04 00 C2 7C 00 00 return returnvalue, endofscript 04 3A C5 7C 00 00 53 ----------------------------------- consolidated hex: (only last part that is changing) original: (virtual size 0x552) 07 5E 03 84 2D 01 D2 7B 00 00 18 81 00 99 19 19 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 09 00 A3 9C 00 00 00 01 A3 9C 00 00 09 00 B2 9F 00 00 00 01 B2 9F 00 00 2C 02 16 16 04 00 C6 7C 00 00 07 24 04 82 82 19 01 E6 7B 00 00 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 18 23 00 81 19 1B 38 34 00 00 00 00 00 00 16 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 16 16 18 0D 00 97 00 C6 7C 00 00 25 16 16 0F 00 C3 7C 00 00 91 00 C6 7C 00 00 2C 05 16 07 21 04 99 00 C6 7C 00 00 2C 32 16 0F 00 C4 7C 00 00 90 19 19 01 E6 7B 00 00 0A 00 EB B2 00 00 00 1B 0A 34 00 00 00 00 00 00 16 09 00 DB 93 00 00 00 01 DB 93 00 00 2C 0F 16 06 B2 04 07 B2 04 82 81 19 01 E6 7B 00 00 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 16 18 21 00 19 1B 38 34 00 00 00 00 00 00 16 0A 00 B5 32 00 00 00 1B DB 3D 00 00 00 00 00 00 16 16 0F 00 C3 7C 00 00 90 8F 19 19 1B 38 34 00 00 00 00 00 00 16 0A 00 EB B2 00 00 00 1B 0A 34 00 00 00 00 00 00 16 09 00 DC 93 00 00 00 01 DC 93 00 00 16 2C 0A 16 07 F9 04 97 19 19 00 C1 7C 00 00 0A 00 56 94 00 00 00 1B C5 34 00 00 00 00 00 00 16 0A 00 40 AC 00 00 00 1B 95 33 00 00 00 00 00 00 16 2C 04 16 0F 00 C3 7C 00 00 25 0F 00 C2 7C 00 00 FB 92 92 00 C6 7C 00 00 00 C3 7C 00 00 16 00 C4 7C 00 00 16 26 2C 5F 16 new: (virtual size 0x552) 0F 01 1A BC 00 00 AC E1 D8 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 19 1B 38 34 00 00 00 00 00 00 16 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 16 16 38 3F 2C 40 16 0F 00 C2 7C 00 00 00 C6 7C 00 00 07 CD 03 B1 01 1A BC 00 00 38 3F 1A 2C 0A 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 A1 00 C2 7C 00 00 F9 93 93 90 2C 05 F9 36 19 1B 38 34 00 00 00 00 00 00 16 09 00 9A 30 00 00 00 01 9A 30 00 00 2C 05 16 16 2C 19 16 38 44 AB 1E CD CC 8C 3F AF 01 1A BC 00 00 38 3F 1A 2C 0A 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 16 16 2C 05 16 16 0F 00 C2 7C 00 00 FA 00 C2 7C 00 00 2C 01 16 0B 0B 0B 0B 0B 0B 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 00 C6 7C 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B
References
Referred to by this article:
That refer to this article:
- <none>