Jump to content

Display Soldiers' XP and Mobility in Character Card View


johnnylump

Recommended Posts

May be an engine counts a tile soldier standing at as a first tile? This corresponds with 8 tiles. And everything else seems to be rounded up. This will explain 7 + 7 = 14 tiles while moving and 15 tiles while dashing: 7 + 1 = 8 and 15 + 1 = 16, which corresponds with 12/1.5 = 8 and 8 * 2 = 16.

 

All of the actual pathing and distances when applied are always converted into the inherent Unreal Engine distance units, which scale at 64 per meter. So technically a mobility of 12 => 12*64 = 768, and the 768 number is used to determine everything.

 

The tile system is an overlay on top of the underlying system. There is a function that converts from x,y position in unreal units into x,y tile position, returning the closest tile. It's unclear what algorithm is used to determine which tiles can be entered. Technically units are not constrained to occupy exact tile positions. In particular when first placed it is possible for units to be offset from the center of a tile, it is not uncommon in EW for suppressing units to not return to the center of their designated tile (pretty sure this is a bug).

Link to comment
Share on other sites

  • Replies 53
  • Created
  • Last Reply

Top Posters In This Topic

Updated PatchUPK for better UPKModder compatibility.

 

Here is quick-converted PatchUPK XP and Mobility Display mod version:

 

 

MOD_NAME=Display XP and Mobility
AUTHOR=johnnylump and Amineri
DESCRIPTION=Display Soldiers' XP and Mobility in Character Card View

UPK_FILE=XComStrategyGame.upk

OBJECT=UIStrategyComponent_SoldierStats.UpdateData:AUTO

[BEFORE_HEX]
d1 05 00 00 b9 03 00 00 

0F 00 98 1D 00 00 70 01 8E 1D 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
//Health = m_strStatHealth $ m_kLocalMgr.m_kHeader.txtHP.StrValue

07 46 01 82 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 18 22 00 81 19 01 8A 1D 00 00 0A 00 71 4C 00 00 00 2D 01 71 4C 00 00 16 16 
//if((m_kLocalMgr.m_kHeader.txtHPMod.StrValue != "") && !m_kLocalMgr.m_bCovertOperativeMode)

	0E 99 F9 FF FF 61 42 00 98 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Health $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtHPMod.StrValue, 4, 20)

0F 00 97 1D 00 00 70 01 8D 1D 00 00 12 20 6C FE FF FF 93 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 4A 16 16 
//Will = m_strStatWill $ class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtWill.StrValue, m_kLocalMgr.m_kHeader.txtWill.iState)

07 99 02 9A 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 0B 16 
//if(m_kLocalMgr.m_kHeader.txtWill.iState == 11)

	0E 99 F9 FF FF 61 42 00 97 1D 00 00 1F 3C 69 6D 67 20 73 72 63 3D 27 70 72 6F 6D 6F 74 65 5F 70 73 69 27 20 77 69 64 74 68 3D 22 32 30 22 20 68 65 69 67 68 74 3D 22 32 30 22 3E 3C 2F 69 6D 67 3E 00 16 
	//Will $= "<img src='promote_psi' width=\\"20\\" height=\\"20\\"></img>"

07 60 03 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
//if(m_kLocalMgr.m_kHeader.txtWillMod.StrValue != "")

	0E 99 F9 FF FF 61 42 00 97 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Will $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtWillMod.StrValue, 4, 20)

0F 00 96 1D 00 00 70 01 8C 1D 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
//Defense = m_strStatDefense $ m_kLocalMgr.m_kHeader.txtDefense.StrValue

07 80 04 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
//if(m_kLocalMgr.m_kHeader.txtDefenseMod.StrValue != "")

	0E 99 F9 FF FF 61 42 00 96 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Defense $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtDefenseMod.StrValue, 4, 20)

0F 00 95 1D 00 00 70 01 8B 1D 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
//Offense = m_strStatOffense $ m_kLocalMgr.m_kHeader.txtOffense.StrValue

07 A0 05 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
//if(m_kLocalMgr.m_kHeader.txtOffenseMod.StrValue != "")

	0E 99 F9 FF FF 61 42 00 95 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Offense $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtOffenseMod.StrValue, 4, 20)

1C 9F 1D 00 00 00 98 1D 00 00 00 97 1D 00 00 00 96 1D 00 00 00 95 1D 00 00 16 
//AS_SetSoldierStats(Health, Will, Defense, Offense)

04 0B 
	//return

53 
//	
[/BEFORE_HEX]

[AFTER_HEX]
57 07 00 00 a7 04 00 00

0F 00 98 1D 00 00 70 35 09 F9 FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 20 20 20 20 00 16
//Health = m_kLocalMgr.m_kHeader.txtstrength.StrValue (XP) $ "    "

0f 00 98 1D 00 00 70 70 00 98 1D 00 00 01 8E 1D 00 00 16 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
//Health = Health $ m_strStatHealth $ m_kLocalMgr.m_kHeader.txtHP.StrValue

07 a7 01 82 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 18 22 00 81 19 01 8A 1D 00 00 0A 00 71 4C 00 00 00 2D 01 71 4C 00 00 16 16 
//if((m_kLocalMgr.m_kHeader.txtHPMod.StrValue != "") && !m_kLocalMgr.m_bCovertOperativeMode)

	0E 99 F9 FF FF 61 42 00 98 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Health $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtHPMod.StrValue, 4, 20)

0F 00 97 1D 00 00 70 01 8D 1D 00 00 12 20 6C FE FF FF 93 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 4A 16 16 
//Will = m_strStatWill $ class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtWill.StrValue, m_kLocalMgr.m_kHeader.txtWill.iState)

07 2b 03 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
//if(m_kLocalMgr.m_kHeader.txtWillMod.StrValue != "")

	0E 99 F9 FF FF 61 42 00 97 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Will $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtWillMod.StrValue, 4, 20)

0f 00 96 1D 00 00 70 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 20 20 20 20 00 16
//Defense = m_kLocalMgr.m_kHeader.txtcritshot.StrValue $ "    " (Psi XP: )

0f 00 96 1D 00 00 70 70 00 96 1D 00 00 1F 4D 6F 62 3a 00 16 35 09 F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 0b
//Defense = Defense $ "Mob: " $ m_kLocalMgr.m_kHeader.txtspeed.StrValue

07 aa 04 7b 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16
//if (m_kLocalMgr.m_kHeader.txtSpeedMod.StrValue != "")
	
	0E 99 F9 FF FF 61 42 00 96 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Defense $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtSpeedMod.StrValue, 4, 20)

0f 00 96 1D 00 00 70 70 70 00 96 1D 00 00 1f 20 20 20 20 00 16 01 8C 1D 00 00 16 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16
//Defense = Defense $ "    " $ m_strStatDefense $ m_kLocalMgr.m_kHeader.txtDefense.StrValue

07 dd 05 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
//if(m_kLocalMgr.m_kHeader.txtDefenseMod.StrValue != "")

	0E 99 F9 FF FF 61 42 00 96 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Defense $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtDefenseMod.StrValue, 4, 20)

