バトルファクトリーまとめ
ランク
周とは別にランクという概念を導入する。
「2周目では6戦目までは1周目と2周目のトレーナー、7戦目は3周目トレーナーが登場する」より「2周目では6戦目まではランク1とランク2のトレーナー、7戦目はランク3のトレーナーが登場する」と書いた方が分かりやすいと思うから。
乱数
NewSeed = (Seed * 0x41c64e6d + 0x6073) & 0xffffffff Rand = NewSeed >> 16
剰余演算
xをyで割ったあまりを x % y という式で表すことにする。
流れ
- 7戦分のトレーナー決定 (トレーナーA)
- 実際には使われることがないトレーナーの決定 (トレーナーB)
- 最初の6匹の決定
- 1戦目の相手の手持ち決定
- プレイヤーによる選出決定・1戦目の戦闘開始
- n=2 から n=7 まで以下の処理を行う
- n戦目の相手の手持ち決定
- プレイヤーによる交換決定・n戦目の戦闘開始
トレーナー
出てくる対戦相手のNPC(トレーナー)は300人。0〜299までのIDをそれぞれに振る。
名前はバトルタワーのトレーナー(プラチナ/ハートゴールド・ソウルシルバー) - ポケモンの友/ポケモンデータ集参照。
トレーナーのIDによってランクが決まる。
ランク | 範囲 |
---|---|
ランク1 | 0〜99 |
ランク2 | 100〜119 |
ランク3 | 120〜139 |
ランク4 | 140〜159 |
ランク5 | 160〜179 |
ランク6 | 180〜199 |
ランク7 | 200〜219 |
ランク8 | 220〜299 |
トレーナーの決定
乱数を1消費してトレーナーを決定する。
1周目6戦目まで | rand % 99 + 0 | 0〜98 |
---|---|---|
1周目7戦目 | rand % 19 + 100 | 100〜118 |
2周目6戦目まで | rand % 39 + 80 | 80〜118 |
2周目7戦目 | rand % 19 + 120 | 120〜138 |
3周目6戦目まで | rand % 39 + 100 | 100〜138 |
3周目7戦目 | rand % 19 + 140 | 140〜158 |
4周目6戦目まで | rand % 39 + 120 | 120〜158 |
4周目7戦目 | rand % 19 + 160 | 160〜178 |
5周目6戦目まで | rand % 39 + 140 | 140〜178 |
5周目7戦目 | rand % 19 + 180 | 180〜198 |
6周目6戦目まで | rand % 39 + 160 | 160〜198 |
6周目7戦目 | rand % 19 + 200 | 200〜218 |
7周目6戦目まで | rand % 39 + 180 | 180〜218 |
7周目7戦目 | rand % 19 + 220 | 220〜238 |
8周目以降 | rand % 99 + 200 | 200〜298 |
7戦分のトレーナーの決定 (トレーナーA)
「トレーナーの決定」を7戦分行う。重複があった場合はスキップする。
3周目と7周目の7戦目はネジキなので6戦分しか決定しない。
実際には使われることがないトレーナーの決定 (トレーナーB)
トレーナーAとは別にもう一度トレーナーを決定する。これは恐らくマルチバトル用のトレーナーの決定かと思われる。
トレーナーAとの重複もスキップされる。
- プラチナでは7人目でも6人目までと同じ決定方法をとる
- 2周目と6周目では6人分しか決定しない
最初の6匹の決定
- {ポケモンの種類の決定}×6匹分
- {親IDと性格値決定}×6匹分
- シャッフル
基本的に現在の周と同じランクで種類が決定される。
交換回数 / 7 (切捨て)の数だけ一つの上のランクのポケモンが出てくる。これをボーナスポケモンと呼ぶことにする。交換回数とは受付の成績で見ることが出来る値。
通常のランクのポケモンの種類が先に決定され、ボーナスポケモンは後に決定される。
種類の決定は種族の重複、アイテムの重複があった場合そのポケモンはスキップされる。
ポケモンの種類の決定
ポケモンの型の種類は950。1〜950までのIDをそれぞれに振る。
データはバトルタワーのポケモン(プラチナ/ハートゴールド・ソウルシルバー) - ポケモンの友/ポケモンデータ集参照。
乱数を1消費して、種類を決定する。
オープンレベルでは種類はランクを+3して決定する。
ランク | IDの決定方法 | 範囲 |
---|---|---|
ランク1 | 150 - (rand % 150) | 1〜150 |
ランク2 | 250 - (rand % 100) | 151〜250 |
ランク3 | 350 - (rand % 100) | 251〜350 |
ランク4 | 486 - (rand % 136) | 351〜486 |
ランク5 | 622 - (rand % 136) | 487〜622 |
ランク6 | 758 - (rand % 136) | 623〜758 |
ランク7 | 894 - (rand % 136) | 759〜894 |
ランク8以降(A) | 950 - (rand % 328) | 623〜950 |
ランク8以降(B) | 950 - (rand % 600) | 351〜950 |
ネジキ(準伝説あり) | 950 - (rand % 192) | 759〜950 |
ランク8以降について
オープンレベルの最初の6匹の7周目まではA。
Lv50 オープンレベルともに8周目以降の最初の6匹、7周目のボーナスポケ、相手の手持ちはB。
ポケモンの親IDと性格値の決定
乱数を2つ消費して親IDを決定。(1つ目が表ID、2つ目が裏ID)
乱数を2つずつ消費して性格値を生成。ポケモンごとに決められた性格になり、色違いでなければそれを採用。
最初の6匹のシャッフル
最初の6匹は決定された順番そのままにはならない。並び順がシャッフルされる。これはボーナスポケモンが後ろに固まらないように行っているものと考えられる。
インデックスは0 originとする
- 4番目と(rand % 6)番目を入れ替え
- 5番目と(rand % 6)番目を入れ替え
合計で乱数2消費。
個体値
ポケモンの個体値はランクが7以下ならば(ランク - 1) * 4、ランクが8以上ならば31となる。
このランクは、ポケモンの種類の決定のときのようにオープンレベルでは値が増えるということはない。
相手トレーナーの手持ち決定
相手の手持ちの決定はその直前の交換の前に行われる。1周目で交換する前に相手の手持ちを教えてくれることを考えれば自明。プレイヤーの手持ちになる可能性があるポケモンとは種族やアイテムが重複しないように決定される。
プレイヤーの手持ちになる可能性があるポケモンとは具体的に以下の通り
- 1戦目の場合は最初の6匹
- 2戦目以降の場合は一つ前の戦闘時のプレイヤーの手持ちと相手トレーナーの手持ちの合計6匹
相手トレーナーの手持ちはトレーナーのランクのポケモンになる。
最初の6匹と同じように種類の決定、親IDと性格値の決定が行われる。ただし、相手の手持ちはシャッフルは行われない。
1戦ごとの乱数消費
相手トレーナーの手持ちを決定するごとに固定個数の乱数消費がある。何に使われているかは不明。
1周目1戦目 | 24 |
---|---|
1周目2戦目以降 | 6 |
2周目1戦目 | 相手がランク1の場合42, ランク2の場合48 |
2周目2戦目以降 | 相手がランク1の場合6, ランク2の場合12 |
3〜4周目1戦目 | 48 |
3〜4周目2戦目以降 | 12 |
5周目以降1戦目 | 60 |
5周目以降2戦目以降 | 24 |
7戦目での消費はちゃんと調べていない。
ネジキの言ってくるパーセント
rand % 90 + 10 で決定される。
決定されるタイミングはネジキの手持ちが決定され、1戦ごとの消費が行われた後。
追記 (2010-01-24T23:26:48+09:00)
3周目のトレーナーBの消費を調査したので追記
追記 (2010-02-15T18:12:20+09:00)
7周目まで調査したので修正。修正内容はHistory for 2010-01-24-1264323887.txt - oupo/hatenadiary-oupo · GitHubを参照。
追記 (2010-02-19T03:11:49+09:00)
8周目以降を調査したので修正。
ネジキの手持ちの表を分かりやすく変更。