This research was completed by Amazing Ampharos and I (Colin) over the last few days.
1.How Damage is Stored
2. A Note on Methods
3.The Damage Formula
4. A Note on Training Mode
5.The Knockback Formula
6. Further Research
Abstract
In this post, we present an accurate damage formula and an accurate knockback formula. In particular, we develop new results in the areas of how damage is stored, stale move decay, Lucario's aura power, pokemon fatigue, charging smashes, and more. We develop exact models for many of these things that predict the precise damage, including decimal places. We also present a correct formula for knockback.
1. How Damage is Stored
At least three decimal places of precision are required to explain the exact results we obtained using our damage formula. Whether damage is actually a decimal number is difficult to determine, but whatever it is, it is precise enough to store the equivalent of three decimal places. Contrary to some previous reports, the maximum damage is in fact 999%. Damage over 999% is discarded.The game truncates damage for the purposes of display. For example, 125.651% is displayed as 125%.
2. A Note on Methods
To determine the actual damage a move was dealing, we used it repeatedly and recorded the sequence of numbers after each use. Using a program I wrote, we were able to determine the actual damage the move was dealing, to full precision. At first, we had to work within training mode to avoid stale moves, but once we cracked stale moves precisely, we were able to account for these in the sequence and determine the exact damage of moves directly from sequences of numbers in versus mode.
The source for this program is provided here in case other people want to do further research involving decimal damage:
http://colin.shoddybattle.com:81/BrawlDamage.txt
3. The Damage Formula
This formula gives you the exact damage that a move will do in any mode of the game. This formula works for both training mode and versus mode.
damage = base damage × stale multiplier × charge multiplier × aura multiplier × fatigue multiplier
We explain the value of each of these multipliers in the following sections.
3.1 Base Damage
Every move has some integer damage associated with it. This is its base damage. However, most of the time, the actual damage dealt by a move is not an integer, but this is because of multiplicative factors in the damage formula.
3.2 Stale Move Multiplier
The formula for the stale move multiplier is
This is explained below, including the definition of s.
In training mode, stale moves are not in play, so the value of this multiplier is exactly1. If the move is not affected by stale move decay, then the value of this multiplier is 1 even in versus mode. The following moves are not affected by stale move decay: Luigi's down taunt; DK's cargo throws; tether attacks; Zero Suit Samus's neutral air.
In versus mode, for moves affected by stale move decay, this factor is never 1. If a move is not in the stale move queue before being used, the value of this multiplier is exactly 1.05.
In versus mode, for moves affected by stale move decay, a move is placed in the stale move queue after it is used. The stale move queue contains nine entries, and each entry has a numerical weighting as depicted in the following diagram.
The left of the diagram represents the most recent move to be added to the queue, and the far right represents the oldest move to the added to the queue. Then we have
stale multiplier = 1 – s
where s is the sum of the values of the positions in the queue occupied by the move being used. For example, if the move being used occupies the .1 position, the .06 position, and the .03 position, then the stale multiplier is 1 - (0.1 + 0.06 + 0.03) = 0.81.
3.3 Charge Multiplier
This is the formula for the charge multiplier
For partially charged smash attacks, the value will be somewhere between 1 and 1.4, but we were unable to determine the exact distribution experimentally; it is too difficult to test. However, we speculate that it follows the same distribution as the aura damage multiplier. We speculate that if you charge the smash 1/n of the way, the multiplier is the same as the aura damage multiplier for (170-75)/n+75 %.
3.4 Aura Multiplier
This is the formula for the aura multiplier:
where
In coin mode, each coin counts as a stock for the purpose of the stock multiplier.
The damage multiplier is in the interval [0.7, 1.4]. It is 0.7 for all damages <= 20% and 1.4 for all damages >= 170%. It is exactly 1 only when the damage is 75%. A very good approximation for the damage multiplier can be found by reading the value from this chart:
For example, the damage multiplier for 95% is 1.09.
This chart was created by using quintic interpolation between some exact values that we worked out.
3.5 Fatigue Multiplier
Not everything is known about this multiplier. However, it is 1 if the character is not a pokemon trainer pokemon. Otherwise, it is in the interval [0.7, 1] where 1 is fully unfatigued and 0.7 is fully fatigued. There is in fact a spectrum of fatigue levels and the multiplier can take on various values in between 0.7 and 1. The multiplier cannot take on every value in this interval, however. When the pokemon shows no signs of fatigue, the multiplier is 1.
4. A Note on Training Mode
Our damage formula explains one aspect of training mode that was previously a mystery. In training mode, the stale move multiplier is 1, since stale move decay is not in play. As a result, most moves do their integer base damage always. In versus mode, however, the stale move multiplier is never 1 for moves that respect stale move decay. As a result, moves in versus mode do not usually do integer damage. This is the cause of the inconsistencies noticed between training and versus mode.
5. Knockback
[NOTE: This knockback section has been superseded by a new article. Click here to read it.]
The starting place for our research on Knockback was MrSilver's “Character weight list, fall speed list and random things” thread. MrSilver's work is a good starting place, but is incorrect in several ways.
Throughout this section, the words “launch speed” and “knockback” are used interchangeably because the quantity that corresponds to knockback on the results screen is the “max launch(er) speed”.
5.1 Constants Associated with Characters
Firstly, for the purpose of calculation of knockback, every character has two associated constants, namely weight1 (w1) and weight2 (w2). MrSilver determined both of these constants for every character, but mysteriously referred to weight2 as “fall speed”. In fact, weight2 has nothing to do with fall speed. Here is the list of weight1 and weight2 for each character. (These values are copied from MrSilver's document and included for ease of reference with the following formula.) Weight1 is the first value and weight2 is the second value
Bowser: 1.111, 0.91
Donkey Kong: 1.091, 0.20
Snake: 1.076, 0.16
King Dedede: 1.071, 0.29
Charizard: 1.061, 0.33
Ganondorf 1.056, 0.91
Samus: 1.051, -0.54
Yoshi: 1.045, -0.05
Wario: 1.045, 0.30
R.O.B.: 1.040, -0.32
Ike: 1.035, 0.28
Captain Falcon: 1.030, 0.92
Link: 1.030, 0.46
Wolf: 1.020, 1.84
Lucario: 1.010, -0.40
Ivysaur: 1.010, -0.16
Mario: 1, 0.00
Luigi: 0.995, -0.32
Sonic: 0.985, 0.33
Ness: 0.980, -0.12
Pit: 0.980, 0.00
Lucas: 0.980, 0.49
Diddy Kong: 0.975, 0.55
Toon Link: 0.970, -0.16
Ice Climbers: 0.970, 0.07
Peach: 0.960, -0.37
Marth: 0.944, -0.25
Sheik: 0.935, 2.21
Zelda: 0.935, -0.26
Falco: 0.919, 1.23
Olimar: 0.919, -0.47
Zero Suit Samus: 0.914, 0.44
Fox: 0.910, 3.41
Pikachu: 0.904, 0.40
Meta Knight: 0.904, 0.68
Kirby: 0.899, -0.44
Squirtle: 0.884, 1.05
Mr. Game & Watch: 0.884, 0.01
Jigglypuff: 0.849, -0.78
5.2 Constants Associated with Moves
Every move has a base knockback constant (b) and most moves have a knockback growth constant (g). For moves with fixed knockback, the base knockback constant is defined as the knockback taken by Mario. For moves with variable knockback, the knockback growth constant is defined as
g = (f - m)/e
where m is the knockback taken by Mario at 0% before the hit, e is any damage you like (say, 100), and f is the knockback taken by Mario at e% before the hit.
Then the base knockback constant is defined as
b = m – dg
where m is the knockback taken by Mario at 0% before the hit, d is the damage the move deals, and g is the knockback growth constant.
Moves with fixed knockback have have two weight variability constants (s1, s2), which describe how much the knockback of the move varies with weight1.
All sufficiently strong moves have a weight2 scale constant (c) which describes how important weight2 is to the move. c can take on a variety of values. For some moves, such as Ness's up throw, c is over 160.
5.3 Knockback Equation
We determined that the knockback equation has two cases depending on the value of a constant k.
To calculate the knockback, first work out k.
where b is the base knockback constant, d is the damage the move would deal, x is the damage of the target before the hit, g is the knockback growth constant, w1 is the weight1 of the target, and s1, s2 are the weight variability constants.
Then we have the equation for knockback:
where w2 is the weight2 of the target, and c is the weight2 scale constant.
5.4 Additional Multipliers for Knockback
We found a few things that cause simple multiplications of the final knockback value. A move being “super effective” is a multiplier of 1.1, and a move being “not very effective” is a multiplier of 0.9. Obviously, this only affects the Pokemon Trainer. In fast mode special brawl, all knockback is multiplied by 1.5, and in slow mode special brawl, all knockback is multiplied by 0.5. Heavy mode special brawl does not affect knockback. As was previously known, attacking a target who is charging a smash other than Ness's up and down smashes is a multiplier of 1.2.
6. Further Research
It is not known how stale move decay affects knockback precisely. Another area for further research is how charging smash attacks affects knockback.
Colin and Amazing Ampharos
1.How Damage is Stored
2. A Note on Methods
3.The Damage Formula
4. A Note on Training Mode
5.The Knockback Formula
6. Further Research
Abstract
In this post, we present an accurate damage formula and an accurate knockback formula. In particular, we develop new results in the areas of how damage is stored, stale move decay, Lucario's aura power, pokemon fatigue, charging smashes, and more. We develop exact models for many of these things that predict the precise damage, including decimal places. We also present a correct formula for knockback.
1. How Damage is Stored
At least three decimal places of precision are required to explain the exact results we obtained using our damage formula. Whether damage is actually a decimal number is difficult to determine, but whatever it is, it is precise enough to store the equivalent of three decimal places. Contrary to some previous reports, the maximum damage is in fact 999%. Damage over 999% is discarded.The game truncates damage for the purposes of display. For example, 125.651% is displayed as 125%.
2. A Note on Methods
To determine the actual damage a move was dealing, we used it repeatedly and recorded the sequence of numbers after each use. Using a program I wrote, we were able to determine the actual damage the move was dealing, to full precision. At first, we had to work within training mode to avoid stale moves, but once we cracked stale moves precisely, we were able to account for these in the sequence and determine the exact damage of moves directly from sequences of numbers in versus mode.
The source for this program is provided here in case other people want to do further research involving decimal damage:
http://colin.shoddybattle.com:81/BrawlDamage.txt
3. The Damage Formula
This formula gives you the exact damage that a move will do in any mode of the game. This formula works for both training mode and versus mode.
damage = base damage × stale multiplier × charge multiplier × aura multiplier × fatigue multiplier
We explain the value of each of these multipliers in the following sections.
3.1 Base Damage
Every move has some integer damage associated with it. This is its base damage. However, most of the time, the actual damage dealt by a move is not an integer, but this is because of multiplicative factors in the damage formula.
3.2 Stale Move Multiplier
The formula for the stale move multiplier is
This is explained below, including the definition of s.
In training mode, stale moves are not in play, so the value of this multiplier is exactly1. If the move is not affected by stale move decay, then the value of this multiplier is 1 even in versus mode. The following moves are not affected by stale move decay: Luigi's down taunt; DK's cargo throws; tether attacks; Zero Suit Samus's neutral air.
In versus mode, for moves affected by stale move decay, this factor is never 1. If a move is not in the stale move queue before being used, the value of this multiplier is exactly 1.05.
In versus mode, for moves affected by stale move decay, a move is placed in the stale move queue after it is used. The stale move queue contains nine entries, and each entry has a numerical weighting as depicted in the following diagram.
The left of the diagram represents the most recent move to be added to the queue, and the far right represents the oldest move to the added to the queue. Then we have
stale multiplier = 1 – s
where s is the sum of the values of the positions in the queue occupied by the move being used. For example, if the move being used occupies the .1 position, the .06 position, and the .03 position, then the stale multiplier is 1 - (0.1 + 0.06 + 0.03) = 0.81.
3.3 Charge Multiplier
This is the formula for the charge multiplier
For partially charged smash attacks, the value will be somewhere between 1 and 1.4, but we were unable to determine the exact distribution experimentally; it is too difficult to test. However, we speculate that it follows the same distribution as the aura damage multiplier. We speculate that if you charge the smash 1/n of the way, the multiplier is the same as the aura damage multiplier for (170-75)/n+75 %.
3.4 Aura Multiplier
This is the formula for the aura multiplier:
where
In coin mode, each coin counts as a stock for the purpose of the stock multiplier.
The damage multiplier is in the interval [0.7, 1.4]. It is 0.7 for all damages <= 20% and 1.4 for all damages >= 170%. It is exactly 1 only when the damage is 75%. A very good approximation for the damage multiplier can be found by reading the value from this chart:
For example, the damage multiplier for 95% is 1.09.
This chart was created by using quintic interpolation between some exact values that we worked out.
3.5 Fatigue Multiplier
Not everything is known about this multiplier. However, it is 1 if the character is not a pokemon trainer pokemon. Otherwise, it is in the interval [0.7, 1] where 1 is fully unfatigued and 0.7 is fully fatigued. There is in fact a spectrum of fatigue levels and the multiplier can take on various values in between 0.7 and 1. The multiplier cannot take on every value in this interval, however. When the pokemon shows no signs of fatigue, the multiplier is 1.
4. A Note on Training Mode
Our damage formula explains one aspect of training mode that was previously a mystery. In training mode, the stale move multiplier is 1, since stale move decay is not in play. As a result, most moves do their integer base damage always. In versus mode, however, the stale move multiplier is never 1 for moves that respect stale move decay. As a result, moves in versus mode do not usually do integer damage. This is the cause of the inconsistencies noticed between training and versus mode.
5. Knockback
[NOTE: This knockback section has been superseded by a new article. Click here to read it.]
The starting place for our research on Knockback was MrSilver's “Character weight list, fall speed list and random things” thread. MrSilver's work is a good starting place, but is incorrect in several ways.
Throughout this section, the words “launch speed” and “knockback” are used interchangeably because the quantity that corresponds to knockback on the results screen is the “max launch(er) speed”.
5.1 Constants Associated with Characters
Firstly, for the purpose of calculation of knockback, every character has two associated constants, namely weight1 (w1) and weight2 (w2). MrSilver determined both of these constants for every character, but mysteriously referred to weight2 as “fall speed”. In fact, weight2 has nothing to do with fall speed. Here is the list of weight1 and weight2 for each character. (These values are copied from MrSilver's document and included for ease of reference with the following formula.) Weight1 is the first value and weight2 is the second value
Bowser: 1.111, 0.91
Donkey Kong: 1.091, 0.20
Snake: 1.076, 0.16
King Dedede: 1.071, 0.29
Charizard: 1.061, 0.33
Ganondorf 1.056, 0.91
Samus: 1.051, -0.54
Yoshi: 1.045, -0.05
Wario: 1.045, 0.30
R.O.B.: 1.040, -0.32
Ike: 1.035, 0.28
Captain Falcon: 1.030, 0.92
Link: 1.030, 0.46
Wolf: 1.020, 1.84
Lucario: 1.010, -0.40
Ivysaur: 1.010, -0.16
Mario: 1, 0.00
Luigi: 0.995, -0.32
Sonic: 0.985, 0.33
Ness: 0.980, -0.12
Pit: 0.980, 0.00
Lucas: 0.980, 0.49
Diddy Kong: 0.975, 0.55
Toon Link: 0.970, -0.16
Ice Climbers: 0.970, 0.07
Peach: 0.960, -0.37
Marth: 0.944, -0.25
Sheik: 0.935, 2.21
Zelda: 0.935, -0.26
Falco: 0.919, 1.23
Olimar: 0.919, -0.47
Zero Suit Samus: 0.914, 0.44
Fox: 0.910, 3.41
Pikachu: 0.904, 0.40
Meta Knight: 0.904, 0.68
Kirby: 0.899, -0.44
Squirtle: 0.884, 1.05
Mr. Game & Watch: 0.884, 0.01
Jigglypuff: 0.849, -0.78
5.2 Constants Associated with Moves
Every move has a base knockback constant (b) and most moves have a knockback growth constant (g). For moves with fixed knockback, the base knockback constant is defined as the knockback taken by Mario. For moves with variable knockback, the knockback growth constant is defined as
g = (f - m)/e
where m is the knockback taken by Mario at 0% before the hit, e is any damage you like (say, 100), and f is the knockback taken by Mario at e% before the hit.
Then the base knockback constant is defined as
b = m – dg
where m is the knockback taken by Mario at 0% before the hit, d is the damage the move deals, and g is the knockback growth constant.
Moves with fixed knockback have have two weight variability constants (s1, s2), which describe how much the knockback of the move varies with weight1.
All sufficiently strong moves have a weight2 scale constant (c) which describes how important weight2 is to the move. c can take on a variety of values. For some moves, such as Ness's up throw, c is over 160.
5.3 Knockback Equation
We determined that the knockback equation has two cases depending on the value of a constant k.
To calculate the knockback, first work out k.
where b is the base knockback constant, d is the damage the move would deal, x is the damage of the target before the hit, g is the knockback growth constant, w1 is the weight1 of the target, and s1, s2 are the weight variability constants.
Then we have the equation for knockback:
where w2 is the weight2 of the target, and c is the weight2 scale constant.
5.4 Additional Multipliers for Knockback
We found a few things that cause simple multiplications of the final knockback value. A move being “super effective” is a multiplier of 1.1, and a move being “not very effective” is a multiplier of 0.9. Obviously, this only affects the Pokemon Trainer. In fast mode special brawl, all knockback is multiplied by 1.5, and in slow mode special brawl, all knockback is multiplied by 0.5. Heavy mode special brawl does not affect knockback. As was previously known, attacking a target who is charging a smash other than Ness's up and down smashes is a multiplier of 1.2.
6. Further Research
It is not known how stale move decay affects knockback precisely. Another area for further research is how charging smash attacks affects knockback.
Colin and Amazing Ampharos