XCOM Squadsight Aim Penalty XGAction Fire GetUIHitChance Notes

From Nexus Mods Wiki
Revision as of 03:18, 17 November 2018 by Dubiousintent (talk | contribs) (Added 'Category:Mod_Creation' & 'Category:Mods')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Overview

This contains the development notes for the changes to the function XGAction_Fire.GetUIHitChance in XComGame.upk.

This change supports the additional of an aim penalty when using Squadsight.

XCOM_Squadsight_Aim_Penalty_Mod

Development Notes

This also suggests a MUCH simpler fix to correct the UIUnitGermanMode_ShotInfo. Simply replace the GetHitChance() call with GetUIHitChance().

Call to GetUIHitChance()

Call to GetHitChance() : 1B A6 32 00 00 00 00 00 00 16

There are two versions of GetUIHitChance--
One in XGAbility_Targeted : 22 35 00 00
	Called from  UISightlineHUD_SightlineContainer.OnMouseEvent

One in XGAction_Fire : 22 35 00 00
	This decompiles very similarly to the version in XGAbility_Targeted, but is clearly different code. 

Now looking at the XGAction_Fire.GetUIHitChance:
The primary difference is that the XGAction_Fire version begins with:
    if(m_bShotIsBlocked)
    {
        iUIHitChance = 0;
        iUICriticalChance = 0;
    }
which the XGAbility_Targeted version lacks

Original hex code for XGAction_Fire.GetUIHitChance 07
header:
78 85 00 00 50 55 00 00 00 00 00 00 60 85 00 00 00 00 00 00 00 00 00 00 63 85 00 00 00 00 00 00 87 18 00 00 A5 28 03 00 FE 02 00 00 22 02 00 00 

body:
07 26 00 2D 01 23 83 00 00 0F 48 63 85 00 00 25 0F 48 62 85 00 00 25 06 FB 02 07 B2 01 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 20 16 07 81 00 9A 19 01 DD 82 00 00 09 00 E2 7B 00 00 00 01 E2 7B 00 00 2C 4B 16 0F 00 61 85 00 00 1D E2 FF FF FF 06 4E 01 07 4E 01 9A 19 01 DD 82 00 00 09 00 E2 7B 00 00 00 01 E2 7B 00 00 2C 35 16 07 4E 01 77 19 19 01 DD 82 00 00 0A 00 88 7C 00 00 00 1B 38 34 00 00 00 00 00 00 16 0C 00 39 33 00 00 00 1B 21 31 00 00 00 00 00 00 2C 2B 16 2A 16 A2 00 61 85 00 00 19 19 2E FE 2C 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 F0 2C 00 00 00 01 F0 2C 00 00 02 00 F0 2C 00 00 00 2C 28 16 0F 48 63 85 00 00 19 01 41 BC 00 00 37 00 A4 33 00 00 00 1B B5 71 00 00 00 00 00 00 25 00 61 85 00 00 27 27 19 01 DD 82 00 00 0A 00 88 7C 00 00 00 1B 38 34 00 00 00 00 00 00 16 4A 4A 16 0F 48 62 85 00 00 25 06 FB 02 07 4E 02 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 2D 16 0F 48 63 85 00 00 19 01 DD 82 00 00 4B 00 C9 7C 00 00 00 1B 8A 34 00 00 00 00 00 00 E1 D8 19 19 01 DD 82 00 00 09 00 E6 7B 00 00 00 01 E6 7B 00 00 09 00 DE F8 FF FF 00 01 DE F8 FF FF 1B E9 34 00 00 00 00 00 00 16 16 16 16 0F 48 62 85 00 00 25 06 FB 02 07 A9 02 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 24 16 0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 0F 48 62 85 00 00 25 06 FB 02 0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 0F 48 62 85 00 00 19 01 DD 82 00 00 0A 00 B3 7C 00 00 00 1B D9 31 00 00 00 00 00 00 16 04 0B 53 

portion of code I want:
else
06 FB 02 

	if(m_kShot.HasProperty(36))
	07 A9 02 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 24 16 

		iUIHitChance = m_kShot.GetHitChance();
		0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 

		iUICriticalChance = 0;
		0F 48 62 85 00 00 25 

	else
	06 FB 02 

		iUIHitChance = m_kShot.GetHitChance();
		0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 

		iUICriticalChance = m_kShot.GetCriticalChance();
		0F 48 62 85 00 00 19 01 DD 82 00 00 0A 00 B3 7C 00 00 00 1B D9 31 00 00 00 00 00 00 16
		
As before, remove the extra call to m_kShot.GetHitChance(), and replace it with AdjustToHit(m_kShot.GetHitChance())

reworked code:
else
06 FB 02 

	iUIHitChance = m_kShot.AdjustToHit(m_kShot.GetHitChance());
	0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B 9B 02 00 00 00 00 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 16 

	if(m_kShot.HasProperty(36))
	07 C8 02 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 24 16 

		iUICriticalChance = 0;
		0F 48 62 85 00 00 25 

	else
	06 FB 02 

		iUICriticalChance = m_kShot.GetCriticalChance();
		0F 48 62 85 00 00 19 01 DD 82 00 00 0A 00 B3 7C 00 00 00 1B D9 31 00 00 00 00 00 00 16

		null ops: (6 bytes)
		01 DD 82 00 00 0B 
		
		
consolidated: XGAction_Fire.GetUIHitChance hex code
original: (0x2FE virtual)
06 FB 02 07 A9 02 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 24 16 0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 0F 48 62 85 00 00 25 06 FB 02 0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 0F 48 62 85 00 00 19 01 DD 82 00 00 0A 00 B3 7C 00 00 00 1B D9 31 00 00 00 00 00 00 16

new: (0x2FE virtual)
06 FB 02 0F 48 63 85 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B 9B 02 00 00 00 00 00 00 19 01 DD 82 00 00 0A 00 B1 7C 00 00 00 1B A6 32 00 00 00 00 00 00 16 16 07 C8 02 19 01 DD 82 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 24 16 0F 48 62 85 00 00 25 06 FB 02 0F 48 62 85 00 00 19 01 DD 82 00 00 0A 00 B3 7C 00 00 00 1B D9 31 00 00 00 00 00 00 16 01 DD 82 00 00 0B 


References

Referred to by this article:

That refer to this article:

  • <none>