3
\$\begingroup\$

I want to create some of the fundamental guideline formulas for a game I am working on. I am following on from sirlin's advice in that I am starting with some assumptions and working back from there.

So let's say that I want to have the player do an average of 1000hp damage at level 100 and 10 at level one. Is there a tool that I could use to draw this (a low exponential curve) and it would spit out a formula based on the curve?

There are some similar questions on here but none that I can find with any advice on the specifics of making the formulas for these progress curves.

thanks

\$\endgroup\$
  • 1
    \$\begingroup\$ RPG Maker has a lot of that kind of stuff built in rpgmakerweb.com/product/rpg-maker-xp \$\endgroup\$ – Tetrad Mar 5 '12 at 21:52
  • 1
    \$\begingroup\$ Excel (or Google Docs) and WolframAlpha \$\endgroup\$ – MichaelHouse Mar 5 '12 at 21:59
  • 1
    \$\begingroup\$ None, either you grow mathematically literate or there ain't much hope. Though do note that simply being able to do maths is not enough, you have to do a combination of gameplay and maths, figuring what equations to solve is much harder than actually solving them. \$\endgroup\$ – aaaaaaaaaaaa Mar 6 '12 at 19:48
4
\$\begingroup\$

Since you want an exponential curve, maybe you could teach yourself logarithms so that you are comfortable enough to solve your problem by yourself?

There are basically three things to know:

  • the reverse operation of exp is log: log(exp(a)) = a
  • exp(a+b) = exp(a) * exp(b)
  • log(a*b) = log(a) + log(b)

Let’s see your specific problem. You want a rule such that:

damage = A * exp(B * level)

Now we just need to find A and B. Write down your two requirements (damage 1000 at level 100, damage 10 at level 1):

1000 = A * exp(B * 100)
10 = A * exp(B * 1)

If these are equal, then certainly their logarithms are equal:

log(1000) = log(A * exp(B * 100))
log(10) = log(A * exp(B * 1))

Use rule 3 to break down log(a*b):

log(1000) = log(A) + log(exp(B * 100))
log(10) = log(A) + log(exp(B * 1))

Use rule 1 to get rid of log(exp(…)):

log(1000) = log(A) + B * 100
log(10) = log(A) + B

Subtract through:

log(1000) - log(10) = B * (100 - 1)

This gives the value for B:

B = (log(1000) - log(10)) / (100 - 1)

And from the original equation 10 = A * exp(B * 1) we get:

A = 10 / exp(B * 1)

The same method can be used to get a generic formula. You can replace 1, 10, 100 and 1000 with other values of your choice.

\$\endgroup\$
5
\$\begingroup\$

This may be controversial but get some graph paper. Draw in the axes and number range you want to cover (100 to 1000hp). Lay down a nice looking curve and read the numbers off to create your data table.

You need zero math; you can create any kind of curve imaginable and even curves with "hell levels" or "easy street" areas that would take a mathematician and a lot of code to mimic.

Plus you can easily take these numbers and hand tweak ranges that don't feel right during game testing without having to do even more corrective math.

\$\endgroup\$
  • \$\begingroup\$ Though, notice, if you start from a graph you'd better make all the adjustments in the graph first, even at a later stage. \$\endgroup\$ – o0'. Mar 6 '12 at 11:02
  • 1
    \$\begingroup\$ @Lohoris Very true. And vice versa, if you change then numbers so they feel better to play then go back and remake the graph. \$\endgroup\$ – Patrick Hughes Mar 6 '12 at 23:55
4
\$\begingroup\$

Use the Wolfram Alpha Regression to fit array of data into a specific type of function. Given your example, it would be something like cubic fit {1,10}, {100,1000}. Try out different models (linear, logarithmic etc.) to get different types of resulting curves

Examples of regression analysis

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.