XCOM Squadsight Aim Penalty Adjust To Hit Notes

From Nexus Mods Wiki
Jump to: navigation, search

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>