I'm building a game called DVP(Digimon Virtual Pet), and in this game other than taking care of your digimon, You can also battle and breed them. I'm working on the battle system (making it first cause the actual pet system will be easy compared to the netplay, or 39DLL)but here is the problem I don't want it to be "too" simple or "too" complicated, but I do want to go by a certain formula. There are str, def, spd, and int.

  • Strength: How hard the attacking digimon is hitting
  • Defense: How much damage your digimon can defend when being attacked
  • Speed: The chance of you missing the enemy
  • Intelligence (battle knowledge): The chance of you hitting a critical hit or defending a critical hit.

I can make a super simple turn based example, but I don't know how exactly to make the formulas for what I've explained above, any help?


1 Answer 1


You can either copy an existing battle system, or create a new one.

  1. Copy. This is obvious, use Google to find information about some RPG mechanics (e.g. AD&D or Fallout) or play your favorite game and this will be inspiring enough. Problem with this solution is the fact that better systems are more popular and players are more bored with them.
  2. Create. This is not an easy task. I think no one will give you his virgin system, if it's really good. However, we're not here to keep wisdom to ourselves, so I'll try to give you some guidelines:

    • the system should be easy to learn. Not necessarily simple, but without steep steps in it's learning curve:

enter image description here

  • if you want the system to serve for long amounts of time without boredom, it must be hard to master - that is have a high learning curve on above image (and because it shouldn't be too steep, it must be wide too)
  • if you want the system to be casual-friendly, either pair weak players together (using ELO as in chess, or levels like in RPG games) or add a random factor (like in battleships game or systems with dices)
  • if you want to avoid a situation, where there's a specific, best build, then again make a random factor important, but in a wider scale, e.g. in many RPG games you make a build together with specific items, and item drop is random.
  • to make the system more rewarding for newbies fighting pros, you may add stone-paper-scissors mechanics to some extent - e.g. abilities that counter well other abilities, making it possible for a newbie to get a random opponent he counters well, even if he's not quite understanding game mechanics and is weak in tactics.
  • as for the fight itself, a player shouldn't be able to predict all possible outcomes of his actions (that would happen in chess with 5 turn and 10 minute limit), but he should have an intuitive feel of strengths of his moves. You should balance these two as both extremes: knowing how the fight will end from start (like if in poker other players could see your cards, and there would be no change of the cards) and playing completely random (imagine a single paper-rock-scissors fight with a guy you don't know, through Internet where you can't cheat) aren't fun.

    Now, while it's easy to create a complex system that listens to these rules (a lot of abilities well documented by tooltips, etc), it is hard to create a simple system that does:

  • it's easy to predict result of actions in a simple system
  • You learn mechanics of a simple system pretty fast, and then there's usually not much to learn about strategies.
  • Because there are not much factors in a simple system, it's easy to calculate a best possible build

Creating a new system that is both simple and challenging is not an easy task - you need to be a genius to create something that is 'ingenious in its simplicity'.

  • \$\begingroup\$ O_O i appreciate the book, but I guess i should have been more specific... lcd.wtw-x.net/VpetEvo1 im recreating this... \$\endgroup\$ Oct 9, 2012 at 9:17
  • 1
    \$\begingroup\$ @MarkChapman So... what problems recreating it you have so far? That's some basic math, like: monster1.hp = 50; monster2.hp=50; if ( math.random() > monster2.hit_chance - monster1.defend_chance ) monster1.hp -= monster2.strength; \$\endgroup\$ Oct 9, 2012 at 13:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .