thebestesofeveythingever Posted September 18, 2015 Share Posted September 18, 2015 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 More sharing options...
Daemonjax Posted November 13, 2015 Share Posted November 13, 2015 (edited) 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 November 14, 2015 by Daemonjax Link to comment Share on other sites More sharing options...
thebestesofeveythingever Posted November 14, 2015 Author Share Posted November 14, 2015 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 More sharing options...
Daemonjax Posted November 17, 2015 Share Posted November 17, 2015 (edited) 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 November 22, 2015 by Daemonjax Link to comment Share on other sites More sharing options...
Recommended Posts