• This is a reminder of 3 IMPORTANT RULES:

    1- External self-promotion websites or apps are NOT allowed here, like Discord/Twitter/Patreon/etc.

    2- Do NOT post in other languages. English-only.

    3- Crack/Warez/Piracy talk is NOT allowed.

    Breaking any of the above rules will result in your messages being deleted and you will be banned upon repetition.

    Please, stop by this thread SoccerGaming Forum Rules And Guidelines and make sure you read and understand our policies.

    Thank you!

Ferdinand

Club Supporter
Hello everyone,

Sorry in advance, I don't speak English very well.

Since FIFA 20, there has been the creation of "dynamic potential" which has the effect of increasing or decreasing the expected potential of a player.
Using the software "Frosty Editor" you can modify the parameters of how the players evolve.


By opening the file "playergrowth.ini", towards the end of the file is:

Code:
[POTENTIAL_CHANGE]
GOALS_MODIFIER = 2
ASSISTS_MODIFIER = 1
CLEAN_SHEETS_MODIFIER = 1
MID_SEASON_TRANSFER_BONUS = 20
MAX_POTENTIAL_VS_OVERALL_DIFF = 30

LEAGUE_BUCKET_MODIFIER_COUNT = 5
// modifier to be applied for leagues in the corresponding bucket
LEAGUE_BUCKET_MODIFIER_1 = 1.5
LEAGUE_BUCKET_MODIFIER_2 = 1.3
LEAGUE_BUCKET_MODIFIER_3 = 1.2
LEAGUE_BUCKET_MODIFIER_4 = 1.1
LEAGUE_BUCKET_MODIFIER_5 = 1

// number of entries in the array
SCORE_PER_POT_OVR_DIFF_COUNT = 7
// this entry's score, all scores below this value will use the potential - overall difference modifiers from this entry
SCORE_PER_POT_OVR_DIFF_1_SCORE = 0
// each entry has another array for each potential - overall difference
// number of potential - overall entries in the sub-array
SCORE_PER_POT_OVR_DIFF_1_ENTRY_COUNT = 4
// potential - overall difference, all values below this will use the min/max from this sub-entry
SCORE_PER_POT_OVR_DIFF_1_ENTRY_1_DIFF = 3
// minimum/maximum potential change to apply. Random value between them will be chosen. Can be negative. Minimum must be less or equal than Maximum.
SCORE_PER_POT_OVR_DIFF_1_ENTRY_1_MIN = -2
SCORE_PER_POT_OVR_DIFF_1_ENTRY_1_MAX = -1
SCORE_PER_POT_OVR_DIFF_1_ENTRY_2_DIFF = 8
SCORE_PER_POT_OVR_DIFF_1_ENTRY_2_MIN = -4
SCORE_PER_POT_OVR_DIFF_1_ENTRY_2_MAX = -2
SCORE_PER_POT_OVR_DIFF_1_ENTRY_3_DIFF = 13
SCORE_PER_POT_OVR_DIFF_1_ENTRY_3_MIN = -6
SCORE_PER_POT_OVR_DIFF_1_ENTRY_3_MAX = -4
SCORE_PER_POT_OVR_DIFF_1_ENTRY_4_DIFF = 30
SCORE_PER_POT_OVR_DIFF_1_ENTRY_4_MIN = -8
SCORE_PER_POT_OVR_DIFF_1_ENTRY_4_MAX = -6


However, do you know what "score" means? But also, how is it calculated?
There is something that questions me, it is that we all say that the dynamic potential is a function of morale and playing time, but here nothing is there


If anyone knows the subject, or has a hypothesis, I would be grateful if you leave a comment :D
 

Ferdinand

Club Supporter
I may have a hypothesis, the score is calculated here at the top of the file:
Code:
// at each growth the player will grow its overall by x. This is the overall points available. Each attribute has an overall points cost to be increased by +1.
// When the overall points are depleted some attributes cannot be grown. This factor is applied in that case (i.e. only when the attribute cost is greater than the remaining overall points)
// to allow an attribute to be grown even if the overall points cost is not met (but it is within the factor limit - hence overgrowth)
// I.e. if the player has only 0.25 overall points left of x that he had grown (the other points were used to grow attributes based on their full cost) and to grow Ball Controll he needs 0.50.
// If this factor is 1 then he cannot grow Ball controll (he needs 0.50 * 1 > 0.25)
// If this factor is 0.5 then he can grow Ball controll by +1 (0.50 * 0.50 = 0.25 and no other overall points remain)
// if this factor is 0.25 then he can grow Ball controll by +1 (0.50 * 0.25 = 0.125 and he still has 0.125 overall points remaining so he can grow another attribute that costs 0.50 or less)
// This should not be 0 or greater than 1
ATTRIBUTE_GROWTH_COST_FACTOR_FOR_OVERGROWTH = 0.5

// percentage of the growth that will be added/removed to the actual growth (a random value between -value,+value is selected) so basically the growth will vary by a random degree
// (it will be randomly between 100-value %, 100+value % of the calculated growth)
GROWTH_VARIATION_PERCENTAGE = 10

