Jump to content

Red Fog Fix


thebestesofeveythingever

Recommended Posts

I would like a mod to be created that will make the following changes to the Red Fog system:

1.Only shots that get through the armor of a unit will make a unit's physical stats(aim and mobility) go down.

2. If any shots get through the armor of a unit and that unit is healed than the penalty to that unit's physical stats will be diminished proportionally to the amount of non-armor health recovered(if that unit's non-armor health is fully recovered then its physical stat penalty will be completely removed).

Link to comment
Share on other sites

  • 1 month later...

Here's a mod I made for myself for EW around last year (it still works with the latest EW version) that's closer to what you want, but not exactly. IMO trying to model a simulation of armor the way you want it is working against the system already in place (armor simply adds health), and so would be more work for little effect and would also screw over aliens because they don't wear armor the way soldiers do.

 

To more closely simulate armor without going crazy or overly penalizing aliens for being aliens, you'd want to modify this to use a non-linear function to determine penalties... but I think it's fine the way it is, otherwise I would have done that myself last year.

 

Anyways, here's what I got:

 

* NOTE: I'm fairly sure you'd need to use my modiified version of Wasteland Ghost's "Display Soldier XP, PsiXP and Mobility in Barracks and in Battle" with this (included after this), but it's been a year... so... not 100% sure why I did the things I did, code-wise. I just installed these into a fresh version of EW recently, so I know they work.

MOD_NAME=Red Fog Rebalance
AUTHOR=Daemonjax
DESCRIPTION=I did not like how the Red Fog second wave option worked in Vanilla, so I never used it.  Now, after making these modifications, I do.
 
Version: 1.1
Compatible with Enemy Within version newest as of 11/1/2015
 
1) Added requirement to use Wasteland Ghost's "Display Soldier XP, PsiXP and Mobility in Barracks and in Battle" found at:
http://www.nexusmods.com/xcom/mods/474/?tab=1&navtag=http%3A%2F%2Fwww.nexusmods.com%2Fxcom%2Fajax%2Fmoddescription%2F%3Fid%3D474%26preview%3D&pUp=1
 
Notes:
 
2) Since the above mod ALSO breaks the multiplayer infocard UI, point #7 in this mod's v1.0 change notes is rendered moot.
 
 
Version: 1.0
Compatible with Enemy Within version newest as of 11/1/2015
 
* Gameplay changes:
 
1) Better scaling for both aim and mobility: both penalties now linearly approach 50% of max aim/move as the unit approaches death (Vanilla hard floor limit of 2 mobility is preserved).
2) Red Fog now affects all non-robotic units, including aliens.  
3) Info card shows when an Alien is affected by Red Fog aim/mobility penalties
4) Healing of any kind reduces the penalties, including all the way back to no penalties when fully healed -- as you would expect.
 
* Vanilla bug fixes:
 
5) Battle Fatigue hit penalty was displayed as a bonus rather than a penalty on info card (just a display bug). It now displays properly.
6) Red Fog mobility penalties had no effect on distance units can move.  It now does affect how far units can move.
 
* What I had to break to make all these edits:
 
7) The UI for info cards in Multiplayer somewhat... (but who cares about Multiplayer when using mods).  
 
Misc. Notes: 
 
I did not change anything related to how the willpower penalties work.
I did not increase the size of any function.
 
 
UPK_FILE=XComGame.upk
 
OBJECT=XGUnit.ApplyHPStatPenalties:KEEP
/* original code
function ApplyHPStatPenalties()
{ 
    local float fPct;
 
    if(IsAlien_CheckByCharType())
    {
        return;
    } 
    if(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.CharacterHasProperty(GetCharacter().m_kChar.iType, 3))
    {
        return;
    } 
    m_aCurrentStats[1] += -m_iBWAimPenalty;
    m_aCurrentStats[3] += -m_iBWMobPenalty;
    fPct = float(GetUnitHP()) / float(GetUnitMaxHP());
    if(fPct >= float(1))
    {
        m_iBWAimPenalty = 0;
        m_iBWMobPenalty = 0;
    }
    else
    {
        if(fPct >= 0.50)
        {
            m_iBWAimPenalty = XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.-15;
            m_iBWMobPenalty = XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.-2;
        }
        else
        {
            m_iBWAimPenalty = XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.-15 * 2;
            m_iBWMobPenalty = XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.-2 * 2;
        }
    }
    m_aCurrentStats[1] += m_iBWAimPenalty; 
    m_aCurrentStats[3] += m_iBWMobPenalty; 
    //return;
}
*/
FIND_HEX=BB C9 00 00 51 60 00 00 00 00 00 00 A3 C9 00 00 00 00 00 00 00 00 00 00 A4 C9 00 00 00 00 00 00 EA 19 00 00 86 38 03 00 31 03 00 00 29 02 00 00 07 0F 00 1B 53 44 00 00 00 00 00 00 16 04 0B 07 B0 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 3E 00 14 10 00 00 00 1B 27 12 00 00 00 00 00 00 35 56 0F 00 00 58 0F 00 00 00 00 19 1B E5 37 00 00 00 00 00 00 16 09 00 03 B8 00 00 00 01 03 B8 00 00 2C 03 16 04 0B A1 1A 26 01 63 3A 00 00 8F 01 C6 C4 00 00 16 16 A1 1A 2C 03 01 63 3A 00 00 8F 01 C5 C4 00 00 16 16 0F 00 A4 C9 00 00 AC 38 3F 1B 01 3C 00 00 00 00 00 00 16 38 3F 1B 04 3C 00 00 00 00 00 00 16 16 07 2F 01 B3 00 A4 C9 00 00 38 3F 26 16 0F 01 C6 C4 00 00 25 0F 01 C5 C4 00 00 25 06 01 03 07 1F 02 B3 00 A4 C9 00 00 1E 00 00 00 3F 16 0F 01 C6 C4 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 05 00 46 32 00 00 00 1D F1 FF FF FF 0F 01 C5 C4 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 05 00 46 32 00 00 00 1D FE FF FF FF 06 01 03 0F 01 C6 C4 00 00 90 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 05 00 46 32 00 00 00 1D F1 FF FF FF 2C 02 16 0F 01 C5 C4 00 00 90 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 05 00 46 32 00 00 00 1D FE FF FF FF 2C 02 16 A1 1A 26 01 63 3A 00 00 01 C6 C4 00 00 16 A1 1A 2C 03 01 63 3A 00 00 01 C5 C4 00 00 16 04 0B 53 00 00 00 02 00 02 00 78 04 00 00 00 00 00 00
 
/* new code
function ApplyHPStatPenalties()
{
    local float fPct;
 
    if(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.IsOptionEnabled(6))
    {
        if(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.CharacterHasProperty(GetCharacter().m_kChar.iType, 3))
        {
            return;
        }
        m_aCurrentStats[1] += m_iBWAimPenalty;
        fPct = float(1) - (float(GetUnitHP()) / float(GetUnitMaxHP()));
        m_iBWAimPenalty = int(fPct * (float(m_aCurrentStats[1]) / float(2)));
        m_iBWMobPenalty = 0;
        m_iBWMobPenalty = int(fPct * (float(GetMaxPathLength()) / float(2)));
        m_aCurrentStats[1] -= m_iBWAimPenalty;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    }
    //return;    
}
*/
//replace whole function
MODDED_HEX=BB C9 00 00 51 60 00 00 00 00 00 00 A3 C9 00 00 00 00 00 00 00 00 00 00 A4 C9 00 00 00 00 00 00 EA 19 00 00 86 38 03 00 AD 02 00 00 29 02 00 00 07 AA 02 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 0C 00 1F 10 00 00 00 1B B4 45 00 00 00 00 00 00 24 06 16 07 0E 01 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 3E 00 14 10 00 00 00 1B 27 12 00 00 00 00 00 00 35 56 0F 00 00 58 0F 00 00 00 00 19 1B E5 37 00 00 00 00 00 00 16 09 00 03 B8 00 00 00 01 03 B8 00 00 2C 03 16 04 0B A1 1A 26 01 63 3A 00 00 01 C6 C4 00 00 16 0F 00 A4 C9 00 00 AF 38 3F 26 AC 38 3F 1B 01 3C 00 00 00 00 00 00 16 38 3F 1B 04 3C 00 00 00 00 00 00 16 16 16 0F 01 C6 C4 00 00 38 44 AB 00 A4 C9 00 00 AC 38 3F 1A 26 01 63 3A 00 00 38 3F 2C 02 16 16 0F 01 C5 C4 00 00 25 0F 01 C5 C4 00 00 38 44 AB 00 A4 C9 00 00 AC 38 3F 1B CB 39 00 00 00 00 00 00 4A 16 38 3F 2C 02 16 16 A2 1A 26 01 63 3A 00 00 01 C6 C4 00 00 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 00 00 00 02 00 02 00 78 04 00 00 00 00 00 00
 
 
OBJECT=XGUnitNativeBase.GetMaxPathLength:KEEP
/* old code
simulated event int GetMaxPathLength(optional bool bIgnorePoison)
{
    local int iMaxMobility;
 
    bIgnorePoison = false;
    iMaxMobility = m_kCharacter.GetCharMaxPathLength() + m_aInventoryStats[3];
    
if((GetAppliedAbility(31)) != none)
    {
        iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4;
    }
    if(IsAffectedByAbility(72))
    {
        iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4;
    }
    if(IsAffectedByAbility(74))
    {
        iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.2;
    }
    if(GetCharacter().HasUpgrade(122))
    {
        if((IsATank()) || IsAugmented())
        {
            iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.3;
        }
    }
    if((IsAugmented()) && GetInventory().HasItemOfType(22))
    {
        iMaxMobility += XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.4;
    }
    if(IsAffectedByAbility(57))
    {
        iMaxMobility *= XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.0.50;
        iMaxMobility = Max(iMaxMobility, 2);
    }
    if(!bIgnorePoison && IsPoisoned())
    {
        iMaxMobility *= (1.0 - 0.250);
        iMaxMobility = Max(iMaxMobility, 2);
    }
    if(IsAffectedByAbility(15))
    {
        iMaxMobility *= (1.0 - 0.50);
        iMaxMobility = Max(iMaxMobility, 2);
    }
    if(m_bWasJustStrangling && m_kCharacter.m_kChar.iType != 23)
    {
        iMaxMobility *= ((100.0 - float(75)) / 100.0);
        iMaxMobility = Max(iMaxMobility, 2);
    }
    return iMaxMobility;
    //return ReturnValue;    
}
*/
FIND_HEX=EB 38 00 00 51 60 00 00 00 00 00 00 E2 38 00 00 00 00 00 00 00 00 00 00 E5 38 00 00 00 00 00 00 BB 09 00 00 D5 91 01 00 A5 04 00 00 4D 03 00 00 49 02 00 28 15 0F 00 E3 38 00 00 92 19 01 60 3A 00 00 0A 00 1D B8 00 00 00 1B F0 37 00 00 00 00 00 00 16 1A 2C 03 01 62 3A 00 00 16 07 B9 00 77 1B 86 37 00 00 00 00 00 00 2C 1F 16 2A 16 A1 00 E3 38 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 02 00 46 32 00 00 00 2C 04 16 07 33 01 1B 4E 44 00 00 00 00 00 00 2C 48 16 A1 00 E3 38 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 02 00 46 32 00 00 00 2C 04 16 07 AD 01 1B 4E 44 00 00 00 00 00 00 2C 4A 16 A1 00 E3 38 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 02 00 46 32 00 00 00 2C 02 16 07 59 02 19 1B E5 37 00 00 00 00 00 00 16 0C 00 2F B8 00 00 00 1B B7 3D 00 00 00 00 00 00 2C 7A 16 07 59 02 84 1B 68 44 00 00 00 00 00 00 16 18 0B 00 1B 70 44 00 00 00 00 00 00 16 16 A1 00 E3 38 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 02 00 46 32 00 00 00 2C 03 16 07 F8 02 82 1B 70 44 00 00 00 00 00 00 16 18 23 00 19 1B 56 39 00 00 00 00 00 00 16 0C 00 C8 BB 00 00 00 1B 75 3D 00 00 00 00 00 00 24 16 16 16 A1 00 E3 38 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 02 00 46 32 00 00 00 2C 04 16 07 8C 03 1B 4E 44 00 00 00 00 00 00 2C 39 16 9F 00 E3 38 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 05 00 46 32 00 00 00 1E 00 00 00 3F 16 0F 00 E3 38 00 00 FA 00 E3 38 00 00 2C 02 16 07 D8 03 82 81 2D 00 E5 38 00 00 16 18 0B 00 1B DC 45 00 00 00 00 00 00 16 16 9F 00 E3 38 00 00 AF 1E 00 00 80 3F 1E 00 00 80 3E 16 16 0F 00 E3 38 00 00 FA 00 E3 38 00 00 2C 02 16 07 15 04 1B 4E 44 00 00 00 00 00 00 2C 0F 16 9F 00 E3 38 00 00 AF 1E 00 00 80 3F 1E 00 00 00 3F 16 16 0F 00 E3 38 00 00 FA 00 E3 38 00 00 2C 02 16 07 90 04 82 2D 01 4A 3A 00 00 18 36 00 9B 35 56 0F 00 00 58 0F 00 00 00 00 19 01 60 3A 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 2C 17 16 16 9F 00 E3 38 00 00 AC AF 1E 00 00 C8 42 38 3F 2C 4B 16 1E 00 00 C8 42 16 16 0F 00 E3 38 00 00 FA 00 E3 38 00 00 2C 02 16 04 00 E3 38 00 00 04 3A E4 38 00 00 53 00 00 00 02 49 02 00 CB 39 00 00 00 00 00 00
 
/* new code
simulated event int GetMaxPathLength(optional bool bIgnorePoison)
{
    local int iMaxMobility;
 
    bIgnorePoison = false;
    iMaxMobility = (m_kCharacter.GetCharMaxPathLength() + m_aInventoryStats[3]) - XGUnit(self).m_iBWMobPenalty;
 
    if((GetAppliedAbility(31)) != none)
    {
        iMaxMobility += 4;
    }
    if(IsAffectedByAbility(72))
    {
        iMaxMobility += 4;
    }
    if(IsAffectedByAbility(74))
    {
        iMaxMobility += 2;
    }
    if(GetCharacter().HasUpgrade(122))
    {
        if((IsATank()) || IsAugmented())
        {
            iMaxMobility += 3;
        }
    }
    if((IsAugmented()) && GetInventory().HasItemOfType(22))
    {
        iMaxMobility += 4;
    }
    if(IsAffectedByAbility(57))
    {
        iMaxMobility *= 0.50;
    }
    if(!bIgnorePoison && IsPoisoned())
    {
        iMaxMobility *= 0.75000380;
    }
    if(IsAffectedByAbility(15))
    {
        iMaxMobility *= 0.50;
    }
    if(m_bWasJustStrangling && m_kCharacter.m_kChar.iType != 23)
    {
        iMaxMobility *= 0.250;
    }
    iMaxMobility = Max(iMaxMobility, 2);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
    return iMaxMobility;
    //return ReturnValue;    
} 
*/
//replace whole function
MODDED_HEX=EB 38 00 00 51 60 00 00 00 00 00 00 E2 38 00 00 00 00 00 00 00 00 00 00 E5 38 00 00 00 00 00 00 BB 09 00 00 D5 91 01 00 C1 03 00 00 4D 03 00 00 49 02 00 28 15 0F 00 E3 38 00 00 93 92 19 01 60 3A 00 00 0A 00 1D B8 00 00 00 1B F0 37 00 00 00 00 00 00 16 1A 2C 03 01 62 3A 00 00 16 19 2E 3F CE 00 00 17 09 00 C5 C4 00 00 00 01 C5 C4 00 00 16 07 7C 00 77 1B 86 37 00 00 00 00 00 00 2C 1F 16 2A 16 A1 00 E3 38 00 00 2C 04 16 07 98 00 1B 4E 44 00 00 00 00 00 00 2C 48 16 A1 00 E3 38 00 00 2C 04 16 07 B4 00 1B 4E 44 00 00 00 00 00 00 2C 4A 16 A1 00 E3 38 00 00 2C 02 16 07 02 01 19 1B E5 37 00 00 00 00 00 00 16 0C 00 2F B8 00 00 00 1B B7 3D 00 00 00 00 00 00 2C 7A 16 07 02 01 84 1B 68 44 00 00 00 00 00 00 16 18 0B 00 1B 70 44 00 00 00 00 00 00 16 16 A1 00 E3 38 00 00 2C 03 16 07 43 01 82 1B 70 44 00 00 00 00 00 00 16 18 23 00 19 1B 56 39 00 00 00 00 00 00 16 0C 00 C8 BB 00 00 00 1B 75 3D 00 00 00 00 00 00 24 16 16 16 A1 00 E3 38 00 00 2C 04 16 07 62 01 1B 4E 44 00 00 00 00 00 00 2C 39 16 9F 00 E3 38 00 00 1E 00 00 00 3F 16 07 90 01 82 81 2D 00 E5 38 00 00 16 18 0B 00 1B DC 45 00 00 00 00 00 00 16 16 9F 00 E3 38 00 00 1E 3F 00 40 3F 16 07 AF 01 1B 4E 44 00 00 00 00 00 00 2C 0F 16 9F 00 E3 38 00 00 1E 00 00 00 3F 16 07 06 02 82 2D 01 4A 3A 00 00 18 36 00 9B 35 56 0F 00 00 58 0F 00 00 00 00 19 01 60 3A 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 2C 17 16 16 9F 00 E3 38 00 00 1E 00 00 80 3E 16 0F 00 E3 38 00 00 FA 00 E3 38 00 00 2C 02 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 00 E3 38 00 00 04 3A E4 38 00 00 53 00 00 00 02 49 02 00 CB 39 00 00 00 00 00 00
 
 
OBJECT=XGUnit.AddStatModifiers:KEEP
/* original code
function AddStatModifiers(int aStatModifiers[ECharacterStat], optional XGAbility_Targeted kAbility)
{ 
    local int iStat;
 
    kAbility = none;
    iStat = 0;
 
    LOOP:
    if(iStat < 19)
    {
        m_aCurrentStats[iStat] += aStatModifiers[iStat];
        ++ iStat;
        goto LOOP;
    }    
    if(kAbility != none)
    {
        switch(kAbility.GetType())
        {    
            case 61:
                XGCharacter_Soldier(kAbility.m_kUnit.GetCharacter()).AddPsiXP(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.CalcXP(kAbility.m_kUnit, 11, self)); 19 2E 0F B9 00 00 19 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 0A 00 D0 C9 00 00 00 1B E5 37 00 00 00 00 00 00 16 93 00 00 00 00 00 00 1B 90 02 00 00 00 00 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 2B 00 E8 85 00 00 00 1B 05 11 00 00 00 00 00 00 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 2C 0B 17 16 16
                break;     
            case 57:
                XGCharacter_Soldier(kAbility.m_kUnit.GetCharacter()).AddPsiXP(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.CalcXP(kAbility.m_kUnit, 10, self));                
                break;            
            case 29:                
                break;            
            case 72:                
                break;            
            default:
        }
}
    //return;
}
*/
FIND_HEX=05 CD 00 00 51 60 00 00 00 00 00 00 EB CC 00 00 00 00 00 00 00 00 00 00 EE CC 00 00 00 00 00 00 8A 30 00 00 26 4C 06 00 6C 02 00 00 B0 01 00 00 49 02 00 2A 15 0F 00 EC CC 00 00 25 07 56 00 96 00 EC CC 00 00 2C 13 16 A1 1A 00 EC CC 00 00 01 63 3A 00 00 1A 00 EC CC 00 00 00 EE CC 00 00 16 A5 00 EC CC 00 00 16 06 10 00 07 69 02 77 00 ED CC 00 00 2A 16 05 7C 8B 00 00 00 19 00 ED CC 00 00 0A 00 7C 8B 00 00 00 1B F0 3B 00 00 00 00 00 00 16 0A 72 01 2C 3D 19 2E 0F B9 00 00 19 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 0A 00 D0 C9 00 00 00 1B E5 37 00 00 00 00 00 00 16 93 00 00 00 00 00 00 1B 90 02 00 00 00 00 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 2B 00 E8 85 00 00 00 1B 05 11 00 00 00 00 00 00 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 2C 0B 17 16 16 06 69 02 0A 56 02 2C 39 19 2E 0F B9 00 00 19 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 0A 00 D0 C9 00 00 00 1B E5 37 00 00 00 00 00 00 16 93 00 00 00 00 00 00 1B 90 02 00 00 00 00 00 00 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 2B 00 E8 85 00 00 00 1B 05 11 00 00 00 00 00 00 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 2C 0A 17 16 16 06 69 02 0A 5E 02 2C 1D 06 69 02 0A 66 02 2C 48 06 69 02 0A FF FF 04 0B 53 00 00 00 02 40 02 00 B0 02 00 00 00 00 00 00
 
