パワポケ12 秘密結社編でMPかつ性能の良い虹色の腕輪、古代樹装備を粘るためのよい起動時間、乱数消費回数を出力してくれるPythonコードのサンプルです。
ご自由にお使いください。
合成原理は各項のコードの手前に示す参考記事をご覧ください。
プログラム
タイトルの通りの装備を粘るための起動時間、乱数消費回数(に1を足した値と、あとMP判定の乱数値)を出力してくれるプログラムとなります。
虹色の腕輪
合成原理はパワポケ12 ステータス+30前後の虹色の腕輪まとめを参考にしてください。
A = 0x5d588b656c078965 C = 0x0000000000269ec3 M = 2 ** 64 b=0 bb=0 bb2=0 b3=0 bb4=0 b5=0 b6=0 b7=0 b8=0 b9=0 b11=0 b12=0 b13=0 b14=0 b16=0 b17=0 b18=0 b19=0 #1:付加能力の乱数列の合計 n=6 nn=30 for i in range(0,n): b += A**i % M An=A**n% M Cn=(C*b)% M for i in range(0,nn): bb += A**i % M Ann=A**nn% M Cnn=(C*bb)% M #2:攻撃判定 An1=A Cn1=C An2=A**2%M Cn2=Cn1*(A+1)%M An3=A**3%M Cn3=Cn2*(A+1)%M for i in range(0,6): b6 += A**i % M An6=A**6% M Cn6=(C*b6)% M for i in range(0,7): b7 += A**i % M An7=A**7% M Cn7=(C*b7)% M for i in range(0,8): b8 += A**i % M An8=A**8% M Cn8=(C*b8)% M for i in range(0,9): b9 += A**i % M An9=A**9% M Cn9=(C*b9)% M for i in range(0,11): b11 += A**i % M An11=A**11% M Cn11=(C*b11)% M for i in range(0,12): b12 += A**i % M An12=A**12% M Cn12=(C*b12)% M for i in range(0,13): b13 += A**i % M An13=A**13% M Cn13=(C*b13)% M for i in range(0,14): b14 += A**i % M An14=A**14% M Cn14=(C*b14)% M for i in range(0,16): b16 += A**i % M An16=A**16% M Cn16=(C*b16)% M for i in range(0,17): b17 += A**i % M An17=A**17% M Cn17=(C*b17)% M for i in range(0,18): b18 += A**i % M An18=A**18% M Cn18=(C*b18)% M for i in range(0,19): b19 += A**i % M An19=A**19% M Cn19=(C*b19)% M #3:命中判定 for i in range(0,3): b3 += A**i % M An3=A**3% M Cn3=(C*b3)% M for i in range(0,5): bb4 += A**i % M Ann4=A**5% M Cnn4=(C*bb4)% M #4:SP判定 for i in range(0,5): b5 += A**i % M An5=A**5% M Cn5=(C*b5)% M #5:乱数探索部分。時間h、探索数N、攻撃のvalue12と命中のvalue34 for h in range(0,24): #何時から何時を探索するか for m in range(0,60): for s in range(-1, 59): N = 200000 X_n = 0 X_nn = 0 X = h * (2 ** 16) + m * (2 ** 8) + s + 1 #(nn-n)個の乱数値の和をvalue、攻撃判定の2つの和がvalue12、命中判定の2つの和がvalue34 value = 0 value12=0 value34=0 for i in range(0, N): X = (X * A + C) % M #6:MP判定、攻撃判定、命中判定、SP判定、付加能力判定 if X/M < 0.02 and ((An1 * X + Cn1) % M)/M > 0.2 and ((An2 * X + Cn2) % M)/M>0.2 and ((An3 * X + Cn3) % M)/M > 0.2 and ((An5 * X + Cn5) % M)/M < 0.4 and ((An6 * X + Cn6) % M)/M >0.6 and ((An7 * X + Cn7) % M)/M > 0.8 and ((An8 * X + Cn8) % M)/M>0.8 and ((An10 * X + Cn10) % M)/M < 0.4 and ((An11 * X + Cn11) % M)/M > 0.6 and ((An12 * X + Cn12) % M)/M >0.8 and ((An13 * X + Cn13) % M)/M > 0.8 and ((An15 * X + Cn15) % M)/M < 0.4 and ((An16 * X + Cn16) % M)/M>0.6 and ((An17 * X + Cn17) % M)/M > 0.8 and ((An18 * X + Cn18) % M)/M >0.8: print(10000 * h + 100 * m + s, i+1, X/M) print("★", value) break
合成時はアップする能力が重複しないように、合成原理を予習しつつ乱数観測器で事前に確認してから乱数調整を行いましょう。
古代樹装備
合成原理はパワポケ12 ステータス+35以上の古代樹装備まとめを参照してください。
A = 0x5d588b656c078965 C = 0x0000000000269ec3 M = 2 ** 64 b=0 bb=0 bb2=0 b3=0 bb4=0 b5=0 b6=0 b7=0 b8=0 b9=0 b11=0 b12=0 b13=0 b14=0 b16=0 b17=0 b18=0 b19=0 #1:付加能力の乱数列の合計 n=6 nn=30 for i in range(0,n): b += A**i % M An=A**n% M Cn=(C*b)% M for i in range(0,nn): bb += A**i % M Ann=A**nn% M Cnn=(C*bb)% M #2:攻撃判定 An1=A Cn1=C An2=A**2%M Cn2=Cn1*(A+1)%M An3=A**3%M Cn3=Cn2*(A+1)%M for i in range(0,6): b6 += A**i % M An6=A**6% M Cn6=(C*b6)% M for i in range(0,7): b7 += A**i % M An7=A**7% M Cn7=(C*b7)% M for i in range(0,8): b8 += A**i % M An8=A**8% M Cn8=(C*b8)% M for i in range(0,9): b9 += A**i % M An9=A**9% M Cn9=(C*b9)% M for i in range(0,11): b11 += A**i % M An11=A**11% M Cn11=(C*b11)% M for i in range(0,12): b12 += A**i % M An12=A**12% M Cn12=(C*b12)% M for i in range(0,13): b13 += A**i % M An13=A**13% M Cn13=(C*b13)% M for i in range(0,14): b14 += A**i % M An14=A**14% M Cn14=(C*b14)% M for i in range(0,16): b16 += A**i % M An16=A**16% M Cn16=(C*b16)% M for i in range(0,17): b17 += A**i % M An17=A**17% M Cn17=(C*b17)% M for i in range(0,18): b18 += A**i % M An18=A**18% M Cn18=(C*b18)% M for i in range(0,19): b19 += A**i % M An19=A**19% M Cn19=(C*b19)% M #3:命中判定 for i in range(0,3): b3 += A**i % M An3=A**3% M Cn3=(C*b3)% M for i in range(0,5): bb4 += A**i % M Ann4=A**5% M Cnn4=(C*bb4)% M #4:SP判定 for i in range(0,5): b5 += A**i % M An5=A**5% M Cn5=(C*b5)% M #5:乱数探索部分。時間h、探索数N、攻撃のvalue12と命中のvalue34 for h in range(0,24): #何時から何時を探索するか for m in range(0,60): for s in range(-1, 59): N = 200000 X_n = 0 X_nn = 0 X = h * (2 ** 16) + m * (2 ** 8) + s + 1 #(nn-n)個の乱数値の和をvalue、攻撃判定の2つの和がvalue12、命中判定の2つの和がvalue34 value = 0 value12=0 value34=0 for i in range(0, N): X = (X * A + C) % M #6:MP判定、攻撃判定、命中判定、SP判定、付加能力判定 if X/M < 0.02 and ((An1 * X + Cn1) % M)/M > 0.2 and ((An2 * X + Cn2) % M)/M>0.2 and ((An4 * X + Cn4) % M)/M < 0.4 and ((An5 * X + Cn5) % M)/M >0.4 and ((An6 * X + Cn6) % M)/M > 0.8 and ((An7 * X + Cn7) % M)/M>0.8 and ((An9 * X + Cn9) % M)/M < 0.4 and ((An10 * X + Cn10) % M)/M > 0.4 and ((An11 * X + Cn11) % M)/M >0.8 and ((An12 * X + Cn12) % M)/M > 0.8 and ((An14 * X + Cn14) % M)/M < 0.4 and ((An15 * X + Cn15) % M)/M>0.4 and ((An16 * X + Cn16) % M)/M > 0.8 and ((An17 * X + Cn17) % M)/M >0.8: print(10000 * h + 100 * m + s, i+1, X/M) print("★", value) break
合成時はアップする能力が重複しないように、合成原理を予習しつつ乱数観測器で事前に確認してから乱数調整を行いましょう。
乱数消費方法
パワポケ12で乱数消費をする主な行動や方法は、以下の通りです。
ゲーム内の行動 | 消費回数 | 備考 |
オート命名1回 | 1 | 1秒に5回出来る。直前と同じ名前の場合は、違う名前になるまで消費する。この場合は2以上 |
電脳野球編デモ | 207 | 正確には、デモを見るためにタイトル画面を経るところでの1回を含めて207回消費 |
タイトル画面 | 1 | パワプロクンポケット~という画面に戻った場合もタイトル画面を経るので1回消費 |
秘密結社編を再開 | 約5-30 | セーブデータによって違う。この値をオフセットという。調べ方は12裏 乱数 |
ペナントのデータ新規作成 | 約11600 | 大量に乱数を消費したい場合に。回によって結構ブレる。データ消去時は下と同じ |
ペナント「つづき」→「このファイルではじめますか?」→Bで戻る | 約10500 | 驚異の回転率を誇る |
オフセットの調べ方は外部サイト(12裏 乱数)に任せますが、起動時間の解釈の仕方が本サイトと違うことに注意してください。本サイトはDS初代かLiteでパワプロクンポケット12でAを押す瞬間、外部サイトはAを押して1秒後のソフト起動時間となっています。
今どれくらい乱数を消費しているかを観測する乱数シミュレータ、というより乱数観測器についてはこちらの記事をご覧ください:【改良版】パワポケの内部乱数観測器をPythonで実装してみた
一般の合成原理を知りたい場合、参考サイトとして12裏 合成をご覧ください。
コメント
参考になる記事をいつもありがとうございます。
今回の2つのプログラムですが、pythonで動かそうとしたらエラーが出てしまいました。もし良かったら解決策等教えていただきたいです。
>>paさん
エラーメッセージが分からないと何とも言えませんが、インデントの位置は気を付けた方がいいと思います。