仄暗いレートの底から

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Em乱数】バトルファクトリーの処理について

この記事はPokémon RNG Advent Calendar 2016 23日目の記事です
Pokémon RNG Advent Calendar 2016 – Adventar

※注意※ 

こちらは乱数調整のやり方を解説する記事ではありません。
乱数アレルギーの方はぶらうざばっく推奨。


■基本事項 -3gen乱数処理理解の基礎の基礎-

・3genで使われている乱数列(疑似乱数を作り出すための数列)は、
 S(n+1) = (0x41C64E6D * S(n) + 0x6073) % 0x100000000
 初項(=初期seed)はEmでは基本的に0x0固定。

・乱数種(乱数列の項)の上位4桁を取り出し、乱数として使用する。

・乱数列は1Fごとに1つ進む。また、乱数を使ったときにも進む。(ただし乱数調整の際には後者はほとんど考慮に入れなくて良い場合が多い)


■ファクトリー乱数概要

Q.ファクトリー乱数って何を調整するの?

A.初めのレンタル6匹、相手の手持ち3匹(あとついでに相手トレーナー)を全部調整できます。
つまり、バトルファクトリーの運ゲー要素を極力排除できます。
それなのに金ダツラ倒せない。おかしいな…


レンタル6匹と1戦目のトレーナー・手持ち3匹はすべて同時に決定。
2戦目以降はトレーナーと手持ち3匹が同時に決定。
基本的な処理は1戦目と2戦目で変わりませんが、スキップ条件が若干違います。


■処理の詳細

まず決定タイミングは、1戦目は控室に入って研究員が喋り始めた瞬間。

なので調整の際は、ここで待機してタイミングを合わせます。

Fac待機


2戦目以降は、「つづける」を選択した瞬間。当然ここで待機です。

taiki2.png


次に、1戦目の決定処理について。まず初めにレンタル6匹が決定されます。
バトルフロンティア(とバトルテント)で出てくるポケモンの型は全部で882種類あり、それぞれ0~881までの番号が割り振られていて、その中から各施設・ルール・周回数に応じたポケモンが選び出される仕組みになっています。
ファクトリーでは以下の通りです。

勝数 Lv.50 オープン
0~6 No.110~No.199 No.372~No.467
7~13 No.162~No.266 No.468~No.563
14~20 No.267~No.371 No.564~No.659
21~27 No.372~No.467 No.660~No.755
28~34 No.468~No.563 No.372~No.881
35~41 No.564~No.659 No.372~No.881
42~48 No.660~No.755 No.372~No.881
49~ No.372~No.849 No.372~No.881

乱数値 % (その周で出てくるポケモンの総数) 
に対応する番号のポケモンが選び出されます。
ただし、累計交換回数が15以上になると、前から1匹ずつ、次の周のリストを参照して決定されるようになります。
15回~21回で1匹、22回~28回で2匹、…となり、43回以上交換すると前から5匹が対象になります。(Lv.50の8週目以降、オープンの5週目以降は同じリストになるため、効果は現れません)

ポケモン決定の際、

既に選ばれた番号と同じ(種族ではない)
既に選ばれたポケモンと同じ持ち物を持つ

のいずれかを満たすとスキップ対象となり、もう一度処理が行われます。(単に同じポケモンというだけではスキップがかからないので、勝数が増えるとレンタルに同じポケモンが2匹並ぶこともあります。)
これを6匹決まるまで繰り返します。


レンタル6匹が決定したら、その次の乱数を使ってトレーナーを決定します。
これもポケモンと同様に、

乱数 % (出てくるトレーナーの総数)

で決定されます。 連勝数とトレーナーのリストは以下の通りです。

1~6人目 7人目
1周目 No.000~No.099 No.080~No.119
2周目 No.080~No.119 No.120~No.139
3周目 No.100~No.130 No.140~No.159
4周目 No.120~No.159 No.160~No.179
5周目 No.140~No.179 No.180~No.199
6周目 No.160~No.199 No.200~No.219
7周目 No.180~No.219 No.220~No.239
8周目以降 No.200~No.299 No.200~No.299

この時のトレーナー決定にはスキップ処理はありません。1人目なので。


そして、トレーナーの手持ち決定です。
使用するポケモンはレンタルと同条件、決定処理も同様です。
ただし、スキップ条件が若干違います。

・レンタル及び既に選ばれたポケモンと同じ種族
・既に選ばれたポケモンと同じ持ち物を持つ

レンタルと同じスキップ条件に加え、レンタルに並ぶポケモンとの種族被りを回避する感じです。
レンタルポケモンとの持ち物被りはスキップ対象にはなりません。


…と、ここまでが一度に決定します。



次に、2人目以降の決定について。
まずはトレーナーの種類が1人目と同様に行われます。 ただし、

・前回と同じトレーナー

はスキップ。
手持ちの決定も1人目とほぼ同じですが、2戦目以降はトレードがある都合上、前回の対戦相手が使ったポケモンもスキップ対象にしなければいけません。(もしスキップがかからなかった場合、こちらと相手の両方の手持ちに同じポケモンが並ぶ可能性が出てきます)

・主人公側の手持ち3匹のいずれかと同じ種族
・前回の対戦相手の手持ち3匹のいずれかと同じ種族
・既に選ばれたポケモンと同じID
・既に選ばれたポケモンと同じ持ち物を持つ

がスキップ条件となります。



PID決定は、レンタルポケモンが レンタルポケモン選択画面に入る直前(6匹連続)、トレーナーの手持ちは戦闘に入る瞬間(3匹連続)です。
フロンティアのポケモンは性格が固定のため、性格が一致するまでPIDを再計算しつづけます。
色判定もちゃんと行われるため、色違いにすることも可能です。



最後に、ダツラの手持ちについて。
生成タイミングは戦闘に入る瞬間。ダツラだけは生成が他のトレーナーと異なり、

1匹目生成→PID生成→2匹目生成→PID生成→3匹目生成→PID生成

という処理で決定します。また、スキップ条件が

・既に選ばれたポケモンと同じ種族 ・既に選ばれたポケモンと同じ持ち物

のみで、主人公側の手持ちと同じポケモンを出してくることもあります。
なお、手持ち生成の間のPID生成に伴う大量スキップのせいで描画割り込みが発生し、2匹目以降のポケモンの調整が困難になっています。



■さいごに

以上、つらつらと処理を書き連ねてきましたが、実際にリストを見たほうが分かり良いかと思います。
ファクトリーツール
ファクトリー乱数用のツールでございます。そのままファクトリー乱数に使えます。

・参考サイト ポケットモンスター情報センター 2号館(おそらく今は見れません)

スポンサーサイト

この記事に対するコメント


この記事に対するコメントの投稿

















Powered By FC2ブログ
Template By oresamachan
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。