【モンハンライズ】マカ錬金に使用するモンスター上位素材を自動収集するプログラムを作った【MH:Rise】

またまたモンハン自動化ネタ。本編より楽しいです。

内容

今回も動画をご用意いたしました。
www.youtube.com

オトモ隠密隊派遣を利用して稼ぐ感じですね。

5回クエストを消化するたびに受け取ることが出来ますが、クエストを消費する部分については偉大なる先人様である 『こちゃてす様』 が作成されたプログラムを拝借させていただきました。

カムラポイントが尽きない限り延々と繰り返してくれます。カムラポイントがないよ!という方については、こちらも『こちゃてす様』が自動収集プログラムを公開してくれているので是非ご参考に。

実行環境

参考までに私の実行環境ですが、本体は通常版Switchの初期ロット/ソフトはパッケージ版になります。

そして利用しているマイコンは以下。(画像クリックでAmazonの商品ページに飛びます)
名称長いですが『KOOKYE Pro Micro ATmega32U4 5V/16MHz Module Board マイクロコントローラーボード Arduino Leonardo Replace ATmega328 Arduino Pro Miniと互換 3個セット』という商品名です。
こちらは他製品比較で少々お高めですが、『ATmega32U4』というチップを搭載していれば動くはずです。

コード

参考までに今回作成した関数部分を公開します。
何度も検証して正常動作を確認出来ておりますが、利用される方は各々で検証ください。

呼び出す順番は以下の通り。
1〜3までは初期処理として設定し、それ以降の4〜10でループを組む形になります。

1. 里内移動関数(6:集会所準備エリア)
2. 隠密隊派遣受付前まで移動する関数
3. 隠密隊派遣関数
4. 里内移動関数(7:集会所)
5. クエスト消費関数(こちゃてす様作成のものを参照。5回繰り返してください。)
7. 里内移動関数(6:集会所準備エリア)
8. 隠密隊派遣受付前まで移動する関数
9. 隠密隊成果物受け取り関数
10. 隠密隊派遣関数

里内移動関数

こちゃてす様が作成された関数に『集会所 準備エリア』までの移動処理を追加しています

//里内移動関数
void Map_teleport(int select) {
// 里内移動ショートカット呼び出し:里内でのマイナスボタンの挙動を「タイプ2」に変更しておく必要あり
pushButton(Button::MINUS, 750, 1);
if (select == 7) {
// クエスト受注時に利用する処理
// 集会所まで移動
pushHatButton(Hat::UP, 400, 1);
} else if (select == 6) {
// 隠密隊派遣する際に利用する処理
// 集会所 準備エリアまで移動
pushHatButton(Hat::UP, 400, 2);
} else {
pushHatButton(Hat::DOWN, 450, select);
}
// 決定
pushButton(Button::A, 1200, 1);
}

隠密隊派遣受付前まで移動する関数

新規作成。集会所準備エリアに入ってから呼び出します。

// ネコ前まで移動
void moveFrontOfCat() {
// 集会所 準備エリアに移動する
Map_teleport(6);
// キャラ移動
Transport_stick(45,300);
Transport_stick(90,200);
}

隠密隊派遣関数

ネコに話しかけて派遣するまでの一連の処理になります。
アキンドングリを使うかどうかは関数呼び出しの際に指定してください。1で使う/0で使わない になります。

// 隠密隊派遣関数
void covertTroops(int nuts) {
// 話しかける
pushButton(Button::A, 2000, 1);
// 「オトモ隠密隊」にカーソル移動&決定
pushHatButton(Hat::DOWN, 500, 1);
pushButton(Button::A, 500, 2);
// 調査先選択:「百竜夜行」を選択 / 百龍夜行は出現ランダムなので無い場合は「溶岩洞」が選択される
pushButton(Button::A, 1500, 1);
pushHatButton(Hat::UP, 500, 1);
pushButton(Button::A, 500, 2);
// オトモ選択:オトモアイルーを上から4頭選出(※要事前ソート)
pushButton(Button::A, 500, 6);
// アキンドングリ利用チェック
if (nuts == 1) {
// アキンドングリを利用するパターン。Xボタンを押下する
pushButton(Button::X, 1200, 1);
}
// 決定
pushButton(Button::A, 500, 2);
// 会話終了
pushButton(Button::B, 500, 2);
// 会話終了まで待ち時間を挟む
delay(3000);
}

隠密隊成果物受け取り関数

派遣後、5回クエストを消化次第実行する形になります。

// 隠密隊成果物受け取り
void receiveTroopRewards() {
// 話しかける
pushButton(Button::A, 2000, 1);
// 「オトモ隠密隊」にカーソル移動&決定
pushHatButton(Hat::DOWN, 500, 1);
pushButton(Button::A, 500, 2);
// 受け取る
pushButtonContinuous(Button::A, 6000);
// 会話終了
pushButton(Button::B, 500, 2);
delay(3000);
}

まとめ

今回はモンスター上位素材を自動収集するプログラムのご紹介でした。
ご自由に流用いただいて構いません。もし不明点があればTwitterにて承ります。
「そもそもどうやって作るんだよ」「マイコンってなんやねん」って方についても是非(笑)

以前投稿したネタ

engineer-lime.com

【モンハンライズ】採掘と福引を自動化したお話。【MH:Rise】

ツイッターの方ではちょくちょく公開させていただいておりましたが、amiiboを使うと引くことの出来る福引を完全自動化&無限引きに対応させてみたお話です。

内容

まずは動画を作ったのでご覧ください。(※2021/04/07 07:00に公開されます)

福引自動化&無限引き

通常の福引はセール中に1度という制約がありますが、amiiboで引くことの出来る福引は1日3回までの制約を除けば無限に引き続けることが出来ます。しかも日付の管理はあくまで本体側の時計でしか判断されておらず、時計さえずらしてしまえば何度でも簡単に引くことが出来てしまいます。ポケモン界隈で流行っていた自動化の手法で簡単に実装出来ると踏み切って実装してみたのがきっかけ。

結論からするとまだまだ改良の余地あり。
amiiboは純正コントローラから読み込む必要があるのですが思いの外すんなりと読み込んでくれないんですよね。 15秒ほど猶予を持たせてみましたが、これでも時々失敗してしまうことがありました。

また今回はPCからBluetoothでSwitchに接続する形式を取ってみましたが、有線と比べると多少のラグが発生してしまうこともありました。ラグが発生して然るべきキーが実行されないと処理が途中で変な方向に向かってしまうんですよね。
少々時間は掛かってしまいますが、ポケモンで実装したときと同じようにマイクロコンピュータデバイスを使って実行する方式に変更しようと思っています。ある程度の反響があればソースコード等の公開も考えています。それまでに動作を安定させたいな。

amiiboについて補足

amiiboで引くことの出来る福引には大きく分けて2パターンあります。

1つ目がMHRiseコラボとして発売された3体。マガイマガドとオトモガルクとオトモアイルーの3体ですね。
こちらについては専用の福引が用意されています。それぞれの当たりは以下の通り。

amiibo 当たり その他
マガイマガド 鎧玉系 原珠/罠(落とし穴/シビレ罠/タル爆弾)
オトモガルク 鬼神薬グレート 硬化薬/閃光玉/音爆弾/強走薬
オトモアイルー アキンドングリ 謹製おだんご券/秘薬/粉塵

f:id:rhymerr:20210407030651p:plain

マガイマガド(これは普通の当たりです。大当たりのスクショ撮れていなかった…大当たりでは鎧玉と原珠のレア度が更に上がって罠の個数が増えます。)
f:id:rhymerr:20210407030720p:plain

オトモガルク(大当たり)
f:id:rhymerr:20210407030730p:plain

オトモアイルー(大当たり)
f:id:rhymerr:20210407030704p:plain

どれも魅力的ですが、個人的には防具の強化に役立つ鎧玉と、よく使うけど作るのが結構面倒臭い罠一式が入っているマガイマガドを推します。

そしてもう2つ目のパターンがその他のamiiboで実行した場合。
通常の福引と同じく、ランダムのようです。回復薬とかが手に入るのでこちらでも十分だと思いますね。

採掘自動化

福引自動化はそれなりのコンピュータ知識に加えて品薄でなかなか手に入らないamiiboが必要ということで明らかに敷居が高いです。なのでオマケとして割と簡単に実装できる採掘自動化も紹介に取り入れてみました。
こちらは連射機能付きコントローラーがあれば誰でも簡単に実装出来ます。

昔はホリパッドといえばスティックが異常に固くて使いづらい印象でしたが最近のは純正に近い使用感でかなり使いやすく感じますね。純正までの質感はないにしても、半額以下なので許容範囲です。

まとめ

競馬AI開発の傍らで作った物の紹介でした。もうちょっと動作を安定させるまで続けたいと思います。

追記

マイコンに移植しました。
非常に安定して動作してくれていますので、近日中に内部構造を公開します。

内部構造公開。

使う処理は2つだけ。

1. 福引を実行する関数
2. 月日を変更する関数

これらをループするだけの簡単仕様です。joyconでも出来なくはないですが、絶望的に固定しづらいのでプロコンを推奨。

利用開始の条件としては、プロコンにamiiboを固定⇒雑貨屋の選択肢「amiiboを読み込む」にカーソルを合わせておくだけでOKです。

俗に言う『時渡り』ですね。ポケモンでもおなじみのロジックなので今更語ることもないでしょう。とってもシンプル。
ちなみにこちらのコードは緊急で書き上げたこともあり、最も語句が短くシンプルに書けそうだった『NintendoSwitchControlLibrary』というライブラリを利用させていただいております。詳しくはググってください。モンスター素材自動収集プログラムとは利用しているライブラリが異なりますのでご注意ください。気が向いたら移植するかもしれません。

福引を実行する関数

本体部分になります。

// 福引実行
void execLottery() {
// amiibo読み込み
pushButton(Button::A, 5000);
// 回して受け取る
pushButton(Button::A, 50, 11);
}

月日を変更する関数

月と日をそれぞれ+1します。日付の重複判定が時々掛かってしまうようですのである程度のランダム性を持たせるためにそうしています。
理論的なことには詳しくないので体感のレベルですが、2021/1/1から開始すると1日放置しっぱなしでも延々と回り続けてくれました。

// 時計変更
void timeFlyer() {
// ホーム画面 > 設定
pushButton(Button::HOME, 500);
pushHat(Hat::DOWN, 25);
pushHat(Hat::RIGHT, 25, 5);
pushButton(Button::A, 100);
// 設定 > 本体 > 日付と時刻
holdHat(Hat::DOWN, 2000);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::DOWN, 25, 4);
pushButton(Button::A, 200);
// 日付と時刻 > 現在の日付と時刻
pushHat(Hat::DOWN, 25, 2);
pushButton(Button::A, 500);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::UP, 25);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::UP, 25);
pushHat(Hat::RIGHT, 25, 3);
pushButton(Button::A, 50);
// ホーム画面 > ゲーム画面
pushButton(Button::HOME, 1000);
pushButton(Button::A, 500);
}

その他記事

engineer-lime.com

テレビ出力機能が付いたNintendo Switch用超小型充電器!Genki Dock購入レビュー!

久しぶりに良いと思えたサードパーティ製品。

前書き。

最近部屋の模様替えをして、テレビラックをすっきりとさせました。 そこでNintendo Switchのドックも片付けてしまい、テレビ出力機能を封印した状態でしばらく過ごしていました。
そんなタイミングで偶然リングフィットアドベンチャーを購入できる機会に恵まれ、無事購入。いざ開けてみるとテレビモードじゃないとまともに遊べないんですよねこれが。 かといってもう一回専用の大きなドックは出したくない。そこで調べてみたところ、ドック機能を内蔵した充電器があることを知りました。

購入。

今回購入した商品がこちら。
https://www.yodobashi.com/product/100000001005719938/

Amazonでは売っていなかったのでヨドバシカメラのネットストアで買いました。ビックカメラ派の人はビックカメラのネットストアでも買えますよ。
https://www.biccamera.com/bc/item/8359291/

開封。

f:id:rhymerr:20200912012327j:plain
f:id:rhymerr:20200912012345j:plain
f:id:rhymerr:20200912012333j:plain
f:id:rhymerr:20200912012402j:plain
f:id:rhymerr:20200912012408j:plain

内容物。本体の他に変換プラグとUSB-Cケーブルと説明書とステッカーが入っています
f:id:rhymerr:20200912012521j:plain

本体は思った以上に小さい。
f:id:rhymerr:20200912012513j:plain

f:id:rhymerr:20200912012637j:plain
このケーブル、素晴らしい。

f:id:rhymerr:20200912012733j:plain
片側L字構造に加えて結束バンドまで付いています。やや長めで使いづらくないかな、って思っていましたが杞憂でした。痒い所に手が届くとはこのこと。

接続

とてもシンプルです。
f:id:rhymerr:20200912012757j:plain
USB-Cケーブルを本体と繋ぎ、HDMIケーブルをテレビと繋ぎ、アダプタ部分をコンセントに差し込むだけ。 f:id:rhymerr:20200912012859j:plain

問題なく出力されます。
f:id:rhymerr:20200912013044p:plain

まとめ

非常に満足度が高い商品でした。この手の商品ってホリとかサイバーガジェットあたりが真っ先に出してきそうなものなんですけどね。技術やコスト面で難しかったのかな。
少々高く感じますがこれだけコンパクトなら許せてしまいます。それにこの手のサードパーティ製品ってどうしても安っぽさを感じることが多いですが、この商品に至っては一切そう感じません。今はなかなか行けないですが旅行に行く際のお供としても良さそうだと思いました。

おまけ

YouTubeにて動画版を公開しました。

【Fortnite】自分以外のプレイヤーを全員botにして効率良く経験値を稼いでレベルアップする方法【保存版】

実は私、最近フォートナイトに物凄くハマっています。
無料ゲーとは思えないクオリティ且つ定期的に行われる大規模アップデート。それから毎週のように行われるゲームバランス調整を主としたマイナーアップデートもいいですね。今まで見てきたオンラインゲームの中で最も運営が有能なゲームといっても差し支えないと思います。
今回は表題にもある通り、自分以外のプレイヤーを全員botにする方法(通称 botマッチ)をまとめます。

前書き。

さて、昨年暮れのアップデートにて初心者プレイヤー救済のためのコンピュータプレイヤー(通称bot)が導入されました。慣れてくれば一目で区別が付きますが、AIの精度が高く ぱっと見では通常プレイヤーに見えるくらいよく作り込まれています。こういった所でも運営さんの有能さが垣間見えます。

んで、全員botにしてどうするの?

全員botにするメリットは以下の通り

俺TUEEEEEE出来る

一番はこれでしょう!
北●鮮の委●長もビックリするくらいキル出来ます!ストレス発散!!(嘘)

簡単にビクロイ取れる!

たとえ手が滑ったとしてもビクロイが取れます!!
ビクロイしたらスクショを撮ってSNSに貼り付けましょう!きっとたくさんの「いいね!」を獲得できるはずです♪

経験値稼ぎにもってこい!

だいぶネタを差し込みましたが本筋はこれ一択です。決して上の2つを主目的としては駄目ですよ!ゲームがつまらなくなってしまいます!
通常マッチでしか達成できないミッションってたくさんありますよね。他のプレイヤーと入り交じってはなかなか達成出来ないミッションも、自分以外が全員botとなれば話は変わってきます。ミッションだけに集中できるので効率よくクリアすることができます。
また、宝箱も独り占めできますので開封時に得られる経験値をたくさん稼げたり、相手がbotなら高キル数を叩き出す事も容易です。誰でも簡単に効率よく経験値を稼ぐことが出来ます。

デメリットは?

戦績に反映されない

残念ながらいくらキルを稼いでもビクロイを取り続けても戦績には反映されません。そりゃあこんなので稼げたら戦績なんてあってないものになりますからね。
※具体的には以下のように[Bots Default XXX]と表示され、戦績反映外の試合として扱われてしまいます
f:id:rhymerr:20200803012137p:plain

やっぱり…対人の方が楽しい

所詮botを相手にしているのではそのうち飽きてしまいます。強い人と戦ってこそのゲームですからね。
最初はbotの動きを観察することに面白さを感じましたがそれもすぐに飽きてしまいます。

やり方

とても簡単です。

1. 普段プレイしていないデバイスにフォートナイト をインストールする

スマホでもスイッチでもPS4でもなんでも構いません。私の場合は普段PS4で遊んでいますのでスイッチを選びました。

2. 新規アカウントを作成する

この時普段遊んでいるIDは紐づけないでください。必ず新規アカウントを選択すること。

3. ゲームが起動できたら、普段使っている本垢に招待を送る

そして本垢をパーティに参加させてください。これで準備完了です。

4. 新規アカウントがホストの状態で好きなマッチを開始する

待機島に移ったら成功です。この時点でbotしか存在しないマッチが作成されているはずです。
ここで周りにいるのは全てbotですが、やたらと高額アバターを装備していたり、目の前でエモートを披露してきたりします。
こうやってユーザの購買意欲を掻き立てているんでしょうか。EPIC GAMES恐るべし。

5. バトルバスのカウントが始まったら新規アカウントを試合から離脱&パーティからも離脱させる

経験値が入ってしまわないようにしてください。レベル10を超えたらbotマッチを生成できなくなるようです

6. 本垢で自由自在に暴れ回る

試合にいるユーザは全てbotですので好き勝手暴れ回ってください♪

まとめ

以上、簡単にbotマッチのやり方をご紹介しました。
これで簡単に経験値を稼げるようになったと思います。シーズン3終了まで1ヶ月を切りましたが、皆さん頑張ってレベル100まで上げていきましょう。
ただしゲームの面白みを奪ってしまう可能性もありますのでご利用はほどほどに。