パワポケ10でPカードを0時0分0秒に開始するとどうあがいても3位にしかなれない配牌になるというバグ

パワポケ10には「Pカード」という、ドンジャラみたいなゲームが存在する。

 

簡単なルールを書いておくと、10種類のカードがそれぞれ8枚、オールマイティが1枚の計81枚の手札から初めに4人(うち親1人)のプレイヤーに8枚(親は9枚)配られて、手札をもらう/捨てるを繰り返して、3枚×3組をつくりつつ、かつできるだけ高ポイントの「役」をつくってあがり、ポイントを稼いでいって最後にポイントが多い人が勝利する、っていうミニゲーム

 

そのミニゲームだけど、DS時間がちょうど00:00:00になったときにPカードを開始するとこれから画像に挙げるように奇妙な現象が起こるっていう記事。

(23:59台でゲームを起動しつつストップウォッチや秒針用の時計でDS時間を記憶しておき、ミニゲーム画面で4人目のキャラを選ぶタイミングがDS時間の00:00:00であればよい。)

 

00:00:00にゲームを開始することで、そのミニゲーム内で使われる64ビットの乱数値は

0x0000 0000 0000 0000 に固定されるのでそれが関係しているはず。

 

そうすることでどんな試合展開になるのか、画像を見てみる。

最初のはまだ普通の画像。

 

f:id:iid01:20190419222702j:plain

Pカード 初期配牌

 

ルール的な説明:下画面のカードのだちょう、ネコ、犬、羊、うんちとかが計10種類。このうち3種類を3枚そろえれば「あがり」ができる。

 

上画面中央のレインボー人形が「ほるひす」という、オールマイティのカード。どれか(どれでも)1種類のカードの代わりに用いて「あがり」にできる。

 

しばらくターンが進んだときの画像がこちら。ここからが本題。

なんという素敵な配牌()

 

f:id:iid01:20190419222933j:plain

Pカード 00:00:00に開始時の試合展開

 

4人すべてのプレイヤーが10種類のカードがどれもぴったり2枚ずつ回ってきた、という感じになっていて、こんなカードの山からの引き、CPUの捨てカードではどういう行動をしても「あがり」をするのは不可能。

 

この回の結果(あがりなし)の画像は以下の通り。見事な点対称。

 

f:id:iid01:20190419223137j:plain

ガリなし、全員同じ手札、全員2枚×10種類が回ってきた

 

この手札と山札の引きでどうやってあがるのか。

 

ガリなしだと次にまた仕切り直しで親が反時計回りの人に代わって、手札もまた(通常プレイなら)シャッフルされるはずなんだけど、00:00:00開始時に限ってはまた全く同じ手札で始まることになる。

そのため、これと同じ試合展開が4回続くことになる。

4回終了後は全員4回引き分けということになるので、その場合の順位決めは規定により「親を務めた順番が早かったプレイヤー順」になる。00:00:00開始時は自分の向かいにいるCPUが親なので、自身が親をやるのは3番目になるので、どうあがいても3位にしかなれない。

 

 

あと不思議な点として、00:00:00開始だと全員が目を閉じているという現象が常に起きていること。下の画像参照。

 

f:id:iid01:20190419224029j:plain

zzz

 

寝ながらPカードをプレイするかわいいキャラクターたち。

 

通常プレイでは目を空けていて、まばたきをすることがあるのでそれに使う乱数が00:00:00開始で固定されたのかも?

 