/* new code
function AddStatModifiers(int aStatModifiers[ECharacterStat], optional XGAbility_Targeted kAbility)
{
    local int iStat;
 
    kAbility = none;
    iStat = 0;
 
    LOOP:    
    if(iStat < 19)
    {
        m_aCurrentStats[iStat] += aStatModifiers[iStat];
        ++ iStat;        
        goto LOOP;
    }    
    if(kAbility != none)
    {
        iStat = kAbility.GetType();
        if((iStat == 57) || iStat == 61)
        {
            XGCharacter_Soldier(kAbility.m_kUnit.GetCharacter()).AddPsiXP(20 + ((iStat / 61) * 10));
        }
    }
    ApplyHPStatPenalties();                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
    //return;    
}
*/
//NOTE: (20 + ((61 / 61) * 10) = 30, and (20 + ((57 / 61) * 10) = 20; when using integer division
//replace whole function
MODDED_HEX=05 CD 00 00 51 60 00 00 00 00 00 00 EB CC 00 00 00 00 00 00 00 00 00 00 EE CC 00 00 00 00 00 00 8A 30 00 00 26 4C 06 00 00 02 00 00 B0 01 00 00 49 02 00 2A 15 0F 00 EC CC 00 00 25 07 56 00 96 00 EC CC 00 00 2C 13 16 A1 1A 00 EC CC 00 00 01 63 3A 00 00 1A 00 EC CC 00 00 00 EE CC 00 00 16 A5 00 EC CC 00 00 16 06 10 00 07 18 01 77 00 ED CC 00 00 2A 16 0F 00 EC CC 00 00 19 00 ED CC 00 00 0A 00 7C 8B 00 00 00 1B F0 3B 00 00 00 00 00 00 16 07 18 01 84 9A 00 EC CC 00 00 2C 39 16 18 0E 00 9A 00 EC CC 00 00 2C 3D 16 16 19 2E 0F B9 00 00 19 19 00 ED CC 00 00 09 00 42 8B 00 00 00 01 42 8B 00 00 0A 00 D0 C9 00 00 00 1B E5 37 00 00 00 00 00 00 16 93 00 00 00 00 00 00 1B 90 02 00 00 00 00 00 00 92 2C 14 AB AC 00 EC CC 00 00 2C 3D 16 2C 0A 16 16 16 1B 78 04 00 00 00 00 00 00 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 00 00 00 02 40 02 00 B0 02 00 00 00 00 00 00
 
 
OBJECT=UIUnitGermanMode.UpdateHeader:KEEP
/* old code
private final simulated function UpdateHeader()
{ 
    local XGCharacter_Soldier kCharacterSoldier;
    local XGCharacter kChar;
    local bool bIsFriendly, bIsShiv;
    local int iRank;
 
    kChar = m_kUnit.GetCharacter(); 
    if(WorldInfo.NetMode == NM_Standalone) 
    {
        if(m_kUnit.isHuman() || m_kUnit.IsShiv()) 
        {
            if(kChar.m_kChar.iType == 1)
            {
                if(m_kUnit.SafeGetCharacterFullName() != "")
                {
                    AS_SetSoldierInformation(m_kUnit.SafeGetCharacterFullName(), m_kUnit.SafeGetCharacterNickname(), "", "", false);
                }             
                else
                {
                    AS_SetSoldierInformation(m_kUnit.SafeGetCharacterName(), m_strCivilianNickname, "", "", false);
                }
                AS_SetUnitAllegiance(false);
            }            
            else
            {
                kCharacterSoldier = XGCharacter_Soldier(kChar);             
                if(m_kUnit.IsATank())
                {
                    iRank = m_kUnit.GetSHIVRank();
                    bIsShiv = true;
                }             
                else
                {
                    iRank = kCharacterSoldier.m_kSoldier.iRank;
                    bIsShiv = false;
                }
                AS_SetSoldierInformation(m_kUnit.SafeGetCharacterFullName(), m_kUnit.SafeGetCharacterNickname(), class'UIUtilities'.static.GetClassLabel(m_kUnit.GetSoldierClass(), kCharacterSoldier.m_kChar.bHasPsiGift, class'XComPerkManager'.static.HasAnyGeneMod(kCharacterSoldier.m_kChar.aUpgrades)), class'UIUtilities'.static.GetRankLabel(iRank, bIsShiv), kCharacterSoldier.LeveledUp());
            }
            AS_SetUnitStats(m_strHealthLabel @ string(Max(m_kUnit.GetUnitMaxHP(), m_kUnit.m_aCurrentStats[0])), m_strWillLabel @ string(GetWillBonus(m_kUnit)), m_strOffenseLabel @ string(m_kUnit.GetOffense()), m_strDefenseLabel @ string(GetDefenseBonus(m_kUnit)));
            AS_SetUnitAllegiance(false);
        }        
        else
        {
            AS_SetAlienInformation(class'UIUtilities'.static.GetHTMLColoredText(m_kUnit.SafeGetCharacterName(), 3), false, m_kUnit.IsExalt()); 
            AS_SetUnitAllegiance(true);
        }
    }
    else
    {
        bIsFriendly = m_kUnit.IsMine();
        AS_SetUnitAllegiance(!bIsFriendly);     
        if(m_kUnit.isHuman() || m_kUnit.IsShiv())
        {
            kCharacterSoldier = XGCharacter_Soldier(kChar);     
            if(m_kUnit.IsATank())
            {
                iRank = m_kUnit.GetSHIVRank();
                bIsShiv = true;
            }     
            else
            {
                iRank = kCharacterSoldier.m_kSoldier.iRank;
                bIsShiv = false;
            }
            AS_SetSoldierInformation(class'UIUtilities'.static.GetHTMLColoredText(m_kUnit.SafeGetCharacterFullName(), ((bIsFriendly) ? 0 : 3)), class'UIUtilities'.static.GetHTMLColoredText(m_kUnit.SafeGetCharacterNickname(), ((bIsFriendly) ? 0 : 3)), class'UIUtilities'.static.GetClassLabel(m_kUnit.GetSoldierClass(), kCharacterSoldier.m_kChar.bHasPsiGift, class'XComPerkManager'.static.HasAnyGeneMod(kCharacterSoldier.m_kChar.aUpgrades)), class'UIUtilities'.static.GetRankLabel(iRank, bIsShiv), kCharacterSoldier.LeveledUp());
        }        
        else
        {
            AS_SetAlienInformation(class'UIUtilities'.static.GetHTMLColoredText(m_kUnit.SafeGetCharacterName(), ((bIsFriendly) ? 0 : 3)), bIsFriendly, m_kUnit.IsExalt());
        }
AS_SetUnitStats(class'UIUtilities'.static.GetHTMLColoredText(m_strHealthLabel @ string(m_kUnit.GetUnitMaxHP()), ((bIsFriendly) ? 0 : 3)), class'UIUtilities'.static.GetHTMLColoredText(m_strWillLabel @ string(GetWillBonus(m_kUnit)), ((bIsFriendly) ? 0 : 3)), class'UIUtilities'.static.GetHTMLColoredText(m_strOffenseLabel @ string(m_kUnit.GetOffense()), ((bIsFriendly) ? 0 : 3)), class'UIUtilities'.static.GetHTMLColoredText(m_strDefenseLabel @ string(GetDefenseBonus(m_kUnit)), ((bIsFriendly) ? 0 : 3)));
    }
    //return;     
}
*/
FIND_HEX=13 2E 00 00 51 60 00 00 00 00 00 00 0E 2E 00 00 00 00 00 00 00 00 00 00 13 2E 00 00 00 00 00 00 9A 00 00 00 F8 15 00 00 E3 09 00 00 37 07 00 00 0F 00 12 2E 00 00 19 01 F2 2D 00 00 0A 00 D0 C9 00 00 00 1B E5 37 00 00 00 00 00 00 16 07 ED 04 9A 38 3A 19 01 A6 F9 FF FF 09 00 8F FE FF FF 00 01 8F FE FF FF 38 3A 24 00 16 07 74 04 84 19 01 F2 2D 00 00 0A 00 EC 37 00 00 00 1B 25 45 00 00 00 00 00 00 16 18 20 00 19 01 F2 2D 00 00 0A 00 EE 37 00 00 00 1B 12 46 00 00 00 00 00 00 16 16 07 8A 01 9A 35 56 0F 00 00 58 0F 00 00 00 00 19 00 12 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 26 16 07 45 01 7B 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 1F 00 16 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 19 01 F2 2D 00 00 0A 00 08 38 00 00 00 1B C1 6A 00 00 00 00 00 00 16 1F 00 1F 00 28 16 06 7C 01 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 00 38 00 00 00 1B C0 6A 00 00 00 00 00 00 16 01 F7 2D 00 00 1F 00 1F 00 28 16 1B 6F 06 00 00 00 00 00 00 28 16 06 A2 03 0F 00 13 2E 00 00 2E 0F B9 00 00 00 12 2E 00 00 07 00 02 19 01 F2 2D 00 00 0A 00 E7 38 00 00 00 1B 68 44 00 00 00 00 00 00 16 0F 00 0F 2E 00 00 19 01 F2 2D 00 00 0A 00 C8 C9 00 00 00 1B 66 3B 00 00 00 00 00 00 16 14 2D 00 10 2E 00 00 27 06 47 02 0F 00 0F 2E 00 00 35 94 0F 00 00 99 0F 00 00 00 00 19 00 13 2E 00 00 09 00 D4 B8 00 00 00 01 D4 B8 00 00 14 2D 00 10 2E 00 00 28 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 19 01 F2 2D 00 00 0A 00 08 38 00 00 00 1B C1 6A 00 00 00 00 00 00 16 12 20 EC 2F 00 00 AD 00 E4 2E 00 00 00 1B FE 37 00 00 00 00 00 00 38 3A 19 01 F2 2D 00 00 0A 00 D2 C9 00 00 00 1B 77 3B 00 00 00 00 00 00 16 2D 35 4E 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 12 20 A7 71 00 00 3B 00 8F 71 00 00 00 1B 45 3D 00 00 00 00 00 00 35 54 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 16 16 12 20 EC 2F 00 00 1D 00 DF 2E 00 00 00 1B 1A 3B 00 00 00 00 00 00 00 0F 2E 00 00 2D 00 10 2E 00 00 16 19 00 13 2E 00 00 0A 00 FD B8 00 00 00 1B 2C 4C 00 00 00 00 00 00 16 16 1B 70 06 00 00 00 00 00 00 A8 01 FB 2D 00 00 38 53 FA 19 01 F2 2D 00 00 0A 00 D3 3A 00 00 00 1B 04 3C 00 00 00 00 00 00 16 1A 25 19 01 F2 2D 00 00 09 00 63 3A 00 00 00 01 63 3A 00 00 16 16 A8 01 FA 2D 00 00 38 53 1B 44 3C 00 00 00 00 00 00 01 F2 2D 00 00 16 16 A8 01 F9 2D 00 00 38 53 19 01 F2 2D 00 00 0A 00 61 C8 00 00 00 1B 71 3A 00 00 00 00 00 00 16 16 A8 01 F8 2D 00 00 38 53 1B 8D 38 00 00 00 00 00 00 01 F2 2D 00 00 16 16 16 1B 6F 06 00 00 00 00 00 00 28 16 06 EA 04 1B 29 06 00 00 00 00 00 00 12 20 EC 2F 00 00 2C 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 00 38 00 00 00 1B C0 6A 00 00 00 00 00 00 16 2C 03 4A 16 28 19 01 F2 2D 00 00 0A 00 F5 37 00 00 00 1B EB 44 00 00 00 00 00 00 16 16 1B 6F 06 00 00 00 00 00 00 27 16 06 E0 09 14 2D 00 11 2E 00 00 19 01 F2 2D 00 00 0A 00 A8 37 00 00 00 1B 96 45 00 00 00 00 00 00 16 1B 6F 06 00 00 00 00 00 00 81 2D 00 11 2E 00 00 16 16 07 F2 07 84 19 01 F2 2D 00 00 0A 00 EC 37 00 00 00 1B 25 45 00 00 00 00 00 00 16 18 20 00 19 01 F2 2D 00 00 0A 00 EE 37 00 00 00 1B 12 46 00 00 00 00 00 00 16 16 0F 00 13 2E 00 00 2E 0F B9 00 00 00 12 2E 00 00 07 E9 05 19 01 F2 2D 00 00 0A 00 E7 38 00 00 00 1B 68 44 00 00 00 00 00 00 16 0F 00 0F 2E 00 00 19 01 F2 2D 00 00 0A 00 C8 C9 00 00 00 1B 66 3B 00 00 00 00 00 00 16 14 2D 00 10 2E 00 00 27 06 30 06 0F 00 0F 2E 00 00 35 94 0F 00 00 99 0F 00 00 00 00 19 00 13 2E 00 00 09 00 D4 B8 00 00 00 01 D4 B8 00 00 14 2D 00 10 2E 00 00 28 1B 5F 06 00 00 00 00 00 00 12 20 EC 2F 00 00 3C 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 12 20 EC 2F 00 00 3C 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 08 38 00 00 00 1B C1 6A 00 00 00 00 00 00 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 12 20 EC 2F 00 00 AD 00 E4 2E 00 00 00 1B FE 37 00 00 00 00 00 00 38 3A 19 01 F2 2D 00 00 0A 00 D2 C9 00 00 00 1B 77 3B 00 00 00 00 00 00 16 2D 35 4E 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 12 20 A7 71 00 00 3B 00 8F 71 00 00 00 1B 45 3D 00 00 00 00 00 00 35 54 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 16 16 12 20 EC 2F 00 00 1D 00 DF 2E 00 00 00 1B 1A 3B 00 00 00 00 00 00 00 0F 2E 00 00 2D 00 10 2E 00 00 16 19 00 13 2E 00 00 0A 00 FD B8 00 00 00 1B 2C 4C 00 00 00 00 00 00 16 16 06 76 08 1B 29 06 00 00 00 00 00 00 12 20 EC 2F 00 00 3C 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 00 38 00 00 00 1B C0 6A 00 00 00 00 00 00 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 2D 00 11 2E 00 00 19 01 F2 2D 00 00 0A 00 F5 37 00 00 00 1B EB 44 00 00 00 00 00 00 16 16 1B 70 06 00 00 00 00 00 00 12 20 EC 2F 00 00 49 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 A8 01 FB 2D 00 00 38 53 19 01 F2 2D 00 00 0A 00 D3 3A 00 00 00 1B 04 3C 00 00 00 00 00 00 16 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 12 20 EC 2F 00 00 3D 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 A8 01 FA 2D 00 00 38 53 1B 44 3C 00 00 00 00 00 00 01 F2 2D 00 00 16 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 12 20 EC 2F 00 00 49 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 A8 01 F9 2D 00 00 38 53 19 01 F2 2D 00 00 0A 00 61 C8 00 00 00 1B 71 3A 00 00 00 00 00 00 16 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 12 20 EC 2F 00 00 3D 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 A8 01 F8 2D 00 00 38 53 1B 8D 38 00 00 00 00 00 00 01 F2 2D 00 00 16 16 45 2D 00 11 2E 00 00 01 00 25 02 00 2C 03 4A 16 16 04 0B 53 00 00 00 03 01 04 00 AD 7B 00 00 00 00 00 00
 
