aliens

Author Topic: [submod] X-Com Files: Kozinsky Stat Strings (2.0.0)  (Read 1011 times)

Offline Kozinsky

  • Colonel
  • ****
  • Posts: 143
  • Sorry for my bEd English
    • View Profile
[submod] X-Com Files: Kozinsky Stat Strings (2.0.0)
« on: October 08, 2024, 01:57:40 pm »
Completely different concept of outputting information about soldiers' stats. After a soldier's name, all his stats are always displayed (except for TU, stamina and health). The pilot's special level (depending on his bravery, reaction and firing accuracy) is also displayed, in order to understand whether this soldier should be assigned as a vehicle pilot.

Requires:
    - OpenXcom Extended version 7.2 or higher
      OR Brutal-OXCE any version.
    - The X-Com Files mod version 3.4 or higher.

Compatibility:
    - Not compatible with any submod with stat strings, but compatible with any other submod.

Notes:
    - You can activate this submod at any stage of your game.
    - It is recommended to start a new game to gradually get used to the information displayed.
    - If you have the previous version of this submod (from this thread) installed and enabled, it needs to be disabled.
    - If you play with submods that add new kinds of soldiers, the rules for creating a stat string for them will be applied as if they were a standard human agent, without checking if that soldier can be a pilot or not.

Languages:
    - The submod does not contain strings visible to the player.

Download link:
    - https://mod.io/g/openxcom/m/x-com-files-kozinsky-stat-strings

Changelog:
Spoiler:
    2.0.0 (17.12.2024):
Spoiler:
      - The number of gradations for all stats except psi-skill has been reduced to five:
          Terrible (not changed): from 0 to the average between the minimum and maximum values, with symbols: "." for strength, bravery, reactions, melee, throwing and firing accuracy, "-" for sanity and psi-strength;
          Bad (not changed): from the average between the minimum and maximum values to the maximum value, with symbols: ":" for strength, bravery, reactions, melee, throwing and firing accuracy, "+" for sanity and psi-strength;
          Normal (not changed): from the maximum value to the gym/psi lab training limit, with symbols: "!" for strength, bravery, reactions, melee, throwing and firing accuracy, "=" for sanity and psi-strength;
          Good (changed): from the gym/psi lab training limit to the ground/air combat training limit, with symbols "s b r a m t f p" for strength, bravery, reactions, sanity, melee, throwing, firing accuracy and psi-strength respectively;
          Great (changed): from the ground/air combat training limit to infinity, with symbols "S B R A M T F P" for strength, bravery, reactions, sanity, melee, throwing, firing accuracy and psi-strength respectively;
      - Now the stat boundaries for grades don't take into account bonuses from transformations and commendations (since it turns out the game itself doesn't take that into account).
      - Removed pilot level zero symbol.
      - The number of pilot levels has been reduced to nine.
    1.0.0 (08.10.2024):
Spoiler:
    - Initial release.
Differences from the unreleased version:
      - Different soldier types use their own stat progression scales for different types of soldiers.
      - Piloting levels have been increased to 18.
      - Each type of soldier is checked for the ability to pilot vehicles.
      - For agents who have evolved from human to other forms (Infernal, Spartan, Olympian, Protean, Kyberos), stat bonuses from this transformation are taken into account.

