grimlockの話

legend of grimlock 2

http://www.grimrock.net/

最近、ゲーム情報サイトのレビューを見て琴線に触れたため購入しました。
懐かしの3Dダンジョン探索ゲームです。

  • キャラメイク→冒険が非常に楽しい
  • カスタムダンジョンエディタが付属
  • Steam Workshopと連動しているため、他のユーザーが公開したカスタムダンジョンをサブスクリプションしてアプリを閉じることなくすぐに遊ぶことができる

古の時代*1からPCゲームにはレベルエディタが付属することは多かったですが、
今の時代はプラットフォームがUGC用の環境を用意してくれる分、
昔にましてユーザー参加がしやすくなったという印象です。

この文化はやはり羨ましいと感じています。

リアクティブの話

主目的はそこではないとは思うが、
データフロープログラミングやリアクティブプログラミングの面白いところは
副作用の可視化にあるように感じます。

通常の再代入を行うと、作用元が作用先に対して変更を行うため、
誰が変更をおこなったのか非明示になります。
対して、リアクティブプログラミングの場合、依存先が明示的になるため、
値の変更に関して作用元が神経を使う必要がなくなります。

リアクティブプログラミングする場合、
値の更新を検知して再計算を行う仕組みが必要ですが、
効率良く実装しないといけないですね。

今考えているのは、入力セルと出力セルを決めてビルドしてしまう方式です。
ビルドのタイミングでセルの依存関係を解決して、単一の更新関数に落とし込めるため、
更新の必要なセルを探索するオーバーヘッドをコンパイル時に解決してしまうことができます。

反面、実行時のセルの追加・削除に弱い(都度再ビルドが必要)になるため、
ある程度の動的なアタッチ/デタッチ機能が用意できないか気にかけています。

次の問題は、ゲームのオブジェクトのように大量のレコードを更新していく場合、
どのような解決モデルを組めば効率よくリアクティブプログラミングで解決できるのかです。

web系でリアクティブプログラミングを銘打っているライブラリも、
その用途に合わせてかなり特殊化/最適化した設計になっているようなので、
ゲームアプリという用途に合わせたリアクティブプログラミングの方法を
模索することは必要なことでしょう。

*1:Age of Empiresのこと