Learn · Advanced incremental

Softcaps and diminishing returns

Left alone, an idle game's bonuses grow as fast as the numbers feeding them, and the numbers grow without end. A softcap is the usual fix: past a point the effect keeps growing, only slower. Here is one effect, capped five ways.

The two extremes No cap The effect is the input: 10K at 100 times the cap. Details
The two extremes Hard cap Nothing past the cap: 100 at 100 times the cap. Details
Softcaps Root softcap Past the cap, a square root: 1K at 100 times the cap. Details
Softcaps Log softcap Past the cap, a logarithm: 561 at 100 times the cap. Details
Approaching a limit Asymptote Closing in on 200, never reaching it: 196 at 100 times the cap. Details
Pick a cap

Each picture shows the effect against the input, both from 1 to a million on log scales, with a flag at the cap of 100 where there is one. On scales like these a power is a straight line as steep as its exponent, so the dashed diagonal, no cap at all, runs corner to corner, and a softcap bends away from it at the flag.

The two extremes

No cap at all, and a wall. The softcaps below sit between the two.

10010K1M110010K1Mx

No cap

Also called linear, uncapped

The effect is the input, however big it gets: ten times the input, ten times the effect. Simple, and the reason idle games' numbers run away.

Effect
x
At 100× the cap
10K
×10 more input
Gives ×10 the effect, from there
Good for
Effects that should keep pace forever, like income itself
10010K1M110010K1Mmin(x, 100)

Hard cap

Also called maximum, max level

Past the cap, nothing more. It's the clearest rule there is, but every bit of input past it is wasted, and an upgrade that does nothing feels like a mistake.

Effect
min(x, 100)
At 100× the cap
100
×10 more input
Gives ×1 the effect, from there
Good for
Things that break past a point, like a chance over 100%

Softcaps

Past the cap the effect keeps growing, only slower: how far past the cap you are gets shrunk by a root or a logarithm.

10010K1M110010K1M100(x ÷ 100)½

Root softcap

Also called power softcap, softcap

Past the cap, the ratio to the cap is square-rooted: 100 times the cap gives 10 times the effect. It joins the straight line exactly at the cap, then climbs at half the slope on a log-log chart, forever.

Effect
x up to 100, then 100 × (x ÷ 100)^0.5
At 100× the cap
1K
×10 more input
Gives ×3.16 the effect, from there
Good for
Keeping a runaway effect growing, but slower
10010K1M110010K1M100(1 + ln(x ÷ 100))

Log softcap

Also called logarithmic softcap

Past the cap, every tenfold of input adds the same amount, about 2.3 times the cap. It meets the straight line at the cap with the same slope, so there's no kink. It starts out ahead of the root softcap, falls behind at about 12 times the cap, and in the long run grows slower than any root.

Effect
x up to 100, then 100 × (1 + ln(x ÷ 100))
At 100× the cap
561
×10 more input
Gives ×1.41 the effect, from there
Good for
Effects fed by numbers that grow exponentially

Approaching a limit

The effect bends from the very start, and closes in on a ceiling it never reaches.

10010K1Mlimit110010K1M200x ÷ (200 + x)

Asymptote

Also called hyperbolic, diminishing returns

The effect is 200x ÷ (200 + x): about x while x is small, and ever closer to 200 as it grows. Once the input is far past the limit, each doubling roughly halves the distance left.

Effect
200x ÷ (200 + x)
At 100× the cap
196
×10 more input
Gives ×1.02 the effect, from there
Good for
Percentages that must never reach 100%, like damage reduction

The maths

Powers are straight lines on log-log axes

Take the log of a power and the exponent comes down in front:

effect = c × xp  ⇒  log effect = log c + p × log x

Against log x, that's a straight line with slope p. The slope has a plain meaning too: 1% more input gives about p% more effect. No cap is p = 1; a square-root softcap is p = 0.5 past the cap, so it takes 100 times the input to get 10 times the effect.

Joining at the cap

A softcap is written so the two pieces meet. For a root softcap with cap c:

x ≤ c: effect = x  ·  x > c: effect = c × (x ÷ c)p

At x = c both give c, so there's no jump. The slope does change at once, from 1 to p: a kink, which players can feel as the moment an upgrade suddenly got worse. The log softcap, c × (1 + ln(x ÷ c)), joins with the same value and the same slope, so it bends without a kink, and from then on every tenfold of input adds the same c × ln 10.

