乱数消費方法やオフセットについてわかりやすくまとめてみた【パワポケ乱数】

パワポケ10-12で乱数調整をするにあたって、乱数消費の仕方が分かりにくかったり、時間が面倒くさかったりという難点があります。

 

本記事では、できるだけ簡単かつ早く、わかりやすく乱数消費をするための段取りをまとめました。

乱数消費方法

パワポケ10-12で乱数消費をする主な行動や方法は、以下のとおりです。

乱数消費回数が少ないものは上、多いものほど下に記載しています。

ゲーム内の行動 消費回数 備考
オート命名1回 1(※) 1秒に5回できる。
※直前と同じ名前の場合は、違う名前になるまで消費する。この場合は2以上の消費になる
タイトル画面 0(10裏)
0(11裏)
1(12裏)
「パワプロクンポケット~」のところに戻っても1消費
表サクセスを始める 0(10裏)
0(11裏)
207(※12裏)
※正確には上の項の、タイトル画面を経るときと合わせて207消費。
裏サクセスを再開 0(10裏)
150+x(11裏)
1+x(12裏)
xは回復薬系アイテムの数
また、この値を「オフセット」という。
12裏はタイトル画面を経るところの分も含む
ペナントを1日進める 250~300くらい 移動日は多分含まない?交流戦の場合は不明
ペナントのデータ新規作成 約11600(10裏)
約13500(11裏)
約11600(12裏)
スタートからずっとAを押してデータを作成した場合の値。乱数によって少しぶれる
ペナント「つづき」または「けす」を押す 約10500 驚異の回転率を誇る。「つづき」を押した後ファイルを始める必要はない。大量に乱数を消費したい場合に。

赤色の部分は、どうあがいても避けることのできない部分です。
乱数調整をするときは、目標消費回数からこの部分を差し引いたところまでの消費にとどめましょう。(次の項の4-5)

具体的な乱数消費の段取り

原則として、目標消費回数を超えない範囲で乱数消費回数の大きい行動からやっていき、次第に乱数消費回数が中くらい→少ない行動に移っていって目標消費回数にぴったり乗せます。
ただし、オフセットによる消費は必ず通らないといけないことは覚えておきましょう。

 

※途中で、どのくらいの回数の乱数を消費したかが分からなくなった場合は、次の項(パワポケのオート命名から現在の乱数消費回数を逆算するためのPythonコード)を参照。

 

1:目標消費回数まで万単位のとき

目標までの差が約22000~11000くらいになるまでペナントのデータを作ったり、ペナント「つづき」で消費をする。
※10万単位以上の時はカウンターの使用を推奨。

2:目標消費回数までN(大体22000~11000)のとき

すでに作ってあるペナントのデータに入り、(N-10800)/300日分、ペナントの日程を進める。
カレンダーの「ここまで進める」を使っても大丈夫。

3:目標消費回数までN(大体300~2000)のとき

表サクセスに入り、N/300分間、またはN/5秒間、オート命名を押しっぱなしにする。
ただし、超過すると乱数調整がやり直しなので5-10秒くらい早く切り上げる。
また、Nがオフセットの値を下回らないよう注意。
※ストップウォッチ等の使用を推奨。

4:目標消費回数までN(大体0~300)のとき

パワポケ内部乱数観測器の軽量版プログラムでの出力とオート命名を照らし合わせながら、消費回数がちょうど(目標消費回数 – オフセットの値)になるまでオート命名をする。
※上のタイミングでオート命名で連続した名前があってピッタリにできない場合、10か11なら入力をやめる→再び表サクセスから1回オート命名。12なら「パワプロクンポケット~」の画面に1回だけ戻れば解決

5:消費回数がちょうど(目標消費回数 – オフセットの値)になったら

裏サクセスの対象オフセットのファイルに入って目当ての行動をすると、狙った結果が得られる。

今の乱数消費回数がどのくらいかを知りたい場合

下記記事参照。

パワポケのオート命名から現在の乱数消費回数を逆算するためのPythonコード

参考:オフセットの確かめ方(11裏、12裏)