0F 00 95 1D 00 00 70 01 8B 1D 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
//Offense = m_strStatOffense $ m_kLocalMgr.m_kHeader.txtOffense.StrValue

07 fd 06 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
//if(m_kLocalMgr.m_kHeader.txtOffenseMod.StrValue != "")

	0E 99 F9 FF FF 61 42 00 95 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
	//Offense $= class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtOffenseMod.StrValue, 4, 20)

0F 00 98 1D 00 00 70 1F 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 98 1D 00 00 16
// Health = bunchaspaces $ Health

1C 9F 1D 00 00 00 98 1D 00 00 00 97 1D 00 00 00 96 1D 00 00 00 95 1D 00 00 16 
//AS_SetSoldierStats(Health, Will, Defense, Offense)

04 0B 
	//return

53 
[/AFTER_HEX]

OBJECT=XGSoldierUI.UpdateHeader:AUTO

[BEFORE_HEX]
6f 0f 00 00 c7 09 00 00 

14 2D 00 00 4D 00 00 12 20 34 FE FF FF 3D 00 2E FF FF FF 00 1C FB FB FF FF 35 DE F8 FF FF CB F9 FF FF 00 01 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 2C 47 16 
//bHasMindShield = class'XGTacticalGameCoreNativeBase'.static.TInventoryHasItemType(m_kSoldier.m_kChar.kInventory, 71)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 4F 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 A8 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 04 16 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 03 16 16 
//m_kHeader.txtName.StrValue = m_kSoldier.GetName(4) @ m_kSoldier.GetName(3)

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 4F 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtName.iState = 0

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 4E 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 02 16 
//m_kHeader.txtNickname.StrValue = m_kSoldier.GetName(2)

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 4E 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 09 
//m_kHeader.txtNickname.iState = 9

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6F 4C 00 00 
//m_kHeader.txtStatus.strLabel = m_strLabelStatus

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0A 00 74 53 00 00 00 1B 52 13 00 00 00 00 00 00 16 
//m_kHeader.txtStatus.StrValue = m_kSoldier.GetStatusString()

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0A 00 76 53 00 00 00 1B 53 13 00 00 00 00 00 00 16 
//m_kHeader.txtStatus.iState = m_kSoldier.GetStatusUIState()

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6E 4C 00 00 
//m_kHeader.txtOffense.strLabel = m_strLabelOffense

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0B 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 26 16 
//m_kHeader.txtOffense.StrValue = string(m_kSoldier.GetCurrentStat(1))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtOffense.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtOffense.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6D 4C 00 00 
//m_kHeader.txtDefense.strLabel = m_strLabelDefense

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 2C 02 16 
//m_kHeader.txtDefense.StrValue = string(m_kSoldier.GetCurrentStat(2))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtDefense.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtDefense.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6C 4C 00 00 
//m_kHeader.txtHP.strLabel = m_strLabelHPSPACED

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0B 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 25 16 
//m_kHeader.txtHP.StrValue = string(m_kSoldier.GetCurrentStat(0))

07 7A 05 19 01 78 4C 00 00 0A 00 05 53 00 00 00 1B EB 17 00 00 00 00 00 00 16 
//if(m_kSoldier.IsInjured())

	0E 99 F9 FF FF 61 42 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2F 00 38 53 19 01 78 4C 00 00 0B 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 25 16 16 16 
	//m_kHeader.txtHP.StrValue $= ("/" $ string(m_kSoldier.GetMaxStat(0)))

	0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtHP.iState = 3

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
	//m_kHeader.txtHP.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6B 4C 00 00 
	//m_kHeader.txtSpeed.strLabel = m_strLabelMobility

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 90 93 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 03 16 2C 09 16 2C 0a 16 
	//m_kHeader.txtSpeed.StrValue = string((m_kSoldier.GetMaxStat(3) - 9) * 10)

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
	//m_kHeader.txtSpeed.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
	//m_kHeader.txtSpeed.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6A 4C 00 00 
	//m_kHeader.txtWill.strLabel = m_strLabelWill

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 07 16 
	//m_kHeader.txtWill.StrValue = string(m_kSoldier.GetMaxStat(7))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 45 2D 00 00 4D 00 00 02 00 2C 0B 01 00 25 
	//m_kHeader.txtWill.iState = ((bHasMindShield) ? 11 : 0)

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
	//m_kHeader.txtWill.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 69 4C 00 00 
	//m_kHeader.txtStrength.strLabel = m_strLabelStrength

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 04 16 
	//m_kHeader.txtStrength.StrValue = string(m_kSoldier.GetMaxStat(4))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
	//m_kHeader.txtStrength.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
	//m_kHeader.txtStrength.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 68 4C 00 00 
	//m_kHeader.txtCritShot.strLabel = m_strLabelCritical

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 0D 16 
	//m_kHeader.txtCritShot.StrValue = string(m_kSoldier.GetMaxStat(13))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
	//m_kHeader.txtCritShot.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
	//m_kHeader.txtCritShot.bNumber = true

19 1B 5E 2F 00 00 00 00 00 00 16 44 00 00 00 00 00 00 1B 49 11 00 00 00 00 00 00 35 DE F8 FF FF CB F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 00 01 4D 00 00 16 
	//TACTICAL().GetBackpackItemArray(m_kSoldier.m_kChar.kInventory, arrBackPackItems)

19 1B 5E 2F 00 00 00 00 00 00 16 8B 00 00 00 00 00 00 1B 2D 12 00 00 00 00 00 00 00 02 4D 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 3B 00 05 FF FF FF 00 1B C5 11 00 00 00 00 00 00 35 DE F8 FF FF CB F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 16 00 01 4D 00 00 16 
	//TACTICAL().GetInventoryStatModifiers(aModifiers, m_kSoldier.m_kChar, TACTICAL().GetEquipWeapon(m_kSoldier.m_kChar.kInventory), arrBackPackItems)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 B6 0B 9B 1A 26 00 02 4D 00 00 25 16


	//m_kHeader.txtOffenseMod.StrValue = ""
 
	//if(aModifiers[1] != 0)

07 47 0B 97 1A 26 00 02 4D 00 00 25 16 
	//if(aModifiers[1] > 0)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 26 00 02 4D 00 00 16 
	//m_kHeader.txtOffenseMod.StrValue = "+" $ string(aModifiers[1])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	//m_kHeader.txtOffenseMod.iState = 2

06 B6 0B 
	//goto J0xBB6

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 26 00 02 4D 00 00 
	//m_kHeader.txtOffenseMod.StrValue = string(aModifiers[1])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtOffenseMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 F4 0C 9B 1A 2C 02 00 02 4D 00 00 25 16 
	//m_kHeader.txtDefenseMod.StrValue = ""


	//if(aModifiers[2] != 0)

