Ultimate Progression Framework System
v1.0.0

Recommended generation order

  1. 01
    Define milestones

    Choose the number of Big Upgrades and Small Upgrades per group.

  2. 02
    Set gameplay ranges

    Choose starting and ending values for the progression.

  3. 03
    Set native price ranges

    Define the Upgrade SO price range when the native price is used.

  4. 04
    Generate Upgrade data

    Create and review the nested progression.

  5. 05
    Fetch dependents

    Refetch Economy Handler and Info Provider after the structure is stable.

  6. 06
    Distribute currency costs

    Generate each economy series independently and review the output.

Distribution types

DistributionCurve characterBest fit
LinearConstant rate of changeTransparent, predictable progression
Exponential / Ease InLate values grow more quicklyEscalating long-term costs
Logarithmic / Ease OutEarly values grow more quicklyFast early power gains
Ease In OutSlow–fast–slow S-curveSmooth, milestone-oriented pacing
RandomIndependent values inside boundsControlled variation
StepFlat generated outputManually differentiated entries
Custom CurveAuthored AnimationCurveDesigner-owned progression shapes

How curve evaluation works

Each sequential Small Upgrade receives a normalized position from the beginning to the end of the complete progression.

The selected distribution transforms that normalized position before UPFS interpolates between the configured start and end values.

Integer configurations round the resulting values. Float configurations preserve decimal precision where supported.

Combine independent curves

Gameplay growth and purchase cost do not need to use the same distribution.

Design goalGameplay valueCost
Accessible early progressionEase OutLinear
Long-term economy sinkLinearExponential
Milestone-focused powerEase In OutEase In Out
Bespoke live balanceCustom CurveCustom Curve

Distribution API

Upgrade SO exposes methods for applying value and price distributions to its current data.

csharp
float value = upgrade.ApplyValueDistribution(
+    normalizedPosition, startValue, endValue
+);

int price = upgrade.ApplyPriceDistribution(
+    normalizedPosition, startPrice, endPrice
+);