アットウィキロゴ

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%」のときのトレース
  1. 70は50以上なので、サイン関数のフェーズに入ります。
  2. 角度の計算:(0.02 x 70 - 1) x 180 = (1.4 - 1) x 180 = 72°
  3. サインの計算:sin(72°) sin(72°) ≈ 0.95106
  4. ボーナス値の計算:(40/3) x 70 x 0.95106 ≈ 887 (小数点以下切り捨て)
  5. 最終命中率(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