2RN (2 Random Number)
2RN (2 Random Number) とは、主に『ファイアーエムブレム』シリーズなどのゲームで使用されている、2つの乱数の平均値を使って
命中率を計算するシステム(
実効命中率 / True Hit)のことです。
表示上の
命中率よりもプレイヤーに有利な確率(攻撃が当たりやすい)に補正されるのが特徴です
概要
1. FEシリーズにおける命中率システムの歴史
FEシリーズは、時代やタイトルによって内部の乱数(RN = Random Number)の扱いを大きく変えてきました。
| 世代 |
採用タイトル |
判定システム |
特徴 |
| 初代〜トラキア |
FE1 〜 FE5 |
1RN |
画面の表示通り。 99%でも1%で外れる数値通りの仕様 |
| GBA〜覚醒、風花雪月 |
FE6 〜 FE13, FE16 |
2RN(クラシック) |
2つの乱数の平均値。 高確率はより高く、低確率はより低く |
| if、Echoes、エンゲージ |
FE14, FE15, FE17 |
ハイブリッドRN (Fates方式) |
50%未満は1RN、 50%以上はサイン関数による補正 |
2. クラシック2RNの仕組み(FE6〜13、風花雪月)
内部で0〜99の乱数を2つ($A, B$)発生させ、その平均値 (A+B)/2 が表示命中率未満ならヒットとする方式です。
1万通り(100 x 100)の組み合わせから計算されるため、確率の分布が中央に偏る「三角分布」になります。
- 表示1%のとき
- 合計が2未満(0+0, 0+1, 1+0)の3通りしか当たらないため、実効命中率は 0.03% まで激減。
- 表示99%のとき
- 外れるのは合計が198以上(99+99, 99+98, 98+99)の3通りだけなので、実効命中率は 99.97% まで跳ね上がる。
これがプレイヤーに「表示90%以上は絶対当たる」「敵の10%未満は絶対避ける」という安心感を与えていたシステムです。
3. ハイブリッドRN(if / Echoes / エンゲージ)の厳密な仕様
近年のIS(インテリジェントシステムズ)自社開発タイトルでは、判定に0〜9999(1万分率)のシングル乱数を使いつつ、以下の二段階の数式で実効命中率(Actual Hit = AH)を算出しています。
#include <cstdint>
#include <cmath>
// 必要に応じて名前空間やクラスとして定義
namespace App {
namespace BattleMath {
int32_t GetHitRatio10000(int32_t ratio, void* method)
{
// 51% 〜 99% のときだけサイン関数による補正を行う
if ((ratio > 50) && (ratio != 100)) {
// 0.01745329 は「度(degree)」を「ラジアン(radian)」に変換する定数(π / 180)
float angle_deg = ((float)(ratio * 180 - 9000) / 50.0f);
float fVar1 = sinf(angle_deg * 0.01745329f);
// 元の表示命中率(10000分率)に、サイン波ベースのボーナス値を加算
// 13.33333f は (40.0f / 3.0f) の近似値
float fVar2 = (float)ratio * 100.0f + fVar1 * (float)ratio * 13.33333f;
return (int32_t)fVar2;
}
// 50%以下、および100%のときは表示通りの確率(1RN)
return ratio * 100;
}
}
}
- ① 表示命中率(DH)が 50% 未満の場合
- 補正は一切行われません。表示が30%なら、内部でもきっちり3000/10000(30%)の確率で判定されます。
- これにより「低確率の敵の攻撃を完全にシャットアウトする(地雷無双)」が不可能になりました。
- ② 表示命中率(DH)が 50% 以上の場合
- 表示命中率に、サイン波をベースにした「ボーナス命中率」を上乗せします。
- コード内の 13.33333 という固定値は、分数における 40/3 を表しています
- 3DSやSwitchの内部処理(SinFIdx)の高速化のため、ゲーム内ではラジアンではなく、1周(360度)を特定のデジタル数値(128や256など)に正規化して計算(0.71111 などの乗算)していますが、数学的な結果は上記の度数法(degree)の式と完全に一致します
- 【計算例】表示命中率が「70%」のときのトレース
- 70は50以上なので、サイン関数のフェーズに入ります。
- 角度の計算:(0.02 x 70 - 1) x 180 = (1.4 - 1) x 180 = 72°
- サインの計算:sin(72°) sin(72°) ≈ 0.95106
- ボーナス値の計算:(40/3) x 70 x 0.95106 ≈ 887 (小数点以下切り捨て)
- 最終命中率(AH):(70 x 100) + 887 = 7887
- 結果として、0〜9999の乱数が7887未満なら命中となるため、実効命中率は「78.87%」になります。
4. クラシック2RN と ハイブリッドRN の実数値比較
このハイブリッドRNがどれほど絶妙な調整なのかは、両者の実効命中率の数値を並べると一目瞭然です。
| 表示命中率 |
クラシック2RN |
ハイブリッドRN |
挙動の違い |
| 95% |
99.55% |
99.20% |
高確率はどちらのシステムでも十分に信頼できる。 |
| 90% |
98.10% |
97.05% |
|
| 80% |
92.20% |
90.39% |
|
| 70% |
82.30% |
78.87% |
【ここがピーク】2RNほど過剰には救済しない。 |
| 60% |
68.40% |
64.51% |
|
| 50% |
50.50% |
50.00% |
どちらのシステムでも50%はほぼ額面通り。 |
| 30% |
17.70% |
30.00% |
【大きな差】ハイブリッドはしっかり被弾する。 |
| 10% |
2.10% |
10.00% |
2RNなら安全圏だが、ハイブリッドは10回に1回当たる。 |
5. ゲームデザインにおけるこのシステムの意図
このハイブリッドRNは非常に高度な「手触りの調整」を目的としています。
- 1. プレイヤーの攻めの快適性は維持する
- 50%以上の「自分が仕掛ける攻撃」は、サイン関数のおかげで表示より手厚くヒットしてくれます。これにより、戦術を組み立てる楽しさは損なわれません。
- 2. 「地雷・回避無双」を殺す
- 『if』の「リョウマ」や『エンゲージ』の「ラピス」「ユナカ」のような高速・高回避ユニットを、敵陣のど真ん中に1人で突っ込ませる戦術(Enemy Phase戦術)への明確な対策です。敵の命中が20%〜30%あっても、クラシック2RNなら実質数%〜10%台まで落ちるため無敵になれましたが、ハイブリッド方式では額面通りガシガシ削られるため、プレイヤーは「きちんと壁役で受ける」「攻陣・連携を活用する」といった、より奥深い戦術を強引に求められることになります。
参考
関連ページ
最終更新:2026年05月22日 08:37