Closing in on a limit

effect = L × x ÷ (L + x)  ·  L − effect = L2 ÷ (L + x)

While x is small next to L, the effect is about x. Once x is much bigger, the gap to the limit is about L² ÷ x, so doubling the input halves what's left. League of Legends' armor works this way: damage taken is × 100 ÷ (100 + armor), so each point of armor is worth the same extra effective health, yet the reduction never reaches 100%.

Turning it around

How much input does a target effect y need? Undo the softcap:

x = c × (y ÷ c)1 ÷ p

With p = 0.5, the input needed grows as the square of the effect wanted; past a log softcap it grows exponentially. That's the same slowdown as a steep cost curve, built from the other side.

Past the cap

Pick how far past the cap of 100 the input has grown, and see what each kind gives there, and what a further ×10 of input would do.

Input, against the cap of 100

100 input

At the cap, a further ×10 of input still gives ×10 uncapped, but ×3.16 through the root softcap, ×3.3 through the log one, and ×2.5 against the limit.

  • No cap effect 100 ; ×10 more input gives ×10
  • Hard cap effect 100 ; ×10 more input gives ×1
  • Root softcap effect 100 ; ×10 more input gives ×3.16
  • Log softcap effect 100 ; ×10 more input gives ×3.3
  • Asymptote effect 67 ; ×10 more input gives ×2.5

Bars on a log scale, from 1 to a million.

1K input

At 10 times the cap, a further ×10 of input still gives ×10 uncapped, but ×3.16 through the root softcap, ×1.7 through the log one, and ×1.18 against the limit.

  • No cap effect 1K ; ×10 more input gives ×10
  • Hard cap effect 100 ; ×10 more input gives ×1
  • Root softcap effect 316 ; ×10 more input gives ×3.16
  • Log softcap effect 330 ; ×10 more input gives ×1.7
  • Asymptote effect 167 ; ×10 more input gives ×1.18

Bars on a log scale, from 1 to a million.

10K input

At 100 times the cap, a further ×10 of input still gives ×10 uncapped, but ×3.16 through the root softcap, ×1.41 through the log one, and ×1.02 against the limit.

  • No cap effect 10K ; ×10 more input gives ×10
  • Hard cap effect 100 ; ×10 more input gives ×1
  • Root softcap effect 1K ; ×10 more input gives ×3.16
  • Log softcap effect 561 ; ×10 more input gives ×1.41
  • Asymptote effect 196 ; ×10 more input gives ×1.02

Bars on a log scale, from 1 to a million.

100K input

At 1,000 times the cap, a further ×10 of input still gives ×10 uncapped, but ×3.16 through the root softcap, ×1.29 through the log one, and ×1.0018 against the limit.

  • No cap effect 100K ; ×10 more input gives ×10
  • Hard cap effect 100 ; ×10 more input gives ×1
  • Root softcap effect 3.16K ; ×10 more input gives ×3.16
  • Log softcap effect 791 ; ×10 more input gives ×1.29
  • Asymptote effect 199.6 ; ×10 more input gives ×1.0018

Bars on a log scale, from 1 to a million.

1M input

At 10,000 times the cap, a further ×10 of input still gives ×10 uncapped, but ×3.16 through the root softcap, ×1.23 through the log one, and ×1.0002 against the limit.

  • No cap effect 1M ; ×10 more input gives ×10
  • Hard cap effect 100 ; ×10 more input gives ×1
  • Root softcap effect 10K ; ×10 more input gives ×3.16
  • Log softcap effect 1.02K ; ×10 more input gives ×1.23
  • Asymptote effect 199.96 ; ×10 more input gives ×1.0002

Bars on a log scale, from 1 to a million.

A softcap's job is the right-hand column. Players feel the size of the next step more than the size of the total, so a root that still turns ×10 into ×3.16 keeps upgrades exciting long after a log has made them a chore, and an asymptote turns them into rounding.

Side by side

The effect at 10, 100, and 10,000 times the cap of 100.

Kind Effect At 10×At 100×At 10,000×
No cap x 1K10K1M
Hard cap min(x, 100) 100100100
Root softcap x up to 100, then 100 × (x ÷ 100)^0.5 3161K10K
Log softcap x up to 100, then 100 × (1 + ln(x ÷ 100)) 3305611.02K
Asymptote 200x ÷ (200 + x) 167196199.96