べるもダイアリー

Cave Putorium

ジョイスティックを何個も使う飛行機オタク向けのゲーム設定アプリを作った話 #1

転職活動のためにエントリを書きます。 自分で何を考えてどうやったのか記録を残しておくことが大事っぽいと雰囲気で転職活動しているうちにわかってきた。 業務経験もいろいろあるんですが、なにぶんレガシーコードと必死で格闘してきた経験がほとんどなので、自分で新しい何かを生み出した例としては個人で開発したゲーム連携アプリの話を書いておこうかなと思います。

なにぶん、5年も前にガーッとv1.0まで組み上げたソフトウェア開発の話なので記憶的には怪しいところも多く、途中で満州に行ったかと思えば女優だったことが判明したり、ピアノを与えられると上手に演奏しだしたり、あるいはCIAの暗殺者だったことが判明したりする可能性があります。

マジのオタクのためのゲーム

普通ゲームというのはスポーツだとか戦争だとか、現実の人生の競技性がある部分をめちゃめちゃ抽象化してエンタメ化するわけですが、フライトシミュレータは現実の再現を目指します。そういう不思議なジャンルがこの世にはある。

FPSだったら現実の人間と違い、主人公は常に走れてすごいジャンプしながらアサルトライフルを乱射できないと「ゲームとしてつまらん!」となるところですが、フライトシミュレータの場合は飛行機のシステムや挙動が現実とズレていたらジャンルとして欠点になります。逆に航空機ゲームをカリカチュアライズするとACE COMBATシリーズのようなものになり、これは別ジャンルとして名作です。

近年の航空機シミュレータは航空機のコクピット内のシステムもほぼ実機と同じように再現しており、エンジンを始動してコクピット内のいろいろコンピュータ的なものを取り扱うのも本物と同じ手順が要求され、公に公開されているマニュアルがそのままマニュアルとして使えるほどです。操作手順に関しては実機の運用者と同じだけの知識を要求されます。マジでオタクです。

困りが発生

さて、そうなるとマウスとキーボードだけで操作するには限界が出てきます。そこでフライトシミュレータのオタクはパソコンにつなぐことが出来る操縦桿とかスロットルだとかペダルだとかコクピット内の特定のパネルだとかを再現したデバイスを複数接続して使うことになります。そしてひとつの操縦桿にはスイッチが20個くらいついてたりします。

具体的にはこんなものが発売されてます。 www.thrustmaster.com

問題は市販のジョイスティックとシミュレータ内で操作する飛行機の操縦桿等のシステムはそのまま同じものを扱えるわけではないということです。巷で市販されているA-10Cのジョイスティックでシミュレータ内のF-16を操作しないといけなかったりします。 (まあA-10CとF-16Cの操縦桿はほぼ同じなのでそこはなんとかなるんですが) 市販されているジョイスティックはレプリカ系ばかりとも限らないので、そういう意味でもこのミスマッチをどうするか?という話になります。

見てください。この宇宙船みたいなジョイスティック…… gaming.logicool.co.jp

自分でやれ

で、実際にシミュレータを遊ぶ上で最初に何をやらないといけないのかというと、「このデバイスのこのボタンはゲーム内の飛行機のこのボタンに対応させる」「このデバイスのこのスライダーを動かすとゲーム内ではここが動くようにする」……みたいな作業をユーザーがちまちま行わないといけません。まあある程度ポピュラーなデバイス向けにはデフォルトの割り当てを用意しておく場合もありますが、基本はユーザー任せとなります。

ほとんどのシミュレータはデバイスごとに設定を記憶してくれるので、初回プレイ時にこの作業を行えばあとは何も変えずに遊べます。(というのは理想論で、オタクはどうせ新しいデバイスを買ったり、より遊びやすい設定を模索しはじめるのだが)

呼び覚まされる太古の神