07 84 0C 97 1A 2C 02 00 02 4D 00 00 25 16 
	//if(aModifiers[2] > 0)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 02 00 02 4D 00 00 16 
	//m_kHeader.txtDefenseMod.StrValue = "+" $ string(aModifiers[2])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	//m_kHeader.txtDefenseMod.iState = 2

06 F4 0C 
	//goto J0xCF4

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 02 00 02 4D 00 00 
	//m_kHeader.txtDefenseMod.StrValue = string(aModifiers[2])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtDefenseMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 2E 0E 9B 1A 25 00 02 4D 00 00 25 16 
	//m_kHeader.txtHPMod.StrValue = ""


	//if(aModifiers[0] != 0)

07 BF 0D 97 1A 25 00 02 4D 00 00 25 16 
	//if(aModifiers[0] > 0)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 25 00 02 4D 00 00 16 
	//m_kHeader.txtHPMod.StrValue = "+" $ string(aModifiers[0])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	//m_kHeader.txtHPMod.iState = 2

06 2E 0E 
	//goto J0xE2E

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 25 00 02 4D 00 00 
	//m_kHeader.txtHPMod.StrValue = string(aModifiers[0])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtHPMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 6C 0F 9B 1A 2C 07 00 02 4D 00 00 25 16 
	//m_kHeader.txtWillMod.StrValue = ""


	//if(aModifiers[7] != 0)

07 FC 0E 97 1A 2C 07 00 02 4D 00 00 25 16 
	//if(aModifiers[7] > 0)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 07 00 02 4D 00 00 16 
	//m_kHeader.txtWillMod.StrValue = "+" $ string(aModifiers[7])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	//m_kHeader.txtWillMod.iState = 2

06 6C 0F 
	//goto J0xF6C

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 07 00 02 4D 00 00 
	//m_kHeader.txtWillMod.StrValue = string(aModifiers[7])

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtWillMod.iState = 3

04 0B 
	//return

53 
[/BEFORE_HEX]

[AFTER_HEX]
02 11 00 00 ea 0a 00 00 

14 2D 00 00 4D 00 00 12 20 34 FE FF FF 3D 00 2E FF FF FF 00 1C FB FB FF FF 35 DE F8 FF FF CB F9 FF FF 00 01 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 2C 47 16 
//bHasMindShield = class'XGTacticalGameCoreNativeBase'.static.TInventoryHasItemType(m_kSoldier.m_kChar.kInventory, 71)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 4F 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 A8 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 04 16 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 03 16 16 
//m_kHeader.txtName.StrValue = m_kSoldier.GetName(4) @ m_kSoldier.GetName(3)

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 4F 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtName.iState = 0

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 4E 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 02 16 
//m_kHeader.txtNickname.StrValue = m_kSoldier.GetName(2)

0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 4E 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 09 
//m_kHeader.txtNickname.iState = 9

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6F 4C 00 00 
//m_kHeader.txtStatus.strLabel = m_strLabelStatus

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0A 00 74 53 00 00 00 1B 52 13 00 00 00 00 00 00 16 
//m_kHeader.txtStatus.StrValue = m_kSoldier.GetStatusString()

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0A 00 76 53 00 00 00 1B 53 13 00 00 00 00 00 00 16 
//m_kHeader.txtStatus.iState = m_kSoldier.GetStatusUIState()

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6E 4C 00 00 
//m_kHeader.txtOffense.strLabel = m_strLabelOffense

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0B 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 26 16 
//m_kHeader.txtOffense.StrValue = string(m_kSoldier.GetCurrentStat(1))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtOffense.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtOffense.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6D 4C 00 00 
//m_kHeader.txtDefense.strLabel = m_strLabelDefense

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 2C 02 16 
//m_kHeader.txtDefense.StrValue = string(m_kSoldier.GetCurrentStat(2))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtDefense.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtDefense.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6C 4C 00 00 
//m_kHeader.txtHP.strLabel = m_strLabelHPSPACED

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0B 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 25 16 
//m_kHeader.txtHP.StrValue = string(m_kSoldier.GetCurrentStat(0))

07 7A 05 19 01 78 4C 00 00 0A 00 05 53 00 00 00 1B EB 17 00 00 00 00 00 00 16 
//if(m_kSoldier.IsInjured())

	0E 99 F9 FF FF 61 42 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2F 00 38 53 19 01 78 4C 00 00 0B 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 25 16 16 16 
	//m_kHeader.txtHP.StrValue $= ("/" $ string(m_kSoldier.GetMaxStat(0)))

	0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtHP.iState = 3

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtHP.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6B 4C 00 00 
//m_kHeader.txtSpeed.strLabel = m_strLabelMobility

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 90 93 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 03 16 2C 00 16 2C 01 16 
//m_kHeader.txtSpeed.StrValue = string((m_kSoldier.GetMaxStat(3) - 0) * 1)

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtSpeed.iState = 0

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtSpeed.bNumber = true

0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6A 4C 00 00 
//m_kHeader.txtWill.strLabel = m_strLabelWill

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 07 16 
//m_kHeader.txtWill.StrValue = string(m_kSoldier.GetMaxStat(7))

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 45 2D 00 00 4D 00 00 02 00 2C 0B 01 00 25 
//m_kHeader.txtWill.iState = ((bHasMindShield) ? 11 : 0)

14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
//m_kHeader.txtWill.bNumber = true

0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
//m_kHeader.txtStrength.iState = 0

0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 A8 A8 A8 1F 58 50 3A 00 38 53 35 DE FA FF FF C1 F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B2 52 00 00 00 01 B2 52 00 00 16 1F 2F 00 16 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 17 00 98 FB FF FF 00 1B 99 13 00 00 00 00 00 00 92 19 01 78 4C 00 00 0A 00 C6 52 00 00 00 1B 00 13 00 00 00 00 00 00 16 26 16 16 16
//m_kHeader.txtStrength.StrValue = (("XP:" @ string(m_kSoldier.m_kSoldier.iXP)) @ "/") @ string(m_kSoldier.TACTICAL().GetXPRequired(m_kSoldier.GetRank() + 1))

0f 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1f 00 0b 0b 0b

07 d6 09 97 35 E0 FA FF FF C1 F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B2 52 00 00 00 01 B2 52 00 00 24 00 16
//m_kHeader.txtCritShot.StrValue = "" 
//if m_kSoldier.m_kSoldier.iPsiXP > 0

	0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 a8 a8 a8 1f 50 58 50 3a 00 38 53 35 e0 FA FF FF C1 F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B2 52 00 00 00 01 B2 52 00 00 16 1F 2F 00 16 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 17 00 98 FB FF FF 00 1B f6 12 00 00 00 00 00 00 92 19 01 78 4C 00 00 0A 00 C6 52 00 00 00 1B f5 12 00 00 00 00 00 00 16 26 16 16 16
	//m_kHeader.txtCritShot.StrValue = (("PXP:" @ string (m_kSoldier.m_kSoldier.iPsiXP)) @ "/") @ string (m_kSoldier.TACTICAL().GetPsiXPRequired((GetPsiRank()) + 1))

