N64が届いたので、刷新して試行錯誤してるところを消して、わかりやすく整理しました。
RetroSpyNintendoSpy(ニンテンドースパイ)とは、FC,SFC,N64,GCの実機のコントローラの入力をゲーム本体と、Arduinoに分配して、その入力を表示させるものです。
追記)フォークされたRetroSpyが上記よりも多くのハードに対応しましたので、それを書いていきます。詳しくはniedleさんの記事より。
Dual Shock2のPS2での動作を2019/02/06時点で確認しました。最新版は対応したとのこと。
Wiiの拡張コントローラーにも対応したそうです。
数フレーム(1,2F)ぐらいだとその入力が反映されないとか、表示に遅延(どの程度かは知らず)があるため完全に正確というわけではないです。
知識がない人ですので、やり方としては素人です。ちゃんと知識がある人は良い環境でできると思います。海外の人はめっちゃしっかりしてます。
知識ある勢のやり方はこちら(ありちゃんさん)
スキンも出来る限りまとめてみました。⇨リンク
前置き
(難)PS2>FC,SFC>GC>64(易)
なぜかと言えば導線が多い順。ただし64だけは電圧3.3Vらしく、映らない、おかしくなることもあるらしい。ゲームによってコントローラーパックをつけたり外したりで動作が変わるみたいです。
FCはSMBでしかやってないですが、入力遅延はなくて、入力表示に遅延が発生しました。よくわかりませんね。
・必要な技術やスペック
ものを準備できる。はさみかナイフかで導線を切れる。(放送しても余裕あるぐらいのPCスペック)
用意したもの
安いのにこだわると2,000円あればお釣りが来るぐらいです。安いと悪いというわけでもないので、お好みで。
◆Arduino uno 3R マイコン:ATmega328(P) 電圧:5V
廉価のものでも可能で、1000円前後です。(どちらのリンク先のも購入して使用可でした)Aliexpressなら400円ですが
◆USB A-Bタイプ USBの長さも考えて購入しましょう1mあれば殆どの場合問題ないです。
Arduino買うと同梱してくる場合も多い。
◆延長ケーブルと分配したもの(材料以下 作り方は1.)
●ジャンプワイヤ-オスオス:メスは黒いのが邪魔で接続できないので注意
●絶縁テープ:ベタベタしないものが良さそう。100均の絶縁テープを使用。
●延長ケーブル1本:配線当たりハズレあり 安いの※1
●切るもの:ニッパーじゃなくても、ハサミで十分です
- なくても良い
●ワイヤーストリッパー(0.5穴):神 作業がずいぶん楽になる(ダイソーなどで)
(●はんだこて、ハンダ:環境がある人のみ)
◆ソフトウェア
○Arduino
○ClassicControllerSpy (解凍不要)
○RetroSpy
それぞれ最新版をダウンロードしておく
※1
コントローラーを犠牲にしてくっつける人が多いみたいですが、それだと別のコントローラに変更する際に困ったり、邪魔だったりすることがあるので、取り外せる延長ケーブルのほうがおすすめです。
ebayで300円しないで売ってるのでそこから買い漁ってます。amazonだと微妙に高いですががすぐ届きます。
やったこと
とりあえず一通り読んで見てください。
N64のが届いたので、それを例にしてやってみます。 基本的にはどれでもやることは同じで変更点は、ジャンプワイヤの位置、数や、書き込みするところぐらいです。他で変えるところはオレンジにしておきます。
- ケーブル関連 延長ケーブルを切断して、導線をジャンプワイヤにくっつける
延長ケーブルを切断
切断する位置はお好みですが、ゲームとPCの距離が遠いので、真ん中ぐらいを切断しました。
延長ケーブルのところに、元のコントローラーの配線とジャンプワイヤの2つを合わせて繋ぐようにします。(要は分配)
イメージとしては
延長ケーブルを切断すると、黒いゴムを剥いで、導線を出す。極端に短いと困るので、それなりの長さで。導線のカバーだけ剥くのがそこそこ難しいので、作りにくいなと思ったら、また全部切ってやり直しってやってました。
これはN64の赤緑黒パターンです。今回は見たこと無い配置だったので、光当てて場所を確認しました。黒と緑の導線をジャンプワイヤにくっつける。(巻きつける)Arduinoに接続しない赤はそのまま導線を付け直します。
そして、切断したものと同じ色の導線(ピン)を繋ぐ。ハンダが使えれば、それを使う。ないなら、図のようにぐるぐる捻って完成。ジャンプワイヤと接続するもの(後述)は捻った後、ジャンプワイヤにぐるぐる巻きつける。根本から力を入れて順々に巻いていくと解けたりしないです。
作るときには、後述の太字のArduinoに接続するピンにジャンプワイヤを付けてください。
その後絶縁テープでしっかり覆います。これでケーブルの準備は完了です。きちんと覆えないと後々困ります。はずれないようにするのも重要です。
かなり雑でも出来ますよっていう図
これが一番大変なので、これができれば完成はすぐです。それだけに丁寧にやってください。
2.Aurdinoの操作(PC上)
ArduinoをUSBでPCと接続します。
先程ダウンロードしたRetroSpyとArduinoを解凍する。
/arduino-1.8.1-windows/arduino-1.8.1/arduino.exe
を起動し、Arduinoに書き込みをできるようになるソフトをインストールする。
●Arduino
インストールが終われば、RetroSpyを解凍したものを開く。
/RetroSpy-release/firmware/firmware.ino
をArduinoの画面の"ファイル-開く"から選択する。直接開いても問題ないです。
触るところを適当に○で囲みました。
●ClassicController Arduino Libraryを導入する
「スケッチ」>「ライブラリをインクルード」>「.ZIP形式のライブラリをインストール」を選択する。その後ファイル選択画面が開くので、先ほどダウンロードした、'ClassicControllerSpy.zip'を選択する。
これができない場合があるみたいなので、NES,SFC,N64,GCだけ使うならNintendospyでやってみると良いかも。(ライブラリ不要)
https://github.com/jaburns/NintendoSpy/releases/tag/v1.10.1
手順は同様です。
●Arduionoに書き込む
// ---------- Uncomment one of these options to select operation mode --------------//#define MODE_GC
//#define MODE_N64
//#define MODE_SNES
//#define MODE_NES
// Bridge one of the analog GND to the right analog IN to enable your selected mode
//#define MODE_DETECT
こうなっているところのN64の//を消して
#define MODE_N64
のようにする(上画像参照・他は残したまま)
NES,SNES,GCで使いたいときは、それぞれの//を消してください。
改変をすれば、左上にある、→を押して、ボードへの書き込みをする。
->うまくできませんでしたの場合
ツールを選択して、シリアルポートを選択(今回の場合はCOM3)
ボードを~~~~~~~~unoにする。
USBがちゃんと刺さっているか
など
https://novicengineering.com/arduino%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E8%A7%A3%E6%B1%BA%E7%AD%96/
ピンを刺したままで行っている場合はできないことがあるので、ピンを抜いた状態で、書き込みを行うこと。
これをやると上手くできました。
3.Arduino(物理)とジャンプワイヤを接続する。
1で作った、ジャンプワイヤを指定のところに刺します。N64ですので、黒(GND)をGND,緑(Signal)を2に刺しました。FC,SFC,GCは刺す場所、数が違うので、この後のを参考にピンを刺してください。
延長ケーブルは、ものによって、配線の色が異なります。サンプルがでているものであれば、容易に判断できますが、できない場合は自分で調べましょう。
それによってどこに指したりするのが変わるので、とりあえず一覧作りました。
配線一覧
https://docs.google.com/spreadsheets/d/1-hgy1zXaJrSYPtAqZ8ilwcrpnZO01lOE0qb0FLI6oeA/edit?usp=sharing
4.RetroSpyを起動する
/RetroSpy-release/RetroSpy.exe を開く
対応するController Sourceを選んで、使用するSkinを選択すれば終わりです。
ジャンプワイヤがが上手く嵌っていれば、入力が表示されるはずです。
コントローラーの画面を右クリックすると最前面に表示とちらつきを減らせます。ちらつきに関してはよくわかりませんが。
出来ない場合は下に書いてあるので、それを見てください。
これで終わりです。
Skinの作り方
RestSpyのskinフォルダに新しくフォルダを作ってその中に、xmlファイル、画像ファイルで作ります。全体図(inputなし)、各部分の入力したときの色と大きさに合わせればそれで完成します。デフォルトのをコピーし、改変すると楽です。
画像の大きさは別途変えられるので、透過だけしておけばなんとかなります。後基準となるxyの位置は左上から始まり大きな値になると、右、下になります。ペイントかなにかで中心の位置をメモしておくと、調整が楽です。
ソフトは色々有りますが、フォトショップが一番楽っぽくて、無料だったのとインストールしてたGIMPでやりました。
・いくつかSkinを紹介しておきます。
公開されてるものが以外少なかったです。また、オリジナルで使ってる人は自分で作ったり、仲が良ければただで作ってもらったり、それをもらったり、お金を出して作ってもらってるみたいです。twitterとyoutubeで検索かけたぐらいで、汎用のものは載せてません。
海外で公開されているSNESとNESはなかったですね。
長かったので、配線と同じところに統合しました。
https://goo.gl/RsP4Mz
よくある質問
Q,遅延はあるの?
A,ないみたいです。正確には5fも延長されている関係で0.0000000240秒(24ns)ありますが、無視できる範囲です。
Q,Arduinoとか電子工作とか全くわからないけどできる?
A,わからないけど真似をすればできます。そもそも電子工作を触らない人が多いので、深い理解ができて使ってる人がいるかどうか。
Q,上手くできないんだが?
A,下に私が上手くできなかったことに付いて色々書いてますので、それを参考にしてください。それでもだめなら私にもわかりません。
Q.ハードウェア改造になるの?
構造としては配線を分配しているだけです。一番厳密なスーパーマリオブラザーズのトッププレイヤーも採用しているし、時のオカリナなどでも普通に用いられています。ある種不正防止という観点もあるので問題ありません。
トラブルシューティング
1.ワイヤーをArduinoに指すとコントローラーのキーがゲームにすら反映されない。(刺さないときは、反映される)、おかしい挙動になる。RetroSpyに反映されない。
a).Ardionoに接続せずに、延長ケーブルだけで一度プレイしてみる。ゲームが入力に反映しない場合は、配線、導線がうまくできていないので、絶縁テープを剥がしてもう一度付け直す。
b).Ardiunoに接続するワイヤーが間違えている。記載されていない場合は、テスターで判定するか、ワイヤーを虱潰しに特定していく作業が必要。
c).Arduinoに書き込みが完了しない場合、ピンを全て抜いた状態で行わないとできないので、注意する。
2.電源がついているのに、ゲームが勝手に終了した
剥いた導線が別のにくっついて、電流がおかしくなって?終了します。きちんと絶縁テープなどに導線に封をしておきましょう。
3.コントローラに触れていないにも関わらず、色々なキーが勝手に動き出す。(GC,SFC解決ver)
GNDを付けずに1本だけで今までやっていたのを、やんわり付けたほうがいいよと言われて、付けたら上手く機能しました。つけなくても動作しますが、GNDをつけると安定する場合が多いです。
4.Nintendospyが起動しない
Skinsのxmlの記述がおかしいものを入れたら起動しないことがありました。skinの中身が正しくなっていないのが原因ですので、直しておきましょう。
いくつかSkinを取り除く->起動しない->取り除いた部分以外に問題がある(+取り除いた部分)
-->起動する->取り除いた部分に問題がある
その中のskin.xmlの中身が悪いので
数行切り取り->Nintendospy->起動しない->それ以外に問題がある(+切り取った部分)
-->起動する->切り取った部分に問題がある
地道にやってください。
大体は""がないだとかそんなのでした。
5.その他の場合
配線を見直してみる。Arduinoを経由しないで、延長ケーブルだけでプレイして問題ないのなら、そこはok。だめなら配線が悪い。
ジャンプワイヤに刺すところが違うか、そもそもジャンプワイヤにする配線が間違っているかを検討してみてください。それでも問題ないなら、上のやってみてください。
次はfirmwareの書き込みですか。//を消すのが間違ってないかとか、書き込みを完了しているか確認するか、もう一度やってみるか。
最後はnintendospyとかの解凍がうまくいかないケースで、もう一度解凍してみるとかですかね。セキュリティソフトの関係で消えるファイルも多分なさそうです。
何もしないでも、変なところに入力が入っている場合は、入力が効けば問題ないです。そこに関してはよくわかりません。でも多分配線になるのかな?
-----------------
参考にしました
https://github.com/jaburns/NintendoSpy/blob/master/docs/guide-evilash25.md
nintendospyのお話(コントローラーの入力表示)(03/02)
http://ch.nicovideo.jp/orimar/blomaga/ar1140003
これを参考にしました。資料が少なかったので、別視点から書いてみると参考になるだろうということで記述。
英語の導入方法とトラブルなどの対応
https://pastebin.com/5BHnWQBu