Add Review
Subscribe
Nominate
Submit Media
RSS
Core: Damage Mechanics
DFalcon- 04/24/2010 02:19 AM
- 1228 views
Yesterday I totally reworked the damage system, completely replacing every stat that had anything to do with attacking.
A sharp observer may notice neither of these match currently posted screenshots, which were obsolete many days before yesterday.
This might sound like a difficult change, or conversely like I have very little done on anything in the game, but really neither is true. I'd known the exact damage equation was not too essential until I started producing significant quantities of units - basically, drawing up and testing actual battle maps. At that point it would have to meet certain goals that I did have already in mind (though perhaps not all this formally):
-Comparative advantage: For most targets there should be a definite benefit of using certain attackers over others; for many enemy attackers there should be a definite benefit of forcing them to attack certain player units over others.
-Effectiveness slope: An imprecise term, but what I want to avoid is having a situation where, say, two PCs could do lots of damage and everybody else would be totally useless. It should be possible to replace a highly-specialized character with ~1.5-2 less-specialized ones, a less-specialized one with a couple anti-specialized ones; and these grades should all exist for most situations. And no PC should be next to useless versus all but a few enemies.
-Effectiveness range: I want to be able to design enemies who are considerably stronger than single player units, as well as enemies who are considerably weaker (but still potentially dangerous in aggregate). And heck, maybe PCs of different strengths too.
-Perturbability: Ideally, many buffs and debuffs will function by transparently changing stats. Such small changes should almost always have some effect and usually not result in totally huge effects on their own.
-Simplicity: Damage needs to be an integer, simple to calculate or at least estimate, and the comparative advantage should be easy to make obvious. Generally, the fewer numbers there are and the smaller they are, the better. Also, ideally, a bunch of enemy units on a map sharing a couple patterns of basic stats will be neither stupidly easy nor stupidly difficult just from sharing those stats.
-Complexity: I did want something a little more involved than "I am ROCK! I crush SCISSORS in one hit, crack ROCK in two hits, and cower before PAPER!" At least for this game.
-Perfect information: Everything's visible.
-Determinism: This is definitely not an ordinary genre requirement, but other aspects of the game design (perhaps to be touched on later?) called for never doing any random rolls. I also did hope this would help simplicity, as people can be surprisingly bad at working with probability. One needs little more evidence than the actual odds of hitting something in Fire Emblem.
I'm quite happy with how the new setup meets these criteria in preliminary testing. Hopefully there aren't too many steps left before I can start seriously making battle maps.
Below are details on the actual equations.
------------------------------------------------------
The Old Setup:
If your Accuracy > defender's Evade, that's a "hit": do your Strength - defender's Toughness damage (minimum 1 damage).
Otherwise it's a "miss": do 1 damage.
Stats were intended to be generally single-digit; the spread wasn't exactly fixed, but something like 0-6 for Evd and Tgh, 1-7 for Acc, 3-9 for Str.
Comparative advantage was good, simplicity was pretty good, and of course this was deterministic. This actually worked pretty well for the test battle I've been running through much of development, with two types of enemies both around PC strength.
But effectiveness slope was a problem: given any vaguely normal distribution of stats, high-Evade units could tank against just about anybody. This is particularly vexing when trying to create a boss unit - either high-Evade characters can easily tank it, or it can hit everybody so there's no point to throwing a high-Evade unit against it.
Of course it would be possible to cap the ends of the distribution - but it'd be nice for accuracy and evade effects to usually have meaning, without making someone totally unreachable.
Magic was also tricky. Magic abilities can't be used that easily, so I didn't want them to just be evadeable; I was hesitant to use toughness or a simple magic defense stat, since magic damage can come at several different potency levels; but making a static damage value for magic heavily favored low-Evade units.
I did work on several variations of this, enough that I won't list them, and some had greater potential merit, at the cost of some simplicity. But I never quite came up with a version I was satisfied with.
The New Setup:
Every unit has a Dodge classification: Fast, Medium, or Slow.
Every direct-damage effect has separate F/M/S attack values. These are monotonic - attack vs. Medium is always at least as high as attack vs. Fast.
A direct-damage effect vs. a Fast unit does its Fast attack value in damage, and so on.
Player-unit attack averages are around F4/M6/S8.
Some abilities or status effects can move a target's evade up or down a class (even to, for example, "Fast+1", which gets damaged one less than the Fast attack value) or give effects like "Ignore 1 damage", but these aren't all that common.