/* new code
private final simulated function UpdateHeader()
{
    local XGCharacter_Soldier kCharacterSoldier;
    local XGCharacter kChar;
    local bool bIsFriendly, bIsShiv;
    local int iRank;
 
    kChar = m_kUnit.GetCharacter();
 
    if(m_kUnit.isHuman() || m_kUnit.IsShiv())
    {
        if(kChar.m_kChar.iType == 1)
        {
            if(m_kUnit.SafeGetCharacterFullName() != "")
            {
                AS_SetSoldierInformation(m_kUnit.SafeGetCharacterFullName(), m_kUnit.SafeGetCharacterNickname(), "", "", false);
            }
            else
            {
                AS_SetSoldierInformation(m_kUnit.SafeGetCharacterName(), m_strCivilianNickname, "", "", false);
            }
            AS_SetUnitAllegiance(false);
        }
        else
        {
            kCharacterSoldier = XGCharacter_Soldier(kChar);
            if(m_kUnit.IsATank())
            {
                iRank = m_kUnit.GetSHIVRank();
                bIsShiv = true;
            }
            else
            {
                iRank = kCharacterSoldier.m_kSoldier.iRank;
                bIsShiv = false;
            }
            if(kCharacterSoldier.m_kChar.bHasPsiGift)
            {
                AS_SetSoldierInformation(m_kUnit.SafeGetCharacterFullName(), (((("XP: " $ string(kCharacterSoldier.GetXP())) $ "/") $ string(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetXPRequired(kCharacterSoldier.m_kSoldier.iRank + 1))) $ "   ") $ ((((("PsiXP: " $ string(kCharacterSoldier.GetPsiXP())) $ "/") $ string(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetPsiXPRequired(kCharacterSoldier.m_kSoldier.iPsiRank + 1))) $ "   ") $ m_kUnit.SafeGetCharacterNickname()), class'UIUtilities'.static.GetClassLabel(m_kUnit.GetSoldierClass(), kCharacterSoldier.m_kChar.bHasPsiGift, class'XComPerkManager'.static.HasAnyGeneMod(kCharacterSoldier.m_kChar.aUpgrades)), class'UIUtilities'.static.GetRankLabel(iRank, bIsShiv), kCharacterSoldier.LeveledUp());
            }
            else
            {
                AS_SetSoldierInformation(m_kUnit.SafeGetCharacterFullName(), (((("XP: " $ string(kCharacterSoldier.GetXP())) $ "/") $ string(XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.GetXPRequired(kCharacterSoldier.m_kSoldier.iRank + 1))) $ "   ") $ m_kUnit.SafeGetCharacterNickname(), class'UIUtilities'.static.GetClassLabel(m_kUnit.GetSoldierClass(), kCharacterSoldier.m_kChar.bHasPsiGift, class'XComPerkManager'.static.HasAnyGeneMod(kCharacterSoldier.m_kChar.aUpgrades)), class'UIUtilities'.static.GetRankLabel(iRank, bIsShiv), kCharacterSoldier.LeveledUp());
            }
        }
        AS_SetUnitStats((("Mobility: " $ string(m_kUnit.GetMaxPathLength())) $ "  ") $ (m_strHealthLabel @ string(m_kUnit.m_aCurrentStats[0])), m_strWillLabel @ string(GetWillBonus(m_kUnit)), m_strOffenseLabel @ string(m_kUnit.GetOffense()), m_strDefenseLabel @ string(GetDefenseBonus(m_kUnit)));
        AS_SetUnitAllegiance(false);
    }
    else
    {
        if(m_kUnit.m_iBWAimPenalty != 0)
        {
            AS_SetAlienInformation((("<font color='#EE1C25'>" @ m_kUnit.SafeGetCharacterName()) @ "</font>") @ "<font size='24' color='#FFD038'>(Fatigued)</font>", false, m_kUnit.IsExalt());
        }
        else
        {
            AS_SetAlienInformation(class'UIUtilities'.static.GetHTMLColoredText(m_kUnit.SafeGetCharacterName(), 3), false, m_kUnit.IsExalt());
        }
        AS_SetUnitAllegiance(true);                                                                                                                                                                        
    }
    //return;    
}
*/
// Note: this change breaks multiplayer to some extent... who cares, right?  If you cared about multiplayer, you wouldn't be using mods.
// Note: this also begins integration of Wasteland Ghosts "Display Soldier XP, PsiXP and Mobility in Barracks and in Battle" mod
//replace whole function
MODDED_HEX=13 2E 00 00 51 60 00 00 00 00 00 00 0E 2E 00 00 00 00 00 00 00 00 00 00 13 2E 00 00 00 00 00 00 9A 00 00 00 F8 15 00 00 D7 09 00 00 37 07 00 00 0F 00 12 2E 00 00 19 01 F2 2D 00 00 0A 00 D0 C9 00 00 00 1B E5 37 00 00 00 00 00 00 16 07 7C 08 84 19 01 F2 2D 00 00 0A 00 EC 37 00 00 00 1B 25 45 00 00 00 00 00 00 16 18 20 00 19 01 F2 2D 00 00 0A 00 EE 37 00 00 00 1B 12 46 00 00 00 00 00 00 16 16 07 61 01 9A 35 56 0F 00 00 58 0F 00 00 00 00 19 00 12 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 26 16 07 1C 01 7B 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 1F 00 16 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 19 01 F2 2D 00 00 0A 00 08 38 00 00 00 1B C1 6A 00 00 00 00 00 00 16 1F 00 1F 00 28 16 06 53 01 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 00 38 00 00 00 1B C0 6A 00 00 00 00 00 00 16 01 F7 2D 00 00 1F 00 1F 00 28 16 1B 6F 06 00 00 00 00 00 00 28 16 06 93 07 0F 00 13 2E 00 00 2E 0F B9 00 00 00 12 2E 00 00 07 D7 01 19 01 F2 2D 00 00 0A 00 E7 38 00 00 00 1B 68 44 00 00 00 00 00 00 16 0F 00 0F 2E 00 00 19 01 F2 2D 00 00 0A 00 C8 C9 00 00 00 1B 66 3B 00 00 00 00 00 00 16 14 2D 00 10 2E 00 00 27 06 1E 02 0F 00 0F 2E 00 00 35 94 0F 00 00 99 0F 00 00 00 00 19 00 13 2E 00 00 09 00 D4 B8 00 00 00 01 D4 B8 00 00 14 2D 00 10 2E 00 00 28 07 61 05 35 4E 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 70 70 70 70 70 1F 58 50 3A 20 00 38 53 19 00 13 2E 00 00 0A 00 0B B9 00 00 00 1B 57 3C 00 00 00 00 00 00 16 16 1F 2F 00 16 38 53 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 3E 00 F3 85 00 00 00 1B 58 3C 00 00 00 00 00 00 92 35 94 0F 00 00 99 0F 00 00 00 00 19 00 13 2E 00 00 09 00 D4 B8 00 00 00 01 D4 B8 00 00 26 16 16 16 1F 20 20 20 00 16 70 70 70 70 70 1F 50 73 69 58 50 3A 20 00 38 53 19 00 13 2E 00 00 0A 00 05 B9 00 00 00 1B 0A 3B 00 00 00 00 00 00 16 16 1F 2F 00 16 38 53 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 3E 00 F6 85 00 00 00 1B 0B 3B 00 00 00 00 00 00 92 35 93 0F 00 00 99 0F 00 00 00 00 19 00 13 2E 00 00 09 00 D4 B8 00 00 00 01 D4 B8 00 00 26 16 16 16 1F 20 20 20 00 16 19 01 F2 2D 00 00 0A 00 08 38 00 00 00 1B C1 6A 00 00 00 00 00 00 16 16 16 12 20 EC 2F 00 00 AD 00 E4 2E 00 00 00 1B FE 37 00 00 00 00 00 00 38 3A 19 01 F2 2D 00 00 0A 00 D2 C9 00 00 00 1B 77 3B 00 00 00 00 00 00 16 2D 35 4E 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 12 20 A7 71 00 00 3B 00 8F 71 00 00 00 1B 45 3D 00 00 00 00 00 00 35 54 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 16 16 12 20 EC 2F 00 00 1D 00 DF 2E 00 00 00 1B 1A 3B 00 00 00 00 00 00 00 0F 2E 00 00 2D 00 10 2E 00 00 16 19 00 13 2E 00 00 0A 00 FD B8 00 00 00 1B 2C 4C 00 00 00 00 00 00 16 16 06 93 07 1B 5F 06 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 02 38 00 00 00 1B BE 6A 00 00 00 00 00 00 16 70 70 70 70 70 1F 58 50 3A 20 00 38 53 19 00 13 2E 00 00 0A 00 0B B9 00 00 00 1B 57 3C 00 00 00 00 00 00 16 16 1F 2F 00 16 38 53 19 19 2E 54 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 46 32 00 00 00 01 46 32 00 00 3E 00 F3 85 00 00 00 1B 58 3C 00 00 00 00 00 00 92 35 94 0F 00 00 99 0F 00 00 00 00 19 00 13 2E 00 00 09 00 D4 B8 00 00 00 01 D4 B8 00 00 26 16 16 16 1F 20 20 20 00 16 19 01 F2 2D 00 00 0A 00 08 38 00 00 00 1B C1 6A 00 00 00 00 00 00 16 16 12 20 EC 2F 00 00 AD 00 E4 2E 00 00 00 1B FE 37 00 00 00 00 00 00 38 3A 19 01 F2 2D 00 00 0A 00 D2 C9 00 00 00 1B 77 3B 00 00 00 00 00 00 16 2D 35 4E 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 12 20 A7 71 00 00 3B 00 8F 71 00 00 00 1B 45 3D 00 00 00 00 00 00 35 54 0F 00 00 58 0F 00 00 00 00 19 00 13 2E 00 00 09 00 03 B8 00 00 00 01 03 B8 00 00 16 16 12 20 EC 2F 00 00 1D 00 DF 2E 00 00 00 1B 1A 3B 00 00 00 00 00 00 00 0F 2E 00 00 2D 00 10 2E 00 00 16 19 00 13 2E 00 00 0A 00 FD B8 00 00 00 1B 2C 4C 00 00 00 00 00 00 16 16 1B 70 06 00 00 00 00 00 00 70 70 70 1F 4D 6F 62 69 6C 69 74 79 3A 20 00 38 53 19 01 F2 2D 00 00 0B 00 E4 38 00 00 00 1B CB 39 00 00 00 00 00 00 4A 16 16 1F 20 20 00 16 A8 01 FB 2D 00 00 38 53 1A 25 19 01 F2 2D 00 00 09 00 63 3A 00 00 00 01 63 3A 00 00 16 16 A8 01 FA 2D 00 00 38 53 1B 44 3C 00 00 00 00 00 00 01 F2 2D 00 00 16 16 A8 01 F9 2D 00 00 38 53 19 01 F2 2D 00 00 0A 00 61 C8 00 00 00 1B 71 3A 00 00 00 00 00 00 16 16 A8 01 F8 2D 00 00 38 53 1B 8D 38 00 00 00 00 00 00 01 F2 2D 00 00 16 16 16 1B 6F 06 00 00 00 00 00 00 28 16 06 D4 09 07 46 09 9B 19 01 F2 2D 00 00 09 00 C6 C4 00 00 00 01 C6 C4 00 00 25 16 1B 29 06 00 00 00 00 00 00 A8 A8 A8 1F 3C 66 6F 6E 74 20 63 6F 6C 6F 72 3D 27 23 45 45 31 43 32 35 27 3E 00 19 01 F2 2D 00 00 0A 00 00 38 00 00 00 1B C0 6A 00 00 00 00 00 00 16 16 1F 3C 2F 66 6F 6E 74 3E 00 16 1F 3C 66 6F 6E 74 20 73 69 7A 65 3D 27 32 34 27 20 63 6F 6C 6F 72 3D 27 23 46 46 44 30 33 38 27 3E 28 46 61 74 69 67 75 65 64 29 3C 2F 66 6F 6E 74 3E 00 16 28 19 01 F2 2D 00 00 0A 00 F5 37 00 00 00 1B EB 44 00 00 00 00 00 00 16 16 06 B1 09 1B 29 06 00 00 00 00 00 00 12 20 EC 2F 00 00 2C 00 D3 2E 00 00 00 1B 34 39 00 00 00 00 00 00 19 01 F2 2D 00 00 0A 00 00 38 00 00 00 1B C0 6A 00 00 00 00 00 00 16 2C 03 4A 16 28 19 01 F2 2D 00 00 0A 00 F5 37 00 00 00 1B EB 44 00 00 00 00 00 00 16 16 1B 6F 06 00 00 00 00 00 00 27 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 00 00 00 03 01 04 00 AD 7B 00 00 00 00 00 00
 