// match rating & play time modifier (used for user players since the for CPU players we don't store the necessary information)
MATCHRATING_MIN_VALUE = 4
MATCHRATING_MAX_VALUE = 10
// bonus added to the calculated growth for bad/good match rating (as percentage of the calculated growth)
MATCH_RATING_PERCENTAGE_BONUS_BAD = 0  // can be negative
MATCH_RATING_PERCENTAGE_BONUS_GOOD = 60
// number of minutes to award the maximum bonus percentage
MATCH_PLAY_TIME_FOR_MAX_BONUS = 20
// bonus added to the calculated growth when the player plays the max play time set above
// linear interpolation based on player's actual match play time
MATCH_PLAY_TIME_PERCENTAGE_BONUS = 100

// growth/decrease attenuation/multiplication in case of the injury
// the calculated growth contains all modifiers above, this modifier is applied last
// percentage of the calculated growth that will be applied while the player is injured (i.e. if this is 5% and the player is injured for half of the growth period then half of the growth will be added normally while the other
// half - the injured part - will be reduced to 5% of its value)
// used for player increase stage
INJURY_GROWTH_PERCENTAGE_MODIFIER = 5
// same as above only that this is applied in the decrease stage, for the injury period, the decrease will be amplified to the value of the calculated decrease with the modifier applied
// 100% will not amplify anythin, 200% will decrease the player twice as normal for the injured period
// i.e. if this is 150, for the injured period, the decrease will be 150% of what it should be
// should be >= 100
INJURY_DECREASE_PERCENTAGE_MODIFIER = 150

// a modifier that will be applied based on how many training sessions the player took part in (Career training feature)
// a value of 1 will leave the growth unchanged, below one will reduce the growth/decrease, above 1 will accelerate the growth/decrease (a value of 2 will double it)
TRAINING_MODIFIER_GROWTH = 0.8
TRAINING_MODIFIER_DECREASE = 0.9
// number of training sessions to have in order to receive the maximum modifier. Values lower than this will get a linear interpolated modifier between 1 and the values above
TRAINING_SESSIONS_FOR_MAX_MODIFIER = 0

But also here:
Code:
[POTENTIAL_CHANGE]
GOALS_MODIFIER = 2
ASSISTS_MODIFIER = 1
CLEAN_SHEETS_MODIFIER = 1
MID_SEASON_TRANSFER_BONUS = 20
MAX_POTENTIAL_VS_OVERALL_DIFF = 30

LEAGUE_BUCKET_MODIFIER_COUNT = 5
// modifier to be applied for leagues in the corresponding bucket
LEAGUE_BUCKET_MODIFIER_1 = 1.5
LEAGUE_BUCKET_MODIFIER_2 = 1.3
LEAGUE_BUCKET_MODIFIER_3 = 1.2
LEAGUE_BUCKET_MODIFIER_4 = 1.1
LEAGUE_BUCKET_MODIFIER_5 = 1
 

Ferdinand

Club Supporter
I will try to explain to you what seems logical to me, if someone has another hypothesis, you are welcome!

Code:
SCORE_PER_POT_OVR_DIFF_3_SCORE = 50
SCORE_PER_POT_OVR_DIFF_3_ENTRY_COUNT = 4
SCORE_PER_POT_OVR_DIFF_3_ENTRY_1_DIFF = 3
SCORE_PER_POT_OVR_DIFF_3_ENTRY_1_MIN = 1
SCORE_PER_POT_OVR_DIFF_3_ENTRY_1_MAX = 2
SCORE_PER_POT_OVR_DIFF_3_ENTRY_2_DIFF = 8
SCORE_PER_POT_OVR_DIFF_3_ENTRY_2_MIN = 2
SCORE_PER_POT_OVR_DIFF_3_ENTRY_2_MAX = 4
SCORE_PER_POT_OVR_DIFF_3_ENTRY_3_DIFF = 13
SCORE_PER_POT_OVR_DIFF_3_ENTRY_3_MIN = 4
SCORE_PER_POT_OVR_DIFF_3_ENTRY_3_MAX = 6
SCORE_PER_POT_OVR_DIFF_3_ENTRY_4_DIFF = 30
SCORE_PER_POT_OVR_DIFF_3_ENTRY_4_MIN = 6
SCORE_PER_POT_OVR_DIFF_3_ENTRY_4_MAX = 8

-> (Line 1 & 2) Here, what these lines mean is that if the score is below 50, then we create 4 entries
-> (Line 3, 4, 5) If the score is slightly below 50,
We do the operation (Potential - Overall), don't forget the math priorities! And this value will be contained in "SCORE_PER_POT_OVR_DIFF_3_ENTRY_1_DIFF"


Depending on the difference value, we will add potential, for example if the difference value is 3, we will add between 1 and 2

-> (Line 6, 7, 8) Then it's the same thing as the 2nd instruction that I wrote
 
Last edited:


Top