19 1B 5E 2F 00 00 00 00 00 00 16 44 00 00 00 00 00 00 1B 49 11 00 00 00 00 00 00 35 DE F8 FF FF CB F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 00 01 4D 00 00 16 
//TACTICAL().GetBackpackItemArray(m_kSoldier.m_kChar.kInventory, arrBackPackItems)

19 1B 5E 2F 00 00 00 00 00 00 16 8B 00 00 00 00 00 00 1B 2D 12 00 00 00 00 00 00 00 02 4D 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 3B 00 05 FF FF FF 00 1B C5 11 00 00 00 00 00 00 35 DE F8 FF FF CB F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 16 00 01 4D 00 00 16 
//TACTICAL().GetInventoryStatModifiers(aModifiers, m_kSoldier.m_kChar, TACTICAL().GetEquipWeapon(m_kSoldier.m_kChar.kInventory), arrBackPackItems)

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 0b 0c 9B 1A 26 00 02 4D 00 00 25 16
//m_kHeader.txtOffenseMod.StrValue = ""
 
//if(aModifiers[1] != 0)

07 9c 0B 97 1A 26 00 02 4D 00 00 25 16 
	//if(aModifiers[1] > 0)

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 26 00 02 4D 00 00 16 
		//m_kHeader.txtOffenseMod.StrValue = "+" $ string(aModifiers[1])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
		//m_kHeader.txtOffenseMod.iState = 2

	06 0b 0c 
	//goto J0xBB6

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 26 00 02 4D 00 00 
		//m_kHeader.txtOffenseMod.StrValue = string(aModifiers[1])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
		//m_kHeader.txtOffenseMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 49 0d 9B 1A 2C 02 00 02 4D 00 00 25 16 
//m_kHeader.txtDefenseMod.StrValue = ""

//if(aModifiers[2] != 0)

	07 d9 0c 97 1A 2C 02 00 02 4D 00 00 25 16 
	//if(aModifiers[2] > 0)

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 02 00 02 4D 00 00 16 
		//m_kHeader.txtDefenseMod.StrValue = "+" $ string(aModifiers[2])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
		//m_kHeader.txtDefenseMod.iState = 2

	06 49 0d 
	//goto J0xCF4

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 02 00 02 4D 00 00 
		//m_kHeader.txtDefenseMod.StrValue = string(aModifiers[2])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
		//m_kHeader.txtDefenseMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 83 0E 9B 1A 25 00 02 4D 00 00 25 16 
//m_kHeader.txtHPMod.StrValue = ""

	//if(aModifiers[0] != 0)

	07 14 0e 97 1A 25 00 02 4D 00 00 25 16 
	//if(aModifiers[0] > 0)

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 25 00 02 4D 00 00 16 
		//m_kHeader.txtHPMod.StrValue = "+" $ string(aModifiers[0])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
		//m_kHeader.txtHPMod.iState = 2

	06 83 0E 
	//goto J0xE2E

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 25 00 02 4D 00 00 
		//m_kHeader.txtHPMod.StrValue = string(aModifiers[0])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
		//m_kHeader.txtHPMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 c1 0F 9B 1A 2C 07 00 02 4D 00 00 25 16 
//m_kHeader.txtWillMod.StrValue = ""

//if(aModifiers[7] != 0)

	07 51 0f 97 1A 2C 07 00 02 4D 00 00 25 16 
	//if(aModifiers[7] > 0)

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 07 00 02 4D 00 00 16 
		//m_kHeader.txtWillMod.StrValue = "+" $ string(aModifiers[7])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
		//m_kHeader.txtWillMod.iState = 2

	06 c1 0F 
	//goto J0xF6C

		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 07 00 02 4D 00 00 
		//m_kHeader.txtWillMod.StrValue = string(aModifiers[7])

		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
		//m_kHeader.txtWillMod.iState = 3

0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 0b
//m_kHeader.txtSpeedMod.StrValue = ""

07 7c 10 97 1A 24 03 00 02 4D 00 00 2C 00 16
//if(aModifiers[3] > 0)

	0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 03 00 02 4D 00 00 16 
	//m_kHeader.txtSpeedMod.StrValue = "+" $ string(aModifiers[3])

	0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	//m_kHeader.txtSpeedMod.iState = 2

07 ff 10 96 1A 24 03 00 02 4D 00 00 2C 00 16
//if(aModifiers[3] < 0)

	0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 03 00 02 4D 00 00 
	//m_kHeader.txtSpeedMod.StrValue = string(aModifiers[3])

	0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
	//m_kHeader.txtSpeedMod.iState = 3

04 0B 
	//return

53 
[/AFTER_HEX]

UPK_FILE=XComGame.upk

OBJECT=XGTacticalGameCore.GetXPRequired

[BEFORE_HEX]
1d 80 96 98 00 
[/BEFORE_HEX]

[AFTER_HEX]
1d 9f 86 01 00 
[/AFTER_HEX]

OBJECT=XGTacticalGameCore.GetInventoryStatModifiers:AUTO

[BEFORE_HEX]
53 02 00 00 8f 01 00 00

0F 00 7E 84 00 00 25 
	//iStat = 0

07 50 02 96 00 7E 84 00 00 2C 13 16 
	//if(iStat < 19)

0F 1A 00 7E 84 00 00 48 82 84 00 00 92 1B 4A 37 00 00 00 00 00 00 00 7E 84 00 00 00 7F 84 00 00 48 81 84 00 00 16 1B E2 3B 00 00 00 00 00 00 00 7E 84 00 00 38 3A 00 80 84 00 00 48 81 84 00 00 16 16 
	//aModifiers[iStat] = (GetBackpackStatBonus(iStat, arrBackPackItems, kCharacter)) + (GetWeaponStatBonus(iStat, iEquippedWeapon, kCharacter))

A1 1A 00 7E 84 00 00 48 82 84 00 00 1B 35 37 00 00 00 00 00 00 00 7E 84 00 00 35 4B 0F 00 00 4C 0F 00 00 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 48 81 84 00 00 16 16 
	//aModifiers[iStat] += (GetArmorStatBonus(iStat, kCharacter.kInventory.iArmor, kCharacter))

07 59 01 97 1A 2C 1B 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
	//if(kCharacter.aUpgrades[27] > 0)

A1 1A 00 7E 84 00 00 48 82 84 00 00 1B 6F 38 00 00 00 00 00 00 00 7E 84 00 00 35 4B 0F 00 00 4C 0F 00 00 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 16 16 
	//aModifiers[iStat] += (GetExtraArmorStatBonus(iStat, kCharacter.kInventory.iArmor))

05 7E 84 00 00 00 00 7E 84 00 00 
	//switch(iStat)

0A B0 01 2C 03 
	//case 3:

07 AD 01 97 1A 2C 1F 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
	//if(kCharacter.aUpgrades[31] > 0)

A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 04 16 
	//aModifiers[iStat] += 4

06 42 02 
	//goto J0x242

0A 3F 02 25 
	//case 0:

07 3C 02 97 1A 2C 7B 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
	//if(kCharacter.aUpgrades[123] > 0)

07 3C 02 84 9A 35 56 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2C 03 16 18 25 00 9A 38 3A 35 4F 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 38 3A 24 06 16 16 
	//if((kCharacter.iType == 3) || kCharacter.eClass == 6)

A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 03 16 
	//aModifiers[iStat] += 3

06 42 02 
	//goto J0x242

0A FF FF 
	//default:

A5 00 7E 84 00 00 16 
	//++ iStat

06 0B 00 
	//goto J0x0B

04 0B 
	//return

53 
[/BEFORE_HEX]

[AFTER_HEX]
1d 03 00 00 15 02 00 00

0F 00 7E 84 00 00 25 
	//iStat = 0

07 1a 03 96 00 7E 84 00 00 2C 13 16 
	//if(iStat < 19)

	0F 1A 00 7E 84 00 00 48 82 84 00 00 92 1B 4A 37 00 00 00 00 00 00 00 7E 84 00 00 00 7F 84 00 00 48 81 84 00 00 16 1B E2 3B 00 00 00 00 00 00 00 7E 84 00 00 38 3A 00 80 84 00 00 48 81 84 00 00 16 16 
	//aModifiers[iStat] = (GetBackpackStatBonus(iStat, arrBackPackItems, kCharacter)) + (GetWeaponStatBonus(iStat, iEquippedWeapon, kCharacter))

	A1 1A 00 7E 84 00 00 48 82 84 00 00 1B 35 37 00 00 00 00 00 00 00 7E 84 00 00 35 4B 0F 00 00 4C 0F 00 00 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 48 81 84 00 00 16 16 
	//aModifiers[iStat] += (GetArmorStatBonus(iStat, kCharacter.kInventory.iArmor, kCharacter))

	07 59 01 97 1A 2C 1B 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
	//if(kCharacter.aUpgrades[27] > 0)

	A1 1A 00 7E 84 00 00 48 82 84 00 00 1B 6F 38 00 00 00 00 00 00 00 7E 84 00 00 35 4B 0F 00 00 4C 0F 00 00 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 16 16 
	//aModifiers[iStat] += (GetExtraArmorStatBonus(iStat, kCharacter.kInventory.iArmor))

	05 7E 84 00 00 00 00 7E 84 00 00 
	//switch(iStat)

	0A 7a 02 2C 03 
		//case 3:

		07 AD 01 97 1A 2C 1F 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
		//if(kCharacter.aUpgrades[31] > 0) // Sprinter

			A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 04 16 
			//aModifiers[iStat] += 4

		07 77 02 84 9A 35 56 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2C 03 16 18 25 00 9A 38 3A 35 4F 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 38 3A 24 06 16 16 
		//if((kCharacter.iType == 3) || kCharacter.eClass == 6)

			07 35 02 97 1A 2C 7a 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
			//if(kCharacter.aUpgrades[122] > 0) // Adv Servo

				A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 03 16 
				//aModifiers[iStat] += 3

			//07 77 02 97 1a 2c 51 35 53 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 		
				//if(kCharacter.aAbilities[81] > 0 // Didn't work

			07 77 02 1c 7a 10 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2c 16 16 
			// if TInventoryHasItemType (kCharacter.kInventory, 22) doesn't work in vanilla

				A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 04 16 
				//aModifiers[iStat] += 4

	06 0c 03 
	//goto J0x242

	0A 09 03 25 
	//case 0:

		07 06 03 97 1A 2C 7B 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
		//if(kCharacter.aUpgrades[123] > 0) //

			07 06 03 84 9A 35 56 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2C 03 16 18 25 00 9A 38 3A 35 4F 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 38 3A 24 06 16 16 
			//if((kCharacter.iType == 3) || kCharacter.eClass == 6)

				A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 03 16 
				//aModifiers[iStat] += 3

	06 0c 03 
	//goto J0x242

	0A FF FF 
	//default:

		A5 00 7E 84 00 00 16 
		//++ iStat

		06 0B 00 
		//goto J0x0B

04 0B 
	//return

53 
[/AFTER_HEX]

OBJECT=XGUnitNativeBase.GetMaxPathLength

[BEFORE_HEX]
//bIgnorePoison = false
//49 02 00 28 15 

//iMaxMobility = m_kCharacter.GetCharMaxPathLength() + m_aInventoryStats[3]
//0F 00 B8 38 00 00 92 19 01 35 3A 00 00 0A 00 02 B6 00 00 00 1B 9A 37 00 00 00 00 00 00 16 1A 2C 03 01 37 3A 00 00 16 

//if((GetAppliedAbility(31)) != none)  // eAbility_CombatStim
//07 B9 00 77 1B 30 37 00 00 00 00 00 00 2C 1F 16 2A 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4
//	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 04 16 

//if(IsAffectedByAbility(72))  // eAbility_BloodCall
//07 33 01 1B E2 43 00 00 00 00 00 00 2C 48 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4
//	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 04 16 

//if(IsAffectedByAbility(74))  // eAbility_AdrenalNeurosympathy
//07 AD 01 1B E2 43 00 00 00 00 00 00 2C 4A 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.2
//	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 02 16 

//if(GetCharacter().HasUpgrade(122))  // ePerk_Foundry_AdvancedServomotors
07 59 02 19 1B 8F 37 00 00 00 00 00 00 16 0C 00 14 B6 00 00 00 1B 55 3D 00 00 00 00 00 00 2C 7A 16 

	//if((IsATank()) || IsAugmented())
	07 59 02 84 1B FC 43 00 00 00 00 00 00 16 18 0B 00 1B 04 44 00 00 00 00 00 00 16 16 

		//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.3
		A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 03 16 

//if((IsAugmented()) && GetInventory().HasItemOfType(22))  // eItem_MecKineticArm
07 F8 02 82 1B 04 44 00 00 00 00 00 00 16 18 23 00 19 1B FE 38 00 00 00 00 00 00 16 0C 00 AD B9 00 00 00 1B 13 3D 00 00 00 00 00 00 24 16 16 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4
	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 04 16 

//if(IsAffectedByAbility(57))  // eAbility_Mindfray
//07 8C 03 1B E2 43 00 00 00 00 00 00 2C 39 16 

	//iMaxMobility *= XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.0.50
//	9F 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 05 00 1F 32 00 00 00 1E 00 00 00 3F 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//if(!bIgnorePoison && IsPoisoned())
//07 D8 03 82 81 2D 00 BA 38 00 00 16 18 0B 00 1B 62 45 00 00 00 00 00 00 16 16 

	//iMaxMobility *= (1.0 - 0.250)
//	9F 00 B8 38 00 00 AF 1E 00 00 80 3F 1E 00 00 80 3E 16 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//if(IsAffectedByAbility(15))  // eAbility_FlashBang
//07 15 04 1B E2 43 00 00 00 00 00 00 2C 0F 16 

	//iMaxMobility *= (1.0 - 0.50)
