feat(isac): link skill chips to abilities
This commit is contained in:
+32
-36
@@ -1,25 +1,23 @@
|
||||
# Weapon and gear stat level scaling
|
||||
|
||||
This document records the empirically observed rules for adjusting weapon and
|
||||
gear stat ranges by item level. The rules apply independently to both endpoints
|
||||
of a configured range.
|
||||
Use these observed rules to adjust weapon and gear stat ranges by item level.
|
||||
Apply each rule to both endpoints of a configured range.
|
||||
|
||||
These formulas are based on in-game observations rather than published game
|
||||
mechanics. Preserve source observations when adding new samples and revise the
|
||||
constants if a larger data set disproves them.
|
||||
In-game observations, rather than published game mechanics, support these
|
||||
formulas. Preserve source observations with new samples and revise constants
|
||||
when a larger data set disproves them.
|
||||
|
||||
## Numeric representation and display
|
||||
|
||||
Stat ranges must retain their unrounded decimal values. The integer shown by the
|
||||
game is consistent with truncation:
|
||||
Store stat ranges as unrounded decimals. The game display truncates them:
|
||||
|
||||
```text
|
||||
displayedValue = floor(rawValue)
|
||||
```
|
||||
|
||||
Do not use `ceil`, and do not repeatedly level an already displayed integer.
|
||||
Both approaches accumulate errors. A level-1 value displayed as `0` can still
|
||||
have a positive fractional raw value that becomes visible at a higher level.
|
||||
Avoid `ceil` and repeated leveling of displayed integers. Both accumulate
|
||||
errors. A level-1 display of `0` can hide a positive fractional raw value that
|
||||
appears at a higher level.
|
||||
|
||||
For example, a standard gear item displayed `0 ENG` at level 1 and `2 ENG` at
|
||||
level 42. With a level-42 multiplier of `3.01`, a raw base near `0.7` explains
|
||||
@@ -30,12 +28,12 @@ floor(0.7) = 0
|
||||
floor(0.7 × 3.01) = 2
|
||||
```
|
||||
|
||||
When only displayed integers are available, a prediction can be off by one.
|
||||
That is expected information loss, not evidence for rounding upward.
|
||||
Predictions from displayed integers can miss by one because truncation loses
|
||||
information. That error does not indicate rounding upward.
|
||||
|
||||
## Shared progression model
|
||||
|
||||
The stable portion of both progressions is linear, not compounded:
|
||||
The stable portion of both progressions is linear:
|
||||
|
||||
```text
|
||||
rawStat(level) = hiddenBase × multiplier(level)
|
||||
@@ -48,8 +46,8 @@ fixed `5%` of the hidden base:
|
||||
rawStat(level + 1) - rawStat(level) = hiddenBase × 0.05
|
||||
```
|
||||
|
||||
Never calculate a new level as `previousDisplayedValue × 1.05`; that describes
|
||||
compound growth and does not match the observations.
|
||||
Do not calculate a new level as `previousDisplayedValue × 1.05`. That compound
|
||||
growth model conflicts with the observations.
|
||||
|
||||
For a range `[minimum, maximum]`, calculate each endpoint separately:
|
||||
|
||||
@@ -58,7 +56,7 @@ scaledMinimum = hiddenMinimum × multiplier(level)
|
||||
scaledMaximum = hiddenMaximum × multiplier(level)
|
||||
```
|
||||
|
||||
Only truncate when producing a game-matching display value.
|
||||
Truncate at the game-display boundary.
|
||||
|
||||
## Gear
|
||||
|
||||
@@ -68,9 +66,9 @@ The observed stable gear multiplier is:
|
||||
gearMultiplier(level) = 0.91 + 0.05 × level
|
||||
```
|
||||
|
||||
This rule is validated for levels 10 through 50 across Standard, Specialized,
|
||||
and High-end samples. Quality changes the hidden stat ranges; the observed
|
||||
late-level multiplier does not change with quality.
|
||||
Samples across Standard, Specialized, and High-end qualities validate this rule
|
||||
for levels 10 through 50. Quality changes hidden stat ranges; the observed
|
||||
late-level multiplier remains the same.
|
||||
|
||||
Given hidden level-independent endpoints:
|
||||
|
||||
@@ -115,11 +113,10 @@ ENG = floor(0.7 × 3.01) = 2
|
||||
|
||||
### Early gear levels
|
||||
|
||||
Levels 1 through 9 show a quality-dependent transition and do not follow the
|
||||
stable multiplier directly. Do not extrapolate that transition from a single
|
||||
level-1-to-level-2 change. Until the early curves are sampled more completely,
|
||||
store authoritative ranges for those levels or mark calculated results as
|
||||
estimates.
|
||||
Levels 1 through 9 show a quality-dependent transition outside the stable
|
||||
multiplier. Do not extrapolate it from one level-1-to-level-2 change. Until
|
||||
more samples define the early curves, store authoritative ranges or label
|
||||
calculated results as estimates.
|
||||
|
||||
## Weapons
|
||||
|
||||
@@ -179,9 +176,9 @@ multiplier, then derive the combined pool bounds by multiplying each endpoint
|
||||
by three. Redistribution changes the split between the three cores without
|
||||
changing the selected item's total allocation.
|
||||
|
||||
The `1.14` offset is provisional and is currently validated only for the
|
||||
level-40-to-level-50 interval. Preserve enough decimal precision to revise it
|
||||
without migrating rounded data.
|
||||
The `1.14` offset remains provisional; observations only validate it from level
|
||||
40 to 50. Retain enough decimal precision to revise it without migrating
|
||||
rounded data.
|
||||
|
||||
### Weapon example
|
||||
|
||||
@@ -192,9 +189,9 @@ A weapon changed from `753 DMG` at level 40 to `873 DMG` at level 50:
|
||||
floor(872.95) = 872
|
||||
```
|
||||
|
||||
The displayed-source calculation misses by one because `753` is already
|
||||
truncated. Applying the ratio to the unrounded source value produces the
|
||||
observed `873`. This is why calculations must use stored decimal endpoints.
|
||||
The calculation misses by one because `753` is truncated. The ratio applied to
|
||||
the unrounded source value produces `873`, so calculations require stored
|
||||
decimal endpoints.
|
||||
|
||||
The observed changes over those ten levels were linear:
|
||||
|
||||
@@ -207,11 +204,10 @@ ENG: 45 → 52 (about 0.7 per level)
|
||||
|
||||
### Early weapon levels
|
||||
|
||||
Do not apply the provisional late-level weapon offset to level 1. An Exotic
|
||||
sample's displayed level-1 values and level-50 values fit a `2.91` endpoint
|
||||
ratio for most stats, which is incompatible with simply extending the
|
||||
level-40-to-level-50 offset backward. Weapons therefore also appear to have an
|
||||
early transition or another quality-dependent input.
|
||||
Do not apply the provisional late-level weapon offset at level 1. An Exotic
|
||||
sample's level-1 and level-50 displays fit a `2.91` endpoint ratio for most
|
||||
stats, which conflicts with extending the level-40-to-level-50 offset
|
||||
backward. Weapons appear to have an early transition or quality-dependent input.
|
||||
|
||||
Until more intermediate samples are available:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user