This might sound like a difficult change, or conversely like I have very little done on anything in the game, but really neither is true. I'd known the exact damage equation was not too essential until I started producing significant quantities of units - basically, drawing up and testing actual battle maps. At that point it would have to meet certain goals that I did have already in mind (though perhaps not all this formally):
-Comparative advantage: For most targets there should be a definite benefit of using certain attackers over others; for many enemy attackers there should be a definite benefit of forcing them to attack certain player units over others.
-Effectiveness slope: An imprecise term, but what I want to avoid is having a situation where, say, two PCs could do lots of damage and everybody else would be totally useless. It should be possible to replace a highly-specialized character with ~1.5-2 less-specialized ones, a less-specialized one with a couple anti-specialized ones; and these grades should all exist for most situations. And no PC should be next to useless versus all but a few enemies.
-Effectiveness range: I want to be able to design enemies who are considerably stronger than single player units, as well as enemies who are considerably weaker (but still potentially dangerous in aggregate). And heck, maybe PCs of different strengths too.
-Perturbability: Ideally, many buffs and debuffs will function by transparently changing stats. Such small changes should almost always have some effect and usually not result in totally huge effects on their own.
-Simplicity: Damage needs to be an integer, simple to calculate or at least estimate, and the comparative advantage should be easy to make obvious. Generally, the fewer numbers there are and the smaller they are, the better. Also, ideally, a bunch of enemy units on a map sharing a couple patterns of basic stats will be neither stupidly easy nor stupidly difficult just from sharing those stats.
-Complexity: I did want something a little more involved than "I am ROCK! I crush SCISSORS in one hit, crack ROCK in two hits, and cower before PAPER!" At least for this game.
-Perfect information: Everything's visible.
-Determinism: This is definitely not an ordinary genre requirement, but other aspects of the game design (perhaps to be touched on later?) called for never doing any random rolls. I also did hope this would help simplicity, as people can be surprisingly bad at working with probability. One needs little more evidence than the actual odds of hitting something in Fire Emblem.
I'm quite happy with how the new setup meets these criteria in preliminary testing. Hopefully there aren't too many steps left before I can start seriously making battle maps.
Below are details on the actual equations.
------------------------------------------------------
The Old Setup:
If your Accuracy > defender's Evade, that's a "hit": do your Strength - defender's Toughness damage (minimum 1 damage).
Otherwise it's a "miss": do 1 damage.
Stats were intended to be generally single-digit; the spread wasn't exactly fixed, but something like 0-6 for Evd and Tgh, 1-7 for Acc, 3-9 for Str.
Comparative advantage was good, simplicity was pretty good, and of course this was deterministic. This actually worked pretty well for the test battle I've been running through much of development, with two types of enemies both around PC strength.
But effectiveness slope was a problem: given any vaguely normal distribution of stats, high-Evade units could tank against just about anybody. This is particularly vexing when trying to create a boss unit - either high-Evade characters can easily tank it, or it can hit everybody so there's no point to throwing a high-Evade unit against it.
Of course it would be possible to cap the ends of the distribution - but it'd be nice for accuracy and evade effects to usually have meaning, without making someone totally unreachable.
Magic was also tricky. Magic abilities can't be used that easily, so I didn't want them to just be evadeable; I was hesitant to use toughness or a simple magic defense stat, since magic damage can come at several different potency levels; but making a static damage value for magic heavily favored low-Evade units.
I did work on several variations of this, enough that I won't list them, and some had greater potential merit, at the cost of some simplicity. But I never quite came up with a version I was satisfied with.
The New Setup:
Every unit has a Dodge classification: Fast, Medium, or Slow.
Every direct-damage effect has separate F/M/S attack values. These are monotonic - attack vs. Medium is always at least as high as attack vs. Fast.
A direct-damage effect vs. a Fast unit does its Fast attack value in damage, and so on.
Player-unit attack averages are around F4/M6/S8.
Some abilities or status effects can move a target's evade up or down a class (even to, for example, "Fast+1", which gets damaged one less than the Fast attack value) or give effects like "Ignore 1 damage", but these aren't all that common.
Posts 

Pages:
1
I like this, it's nice and clean. Good work.
I suppose something like a sniper (specializes in hitting fast units) would be F8/M8/S8 or some such?
I suppose something like a sniper (specializes in hitting fast units) would be F8/M8/S8 or some such?
Yeah. There's a 2:3:4 ratio that roughly holds (in HP too; there are tanks at all dodge levels). Fast super-specialization might be F6/M6/S6, whereas Slow super-specialization might be F2/M3-4/S12. Medium super-specialization I guess F2/M9/S9. (The Fast and Medium specs both are decent/good at hitting the next level up, but I can accept that.)
Barry in the picture probably isn't a terrific reference point - he's the main character and so far I have erred on the side of him being extra strong.
Barry in the picture probably isn't a terrific reference point - he's the main character and so far I have erred on the side of him being extra strong.
Pages:
1