//	9F 00 B8 38 00 00 AF 1E 00 00 80 3F 1E 00 00 00 3F 16 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//if(m_bWasJustStrangling && m_kCharacter.m_kChar.iType != 23)
//07 90 04 82 2D 01 1F 3A 00 00 18 36 00 9B 35 56 0F 00 00 58 0F 00 00 00 00 19 01 35 3A 00 00 09 00 E8 B5 00 00 00 01 E8 B5 00 00 2C 17 16 16 

	//iMaxMobility *= ((100.0 - float(75)) / 100.0)
//	9F 00 B8 38 00 00 AC AF 1E 00 00 C8 42 38 3F 2C 4B 16 1E 00 00 C8 42 16 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//return iMaxMobility
//04 00 B8 38 00 00 

//return ReturnValue
//04 3A B9 38 00 00 

//EOS
//53 
[/BEFORE_HEX]

[AFTER_HEX]
//bIgnorePoison = false
//49 02 00 28 15 

//iMaxMobility = m_kCharacter.GetCharMaxPathLength() + m_aInventoryStats[3]
//0F 00 B8 38 00 00 92 19 01 35 3A 00 00 0A 00 02 B6 00 00 00 1B 9A 37 00 00 00 00 00 00 16 1A 2C 03 01 37 3A 00 00 16 

//if((GetAppliedAbility(31)) != none)  // eAbility_CombatStim
//07 B9 00 77 1B 30 37 00 00 00 00 00 00 2C 1F 16 2A 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4
//	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 04 16 

//if(IsAffectedByAbility(72))  // eAbility_BloodCall
//07 33 01 1B E2 43 00 00 00 00 00 00 2C 48 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4
//	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 04 16 

//if(IsAffectedByAbility(74))  // eAbility_AdrenalNeurosympathy
//07 AD 01 1B E2 43 00 00 00 00 00 00 2C 4A 16 

	//iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.2
//	A1 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 02 00 1F 32 00 00 00 2C 02 16 

//null ops to replace hard-coded Servomotors and KSM increase
00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 
00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 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 0B 0B 0B 0B 0B 0B 0B 
0B 0B 0B 0B 0B 0B 0B 

//if(IsAffectedByAbility(57))  // eAbility_Mindfray
//07 8C 03 1B E2 43 00 00 00 00 00 00 2C 39 16 

	//iMaxMobility *= XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.0.50
//	9F 00 B8 38 00 00 19 19 2E 2D 32 00 00 19 12 20 36 FE FF FF 0A 00 9E F9 FF FF 00 1C DE FB FF FF 16 09 00 5C F9 FF FF 00 01 5C F9 FF FF 09 00 1F 32 00 00 00 01 1F 32 00 00 05 00 1F 32 00 00 00 1E 00 00 00 3F 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//if(!bIgnorePoison && IsPoisoned())
//07 D8 03 82 81 2D 00 BA 38 00 00 16 18 0B 00 1B 62 45 00 00 00 00 00 00 16 16 

	//iMaxMobility *= (1.0 - 0.250)
//	9F 00 B8 38 00 00 AF 1E 00 00 80 3F 1E 00 00 80 3E 16 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//if(IsAffectedByAbility(15))  // eAbility_FlashBang
//07 15 04 1B E2 43 00 00 00 00 00 00 2C 0F 16 

	//iMaxMobility *= (1.0 - 0.50)
//	9F 00 B8 38 00 00 AF 1E 00 00 80 3F 1E 00 00 00 3F 16 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//if(m_bWasJustStrangling && m_kCharacter.m_kChar.iType != 23)
//07 90 04 82 2D 01 1F 3A 00 00 18 36 00 9B 35 56 0F 00 00 58 0F 00 00 00 00 19 01 35 3A 00 00 09 00 E8 B5 00 00 00 01 E8 B5 00 00 2C 17 16 16 

	//iMaxMobility *= ((100.0 - float(75)) / 100.0)
//	9F 00 B8 38 00 00 AC AF 1E 00 00 C8 42 38 3F 2C 4B 16 1E 00 00 C8 42 16 16 

	//iMaxMobility = Max(iMaxMobility, 2)
//	0F 00 B8 38 00 00 FA 00 B8 38 00 00 2C 02 16 

//return iMaxMobility
//04 00 B8 38 00 00 

//return ReturnValue
//04 3A B9 38 00 00 

//null ops

//EOS
//53 
[/AFTER_HEX] 

 

 

Clean version:

 

 

MOD_NAME=Display XP and Mobility
AUTHOR=johnnylump and Amineri
DESCRIPTION=Display Soldiers' XP and Mobility in Character Card View

UPK_FILE=XComStrategyGame.upk

EXPAND_FUNCTION=UIStrategyComponent_SoldierStats.UpdateData:1254
REL_OFFSET=0x28
[MODDED_HEX]
57 07 00 00 A7 04 00 00
0F 00 98 1D 00 00 70 35 09 F9 FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 20 20 20 20 00 16
0f 00 98 1D 00 00 70 70 00 98 1D 00 00 01 8E 1D 00 00 16 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
07 a7 01 82 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 18 22 00 81 19 01 8A 1D 00 00 0A 00 71 4C 00 00 00 2D 01 71 4C 00 00 16 16 
	0E 99 F9 FF FF 61 42 00 98 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
0F 00 97 1D 00 00 70 01 8D 1D 00 00 12 20 6C FE FF FF 93 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 4A 16 16 
07 2b 03 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
	0E 99 F9 FF FF 61 42 00 97 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
0f 00 96 1D 00 00 70 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 20 20 20 20 00 16
0f 00 96 1D 00 00 70 70 00 96 1D 00 00 1F 4D 6F 62 3a 00 16 35 09 F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 0b
07 aa 04 7b 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16
	0E 99 F9 FF FF 61 42 00 96 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
0f 00 96 1D 00 00 70 70 70 00 96 1D 00 00 1f 20 20 20 20 00 16 01 8C 1D 00 00 16 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16
07 dd 05 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
	0E 99 F9 FF FF 61 42 00 96 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
0F 00 95 1D 00 00 70 01 8B 1D 00 00 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 16 
07 fd 06 7B 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 1F 00 16 
	0E 99 F9 FF FF 61 42 00 95 1D 00 00 12 20 6C FE FF FF 52 00 6A F9 FF FF 00 1B 1F 12 00 00 00 00 00 00 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 00 19 01 8A 1D 00 00 09 00 7F 4C 00 00 00 01 7F 4C 00 00 2C 04 2C 14 16 16 
0F 00 98 1D 00 00 70 1F 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 98 1D 00 00 16
1C 9F 1D 00 00 00 98 1D 00 00 00 97 1D 00 00 00 96 1D 00 00 00 95 1D 00 00 16 
04 0B 
53 

