人に自作 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で自作する必要がありました。

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

35歳になりました

2017年10月3日に35歳になりました。
四捨五入したら40歳になる。マジか。
マジかとか書いちゃうアラフォーマジか。大丈夫なのか。
大人とは一体何なのか。

例年、誕生日前になったら、しっかりamazonの欲しいモノリストを作って、
twitterに流したりしていたのだけど、今年は完全に忘れていた。

去年は、結構色々頂いたのだけど、それをあまり有効活用できなかったという反省もある。
もっとアクティブに活動できたら良かったと思う。
インターネットに欲しいモノリストを公開して、それで、何かをもらうってことは、
インターネットに対してその分、何か面白いことを仕掛けていく責任みたいなものと表裏一体だと思っている。
そういった面で、今年一年はあんまりいろいろできなかったなーって思ってる。

だから、今年に関しては、何かいただくというのも気が引けるので、
今年は別に欲しいものリストは作らなくても作らなくてもいいかなぁとも思ったんだけど、
普段、あまり何がほしいのかを整理する機会もないので、
ほしいものを棚卸しする機会だと思って整理してみることにした。
毎年、何が欲しかったのか、ということを記録して振り返れるのは悪くないとおもう。

で、今年のリストがこれ。
http://www.amazon.co.jp/registry/wishlist/3B9IYL63UAU7K/ref=cm_sw_r_tw_ws_x_5uy1zbZV51GHX

正直、最近、音楽はさっぱり、って感じなんだけど、ほしいものを整理したら結局楽器だらけになった。

raspberry pi 3 が届いた

で、10月3日の夜10時頃にとりあえずまとめてtwitterに流したら、
さっそく翌日、10月4日にみかるちゃんからraspberry pi 3が届いた。

先に書いたとおり、今何が欲しいのかを自分でまとめて、
ついでにネタでtwitterに流しておくかと言った気持ちだったので本当に何かが届くことを想定なんてしてなかった。
なので、届いた結果、raspberry pi 3を動かすために必要なmicrosdカードとmicro usbのケーブルが、
家にまったくないことに気づいて、焦ってamazonでmicrosdとmicrousbのケーブルを注文する、ということが起きた。
それくらい、なにかが届く可能性なんて、まともに想定していなかった。

動かすのに必要な物はひと通り注文して、ちゃんと動かす事ができた。
このraspberry pi 3 を使ってやりたい事があるので、
形としてまとまってきたらまたblogに書くことにしようと思う。

PEPSI Strong 5.0GVがたくさん届いた。

自分は、コーラの中ではペプシコーラが好きで、その中でも特にこのStrong 5.0GVってのが一番好きで

前述の通り、流石に誰もなにも送って来ないだろうと思っていたら、
motioncraftから2ケース、
伊波さんたあんふたつむらにゃむずから1ケースずつ、
合計5ケース届いた。

1ケースあたり500mlのペットボトルが24本入っているため、合計で500mlペットボトル120本、24kgのペプシコーラが家に届いた。
(なお、まだ届いてないけど発送したと名乗り出てくれている人も居る。マジか。)

自分は、このコーラが大好きなので、たくさんあっても全く困らないのだが、
普通に飲むだけではあまりに芸がないなと思って、とりあえずtwitterの名前に残りのペットボトルの本数を書くことにした。

こんなかんじ。

しかし、これには問題があると言う事がわかった。
コーラを飲むのは自分だけではなく、嫁さんも飲む。
だから、自分だけが書き換えたのでは数えもれが発生してしまう。

どうしようかなーと悩んでいたら、嫁さんが
「コーラのペットボトルを飲み終わった時に押すボタンみたいなのがあったらいい」と言った。
「ほー なるほどー」、と思ったのでつくった。

もともと持ってたraspberry pi(初代)のGPIOにタクトスイッチを繋ぎ、
ボタンを押したことをnode-redで検出し、node.jsで作ったREST API を叩くようにした。

REST APIは、ペプシの残り本数を状態として持っており、叩かれたら本数を1本減らして、
1本飲んだと言うことをtwitterにポストしつつ、名前を変更する。

毎日、日本時間で23:55に、状態を確認するシェルスクリプトをキックし、状態をCSVに書きだす。
で、書き出されたCSVを読んで、グラフにする。
グラフはここ。
http://sirrow.info/pepsi/

まぁ、なんか、そういうものを作った。
開発環境を作るところからだったのでけっこう時間がかかってしまった。
全部で4〜5時間くらいだと思う。10月7日から9日が3連休で本当に良かった。

コーラを贈ってくれた人も、贈ってくれなかった人もtwitterの名前とかグラフとか見て、
こんなに減ったのかーとなんだかしみじみしてくれれば、無駄に作った甲斐がある。

包丁用の砥石とオシロスコープをもらった

tmy先生からいただいた。

砥石はもともと、tmy先生のお家にあったものと同じ物をたまたま欲しいものリストにいれてた。
あと、オシロスコープは自分に贈ってくれると同時に、tmy先生自身も買ったらしい。
なので、両方ともお揃い。ちょっとうれしい。

砥石は早速使ってみた。
いろんな経緯があって、自分の家には同じ包丁が2つある。
なので、片方を研いで、もう片方は研がずに比べて見たら、
研いだ方がめちゃめちゃよく切れるようになった。

それを確認した後、もう片方も研いだ。

当たり前っちゃあ当たり前だけど、包丁は研ぐとよく切れるようになる。とてもよい。

オシロスコープは、今後頑張って使っていこうと言う感じ。
電子工作、捗るようになるだろうか。

童話 IoT

2016年、あるところに1歳半の娘とその両親が暮らしておったそうな。

それは、大晦日を間近にした、ある日の夜のことじゃった。
娘が寝ているはずの寝室から咳き込む音がした。
両親は慌てて寝室へ向かい、娘の様子を確認した。
娘は痰が喉に絡んでいるらしく、何度も咳き込んでいた。
咳を何度も続けるうち、咳き込む際に生じる胃への衝撃が強かったためか、夕食で食べたものを吐いてしまった。

両親は、吐瀉物をを片づけた後、両親は再び娘を寝かしつけた。
その後、なぜこのようなことになってしまったのか相談した。
吐いた原因は咳であるが、なぜ咳き込むのかはわからなかった。
こんなことは何日も続きはしないだろうと考え、両親も眠りへついた。

しかし、その後、娘の咳と嘔吐は何日か続いた。
娘自身、吐くほど咳き込むのは辛かった。
両親は、また咳き込んで吐いてしまうかもしれないと、常に気を張リ続けていた。
何よりも、寝ぼけたまま吐いたものが喉に詰まって娘が窒息する可能性があるということを恐れた。

幸い家は広くなく、両親は娘が咳き込むと、すぐに気づくことができた。
しかし、両親が咳に気づいて駆けつけても娘の嘔吐を止めることはできなかった。
嘔吐の後、吐瀉物の片付けと再度の寝かしつけを行う日々が続いた。
両親は、疲れ切ってしまっていた。

娘と両親の住む家には、ささやかながらも、父親が手作りしたIoTシステムがあった。
このシステムは5分に1度、家の中の各部屋の温度と湿度を自動的に取得し、ダッシュボードに可視化するものであった。

温度と湿度を自動的に取得するセンサは、ESP8266を用いた簡易なもので、1つ1000円ほどで作ることができた。

iot_sensor

ダッシュボードはこのようなものであった。

iot_dashboard

ある日の昼のこと。母親は娘は、夜に咳き込むが日中は全く咳き込まないことに気づき、不思議に思った。
母親はふと、IoTシステムのダッシュボードに目をやった。
寝室の湿度は、居間の湿度に比べて極端に低かった。
これだ!と気づいた母親は父親と相談し、娘が寝る前から寝室で加湿器を動かし、事前に湿度を高めることにした。

その日の晩のこと、予定通り、両親は娘を寝かしつける前に寝室で加湿器を動かした。
そして、娘を寝かしつけた。
その夜、娘は咳き込むことなくぐっすりと眠り続けた。
その次の夜も、またその次の夜も、娘はぐっすりと眠った。
両親も、咳に気づくために張り詰めていた緊張が溶け、娘と一緒にぐっすり眠れるようになったそうな。

めでたしめでたし。

GR-SAKURA買った。

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

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

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

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

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

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

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