FStatsHealthLevelMult

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
Description

The number by which the player's endurance is multiplied to calculate the amount of health to be added when the character levels up. The value produced is rounded down to the nearest whole number. If this value is set to 0.0, character health will be based directly on endurance, with no level bonuses. This only affects the player. Levelled NPC and monster health is calculated on a case by case basis, according to multipliers specified in their stats.

The player starts with (Endurance * FPCBaseHealthMult) amount of health points (FPCBaseHealthMult defaults to 2), and on levelling up, health is recalculated to (Endurance * FPCBaseHealthMult) + (Endurance * FStatsHealthLevelMult) taking into account any endurance stat changes.

For instance, a player with 50 endurance will have 100 health points at level 1, and, upon reaching level 2, and raising endurance to 52, will have (52*2) + (52*0.1) = 109 health points. If they did not raise endurance, they would have (50*2) + (50*0.1) = 105 health points. At level 3, if endurance was still not changed, they would have 110 health points.


To calculate the player health at a given level, let:

endurance_delta = CurrentEndurance - StartingEndurance
optimal_lvls = floor(endurance_delta / iLevelUp10Mult)
partial_lvls = endurance_delta mod iLevelUp10Mult
remain_lvls = CurrentLevel - optimal_lvls - 1
base_health = (CurrentLevel - 1) * StartingEndurance
lvl_health = (optimal_lvls + 1) * iLevelUp10Mult * optimal_lvls / 2
max_base = base_health + lvl_health + (endurance_delta * remain_lvls)
min_base = base_health + lvl_health + (partial_lvls * (optimal_lvls + 1))


With these terms, the maximum possible health for a given level, assuming endurance was raised as early as possible, is:

floor((CurrentEndurance * FPCBaseHealthMult) + (FStatsHealthLevelMult * max_base))


Likewise, the minimum possible health for a given level, assuming endurance was raised as late as possible, is:

floor((CurrentEndurance * FPCBaseHealthMult) + (FStatsHealthLevelMult * min_base))


Example: Consider a Breton with starting endurance of 35. At level 46, with maxed (100) endurance:

endurance_delta = CurrentEndurance - StartingEndurance
= 100 - 35
= 65
optimal_lvls = floor(endurance_delta / iLevelUp10Mult)
= floor(65 / 5)
= 13
partial_lvls = endurance_delta mod iLevelUp10Mult
= 65 mod 5
= 0
remain_lvls = CurrentLevel - optimal_lvls - 1
= 46 - 13 - 1
= 32
base_health = (CurrentLevel - 1) * StartingEndurance
= 45 * 35
= 1575
lvl_health = (optimal_lvls + 1) * iLevelUp10Mult * optimal_lvls / 2
= 14 * 5 * 13 / 2
= 455
max_base = base_health + lvl_health + (endurance_delta * remain_lvls)
= 1575 + 455 + (65 * 32)
= 4110
min_base = base_health + lvl_health + (partial_lvls * (optimal_lvls + 1))
= 1575 + 455 + (0 * 14)
= 2030

Maximum possible health is:

= floor((CurrentEndurance * FPCBaseHealthMult) + (FStatsHealthLevelMult * max_base))
= floor((100 * 2) + (0.1 * 4110))
= 611

Minimum possible health is:

= floor((CurrentEndurance * FPCBaseHealthMult) + (FStatsHealthLevelMult * min_base))
= floor((100 * 2) + (0.1 * 2030))
= 403
Default value

0.1

References

See FPCBaseHealthMult and Health