How do soldiers increase their attributes?

Solution 1:

Every time a soldier performs a specific action associated with an attribute they gain a Progress Point for that attribute. Once they've earned enough progress points for a specific attribute they gain a point in that attribute, and their progress points for that attribute are reset to zero. The amount of progress points required to advance an attribute differs from attribute to attribute as well.

  • Time Unit (250 points required to advance): A progress point is earned every time a soldier spends a TU on a mission
  • Strength (20): Points are given when soldier moves one tile while carrying more than 80% of its maximum carry weight
  • Accuracy (1): Points are given when a soldier attempts to fire at a valid hostile enemy within weapon range * 1.5
  • Reflexes (1): A progress point is gained when a soldier performs a Reaction Fire test
  • Bravery (1): A progress point is earned whenever a soldier panics in battle
  • Health (5): A progress point is earned every time the soldier gets a skillup in any other attribute

Finally, there is a limit on the number of progress points a soldier can gain per mission. With the exception of TU, this limit is equal to the number of progress points required to advance that attribute (that is, you can only advance an attribute once per mission). For TU the limit per mission is actually 500 progress points, meaning it's possible to advance TU twice per mission.

This is all outlined in the file Xenonauts\assets\gameconfig.xml. I've posted the relevant excerpt below.

 <soldierDevelopment>
  <!-- Soldiers develop their attributes by using them. Each time the soldier performs a certain action, he will gain a "progress point" in that attribute. Once he reaches the "pointsToProgress" value, the attribute will increase by one point. These progress points are cumulative and are stored from mission to mission. -->
<APProgress       pointsToProgress="250" maxPointsInSingleBattle="500" globalMaxProgress="98" comment="A progress point is earned every time a soldier spends a TU on a mission" />
    <strengthProgress pointsToProgress="20"  maxPointsInSingleBattle="20"  globalMaxProgress="98" strengthCoeff="80" comment="Points are given when soldier moves one tile while carrying more than strengthCoeff percent of its maximum carry weight" />
    <accuracyProgress pointsToProgress="1"   maxPointsInSingleBattle="1"   globalMaxProgress="98" comment="Points are given when a soldier attempts to fire at a valid hostile enemy within weapon range * 1.5" />
    <reflexesProgress pointsToProgress="1"   maxPointsInSingleBattle="1"    globalMaxProgress="98" comment="A progress point is gained when a soldier performs a Reaction Fire test (it doesn't matter whether he passes or fails it)" />
    <braveryProgress  pointsToProgress="1"   maxPointsInSingleBattle="1"    globalMaxProgress="98" comment="A progress point is earned whenever a soldier panics in battle" />
    <resilienceProgress pointsToProgress="5" globalMaxProgress="97" comment="A progress points is earned every time the soldier gets a skillup in any other attribute" />
  </soldierDevelopment>

Solution 2:

Wipqozn's answer is correct except for one situation which has been commented on. Sometimes a squadie will get much larger stat bonuses. This happens when a Private is promoted to a Corporal.