Alien Upgrades Mod - XCOM:EU 2012

From Nexus Mods Wiki
Revision as of 23:19, 15 November 2018 by Dubiousintent (talk | contribs) (Added 'Category:Mod_Creation' & 'Category:Mods')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Overview

This mod adds the ability to upgrade alien's stats during the course of the strategy campaign. It also adds two NEW stats, Damage Reduction and Regeneration.

Damage Reduction : Every time the unit takes damage, the damage is reduced by the unit's Damage Reduction stat. A minimum damage of 1 is default, although this can be changed.

Regeneration : At the beginning of every turn, if the unit is still alive it regains health equal to its Regeneration stat. Health cannot be increased beyond the unit's maximum health in this way.

  • Units are configured via edits to the DefaultGameCore.ini (DGC.ini) (see DefaultGameCore.ini settings - XCOM:EU 2012), which is embedded within XComGame.exe
  • Starting Damage Reduction and Regeneration can be defined for each unit
  • Every unit can be individually defined with two 'general' upgrade times
    • At each general upgrade, all of the units stats (excepting Critical Hit chance) can be adjusted up or down -- this includes the two new stats of Damage Reduction and Regeneration
    • The upgrade time is defined by the number of days since the game began.
  • Additionally, a third 'limited' upgrade time is allowed for each unit
    • The limited upgrade increases the unit's HP by 1


Game Version Compatibility

This subsection should give the game version (e.g. Patch 4 ( Changelist: 356266 ) ) that the mod is compatible with.

This mod is compatible with the Tank-specific damage reduction, which allows tank-type units (SHIVs, Drones, Cyberdiscs and Sectopods) to have damage reduction that scales with current HP.

Known Issues

None known yet.

Programs and Tools

UE Explorer -- finding places to make hex edits to upk files HxD Hex Editor -- making hex edits to upk files ToolBoks -- installing mod, altering DGC.ini values Resource Hacker -- altering DGC.ini values

(See Modding Tools - XCOM:EU 2012 for links.)

Details

Mechanics

The game already tracks the number of days elapsed since the start (March 1, 2015) of the strategy campaign. This mod stores that entry into the Recap values structure, in the "Days" field (field 1). This field is by default only filled out when the game is over (through the player winning or losing). This mod causes the entry to be filled out and updated whenever a new mission name is created.

The Recap data is already replicated back and forth between the strategy and tactical games. Filling out the "Days" field in the structure makes the information available within the tactical game.

Upon the start of each mission, the game updates the default unit stats based upon the current difficulty. This mod alters that function in order to modify the stats of all units based upon the value in the Recap data "Days" field.

In order to implement Damage Reduction and Regeneration, the stats 4 and 5 have been designated to store the unit's Damage Reduction and Regeneration, respectively. Previously these stats were held Strength and Psi (stats that were present in the 1994 X-COM:EU and X-COM:Apocalypse, but are not used in the current remake).

  • Stat 4
    • Was stat Strength
    • Now holds stat Damage Reduction
  • Stat 5
    • Was stat Psi
    • Now holds stat Regeneration

Damage Reduction

Damage Reduction is applied in the XGUnit.OnTakeDamage function. This function already applied HEAT ammo bonus damage, Shredded bonus damage, and Chitin Plating melee %-based damage reduction. Damage reduction is applied AFTER the bonuses for HEAT Ammo and Shredded status are applied, and BEFORE the Chitin Plating damage reduction is applied.

Order of bonuses/reductions to damage in OnTakeDamage:

  1. HEAT Ammo +100% damage against robots
  2. Shredding +33% damage against shredded enemies
  3. General stat-based damage reduction
  4. Combat Stims 50% damage reduction against non-melee attacks

Regeneration

