Jump to content

Daemonjax

Supporter
  • Posts

    267
  • Joined

  • Last visited

Everything posted by Daemonjax

  1. I'd like to add stability damage when firing missile weapons... I think that would balance them out nicely... Like, LRM 20's would do 20 stability damage to yourself. LRM 15's would do 15 stability damage, etc. I'm looking at the "statusEffects" array field in the weapons json file... And I'd imagine there's a way to use it to add self stability damage, but can't find any examples in other json files that would show the way. The other idea I had was with an actual mod... hook into the after attack sequence is complete function, somehow get a list of all weapons fired, check if they're missile weapons somehow, and then the specific type, and then somehow apply stability damage to the mech firing it... I imagine that's possible.
  2. I would go about it by trying to make it equipable in only the head location -- since there's only one head slot on all mechs as far as I remember.
  3. Try blocking the game in your firewall. There are software firewalls, like Tinywall, that make it pretty simple. If that alone doesn't work, then try putting steam in offline mode. I block everything by default and never use steam cloud. Never had a problem like this.
  4. For those mods that were made before modtek, just plop the dll in the mods folder and it'll load. You still have to follow the steps in https://github.com/Mpstark/ModTek/wiki/The-Drop-Dead-Simple-Guide-to-Installing-BTML-&-ModTek-&-ModTek-mods of course.
  5. I think I think it's balanced as is because: a) It costs you a turn b) Removing it would make the game easier (for sniping/LRM mechs, anyways) because the AI really relies on guarding as they approach On a similar note, removing guarding would devalue other abilities/mechanics in the game... off the top of my head: bulwark (obviously), breaching shot, the defensive morale ability, the unsteady modifier, and melee in general. I think a dirty way to accomplish what you want is to change the guarded modifier to give 0% damage resistance... Then I guess you'd want to find the graphics icon for it and change it be full alpha so that it's not visible on the UI.
  6. Which, if any, of the following are currently possible to do (listed here in order of my perceived difficultly in implementation): 1) Changing the cost of existing abilities based upon factors like what skills a pilot has 2) Adding requirements to existing morale abilities (such as what skills a pilot has) 3) Adding new morale abilities at all and have them display in the UI 4) Adding new morale abilities that would: a) Increase movement distance for a turn (would be nice for a pilot/scout) b) Remove a sensor lock on a team mate (would be nice for a tactician)
  7. I followed the directions in the first page and nothing happens. There's ZERO documentation that I can find on the extension author's page. EDIT: The project is dead. Man, this is going to suck using an IDE without code completion. May as well be coding in notepad. This is pretty close to how we did mods for xcom1. Well, this is better for sure, but still. No proper IDE.
  8. I had this same problem recently, but with a twist. I managed to narrow it down to immersive armors v8 but, get this: I only get the bug when I create a patch (bashed patch or a manually created compatibility patch) that uses the immersive armor esp as a master.Even if I delete basically everything from the patch and have just immersive armors, skyrim.esm, and update.esm as the masters, it'll bug outthe carriage ride. Weird, eh? immmersive armors 7.1 works fine when used as a master in whatever patches I create, though... which is weird because v8 supposedly includes fixes to help preventthis issue in the first place. DOUBLE WEIRD. I spent like an entire day on this, btw. heh
  9. I think it's a pipe dream because there's likely no useful animations for that model.
  10. 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.
  11. That's how overwatch should have worked from the beginning, but I think it would be too much work to even begin to figure out how to fix it. I'm not even sure it's possible. But maybe I'm wrong and it's a simple fix... but I think it's handled by native functions.
  12. 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
  13. Out of curiosity, why upgrade from 7 to 10? Is it just an early-adopter kind of thing?
  14. Never do an upgrade/downgrade of your OS. Microsoft barely tests that s***. Always do a full install from bare metal. I'd stick with Windows 7 until the sun burns out... or until you start thinking you need more than 192gb of ram... or hardware manufacturers just stop making drivers for it (unlikely to happen before we bump into the ram limit). It's the new XP.
  15. Cool, thanks. If Merzasphor never gets around it, I already came up with a workable solution (using a parser I wrote in java to scrape tes3cmd output to create a list of interior cells where it's illegal to rest in that's readable by mwse file i/o functions), but being able to directly access the cell flags would be much cleaner. I also would prefer not using while loops.
  16. I can't login to those forums to post in that thread, so I posted here in the hope one of the code maintainers would see it one day.
  17. DDS format doesn't have an adjustable compression level (like jpeg or whatever). Morrowind's engine can accept a variety of image formats, including 1/1a/3/5/8.8.8rgb/8.8.8.8argb -- which are all dds format. The difference between them (besides the last two being uncompressed) is how they handle the alpha channel. 1 is the smallest, being compressed and without an alpha channel. 8.8.8.8argb would be the largest since it has an alpha channel and is uncompressed. In all cases you have the option to use mipmaps which would increase the filesize.
  18. An xGetCellFlags Function would be cool. It could just return a short integer, and we could test it against a bitmask. xBitMask would just AND the two arguements... so I guess it could just be called xAnd to make it more generalized. For example: short foo short bar setx foo to xGetCellFlags ;get current cell flags setx bar to xBitMask foo 4 ;going from memory here -- I think the is_illegal cell flag was the 3rd bit from the right: 2^(_3_ - 1) = 4 if ( bar ) ;it's illegal to sleep here endif
  19. An xGetCellFlags Function would be cool. It could just return a short integer, and we could test it against a bitmask. For example: short foo short bar setx foo to xGetCellFlags setx bar to xAnd foo 4 ;this just ANDs foo and 4 if ( bar ) ;illegal to rest in this cell (going from memory, but I recall it being the 3rd bit from the right in cell data flags) endif
  20. Not sure what the problem is, but the latest version of MCP is 2.2
  21. Looks like one of those mods that were lost when pes went down. Unless someone else uploads it somewhere from their hard drive, it's gone. A shame.
  22. Lowering both FOAM_FRONT_BRIGHTNESS and FOAM_BACK_BRIGHTNESS should do what you want. Lowing FOAM_BRIGHTNESS would also lower the brightness of the animated foam texture, which I think you want to keep the way it is... if I understand the question properly. I think it might be easier in the long run for you to do something like this (let the shader compiler do some of the work for you and only change FOAM_FRONT_BACK_BRIGHTNESS yourself): change the lines: #define FOAM_BRIGHTNESS 1.00 // [0.5, 2.0] ; this is used here only for convenience #define FOAM_TEXTURE_BRIGHTNESS 0.50 * FOAM_BRIGHTNESS // 0.5 specifically the foam texture brightness #define FOAM_FRONT_BRIGHTNESS 0.75 * FOAM_BRIGHTNESS // 0.75 front of wave foam (kinda): foam * foam * FOAM_FRONT_BRIGHTNESS #define FOAM_BACK_BRIGHTNESS 0.25 * FOAM_BRIGHTNESS // 0.25 rear of wave foam (kinda): sqrt(foam) * FOAM_BACK_BRIGHTNESS ... to: #define FOAM_BRIGHTNESS 1.00 // [0.5, 2.0] ; this is used here only for convenience #define FOAM_FRONT_BACK_BRIGHTNESS 0.50 // [0, 1.0] ; this is used here only for convenience for Shumafuk #define FOAM_TEXTURE_BRIGHTNESS 0.50 * FOAM_BRIGHTNESS // 0.5 specifically the foam texture brightness #define FOAM_FRONT_BRIGHTNESS 0.75 * FOAM_BRIGHTNESS * FOAM_FRONT_BACK_BRIGHTNESS // 0.75 front of wave foam (kinda): foam * foam * FOAM_FRONT_BRIGHTNESS #define FOAM_BACK_BRIGHTNESS 0.25 * FOAM_BRIGHTNESS * FOAM_FRONT_BACK_BRIGHTNESS // 0.25 rear of wave foam (kinda): sqrt(foam) * FOAM_BACK_BRIGHTNESS Let us know what settings you come up with. Maybe yours look better than mine! That's why I included so many #defines for people to play with. Note: Since how the foam looks depends on so many factors (including viewing angle), I don't think there's one setting that looks "best" everywhere under all conditions -- even after taking into consideration that what looks "best" is certainly subjective to some extent. Any other feedback/constructive criticism would be cool, as well.
  23. I knew that but is there a way to change the voice to those files when you are a vampire? You could just do it manually. Make a batch file. Realistically, how often would you need to change them? Like, once for an entire playthrough?
  24. The vampire voice over sounds are in ...\Morrowind\Data Files\Sound\Vo\v ... and the normal race sounds are in: Morrowind\Data Files\Sound\Vo\<respective folder> d = dunmer, etc.
×
×
  • Create New...