ID調整用初期シード検索プログラム

PHSだと検索が遅いのでCで書いてみた。
C使える人限定。
大分早くなったはず。
このブログにtxtファイルとか投稿できないっぽいんでgmソースを以下に。 
適当に改変して使ってくださいな。


#include <stdio.h>

unsigned long fukaseed(unsigned long s);

#define MINF 2000 // 最小F
#define MAXF 40000 // 最大F
#define OMOTEID 0 // 表ID
#define URAID 65368 // 裏ID

int main(void)
{
unsigned long m, h, f, id, id0;
for (f=MINF; f<=MAXF; f++){
for (m=0; m<256; m++){
for (h=0; h<24; h++){
id = fukaseed((m<<24) | (h<<16) | f);
if (((id & 0xffff) == OMOTEID) && ((URAID)>>3 == (id>>19))){
printf("時:%u 月日分秒:%u F:%u 表ID:%u 裏ID:%u\n", h, m, f, id&0xffff, id>>16);
}
}
}
// 進捗表示 
if (f%100==0){
printf("(%u)\n", f);
}
}
return 0;
}

// 初期シードから孵化乱数計算
unsigned long fukaseed(unsigned long s)
{
unsigned long t[3];
t[0] = s;
unsigned int i;
// 必要な部分のみの第0テーブル決定
t[0] = ((t[0]>>30) ^ t[0]) * 0x6c078965 + 1;
t[1] = ((t[0]>>30) ^ t[0]) * 0x6c078965 + 2;
t[2] = t[1];
for (i=3; i<399; i++){
t[2] = ((t[2]>>30) ^ t[2]) * 0x6c078965 + i;
}
// ID決定に使う乱数を計算
unsigned long k;
k = (t[0] & 0x80000000) | (t[1] & 0x7fffffff);
if (k % 2 == 1){
k = (k / 2) ^ t[2];
k = k ^ 0x9908b0df;
}
else{
k = (k / 2) ^ t[2];
}
k = (k / 0x800) ^ k;
k = ((k * 0x80) & 0x9d2c5680) ^ k;
k = ((k * 0x8000) & 0xefc60000) ^ k;
k = (k / 0x40000) ^ k;
return k;
}

ポケトレ色乱数用ツール

最新Verはこちら
http://blog.livedoor.jp/x_x_saki_x_x/archives/53355668.html



作ってみた。
http://www1.axfc.net/uploader/Sc/so/285022&key=pokeradar

Microsoft .NET Framework 4をインストールする必要あり。
中に入ってるツールは2つ。
確認済みROMはダイヤ、プラチナ。
ポケトレ色乱数の仕組みについてはこちら→http://blog.livedoor.jp/x_x_saki_x_x/archives/53073858.html
バグ報告とかはコメントでお願いします。

ツール更新に伴い記述を最新版を元にしたものに改訂しました。


●ポケトレ色乱数用ツール
大きく分けて1~5、6~13、14~22の3つのブロックに分かれる。

pokeradar01


左側
 起動してからポケトレを使用するまで。
 奇数消費のために方向転換とかする場合はシードによっては2消費することもあるので注意。
 ペラップ使いましょう!!!
 ポケトレ限定ポケモンで通常の野生乱数をしたい場合はここだけ使って消費数と揺れ場所を調べればよい。
 揺れるはずの草が存在しない場合消費数及び揺れの種類がずれる。次で対応予定。
1.初期シード
 言わずもがな初期シード。
 英字は小文字でもOK。
 16進数。
2.リスト表示数
 4に表示するリスト数。
 多すぎると計算に多少時間がかかることがある。
 まあ、ここで4桁とか5桁とか計算しないでしょ。
3.リスト表示
 押すと4にリスト表示。
4.リスト
 3を押すとリスト表示。
 左から消費数、一番外から一番内側までの4つの揺れデータ、ポケトレ使用による通常乱数消費数。
 揺れデータの数字は揺れる位置(詳しくはポケトレ色乱数の仕組み参照)、揺れの種類(大or小)。
 リストを選択すると5にそのときの揺れ位置が表示されると同時にポケトレ終了後のシードが6に入る。