事前準備として、ナマーズ編や秘密結社編のデータは1つ以上空けておきましょう。

 

  1. DS初代かLiteで、DSのホーム画面で本体時間をいじってパワポケ11or12を00:00:10になった瞬間にAを押して起動する
  2. オフセットを調べたい対象の裏サクセスのデータを起動し、すぐにセーブして終わる
  3. 表サクセスを新しく起動する
  4. オート命名を3回行い、出てくる名前を記憶する
  5. 下のリストからその名前が含まれる番号(連番)を探し、最初に出た名前の番号から、ポケ11なら1を引いた値、ポケ12なら208を引いた値が、その裏サクセスのファイルの「オフセット」です。

 

そして、オフセットの値はそのファイルの回復薬系アイテムの数とおそらく一致します。確定ではないですが、最近かなり有力になってきている説です。

なお、5について一般にN番目に出た名前ならば、ポケ11ならNを引いた値、ポケ12なら(207+N)を引いた値が「オフセット」になります。

 

例えば、パワポケ11で最初の名前が新井と出て、そのあとの確認で中川、小川、藤田、橋本と続いたら、新井が163なのでオフセット(=オート命名までに乱数消費した回数)は162となります。

リスト

一番左の数字が、名前と対応する数字(かつ、裏サクセス起動と合わせた乱数消費回数)です。

一番右の数字は、名前を出力するための乱数値。小数第1, 2位で名前が決まります。

145 ★★  佐々木 0.2296831059899495
146 ★★  石井 0.43356620582556915
147 ★★  佐々木 0.2274535586747181
148 ★★  三浦 0.5283992943087339
149 ★★  田中 0.03764797272454917
150 ★★  石田 0.6639458360682984
151 ★★  清水 0.2998453724566805
152 ★★  森田 0.6850715515674284
153 ★★  石井 0.43572195182164536
154 ★★  渡部 0.14382788434905472
155 ★★  前田 0.37587073284268296
156 ★★  藤井 0.49768461024584354
157 ★★  伊藤 0.0525186912161717
158 ★★  藤本 0.8420664200661611
159 ★★  松尾 0.10873084789893184
160 ★★  中村 0.07874415760189692
161 ★★  藤井 0.49734620109889666
162 ★★  小島 0.8347247175135362
163 ★★  新井 0.13714183020390064
164 ★★  中川 0.5685694760144584
165 ★★  小川 0.38686299119096645
166 ★★  藤田 0.3990271180917514
167 ★★  橋本 0.3333506741658375
168 ★★  柴田 0.6916214000227081
169 ★★  加藤 0.0915429685184205
170 ★★  中野 0.5778228972371903
171 ★★  古川 0.19242549424549282
172 ★★  金子 0.6241602133627159
173 ★★  中川 0.5624049523342844
174 ★★  山崎 0.3069064134366845
175 ★★  山田 0.21582925124166646
176 ★★  斉藤 0.2301225377218886
177 ★★  鈴木 0.011266597897518958
178 ★★  河野 0.8225694043045573
179 ★★  近藤 0.45122749353320896
180 ★★  橋本 0.33873463558716493
181 ★★  森田 0.6865396577176158
182 ★★  池田 0.3145106362925913
183 ★★  山田 0.21355850393093595
184 ★★  柴田 0.6938933720489974
185 ★★  中川 0.5646362346911753
186 ★★  高田 0.7982337942941882
187 ★★  加藤 0.0997667438826207
188 ★★  阿部 0.3281030621214905
189 ★★  古川 0.19502227944495096
190 ★★  原田 0.5868326533974086
191 ★★  加藤 0.09058079073927146
192 ★★  岡田 0.4080486141394335
193 ★★  山本 0.0672182165378781
194 ★★  藤田 0.39807138571961903
195 ★★  鈴木 0.016562360398549088
196 ★★  遠藤 0.4715610626184686
197 ★★  松本 0.2554674202539994
198 ★★  加藤 0.09803462291764757
199 ★★  坂本 0.46590130614417385
200 ★★  原田 0.5892259247024505
201 ★★  三浦 0.5273234364595011
202 ★★  内田 0.7660811647233386
203 ★★  藤原 0.5382769596816411
204 ★★  岡本 0.545370072660562
205 ★★  新井 0.1344129441978622
206 ★★  小川 0.3813013751826876
207 ★★  中嶋 0.36243225687021857
208 ★★  中川 0.5631541555688803
209 ★★  原田 0.589854183311381
210 ★★  菅原 0.9352910567296647
211 ★★  佐々木 0.22891795307272012
212 ★★  大塚 0.9138754044439427
213 ★★  鈴木 0.018016369325961526
214 ★★  佐々木 0.2272308387957945
215 ★★  桜井 0.18658254934430127
216 ★★  新井 0.1376202579665629
217 ★★  酒井 0.716809776848628
218 ★★  小川 0.3809005832974862
219 ★★  高橋 0.025406496338425132
220 ★★  岡本 0.5459960836319433
221 ★★  石川 0.3590623087151505
222 ★★  高木 0.7708823921482337
223 ★★  石井 0.4379100132749068
224 ★★  中山 0.6536303116567846
225 ★★  古川 0.19288378858585328
226 ★★  前田 0.37341309447861126
227 ★★  高木 0.7703608582504139
228 ★★  池田 0.31298075209044696
229 ★★  佐野 0.15638095964015225
230 ★★  金子 0.6286289955434747
231 ★★  吉田 0.20911927695470628
232 ★★  高橋 0.021387061376083212
233 ★★  井上 0.26212737897209165
234 ★★  河野 0.8204955469929159
235 ★★  野村 0.12783016487971974
236 ★★  大塚 0.9186527406729428
237 ★★  小川 0.3821536867339923
238 ★★  丸山 0.8095098933340005
239 ★★  菅原 0.9318609313577639
240 ★★  斉藤 0.6353743933830288

