Data Generation & Distributions
UPFS separates progression structure from curve shape. Generate the Big and Small Upgrade sequence first, then tune gameplay values, native prices and economy costs with distributions that fit the intended player experience.
Recommended generation order
-
01
Define milestones
Choose the number of Big Upgrades and Small Upgrades per group.
-
02
Set gameplay ranges
Choose starting and ending values for the progression.
-
03
Set native price ranges
Define the Upgrade SO price range when the native price is used.
-
04
Generate Upgrade data
Create and review the nested progression.
-
05
Fetch dependents
Refetch Economy Handler and Info Provider after the structure is stable.
-
06
Distribute currency costs
Generate each economy series independently and review the output.
Distribution types
| Distribution | Curve character | Best fit |
|---|---|---|
| Linear | Constant rate of change | Transparent, predictable progression |
| Exponential / Ease In | Late values grow more quickly | Escalating long-term costs |
| Logarithmic / Ease Out | Early values grow more quickly | Fast early power gains |
| Ease In Out | Slow–fast–slow S-curve | Smooth, milestone-oriented pacing |
| Random | Independent values inside bounds | Controlled variation |
| Step | Flat generated output | Manually differentiated entries |
| Custom Curve | Authored AnimationCurve | Designer-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 goal | Gameplay value | Cost |
|---|---|---|
| Accessible early progression | Ease Out | Linear |
| Long-term economy sink | Linear | Exponential |
| Milestone-focused power | Ease In Out | Ease In Out |
| Bespoke live balance | Custom Curve | Custom Curve |
Distribution API
Upgrade SO exposes methods for applying value and price distributions to its current data.
float value = upgrade.ApplyValueDistribution(
+ normalizedPosition, startValue, endValue
+);
int price = upgrade.ApplyPriceDistribution(
+ normalizedPosition, startPrice, endPrice
+);