【Poke-Controller】BDSP化石掘り自動化プログラムの紹介(操作編)
はじめに
化石掘りを自動化して、なぞのかけらやハートのかけらを集めたい。
そんな思いから、Poke-Controllerを使ったBDSP化石掘り自動化プログラムを作成しました。
プログラムは下記に格納しています。
2022/7/22追記:v1.0に更新しました!発掘作業を効率化しています。
(古いバージョンはbkフォルダに移しています)
何が掘れるの?
今回は、なぞのかけらとハートのかけらが掘れることを目標にしました。
他の道具は掘れなくても気にしない作りにしています。
(化石やタマを掘るのに失敗することが多いです)
他の道具を掘りたい場合は画像認識する対象に追加してください。(後述)
化石堀り時の動作イメージを10倍速で撮りました。(GIFは旧verのもの)
現在のバージョン(v1.0)では、1回の発掘に3分くらいかかります。
あまり効率は良くないですが、何もしないよりは良いかも・・・?
前提条件
1.Poke-Controllerの自動化環境があること
(本記事では環境準備の説明は省略します)
2.たんけんセットを入手していること
(ハクタイシティまでストーリーを進めてください)
3.動作が不安定でも優しく見守ってくれること
(特定のアイテムをほぼ確実に掘り逃します)
使い方
事前準備(Poke-Controlloer関連)
1. ダウンロードしたファイル「BDSP_Fossilv1_0」を格納する
「BDSP_Fossilv1_0.py」は、下記フォルダに格納してください
パス:Poke-Controller-master\SerialController\Commands\PythonCommands
2. ダウンロードしたフォルダ「BDSP_Fossil」を格納する
「BDSP_Fossilv」は、下記フォルダに格納してください
パス:Poke-Controller-master\SerialController\Template\
事前準備(プログラムの設定変更)
1.主人公の性別フラグを修正する(主人公が男の場合)
男主人公の場合、self.charaの'chara0.png'を'chara1.png'にしてください。
※主人公の帽子を画像認識に使うため、設定が違うと上手く動きません。
【修正前】self.chara = 'chara0.png';
【修正後】self.chara = 'chara1.png';
事前準備(BDSPの設定)
1.たんけんセットだけをショートカットキーに登録する
+ボタンを押すだけで、たんけんセットが使えるようにしてください。
※複数の道具をショートカットキーに登録すると、たんけんセットの使用に+ボタンと十字キーが必要になるため上手く動きません!
2.設定で「話の速さ」を「速い」に、
「ウィンドウの変更」を「タイプ1」にする
話しの速さが遅いと、誤動作の原因になります。
ウィンドウは画像認識で使用するため、「タイプ1」にしてください。
3.主人公は着せ替えせず、初期衣装の状態にする
主人公の帽子で現在位置を判定するため、初期衣装にしてください。
※プログラムが上手く動かない場合、主人公の画像認識に失敗している可能性が高いです。後述する画像の差し替えを試してみてください。
4.ハクタイシティのポケモンセンター前に移動する
空を飛ぶで移動するか、自力で移動してください。
※自動化の移動ルート上に秘密基地がある場合、上手く動きません。
秘密基地へ入ってしまう場合は、秘密基地の場所を変更してください。
動作の流れ
次の操作が自動で繰り返されます。
ほど良いところで手動で止めて終了してください。
1.プラスボタンを押して探検セットを使う
「ひとりであそぶ」を選んで地下大洞窟に入ります。
2.レーダーで掘れる場所を探しながら右へ移動する
動作安定のため、移動は右方向だけにしました。
3.掘れる場所を見つけたら、その方向へ移動しつつA連打する
一度反対方向に進んでから、掘れる場所へ向かいます。
(主人公の真上にあった場合に掘り逃さないようにするため)
4.頑張って化石掘りをする
左上から右下へ蛇行しながら一定間隔で掘り進めます。
1周目は1回で掘れる場所、
2周目は2回で掘れる場所、
3周目は3回で掘れる場所を掘ります。
Aボタンで掘った後のカーソルを、画像認識でチェックします。
何かがありそうなら周辺を掘って、アイテムを発掘しようとします。
ただし、画像認識の素材を絞っているため、精度は低いかもしれません。
特定のアイテムを掘り逃すことを確認してきます。(後述)
5.化石掘り終了か、掘れる場所がなく右端まで移動すると地上へ戻る
一度地上へ戻り、掘れる場所が自動移動のルートに来ることを祈ります。
動画
動画も撮りました。v1.0では1回の探索が3分くらいになりました!
(前回のv0.9は1回の探索に8分くらいかかっていました…)
よくある質問
・プログラムがinterruptで止まる
・動画のとおりに動かない
画像認識に失敗していると思われます。
画像を自分で取得したものに差し替えてください。
特に男主人公の場合、chara1.pngを差し替えないと失敗しやすいです。
簡単にですが差し替えの手順を記載します。
例:chara1.pngを差し替える場合
1.差し替えたい画像を確認する
差し替えたい画像を見てどんな画像を用意すれば良いか確認します。
今回はchara1.pngです。画像は下記フォルダに格納されています。
パス:Poke-Controller-master\SerialController\Template\BDSP_Fossil
2.コピーを作成する
元に戻したいときに戻せるよう、画像のコピーを取っておきます。
chara1.pngを選択した状態で「Ctrl + C」でコピー、「Ctrl + v」で貼り付けすると、「chara1 - コピー.png」が作られます。
3.差し替え用の画像を取得する
chara1.pngは地下大洞窟で主人公が正面を向いている画像です。
ゲームを起動して、地下大洞窟で主人公が正面を向いた状態にした後、Poke-Controllerに画面を映して、「Capture」ボタンを押します。
「Capture」ボタンを押下すると、下記フォルダに画像が作成されます。
パス:Poke-Controller-master\SerialController\Captures
4.画像を編集する
取得した画像から、chara1.pngに必要な部分だけを切り取ります。
どんなソフトで編集しても問題ありませんが、今回はWindows10の標準アプリ(フォト)を使います。
画像をダブルクリックすると「フォト」というアプリで画像が表示されると思います。上側の真ん中あたりにある「画像の編集」アイコンをクリックします。
画像の編集画面で、必要な部分だけが残るように画像の範囲を小さくしていきます。白い枠の部分をドラッグすると、画像の範囲を小さくすることができます。試しに左上の丸い部分をクリックしたまま、右下の方へドラッグしてみます。
同じ要領で右下の丸い部分をクリックしたまま左上の方向を引っ張り、さらに画像を小さくしていきます。これを繰り返して、主人公の帽子の部分だけが選択されるまで画像を小さくしていきます。
5.画像を保存する
良い感じに画像のサイズを調整出来たら、保存します。
右下にある「コピーを保存」ボタンを選択して画像を保存してください。
保存先は先ほどのフォルダ、ファイル名を「chara1.png」として上書き保存します。
これで、「chara1.png」の差し替えが完了です。
お疲れさまでした。
既知の不具合
・(移動中)レーダーが無反応なのに発掘ポイントへ移動しようとする
地下の灯りを、レーダーで反応する光と誤検知することがあります
(誤検知しにくい画像を選びましたが、それでもたまに誤検知します)
誤検知した場合は地上へ戻ってやり直すため、影響は低いです。
(7/22追記:v1.0では閾値を上げることで誤検知しづらくしました)
・(化石掘り)ねっこのカセキが掘れない
カセキの形が複雑なため、現在のプログラムでは掘ることができません。
発掘のアルゴリズムを改良する必要があり対策困難です…。
(どうやれば上手く掘れるんでしょうね?)
・(化石掘り)画像認識で当たりと認識できない
タマ(L)の中心や、アイテムの隅を当たりと認識できないことがあります。
当たりと認識したい場合は、下記を参考に修正してください
例として、タマ(L)の中心部分を認識したい場合の手順を記載します。
※対策すると画像認識の回数が増えるため、処理が少し遅くなります
例:タマ(L)
中心部分を当たりと認識できません。
当たりと認識させたい場合の対策例を下記します。
1.当たりと認識したいアイコンの画像を作成する
2.作成した画像を下記フォルダに格納する
パス:Poke-Controller-master\SerialController\Template\BDSP_Fossil
3.プログラムに作成した画像のファイル名を追加する
「template_path = ~」と書いてある部分に、ファイル名を追記します。
'hori8_atari1.png'の後ろに「,」を追加して改行した後、
作成したファイル名を「'」で囲って追加してください。
(今回の例では「'hori8_atari_tama.png'」を追加)
【修正前】
template_path = ['hori0_iwa.png','hori1_iwa_hibi.png','hori2_ishi.png',
'hori3_ishi_hibi.png','hori4_suna.png','hori5_suna_hibi.png',
'hori6_suka.png','hori7_hazure.png','hori8_atari1.png'
]
【修正後】
template_path = ['hori0_iwa.png','hori1_iwa_hibi.png','hori2_ishi.png',
'hori3_ishi_hibi.png','hori4_suna.png','hori5_suna_hibi.png',
'hori6_suka.png','hori7_hazure.png','hori8_atari1.png',
'hori8_atari_tama.png']
以上です。最後まで読んでくださりありがとうございました。