Balancing a game like Forumwarz is hard.
When Episode 1 was released, I did all the balancing by hand. I would literally start the game over with a new member of each class, and progress them all simultaneously, updating the difficulty of the forums and attacks as I went along.
As you can probably imagine, this is a horrible way to do things. Even if I played through the game 10 times with each class (which by the way is exhausting), that would still only be about 30 trial runs. As a result, the Emo Kid was horribly overpowered compared to the other two classes at launch.
For Episode 2, I created a bot that played the game overnight. It worked great while the episode was being developed behind closed doors, but it’s no where near as effective as collecting data off the live site. This is what I’m currently doing to balance the differences between the 5 major classes.
I’m lucky that Forumwarz gets a decent amount of traffic these days, so I can collect a lot of data very quickly. In fact, people attack forums so often that were I to log the results of every attack it would slow down the server (and eat up a ton of disk space.) A solution to this might be to queue up the logs in a buffer and flush them when it reached a current threshold, but I opted for something much simpler: I only save logs randomly. I have a simple helper function called maybe
( It’s a one liner, click here to view it and an example). maybe will only execute the block of code I pass it if a randomly generated number is above a certain threshold.
In other words, you currently have about a 1/10 chance of the results of your attacks being logged. This keeps the server running smoothly and honestly generates more than enough data in a short time frame.
Once I have the data, I run some SQL to show me it in a useful format:
(note this table just started collecting data and that explains the large discrepancies – the average level 5 emo is doing much more damage)
Once you have a good dataset, it’s really easy to see whose attacks are doing more damage than others. At this point, what I do is change the attributes of one attack, commit it, and gather data again to see if it improved things. This goes on for a long period of time until I am more or less happy with the distribution.
Over the next little while I am going to be making changes to balance out the various classes. You will probably notice that some of your abilities are slightly improved or nerfed. Feel free to point out anything that is way out of whack, but the best thing you can do to help is to just play the game as you normally would so I can collect your information :)