// to help display everything in space provided...
// m_iPsiXPLevels can be similarly adjusted in DefaultGameCore.ini
OBJECT=XGTacticalGameCore.GetXPRequired:KEEP
/* changes
simulated function int GetXPRequired(int iRank)
{
    local int iXPRequired;
 
-   iXPRequired = 10000000;
+   iXPRequired = 99999;
    // End:0x3C
    if(iRank < 8)
    {
        iXPRequired = m_iSoldierXPLevels[iRank];
    }
    return iXPRequired;
    //return ReturnValue;    
}
*/
[BEFORE_CODE]
1D <%u 10000000>
[AFTER_CODE]
1D <%u 99999>

And here's a modified version of Wasteland Ghost's "Display Soldier XP, PsiXP and Mobility in Barracks and in Battle" to use with it:

MOD_NAME=Display Soldier XP, PsiXP and Mobility in Barracks and in Battle
AUTHOR=wghost81 aka Wasteland Ghost
DESCRIPTION=Display soldier XP, PsiXP (for Gifted soldiers only) and Mobility in character card while in barracks, and in soldier info screen (F1) while in battle.
 
Use PatcherGUI v.4.0 to install!
 
Version: 2.0a (Modified slightly for compatibility to work with Daemonjax's Red Fog Rebalance)
 
Compatible with XCOM Enemy Within versions:
 - all
 
Notes: 
 
I (Daemonjax) simply commented out all the sections of code which modify XComGameCore.upk, and take zero credit for this sweet mod.
 
To free up display space, you should modify m_iPsiXPLevels within your DefaultGameCore.ini...
from: 
m_iPsiXPLevels=10000000
to:
m_iPsiXPLevels=99999
 
 
 
UPK_FILE=XComStrategyGame.upk
 
OBJECT = UIStrategyComponent_SoldierInfo.UpdateData : AUTO
[BEFORE_CODE]
// GetNumKills(), 0
1B <GetNumKills> 16 16 25 4A 16
//AS_SetSoldierInformation(theName
1C <@AS_SetSoldierInformation> 00 <.theName>
[AFTER_CODE]
// GetNumKills(), 0
1B <GetNumKills> 16 16 25 4A 16
//Status = m_kSoldier.GetStatus() != 0 ? Status : ((missionsText $ "  ") $ (killsText $ "  ") $ Status)
0F 00 <.Status>
    45
        9B 38 3A 19 01 <@m_kSoldier> 0A 00 <XGStrategySoldier.GetStatus.ReturnValue> 00 1B <GetStatus> 16 25 16
    <%s 9> // skip
        00 <.Status>
    <%s 43> // skip
    70
        70
            00 <.missionsText>
            1F <%t "  ">
        16
        70
            70
                00 <.killsText>
                1F <%t "  ">
            16
            00 <.Status>
        16
    16
//Status = (missionsText $ "  ") $ (killsText $ "  ") $ Status
/*0F 00 <.Status>
    70
        70
            00 <.missionsText>
            1F <%t "  ">
        16
        70
            70
                00 <.killsText>
                1F <%t "  ">
            16
            00 <.Status>
        16
    16*/
//missionsText = "XP:" $ string(m_kSoldier.m_kSoldier.iXP) $ "/" $ string(m_kSoldier.TACTICAL().GetXPRequired(m_kSoldier.m_kSoldier.iRank + 1));
0F 00 <.missionsText>
70
    1F <%t "XP:">
    70
        70
            38 53 // int2string
                35 <XComGame.XGTacticalGameCoreNativeBase.TSoldier.iXP> <XComGame.XGTacticalGameCoreNativeBase.TSoldier> 00 00
                    19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kSoldier> 00 01 <XGStrategySoldier.m_kSoldier>
            1F <%t "/">
        16
        38 53 // int2string
            19
                19
                    01 <@m_kSoldier>
                    0A 00
                    <XGStrategyActorNativeBase.TACTICAL.ReturnValue> 00 1B <TACTICAL> 16
                3E 00
                <XComGame.XGTacticalGameCore.GetXPRequired.ReturnValue> 00 1B <GetXPRequired>
                    92
                        35 <XComGame.XGTacticalGameCoreNativeBase.TSoldier.iRank> <XComGame.XGTacticalGameCoreNativeBase.TSoldier> 00 00
                        19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kSoldier> 00 01 <XGStrategySoldier.m_kSoldier>
                        26
                    16
                16
    16
16
//killsText = "PsiXP:" $ string(m_kSoldier.m_kSoldier.iPsiXP) $ "/" $ string(m_kSoldier.TACTICAL().GetPsiXPRequired(m_kSoldier.m_kSoldier.iPsiRank + 1));
0F 00 <.killsText>
70
    1F <%t "PsiXP:">
    70
        70
            38 53 // int2string
                35 <XComGame.XGTacticalGameCoreNativeBase.TSoldier.iPsiXP> <XComGame.XGTacticalGameCoreNativeBase.TSoldier> 00 00
                    19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kSoldier> 00 01 <XGStrategySoldier.m_kSoldier>
            1F <%t "/">
        16
        38 53 // int2string
            19
                19
                    01 <@m_kSoldier>
                    0A 00
                    <XGStrategyActorNativeBase.TACTICAL.ReturnValue> 00 1B <TACTICAL> 16
                3E 00
                <XComGame.XGTacticalGameCore.GetPsiXPRequired.ReturnValue> 00 1B <GetPsiXPRequired>
                    92
                        35 <XComGame.XGTacticalGameCoreNativeBase.TSoldier.iPsiRank> <XComGame.XGTacticalGameCoreNativeBase.TSoldier> 00 00
                        19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kSoldier> 00 01 <XGStrategySoldier.m_kSoldier>
                        26
                    16
                16
    16
16
//killsText = m_kSoldier.HasPsiGift() ? killsText : " "
0F 00 <.killsText>
    45
        19 01 <@m_kSoldier> 0A 00 <XGStrategySoldier.HasPsiGift.ReturnValue> 00 1B <HasPsiGift> 16
    <%s 9> // skip
        00 <.killsText>
    <%s 3> // skip
        1F <%t " ">
//AS_SetSoldierInformation(theName
1C <@AS_SetSoldierInformation> 00 <.theName>
 
OBJECT = XGSoldierUI.UpdateHeader : AUTO
ALIAS = MECArmor : 35 <XComGame.XGTacticalGameCoreNativeBase.TInventory.iArmor> <XComGame.XGTacticalGameCoreNativeBase.TInventory> 00 00
                   35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.kInventory> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 01 
                   19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar>
[REPLACEMENT_CODE]
//bHasMindShield = class'XGTacticalGameCoreNativeBase'.static.TInventoryHasItemType(m_kSoldier.m_kChar.kInventory, 71)
14 2D 00 <.bHasMindShield> 12 20 <XComGame.XGTacticalGameCoreNativeBase> 3D 00 <XComGame.XGTacticalGameCoreNativeBase.TInventoryHasItemType.ReturnValue> 00 1C <XComGame.XGTacticalGameCoreNativeBase.TInventoryHasItemType> 35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.kInventory> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 01 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 2C 47 16
//m_kHeader.txtName.StrValue = m_kSoldier.GetName(4) @ m_kSoldier.GetName(3)
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtName> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> A8 19 01 <@m_kSoldier> 0C 00 <XGStrategySoldier.GetName.ReturnValue> 00 1B <GetName> 24 04 16 19 01 <@m_kSoldier> 0C 00 <XGStrategySoldier.GetName.ReturnValue> 00 1B <GetName> 24 03 16 16
//m_kHeader.txtName.iState = 0
0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtName> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 25
//m_kHeader.txtNickname.StrValue = m_kSoldier.GetName(2)
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtNickname> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 19 01 <@m_kSoldier> 0C 00 <XGStrategySoldier.GetName.ReturnValue> 00 1B <GetName> 24 02 16
//m_kHeader.txtNickname.iState = 9
0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtNickname> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 09
//m_kHeader.txtStatus.strLabel = m_strLabelStatus
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtStatus> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 01 <@m_strLabelStatus>
//m_kHeader.txtStatus.StrValue = m_kSoldier.GetStatusString()
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtStatus> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 19 01 <@m_kSoldier> 0A 00 <XGStrategySoldier.GetStatusString.ReturnValue> 00 1B <GetStatusString> 16
//m_kHeader.txtStatus.iState = m_kSoldier.GetStatusUIState()
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.iState> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtStatus> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 19 01 <@m_kSoldier> 0A 00 <XGStrategySoldier.GetStatusUIState.ReturnValue> 00 1B <GetStatusUIState> 16
//m_kHeader.txtOffense.strLabel = m_strLabelOffense
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 01 <@m_strLabelOffense>
//m_kHeader.txtOffense.StrValue = string(m_kSoldier.GetCurrentStat(1))
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 19 01 <@m_kSoldier> 0B 00 <XGStrategySoldier.GetCurrentStat.ReturnValue> 00 1B <GetCurrentStat> 26 16
//m_kHeader.txtOffense.iState = 0
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.iState> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 25
//m_kHeader.txtOffense.bNumber = true
14 2D 35 <XComGame.XGTacticalScreenMgr.TLabeledText.bNumber> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 27
//m_kHeader.txtDefense.strLabel = m_strLabelDefense
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 01 <@m_strLabelDefense>
//m_kHeader.txtDefense.StrValue = string(m_kSoldier.GetCurrentStat(2))
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 19 01 <@m_kSoldier> 0C 00 <XGStrategySoldier.GetCurrentStat.ReturnValue> 00 1B <GetCurrentStat> 2C 02 16
//m_kHeader.txtDefense.iState = 0
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.iState> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 25
//m_kHeader.txtDefense.bNumber = true
14 2D 35 <XComGame.XGTacticalScreenMgr.TLabeledText.bNumber> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefense> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 27
//m_kHeader.txtHP.strLabel = m_strLabelHPSPACED
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHP> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 01 <@m_strLabelHPSPACED>
//m_kHeader.txtHP.StrValue = string(m_kSoldier.GetCurrentStat(0))
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHP> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 19 01 <@m_kSoldier> 0B 00 <XGStrategySoldier.GetCurrentStat.ReturnValue> 00 1B <GetCurrentStat> 25 16
//if(m_kSoldier.IsInjured())
07 [@NotInjured] 19 01 <@m_kSoldier> 0A 00 <XGStrategySoldier.IsInjured.ReturnValue> 00 1B <IsInjured> 16
    //m_kHeader.txtHP.StrValue $= ("/" $ string(m_kSoldier.GetMaxStat(0)))
    0E <Core.Object.ConcatEqual_StrStr.ReturnValue> 61 42 35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHP> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 70 1F 2F 00 38 53 19 01 <@m_kSoldier> 0B 00 <XGStrategySoldier.GetMaxStat.ReturnValue> 00 1B <GetMaxStat> 25 16 16 16
    //m_kHeader.txtHP.iState = 3
    0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.iState> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHP> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 03
[#NotInjured]
//m_kHeader.txtHP.bNumber = true
14 2D 35 <XComGame.XGTacticalScreenMgr.TLabeledText.bNumber> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHP> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 27
//m_kHeader.txtWill.strLabel = m_strLabelWill
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWill> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 01 <@m_strLabelWill>
//m_kHeader.txtWill.StrValue = string(m_kSoldier.GetMaxStat(7))
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWill> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 19 01 <@m_kSoldier> 0C 00 <XGStrategySoldier.GetMaxStat.ReturnValue> 00 1B <GetMaxStat> 2C 07 16
//m_kHeader.txtWill.iState = ((bHasMindShield) ? 11 : 0)
0F 35 <XComGame.XGTacticalScreenMgr.TLabeledText.iState> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWill> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 45 2D 00 <.bHasMindShield> 02 00 2C 0B 01 00 25
//m_kHeader.txtWill.bNumber = true
14 2D 35 <XComGame.XGTacticalScreenMgr.TLabeledText.bNumber> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWill> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 27
//TACTICAL().GetBackpackItemArray(m_kSoldier.m_kChar.kInventory, arrBackPackItems)
19 1B <TACTICAL> 16 44 00 <NullRef> 00 1B <GetBackpackItemArray> 35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.kInventory> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 00 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 00 <.arrBackPackItems> 16
//TACTICAL().GetInventoryStatModifiers(aModifiers, m_kSoldier.m_kChar, TACTICAL().GetEquipWeapon(m_kSoldier.m_kChar.kInventory), arrBackPackItems)
19 1B <TACTICAL> 16 8B 00 <NullRef> 00 1B <GetInventoryStatModifiers> 00 <.aModifiers> 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 19 1B <TACTICAL> 16 3B 00 <XComGame.XGTacticalGameCore.GetEquipWeapon.ReturnValue> 00 1B <GetEquipWeapon> 35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.kInventory> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 00 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 16 00 <.arrBackPackItems> 16
//m_kHeader.txtOffenseMod.StrValue = ""
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 1F 00
//if(aModifiers[1] != 0)
07 [@DefMod] 9B 1A 26 00 <.aModifiers> 25 16
    //if(aModifiers[1] > 0)
    07 [@OffModL1] 97 1A 26 00 <.aModifiers> 25 16
        //m_kHeader.txtOffenseMod.StrValue = "+" $ string(aModifiers[1])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 70 1F 2B 00 38 53 1A 26 00 <.aModifiers> 16
        //m_kHeader.txtOffenseMod.iState = 2
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 02
    //goto DefMod
    06 [@DefMod]
        [#OffModL1]
        //m_kHeader.txtOffenseMod.StrValue = string(aModifiers[1])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 1A 26 00 <.aModifiers>
        //m_kHeader.txtOffenseMod.iState = 3
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtOffenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 03
[#DefMod]
//m_kHeader.txtDefenseMod.StrValue = ""
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 1F 00
//if(aModifiers[2] != 0)
07 [@HPMod] 9B 1A 2C 02 00 <.aModifiers> 25 16
    //if(aModifiers[2] > 0)
    07 [@DefModL1] 97 1A 2C 02 00 <.aModifiers> 25 16
        //m_kHeader.txtDefenseMod.StrValue = "+" $ string(aModifiers[2])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 70 1F 2B 00 38 53 1A 2C 02 00 <.aModifiers> 16
        //m_kHeader.txtDefenseMod.iState = 2
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 02
    //goto HPMod
    06 [@HPMod]
        [#DefModL1]
        //m_kHeader.txtDefenseMod.StrValue = string(aModifiers[2])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 1A 2C 02 00 <.aModifiers>
        //m_kHeader.txtDefenseMod.iState = 3
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtDefenseMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 03
[#HPMod]
//m_kHeader.txtHPMod.StrValue = ""
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHPMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 1F 00
//if(aModifiers[0] != 0)
07 [@WillMod] 9B 1A 25 00 <.aModifiers> 25 16
    //if(aModifiers[0] > 0)
    07 [@HPModL1] 97 1A 25 00 <.aModifiers> 25 16
        //m_kHeader.txtHPMod.StrValue = "+" $ string(aModifiers[0])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHPMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 70 1F 2B 00 38 53 1A 25 00 <.aModifiers> 16
        //m_kHeader.txtHPMod.iState = 2
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHPMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 02
    //goto WillMod
    06 [@WillMod]
        [#HPModL1]
        //m_kHeader.txtHPMod.StrValue = string(aModifiers[0])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHPMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 1A 25 00 <.aModifiers>
        //m_kHeader.txtHPMod.iState = 3
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtHPMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 03
[#WillMod]
//m_kHeader.txtWillMod.StrValue = ""
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWillMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 1F 00
//if(aModifiers[7] != 0)
07 [@SpeedMod] 9B 1A 2C 07 00 <.aModifiers> 25 16
    //if(aModifiers[7] > 0)
    07 [@WillModL1] 97 1A 2C 07 00 <.aModifiers> 25 16
        //m_kHeader.txtWillMod.StrValue = "+" $ string(aModifiers[7])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWillMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 70 1F 2B 00 38 53 1A 2C 07 00 <.aModifiers> 16
        //m_kHeader.txtWillMod.iState = 2
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWillMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 02
    //goto SpeedMod
    06 [@SpeedMod]
        [#WillModL1]
        //m_kHeader.txtWillMod.StrValue = string(aModifiers[7])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWillMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 1A 2C 07 00 <.aModifiers>
        //m_kHeader.txtWillMod.iState = 3
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtWillMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 03
[#SpeedMod]
// ---- modded code begin ----
//m_kHeader.txtSpeed.strLabel = "Mobility: "
0F
    35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00
        35 <XGSoldierUI.TSoldierHeader.txtSpeed> <XGSoldierUI.TSoldierHeader> 00 01
            01 <@m_kHeader>
    1F <%t "Mobility: ">
//m_kHeader.txtSpeed.StrValue = string(m_kSoldier.GetMaxStat(3));
0F
    35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00
        35 <XGSoldierUI.TSoldierHeader.txtSpeed> <XGSoldierUI.TSoldierHeader> 00 01
            01 <@m_kHeader>
    38 53 // int2string
        19 01 <@m_kSoldier> 0C 00 <XGStrategySoldier.GetMaxStat.ReturnValue> 00 1B <GetMaxStat> 2C 03 16
// KSM armor-based speed modifier
/*if (m_kSoldier.m_kChar.kInventory.iArmor == 196 ||
    m_kSoldier.m_kChar.kInventory.iArmor == 198 ||
    m_kSoldier.m_kChar.kInventory.iArmor == 199 ||
    m_kSoldier.m_kChar.kInventory.iArmor == 202 ||
    m_kSoldier.m_kChar.kInventory.iArmor == 203 ||
    m_kSoldier.m_kChar.kInventory.iArmor == 204 ||
    m_kSoldier.m_kChar.kInventory.iArmor == 205)*/
07 [@NotMEC]
    84
        9A <!MECArmor> 2C <%b 196> 16
        18 <%s 458>
        84
            9A <!MECArmor> 2C <%b 198> 16
            18 <%s 381>
            84
                9A <!MECArmor> 2C <%b 199> 16
                18 <%s 304>
                84
                    9A <!MECArmor> 2C <%b 202> 16
                    18 <%s 227>
                    84
                        9A <!MECArmor> 2C <%b 203> 16
                        18 <%s 150>
                        84
                            9A <!MECArmor> 2C <%b 204> 16
                            18 <%s 73>
                            9A <!MECArmor> 2C <%b 205> 16
                        16
                    16
                16
            16
        16
    16
        //aModifiers[3] += 4;
        A1 1A 2C 03 00 <.aModifiers> 2C 04 16
[#NotMEC]
// Advanced servos speed modifier for SHIVs and MECs
//if (((m_kSoldier.m_kChar.iType == 3) || m_kSoldier.m_kChar.eClass == 6) && (m_kSoldier.m_kChar.aUpgrades[122] > 0))
07 [@NoServos]
    82
        84
            9A 35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.iType> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 01 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 2C 03 16
        18 <%s 54> //skip
            9A 35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.eClass> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 01 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 2C 06 16
        16
    18 <%s 56> //skip
        97 1A 2C <%b 122> 35 <XComGame.XGTacticalGameCoreNativeBase.TCharacter.aUpgrades> <XComGame.XGTacticalGameCoreNativeBase.TCharacter> 00 01 19 01 <@m_kSoldier> 09 00 <XGStrategySoldier.m_kChar> 00 01 <XGStrategySoldier.m_kChar> 25 16
    16
    //aModifiers[3] += 3;
    A1 1A 2C 03 00 <.aModifiers> 2C 03 16
[#NoServos]
//m_kHeader.txtSpeedMod.StrValue = ""
0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtSpeedMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 1F 00
//if(aModifiers[3] != 0)
07 [@EndMod] 9B 1A 2C 03 00 <.aModifiers> 25 16
    //if(aModifiers[3] > 0)
    07 [@SpeedModL1] 97 1A 2C 03 00 <.aModifiers> 25 16
        //m_kHeader.txtSpeedMod.StrValue = "+" $ string(aModifiers[3])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtSpeedMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 70 1F 2B 00 38 53 1A 2C 03 00 <.aModifiers> 16
        //m_kHeader.txtSpeedMod.iState = 2
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtSpeedMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 02
    //goto EndMod
    06 [@EndMod]
        [#SpeedModL1]
        //m_kHeader.txtSpeedMod.StrValue = string(aModifiers[3])
        0F 35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtSpeedMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 38 53 1A 2C 03 00 <.aModifiers>
        //m_kHeader.txtSpeedMod.iState = 3
        0F 35 <XComGame.XGTacticalScreenMgr.TText.iState> <XComGame.XGTacticalScreenMgr.TText> 00 00 35 <XGSoldierUI.TSoldierHeader.txtSpeedMod> <XGSoldierUI.TSoldierHeader> 00 01 01 <@m_kHeader> 2C 03
[#EndMod]
// ---- modded code end ----
//return
04 0B
//EOS
53
 
OBJECT = UIStrategyComponent_SoldierStats.UpdateData : AUTO
[BEFORE_CODE]
//4, 20)
2C 04 2C 14 16 16
// AS_SetSoldierStats(Health, Will, Defense, Offense)
1C <@AS_SetSoldierStats> 00 <.Health> 00 <.Will> 00 <.Defense> 00 <.Offense> 16
[AFTER_CODE]
//4, 20)
2C 04 2C 14 16 16
//Health = (m_kLocalMgr.m_kHeader.txtSpeed.strLabel $ m_kLocalMgr.m_kHeader.txtSpeed.StrValue $ class'UIUtilities'.static.GetHTMLColoredText(m_kLocalMgr.m_kHeader.txtSpeedMod.StrValue, 4, 20) $ "  ") $ Health
0F 00 <.Health>
    70
        70
            35 <XComGame.XGTacticalScreenMgr.TLabeledText.strLabel> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00
                35 <XGSoldierUI.TSoldierHeader.txtSpeed> <XGSoldierUI.TSoldierHeader> 00 00
                    19 01 <@m_kLocalMgr> 09 00 <XGSoldierUI.m_kHeader> 00 01 <XGSoldierUI.m_kHeader>
            70
                35 <XComGame.XGTacticalScreenMgr.TLabeledText.StrValue> <XComGame.XGTacticalScreenMgr.TLabeledText> 00 00
                    35 <XGSoldierUI.TSoldierHeader.txtSpeed> <XGSoldierUI.TSoldierHeader> 00 00
                        19 01 <@m_kLocalMgr> 09 00 <XGSoldierUI.m_kHeader> 00 01 <XGSoldierUI.m_kHeader>
                70
                    12 20 <XComGame.UIUtilities>
                    <%s 82> // skip
                        <XComGame.UIUtilities.GetHTMLColoredText.ReturnValue> 00 1B <GetHTMLColoredText>
                            35 <XComGame.XGTacticalScreenMgr.TText.StrValue> <XComGame.XGTacticalScreenMgr.TText> 00 00
                                35 <XGSoldierUI.TSoldierHeader.txtSpeedMod> <XGSoldierUI.TSoldierHeader> 00 00
                                    19 01 <@m_kLocalMgr> 09 00 <XGSoldierUI.m_kHeader> 00 01 <XGSoldierUI.m_kHeader>
                            2C 04
                            2C 14
                        16
                    1F <%t "  ">
                16
            16
        16
        00 <.Health>
    16
// AS_SetSoldierStats(Health, Will, Defense, Offense)
1C <@AS_SetSoldierStats> 00 <.Health> 00 <.Will> 00 <.Defense> 00 <.Offense> 16
Edited by Daemonjax
Link to comment
Share on other sites

Thanks, but I have some questions:

1. Is installation of your modiified version of Wasteland Ghost's "Display Soldier XP, PsiXP and Mobility in Barracks and in Battle Mod" necessary for the " red fog fix mod"(the mod you proposed I use in this forum) to work or is it only necessary for the information to be displayed correctly?

2. I've already seen a mod that changes the "red fog function" from a linear one to a Gaussian one, how does the mod you suggested I use differ from that one?

Link to comment
Share on other sites

1. I think so, since it's in my notes. Been a year. I think the reason that happened is because there's overlapping functions changed and I wanted to have both. Or maybe I wanted to combine the mod that displayed when an alien soldier was affected by red fog with the exp mod, and that's where the overlapping functions happened. There's a thread somewhere where I discuss it... I'll look for it: http://forums.nexusmods.com/index.php?/topic/1036704-red-fog-mods/page-2&do=findComment&comment=18390659 -- "I liked Drakous79's idea to add a "(Fatigued)" string after aliens' names... and since Wghost81's "Display Soldier XP, PsiXP and Mobility in Barracks and in Battle" mod also modifies that same function (UpdateHeader), I've combined the changes here..." So, pretty sure it's required since it assumes it's installed.

2. I don't know.

Edited by Daemonjax
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...