NintendoSpyのソースコードを読んで自分流のアレンジを目指している進捗報告

この記事は スマブラ Advent Calendar 2021 - Adventar の15日目の記事です。

adventar.org

前日の記事は、篝火スタッフのめがちさんによるスマブラオフ大会で使われるWebサービスについて - めがブロでした!

大会の目的に合わせたWebサービスの利用がされているという話がされていて、主催者目線でも参加者目線でも、大会のことを改めて考えることに繋がる記事なのではないでしょうか。

「実際に大会を開いてみたい」という方のツール探しの手がかりにもなると思います!

自己紹介

寝椅子といいます。

たまにオフ大会や宅オフに遊びに行っています。

forの頃は大学でスマサーを立ち上げたりキャラ窓の運用に参加したりしていました。

概要

この記事は昨年書いた記事 格ゲー風キーロガーをつくりたーーーいな! - 寝椅子置き場 の続き……というよりは生存報告です。

この記事で、格ゲーのリプレイやトレモに実装されているようなキーロガー、もといキーディスプレイをスマブラ用に作りたいなということと、知識が全く無くてわかりませんでしたとなるまでの過程を記しました。

今回はそれが今どうなっているかについての進捗報告と、今後の取組みについて連絡します。

そもそものモチベーション

僕は長年スマブラをプレイしていて、大事な場面で「やってない!」となることが本当に多いです。

トレモ不足かラグのせいかメンタルか、どちらにしても自分の入力を矯正する足がかりがほしい。 そこでリプレイ+当時のキー入力を可視化することで、自分に現実を叩きつけてやりたい、というモチベーションがあります。

既存のツールが行うアニメーションによるリアルタイムな入力可視化も優れているのですが、コンボや数秒単位の動作の流れを追うには、ある程度過去の履歴も同時に見れたほうが嬉しいなという思いもありました。

なので、格ゲーのような、画面の端にキー入力履歴がどんどん積み上がっていくような表示をしてくれるものが欲しくなりました。

今でもソニックレイヴの入力が事故ってストックを溶かしているので、未だに欲しいです。

進捗

今こんな感じです。

ちょっと見にくいですが、コントローラーの入力をテキストで取得し、表示する方法を理解できました。

これは昨年の記事でも触れているNintendoSpyのソースコードを読み、MITライセンスの範囲で流用を行っています。

GitHub - jaburns/NintendoSpy: Live controller viewer for Nintendo consoles. Includes viewer application for Windows, and Arduino sketch for hardware interface.

特にシリアル通信を処理してデータを加工するところはそのまま利用させていただいています。

僕個人で書いた箇所は現状ほとんどないです。

NintendoSpyについて

NintendoSpyはWindows Presentation Foundation(WPF)というフレームワークを使用して作成されたC#製のWindows用アプリケーションです。

上記リンクのReleaseからアプリケーションをDLし、コントローラーの入力をPCに読み込む装置を用意すれば、それをアニメーションとして画面に表示することができます。

この記事の読者のみなさんが目にするところだと、スマブラやSpeedRunの配信者がコントローラーの入力を画面に表示するのに使用されています。

ただし現在では、NintendoSpyのクローンであるRetroSpyの方が今風でしょう。

機能が拡張され、今もメンテナンスが続いているのは、RetroSpyの方です。

もしみなさんがこれらのアプリケーションを利用する場合は、とりあえずRetroSpyから触ってみることになるはずです。

詳しい説明は各アプリケーションの紹介記事に譲ります……が、ブロマガの閉鎖で有名な記事の多くが見れなくなっているかもしれません。

もしソースコードを読んで仕組みを知りたい、実装内容を確認したいという場合、NintendoSpyのほうがシンプルで読みやすいと思います。

RetroSpyでは実装が増えていること、また有料らしいフレームワークを導入して開発されているらしいことなどに気づき、初心者視点で読解のハードルが高く感じました。

1年間でやったこと

昨年書かれている言語が書けない仕様がわからないという状態で、最低限実装のカナメを見つけられれば経験でカバーして自分のやりたいことはできるだろという勢いで取り組み、失敗しました。

普段プログラミング言語で書かれたソースコードを日常的に読み書きする生活をしていなかったので、ヤマカンだけではどうしようもなかったです。

なので、基礎勉強から始めることにしました。

C++の本を使って基礎を学んだり、でも実際はNintendoSpyがC#製だったりしたことに気づいて勉強し直したりして、徐々にNintendoSpyがどういう作りで動作しているのか読めるようになってきました。

そうして当初の目的にようやく戻ってきて、コントローラーの入力データを加工できそうだな、というところまでたどり着いたのが現在の進捗です。

ただ、本当に1年これだけをやっていたこともなく、新作ゲームを遊んだりスマブラやったり絵を描いたりしていました。

学校の課題や研究ではないので、平日夜や週末の気が向いたときに無理のない範囲でスローペースで進めています。

今後

プライベートな場所で書いていたNintendoSpyの読解メモをアクセス可能な場所に移して、そこで更新することにしました。

NintendoSpyリポジトリを読む - neisucafe

別に見ても面白いものではないかもですが、初心者でも僕ほど時間を掛けずにコントローラー入力の可視化について仕組みを理解するための足がかりくらいにはなるかもしれないです。

また、こういう雑多な書きなぐりや文章にまとめるわけではない、見られても問題ないメモはここに投げます。 あくまでブックマークとメモの延長のカオスな場所です。読んでほしい内容になったページができたらリンクをツイートします。

アプリケーションの方ですが、最終的には格ゲーのトレモのように、同時に入力されたキーを横に一覧で並べ、それが時間経過で縦に流れていくとかっこいいですね。 背景の色を抜いてオーバーレイできるようにしたり、アナログ入力を矢印の画像を使って正しい向きを示したりすると、ソニックレイヴやPKTAの復帰ミスの原因が可視化されて満足できそうです。 入力履歴の保存とリプレイ映像との同期は……難しそうだけど、できたら素敵。言うだけならタダなので語るだけ語っておきます。

最後に

ようやっと昨年想定していたスタート地点に戻ってきました。

最初に貼ったツイートも本当は無理やり動かしてるところがあって、まだまだ実用レベルですらないですが、満足するか飽きるまでは時間かけすぎずにやってみようと思います。 多分こなれている人ならあっという間に僕の進捗を追い抜けると思うので、もし追い抜いたら参考にしたいので教えて下さい。

興味のある方やアドバイスなどあればぜひコメントいただけると助かります。 今はデータバインディングやイベントに苦しみながら勉強しています。

興味ある方はぜひお声掛けいただきたいです。情報共有させてください。

進捗あればまたこういった記事にすると思います。

でもAdventCalendar以外の場所にしよう……毎年これでしかも遅々として進まない内容ならあまりおもしろくないですし。

こういうコントローラーの入力でなくても、もし何か始めたい方は最低2人いると勢いが違うので、近くの人やそわそわしている人を巻き込むのがおすすめです。 TEDでもそんなスピーチしてました。1人でやってる人からの偉そうなアドバイスです!

ここまで読んでくださりありがとうございました。

明日はつい先日に篝火のシードに関して解説記事をアップしてくださった、P-さんによる窓主引き継ぎについての記事とのこと! 貴重な体験談やノウハウがお聞き出来そうで楽しみですね。

#スマブラAdventCalendar2021 - Twitter検索 / Twitter で記事のリアクションや過去記事の遡りもやってみてください。

企画ページはこちら。

adventar.org