さて、数ある(正直そんなに無い)シミュレータの中で私が最も愛する作品があります。伝説的なオーパーツとして名を残したFalcon4.0、その制作会社の倒産のあともリークされたソースを元に有志が開発を20年以上続け、今なおアップデートを続けるシミュレータ、FalconBMSです。

www.youtube.com

www.falcon-bms.com

RTSとフライトシミュレータを融合したFalcon4.0のオーパーツといえるシステムの継承に限らず、AIの考え方、現実の戦術や目視距離などなどパイロットとしての体験を再現するために重要な要素をどれもとても丁寧に調整しているため、私は世界最高の戦闘機シミュレータだと思っているのですが、古いゲームをボランティアでアップデートし続けているため、グラフィックやUIに難もあり、やはり見てくれとユーザビリティが良くなければどれだけ本質を磨いたとしても人々にリーチすることはありません。今日でも現役でアップデートが続いている複数のシミュレータの中では最もプレイ人口が少なくマイナーな方です。

実際、ジョイスティックの設定という面でも様々な困りが存在し:

  • ジョイスティックの種類を内部では接続順で覚えるので、これが入れ替わると設定がごちゃごちゃになる
  • 使わないハンドルコントローラとかをレースゲーム用に繋いでる人が別な日にはそれを外してゲーム開始したりすると当然ごちゃごちゃになる
  • なんならゲーム自体のUIも設定方法がわかりづらくて、PRIMARY DEVICEというプルダウンメニューから最初に操縦桿だけを選んで割り当てを開始しないといけないのだが、これを今から割り当てるデバイスを選ぶためのプルダウンだと勘違いする人が多く、これが原因で「別なデバイスの割り当てを始めるたびに他のデバイスの設定がリセットされる。なんで!?」「古いゲームだからデバイス一つしか対応してないのか・・・・・・」みたいに勘違いする人が続出。(実際Falcon4.0が出たころのフライトシミュレータってデバイス複数に対応できていなかったのだが、BMSは当然対応している)
  • 日本語OSユーザはさらに文字化けするデバイス名と格闘しながら割り当てをしないといけない
  • ぶっちゃけBMS公式はゲーム内のUIではなくインストールディレクトリに同梱したエクセルのマクロで割り当て設定ファイルを生成することを推奨しているが、インストールディレクトリなんてオタクの中のオタクしか見ねえよ。
  • そのマクロもボタン設定しか生成しないので、操縦桿を傾けた時の反応みたいなアナログ入力の設定はゲーム内UIでしか対応してない。そこが一番リセットされやすい設定なのだが……

など至る所でおしまいが発生していた。

割り当てがよくわからんとなってイライラしたらみんな諦めてDCS Worldを始めます。そらそうよ。

もしかして、自分が何とかするしかない……ってコト?

こういう状況を見ている中で開発に「割り当てはわからない人多いからこう改善しないとおしまいでは???」とフォーラム投稿を続けていましたが、ボランティア開発チームは自分が作りたい本質にしか興味がないのであまり相手にされず、「もしかして、自分が何とかするしかない……ってコト?」と気づくことになる。

自分が当時考えていたこと:

  • ジョイスティックの設定はジョイスティックのIDなり名前ごとに紐づいた設定として管理されるべきではないか
  • ジョイスティックのIDごとに設定を管理する外部ソフトが作成できたら、そこからゲームを起動する直前に毎回ゲームの設定ファイルを生成すればいいのではないか
  • この外部ソフトを代替のランチャーとして配布すればユーザーは何も考えなくてもゲームを起動するたびに正しい設定ファイルが常に上書きされる。というのはどうだろう。
  • 思いついた人間がやるしかない。

そう、思いついた人間がやらないと他にやってくれる人ってマジでいないんですよ。

当時自分が触ったことがある言語は

構造化プログラミングさえまともにできていない業務経験しかない中で、ここからC#OOPの世界に入っていくことになります。

つづく!