Balancing stats mathematically?

Discussion in 'Useful Development Tools' started by Azurecyan, Jun 11, 2014.

Tags:
1. AzurecyanVeteran

Messages:
172
110
Location:
Sealand
First Language:
English
I'm not exactly sure if I posted this in the right section or if it should have been in game mechanics design...sorry if I do post this in the wrong section... ^^"

So I was thinking if there is a way for stats to increase in a certain way, or if there is a sort of mathematical system where you take the first level(level 1) stat, say your HP is at 35 and your last level(99) stat, HP=600. Then you subtract 600 from 35 to get a total of 565. And from the 565 you break it down into much smaller numbers from a range of 2-5, which those numbers in the range of 2-5 will add up to 565 throughout level 1-99 from HP stat starting from 35 and ending from 600??

It sounds kind of confusing but I'm just wondering if there is a system or formula where it breaks a large number down into a said range of single digit numbers(or double digit if you so choose) that will add up to the said number?

I'm sure I can do a parabola of some sort and have the starting number be 35 and end at 600 in some way. I've looked at other games such as Dragon Quest VIII and their stat progression and plotted them into a graph to see how the stats increase. There are some things that make the graph fluctuate in some areas where it slightly goes down and then back up, comparing it with other characters from the game. I've also looked at how the stats increase, I'm not sure if the stat points are random but the stat points look somewhat like this: 2, 3, 4, 4, 4, 2, 3, 2, 2, 4, 2, 3, 4(for example, if it makes any sense)...?

Last edited by a moderator: Jun 11, 2014
2. GhaleonVillager

Messages:
41
4
First Language:
English
I'm not sure if I understand you right cuz what I THINK you're saying is really quite simple...

the way I'm interpriting it, just take your "max" (600), then subtract it with your "starting amount" (35), so 565, then divide it by your level cap (99) and you get 5.70707...0707...so provided you add 5.707repeat each level, you'll end up at 600 at your cap. If you want it to increase over time per level too, there are simply too many formulas that do this, and you're best off just making up some arbitrary rule yourself, like half of 5.707 from levels 1-33, 5.707 from levels 34-66, and 1.5x 5.707 from 67+

Last edited by a moderator: Jun 11, 2014
3. AndarVeteran

Messages:
28,418
6,485
Location:
Germany
First Language:
German
Primarily Uses:
RMMV
actually, it's even more easier to do this in Ace...

Go to database, go to classes, doubleclick on the parameter curve picture of the curve you want to set.

Then click on Generate curve, put in the value for L1 and L99 and click on OK.

If you didn't change the slider on that window, the program will automatically generate and set the curve for a linear progression between those numbers, without you needing to calculate them yourself.

That said - mathematics are a good way to get a halfway balanced set of numbers - you will still have to playtest, but if you don't start with mathematically calculated number the needed time for playtests probably triples...

4. AzurecyanVeteran

Messages:
172
110
Location:
Sealand
First Language:
English
yeah, I've used the database before, but I want to customize it more first, in excel, which I'm using atm to see how I can make...for example, slow progression in the first 30 levels, and then it gets progressively faster in the next 20 levels, then slow again the rest of the way.

@Ghaleon, what you said is somewhat correct but instead of averaging the numbers out and distributing it evenly, after i get the difference in level of 565, i'd want to pick out random numbers from ranges 2-5 which will add up to 565 over the span of 99 levels but at the same time still providing a curve going up, similar to a scatter plot but still following a linear/curve-like pattern

5. amerkVeteran

Messages:
1,439
510
First Language:
English
So to recap (correct me if I'm wrong)

you want the stat gains to be random, but between the ranges from 2-5, for each level, but adding up to 565 in a span of 99 levels.

Random stat gains can be done with events or scripts, but to the exact formula as you're suggesting, which would require a formula for intelligent stat gains to know how much of a random number to give in order to not exceed 565 points by level 99, seems like it would be really tough to do.

Edit: So thinking about this more, you want to use the database to determine the end number, as well as high and low speeds, but you want those numbers to be randomized in between up until the end.

I'm thinking either you're going to have to have it static to ensure you're not over or under the end number, or you're going to have to have it randomized (meaning potentially over or under the end number), but not sure it's possible to do both (randomize the stats but ensure it still adds up to 565 at the end).

Last edited by a moderator: Jun 12, 2014
6. AzurecyanVeteran

Messages:
172
110
Location:
Sealand
First Language:
English
Yeah, i kind of figured it would be tough since randomizing but at the same time controlling a formula for it can be challenging in many ways.

That's what I pretty much want it to do and to make it static, since randomizing will make for some odd results in early or late levels depending on where the stat distribution will go.

Although what I can do is make the last level stat an estimate and from the first level distribute the points to see if I end up near the ideal last level stat and do trial and errors from that....although it would be tedious having to tweek and restart each time I don't get near the estimate.

Alright I THINK I might know what I am going to do now. I will have the last stat as an estimate and use lower range numbers for slow stat gain and higher numbers for a faster progression and add in some out of range numbers for balance here and there and hopefully get to the final estimate number.

7. GhaleonVillager

Messages:
41
4
First Language:
English
you COULD make it something like (pseudo code here, not ruby, also I'm assuming your stats go up between 3-5 not 2-5, I forgot your range and am too lazy to fix it now lol)

character class has 3 ints:

lowlevel = 33

midlevel = 33

highlevel = 33

levelupbonus = 1 to (levelcap +1 - character's current level) (ignore the +1 if you actually have a level 0 =P)

lets pretend level 1.

soo level up bonus is a random number between 1 and 99.

lets say you roll a 20.

if lowLevel >= levelupbonus

increase stats by 3

elsif lowLevel+MidLevel >= levelupbonus

increase stats by 4

else

increase stats by 5

So then you increase your character's stats by 3, and you go character.lowlevel = lowlevel - 1. so then it only has 32 now.

now you only have a 32% chance of getting a low stat gain, and your other rolls are unchanged...eventually you WILL reach the exact stat cap you wish, and yet your levelup bonus will be randomized.