人に自作 hitbox を作ってあげた。あと連射性能の計測をした。

1ヶ月に1回は更新したい本blogは、無事3ヶ月更新が空きました。
今年もよろしくおねがいします。

で、以前に自作 hitbox を作ったというエントリを書いたのですが、その後友人にほぼ同様のものを実費+おこづかいで作ってあげました。
少しミスもあったんですが、全体的に自分用のものを作ったときと比べて随分工作精度が上がった気がします。
ソフトウェアも使い回せるし、作れば作るほどうまくなっていって良さそうなのでは?という気持ちがあります。

ボタンの色がなんかスゴイですが、友人の希望によりこの色です。すでに友人の手元にこれは行ったのですが、気に入ってくれているようです。よかった。

で、最近、STEAM版の Mr.Driller アンコールのフレーム落ちの対策ができて、またやる気が高まってきたので、コントローラーの連射速度の調整をしました。

やはり以前のエントリで、コマンドの入力フレームを計測するために、Unityでソフトを書いたという内容を書いたのですが、これを改造して、秒間何回連射しているのか計測できるようにしました。

コントローラーの中には sparkfun pro micro を用いており、タイマー用のライブラリには MsTimer2 を使っています。
MsTimer2 でタイマを設定するインタフェース MsTimer2::set(unsigned long ms, void (*f)()) では、割り込み周期のミリ秒単位での指定と、タイマが切れた際に呼び出す関数の指定ができるようになっています。
ゲームでは60フレームが用いられることがありますが、 60フレームの際の 1フレームの時間は、おそよ16.6666ms であり、ボタンの on と off をそれぞれのフレームで交互に入力するためには、その2倍の 33.3333ms 周期でボタンの押し下げと離しを行う必要があります。しかし、MsTimer2::set(unsigned long ms, void (*f)())の時間は ms 単位であるため、正確に指定することはできず、やむなく 34ms としました。

34msごとにボタンを押すと、1秒あたりおよそ 29.41 回の連射になるのですが、これが正しく unity で書いたソフトから検出することができ、pro micro や OS のレベルで遅延が起こり、入力が抜けてしまうということはないということが確認できました。

これ以上速度をあげようと思うと、ライブラリを用いず、自力でタイマーを叩く必要が出てくるので、そのへんはおいおいやるかもしれないしこれで満足してやらないかもしれないです。
どうしようかなぁ。

レバーレスコントローラー(hitbox あるいはガフロコンって呼ばれるもの)を作った。格ゲーにおける優位性をちょっと測定した。

ふと、手元にあった、ピンの少ない Sparkfun Pro Micro 互換機で、ゲーム用のコントローラーを作ってみたらそれなりに作れたので、通常通りにピンが付いている Sparkfun Pro Micro を買ったり、ドリルを買ったりホールソーを買ったり、ボタンを買ったりしてレバーレスコントローラー自作してみました。


本 blog エントリではこの自作したレバーレスコントローラを自作レバーレスコントローラーと呼びます。また、製品として売られているレバーレスコントローラである HitBox を hitbox と呼びます。

普通、レバーレスコントローラーを作る場合には、あり物のコントローラーの基板を乗っ取ったり、あるいは Brook の UNIVERSAL FIGHTING BOARD を基板として使うのが定番のようです。Brook の UNIVERSAL FIGHTING BOARDは12000円くらいします。でも今回は、既存のコントローラーの基板やBrook の UNIVERSAL FIGHTING BOARD の代わりに Sparkfun Pro Micro とこれの上で動く自作のプログラムで代用したので、2000円くらいで済ますことができました。もしも Pro Micro 安い互換機を使えば更に安くすることができますね。

ちなみに、今回作った自作レバーレスコントローラーで使ったSparkfun Pro Micro は2000円くらいで、それ以外のボタンやケースやら配線のためのもろもろが6000円で、合計8000円くらいでした。ちなみに、 PC と Nintendo Switch で使えることは確認済みでです。一方 PS4 では使えないことを確認しています。でも、PS4でそんなにゲーム遊ばないから、今回はこれで良いということにしています。

レバーレスコントローラーと SOCD (Simultaneous Opposite Cardinal Direction/反対方向同時入力)

今回、わざわざ Pro Micro を使ったのは、安く仕上げるためであると同時に、コントローラーの挙動を細かく変更するためでもあります。

レバーレスコントローラーの作成にあたっては、SOCD(Simultaneous Opposite Cardinal Direction/反対方向同時入力)に対する考慮が必要となります。
SOCDとは、通常、レバーや十字キーでは入力できない、左右の同時押しあるいは上下の同時押しをどのように扱うかについてのアルゴリズムのことです。

格闘ゲームにおける SOCD

hitbox では、左右同時押しは横方向はニュートラルとして扱い、上下の同時押しは上入力として扱われます。格闘ゲーム向けのにおいては、この hitbox の SOCD の扱いが、デファクトスタンダードとなっているようです。
Brook の UNIVERSAL FIGHTING BOARDは、ジャンパピンを用いた設定により、hitbox と同等とすることが可能です。

レバーレスコントローラーの格闘ゲームプレイ上の利点の定量化

格闘ゲームにおいて、レバーレスコントローラーによる操作は、一部レバーを用いた従来のコントローラーよりも高速に可能であるとして、多くのプレイヤーが現在利用していることがインターネットを検索することによって確認できます。
しかしながら具体的にはどの程度有利であるかについては、レバーレスコントローラと従来のレバーによるコントローラそれぞれの操作の習熟度に伴い個々人で異なること、またその簡易な計測方法が存在しないことといった理由で、計測が行われてこなかったのではないかと考えました。

そこで今回、キーディスプレイおよび各入力の継続フレームの表示のみを行うプログラムを unity を用いて作成し、これを用いて測定を行える環境を作りました。

まだ十分な回数をこなせておらず、統計として不十分なので、いくつかの測定結果及び感想を書いておきます。
なお、自作レバーレスコントローラーの SOCD は、hitbox に準拠した設定としています。また、比較対象に使っている通常のレバーありコントローラーには、 RAP V4 隼を用いました。

計測対象 自作レバーレスコントローラー レバーありコントローラー
←ため→ のニュートラル経過フレーム数 0フレームあるいは1フレーム 1から3フレーム。8割くらい2フレーム。
標準的な昇龍拳入力開始から完成まで(623入力) 7フレームくらい 7フレームくらい
昇龍拳のhitbox 向け入力開始から完成まで(639入力) 大体6フレームくらいだけど4フレームで完成したときもあった やってない

回数をこなした統計は、また追々測って行こうと思います。

あと、すでにレバーレスコントローラーの操作になれた人のフレーム情報も見てみたいので、汎用的な作りにして配ったりしたい。
今は、とりあえず図り始められる環境を作ることを優先して、PC環境依存でベタ書きになっていて人に配れたものではないので。

格闘ゲーム以外における SOCD

現在、製品として入手可能な hitbox を始めとするレバーレスコントローラーは格闘ゲーム用に使うことを想定している事が多いですが、もちろん他のゲームに使うことも出来ます。
ただし、他の種類のゲームに用いるときには、 SOCD の扱いは格闘ゲームとは別の考え方をするべきなのではないかと考えています。
通常 SOCD は、左右の同時押しあるいは上下の同時押しを考慮しますが、斜めの入力を行う必要がなく上下左右の4方向の入力のみを想定するテトリスなどのパズルゲームでは、格闘ゲームでの利用を想定した SOCD とは異なるアルゴリズムがより適しているのではないかと考えていました。例えば、上下左右の4方向をすべて排他し、最後に押されたものを優先するのが良いのではないかと考えました。
このような SOCD についての挙動の変更は、既存のコントローラの基板や Brook の UNIVERSAL FIGHTING BOARD では実現不可能であるため、これを自由にコントロールするために、Pro Microで自作する必要がありました。

格闘ゲーム以外においてはどうするのが良いのかについても追々考えていきたいですね。

GR-SAKURA買った。

久々に電子工作系の話題。

GR-SAKURA というマイコンボードを買いました。

ピンの位置はこの手のマイコンボードではおそらく最大手のArduinoと互換。
コードもリコンパイルすれば動くように、ライブラリのレイヤでArduinoに合わせてあるみたいです。
で、Arduino と比べてメモリが大きかったり、プロセッサが早かったり、microsdが刺さったり、ethernetが喋れたり、と、いろいろ装備して5000円弱というお求めやすい価格!

ethernetが喋れるArduinoは6000円くらいしますしね。

さて。これで、ネットワーク経由でいろいろできるようになった!なにして遊ぼうかなぁ。

このマイコン、テキストエディタとコンパイラがウェブサービスで提供されているので好きなエディタ(たとえばemacs)とかを使えないと言うのが目下辛いところかなーって気がしてます。
コンパイラがウェブサービスになってるっていうのは、すごくありがたいと思うんですけどね。
そんなわけで、当面はコマンドラインからファイルアップロード/ダウンロードしたり、コンパイルさせたりするためのCLIを作って、 make でコンパイル結果が手元に残る状態にするのが目標かなー。って感じで。
いまどきgit的なバージョン管理ができないというのも辛いですし、やっぱりエディタは体の一部。そう簡単に取り替えられたりはしないのですよ。

調べてみたところ、シンプルなWEB APIがそろってるのでさくっと作れそう。

 

創造空間ナノラボに行ってきました。

最近、arduinoを用いた電子工作にお熱で、この手の部品は通販で買うか、秋葉原で買うかくらいしか選択肢がないのですが、通販で買うと部品が足りなかったときに長い待ち時間が発生してしまって残念なので、出来れば秋葉原で部品を買い揃えながら作業できるスペースがあるといいのになぁと思っていました。

そういう電子工作向けのレンタルスペースとして

という2店舗があるようなのですが、今回は場所がよいという理由であまり深く悩まず創造空間ナノラボで作業をしてみました。

やったことは、コンデンサマイクのテストでした。
よくわからないので、コンデンサマイクだけ適当に買ってお店へ行ったのですが、
まったく同じ部品を隣の席に座っていた人が使っていて、上手く使うためにはアンプやコンデンサ等の部品で音量を稼がないと難しいよーと教えてくれて
ついでに、お店の奥のほうから必要な部品が出てきたりして
半田ごて自由に使えるし
ドリルも自由に使えるみたいだし
電源も無線LANも自由に使えるし
しかも2時間500円で
ジュース飲み放題だし

秋葉原のオアシスといっても過言ではないと思いました!

また作業スペースが欲しいときにはお世話になろうと思います。

ちなみに、コンデンサマイクで拾った音量にあわせて、きゅうべえ人形の目が光る予定です。