ほりすてぃっくうぃずだむ

アーカイブだったりレポートだったり駄文だったり思ったことをなんでもてきとーに書く

プログラマがお勧めするゲームのお話し。

昨年に引き続き。
このアドベントカレンダーなる催し?もちょっと定着化してきたんでしょうか。

ということで本日はこちら。
adventar.org
本日は6日目、前日は_olpheさんです。記事はこちら。
olphe.hatenablog.com

いちおうプログラマとしての出自を述べておきますと、

  • 業界14年目?くらい。多分。
  • Java中心に.NETやらPythonやらいろいろ。
  • 要件定義からリリース保守まで何でも屋。ジャンルも問わず(練度はサーバサイド>クライアント>Web≧Android=IoTって感じ)
  • が、今はセキュリティ屋さん(1年になかなかの数のシステムについてなにやらしています)

といったところ*1

で、そんな私が「プログラマにお勧めするゲーム」は、Carnage Heartシリーズ、のうち最新作の『EXA』です*2
早速どんなゲームか見ていきましょう。

Q.
どんなゲーム?
A.
ロボゲーです。Over Kill Engine(OKE、おーけーいー)と呼ばれるロボット兵器をどうにかするゲームです。

Q.
何するゲーム?ロボゲー?Armored Coreみたいなこと?
A.
確かに戦闘しますがACとは異なります。素体となるOKEに、武装やオプションなど、ハードウェアを組立(アセンブリし)て、3on3で戦わせます。Front Missionシリーズにやや似ているかもしれません。

Q.
『戦わせる』?しかも『3on3』?自分で操作はしないの?
A.
『EXA』は自分で操作することも「できます」。前作ではできません*3

Q.
『できます?』それ以外があるということ?まさかAI任せなのか。おもんな。
A.
動作ロジックはお前が組むんだよ!!!!

そうなんです。このゲーム、ハードウェアをアセンブリしただけでは、OKEはまったくなにも動きません。相手OKEを一撃で屠れるキャノンを装備していようが、あらゆる攻撃を回避するニュータイプ回路が搭載されていようが*4、飾り以下です。ありとあらゆるすべての動作を、自ら組み上げていく必要があります。
それがこのゲームの楽しさであり、真骨頂です。まさに、「ロボットの動作をプログラミングする」ゲームなのです*5

このゲームにおける「プログラミング」は、既定の大きさを持つチップタイル上に、「状況判断チップ」「動作チップ」「その他の機能を持つチップ」を並べていくことで実現します。このチップタイルには「START」位置が指定されているので、そこからチップをつないでいきます。

f:id:isk_holistic:20191204155001j:plain
画像はこちらからお借りしました。

START→前進→RETURN*6

これで、「OKEを前進させる」プログラムの完成です。しかし、これ、本当に「前進するだけ」です。敵機がいようが、攻撃されていようが、障害物に躓いていようが、戦闘フィールドの終端に達しようが、延々と「前進を試みます」。はい、でくの坊ですね。「OKEを前進させるだけ」でも、考えなければならないこと、処理しなければならない事象がたくさんある、ということです。
常識的には、「敵機が前方に存在している、Yes/No」→[Yes]→「武装の有効射程範囲内である、Yes(射撃)/No(前進)」などでしょうか*7
こうやって、一口に言われる「移動」「攻撃」「回避」といった処理一つ一つを設計し、実装していきます。感覚的には処理フローチャートを延々と作っていく感覚が似ているでしょうか。

ひとつひとつの実装は、面倒です。なにせ動作単体でも考えることが多いですし、「フローチャートを作る」ということで言えば、「回避のフローチャート部分を処理しているときは攻撃のフローチャートを処理できない」ということを表しますから、要は「回避するけど全然攻撃してくれなくてジリ貧」ということになったりもする*8ので、そういう実装順を考えていかねばなりません。それでも全然意図通りに動いてはくれません。リソース制限もあります。チップタイルの大きさは無制限ではありません。ひとつのロジックが大きくなればなるほど、細かい状況に対応しやすくはなるかもしれませんが、処理全体が終了するまでの時間もかかります。処理と処理のトレードオフがそこいらで発生するようになります。

しかし、慣れてくると、戦略的に特化したOKEであったり、コンセプチュアルなOKEだったりが組み上げられるようになります。

『ある1体のOKEをタンク役として、釣った相手OKEを集中攻撃して沈める』
『ひたすらに回避をし続けて相手の弾切れを待ち、機を見て反撃して沈める』
『熱量の高い武器で攻撃して敵機をオーバーヒートさせ、焼き殺す*9』 『射線が通った瞬間に全力攻撃、全弾発射。弾が切れたら迅速に相手OKEに接近して自爆する』

などなど。
最初のうちは移動プログラムにさえ構築に四苦八苦するものが、だんだんと練度が上がり、思い通りの戦略を取れるようになっていく。まさに、プログラミングと同じです。
この「ロボットを開発し、構築していく」過程において、Carnage Heartシリーズは他の追随を許さないものだと思います。

最新作がPSP向けの「Carnage Heart EXA」ということで*10、プレイヤー同士でのマッチを実現していたシステム(「SATLOKE(サトローク)」といいます)も既にサービス終了してしまっていますが、発売から来年で10年となる今でもまだ、非公式のマッチシステムを提供する人さえいる状況であるようです*11

なにせゲーム性がゲーム性で、終わりがないことや、「プログラミング」するという敷居の高さは確かにありますが、その分の面白さや手ごたえが得られる良作です。ぜひ、プレイしてみてください。

www.artdink.co.jp

store.playstation.com

非公式SATLOKE
project-europa.herokuapp.com

しかし10周年か…。ARTDiNKさん、Switchとかで新作、どうですかねえ。結構根強いファン、いると思うんですがねえ…。

*1:マジで結構何でもやるしできるので、そろそろ年収5000兆円欲しい。

*2:このシリーズ昨年も特に言及なかったみたいで超意外でした。

*3:いちおう、裏技で操作可能なシリーズもあります。

*4:もちろんそんなものはありませんけども。まあ例ということでひとつ。

*5:This is 漢のロマン的なアレ。

*6:RETURNチップという明示的なものを置かなくても、このゲームは「そのチップが処理の終端である」ならば、そのままSTARTに処理が戻る仕様です。

*7:ちなみにこれでも「敵が前方にいない」場合はやっぱりでくの坊なので、右舷左舷後方の確認が必要です。しかも、射線上に僚機がいようが知らん顔でフレンドリーファイアしますし、障害物に阻まれていても射撃してしまいます。

*8:では攻撃→回避のフローとすると、全然回避してくれないバーサーカープログラムが完成したりします。

*9:「熱量」というパラメータがあり、一定値を超えると継続ダメージが入る仕組みです。OKEのプログラムを組むには、こんなところにも気を配らなければなりません。

*10:PSVitaでプレイ可能です。

*11:この記事を書いている、ということをtwitterにpostしたところ、なんと現役プレイヤーの方からリプライと情報をいただいてびっくりしました。