5.揺れ位置
 4のリストを選択すると自動的に更新。
 濃い緑が大きい揺れ、薄い緑が小さい揺れ(詳しくは図参照)。
 揺れる場所をクリックすると赤い丸が移動するが、今はまだ特に意味はない。

真ん中
 ポケトレ使用後から揺れた草に入るまで。
 揺れる草むらに入る際にもエンカウント消費がある模様。
 草むら移動時の消費数が変わる閾値の正確な設定が自分ではわかっていないので、
 実際に歩いて調べてみるのを推奨。
 誰か知ってたら教えて。
6.初期シード
 初期シードというより計算開始シードと呼ぶ方が合っているのかもしれない。
 4で選択すると更新される。
7.シンクロ
 最初に揺れる草むらに入る際のシンクロ性格。
 場合によって後で別の性格のシンクロを使うこともあるので、間違えないよう注意。
8.戦闘中消費。
 揺れる場所決定から揺れの種類決定までの間に行われる消費。
 戦闘乱数とは別に戦闘中にいくつか消費されるものと考えられるが、詳細は不明。
 誰か教えて。
 最低1らしい。参考までに、自分はダイヤでは5が、プラチナでは1が出ていた。
 どうやらプラチナは1、ダイパは5で良さげ。
9.リスト表示数
 12に表示する数。
 多すぎると計算に時間がかかるかも。
10.捕獲ボーナス
 ポケモンを倒すのではなく捕まえた場合にチェック。
 捕まえた場合連鎖揺れの確率が10%ほど上がる。
11.リスト表示
 押すと12にリスト表示。
12.リスト
 11を押すとリスト表示。
 左から消費数、出現ポケモン(0~11)、外側から4つの揺れの位置と種類、
 戦闘終了後の揺れ終了までの消費数、光る揺れがある場合は☆。
 揺れの位置は4と同じ。
 揺れの種類は4に加えて連(連鎖が確定している揺れ)、光(光る揺れ、連鎖は確定している)。
 リストを選択すると13に戦闘終了後の揺れる位置が表示されるとともに揺れ終了後のシードが14に入る。
 ※現在のバージョンではこの揺れ終了後のシードが実際のよりいくつか先のものになってしまうバグあり。
   ペラップの音を聞いて消費数を調整することを推奨。次回修正予定。
13.揺れ位置
 12のリストを選択すると自動的に更新。
 5に加え橙が連鎖確定揺れ、黄色が光る揺れ(詳しくは図参照)。
 揺れる場所をクリックすると赤い丸が移動し、それに対応する揺れが18に入る。

右側
 1連鎖以上している時にそれぞれの揺れに対応する出現ポケモンを表示。
 …と言いたいが現在は光る揺れにのみ対応
 表裏IDはちゃんと入力しないと全く別のリストが表示されるので注意。
14.初期シード
 もう言わずもがな。
 12で選択すると更新される。
15.シンクロ
 シンクロ性格。
 間違えないように注意。
16.目標性格値
 入力すれば22のリストで同じ性格値のものに☆がつく。
17.リスト表示数
 22で表示する数。
 多すぎると時間がかかるかも。
18.揺れの種類
 現在は光る揺れのみに対応。
 他のも選択できるが。
 13で揺れる場所をクリックするとその場所の揺れに対応するものに変わる。
19.表ID
 言わずもがな。
20.裏ID
 言わずもがな。
21.リスト表示
 押すと22にリスト表示。
22.リスト
 21を押すとリスト表示。
 現在は18が光る揺れ以外だと有益な情報は表示されない。
 光る揺れの場合、左から消費数、性格、HABCDS、性格値、
 出現ポケモンのデータ決定までの消費、性格値が16と同じなら☆。

●ポケトレ色乱数逆算用ツール
大きく分けて1~13、14~19、20~25の3つのブロックに分かれる。

pokeradargyaku2


左側
 ポケトレ色乱数で出現するポケモンの検索。
 表裏IDを変えると同じ個体値で別の性格のものが出せるが、性別値と特性は変わらない。
 そのため、ポケトレ色乱数でも出現しない個体値、性格、特性の組み合わせがある。
 ある個体値をある性格で出すためのIDを検索するツールはそのうち作るかも。
