Hatena::ブログ(Diary)

土屋つかさのテクノロジーは今か無しか

2015-12-09

DXRuby Advent Calendar 2015 10日目:司エンジンの開発経緯

 DXRuby Advent Calendar 2015(http://www.adventar.org/calendars/757)の10日目です。9日目はあおいたくさんの「EDGE と Aseprite と DXRuby と私(http://blog.aotak.me/post/134856042656/edge-%E3%81%A8-aseprite-%E3%81%A8-dxruby-%E3%81%A8%E7%A7%81)」でした。
 あおたくさんの記事にもある通り、スプライトアニメーションって基本的にどんなゲームでも必要なのに、タイミングを制御するロジックを汎用化するのがとても面倒な印象です。3Dでは基本的に一つのモーションは一個のモーションファイル(データ)になり、それをモデルに対して送信する形になるので、2Dでも同じ様にできたらいいな。

 さて、本当は司エンジンでミニゲームを作っていたんですが、ゲームはできたんだけど記事が間に合わなかったので、これは来週のACのどっか空いた日にやります。
f:id:t_tutiya:20151210000710p:image
 また、「開発コミュニティについて考える」は思ったより書くのが大変だったので(それにDXRuby固有の話でもないので)、書き終わった時に間に合えばACに投稿したいと思います(間に合わなかったら26日目とかにします)。

 今年は結局ほぼ1年間ひたすら司エンジンを作っていて、逆に言うとゲームは一個も作りませんでした。今回は司エンジンの開発経緯について書いてみたいと思います。

RAG(2012年)

 土屋は昔からゲームを作りたいと思っていて、特に独創的なギミックを採用したノベルゲームを作りたいと思っていました。既存のノベルゲームエンジンは色々試したのですが、組み込みの機能を超えてギミックを組み込もうとすると途端に壁にぶつかることが多くなかなか上手く行きませんでした。

 そんな折、DXRubyというRuby上からDirecXを叩けるライブラリの存在を知りまして、それでノベルゲームエンジンを作ってみることにしました。当初は吉里吉里ruby実装ぐらいのノリだったので、KAGのパロディでRAGという名称にしていました。

 これはそれなりに上手く動いていたのですが、コードが肥大化していくうちにデバッグの効率が落ち、機能追加が難しくなっていきました。また開発の最中で「ロボティクスノーツ」や「魔法使いの夜」の美しいUIを見て「これらの演出はRAGでは仕様上実現不可能だ」と打ちのめされ、モチベーションがなくなってしまい開発が中断しました。

 この辺の詳しい経緯はこちらをどうぞ。

ノベルゲームエンジンプロトタイプ「RAG」の紹介(あるいは見果てぬ夢
http://d.hatena.ne.jp/t_tutiya/20131205/1386256486

Dxruby_text_layer(2013年(10月〜12月))

 RAGの拡張性が低い最大の理由は、シナリオスクリプトパース処理のタイミングが、画面での表示と一致していることにありました。これにより、全ての処理が文字出力機構に依存してしまう構造になり、拡張性を著しく損ねていたのです。

 そこで、ひとまず文字出力機構のみを切り出して、独立汎用的に利用出来る物を作ることにしました。これが必要な演出能力を持ちうるなら、汎用的なノベルゲームエンジンが作れる筈だろうと考えたのです。こうして出来たのがDxruby_text_layerです。詳しくは以下の記事をどうぞ。

汎用テキストレイヤライブラリ「Dxruby_text_layer」のご紹介
http://d.hatena.ne.jp/t_tutiya/20131202/1385996510

RAG2.0(2014年(1〜2月))

 Dxruby_text_layerが非常に上手く作り込めた(少なくとも当時はそう思っていた)ので、今度はこれを内包した形でRAGを作り直すことにしました。が、これがどうにも上手くいかず、早々に投げ出してしまいました。その後、しばらくの間「どういう形であれば上手く組み上がるのか」を考える期間が必要になりました。

司エンジン(2014年〜2015年)

 RAG2.0が上手く行かなかったのは、Dxruby_text_layerを内部で使いながらも、トータルではRAG1.0と同じ設計を採用していた為でした。

 そこで、Dxruby_text_layerで用いた手法ゲームエンジン全体に拡張し「全てのオブジェクトはVMとして扱い、外部からスクリプトを送信するメッセージ指向の言語にする」という方針で、フルスクラッチすることにしました(当時は「メッセージ指向言語」という言葉も知りませんでしたが)。これが司エンジンです。

DXRuby Advent Calendar 2015 3日目:汎用ゲームフレームワーク(を目指す)司エンジンの紹介
http://d.hatena.ne.jp/t_tutiya/20151202/1449068891

こぼれ話:シュタゲゼロの開発に司エンジン(DXRuby)が貢献した!?(露骨な釣り文言)

 本日発売の(おめでとうございます! みんな買ってね!)シュタインズゲートゼロでは、初期のシナリオ会議用に土屋が小さなデモプログラムを作ったりしました(あくまでシナリオ会議での検討用のデモであり、本編に転用されたとかではまったくないのでご注意ください)。

 電撃PlayStation Vol603(P46)のインタビュー記事を引用します。

林:プログラムの知識も持っている方なので、「RINE
トリガー」も実際に動くものを用意してきて「こうした
ほうがいいのでは?」とプレゼンしてくれたり(笑)。

 実は、この時に使ったのが司エンジンなのです(!)。LINEベースのコミュニケーションツールがゲームの中でどのように活用できるのかについて、実際に動く物を前にして議論した方が良いのではないかと考え、土日かけて簡単なデモを作って持っていったのです(凄く驚かれましたw)。

 当時の司エンジンはまだ内部DSLすら完成しておらず、足りない機能はRubyを直接叩いてでっち上げていたので、割とムリヤリなコードではありましたが、それでもイチから作るよりはよっぽど楽だったし、他のノベルゲームエンジンよりも早く作れたと思っています。

現在

 司エンジンは24日に1stリリース予定です(ただ、これを書いている今割と致命的なバグを発見してしまい、そっちの対応に追われています……)。当初は今年の4月にはリリースできるつもりでしたが、仕事が忙しくなったり、予想外に作り込みに時間のかかる場所が発生するなどして今日に至ります。

 とはいえ、1stリリース段階では最低限必要な機能を実装したにすぎず、来年はより完成度を上げるべく頑張っていきたいと思います。ただまあ、いい加減エンジンだけ作るの飽きてきたので、来年はもうちょっと本格的なゲームを作りたいですねw


 さて、明日は……なんてこった空いてるぞ!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/t_tutiya/20151209/1449673654