EXPAND_FUNCTION=XGSoldierUI.UpdateHeader:2857
REL_OFFSET=0x28
[MODDED_HEX]
02 11 00 00 EA 0A 00 00 
14 2D 00 00 4D 00 00 12 20 34 FE FF FF 3D 00 2E FF FF FF 00 1C FB FB FF FF 35 DE F8 FF FF CB F9 FF FF 00 01 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 2C 47 16 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 4F 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 A8 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 04 16 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 03 16 16 
0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 4F 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 4E 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0C 00 6E 53 00 00 00 1B 84 12 00 00 00 00 00 00 24 02 16 
0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 4E 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 09 
0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6F 4C 00 00 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0A 00 74 53 00 00 00 1B 52 13 00 00 00 00 00 00 16 
0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4D 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 19 01 78 4C 00 00 0A 00 76 53 00 00 00 1B 53 13 00 00 00 00 00 00 16 
0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6E 4C 00 00 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0B 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 26 16 
0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4C 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6D 4C 00 00 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 2C 02 16 
0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4B 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6C 4C 00 00 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0B 00 C3 52 00 00 00 1B 9F 11 00 00 00 00 00 00 25 16 
07 7A 05 19 01 78 4C 00 00 0A 00 05 53 00 00 00 1B EB 17 00 00 00 00 00 00 16 
	0E 99 F9 FF FF 61 42 35 09 F9 FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2F 00 38 53 19 01 78 4C 00 00 0B 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 25 16 16 16 
	0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 4A 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6B 4C 00 00 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 90 93 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 03 16 2C 00 16 2C 01 16 
0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 49 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
0F 35 0A F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 01 6A 4C 00 00 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 1B 61 12 00 00 00 00 00 00 2C 07 16 
0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 45 2D 00 00 4D 00 00 02 00 2C 0B 01 00 25 
14 2D 35 2C FF FF FF B9 F9 FF FF 00 00 35 48 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 27 
0F 35 C4 FA FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 25 
0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 47 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 A8 A8 A8 1F 58 50 3A 00 38 53 35 DE FA FF FF C1 F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B2 52 00 00 00 01 B2 52 00 00 16 1F 2F 00 16 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 17 00 98 FB FF FF 00 1B 99 13 00 00 00 00 00 00 92 19 01 78 4C 00 00 0A 00 C6 52 00 00 00 1B 00 13 00 00 00 00 00 00 16 26 16 16 16
0f 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1f 00 0b 0b 0b
07 d6 09 97 35 E0 FA FF FF C1 F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B2 52 00 00 00 01 B2 52 00 00 24 00 16
	0F 35 09 F9 FF FF B9 F9 FF FF 00 00 35 46 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 a8 a8 a8 1f 50 58 50 3a 00 38 53 35 e0 FA FF FF C1 F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B2 52 00 00 00 01 B2 52 00 00 16 1F 2F 00 16 38 53 19 01 78 4C 00 00 0C 00 C0 52 00 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 17 00 98 FB FF FF 00 1B f6 12 00 00 00 00 00 00 92 19 01 78 4C 00 00 0A 00 C6 52 00 00 00 1B f5 12 00 00 00 00 00 00 16 26 16 16 16
19 1B 5E 2F 00 00 00 00 00 00 16 44 00 00 00 00 00 00 1B 49 11 00 00 00 00 00 00 35 DE F8 FF FF CB F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 00 01 4D 00 00 16 
19 1B 5E 2F 00 00 00 00 00 00 16 8B 00 00 00 00 00 00 1B 2D 12 00 00 00 00 00 00 00 02 4D 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 19 1B 5E 2F 00 00 00 00 00 00 16 3B 00 05 FF FF FF 00 1B C5 11 00 00 00 00 00 00 35 DE F8 FF FF CB F9 FF FF 00 00 19 01 78 4C 00 00 09 00 B3 52 00 00 00 01 B3 52 00 00 16 00 01 4D 00 00 16 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 0b 0c 9B 1A 26 00 02 4D 00 00 25 16
07 9c 0B 97 1A 26 00 02 4D 00 00 25 16 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 26 00 02 4D 00 00 16 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	06 0b 0c 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 26 00 02 4D 00 00 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 45 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 49 0d 9B 1A 2C 02 00 02 4D 00 00 25 16 
	07 d9 0c 97 1A 2C 02 00 02 4D 00 00 25 16 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 02 00 02 4D 00 00 16 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	06 49 0d 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 02 00 02 4D 00 00 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 44 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 83 0E 9B 1A 25 00 02 4D 00 00 25 16 
	07 14 0e 97 1A 25 00 02 4D 00 00 25 16 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 25 00 02 4D 00 00 16 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	06 83 0E 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 25 00 02 4D 00 00 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 43 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 07 c1 0F 9B 1A 2C 07 00 02 4D 00 00 25 16 
	07 51 0f 97 1A 2C 07 00 02 4D 00 00 25 16 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 07 00 02 4D 00 00 16 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
	06 c1 0F 
		0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 07 00 02 4D 00 00 
		0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 41 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 1F 00 0b
07 7c 10 97 1A 24 03 00 02 4D 00 00 2C 00 16
	0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 70 1F 2B 00 38 53 1A 2C 03 00 02 4D 00 00 16 
	0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 02 
07 ff 10 96 1A 24 03 00 02 4D 00 00 2C 00 16
	0F 35 04 F9 FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 38 53 1A 2C 03 00 02 4D 00 00 
	0F 35 C1 FA FF FF B3 F9 FF FF 00 00 35 42 1A 00 00 50 1A 00 00 00 01 01 7F 4C 00 00 2C 03 
04 0B 
53 

UPK_FILE=XComGame.upk

OBJECT=XGTacticalGameCore.GetXPRequired
REL_OFFSET=0x36
[MODDED_HEX]
1D 9F 86 01 00 

EXPAND_FUNCTION=XGTacticalGameCore.GetInventoryStatModifiers:596
REL_OFFSET=0x28
[MODDED_HEX]
1d 03 00 00 15 02 00 00
0F 00 7E 84 00 00 25 
07 1a 03 96 00 7E 84 00 00 2C 13 16 
	0F 1A 00 7E 84 00 00 48 82 84 00 00 92 1B 4A 37 00 00 00 00 00 00 00 7E 84 00 00 00 7F 84 00 00 48 81 84 00 00 16 1B E2 3B 00 00 00 00 00 00 00 7E 84 00 00 38 3A 00 80 84 00 00 48 81 84 00 00 16 16 
	A1 1A 00 7E 84 00 00 48 82 84 00 00 1B 35 37 00 00 00 00 00 00 00 7E 84 00 00 35 4B 0F 00 00 4C 0F 00 00 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 48 81 84 00 00 16 16 
	07 59 01 97 1A 2C 1B 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
	A1 1A 00 7E 84 00 00 48 82 84 00 00 1B 6F 38 00 00 00 00 00 00 00 7E 84 00 00 35 4B 0F 00 00 4C 0F 00 00 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 16 16 
	05 7E 84 00 00 00 00 7E 84 00 00 
	0A 7a 02 2C 03 
		07 AD 01 97 1A 2C 1F 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
			A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 04 16 
		07 77 02 84 9A 35 56 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2C 03 16 18 25 00 9A 38 3A 35 4F 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 38 3A 24 06 16 16 
			07 35 02 97 1A 2C 7a 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
				A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 03 16 
			07 77 02 1c 7a 10 00 00 35 55 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2c 16 16 
				A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 04 16 
	06 0c 03 
	0A 09 03 25 
		07 06 03 97 1A 2C 7B 35 54 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 25 16 
			07 06 03 84 9A 35 56 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 2C 03 16 18 25 00 9A 38 3A 35 4F 0F 00 00 58 0F 00 00 00 00 48 81 84 00 00 38 3A 24 06 16 16 
				A1 1A 00 7E 84 00 00 48 82 84 00 00 2C 03 16 
	06 0c 03 
	0A FF FF 
		A5 00 7E 84 00 00 16 
		06 0B 00 