参考記事

現在の乱数消費回数:未知 オート命名:既知の場合

現在の乱数消費回数から今後のオート命名を予測するプログラム:

パワポケ内部乱数観測器の軽量版プログラム

現在の乱数消費回数:既知 今後のオート命名:未知の場合

現在のオート命名の様子から乱数消費回数がいくつなのかを調べるためのプログラム:

パワポケのオート命名から現在の乱数消費回数を逆算するためのPythonコード

コメント

  1. asd より:

    パワポケ8の情報があんまりなかったので、ピカニキ計算機とエミュレータのメモリビューを使って、「野手で」しあわせ草でセンス〇を取得する乱数を発掘してきました。(投手はムード○になるのでダメです)
    ちょっと記事違いな気はしますが、パワポケ8関連の記事もないですし、一応どの行動で乱数がいくつ消費されるかを多少は調査してありますので・・・。

    メモリビューで確認したところ、パワポケ8では以下のような乱数消費を確認しました。
    ・タイトル画面の待ちや突破、メインメニューでの待ち->消費0
    ・表サクセスのセーブや既存データ再開、削除->消費0
    ・表サクセスの新規データ作成->消費1(データを作ってデモムービーが流れてデータ作成が完全に完了した瞬間に1消費される。よって、命名画面を開いて閉じたりで結局データを作らないのでは消費は0。)
    ・練習->成功すれば消費1、失敗すればさらに消費1か2(?)(おそらく最初の乱数で成功or失敗を決め、失敗した場合はさらに回して怪我の度合いを決めている。しかし回数はよく分からない。ランダムイベント抽選とごっちゃになってるかも)
    ・勉強->どの勉強も消費0。体力不足で何もできなかった場合でも消費0
    ・1年1月3週定期イベント(大神パイセンからアドバイスもらうやつ)でのAやCなどランダム性がある選択肢を選んだ場合->消費1(?)(特殊能力取得でさらに判定を回すとかもイベントによってはあるはず。大神イベントはAでもCでも消費1だったが)
    ・上記のようなイベントで、B,D,Eのようにランダム性のない選択肢を選んだ場合や、1月1週や2週のように選択肢がそもそもない定期イベント->消費0
    ・行動が終わり、ターンを跨ぐ瞬間->さぁ?よく知らんけど、とりあえず1月辺りは確定定期イベントだし消費0だった。定期イベントが無い時はなんかあるのかもしれんけど
    ・裏サクセス新規データ作成->小さい乱数が消費され、大きい乱数は消費0(だが、小さい乱数も起動時間によって決まるから、「起動時間が正しいか」の検証用に使える)

    ・事前準備に関して
    しあわせ草含む必要なアイテムの持ち込みを済ませたデータを作成し、何もせず1年目1月1週の状態でセーブして終了する。そして各起動時間に合わせる。
    表サクセスと裏サクセスの新規データが作れる枠を1つずつは残しておくこと。ポジションや操作のオートマニュアル選択、イベントカットや名前は好きなようにしていい
    ・生贄データ作成の注意
    裏サクセスは開始タイトルが流れて命名画面に入った時点で小さい乱数の消費がある。小さい乱数によって地雷配置も決まるので、何度も開始タイトル突破したりせず1回でデータを作り切ること。また、タイマーのカウントダウンが始まってから、最初の4秒くらいの間、何度か小さい乱数が動くタイミングがある(その後は15秒くらい待っても動かない)。よって素早く中断するか、5秒程度待って中断するかで小さい乱数が変わる。小さい乱数は練習の成否や大神イベント、しあわせ草に直接は関係ないのだが、1月2週コマンド後ランダムが起こるかはこれで変わってくる。そしてこのランダムイベントのせいで大きい乱数も動いてしまうこともある。よって、裏サクセスの生贄データを作る際は、中断するまで5秒待つこと。設定に関してはキャラ名は適当、ポジションはピッチャー、肌の色等は全てデフォルト。イベントは一切見ないを選択(多分この選択が小さい乱数を動かすことはないが、生贄データ作成の動きなんかみんな一緒なので一応速い方で統一しておく)。
    表サクセスの生贄データは特に注意はないが、こちらもピッチャー、肌の色とか操作とかは全部デフォルト、イベント短縮でスタートさせている(こちらもこの辺の設定は関係ないだろうが一応統一)。

    ・センス〇、体力最大10、仲間2、筋力30を獲得する
    0:16:41に起動 目指すオフセット4
    裏サクセスの生贄データ作成。地雷配置が「1110000」なら成功。セーブして終了。
    表サクセスの生贄データ作成。筋トレ2回、Bやっておくべき練習は?ここでセーブして終了。
    本命データ再開。ここでしあわせ草を使う

    ・センス〇、やる気5、仲間5、筋力32を獲得する
    12:14:12に起動 目指すオフセット12
    裏サクセスの生贄データ作成。地雷配置が「0000000」で、左端の0の1つ上のマスに袋があれば成功。セーブして終了。
    表サクセスの生贄データ作成。筋トレ2回、A一緒に練習しませんか?失敗、筋トレ2回。ここでセーブして終了。このデータを削除する
    表サクセスの生贄データ作成2回目。筋トレ2回、A一緒に練習しませんか?失敗、筋トレ1回。ここでセーブして終了。
    本命データ再開。ここでしあわせ草を使う

    ・センス〇、やる気4、技術31を獲得する
    4:07:29に起動 目指すオフセット17
    裏サクセスの生贄データ作成。地雷配置が「0000111」なら成功。セーブして終了。
    表サクセスの生贄データ作成。筋トレ2回、A一緒に練習しませんか?成功、筋トレ3回でねんざする。ここでセーブして終了。このデータを削除する。
    表サクセスの生贄データ作成2回目。筋トレ2回、A一緒に練習しませんか?失敗、筋トレ3回、勉強1回。ここでセーブして終了。
    本命データ再開。ここでしあわせ草を使う

    ・センス〇、体力最大10、技術30を獲得する
    10:55:21に起動 目指すオフセット14
    裏サクセスの生贄データ作成。地雷配置が「0000000」で、左から2番目の0の1つ上のマスに袋があれば成功。セーブして終了。
    表サクセスの生贄データ作成。筋トレ2回、A一緒に練習しませんか?失敗、筋トレ3回ですじを痛める。ここでセーブして終了。このデータを削除する。
    表サクセスの生贄データ作成2回目。筋トレ2回、A一緒に練習しませんか?失敗、筋トレ1回。ここでセーブして終了。
    本命データ再開。ここでしあわせ草を使う

    上記で十分調べたと思うので、厳密な取る手順は紹介しませんが、その他として一応時間とオフセットだけは確認してあるやつを載せておきます。
    センス〇、やる気4、仲間4、筋力32->5 15 19 8
    センス〇、体力最大9、仲間1、技術30->1 30 11 17
    センス〇、やる気4、仲間2、技術31->18 59 3 17
    センス〇、体力最大9、仲間4、技術30->22 50 44 18

    上記表の読み方
    センス〇、体力最大10、仲間2、筋力30->0 16 41 4は「0:16:41に起動し、オフセットが4の所でしあわせ草を使えばセンス〇、体力最大値10、仲間評価2、筋力30を獲得」という意味。オフセットの4が厳密にどこのことかは僕の判断なので、ちょっとズレがあるかも(その位置俺は3の認識なんだけど!?みたいなことが)。

  2. asd より:

    エミュレータを使用することで、確かに乱数の動きが確認できることが分かりました。使用したのは「desmume0.9.11」です。
    ここに書いてあるような仕組み、計算、値は結局の所何かしらのツール、おそらくはエミュレータのようなものを用いて突き止めたはずで、僕もそれに挑戦しています。
    「パワポケ9TAS 乱数解析を駆使してブギウギ商店街で暴れまわる #1」の最後によれば、とりあえずはエミュレータで乱数関係の調査ができているようなので、本来的にはエミュレータ一本で完全な解析ができるのかもしれません。僕にそんな技術はありませんでしたが・・・。調査したことや手順を書いておきます。
    まずdesmumeでパワポケ13を起動します(作品は何でもいいですが、僕は13を使用しました)。なおdesmumeにおける「起動時間」はPCの時間によって決まります。
    ここで、ピカニキさんの乱数観測機の計算部分を以下のように書き換えて出力コードを足したプログラムを起動時間も合わせて起動します。Nは250くらいで十分かなと思います。
    Y = X
    # print(“Y”,hex(Y))
    # print(“X*A”,hex(X*A))
    # print(“X*A+C”,hex(X*A+C))
    X = (X * A + C) % M
    print(“NewX”,hex(X))
    最速で新規データ作成まで行き、オート命名を2、3回押して、起動時間が合っていることを確認します。パワポケ13は新規データ作成の命名画面突入で188程度の乱数が消費されるので、名前は189番目あたりのはずです。
    ここで、Tool->RAMSearchを起動します。RAMSearchの起動時及びResetボタンで検索をリセットした時は全メモリと値が表示されています。
    まずは検索と表示の設定で、DataSizeを4byteに、Datatype/DisplayをHexadecimal(16進数のことです)に切り替えます。
    次は検索する条件として、ComparisonOperatorをEqual toに、Compare To/ByをNumber of Changeにします。ちなみにCompare To Byはどの値を比較するのかをPreviousValue(1つ前の状態での値)、SpecificValue(今この瞬間の値)、SpecificAddress(アドレス番号)、Number of Change(検索開始から値が変化した回数)で選べます。
    つまり、この検索条件は値が変化した回数をドンピシャに指定して検索するということですね。これで準備完了です。
    何度かオート命名を押します。そして、オート命名を押した回数をCompare To/ByのNumber of Changeの右枠に入れてSearchボタンを押し、特定の回数だけ値が変化していたメモリを特定します。
    これでかなりメモリが絞り込まれます。メモリリストを見ると、どこかで乱数Xの16進数表示とドンピシャな値を持つメモリがあるはずです。8桁ずつ2か所に分かれているのに注意です。
    僕の場合は020BD71Cと020BD720の所にありました。ゲームをリセットしたりdesmumeを起動しなおしても毎回ここでしたが、これは環境によるかもしれません(後述するCheatEngineを使うと値は同じでもアドレスが別でしたし)
    オート命名を押すたびに、ここにある値も動くので、これでゲームをしながら今乱数はどこにカーソルが合っているのかをリアルタイムで確認できます。ちなみにDataType/DisplayをUnsigned(符号なし)に変えるとオート命名の度に0~99の値で変化している部分も見つかると思います。これがX/Mの乱数値の100倍になりますね。
    乱数の動きがリアルタイムで見えれば、ヒントで確かに乱数消費が1なのも確認できましたし、練習で乱数がいくつ消費されるのか(成功は1、失敗は2の模様。ケガアリはちょっとまだ調べていない)などといった新しい検証もより確実になりました。Change回数は正確ではありませんでしたが・・・。(例えば表サクセス開始は188回乱数が進むはずだが、内部的には一斉に乱数が回っているのか、Changeの増加は1だけ。練習失敗が2というのもChangeの増加は1だったので、乱数値そのものを見て確認した。)
    このようにして乱数がどこに収納されているのかは突き止めることができました。
    さらにTool->View Memoryでメモリビューを開き、Addressをさっき見つけた乱数Xのあるところのアドレスを入力し、Goを押せば、その部分のメモリが見えます。リトルエンディアン形式の並びなのでちょっと違和感はありましたが。すぐ近くにはサウンドテストで頻繁に動く値(大きい乱数の部分の直近だし、小さい乱数の値なのかもしれない。また、この小さい乱数(?)ゾーンはゲームを再起動した直後は起動時間の16進数表記が示される)や乱数器のAやCにあたる値が大きい乱数のすぐ近くに固まって格納されているのが確認できました。
    近くを探すと1フレームごとに動いている値(フレームのカウンターか何か?)などもありましたね。
    また、単に今この瞬間の乱数値を見るだけでなく、Tool->RAMWatchのAddCheatで乱数の格納されたメモリの値を固定してしまえば、乱数生成の仕組みを無視して常に一定の値の乱数を生成できます。これをすると、○○%で獲得などとされている要素が厳密絶対的に何%か検証することもできるかもしれません。
    また、乱数の事以外にも、似たような手順で値や変化からメモリの絞り込みをすれば、ゲージでしか表示されないあの値はいくつなの?というようなことも検証できたりします。例えば、パワポケ13のサクセス開始時の根性の値は10(開始時の+1で11になる)だと突き止めたのですが、これも実機で頑張れば分からないことはないでしょうが、検証が大変そうです。あるいは値の書き換え(チート)とステートセーブを駆使して「根性45で成功」というのが本当なのか調査したり、好感度のステルス上昇を見逃さなかったりもできそうです。

    ただし、今できている解析はここまでです。そもそもとして絞り込みの段階ではまだまだ候補があったメモリから「この部分が乱数にコレコレこういう部分で関係する値だ」と分かるのは答えが分かっているからですし、値が見れるというだけで、どういう計算でどうやって使われているのかはこれでは分からないままです。
    しあわせ草のアルゴリズムがどうだとか、乱数の生成はこれらの値をどういう計算にかけて求めるモノなのか、そういった具体的な計算の仕方、プログラムの動かし方が事実として分かっている以上、調べる方法も何かあるはずだとは思うのですが、それはまだ分かっていません。
    逆アセンブラだとか、色々使ってはみたのですが、謎は深まるばかりです。
    しあわせ草や乱数生成のこと自体はもう判明してるんだからそこは別にいいのですが、そういう仕組みの解析の仕方を確立することで、もっと未知の部分の仕組みを解明できるんじゃないかなと考えています(例えば10と13ではしあわせ草の特殊能力に関する部分が微妙に違いましたし)。

    この手法にたどり着く前の右往左往していた段階で、「Cheat Engine」とか「うさみみハリケーン」という解析ソフトも見付けました。なんか変なサイトで入手するソフトでウイルスとか心配なので捨てPCで使ってますが。CheatEngineの方は勝手にAvast Free Antivirusとかいうソフトがくっついてきましたし。
    まぁ、それはさておき、この2つを使わずとも上記に挙げたような現時点で「できる」と分かった事に関しては結局Desmume単体でできたのですが(一番初めは「エミュレータ 解析」と調べて出てきたこの2つのソフトを使ってやっていたが、後々desmume単体でできるじゃないかと気づいた)、CheatEngineの方にはメモリがどのメモリからアクセスされたのかを調査する機能があるようです。
    それを使って乱数の計算の仕方が分かったのか?というと、結局分かってはいないのですが、機能的に言えばこういう機能が解析のカギなのかなぁ?とは思っています。「パワポケ9TAS 乱数解析を駆使してブギウギ商店街で暴れまわる」シリーズに出てきたツールにDesumume以外のツールは無かったんだから、必要ないのかもしれませんが。

    また、詳しくは分かりませんが、解析自体はできなくとも、LuaScriptというのを使えばいい結果が出るまで乱数調整を自動で色々お任せできるらしいです。最近ニコニコにパワポケTASを出しているポテムキンさんが動画中にそんなことを書いていました。これも解析に使えるかもしれません。僕は使えませんが。

    • asd より:

      Luaを使えば、いい乱数を引くまでの操作だとか、めんどくさい操作だとかを自動で色々と任せることができるほか、
      oupoの日記というブログの「DeSmuMEのLua Scriptingを試してみたよ」という記事によれば、「あるメモリが書き換えられたときの実行アドレスを特定」とやらができるそうです。単にそういうワードがあったのを見つけたというだけで、それはどうやるのか、どんな効果があるのかなどはもっと調べたり試したりしてやってみるしかありませんが、ひょっとしたら乱数の仕組みはこうやってLuaで調査されたのかもしれません。
      Luaの練習はとりあえずは「Luaスクリプト」と検索したら基本文法的な話は出てきたし、コンパイラの準備だとかをしなくとも「ideone」というサイトでとりあえずif文やprint文くらいは手軽に動かすこともできました。
      ただ、やっぱりエミュレータ用の関数(frameadvanceとか)が色々あるみたいで、そういうのは専門に調べる必要がありそうです。とりあえずのスタートになりそうな「TAS動画作成のための基礎Lua講座 ~導入編~」という動画をニコニコで見つけました。
      Luaはエミュレータのあれでもこれでも使える便利な言語のようですが、desmumeに関してはあの命令が使える使えないとかちょっと毛色が違うらしいです。これもまだ軽く調べたらそんな話があったというだけで、何がどう違うのかはこれまた調べるしかないんですが・・・。
      GBAエミュレータでは特に何の設定もせずともLuaが使えましたが、desmumeでは早速動画のようにやろうとすると「lua51.dllが無い」などと言われ、使えませんでした。この辺は「desumume lua51.dll」と検索したら、この件についてのdesmumeフォーラムの対策スレのようなものが出てきました(英語)。ここでの流れを見てあれこれやったらとりあえずはHelloWorldくらいは動かせるようになりました。インストールが関わる話で、あまりに具体的に「どのURLのどれをインストールしてどうした」というような話は差し控えておきます。何か問題が起きても良くないので。
      あとは、チャレンジですね・・・。そもそものLuaで本当に解析ができるのかすらまだちゃんとは分かっていないので・・・。

      • asd より:

        Luaを使うんじゃないかだの逆アセンブラじゃないかだの、話があっちゃこっちゃに行ってしまいましたが、
        ちびロボTASをしているゲストCもちさんが、ちびロボで
        単に「ここに乱数の値がある」というだけでなく、そこから「どうやって乱数の値は計算されているのか?」を突き止める方法を書いていました。
        NO$GBAというエミュレータのメモリブレイク機能とやらを使ってルーチンを割り出し、そのアセンブリ言語を解読するらしいです。

  3. asd より:

    ピカニキがGBAパワポケに手を出しているのも記事を書いているのも見たことがないので、あんまり参考にならない情報かと思いますが、
    GBAパワポケでの乱数調整は難しいことが分かりました。
    メモリビューだの逆アセンブラだの、乱数調査の根本的なやり方が分かっていないので、あくまでも簡易的な検証なのですが、
    エミュレータのステートセーブとコマ送り機能でGBAパワポケのランダム要素色々を試した所、
    練習の成否、あやしい薬の効果、ランダムイベントの起こり、結果にランダム要素があるモノの当たり外れ、
    これらは全てフレームごとに変わりました。コマ送りで全く同一のフレームでボタンを押せば確かに同じ結果が出ましたが、適当にステートセーブとロードで同じボタンを押すだけでは毎回結果や成否が変わりました。それは厳密なフレームが違うからですね。
    DSだとどれだけ待ってもイベントや練習の成否は同じでしたが、GBAはそうはならないようです。

  4. かい より:

    今までの記事にはないフレイムイーターのMP乱数が知りたいです
    YouTubeであげられてる動画と同じ性能のフレイムイーターと同じ性能の乱数が見当たらないので

    • iid01 iid01 より:

      >>かい さん
      武器の合成原理メカニズムが書いてある記事をもとに乱数探索コードを改変して自分で作った方がずっといい武器を作れます
      あるいはドゥームズデイ用の乱数で作っても同じようなものができます

  5. より:

    3DS でも出来ました

  6. asd より:

    ピカニキさんの過去記事(はてなブログの方の「パワポケシリーズ乱数とそのPythonでの実装による観測」)では、乱数観測器に使うAとCの値は10~12で共通であるという記載で、13や14ではどうなのかは記載がありませんでしたが、
    AやCの値、名前配列の内容や順序、計算方式は13や14でも同じっぽいです。

    オート命名の種類自体は同じことや、起動時刻によってランダム要素を一定の結果を出せることから、結局は12以前も13以降も似たようなモノだろうという目星をつけ、
    0:00に時計をセットし最速でパワポケを起動し、
    表サクセスの新規データ作成のオート命名をいくつか試したところ、順序が例の乱数解析器から出る物と一致しました。
    h=0,m=0,s=10か11で計算を合わせ(起動は人力なので1秒ズレることが結構ある)、パワポケ14なら1番目から、パワポケ13なら191番くらいからの名前が一致します。

    問題は・・・消費乱数がいくつかですね。。
    パワポケ14はタイトル突破も表サクセス開始も0っぽいんですが、(ただしまだまだ未検証)
    パワポケ13の方が非常に不可解です。
    最初は191番から始まること自体は間違いないんですが、その後命名画面を閉じてもう一度表サクセスの命名画面に入るとき、消費されるのが190*n???みたいな、結構飛んだ値になります。タイトル画面は0か1、表サクセス開始は190*n???っぽいんですが、正確な計算式はまだまだ調査が必要そうです・・・。また調査が進んだらコメントしに来ます・・・。

    • asd より:

      しばらく調査していますが、とりあえず途中経過の報告を
      (まだまだ仮説段階です。どういう経過でや方法で検証をしたのかは一旦省きます)
      パワポケ13での消費乱数は
      メニュー画面待機(サクセス、野球、とかが出てるとこ):2秒ごとに2
      タイトル画面突破:初回0、2回目以降約190
      表サクセス新規データ作成(逆襲球児が出た時点で消費。その後実際データを作るまで行くか、即戻るかは関係ない):約190(起動から最速で行くと189の名前が出るので実際はもう少し少ないはず。メニュー待機のせいで正確な値がまだつかめていない)
      既存の表サクセスデータ再開:約190

      メニュー画面待機が曲者で、訳あってタイトル画面で長らく放置したときに、名前の位置が190前後を大きく超えたこと、そういえばチハヤTASでしあわせ草の乱数調整のためにメニュー画面待機をしていたことからアタリを付けました。このせいでサクセス開始とかが「約」190だったわけですね。

      また、(少なくとも初めて突破するまでは)タイトル画面ではいくら待っても乱数は消費されない、
      「起動時間」は「違法な配信はやめましょう」の画面をA連打で早く閉じるか、おとなしく待つかに左右されない。リセットするとタイトル画面に戻るが、少なくとも初回起動時はタイトル画面到達の瞬間ではなく、ソフト選択をした瞬間に「起動時間」のセットをしている。
      「起動時間」をあの乱数観測機と正確に合わせたい場合、時計の針がぴったりの時に起動するよりちょっと早めた方がいいようです。少なくともパワポケ13では。
      例:0:00:15秒に起動したい場合
      ->時計が0:00:14秒を指してから後半になった時にAを押してソフトを起動する。ソフトが起動し切るまでの時間で15秒を指している針が見えるが、16秒になるのは暗転で見えない
      そんなタイミングがベストなようです。

      • asd より:

        休み休みですが、相変わらず、調査は続けています。
        まず、パワポケ9とパワポケ13でしあわせ草の仕組みがほぼ全く同じらしきことが判明しました(特殊能力のオフセットがちょっと違う)。具体的な仕組みは「パワポケ9TAS 乱数解析を駆使してブギウギ商店街で暴れまわる #5」のものです。これにより、センス〇のもっといい乱数をそのうちまたコメントしにくるのでよろしくお願いします。
        また、逆にしあわせ草の仕組みが分かったことで、ヒントコマンドや練習の乱数消費もまだ仮説ですが明らかになってきました。
        セーブ->消費0(今までセーブで消費1かと思っていたが、違う。)
        ヒントコマンド->消費1(序盤ヒントが一種類の時も消費する)
        練習成功->3?(おそらく練習成功自体は1、その後の日を跨ぐところで、コマンド後ランダムイベント抽選で消費1、コマンド前ランダムイベント抽選で消費1)

タイトルとURLをコピーしました