Regeneration is applied in the XGUnit.BeginTurn function. This function is called once for each unit (in each team's squad) at the beginning of the turn. This function calls XGUnit.UpdateEquipment function, which was used to update the OverheatIncrement of each weapon. This feature is no longer used, so is now used to apply Regeneration effects.

The function simply calls HealBy(aCurrentStats[5]) for each unit. The HealBy function will not adjust HP by a negative amount, nor will it increase a unit's HP beyond it's maximum HP.

General Configuration

This mod re-uses the BalanceMod entries found in the DGC.ini (embedded within XComGame.exe) to configure the upgrades, damage reduction, and regeneration.

Default settings for the game apply extremely limited changes between Easy and Normal difficulties compared to the default Character stats.

  • Easy has +1 HP for soldiers, -1 HP and -2 damage for Thin Men
  • Normal has -1 HP and -2 Damage for Thin Men

The primary mechanisms that make Easy and Normal difficulties easier are by shackling the AI, providing hidden to-hit bonuses, and other mechanisms besides reduced alien stats.

This mod eliminates the normal function of the following entries in the DGC.ini:

  • BalanceMods_Easy
  • BalanceMods_Normal
  • BalanceMods_Hard (associated with Classic Difficulty)

It requires that the Character entries in the DGC.ini be updated to reflect the desired alien stats on Classic difficulty. These same unit stats will be applied if the game is played on Easy or Normal as well. Impossible difficulty stats will still be adjusted by the BalanceMods_Classic DGC.ini entries

Mod Configuration Specifics

The BalanceMods_Easy and BalanceMods_Normal entries have the following gameplay effects:

  • iCritHit
    • stores the day after which the unit receives the upgraded stats
  • iDamage
    • extra damage the unit will do after iCritHit days have elapsed
  • iAim
    • extra aim the unit will receive after iCritHit days have elapsed
  • iDefense
    • extra defense the unit will receive after iCritHit days have elapsed
  • iHP
    • extra HP the unit will receive after iCritHit days have elapsed
  • iMobility
    • extra Mobility the unit will receive after iCritHit days have elapsed
  • iWill
    • extra Will the unit will Receive after iCritHit days have elapsed


The BalanceMods_Hard entries enable configuration of the Damage Reduction and Regeneration stats

  • iDamage
    • starting damage reduction for the unit
  • iAim
    • starting regeneration for the unit
  • iDefense
    • extra damage reduction the unit will receive after BalanceMods_Easy.iCritHit days have elapsed
  • iHP
    • extra damage reduction the unit will receive after BalanceMods_Normal.iCritHit days have elapsed
  • iMobility
    • extra regeneration the unit will receive after BalanceMods_Easy.iCritHit days have elapsed
  • iWill
    • extra regeneration the unit will receive after BalanceMods_Normal.iCritHit days have elapsed
  • iCritHit
    • stores the number of days after which the unit will gain +1 HP

Further Balance Changes

This mod does not alter the composition or balance of the alien squads. Certain aliens appear very infrequently as the game progresses. Altering these squad compositions is highly recommended when installing this mod.

File Changes

This mod requires hex edits in six different locations.

  1. XComStrategyGame.upk >> XGMission.GenerateOpName function
    Updated Recap "Days" data whenever a new mission name is generated
  2. XComGame.upk >> XGUnit.UpdateEquipment function
    Applies regeneration effects
  3. XComGame.upk >> XGUnit.OnTakeDamage function
    Applies damage reduction effects
  4. XComGame.upk >> XGTacticalGameCore.BuildCharacter function
    Make default stat 4 (now damage reduction) 0.
  5. XComGame.upk >> XGTacticalGameCore.GenerateArmorFragments function
    Rewrites function into helper function to retrieve days elapsed
  6. XComGame.upk >> XGTacticalGameCore.ModfiyStatsByDifficulty function
    Substantially rewritten to apply upgrades, damage reduction and regeneration

A ToolBoks-friendly file containing all of the hex changes is available here: Hex edits in ToolBoks-friendly format

XGMission.GenerateOpName

Removes deterministic name generation for tutorial mission. Stores/updates Recap entry "Days" with the current day-count.

Hex Change

XGMission.GenerateOpName
original: 60 37 00 00 AB 1F 00 00 00 00 00 00 5D 37 00 00 00 00 00 00 00 00 00 00 60 37 00 00 00 00 00 00 07 01 00 00 90 1B 00 00 86 01 00 00 06 01 00 00 49 02 00 28 15 07 22 00 9A 01 35 37 00 00 2C 08 16 04 01 27 37 00 00 06 7B 01 0F 00 5E 37 00 00 2E 71 FE FF FF 19 19 2E 94 FE FF FF 12 20 FD FE FF FF 0A 00 3A FB FF FF 00 1C 91 FD FF FF 16 09 00 09 FB FF FF 00 01 09 FB FF FF 13 00 A4 FA FF FF 00 1B B6 0D 00 00 00 00 00 00 1F 58 47 50 61 72 61 6D 00 16 07 F7 00 2D 00 60 37 00 00 0F 19 00 5E 37 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 1A 2C 2E 01 29 37 00 00 0F 19 00 5E 37 00 00 09 00 EE F9 FF FF 00 01 EE F9 FF FF 1A 2C 06 01 28 37 00 00 06 51 01 0F 19 00 5E 37 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 1A A7 2C 35 16 01 29 37 00 00 0F 19 00 5E 37 00 00 09 00 EE F9 FF FF 00 01 EE F9 FF FF 1A A7 2C 4C 16 01 28 37 00 00 04 12 20 8C FE FF FF 14 00 09 FA FF FF 00 1B 39 0D 00 00 00 00 00 00 01 26 37 00 00 4A 16 04 3A 5F 37 00 00 53
new: 60 37 00 00 AB 1F 00 00 00 00 00 00 5D 37 00 00 00 00 00 00 00 00 00 00 60 37 00 00 00 00 00 00 07 01 00 00 90 1B 00 00 66 01 00 00 06 01 00 00 49 02 00 28 15 07 22 00 9A 01 35 37 00 00 2C 08 16 04 01 27 37 00 00 06 5B 01 0F 00 5E 37 00 00 2E 71 FE FF FF 19 19 2E 94 FE FF FF 12 20 FD FE FF FF 0A 00 3A FB FF FF 00 1C 91 FD FF FF 16 09 00 09 FB FF FF 00 01 09 FB FF FF 13 00 A4 FA FF FF 00 1B B6 0D 00 00 00 00 00 00 1F 58 47 50 61 72 61 6D 00 16 1B CE 26 00 00 00 00 00 00 24 01 19 1B 4C 0E 00 00 00 00 00 00 16 0A 00 82 41 00 00 00 1B F2 0E 00 00 00 00 00 00 16 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 0F 19 00 5E 37 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 1A A7 2C 35 16 01 29 37 00 00 0F 19 00 5E 37 00 00 09 00 EE F9 FF FF 00 01 EE F9 FF FF 1A A7 2C 4C 16 01 28 37 00 00 04 12 20 8C FE FF FF 14 00 09 FA FF FF 00 1B 39 0D 00 00 00 00 00 00 01 26 37 00 00 4A 16 04 3A 5F 37 00 00 53

Decompiled Code

Original Code
        if(bTutorial)
        {
            kTag.StrValue0 = m_aFirstOpName[46];
            kTag.StrValue1 = m_aSecondOpName[6];
        }
        // End:0x151
        else

New Code
        STAT_SetStat(1, Game().GetDays());                                                                                                                                                                                                                
  


XGUnit.UpdateEquipment

Applies regeneration effects.

Hex Change

XGUnit.UpdateEquipment
original: 49 B3 00 00 50 55 00 00 00 00 00 00 31 B3 00 00 00 00 00 00 00 00 00 00 34 B3 00 00 00 00 00 00 B5 16 00 00 09 C9 02 00 4D 01 00 00 F1 00 00 00 0F 00 34 B3 00 00 1B CC 32 00 00 00 00 00 00 16 07 4A 01 77 00 34 B3 00 00 2A 16 0F 00 32 B3 00 00 25 07 4A 01 96 00 32 B3 00 00 2C 16 16 0F 00 33 B3 00 00 2E 58 B9 00 00 19 00 34 B3 00 00 15 00 25 0A 00 00 00 1B D1 32 00 00 00 00 00 00 38 3D 00 32 B3 00 00 16 07 8D 00 72 00 33 B3 00 00 2A 16 06 3C 01 07 3C 01 82 19 00 33 B3 00 00 0C 00 4F B9 00 00 00 1B 9A 36 00 00 00 00 00 00 2C 0B 16 18 20 00 19 00 33 B3 00 00 0A 00 47 B9 00 00 00 1B F8 3D 00 00 00 00 00 00 16 16 07 1B 01 98 19 00 33 B3 00 00 09 00 1C B9 00 00 00 01 1C B9 00 00 25 16 19 00 33 B3 00 00 0A 00 00 00 00 00 00 1B B5 12 00 00 00 00 00 00 16 06 3C 01 A2 19 00 33 B3 00 00 09 00 1C B9 00 00 00 01 1C B9 00 00 26 16 A5 00 32 B3 00 00 16 06 2E 00 04 0B 53
new: 49 B3 00 00 50 55 00 00 00 00 00 00 31 B3 00 00 00 00 00 00 00 00 00 00 34 B3 00 00 00 00 00 00 B5 16 00 00 09 C9 02 00 F5 00 00 00 F1 00 00 00 1B D8 36 00 00 00 00 00 00 1A 2C 05 01 0D 31 00 00 16 04 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 53

Decompiled Code

Original Code
function UpdateEquipment()
{
    local XGInventory kInventory;
    local XGWeapon kWeapon;
    local int I;

    kInventory = GetInventory();
    // End:0x14A
    if(kInventory != none)
    {
        I = 0;
        J0x2E:
        // End:0x14A [Loop If]
        if(I < 22)
        {
            kWeapon = XGWeapon(kInventory.GetItem(byte(I)));
            // End:0x8D
            if(kWeapon == none)
            {
            }
            // End:0x13C
            else
            {
                // End:0x13C
                if(kWeapon.HasProperty(11) && kWeapon.IsOverheated())
                {
                    // End:0x11B
                    if(kWeapon.m_iTurnFired <= 0)
                    {
                        kWeapon.CoolDown();
                    }
                    // End:0x13C
                    else
                    {
                        kWeapon.m_iTurnFired -= 1;
                    }
                }
            }
            ++ I;
            // [Loop Continue]
            goto J0x2E;
        }
    }
    //return;    
}

New Code
function UpdateEquipment()
{
    local XGInventory kInventory;
    local XGWeapon kWeapon;
    local int I;

    HealBy(m_aCurrentStats[5]);
    return;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
}
  
XGUnit.OnTakeDamage

Applies damage reduction effects.

Hex Change

XGUnit.OnTakeDamage
original: 07 4E 02 1B 4F 3E 00 00 00 00 00 00 16 A1 00 98 B4 00 00 38 44 AB 38 3F 00 98 B4 00 00 19 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 09 00 92 0F 00 00 00 01 92 0F 00 00 05 00 92 0F 00 00 00 1E C3 F5 A8 3E 16 16
new: 07 CC 01 1B 4F 3E 00 00 00 00 00 00 16 9F 00 98 B4 00 00 1E 71 3D AA 3F 16 0F 00 98 B4 00 00 FA 93 00 98 B4 00 00 1A 2C 04 01 0D 31 00 00 16 2C 01 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 00 98 B4 00 00 0B 0B

Decompiled Code

Original Code
    if(IsShredded())
    {
        iDamage += int(float(iDamage) * XComGameReplicationInfo(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kGameCore.m_kAbilities.0.330);
    }

New Code
    if(IsShredded())
    {
        iDamage *= 1.330;
    }
    iDamage = Max(iDamage - m_aCurrentStats[4], 1);
  

XGTacticalGameCore.BuildCharacter

Characters have a default stat[4] (Damage Reduction) of 0.

Hex Change

XGTacticalGameCore.BuildCharacter
original: 0F 1A 2C 04 35 CE 0D 00 00 D5 0D 00 00 00 01 00 9B 77 00 00 26
new: 0F 1A 2C 04 35 CE 0D 00 00 D5 0D 00 00 00 01 00 9B 77 00 00 25

Decompiled Code

Original Code
    kCharacter.aStats[4] = 1;

New Code
    kCharacter.aStats[4] = 0;
  

XGTacticalGameCore.GenerateArmorFragments

Rewrote function to be a helper function to retrieve number of days elapsed.

Hex Change

XGTacticalGameCore.GenerateArmorFragments
original: 01 78 00 00 50 55 00 00 00 00 00 00 E8 77 00 00 00 00 00 00 00 00 00 00 EB 77 00 00 00 00 00 00 FB 05 00 00 6C C1 00 00 EC 01 00 00 5C 01 00 00 0F 00 E9 77 00 00 25 04 00 E9 77 00 00 07 D7 01 19 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 0A 00 89 9C 00 00 00 2D 01 89 9C 00 00 05 EB 77 00 00 00 00 EB 77 00 00 0A A7 00 2C 05 0F 00 E9 77 00 00 2C 03 06 4A 01 0A BB 00 2C 06 0F 00 E9 77 00 00 2C 02 06 4A 01 0A CF 00 2C 07 0F 00 E9 77 00 00 2C 05 06 4A 01 0A E3 00 2C 08 0F 00 E9 77 00 00 2C 0A 06 4A 01 0A F7 00 2C 0A 0F 00 E9 77 00 00 2C 06 06 4A 01 0A 0B 01 2C 0B 0F 00 E9 77 00 00 2C 08 06 4A 01 0A 1F 01 2C 0F 0F 00 E9 77 00 00 2C 08 06 4A 01 0A 33 01 2C 10 0F 00 E9 77 00 00 2C 14 06 4A 01 0A 47 01 2C 11 0F 00 E9 77 00 00 2C 02 06 4A 01 0A FF FF 07 5B 01 9A 00 E9 77 00 00 25 16 04 25 A1 00 E9 77 00 00 93 12 20 BC 4D 00 00 33 00 6B 4D 00 00 00 1C 6E 4D 00 00 00 E9 77 00 00 A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 91 00 E9 77 00 00 2C 02 16 16 16 07 D7 01 98 00 E9 77 00 00 25 16 0F 00 E9 77 00 00 26 04 00 E9 77 00 00 04 3A EA 77 00 00 53
new: 01 78 00 00 50 55 00 00 00 00 00 00 E8 77 00 00 00 00 00 00 00 00 00 00 EB 77 00 00 00 00 00 00 FB 05 00 00 6C C1 00 00 A8 01 00 00 5C 01 00 00 07 11 00 9A 00 EB 77 00 00 25 16 04 25 07 E2 00 77 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 2A 16 07 E2 00 97 19 19 2E 64 2D 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 71 2D 00 00 00 01 71 2D 00 00 0C 00 CF 9D 00 00 00 1B 3E 67 00 00 00 00 00 00 26 16 00 EB 77 00 00 16 04 26 04 25 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 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

Decompiled Code

Original Code
simulated function int GenerateArmorFragments(int iCharType)
{
    local int iFragments;

    iFragments = 0;
    return iFragments;
    // End:0x1D7
    if(XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_bAllowItemFragments)
    {
        switch(iCharType)
        {
            // End:0xA7
            case 5:
                iFragments = 3;
                // End:0x14A
                break;
            // End:0xBB
            case 6:
                iFragments = 2;
                // End:0x14A
                break;
            // End:0xCF
            case 7:
                iFragments = 5;
                // End:0x14A
                break;
            // End:0xE3
            case 8:
                iFragments = 10;
                // End:0x14A
                break;
            // End:0xF7
            case 10:
                iFragments = 6;
                // End:0x14A
                break;
            // End:0x10B
            case 11:
                iFragments = 8;
                // End:0x14A
                break;
            // End:0x11F
            case 15:
                iFragments = 8;
                // End:0x14A
                break;
            // End:0x133
            case 16:
                iFragments = 20;
                // End:0x14A
                break;
            // End:0x147
            case 17:
                iFragments = 2;
                // End:0x14A
                break;
            // End:0xFFFF
            default:
                // End:0x15B
                if(iFragments == 0)
                {
                    return 0;
                }
                iFragments += (class'XComEngine'.static.SyncRand(iFragments, (string(Name) @ string(GetStateName())) @ string(GetFuncName())) - (iFragments / 2));
                // End:0x1D7
                if(iFragments <= 0)
                {
                    iFragments = 1;
                }
            }
            return iFragments;
            //return ReturnValue;            
}

New Code
simulated function int GenerateArmorFragments(int iCharType)
{
    local int iFragments;

    // End:0x11
    if(iCharType == 0)
    {
        return 0;
    }
    // End:0xE2
    if(XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle != none)
    {
        // End:0xE2
        if(XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.STAT_GetStat(1) > iCharType)
        {
            return 1;
        }
    }
    return 0;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    //return;    
}
  

XGTacticalGameCore.ModifyStatsByDifficulty

Changes function so that it loads additional stats, as well as stat bumps based on days elapsed.

Hex Change

XGTacticalGameCore.ModifyStatsByDifficulty
original: D1 77 00 00 50 55 00 00 00 00 00 00 BA 77 00 00 00 00 00 00 00 00 00 00 BB 77 00 00 00 00 00 00 27 05 00 00 A7 A6 00 00 07 0A 00 00 0F 06 00 00 05 66 76 00 00 00 01 66 76 00 00 0A 8E 02 25 A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 0D 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 06 04 0A 0A 0A 05 2C 02 A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 0D 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 06 04 0A 0A 86 07 2C 03 A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 0D 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 06 04 0A 0A 8A 07 26 0A FF FF A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 0D 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 06 04 0A 04 0B 53
new: D1 77 00 00 50 55 00 00 00 00 00 00 BA 77 00 00 00 00 00 00 00 00 00 00 BB 77 00 00 00 00 00 00 27 05 00 00 A7 A6 00 00 EB 09 00 00 0F 06 00 00 0F 1A 2C 04 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 0F 1A 2C 05 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 07 36 03 9A 01 66 76 00 00 2C 03 16 A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 0D 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 84 0F 00 00 16 07 4D 06 97 1B C1 30 00 00 00 00 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 25 16 A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 87 0F 00 00 16 A1 1A 2C 04 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 05 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 07 64 09 97 1B C1 30 00 00 00 00 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 25 16 A1 1A 26 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 76 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 02 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 75 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 03 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 73 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 07 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 0C 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 78 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 86 0F 00 00 16 A1 1A 2C 04 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 74 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 A1 1A 2C 05 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 35 72 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 07 CE 09 97 1B C1 30 00 00 00 00 00 00 35 77 0E 00 00 7A 0E 00 00 00 00 10 35 D3 0D 00 00 D5 0D 00 00 00 00 48 BB 77 00 00 01 85 0F 00 00 16 25 16 A1 1A 25 35 CE 0D 00 00 D5 0D 00 00 00 01 48 BB 77 00 00 26 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 04 0B 53

Decompiled Code

Original Code
simulated function ModifyStatsByDifficulty(out TCharacter kCharacter)
{
    switch(m_iDifficulty)
    {
        // End:0x28E
        case 0:
            kCharacter.aStats[1] += BalanceMods_Easy[kCharacter.iType].iAim;
            kCharacter.aStats[2] += BalanceMods_Easy[kCharacter.iType].iDefense;
            kCharacter.aStats[3] += BalanceMods_Easy[kCharacter.iType].iMobility;
            kCharacter.aStats[7] += BalanceMods_Easy[kCharacter.iType].iWill;
            kCharacter.aStats[13] += BalanceMods_Easy[kCharacter.iType].iCritHit;
            kCharacter.aStats[0] += BalanceMods_Easy[kCharacter.iType].iHP;
            kCharacter.aStats[12] += BalanceMods_Easy[kCharacter.iType].iDamage;
            // End:0xA04
            break;
        // End:0x50A
        case 2:
            kCharacter.aStats[1] += BalanceMods_Hard[kCharacter.iType].iAim;
            kCharacter.aStats[2] += BalanceMods_Hard[kCharacter.iType].iDefense;
            kCharacter.aStats[3] += BalanceMods_Hard[kCharacter.iType].iMobility;
            kCharacter.aStats[7] += BalanceMods_Hard[kCharacter.iType].iWill;
            kCharacter.aStats[13] += BalanceMods_Hard[kCharacter.iType].iCritHit;
            kCharacter.aStats[0] += BalanceMods_Hard[kCharacter.iType].iHP;
            kCharacter.aStats[12] += BalanceMods_Hard[kCharacter.iType].iDamage;
            // End:0xA04
            break;
        // End:0x786
        case 3:
            kCharacter.aStats[1] += BalanceMods_Classic[kCharacter.iType].iAim;
            kCharacter.aStats[2] += BalanceMods_Classic[kCharacter.iType].iDefense;
            kCharacter.aStats[3] += BalanceMods_Classic[kCharacter.iType].iMobility;
            kCharacter.aStats[7] += BalanceMods_Classic[kCharacter.iType].iWill;
            kCharacter.aStats[13] += BalanceMods_Classic[kCharacter.iType].iCritHit;
            kCharacter.aStats[0] += BalanceMods_Classic[kCharacter.iType].iHP;
            kCharacter.aStats[12] += BalanceMods_Classic[kCharacter.iType].iDamage;
            // End:0xA04
            break;
        // End:0x78A
        case 1:
        // End:0xFFFF
        default:
            kCharacter.aStats[1] += BalanceMods_Normal[kCharacter.iType].iAim;
            kCharacter.aStats[2] += BalanceMods_Normal[kCharacter.iType].iDefense;
            kCharacter.aStats[3] += BalanceMods_Normal[kCharacter.iType].iMobility;
            kCharacter.aStats[7] += BalanceMods_Normal[kCharacter.iType].iWill;
            kCharacter.aStats[13] += BalanceMods_Normal[kCharacter.iType].iCritHit;
            kCharacter.aStats[0] += BalanceMods_Normal[kCharacter.iType].iHP;
            kCharacter.aStats[12] += BalanceMods_Normal[kCharacter.iType].iDamage;
            // End:0xA04
            break;
    }
    //return;    
}

New Code
simulated function ModifyStatsByDifficulty(out TCharacter kCharacter)
{
    kCharacter.aStats[4] = BalanceMods_Hard[kCharacter.iType].iDamage;
    kCharacter.aStats[5] = BalanceMods_Hard[kCharacter.iType].iAim;
    // End:0x336
    if(m_iDifficulty == 3)
    {
        kCharacter.aStats[1] += BalanceMods_Classic[kCharacter.iType].iAim;
        kCharacter.aStats[2] += BalanceMods_Classic[kCharacter.iType].iDefense;
        kCharacter.aStats[3] += BalanceMods_Classic[kCharacter.iType].iMobility;
        kCharacter.aStats[7] += BalanceMods_Classic[kCharacter.iType].iWill;
        kCharacter.aStats[13] += BalanceMods_Classic[kCharacter.iType].iCritHit;
        kCharacter.aStats[0] += BalanceMods_Classic[kCharacter.iType].iHP;
        kCharacter.aStats[12] += BalanceMods_Classic[kCharacter.iType].iDamage;
    }
    // End:0x64D
    if((GenerateArmorFragments(BalanceMods_Easy[kCharacter.iType].iCritHit)) > 0)
    {
        kCharacter.aStats[1] += BalanceMods_Easy[kCharacter.iType].iAim;
        kCharacter.aStats[2] += BalanceMods_Easy[kCharacter.iType].iDefense;
        kCharacter.aStats[3] += BalanceMods_Easy[kCharacter.iType].iMobility;
        kCharacter.aStats[7] += BalanceMods_Easy[kCharacter.iType].iWill;
        kCharacter.aStats[0] += BalanceMods_Easy[kCharacter.iType].iHP;
        kCharacter.aStats[12] += BalanceMods_Easy[kCharacter.iType].iDamage;
        kCharacter.aStats[4] += BalanceMods_Hard[kCharacter.iType].iDefense;
        kCharacter.aStats[5] += BalanceMods_Hard[kCharacter.iType].iMobility;
    }
    // End:0x964
    if((GenerateArmorFragments(BalanceMods_Normal[kCharacter.iType].iCritHit)) > 0)
    {
        kCharacter.aStats[1] += BalanceMods_Normal[kCharacter.iType].iAim;
        kCharacter.aStats[2] += BalanceMods_Normal[kCharacter.iType].iDefense;
        kCharacter.aStats[3] += BalanceMods_Normal[kCharacter.iType].iMobility;
        kCharacter.aStats[7] += BalanceMods_Normal[kCharacter.iType].iWill;
        kCharacter.aStats[0] += BalanceMods_Normal[kCharacter.iType].iHP;
        kCharacter.aStats[12] += BalanceMods_Normal[kCharacter.iType].iDamage;
        kCharacter.aStats[4] += BalanceMods_Hard[kCharacter.iType].iHP;
        kCharacter.aStats[5] += BalanceMods_Hard[kCharacter.iType].iWill;
    }
    // End:0x9CE
    if((GenerateArmorFragments(BalanceMods_Hard[kCharacter.iType].iCritHit)) > 0)
    {
        kCharacter.aStats[0] += 1;
    }                                                                                                        
    //return;    
}

Localization Changes

No localization changes are required with this mod.


References

Referred to by this article:

That refer to this article: