Game design/balancing - coming up with a formula?

Started by hosch, January 20, 2021, 15:10:00

Previous topic - Next topic

hosch

Hi guys,

I'm trying to balance my fishing game by using a formula that adapts to the player upgrades etc. The fomula I am currently using only works in the first area (there are 4), after the first one the game becomes ridiculously easy. How do you approach this (in general)? Do you just hardcode your values?

I am having a fishing rod level (1-10), a base movement (2) and each fish gets assigned a level (1-3). I am currently doing this
movementUp = baseMovement - (myFish.level - player_rodLevel)

So if I have a level 2 fishing rod trying to catch a level 1 fish I get
movementUp = 2 - (1 - 2)
movementUp = 3


Each time the player is successful the fish moves by 3 pixels and is caught in no time (higher level fishing rods increase the problem obviously). I tried to combat this with assigning the fish in the later stages a larger depth (the player has to overcome a larger distance to catch it), but it only helps a bit. Does any of you have a smarter formula suggestion? It is my first game I am planning to release and I never had to balance anything for other players  ???

Matty

Yes.

Keep the formula.

But only do the resulting action every n seconds.

So use the milliseconds command and every n seconds do your check to move the fish up.

hosch

Quote from: Matty on January 20, 2021, 16:03:42
Yes.

Keep the formula.

But only do the resulting action every n seconds.

So use the milliseconds command and every n seconds do your check to move the fish up.

Oof, sometimes the simplest solutions are the easiest. I've set up something with multipliers and penalties in the meantime, but yours might work quite as well.
select myFish.level
case 1
penalty = 0.4
endcase
case 2
penalty = 0.6
endcase
case 3
penalty = 0.8
endcase
endselect

movementUp = (baseMovement + (player_rodLevel * multiplier)) - penalty


Derron

#3
add a default to your select-block ... and maybe inform you as developer ...
throw "unhandled fish level: " + myFish.level

Else you run into trouble once you increase fish levels without adjusting this piece of code.

If penalty is to increase by 0.2 each level:
penalty = 0.2 + myFish.level*0.2


In my game I use a "logistic function" for some increases - it starts at 0, raises pretty fast to a kind of threshold ... and then slloooowlyyyy crawls to 1.0 ... without reaching it.
So similar like the anti tangens you might use elsewise. Yet the logistic function has some parameters allowing the steep-ness of the curve.



bye
Ron

hosch

Quote from: Derron on January 21, 2021, 07:41:47
add a default to your select-block ... and maybe inform you as developer ...
throw "unhandled fish level: " + myFish.level

Else you run into trouble once you increase fish levels without adjusting this piece of code.

If penalty is to increase by 0.2 each level:
penalty = 0.2 + myFish.level*0.2


In my game I use a "logistic function" for some increases - it starts at 0, raises pretty fast to a kind of threshold ... and then slloooowlyyyy crawls to 1.0 ... without reaching it.
So similar like the anti tangens you might use elsewise. Yet the logistic function has some parameters allowing the steep-ness of the curve.



bye
Ron

Thank you, I really need to start working with errors. It's a valuable tool I am not putting to any use. I will incorporate it and the default case as well.