mizdra's blog

ぽよぐらみんぐ

反動ダメージについて

事の発端

噂の 自販機乱数の人の記事 を読んでいて、すてみタックルの反動ダメージが第六世代では「与ダメx0.33 (四捨五入)」であるのに対し、第五世代以前では「与ダメx(0x548/0x1000) (四捨五入)」と、不自然な計算式であることに疑問を感じていた。

blastoise-x.hatenablog.com

当記事の中で、第五世代以前の計算式はincorrectと述べられているように本人もあまり正確に調査していなかったようなので、自分で調べてみることにした。

調査内容

与えたダメージの1/3が自分に反動ダメージとして帰ってくると言われているすてみタックル等の技の反動ダメージの正確な計算式を調べる。

検証に使用した技

検証した世代

  • 第三世代
  • 第四世代
  • 第五世代*1
  • 第六世代*2

第一世代・第二世代は需要がなさそうということから、また調査環境が整ってないということから調べなかった。きっとやる気に満ち溢れた人が代わりに調査してくれるでしょう!!

調査結果

結論を先に書くと以下のような計算式になった。

{ \displaystyle
damage := 与えたダメージ
}
{ \displaystyle
recoil     := 反動ダメージ
}
{ \displaystyle
round     := 四捨五入関数
}
{ \displaystyle
floor     := 切り捨て関数
}

第五世代以降

{ \displaystyle
recoil = round(damage \times (33 \div 100))
}

第四世代以前

{ \displaystyle
recoil = floor(damage \times (1 \div 3))
}

例外(第三世代~第六世代共通)

反動ダメージは1より小さくならない。(最低1は反動ダメージを受ける)

詳細

1/3反動ダメージの算出方法については諸説あるが、ここでは代表的な

  • {damage \times (0\rm{x}548 \div 0\rm{x}1000)}
  •  {damage \times (1 \div 3)}
  •  {damage \times (33 \div 100)}
  •  {damage \times (333 \div 1000)}

の4つについて調べた。

第五世代以降

  • {damage = 23, recoil = 8} のとき
{\times (0\rm{x}548 \div 0\rm{x}1000)}  {\times (1 \div 3)}  {\times (33 \div 100)}  {\times (333 \div 1000)}
raw 7.591796875 7.66666666666667 7.59 7.659
四捨五入 8 8 8 8
五捨六入 7 8 7 8
切り捨て 7 7 7 7
切り上げ 8 8 8 8


- {damage = 53, recoil = 17} のとき

{\times (0\rm{x}548 \div 0\rm{x}1000)}  {\times (1 \div 3)}  {\times (33 \div 100)}  {\times (333 \div 1000)}
raw 17.494140625 17.6666666666667 17.49 17.649
四捨五入 17 18 17 18
五捨六入 17 18 17 18
切り捨て 17 17 17 17
切り上げ 18 18 18 18


- {damage = 153, recoil = 50} のとき

{\times (0\rm{x}548 \div 0\rm{x}1000)}  {\times (1 \div 3)}  {\times (33 \div 100)}  {\times (333 \div 1000)}
raw 50.501953125 51 50.49 50.949
四捨五入 51 51 50 51
五捨六入 50 51 50 51
切り捨て 50 51 50 50
切り上げ 51 51 51 51


{recoil = round(damage \times (33 \div 100))} のみ一致。

第四世代以前

  • {damage = 20, recoil = 6} のとき
{\times (0\rm{x}548 \div 0\rm{x}1000)}  {\times (1 \div 3)}  {\times (33 \div 100)}  {\times (333 \div 1000)}
raw 6.6015625 6.66666666666667 6.6 6.66
四捨五入 7 7 7 7
五捨六入 7 7 7 7
切り捨て 6 6 6 6
切り上げ 7 7 7 7


- {damage = 24, recoil = 8} のとき

{\times (0\rm{x}548 \div 0\rm{x}1000)}  {\times (1 \div 3)}  {\times (33 \div 100)}  {\times (333 \div 1000)}
raw 7.921875 8 7.92 7.992
四捨五入 8 8 8 8
五捨六入 8 8 8 8
切り捨て 7 8 7 7
切り上げ 8 8 8 8


{recoil = floor(damage \times (1 \div 3))} のみ一致。

例外(第三世代~第六世代共通)

  • {damage = 1, recoil = 1} のとき
{\times (0\rm{x}548 \div 0\rm{x}1000)}  {\times (1 \div 3)}  {\times (33 \div 100)}  {\times (333 \div 1000)}
raw 0.330078125 0.333333333333333 0.33 0.333
四捨五入 0 0 0 0
五捨六入 0 0 0 0
切り捨て 0 0 0 0
切り上げ 1 1 1 1


どの世代の計算式にも一致しなかった。

調査データ

調査に使ったデータを公開しておく。
調査結果が正しいかどうか確かめたい時にどうぞ。

参考

*1:第五世代は自販機乱数の人によって既に調査済であったが確認の意味も含めて再調査した

*2:調査済だが第五世代と同じ理由で再調査