Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This is a Pokémon simulator where you build a team of 6 pokémon and battle with someone. Unfortunately, some Pokémon are stronger than others and only a few of the hundredth species are practical. I'm trying to create a metagame where all of them are competitive. For this, I am tagging a Pokémon with a parameter (level) that changes it's strength and scales up/down depending on the it's performance. That is, if the system detects Mewtwo is overperforming, it should decrease it's level tag until Mewtwo is balanced.

The question is: how can I identify if a Pokémon is causing an unbalance? The data I have is the historic of the battles (player 1, player 2, pokémon list, winner). The most basic solution I can think of is victory/loss counting.

share|improve this question
up vote 3 down vote accepted

I've played Pokemon competitively in the past, and if your program is very much so inspired by Pokemon, an automatic system will be difficult.

With Pokemon, there are a few things to consider. Damage, Status Effects, Resistance, and just honest player skill. Testing for damage will work fine for Pokemon like Gallade, but not at all for Pokemon like Butterfree. Butterfree doesn't do alot of damage, but the status effects still make it a top choice.

I think the best way to implement a system would be to first rank your players. As Byte56 suggested, an Elo system will work. Then from your top 10% players (10% is just an arbitrary number), look at the frequency of Pokemon used. If you see that Mewtwo is being used in 90% of your top 10% player, you can guess there is a balance issue. From there I would do a break down of which moves tend to be most popular. In competitive Video Game Pokemon, there are tendencies for the top players to use specific builds. If you see that 90% your 10% top players use Mewtwo, and 80% of them use Psychic, then you can assume that Psychic is overpowered. So an automatic damage reduction might help balance.

But then there is the caveat of Psychic can also cause confusion in 10% of it's uses, so maybe a lowering of Psychic's confusion chance might be in order. This will just depend entirely on how complicated you want to make your game, because honestly, Pokemon is a seriously deep game.

With your level slider, I believe your system should work with rating the players, but always remember the case of the Lvl 1 Rattata that defeated the Lvl 100 Dragonite.

;tldr - Rank your players. Look at the top performers for trends. Adjust values accordingly.

share|improve this answer

You could implement something similar to the Elo rating system, which is used to calculate the relative skill levels of different players. Applying this to the pokémon instead of the players, would allow you to see how they compare to the pokémon to each other and adjust accordingly.

I don't have any idea how pokémon works, but you mention that the battles have a list so I guess there are multiple pokémon per battle? Without more information on how much time each of them played or some metric that tells you their involvement in the battle I guess you would just have to divide the wins/losses evenly among the pokémon in the list when calculating their score.

Do keep in mind that balancing is notoriously difficult. And you'll still need to find some way to factor the player's skills out of the equation.

share|improve this answer
Factoring player's skills out will be very difficult. But at least there is already a rating system that ranks players and it works formidably, so I have an index to begin with. A player can use up to 6 Pokémon in a battle; forgot to mention. – Dokkat Jun 28 '12 at 0:04

This is a fairly old post, but I've been wanting to do something similar. My idea was to scale the base stats of each pokemon so they all equal each other. That would make a weak pokemon like Magikarp with only 200 stat points be able to compete with legendaries that have 600+ stat points.

For example, Magikarp has a Base Stat Total (BST) of 200 and the individual stats for HP/ATK/DEF/SATK/SDEF/SPD are 20/10/55/15/20/80. Mewtwo has a BST of 680 and the individual stats are 106/110/90/154/90/130.

If they were both scaled to have 600 BST, for example, Magikarp's stats would be 60/30/165/45/60/240 and Mewtwo's would be 94/97/79/136/79/115. They would both still have unique stats and moves to use, but they'd have the potential to do as much damage.

To scale a stat value, you use simple cross-multiplication: (original stat value) * (scaled BST target) / (original BST) = (scaled stat value). So for Mewtwo's HP of 106 to 94, you do 106 * 600 / 680 = 94.

Anyway, you've probably already made your simulator or abandoned the project, but I thought I'd add my 2 cents. I've been thinking about this awhile, and I haven't been able to find any simulators out there that try to make all the pokemon equal.

share|improve this answer
That was already been done in some older simulators. It was called level balance. I was an advanced player so I can say that, while the idea actually made many pokemon usable, it didn't work very well in some aspects. For starters, it didn't really make much sense that a Mewtwo got beaten up by a Caterpie - the game felt weird. But where the idea really break was when Pokemon that was supposed to have lower stats because of much superior movepool/traits (eg: Medicham, Shedinja, Smeargle and many more) dominated the game. It's a good idea, though, that can be improved upon. – Dokkat Jun 26 '13 at 15:24

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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