!ninjaテストスレ4

このエントリーをはてなブックマークに追加
286名無しさん@お腹いっぱい。
○乱数の式

f(x) = x * 176 % 65363

これがMH3Gで使われている乱数の式である。
要するに与えられた値xに176を掛け、65363で割った値を乱数としているのである。

例えば現在の乱数が100である場合、次の乱数は
f(100) = 100 * 176 % 65363
= 17600 % 65363
= 17600
17600となる。
また、さらに次の乱数は
f(17600) = 17600 * 176 % 65363
= 3097600 % 65363
= 25539
25539となる。
その次の乱数は
f(25539) = 25539 * 176 % 65363
= 4494864 % 65363
= 50180
50180となる。

このように乱数から次の乱数を求めることを
「乱数を1進める」と呼び、
次の次の乱数を求めることを
「乱数を2進める」と呼ぶ。
※「乱数を1消費する」等のように呼ぶこともある

また、ここでは数式で
f1(100) = f(100) = 17600
f2(100) = f(f(100)) =25539
f3(100) = f(f(f(100))) =50180
のように表すことにする。
287名無しさん@お腹いっぱい。:2013/02/08(金) 13:53:06.08 ID:qWVSPRPX
○乱数の使用例
狩猟船を出した際の報酬の判定を例に取って説明する。

ホシヒトデx1,20,0-19
ハリマグロx2,15,20-34
ホシヒトデx2,5,35-39
サシミウオx2,5,40-44
はじけイワシx5,10,45-54
サシミウオx3,15,55-69
キレアジx6,5,70-74
眠魚x2,10,75-84
はじけイワシx4,5,85-89
キレアジx4,5,90-94
うなりうねり貝,5,95-99

これが狩猟船を「漁・モガ沿岸」に出した際の報酬判定テーブルである。

報酬決定時の乱数が17600である場合、これを一つ進め、100で割った余りを判定値として求める。
f1(17600) = 25539
25539 % 100 = 39
表からホシヒトデx2が1枠目の報酬ということになる。

同様に次の乱数と判定値を求める。
f2(17600) = f(25539) = 50180
50180 % 100 = 80
表から眠魚x2が2枠目の報酬となる。

3枠目、4枠目も同様に決定することができる。
f3(17600) = 7675
7675 % 100 = 75
表から眠魚x2

f4(17600) = 43540
43540 % 100 = 40
表からサシミウオx2

※5枠目以降は「報酬枠が存在するかどうか」についても
乱数を消費することになるが、少々複雑になるためここでは省略

以上のようなアルゴリズムで狩猟船の報酬判定が行われるが、
クエストの報酬やお守りの鑑定時にも同様のアルゴリズムが用いられていることが判明している。

また、NPCやモンスターの行動、会心や状態異常発動、行商人の品揃えや高難度クエストの出現など、
ありとあらゆる箇所、あらゆるタイミングで乱数が使われている(ただしそのアルゴリズムの多くはまだ判明していない)
288名無しさん@お腹いっぱい。:2013/02/08(金) 13:54:21.38 ID:qWVSPRPX
○乱数の初期値について
乱数の初期値はMH3Gメインメニューの「NEW GAME」選択時刻を元に次の式で決定される。
[1970/1/1 00:00:00からの経過秒数] % 65536 % 65363
※結果が0の場合は1とみなす
※[1970/1/1 00:00:00からの経過秒数]はUNIX時間またはUNIX時刻と呼ばれる。
例えば2012/3/3 00:08:07に「NEW GAME」を選択した場合、
1970/1/1 00:00:00からの経過秒数は1330733287なので、
1330733287 % 65536 % 65363 = 24807
24807が乱数の初期値とされる。
※24807はT1(テーブル1)に属する。

ここで一つ重要なのが、
『「NEW GAME」選択時以外に乱数の初期値を設定する機会は無い』ということである。
MH3Gではセーブ時に乱数も保存され、ロード時にそれを引き継ぐために
キャラクターを作った以上、二度とテーブルが変更されることが無いのである。

※MHP3ではゲーム起動毎に乱数が時刻の秒数(0〜59)を元に初期化されていたため、
テーブルを変更することが出来た

また、この初期値決定の仕組みを逆に利用して、特定のテーブルを狙い打つことも可能。
参考サイト:http://www.hayasoft.com/chisamin/mh3g/tsnipe.cgi
基本的に1秒毎にテーブルが変わるが、稀に同じテーブルが連続する秒数があるので、
そこを狙うとミスをしにくいはず。
289名無しさん@お腹いっぱい。:2013/02/08(金) 13:55:13.43 ID:qWVSPRPX
○お守り生成アルゴリズム(概要)
MH3Gのお守りは以下7つのステップで生成されている。
1.スキル1の種類の判定
2.スキル1の値の判定
3.スキル2の有無の判定
4.スキル2の種類の判定
5.スキル2の値の正負判定
6.スキル2の値の判定
7.スロット数の判定

それぞれのステップで計7回乱数を消費されるが、
ステップ3でスキル2が無しと判定された場合、
ステップ4〜6がスキップされ、ステップ7に直行することになる。
(計4回乱数が消費される)

なお、護石の種類(天・伝説・英雄など)は
ステップ1〜7の結果(スキル1種類と値、スキル2種類と値、スロット数)を元に計算で決定されるため、
このために新たに乱数が消費されるということは無い。

また、「なぞのお守り」についてはステップ3の判定が必ず「無し」
になる設定になっているため、乱数消費は4で固定となっている。