1~6.HABCDS
  HABCDSの検索範囲指定。
 広すぎると検索に時間かかりすぎるので注意。
  左側が下限、右側が上限。
 左>右にもできるがその時は何も検索しない。
7. 表ID
 言わずもがな。
8.裏ID
 言わずもがな。
9.性格
  検索する性格の指定があれば。
10.めざパ
 めざパの指定があれば。
 空欄なら指定なし。
11.特性
 指定があれば。
12.リスト表示 
 押すと以上の条件で検索して13に表示。
13.リスト
 12を押すと検索結果表示。
 シンクロなし計算開始シード、シンクロあり計算開始シードはそのシードを個体決定の計算開始シードと
 したときに目的の個体が出る。
 シンクロあり計算開始シードの右にある数字はシンクロなしのときからいくつ前のシードかを表す。
 表裏ID、性格、性別値、特性、個体値はいわずもがな。
 性格値はそのポケモンの性格値。

真ん中
 左側で計算した計算開始シードを基に光る揺れが出るシードがいくつ前にあるかを検索し、
 どの計算開始シードで草むらに入れば光る揺れが出るかを探す。
 実際の初期シードの計算は右側で。
 4桁とか5桁とかになることがよくあるので覚悟すること。
 1連鎖目で草むらが光る条件が0~65535の値を取る乱数が8以下になるときだから仕方ないか。
 アプデにより2連鎖目以降も一応実装済み。
14.計算開始シード
 左側で出た計算開始シードのいずれかを入力する。
 そのシードを基準としていくつ前に光る揺れが出るシードが出てくるかを探す。
15.検索範囲
 いくつ前まで検索するか。
16.戦闘中消費
 戦闘中に消費される通常乱数の数。
 ダイパなら5、プラチナなら1でいい模様。
17.連鎖数
 検索する連鎖数。
 多連鎖する等、特に要請することがなければ1でいいかと。
18.検索
 押すと検索結果を19に表示。
19.結果表示
 揺れが光ると判定されるシードが見つかったときに表示。
 一番上の3つの数字は揺れが光ると判定されるシードがいくつ前のシードかとそのときのシード、数字は光ると判定するシードの1つ前の百分率。
 この3つ目の数字が基準値より小さくないと連鎖判定を通らないので光る揺れが出ない。
 この数字の基準値は、4つの揺れに対して内側から28、48、68、88で、
 捕獲ボーナス10%がつく場合はそれぞれに10を足したものになる。
 そのため、揺れる場所によっては捕獲ボーナスがないと光る揺れが出現しないこともあるので、
 この値を確認すれば捕獲ボーナスをつけなければいけないかが分かる。
 揺れる場所は便宜上内側から順に0~3としてある。
 それぞれの下に光る揺れを出すためのシンクロと計算開始シード、出現ポケモンが表示される。
 計算開始シードの横の2つの数字は出現ポケモン(0~11)と見つけた光る揺れ判定用シードからいくつ前かを表す。

右側
 初期シード検索に用いる。
 真ん中で検索したどれかのシードを得るための初期シードを検索するのが主な用途になるかと。
 ポケトレ色乱数に限らず欲しいシードが決まっている時はこの機能を使うとよいかと。
20.目標シード
 目標とするシードを16進数で入力。
 ポケトレ色乱数の場合は真ん中で検索して出たシードのどれかになるかと。
21.消費数
 検索する消費数の範囲。
22.フレーム
 検索するフレームの範囲。
23.時間
 検索する時間の範囲。
 普通はそのまま0~23でいいかと。
24.検索 
 押すと25に検索結果表示。
25.結果表示
 24を押すとここに検索結果を表示。
 表示される内容についてはPHSとほとんど変わらないので説明は不要でしょう。


