Gulikit Kingkong Pro Controllerのマクロが記録された「Auto.apg」ファイルについて調べたので紹介します。少し難しい内容になっています。
Gulikit Kingkong Pro Controller
マクロ機能があるSwitch用のコントローラーです。詳細はこちらを見てください。
Switch用のマクロコントローラー「Gulikit Kingkong Pro Controller」を購入したのでレビュー評価
Auto.apg
apgファイルにアクセスする方法
- コントローラーをPCとUSBで接続する
- 何らかのボタンを押してコントローラーの電源を入れておく
- OptionとAPGボタンを同時押し(中央の歯車とその下の旧ラーニングボタン)
これで「GuliKit dat」がドライブとして認識されます。中にはマクロの入力が記録された「Auto.apg」があります。
(認識されない場合は各自の環境によるものなので公式サポートに聞いてみましょう。)
何か特別な裏コマンドのようにも見えますがこれは標準機能で、説明書にも載っています。このAuto.apgファイルを上書きすることで他のコントローラーに記録したマクロを移すことができるわけです。
Auto.apgを覗く
ファイルは1024KBで読み取り専用になっています。ゴニョゴニョする場合は外しておきましょう。
上書きする場合は名前を「Auto.apg」に戻す必要があります。1024KBしかありませんが書き込みは遅いです。
中身は1コマが16byteのデータ配列でエントロピーも0に近い生データです。圧縮や暗号化はされていません。楽勝です。
マジックもヘッダもないので全て[FF]のデータを見つけたらそこが最後として認識されるようなプログラムになっているはずです。
ファイルは1024KB=1,048,576byteなので行数は65,536行です。
Proのマクロ機能は最大10分間記録可能ということなので600秒で割ると1秒辺りのデータ行数が分かります。つまり1秒間に何コマ記録できるか?ということです。
で割ってみると「109.226…」となって割り切れません。
これはおかしいので10分に近い長時間の記録ファイルを作って確認してみます。
できたファイルも1024KBでした。(・ω・*)うーん?
空データを含む最低サイズが1024KBになっているのかな?と思いましたがそうではないようです。つまり公式の「10分間の記録できる」というのが正確ではない可能性が高そうです。実際にはもう少し長い記録が可能。
正確ではありませんがタイマーで9分55秒のときに記録を終了させたところデータの最後が0xD7250で終わっています。
行数は55,077なので、空データは1万行ほど残っている状態です。
595秒で55,000行とすると1秒間に92.5回ほど記録(入力)できる計算になります。
ゲームは30fpsまたは60fpsで描画されるものが主なので性能としては十分と言えるでしょう。
入力をPCで確認する
皆さんが今使っているブラウザで使われているJavaScriptにもゲームパッドとやり取りするAPIがあるので、実際にこのページ内で記録を取ってみましょう。
PCとゲームパッドがある方は実際に繋いで何か入力すると画像のようになります。
Gamepad APIの解説が本題ではないのでコードは省略しますが、
ボタンの入力が変化する度に時間を記録するようにしてあります。
コントローラーが接続されてから経過ミリ秒で記録されます。
とりあえずA→Aと押すだけの簡単なマクロを作ってタイムスタンプとデータを比較してみます。
どちらもAボタンを押すだけの入力でタイミングは0x010 – 0x0B0と0x5D0 – 0x690です。
行数は11行と12行です。A→Aの間隔は0x0B0 – 0x5D0で82行です。
結果はこうなりました
位置 | 行番号 | タイム | 差 |
---|---|---|---|
0x010 | 1 | 3836 | – |
0x0B0 | 12 | 3937 | 101 |
0x5D0 | 94 | 4751 | 814 |
0x690 | 106 | 4852 | 101 |
11行入力に101msと12行入力に101msです。
無入力の間は82行で814msです。
若干のブレがありますがおそらく1入力/10msになっているのかなと予想できます。
データの構造を知る
「マイコンでゲームパッドを作ったことがある」という特殊な経験をお持ちの方は
00-07までがスティック、0Cにボタンの入力が記録されていることはひと目で分かると思います!
で実際にABXYLRZLZRスティックの上下左右を順番に入力して数値を見るとこのようになっていることが分かります。
ボタン | 16進数 | 10進数 | 2進数 |
---|---|---|---|
A | 01 | 1 | 00000001 |
B | 02 | 2 | 00000010 |
X | 04 | 4 | 00000100 |
Y | 08 | 8 | 00001000 |
L | 10 | 16 | 00010000 |
R | 20 | 32 | 00100000 |
ZL | 40 | 64 | 01000000 |
ZR | 80 | 80 | 10000000 |
A→B→X→Yなら1→2→3→4と分かりやすい番号を振っちゃいそうなんですけど、実際は1→2→4→8と倍々で増えていきます。
こうすることで2進数にしたときに各桁で各ボタンのオンオフが確認できて、なおかつ1バイト0-255という小さいデータ量でボタンの状態が見れるんですね!
例えばABYの同時押しなら1+2+8=11になります。
「11」がABYの同時押しになっているのは一目では分かりにくいですが、2進数に直してみると一目瞭然です。
ボタン | 16進数 | 10進数 | 2進数 |
---|---|---|---|
A | 01 | 1 | 00000001 |
B | 02 | 2 | 00000010 |
Y | 08 | 8 | 00001000 |
ABY | 0B | 11 | 00001011 |
1桁目がA、2桁目がB、4桁目がYなので・・・2進数ってスゲー。
これ以上は長くなるので残りはパパっといきます。
ZLとZRは[0C]でオンオフを確認していましたが、トリガーにはレベル(押し込み具合)もあって[09]と[0B]に入っています。
左スティックは[00][01]がX軸、[02][03]がY軸です。
0008が中央になっているのでint16(BA順)で2048に変換されているのかなと思います。
真上に倒すとF00Fになるのでint16(BA)に直すと4080になります。
Dpadは[0E]です。0が中央で上1、右3、下5、左7になっています。
斜め入力は2468ですね。
残りは[0D]です。-4、+8、ホーム16、キャプチャ32です。
中身を知ってできること
長々と難しい話をしてきましたが今回言いたかったのは「キングコンのマクロは自分で作れる」ということです。
つまり頑張ればhyperSSCのようにキーやノードを使ったマクロエディタが作れるわけですね。
ということで今回は以上です。中身を調べたもののhyperSSCがあるのでエディタを作る気はなかったのですが、
マクロを共有してみんなで編集できるようになれば、私が楽できる(入力を作ってもらえる)のではないか?と思ったのでこのような雑記になりました。
編集処理に速度は必要ないので作る場合はブラウザで動かせるWebツールになります。
(作るとは言ってない)
こんにちは
自分もkingkong con の中身をゴニョゴニョしたいのでAPGファイルを開きたいのですがうまく開けません、
どのようなソフトでAPGファイルを開いたのかを教えてほしいです