某ゲームの自動化を試みた話

 こんにちは。9月20日担当のPePeです。最近例会に出れていないので新入生のために自己紹介をしておくと、エミリーを担当している者です。工学部物理工学科3回です。

 

 今回は夏休みで有り余った時間をものづくりで消費すると同時にアドカレの題材にすべくちょっとした工作を行いました。

 

 作るものの条件として、アドカレに載せる関係上できればミリオン絡みが良く、現行のコンテンツとしてミリ〇タ*1しか存在しない(一応名刺生成アプリは存在するが)ため、半自動的にミリ〇タの自動化を考えることに。

劣りOSであるところのMAC*2保有していないためiPhoneアプリ開発は行えず、ハードウェアチート一択となりました。

 

 まずスマホタップモジュールはスイッチサイエンスで購入。一個660円くらい。5V駆動でENピンにHIGHを入力するとタッチした判定になるやつです。

f:id:production910:20210919015116p:plain

この時点でモジュールが大きすぎるので2レーン用の開発が確定しました。

 

 つぎにフリックの時にこのモジュールを動かすためのサーボモータを選定。家にたくさん転がっていたSG90という型のを採用しました。玩具みたいなスペックですが使い道も玩具なので大丈夫。

f:id:production910:20210919015532p:plain

秋月で買えます。電子部品は秋月で買えるかどうかで価値が大幅に変化します。

 

 後は適当に3DCADでモデリングして(初めて3DCADで設計したのですごく難しかった)

f:id:production910:20210919015809p:plain

機械研の友人に頼んで3Dプリンタでパーツを刷ってもらいました。

周りの人間がロボコンに明け暮れている中、一人だけ訳の分からん物を作っていてかなり恥ずかしい思いをしました。

 

 とりあえず装置の外面は完成したのでお披露目。

f:id:production910:20210919032430j:plain

 まあええやろ...という感じ。アルミフレームの加工精度はひどいものですがやったことが無かったので仕方ない。(物理工学科機械システムコース在籍)

 

 次にソフトを開発していきます。今後のレーン拡張とサーボの駆動時間の不安定さのことを考えるとRTOSを用いた割り込み制御*3をやりたく、Arduino*4の割り込みは控えめに言ってうんちなので、マイコン選択はstm32f767にしました。理由はデバッグ用のst-linkがくっついているのと、部屋にあったからです。(2回目)  stm開発は初めてやけど何とかなるやろ。

f:id:production910:20210919023600p:plain

(CubeIDEのコード自動生成を初めて使いました。この機能神すぎません?)

 

 本当に何とかなりました。ざっくり解説するとノーツの来る時間を全て配列に入れておいて、1ノーツ目のタイミングで物理ボタンを押すとノーツが来るタイミングごとに割り込みが発生してGPIOピンを動かし、ノーツを叩いてくれる仕組みです。

 

 後は全ノーツの時間をメモしていくだけ...

 

f:id:production910:20210919023753p:plain

(作業中の風景。右は最近イチオシVtuberの白雪レイドです。Apex配信も麻雀配信も面白い。)

 

 終わらん。

 途中までスマホで録画した画面をコマ送りして手打ちで入力していたのですが、余りにもあほくさい。健康に著しい悪影響を及ぼす可能性があるのでは?。

f:id:production910:20210919025843p:plain

(ここすき)

 

 とのことなので、急遽予定を変更してVSCodeを起動。Pythonスクリプトを適当に書き、フレームをノーツに合わせさえすれば後は自動でやってくれるようにしました。だいぶマシになった。

 

 

 

 と、ここで新たな問題が発覚。

 構造上、「上フリック」が絶対に拾えない。

 。。。

 

 

 

 

 馬鹿じゃねぇの?

 頭がデレステすぎて上フリックの存在をこの時まで認識していませんでした。記事の投稿日まであと2日、作り直す時間もモチベもない...

 

 

f:id:production910:20210919035024j:plain

 

 解決しない問題に頭を悩ませても仕方ないので割り切ります。とりあえず回復とダメガ積んどけば低難易度なら何とかなるの精神で無視。

 

 電源はコンセントから12VACアダプタを通してDCDCコンバータから5V出力する回路が部屋に落ちてたので利用。(3回目)

 最も難易度の低い歌マスの2MIXの譜面を測り終わったのでいざ実践。

 

 

 

 

 

 

f:id:production910:20210919032737p:plain

f:id:production910:20210919042701j:plain

 ほぼデバッグなしで想定通りに動作しました。

 大変に気分がいいのでこのままイベランをやらせに行きましょう!!!

 

 

f:id:production910:20210919043117j:plainf:id:production910:20210919043114j:plainf:id:production910:20210919043111j:plain

 ???????????????

 イベント形式的に同じ1曲を回し続けられない...

 

 

 

 

 

 まだです。まだ終わらせません。2MIX+をクリアできるなら平常時のクリア回数のミッション報酬で石集めができるはずです。

f:id:production910:20210919043929p:plain

f:id:production910:20210919044059j:plain

 

 負けでいいです。

 というわけで現在のスペックは2MIXほぼ全てと低難易度の2MIX+を1曲あたり数十分かけて譜面を打ち込めば安定してクリアできるという感じです。微妙すぎる...

 

 

 改良の方向としてはハードウェアの精度を上げる、リアルタイムで譜面データを読み込めるように画像認識技術を開発する、とかですかね。特に後者回りのノウハウをお持ちの方、もしこの記事を読む機会があれば是非連絡をお待ちしております。

 

 とにもかくにもこれで少しは普段の生活にも時間の余裕ができ、積みゲーを消化したり、未だ進捗が皆無のTOEFLの勉強ができるようになるでしょう。

 

f:id:production910:20210919050123p:plain

 

 

 910アドカレも終盤ですが、明日の担当はマグロ君です。

*1:イベランチート云々で外野から騒がれるのが嫌なので一応伏字

*2:シェアはWinの方が高いが性能はMacという意見を見かけるが、OSの評価の大半は対応ソフトが存在するかが占めるのでシェアが一番高いWinが当然一番優れている

*3:時間を指定してその時間に処理を行わせる。特定の時間に何かを動作させる作業に向く。

*4:開発が簡単な代わりに性能を犠牲にしたマイコン。後述のstmはその逆。これ即ち錬金術の基本、等価交換也。