●注意点とか
ツールは基本的に左から埋めていけばよい。
実例は分かりやすいかはともかく別の記事に参考になりそうなのも書いたつもり。
また、他で書いて下さった方もいるようなので探してみるといいかと。
というかわざわざ書くの面倒。
草むらでの移動・方向転換でのエンカウント判定による消費は、判定方法を調べてみれば分かる通り1とは限らず2or3になることもあるので注意。
(3になるかはそのうち検証する。)
 →http://blog.livedoor.jp/x_x_saki_x_x/archives/53960916.html
 というわけで消費4までありえそう。
揺れる草むらに入る際にもこの判定が入るので、その分の消費1-3も考慮する必要がある。
また、それにより一部計算開始シードとして実現できないシードが存在するので、その場合はシンクロを使って別の消費数のを探すか諦めるかしましょう。
この判定で消費がどれになるかの閾値は詳しくは分かっていないようなので、怪しかったら実際に試してみて下さい。
誰か正確な情報はよ。
この記事のコメント21で外野席さんが簡単に、そのシード選びの参考になることを書いて下さったので見てみるといいと思います。
一応補足として、40という数字が出ていますがそれ以上なら確実だろうというだけで、それ以下でも(閾値がどう決まるかは不明だが)できるものは存在します。

ポケトレ色乱数仕組み

PokemonStyleにポケトレ色乱数についていろいろあったらしいが、
スレが流れたので2chに転載されてたのとかを適当にまとめてみた。

●揺れ位置決定
外側から乱数1つずつ使って決定、消費数4
初期、連鎖時どちらも同じ
揺れない場所が選択されたときはその場所の揺れ種類決定操作をスキップする模様
外から
r/0x800
r/0xAAB
r/0x1000
r/0x2000
位置は下の通り
 
0 1 2 3 4 5 6 7 8
18 19
20 21
22 23
24 25
26 27
28 29
30 31
9 10 11 12 13 14 15 16 17

0 1 2 3 4 5 6
14 15
16 17
18 19
20 21
22 23
7 8 9 10 11 12 13

0 1 2 3 4
10 11
12 13
14 15
5 6 7 8 9

0 1 2
6 7
3 4

●揺れの種類決定
外側から決定 
まずr/0x290<基準値(外から88,68,48,28)なら揺れ小
そうでなければ再度r/0x290>=50なら揺れ大、そうでなければ揺れ小
消費数(1-2)×揺れる草の数
4つとも揺れる場合は4-8 
光る草の判定はないので初回時はポケトレ色は出ない
以上からポケトレ使用による消費数は8-12である
某所で消費数9となっているのは特定の場合のみであるので間違えないように 

●乱数消費
移動とか冒険ノートとかで消費

●出現個体の決定
通常と同じ
小さい揺れと大きい揺れで出現ポケモンが違う
小さい揺れと大きい揺れ共通で大量発生ポケモンはスロット0~11のうち0、1に入る
大きい揺れ限定でポケトレ限定種がスロット0~11のうち4、5、10、11に入る 
性格値が目的のに合うまで->性格値で消費2、個体値で消費2、所持アイテムで消費1
その後の4つの乱数で上記と同様に再度揺れ位置決定

●戦闘処理
少なくとも1消費
場合によって複数消費されるらしい
DPtでもそうなのかは不明だが参考→http://blog.livedoor.jp/ktxad/archives/1217411.html
自分でやったときはプラチナでは1が、ダイヤでは5が良く出ていた
パールでも5が出たという報告あり
どうやらプラチナは1、ダイパは5で良さげ
 
●揺れの種類決定(連鎖1以上)
外から順に行われる
揺れない場所についてはスキップされる模様
消費数2×揺れる草の数
a.連鎖確定判定
 r/0x290<基準値(初動時と同じ、捕獲ボーナス+10)なら連鎖確定揺れになる
b-1.光る揺れの判定(aを満たす場合)
 r<色判定値なら光る草になる
 それ以外は前回に入った草と同じ揺れ
 1連鎖目では色判定値は9、すなわち8以下なら色が決定する
 光る揺れになる条件は連鎖数nに対してr<0xffff/(0x2008-(n×0xc8))+1の模様
b-2.揺れの種類決定(aを満たさない場合)
 r/0x290<50なら小さい揺れ、そうでなければ大きい揺れ
 捕獲ボーナスとかについては不明

●乱数消費
移動とか冒険ノートとかで消費

●出現個体の決定
a.光る草むらに入った場合
 1.シンクロなし
  乱数2つで基礎性格値を決定
  書き換え処理用に乱数13個
  個体値決定用に乱数2つ
  詳しくは後で 
 2.シンクロあり
  シンクロの成否決定->失敗なら上
  基礎性格値決定から書き換え処理用までの乱数15個を使ってシンクロ性格値が出るまで繰り返す
  シンクロ性格値が出た後に通常と同様個体値決定用に乱数2つ消費
b.それ以外
 1.連鎖揺れ
  出現ポケモンが決定した状態から通常と同様に決まる模様
 2.それ以外 
  出現ポケモン決定から通常と同様に決まる模様 

●詳しいポケトレ色個体決定方法
乱数2つで基礎性格値を決定
 基礎性格値を下位16ビット、上位16ビットの順に決定
書き換え処理用に乱数13個
 下位から1ビットずつ乱数最下位ビット13個を並べる
 MaskIDとでも呼んでおく
性格値決定
 上記の3つ及び表裏IDを使って以下のように計算
 性格値下位16ビット:MaskID<<3+基礎性格値下位の下位3ビット
 性格値上位16ビット:(表ID>>3 xor 裏ID>>3 xor MaskID)<<3+基礎性格値上位の下位3ビット

以上のような決定方法のため、IDによって特定の個体値となる性格は変えられるが、
性別値及び特性はIDによらない。

ポケトレ色乱数メモ

ポケトレで出た光る草むらにおいては性格値の決め方が特殊であるということで、
通常の野生乱数とは異なる性格値と個体値の組み合わせのポケモンが出現しうる。

例えば、6Vメタモンは通常の野生乱数ではひかえめ、おくびょう、すなお、おだやかの
4種類の性格しか出ないが、ポケトレの光る草むらを利用すれば表裏IDを調整することにより
任意の性格の6V「色」メタモンが手に入る。
通常色では出せないので注意。
また、1連鎖で出そうとすると消費数が必然的に多くなる。
シードによっては5桁とか…。

ポケトレ色乱数用ツールは現在インターフェース改良等を行っているが、
先にメモ程度にポケトレ色乱数を成功させた例を挙げておく。
初期シードとか適当に決めたのでもうちょい楽な方法あるかも。
IDによって2つ目のシンクロ性格が変わるので下のをそのまま使えるとは限らない。注意。
シンクロ使用による消費数削減を行っているので、他の性格では最後の消費数は間違いなく変わる。
戦闘後の通常乱数消費数の変化は自分では検証していないので不明。
経験則でどうとでもなるか。

ROM:ダイヤ(表ID:55326、裏ID:16936~16943)
場所:218番道路草むら
前準備:NPCが動かないように戦闘吹っかけて倒し、ポケトレもスタート後すぐ使えるようにする
シンクロ要員:わんぱく、せっかち(表裏IDによって異なる。この性格がメタモンの性格になる)
レポート位置:草むら真ん中らへん(だいたいでおkのはず)に右向き(整合性が取れれば別にどうとでも)
●手順
初期シード3C16031C(22時、60分+秒、796F)で起動
上を向く→冒険ノート*11(合計23消費)
ポケトレ使用(この時の消費は9)。右が大きな揺れになるはず
冒険ノート*46→
わんぱく先頭にして右に1歩(合計94消費)でメタモンLv29が出るので倒す
上2右3のところが光る揺れになる(戦闘後の消費数が5の場合)
戦闘後の消費数が1、3、7のときもどこかしら光る揺れになるはず
出現ポケモン決定からここまでで合計90+5消費
上に移動→右に移動*3→下を向く→冒険ノート*241→せっかち先頭にして上に一歩(合計491消費)
色メタモンが出るので捕まえる

サファリボールパ

作るためにひたすらサファリゾーンでいろいろ捕まえてたり。
余裕があればID調整して色捕まえてみたい気も。
プロフィール
さき

ポケモンの乱数調整とかツールとか。サンムーン乱数調整できました。
Twitter→@water_blow

広告
最新コメント
記事検索