Information for nerds for version 1.0.0 (difference between 1.0.0 and 2.0.0 see in changelog):
Spoiler:
      1. The player's soldiers each have four sets of stats:
        minStats - the minimum stat values a soldier can get when first appearing in the game;
        maxStats - the maximum stat values a soldier can get when first appearing in the game;
        trainingStatCaps - limit values, which can be obtained by training in the gym and psi lab;
        statCaps - limit values that can be obtained during ground and air battles.

      2. As a rule of thumb, the value of each stat gradually grows between sets.
        For example, for a standard human agent, the stat “strength” has these values:
          minimum value: 20;
          maximum value: 40;
          the limit of gym and psi lab training: 45;
          training limit during ground and air combats: 50.
        This means that the agent, when he first arrives at the base, will get a random strength value between 20 and 40. Then he can raise it to 45 in the gym. Then he can raise it to 50 during ground missions. To get values above 50, the agent must earn medals during ground battles or undergo transformations.

      3. The stats at the end of the soldier's name are displayed sequentially and are grouped into groups for better readability:
        the first three characters are non-combat stats: strength, bravery, and reaction;
        the fourth character is sanity;
        the next three symbols are combat stats: melee, throwing, firing accuracy;
        the eighth and ninth symbols are a group of psi abilities: psi strength and psi skill. The group of these symbols will be displayed when the player learns the concept of psionics;
        the tenth symbol is the separator between stats and piloting level;
        the last one or two symbols are the piloting level, which shows the mastery of the pilot's stats (bravery, reaction and firing accuracy).

      4. Each of the displayed stats (except psi-skill) is divided into six gradations, depending on the value of that stat in different stat sets for that soldier:
        Terrible: from 0 to the average between the minimum and maximum values;
        Bad: from the average between the minimum and maximum values to the maximum value;
        Normal: from the maximum value to the gym/psi lab training limit;
        Good: from the gym/psi lab training limit to the ground/air combat training limit;
        Great: from the ground/air combat training limit to one and a half times the ground/air combat training limit;
        Excellent: from one and a half times the ground/air combat training limit to infinity.

        4.1. So, for the example above, the strength grading limits are as follows:
          Terrible: no more than 29;
          Bad: 30 to 39;
          Normal: 40 to 44;
          Good: 45 to 49;
          Great: 50 to 74;
          Excellent: not less than 75.

        4.2. There are exceptions to this rule:
          4.2.1. If two or more stat values of neighboring groups are equal to each other, the average value between the different values is taken:
            For example, a standard human agent's bravery stat has these initial values:
              minimum value: 10;
              maximum value: 60;
              gym and psi lab training limit: 100;
              training limit during ground and air combat: 100.
            Since the gym and ground combat training limits are equal, it is decided to reduce the gym training limit to 80 (as an average between 60 and 100). This reduction is only applied to the calculation of the stat grading limit and does not change in-game. Thus, the bravery gradation limits are as follows (I know that bravery values are always a multiple of 10, but I don't use this multiple for proper math calculations):
              Terrible: no more than 34;
              Bad: 35 to 59;
              Normal: 60 to 79;
              Good: 80 to 99;
              Great: 100 to 149;
              Excellent: not less than 150.
            Another example, the same standard human agent has a psi-power stat with these values:
              minimum value: 0;
              maximum value: 100;
              gym and psi lab training limit: 100;
              ground and air combat training limit: 100.
            Since the maximum value, the gym and psi lab training limits and the ground and air combat training limits are equal, it is decided to reduce the maximum value to 33 and the gym and psi lab training limit to 66 (as averages between 0 and 100). This reduction only applies to the calculation of the stat grading limit and does not change in-game. Thus, the psi power gradation limits are as follows:
              Terrible: no more than 15;
              Bad: 16 to 32;
              Normal: 33 to 65;
              Good: 66 to 99;
              Great: 100 to 149;
              Excellent: not less than 150.

          4.2.2. If the stat values in the sets do not change sequentially, they are arranged in an arithmetic increasing sequence:
            For example, a standard human agent's sanity stat has the following initial values:
              minimum value: 20;
              maximum value: 80;
              gym and psi lab training limit: 0;
              ground and air combat training limit: 120.
            Since the gym training limit is getting out of step with the increasing sequence, it is decided to change the gym training limit to 100 (as an average between 80 and 120). This change is only applied to the calculation of the stat grading limit and does not change in-game. Thus, the sanity grading limits are as follows:
              Terrible: no more than 49;
              Bad: 50 to 79;
              Normal: 80 to 99;
              Good: 100 to 119;
              Great: 120 to 179;
              Excellent: not less than 180.

          4.2.3. If the stat values in all four sets are the same and not zero, some arithmetic increasing sequence from that value is applied:
            For example, for a dog, the psi- strength stat for all four sets is 40. It is decided to change them to these values (this change applies only to the calculation of stat gradation limits and does not change in-game):
              minimum value: 40;
              maximum value: 60;
              training limit in the gym and psi lab: 80;
              training limit during ground and air combat: 100.
            Thus, the limits of psi power gradation are as follows:
              Terrible: no more than 49;
              Bad: 50 to 59;
              Normal: 60 to 79;
              Good: 80 to 99;
              Great: 100 to 149;
              Excellent: not less than 150.

          4.2.4. If the stat values in all four sets are zero, some arbitrary arithmetic increasing sequence is applied:
            For example, for AI, the strength stat for all four sets is 0. It is decided to change them to these values (this change applies only to the calculation of stat gradation limits and does not change in-game):
              minimum value: 0;
              maximum value: 50;
              training limit in the gym and psi lab: 75;
              training limit during ground and air combat: 100.
            Thus, the strength gradation limits are as follows:
              Terrible: no more than 24;
              Bad: 25 to 49;
              Normal: 50 to 74;
              Good: 75 to 99;
              Great: 100 to 149;
              Excellent: not less than 150.

          4.2.5. In case the value of a stat in all four sets is very small or its change is almost imperceptible, some arbitrary arithmetic increasing sequence is used:
            For example, for a dog, the strength stat has these initial values:
              minimum value: 1;
              maximum value: 1;
              gym and psi lab training limit: 1;
              ground and air combat training limit: 2.
            It was decided to change them to these values (this change applies only to the calculation of stat grading limits and does not change in-game):
              minimum value: 2;
              maximum value: 3;
              gym and psi lab training limit: 4;
              training limit during ground and air combat: 5.
            Thus, the strength gradation limits are as follows:
              Terrible: no more than 1;
              Bad: 2 to 2;
              Normal: 3 to 3;
              Good: 4 to 4;
              Great: 5 to 6;
              Excellent: not less than 7.   
     
      5. Symbols with minimal visual width were chosen to display the gradation of each stat to leave as much space as possible for the soldier's name:
        Strength (non-combat skill group) is indicated by the symbols: . : ! l s S
        Bravery (non-combat skill group) is indicated by the symbols: . : ! l b B
        Reactions (non-combat skill group) is indicated by the symbols: . : ! l r R
        Sanity (visually separates the non-combat skill group from the combat skill group) is indicated by the symbols: - + = Ξ a A
        Melee (combat skill group) is indicated by the symbols: . : ! l m M
        Throwing (combat skill group) is indicated by the symbols: . : ! l t T
        Firing accuracy (combat skill group) is indicated by the symbols: . : ! l f F
        Psi-strength (visually separates the combat skill group from the psionic skill group) is indicated by symbols: - + = Ξ p P

        5.1. For psi-skill, the scale consists of eight gradations and is independent of the psi-skill values in the stat sets:
          Total Sucks: no more than 2 and is indicated by the symbol: .
          Terrible: 3 to 4 and is indicated by the symbol: :
          Bad: 5 to 8 and is indicated by the symbol: !
          Normal: 9 to 16 and is indicated by the symbol: l
          Good: 17 to 32 and is indicated by the symbol: †
          Great: 33 to 64 and is indicated by the symbol: ‡
          Excellent: 65 to 128 and is indicated by the symbol: x
          Godlike: not less than 129 and is indicated by the symbol: X

      6. Piloting level is calculated by summing up points, which are determined based on the values of the stats required for piloting (bravery, reactions and firing accuracy):
        A required stat value of 49 or less: no points;
        A required stat value between 50 and 74: gives 1 point;
        A required stat value between 75 and 99: gives 2 points;
        A required stat value between 100 and 124: gives 3 points;
        A required stat value between 125 and 149: Gives 4 points;
        A required stat value between 150 and 174: gives 5 points;
        A required stat of at least 175: gives 6 points.
        Each point gained from each stat increases the piloting level by 1. Thus, the piloting level can be between 0 and 18. This number is indicated after the separator symbol between the psi ability group and the piloting level - '.
        For all existing soldier types, the piloting ability is also checked, and if the soldier cannot be a pilot, the piloting level is not displayed.

Examples:
Spoiler:
      Agent Masoud Sale/.:!-.:!'2
Spoiler:
        Masoud Sale/ agent's name and name and stat string separator symbol
        . terrible strength
        : bad bravery
        ! normal reactions
        - terrible sanity
        . terrible melee
        : bad throwing
        ! normal firing accuracy
        the player has not explored the concept of psionics, so there are no symbols describing psi-strength and psi-skill
        '2 piloting level 2
      Agent !Nasser Zak/s.ra!!f'3
Spoiler:
        !Nasser Zak/ agent's name and name and stat string separator symbol
        s great strength
        . terrible bravery
        r great reactions
        a great sanity
        ! normal melee
        ! normal throwing
        f great firing accuracy
        the player has not explored the concept of psionics, so there are no symbols describing psi-strength and psi-skill
        '3 piloting level 3
      Agent !Martin Tor/s!rΞ!!f'4
Spoiler:
        !Martin Tor/ agent's name and name and stat string separator symbol
        s great strength
        ! normal bravery
        r great reactions
        Ξ good sanity
        ! normal melee
        ! normal throwing
        f great firing accuracy
        the player has not explored the concept of psionics, so there are no symbols describing psi-strength and psi-skill
        '4 piloting level 4
      Agent Keva Agar/sbraltfΞ.'6
Spoiler:
        Keva Agar/ agent's name and name and stat string separator symbol
        s great strength
        b great bravery
        r great reactions
        a great sanity
        l good melee
        t great throwing
        f great firing accuracy
        Ξ good psi-strength
        . total sucks in psi-skill
        '6 piloting level 6
      Agent Papa Mali/s!raltfΞ‡'4
Spoiler:
        Papa Mali/ agent's name and name and stat string separator symbol
        s great strength
        ! normal bravery
        r great reactions
        a great sanity
        l good melee
        t great throwing
        f great firing accuracy
        Ξ good psi-strength
        ‡ great psi-skill
        '4 piloting level 4
      Dog Prince/.!:+...-.
Spoiler:
        Prince/ dog's name and name and stat string separator symbol
        . terrible strength
        ! normal bravery
        : bad reactions
        + bad sanity
        . terrible melee
        . terrible throwing
        . terrible firing accuracy
        - terrible psi-strength
        . total sucks in psi-skill
        dogs can't pilot
      Dog Tarzan/!b!Ξ!:.-.
Spoiler:
        Tarzan/ dog's name and name and stat string separator symbol
        ! normal strength
        b good bravery
        ! normal reactions
        Ξ good sanity
        ! normal melee
        : bad throwing
        . terrible firing accuracy
        - terrible psi-strength
        . total sucks in psi-skill
        dogs can't pilot
      AI Mercury/...-...-.'0
Spoiler:
        Mercury/ AI's name and name and stat string separator symbol
        . terrible strength
        . terrible bravery
        . terrible reactions
        - terrible sanity
        . terrible melee
        . terrible throwing
        . terrible firing accuracy
        - terrible psi-strength
        . total sucks in psi-skill
        '0 piloting level 0
      AI Cetus/...-..!-.'1
Spoiler:
        Cetus/ AI's name and name and stat string separator symbol
        . terrible strength
        . terrible bravery
        . terrible reactions
        - terrible sanity
        . terrible melee
        . terrible throwing
        ! normal firing accuracy
        - terrible psi-strength
        . total sucks in psi-skill
        '1 piloting level 1
« Last Edit: December 17, 2024, 09:50:36 am by Kozinsky »

Offline psavola

  • Commander
  • *****
  • Posts: 873
    • View Profile
Re: [submod] X-Com Files: Kozinsky Stat Strings
« Reply #1 on: October 10, 2024, 12:47:57 pm »
Thanks. This is provides quite a bit of granularity once you get to know it. It's a bit of getting used to it as I've used reverse stat strings myself, but feels better already. The limits are designed nicely so that once you see the real letters (like m, t, f -- exception: PSI skill), you know you cannot train the skill anymore through regular means and you can only improve through commendations or such.

Offline psavola

  • Commander
  • *****
  • Posts: 873
    • View Profile
Re: [submod] X-Com Files: Kozinsky Stat Strings
« Reply #2 on: December 12, 2024, 08:53:09 pm »
I suppose the latest version should work with bonus transformations like spartanism, or at least according to the changelog it should.

After transforming an already maxed-out soldier (field training wise) to infernal, the stat strings started showing room for improvement in almost every skill (except bravery, which is decreased). Yet in the next mission I tried to train these "missing skills" but received no improvement (as expected).

It seems as if when displaying what name + stat strings to show to the user it doesn't take into account stats after transformation bonuses (not sure if other bonuses) but rather compares them to the transformed soldier's currentStats? If this is the case, not sure if this is even fixable..? This is OXCE 7.15.

Offline Kozinsky

  • Colonel
  • ****
  • Posts: 143
  • Sorry for my bEd English
    • View Profile
Re: [submod] X-Com Files: Kozinsky Stat Strings
« Reply #3 on: December 13, 2024, 07:54:03 am »
I need a save file or at least a screenshot of this agent's information to understand and solve the problem.

Offline psavola

  • Commander
  • *****
  • Posts: 873
    • View Profile
Re: [submod] X-Com Files: Kozinsky Stat Strings
« Reply #4 on: December 13, 2024, 11:52:07 am »
Sorry, I though this would be rather obvious.

Here, take a look for example at "I Adam Fodor".

The stats in the save are essentially maxed except sanity, like:

      - type: STR_INFERNAL
        id: 111
        name: I Adam Fodor
        nationality: 35
...
        currentStats:
          tu: 65
          stamina: 90
          health: 45
          bravery: 100
          reactions: 60
          firing: 90
          throwing: 70
          strength: 50
          psiStrength: 37
          psiSkill: 0
          melee: 90       
....
        diary:
          commendations:
....
....
transformationBonuses:
          STR_BIO_ENHANCEMENT: 1
          STR_COMBAT_PILOT_TRAINING: 1
          STR_INFERNALISM: 1
          STR_MARTIAL_ARTS_TRAINING: 1
          STR_TACTICAL_NEURAL_IMPLANT: 1

          mana: 116

Here's also the save.

Offline Kozinsky

  • Colonel
  • ****
  • Posts: 143
  • Sorry for my bEd English
    • View Profile
Re: [submod] X-Com Files: Kozinsky Stat Strings
« Reply #5 on: December 13, 2024, 12:40:19 pm »
Well, you're right. Now statStrings only use currentStats values without taking into account stat changes from transformations and commendations. I, on the other hand, also used the changes from transformations and commendations when calculating stat boundaries. It turns out that now it's impossible to reach the maximum symbol for stats (e.g. “S” for strength), because the stat value for this symbol is outside the maximum stat limits described in statCaps.

By the way, there was already a proposal to include transformation bonuses in stats on the forum, but this topic was moved to the archive without any comments from Meridian:
https://openxcom.org/forum/index.php?topic=11268.0

If Meridian doesn't respond within a few days, I will redesign this submod so that statStrings will only use the values from currentStats in their calculations, without taking into account stat changes from transformations and commendations.

Offline Kozinsky

  • Colonel
  • ****
  • Posts: 143
  • Sorry for my bEd English
    • View Profile
Re: [submod] X-Com Files: Kozinsky Stat Strings (2.0.0)
« Reply #6 on: December 17, 2024, 09:53:16 am »
New version!

Changelog:
    2.0.0 (17.12.2024):
      - The number of gradations for all stats except psi-skill has been reduced to five:
          Terrible (not changed): from 0 to the average between the minimum and maximum values, with symbols: "." for strength, bravery, reactions, melee, throwing and firing accuracy, "-" for sanity and psi-strength;
          Bad (not changed): from the average between the minimum and maximum values to the maximum value, with symbols: ":" for strength, bravery, reactions, melee, throwing and firing accuracy, "+" for sanity and psi-strength;
          Normal (not changed): from the maximum value to the gym/psi lab training limit, with symbols: "!" for strength, bravery, reactions, melee, throwing and firing accuracy, "=" for sanity and psi-strength;
          Good (changed): from the gym/psi lab training limit to the ground/air combat training limit, with symbols "s b r a m t f p" for strength, bravery, reactions, sanity, melee, throwing, firing accuracy and psi-strength respectively;
          Great (changed): from the ground/air combat training limit to infinity, with symbols "S B R A M T F P" for strength, bravery, reactions, sanity, melee, throwing, firing accuracy and psi-strength respectively;
      - Now the stat boundaries for grades don't take into account bonuses from transformations and commendations (since it turns out the game itself doesn't take that into account).
      - Removed pilot level zero symbol.
      - The number of pilot levels has been reduced to nine.