04 0B 
53 

OBJECT=XGUnitNativeBase.GetMaxPathLength
REL_OFFSET=0x155
[MODDED_HEX]
00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 
00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 00 00 00 B8 38 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 0B 0B 0B 0B 0B 0B 0B 
0B 0B 0B 0B 0B 0B 0B 

 

 

Conversion is pretty straightforward: delete header/code tags inside before-after blocks and write PatchUPK-style object names with AUTO specifier.

Edited by wghost81
Link to comment
Share on other sites

  • 2 weeks later...

Thanks!

 

I have not learned flash coding, so I was confining my efforts to the upks. Most of the logic constructing the new strings was handled without consequence (by removing unused code) in UpdateHeader. UpdateData is quite a bit tighter, and the extra bytes were needed just to fit in the new string references. (They're concatenated to the HP and Defense strings).

 

Now that I'm on the other side, I can think of a way to rework UpdateHeader more to allow those color formatting bits back in UpdateData (and still not need actionscript changes), but at this point it's probably more trouble than it's worth.

 

One bit of good news is the soldier data box size is dynamic based on the size of the text.

 

Has anyone tried this recently? I tried on my copy of enemy within with HxD. The first hex block was found but the second,, longer hex block was not. I'm wondering whether this is because of a new version/patch? Or possibly the block is too long for HxD..because I could not see the characters I pasted into the find block.

 

I'm not familiar with "PatchUPK for better UPKModder compatibility", I'm using a good old hex editor like what worked in the first version. If there is a better way please let me know.

Link to comment
Share on other sites

 

Thanks!

 

I have not learned flash coding, so I was confining my efforts to the upks. Most of the logic constructing the new strings was handled without consequence (by removing unused code) in UpdateHeader. UpdateData is quite a bit tighter, and the extra bytes were needed just to fit in the new string references. (They're concatenated to the HP and Defense strings).

 

Now that I'm on the other side, I can think of a way to rework UpdateHeader more to allow those color formatting bits back in UpdateData (and still not need actionscript changes), but at this point it's probably more trouble than it's worth.

 

One bit of good news is the soldier data box size is dynamic based on the size of the text.

 

Has anyone tried this recently? I tried on my copy of enemy within with HxD. The first hex block was found but the second,, longer hex block was not. I'm wondering whether this is because of a new version/patch? Or possibly the block is too long for HxD..because I could not see the characters I pasted into the find block.

 

I'm not familiar with "PatchUPK for better UPKModder compatibility", I'm using a good old hex editor like what worked in the first version. If there is a better way please let me know.

 

 

Thanks for the tool. I downloaded patcher GUI. Sorry to be so dense, but I downloaded 2 "patches" Display Soldier XP in Battle for EW patch 3-474-1-0p3 and Display Soldiers XP and Mobility in Barracks for EW patch 3-474-1-0p3.

 

Installing them crashed the game on viewing soldiers in barracks.

 

So I'm assuming the post above supercedes the published patches and needs to be used instead?

 

If thats true, do I cut and paste the first or second(clean) version into XCom UPK Patcher?

 

Again sorry to be so dense, I'm just used to the regular hex editor.

Link to comment
Share on other sites

I have used johnnylump's and Amineri's changes from this topic to make a PatchUPK/PatcherGUI mod. All the hex code here is related to EW patch 1 and won't work for patch 2 and 3.

 

After patch 2 was released, I decided to release my Interface Tweaks collection. I've updated it for EW patch 3 yesterday.

 

You shouldn't use hex code from this topic for EW patch 3, as it will break your game. You may download and install PatchUPK/PatcherGUI versions of this mod from XCOM Interface and Gameplay Tweaks download page. I tested it and it works perfectly with EW patch 3. You don't need to copy/paste anything, just open text files from the archives with PatcherGUI and install. Do not forget to point PatcherGUI to correct folder: XCOM/XEW for EW.

 

But remember one thing: when Steam updates your game it doesn't verify your cache. So if you had some mods installed, an update can break your game entirely. You need to manually verify game cache and then install patch 3 compatible mods. Preferably one by one, if you're experiencing problems.

Link to comment
Share on other sites

I did some searches for "verify game cache". I ultimately found a feature deep within the steam client called "Verify Integrity of game Cache". I'm running that now but nothing is happening, likely because I'm offline. You'd think steam would be smart enough to tell me that before I ran it (I hate steam). If this is indeed the feature you are suggesting I run, I should go back online with evil Steam, let it patch/overwrite any changes I've made, then run this "verify" cache separately, then try the Patch UI applets again? Or is there some folder I should manually delete under XEW?

 

Sorry for being so dense/literal, but I'm an old guy and not much of a gamer. I have this and fallout 3 series installed, thats it. I fire up Silent storm every once in a while, but I'm only interested in turn based squad tactics style games for the most part....since there arent very many of those, I'm not real familiar with the details. Thanks for being patient.

Link to comment
Share on other sites

Oh one more thing! I've noticed you have incorporated some of Peasly Wellbots changes into your interface Tweaks collection. Any interest in adding/updating "Rig the Roulette Wheel" . It was also broken last patch as well and, now that I know it exists, I'm having a hard time justifying playing knowing I could be leveling a gimp! I'd love to see that mod updated being that I'm playing training roulette and am halfway through..dont want to restart but its tough playing with only one medic!

Link to comment
Share on other sites

Yes, it's a Steam feature, you have to be online while running it. It allows you to revert to vanilla game copy.

 

Another common mistake is pointing PatcherGUI to XCOM folder, while for EW it has to be pointed to XCOM/XEW folder.

 

"Rig the Roulette Wheel" is slightly off the general idea of "Interface and Gameplay Tweaks". :smile: I think author will update it himself anyway. Probably, he doesn't have much time right now, so just be patient.

Edited by wghost81
Link to comment
Share on other sites

  • 1 month later...

I'm trying to fit in XP and PsiXP info. That's what I came up with:

 

http://i.imgur.com/U7Z8yH4.jpg

 

Works good (at least for EU, may have problems with long status string overlapping with medals icons in EW) and even uses localized "Mobility" text (at least it should, I haven't tested it with other localizations).

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...