試合展開、というより山札の引きも00:00:00開始で乱数値が0x0000 0000 0000 0000となったものが「アガリなし」によっておそらくずっと固定されたままになり、4回とも全く同じになったと考えられる。(通常プレイだと「あがり」をしたタイミングでDS時間を参照してその乱数値を次の試合の山札の並びに使う。参考:https://www.nicovideo.jp/watch/sm17930409

 

この現象、おそらく乱数値0x0000 0000 0000 0000で開始したときに更新されるタイミングがないままどうあがいても3位で試合終了するまで続行してしまう、ってなっているのは開発陣の確認忘れというかバグというか、経験したことある人はいるんだろうか、っていう疑問がでてくる(経験する確率は単純計算で1/86400。高いのか低いのか)

 

ということで、実用性は特にない奇妙なバグを紹介しました。

 

以 上

ピクミン2 埋まりお宝を掘るのにかかる時間

ピクミン2でお宝を掘るのに必要な作業量とかがまだ出されていないっぽいので、大足の穴とか新参者の試練場とかで検証してみた。

 

 

この記事を見に来た人はたぶん結論というか結果が目当てだと思うのでそこから書く。

 

 

完全に埋まったお宝はHP5850で、最初の700を削ると白以外でも掘れるようになる

完全に埋まったお宝はHPが約2割、約4割、約6割を削ったところで地面から引っ張るような音が鳴る。おそらくピクミンが削ったHPが1200、2400、3600のときに鳴ってる。状況とかによっては鳴らない、またはかき消されることも。

 

頭が出ているお宝はものによってHPがバラバラ。例えばタケノコはHP4800だった

タケノコはHPの25%、50%、約97%を削ったところで地面から引っ張るような音が鳴った。1200、2400、4650の時に鳴ってると思われる。他のはまだやっていない

 

前提条件として、各ピクミンの攻撃1回あたりのダメージは、青白黄は10、赤は15、紫は20。ピクミンはゲキカラ状態でないときは2秒に3回(1秒に1.5回の割合)攻撃ができる。ゲキカラ状態のときは1秒に3回攻撃ができる。ただし攻撃1回あたりのダメージは全員10に統一。

発掘時も、ゲキカラや各ピクミンの火力の差がそのまま作業量に反映されると考えてよい。葉、花状態では作業量に差はない。

参考までに、チャレンジモードの間欠泉の体力は4000。あの人の庭とか土とんの洞窟のような一般的な硬さの壁は1段階当たりHP4000。それが3段階分。

 

 

以上。

 

 

検証方法については、大足の穴で白1赤25ゲキカラで掘らせてみたり、新参者の試練場で白1匹でタケノコとそれ以外を掘らせてストップウォッチでタイムを計った。

(タケノコ測った後に、時計の盤面とか歯車とかはどう考えてもタケノコとHP同じに思えないって気づいたのは内緒。だれかやって)

 

白1赤25は、約47秒で赤が反応。47×10×1.5≒700。5850のうち、約12%分にあたる。

白以外でも掘れる部分が、白でしか掘れない部分の7.3倍くらい。

タケノコは80秒、160秒、310秒でズズズ...という地面から引っ張り出す音、320秒で発掘終了。

地中の宝は80秒、160秒、240秒で音、390秒で発掘終了。

 

 

応用としては、青白黄が1秒あたりに与えられるダメージが15なのでこれを基準として赤は1.5倍、紫は2倍、ゲキカラピクミンは色関係なく2倍ということを考慮して、まず基本から考える:

 

タケノコが4800÷15P = 320/P [s] = 160/P [count]

間欠泉は400/3P [count]、壁はこれ×3段階。ただし、countはチャレンジモードに出てくるタイムの単位で、2秒(=60フレーム)にあたる。Pは「重み付き作業ピクミン数」で、非ゲキカラ青白黄は1匹あたり1、赤は1.5、紫は2で、ゲキカラ中は色関係なく2としてカウントした合計値とする。

 

次に本題、地中宝。白と白以外で最初のHP700への作業可否がかわるので丁寧に:

 

最初の700が、700÷15Pw = 140/3Pw [s] = 70/3Pw [count] で、

次の5150が 5150÷15P = 1030/3P [s] = 515/3P [count]

 

ただし、Pwは「重み付き作業白ピクミン数」で、ピクミン1匹あたりについて白以外を0、非ゲキカラ白を1、ゲキカラ白を2とカウントした合計の値

 

これら2つを足した値、つまり四捨五入で、地中宝の発掘にかかる時間は

 

47/Pw + 343/P [s] ≒ 23/Pw + 172/P [count] 

 

となる。

 

 

例えば、巨人のトイレで白5青44にゲキカラをかけて全員で地中宝を掘ると、

Pw=10、P=98より

 

47/10 + 343/98 ≒ 4.7 + 3.5 = 8.2 [s] = 4.1[count]

 

三色試練場で白5紫2にゲキカラをかけると、途中でゲキカラが切れないとした場合、

Pw=10、P=14より

 

47/10 + 343/14 ≒ 4.7 + 24.5 = 29.2[s] = 14.6[count]

 

新参者の試練場で白18紫6にゲキカラをかけると、途中でゲキカラが切れない場合

Pw=36、P=48より

 

47/36 + 343/48 ≒ 1.3 + 7.1 = 8.4[s] = 4.2[count]

 

花園を荒らすもので白10赤5紫2で最後まで掘る場合は

Pw = 10、P=21.5より

 

47/10 + 343/21.5 ≒ 4.7 + 15.9 = 20.6[s] = 10.3[count]

 

 

ということになる。

 

 

長くなったけど、以上になります。

 

それでは。

パワポケ12 秘密結社編 乱数調整で強い虹色の腕輪を作る方法(実践編)

ここでは、前記事に続いていくつかの強い虹色の腕輪が作れる乱数列を紹介し、そのときの乱数調整の方法と原理を説明する。

 

まずは前記事であったものについて。

f:id:iid01:20190320020011j:plain

虹色1

この虹色ができた時の乱数列は次の通り。

f:id:iid01:20190320194322p:plain

乱数その1

2561番目から25個くらいの乱数値を使っていて、2561がMP判定、2562-2564がベースステータスの+3×3の内容判定で、今回は器用+3、精神+6。

その後20個くらいでボーナス判定、今回は器用+7以上、素早さ+9、精神+4以上。

 

ちなみに同じ条件で古代樹の帽子を作ると力+12、器用+2、精神+12。

 

気になる乱数調整方法については、DS初代かLiteで20:23:21に起動、2561番目の直前である2560回分の乱数を消費すればよい。

 

詳細は下に書くけど、この例では2560=207×12+76より、電脳野球デモを12回起動→入力をやめるを繰り返し、12回目の起動の時にオート命名を(75-OFF)回行って、入力をやめて秘密結社を起動すればちょうど2560個消費できる。(OFFが何の値なのかは後述)

 

乱数消費方法の詳細については、外部サイトに投げる↓

www8.atwiki.jp

 

手っ取り早く補足すると、電脳野球編のデモを見ると、タイトル画面に戻るのと併せて207個消費。

オート命名をすると通常1個、直前と重複したら2個以上消費。(先ほど76でなく75-OFFなのは1回重複したから。)

タイトル画面(パワプロクンポケット~って子供が言う画面)に戻ると1個消費

さらに、秘密結社編を起動するときにオフセットとして(本ブログではこの値をOFFとする)1~30くらい消費する。未確定だけど、回復薬系のアイテムの個数+1ではないかという噂があるが不明。このオフセットの値はやはり上のサイトで調べてください

(上のサイトの起動時間は、このブログと違って純粋な「ゲーム内起動時間」。つまり、DS初代またはLiteなら、「パワプロクンポケット12」に合わせて1秒前にAをおすとうまくいく)

 

 

 

他の虹色も見てみる。

f:id:iid01:20190320205652j:plain

虹色2

そのときの乱数

f:id:iid01:20190320205812p:plain

乱数その2

ベースステータスが力+6、精神+3でボーナスステータスが力+4以上、素早さ+9、精神+7以上

調整方法は11:56:16に起動、電脳9回、85-OFF回オート命名

(1948=207*9+85)

 

古代樹の帽子を作ると体力+6、力+10、精神+2、ワナ探知+3になる

 

 

 

次の例。調整方法がお手軽

f:id:iid01:20190320211225j:plain

虹色3

 

f:id:iid01:20190320211446p:plain

乱数その3

ベースステータスは力+6、素早さ+3、ボーナスステータスは体力+3、器用+10以上、素早さ+7以上。

調整方法は07:50:14に起動、電脳1回、オート命名22-OFF回。

 

 

 

とりあえず虹色関連の代表例と調整方法などはここまで。いつか強いのができれば他のも上げたりするかも。

 

それでは。

パワポケ12 秘密結社編 乱数調整で強い虹色の腕輪を作る方法(導入編)

パワポケ12の裏サクセス 秘密結社編は前作ハタ人間編を踏襲してRPG風のゲームモードになっていて、ストーリー進行と素材集めを進めるにつれてより強力な武器、装備を作れるようになり、その作成を繰り返してパーティー強化、ストーリー進行を繰り返していく。ゲーム内で作れる一番強い装備の1つに、ステータスの大幅強化が期待できる「虹色の腕輪」がある。

しかし、この装備をはじめとして、武器装備の合成はランダム要素が大きく影響する「運ゲー」であり、基本は「いい性能のができるまで作り続ける」ことになる。

ただ、それでは時間と貴重な素材の浪費なので、本記事では前の記事(バトルディッガー編で強い主砲を粘る記事と、乱数探索プログラム)も参考にしつつ、高性能の虹色の腕輪の粘り方、その時の乱数列と合成時の使用方法(分かっているところまで)を説明する。

 

 

さっそく実験プログラムとその結果を紹介。

 

f:id:iid01:20190320013744p:plain

12裏 強い虹色探索プログラム

 

10裏で使ってたのと大差ない。後述の12裏合成でMPができるときの判定文を追加したくらい。18個の乱数列の和(=lim)が一定以上となるものを探す。目安は12~14くらいがいい。

このプログラムの実行結果は以下の通り。最後のbreakは不要かもしれんね

 

f:id:iid01:20190320014433p:plain

実行結果

 

2562番目~2579番目までの和が14.59くらいで平均約0.76。真っ青。

一番左の202321っていうのは、起動時間20:23:21ってこと。

また、後述の理由で重要になるのだが、真っ青な乱数列の少し前、2561番目に「MPだああああああああああああああ」と出るものが理想。(というかそういう結果のやつが出るまで何回か実行おすすめ)

さらに追加で、「MPだああああああああああああ」の直後の3つの乱数値が、色が2種類以下(できれば赤は好ましくない)になると虹色の腕輪を作る際に理想的。

 

上の結果の場合、乱数を2560回消費してから装備を合成すると、合成には2561番目のやつから20~30個くらいの乱数を消費する、ということになる。

 

つまり、最初の1個目は0.004くらいの小さい値、それ以降は大きい値ばかり使う、ということになる。虹色の腕輪で試した結果はこちら。

 

f:id:iid01:20190320020011j:plain

合成結果

 

総ステータス変化+29というとんでもない虹色。貴重な器用素早さ精神大幅アップで射撃使い歓喜間違いなし。

(ちなみに古代樹の帽子を作ると力+12 器用+2 精神+12という性能になる)

 

 

ここからは、合成時に乱数がどのように使われたかを分かっている範囲で書く。

 

まず、12裏 秘密結社編の各種強い装備での合成で、乱数表の使い方で確定しているのは以下の通り。

 

 ・12裏では、合成レベルが作りたい装備のランク+5以上のとき、最初(1個目)の乱数値が0~0.02ならMP装備となる。つまり2%、50個に1個の割合。これはどの武器、装備を作るときも変わらない。

↑これは、画像の例だと2561番目のやつがそれにあたる。

 

・虹色の腕輪は基本ステータスとして体力、力、器用、素早さ、精神のいずれかが+3×3個つくが、決定方法は2個目から4個目の乱数値を参照し、それぞれが0~0.2なら体力、0.2~0.4なら力、0.4~0.6なら器用、0.6~0.8なら素早さ、0.8~1なら精神が、1つの乱数値に応じてそれぞれ3ずつ上がる感じ。

↑これは、画像の例だと2562~2564番目がそれにあたる。これで器用+3 精神+6。

赤→体力、黄色→力、黒→器用、水色→素早さ、青→精神。

 

・古代樹の靴、古代樹の兜、古代樹の帽子は基本ステータスが2×2つくので、2, 3個目の乱数値で虹色同様、上げる能力を決めている。

 

・赤石の指輪とかの、基本ステータスが1種類のやつは2個目の乱数値で決めている

 

・基本ステータス以外にもボーナスがつくことがあるが、これはMPであるほど個数、アップ幅が多い。また、参照する乱数値が大きいほどアップ幅が大きくて強い装備になりやすい、という傾向がある

 ↑これは、画像の例だと2565番目以降から20個分くらいがそれにあたる。MPだとボーナス個数が多くて、最初の1+3個と合わせて合計24~30個くらい消費するっぽい。これが大きい値が多いと、アップ幅が大きかったり、HPとかの余計なステータスが選ばれずに済むという都合のいい状況になる

 

・基本ステータス以外のボーナスについては、それより前についた(又はついていた)ものの「種類の数」が少ないほど(できれば2以下がいい)望ましい。

そのほうが多くの種類のボーナスがつくので。

↑画像の例では器用3、精神6の「2種類」だったので、「好ましい状態」である。3種類だとボーナスが2回に減ることが多いので大損。

 

以上。

 

合成のメカニズムについては、正直外部サイトのほうが詳しい→https://www8.atwiki.jp/onjpawapoke/pages/50.html

 

 

抜粋というか重要な性質だけ書いておくと、ボーナスでついたステータスは装備のアイテムランクの値を超えると、強制的にその値に戻される。(MP品はもともとのアイテムランク+2。MP虹色は10まで、MP古代樹は12まで。)

 

古代樹の靴ではボーナスステータスは力、器用、素早さにしかつかない。帽子と兜は、素早さ以外ならどれでも付く。

ただし、基本ステータスの+2×2は5つの中から一様ランダムなのでそれ経由ならつく

 

古代樹の靴については最初っから素早さ+がついているので、乱数2個目、3個目が素早さ以外の2種類になってしまうとボーナスの数が減って大損。

 

武器についてはまだ正しいかどうかが怪しいけど、、1個目の乱数値でMP、HQ判定(これは12裏の合成システムですべての武器、装備で共通、11裏でも確率は違うが同じ方法)をして、2, 3個目の乱数値の和で武器攻撃の上下を決めている?(要検証)、高いほど大きいプラス補正になるっぽい。

命中は-9~+5でランダムだけど、4, 5個目の乱数値の和で決めている?(要検証)。こっちは攻撃とは逆で、和が小さいほどプラス補正になるっぽい。

 

 

カニズムについてはここまで。まとめとしては、

 

・虹色を作るときは1番目の乱数が0~0.02かつ2~4番目の色が2種類以下、できれば赤以外であり、かつ4番目~25番目くらいが真っ青になっていればいいのができやすいイメージ。(ステータス重要度は器用、素早さ、力≧精神>>>体力で、大きい乱数だと体力に割り当てられにくい?)

 

・古代樹の帽子は、最初の+2×2を除くと、素早さ以外大幅アップの可能性がある。+2×2の内容がどうであっても、ボーナスには影響しない。

 

・古代樹の靴はデフォで素早さ+2があり、それと2,3個目の乱数で決まる+2×2のステータスが計3種類になってしまうとボーナス回数が3→2に減って損。また、ボーナスは力、器用、素早さ。

 

 

次回はもっとたくさんの合成結果と、乱数調整方法を書きます。

 

それでは。

パワポケ乱数値とオート命名の名前の関係

今回は大分短い記事になるけど、3月中旬~下旬あたりに12裏で総変+24以上の虹色の粘り方と調整法、さらにそれを見つけるために使ったプログラム、あと原理解説をする記事を上げるのでそれの準備編ということでお願いいたします。

 

さて本題。

 

パワポケシリーズでの、ゲーム内での乱数値とオート命名で出てくる名前は対応している。オート命名は全部で100個分(正確には重複があるので99「種類」)用意されている。

 

早速、原理を紹介。

 

Xを64ビットの2進数整数とするとXは0~2^64-1の整数値となる。また、M=2^64としたとき、floor(100*X/M)の値は0~99になる。

ここで、floorは床関数。ようするにX/Mで0~1の一様乱数を疑似的に作っといて、それを100倍して小数第3位以下を切り捨てするとX/Mの小数第2位が10の位、小数第2位が1の位にした値ができあがる。ここから先はこの値についてを考える。

 

オート命名の名前と上の値の対応表はこんな感じ。左が10の位、上が1の位。

 

f:id:iid01:20190221000041p:plain

パワポケ乱数とオート命名 対応表

 

 

乱数値Xの小数第2位までが0.00のときは佐藤、0.01のときは鈴木。ちなみに佐藤、鈴木の乱数の時に12裏で虹色を合成するとMPができます(次の記事で書く予定)

赤字の0.23のときと0.63のときが、何故か「斉藤」でかぶってるという奇妙な事態。(パワポケ10で確認。)パワポケシリーズではオート命名をした時に同じ名前になった場合(というよりは同じ切り捨て乱数値が続いた場合)、違う名前(というより切り捨て乱数値)になるまで再度乱数値を発生させる、という仕様になっているが、斉藤の場合は0.23と0.63で別扱い。つまり例えば0.23→0.63のときは、オート命名はスキップされずに斉藤→斉藤となる。

 

 

最初の0~9のところ、メジャーな名前多い感じ。

 

オート命名で乱数値を調べるときはとりあえずこのページを見るか表を取っておくのが便利。

 

乱数調整をオート命名で行うときも確認にいろいろ便利。

 

短いけど、それではまた。

パワポケシリーズ 乱数探索プログラムの実装例(入門編)

前回までのブログでは、パワポケ乱数を観測するためのプログラムPokeRNGを実装した。しかし、それだけでは「ゲーム内で所望の事象を起こすような初期起動時間と乱数消費数は、どのようにして探索すればいいのか」ということがまだよくわからない。

 

この記事では、前記事でパワポケ10裏で強い補正の主砲をゲットするための初期起動時間と乱数消費数をどのようにして短時間で探し当てたか、ということを稚拙な実装プログラムと共に解説する。

前記事はこちら↓

iid01.hatenablog.com

 

パワポケ10裏の主砲は、乱数24個を消費して生成されるが、その乱数の値が大きければ大きいほど強いものができやすい、というのが検証と実験によってわかっている。

また、主砲のすばやさに関しては補正値の幅が小さい上にあまり重要ではない(122ミリ砲除く)と考えたため、「最初の18個の乱数の和が大きければ大きいほど、攻撃力、命中、弾数の多い良い主砲になるだろう」と考え、18個の乱数の和がある一定以上の値になるような部分乱数列を探索するプログラムを組んでみた。

 

実装プログラムは以下のようになる。稚拙だけど、最初ということで許してください。

 

f:id:iid01:20190223202719p:plain

理想乱数列探索プログラムの例

 

PokeRNGといっしょの部分も多々あるが、違う部分は、

・要素数18のリスト"list"の定義し、そのリストに18個分の部分乱数列を格納

・その18個の部分乱数列の和を目的関数値とし、その値が「足きり」"lim"以上となるような部分乱数列であるかどうかの判定・・・(★)

・上記を、分m、秒sに関してのfor文で繰り返し判定していく

・(★)を満たすものが見つかったら、break文で終了し、目的関数値とリストを出力

 

list.insert、list.popの部分であるように、リストは、乱数を生成するたびに新しくその値を格納し、一番古いものを捨てていく。(キューとスタックで言ったら、キュー。スーパーの行列と同じ、First in, first out)

最後のbreak文とかが稚拙すぎて出力後にエラーが出るけど、プログラムは正常に動く上に結果もまあ目的は達成できるのでとりあえずこれでいい()

 

 

このプログラム、Nとlimの値を正しく設定しないととんでもない計算時間とメモリを食ってしまうので要注意。

Nは、1つの時間、分、秒のセットの中でいくつの乱数値を生成して調べたいかを表す。300~3000くらい、できれば1000あたりが適当な値だろうと思う。18個の乱数が必要なので300以下だと効率は良くないし、3000以上だといい乱数列が見つかっても乱数調整に時間がかかる。

 

limは、目的関数値=18個の乱数の和の「足きり」。目的関数値の値がlimより大きければ終了。12~13.5くらいでないと結構時間かかるはず。それ以下だとすぐ終わるけど、それを使って作る主砲の性能は物足りないかもしれない。

逆に14を超えてくると、なかなか見つからなくて実行時間が急激に増える。ただし、それを超える目的関数値の乱数列では、見事な性能の主砲が出来上がる(はず)。

 

 

時間hについては、24通りなのもあり、計算時間の増大が怖いのでfor文にはせずに、好きなように指定する。

 

h=10(10時台を探索)、N=1000(1つの時間、分、秒あたり1000個分探索)、lim=14.4(18個の0~1の一様乱数列の値の平均が0.8。結構キツイ足きり。)で実行したときの結果はこちら。

 

f:id:iid01:20190223210140p:plain

パワポケ理想乱数探索プログラム 出力結果


実行時間はよく覚えてないけど、数分ほど。(3分くらい?)

一番左の100531っていうのは、時間、分、秒のこと、つまり、10:05:31。(h=0のときは00は省略なので注意)

その次が、10:05:31のときの乱数消費回数。

「終わりやあああああああああああああああ」の後が、所望の和が大きい値の部分乱数列。順番は新しい方から古い方、つまり下から上にさかのぼるような表示。

 

今回は743番目から760番目の乱数が目当ての乱数列。真っ青。

 

★付きの数字が、目的関数値。今回は18個の乱数列の和が約14.5。見事に真っ青。これは偏差値換算でいうと95にあたる優秀さ。上位何パーセントかは正規分布表とかで調べてください

 

最後にbreak文関連のエラー出てるけど、関係ないので見なくてよい。

 

あとはこの結果(時間、分、秒)をPokeRNGとかに入れて詳しく調べて、実際のパワポケで試してみればいい性能の主砲が手に入る。

 

 

上の例で10:05:31の743番目から766番目の乱数で88ミリ砲を拾うと、100-98-7-23になる。

 

命中が高くて他も高水準で、もしかしたらこの前の102-96-8-23より(人によっては)使えるかも・・・

 

余談だけど、737番目から760番目でやると98-96-9-23になります。

こちらはすばやさが高い感じ。

 

 

まとめとして、今回は18個の乱数列をリストに順々に格納していき、その和を目的関数値として足切り判定を自動的に行ってそれをクリアするときの乱数列の結果、情報を出力するプログラムを使ってパワポケ10裏で強い主砲を見つけました。前記事の主砲もこのプログラムで見つけたものです。

 

リストの判定方法を変えることで、(例えば所望のこの事象が起きる条件は1番目が0~0.02で2番目は0.7~1.0で、・・・みたいな条件をプログラムに記述して)ゲーム内のいろいろな事象を狙って起こせるような乱数列を効率的に探索、なんてことができたらいいなと思います。(内部の乱数条件とイベントへの影響を調べるのが一番めんどい。誰かデバッグとかで解析して())

 

その時に、今のままのリストでいいのか(リストの長さを変えたいときは"list"の0の数を変える)、配列(多次元配列)のほうが良いのではないか、ということも考えてはいるけど、とりあえずこんな感じで。

 

 

ではまた。

 

 

 

 

パワポケ10 バトルディッガー編で強い武器を簡単に粘る方法

パワポケ10 裏サクセス バトルディッガー編の1章では、いろんな武器を拾うことがある。バンパーと電極角をとって2章で愛用する人もいれば、88ミリ砲、77ミリ砲、ギーガー砲、122ミリ砲とかをいい性能のものを引くまでリセットして「武器粘り」をする人もいると思う。ただ、それでは時間がかかりすぎる上に骨が折れるので乱数調整による方法を紹介してみる。

 

準備すること:

・甲子園一直線編のデータを1つ以上あける

・バトルディッガー編の1章で、遺跡を3つ全部開放する

上2つを満たしたうえで、どこかの遺跡に行って追加倉庫の着脱などにより持ち物をわざといっぱいにしつつ、宝箱を見ていって目当ての武器の宝箱を見つける。宝箱の上にいながら持ち物をあけて、セーブして終わる。これで準備OK。

 

準備ができたら次を行う。

 

1、電源を切って適切な時間にゲーム起動、適切な回数だけ甲子園一直線編でオート命名をし、乱数消費をする。・・・(★)

2、ディッガー編を起動し、主砲を取る→目当ての性能の主砲ゲット!

 

以上。

 

まず、10裏の主砲の性能が決められる瞬間は、「その武器を拾った瞬間」。ステージに入ったり、宝箱に触れた瞬間ではない。持ち物がいっぱいで手に入れられなかった時はまだ性能は決まっていない(重要)。武器を拾った瞬間、乱数を24個生成し、その値によって攻撃、命中、すばやさ、弾数が決められる。

今のところ宝箱の中身を調整する方法はまだ分かっていないっぽいけど、性能だけならどうにでも粘れる。

 

現時点でいろいろ試した感覚としては、24個の乱数値のうち最初の6個が攻撃、次の6個が命中、次の6個が弾数、最後の6個がすばやさを決めているっぽい。いずれも乱数値が大きいほど大きいプラス補正になりやすい。また、それぞれの6個のうち最初の1個目に左右されるっぽい?(これはまだよくわからない。要検証)

 

説明だけだと分かりにくいので、強い主砲の例:

 

f:id:iid01:20190220210445j:plain

強い88ミリ砲その1

この主砲は、(★)で08:16:23に起動し、オート命名を9回行って得られる24個の乱数列から生成されたものである。オート命名のラストは「坂本」。

 

PokeRNGでこの乱数列を観測してみると、次のようになる。

 

f:id:iid01:20190220211318p:plain

上の88ミリ砲を生成する乱数列

 

9回オート命名して1番目から9番目の乱数を消費しているので、88ミリ砲生成に使う乱数は10番目から33番目の24個。

 

その乱数列を見てみると、・・・うん、真っ青。

つまり、値の大きい乱数値がずらりと並ぶ部分数列になっている。

この乱数列で生成した88ミリ砲が、先ほどの写真の101-94-8-22のやつ。

 

オート命名の回数が少なくてやりやすいと思うので、入門用に。

 

ちなみに、スキル「幸運」は0でやりました。幸運レベルが高いときにどうなるかは未検証。だれかやって()

 

トウコつれて幸運1でやった時は変化なかったけど()

 

 

ちなみに、今まで探した中で一番強いと思ってるのはこれ。77ミリ砲の写真だけど許して

f:id:iid01:20190220213934p:plain

強い77ミリ砲

 

88ミリ砲で換算すると、102-96-8-23になる。(各主砲の基本性能とかについてはまたいずれ書く:書きました→https://iid01.com/pawapoke10_weapon_parameter/

 

起動時間は11:24:11、オート命名回数は752回。ラスト3回の名前は佐野、斉藤、大西。

多いけど、オート命名はAを押しっぱにすると1秒あたりちょうど5回できるので、ストップウォッチとか秒針付きの時計さえあればまだ楽に行える。例えば145秒=2分25秒やれば725回。

 

この77ミリ砲を生成した乱数列は次の通り。

 

f:id:iid01:20190220214840p:plain

上の77ミリ砲を生成する乱数列

 

途中でオート命名の仕様によるスキップが7回あるので乱数消費回数は752+7=759回。

つまり、この77ミリ砲を生成した乱数列は760番目から783番目。真っ青。

 

この24個の乱数列の和は約18.9。

0~1のi.i.d.な一様確率変数24個の和が、平均12、標準偏差√2だから偏差値に換算して99くらい・・・

4.9σくらい平均から離れているっていう

正規分布近似(していいほどたくさんの和をとっているのかわからんけど)するとこれを超える確率が4.8*10^-7というので大体200万分の1という(参考:https://staff.aist.go.jp/t.ihara/normsdist.html

 

これが今まで乱数の海を探索した中で、試した中では一番総合的に強そうで実用的にも使えそう。

 

この乱数、律義に時間を全部打ち込んでって、ってやったわけではなくて、Pythonで各時間に対して上限N=1000回(乱数調整に時間がかかりすぎない程度の値)の条件で、分と秒ごとに「全探索」して求めたやつです。

Pythonはfor文使うと実行速度が顕著に遅くなるとか聞くけど、時間かかりまくり&メモリ不足で落ちまくりです

 

最適化に詳しい人がいれば・・・

 

それはそれで実行可能解を求めるのが壁になりそうな気がしないでもないけど

 

それはともかく、一応これでも88ミリ砲で102-96-8-23とかが作れるようには少なくともなるので、興味ある人はぜひ。

 

上の性能を出すのに使った(全探索のクソみたいな実行速度の重い)プログラムとか、詳しい情報とかはまたいずれ。

 

追記:プログラムについての記事書きました↓

iid01.hatenablog.com

 

それでは。