XCOM Squadsight Aim Penalty XGAction Fire GetUIHitChance Notes
Revision as of 03:18, 17 November 2018 by Dubiousintent (talk | contribs) (Added 'Category:Mod_Creation' & 'Category:Mods')
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>