2012年7月31日火曜日

汎用 ゲーム開発に便利なツール


そのうちちゃんとNScripter2のサンプルに合致した形で公開しますが、一足早く公開してみます。ちょっとしたツールで作業効率アップ。

http://www.nscripter.com/toolsmpl.zip

(アーカイブに入っている「説明.txt」の内容)
【NScripter2開発ツール】
各種ツールをこのひとつのアプリにまとめる予定です。
現在、アーカイブ作成と透過動画作成が登録されています。
透過動画のほうは初代NScripterは残念ながら対応していませんが、ns2形式アーカイブファイルのほうはNScripterのそれと同じ仕様です。
NScripterについているns2arc.exeよりも動作が高速です。

【BGM/SEツール】
スクリプトにBGMやSEを打ち込むときに便利なツールです。色々なゲームのスクリプトに使える汎用ソフトです。
ソースを読めばだいたい使い方は分かると思います。マウスでタイトルをクリックするとその音声が再生され、
登録されているスクリプト文字列がクリップボードにコピーされます。それをスクリプトにペーストすればいいわけです。

【背景ツール】
スクリプトに背景を打ち込むときに便利なツールです。使い方は↑とほぼ同じです。
一画面におさまらないほど画像を登録したときは、ホイールでページを切り替えることが出来ます。

【立ち絵ツール】
スクリプトに立ち絵を打ち込むときに便利なツールです。使い方は↑とほぼ同じです。
一画面におさまらないほど画像を登録したときは、ホイールでページを切り替えることが出来ます。

2012年7月27日金曜日

3Dライブラリの実装についてメモ

3Dの分離問題だけど、LoadTextureとかUpdateTextureとかPlaySoundとかいう形でコールバック関数を登録させる形式にして解決しようかなと思う。テスト版を分離して作っているときには単純にD3DXLoadTextureとかで読んどけばいいし、製品で使うときにはアーカイブからのロードとかのグルー関数を書いて登録すればいい。メッシュデータのロードも多分同じでいい。LoadBinaryDataとかでいいかな。
2Dでしか使わない条件(現実的に、少なくとも数年は、これがメインだと思われる)でのNScripter2の動作に一切影響を与えない開発をしたい、けど、なんとか楽にNScripter2とバインドできるプロジェクトにはしておきたい、というときの対策。

開発日誌つけ始めました。



NScripter2

現在、一般版公開前に商業マスターアップを控えて作業中。これが終わったら、まずexeとサンプルスクリプトだけのものを実験的に公開します。ドキュメントはおいおい整備していきます。
NScripterと比較しての機能面での目玉は、

  • DirectX9のDirectGraphicsを使っているので、ハードウェアアクセラレーションにより高速な描画が可能。
  • 2Dのピクセルシェーダーによるエフェクトにも対応。
  • ムービー機能が強化されている。任意のムービーをスプライトとして利用可能。また、透過動画もサポートしている。
  • 本格的なBASIC文法により、柔軟で簡潔な記述が可能になった。現在はシナリオ演出/ADVシステム記述がBASIC 個々の命令の実装がLua 描画や音声再生などの低水準ライブラリがC++、という構造になっているが、Luaだけで2Dゲームエンジンとして使うことも可能。
  • システム部分がLuaで記述されており、カスタマイズの粒度が細かくなった。たとえば、全てのフォント出力は最終的にひとつのLua関数に結び付けられており、その関数をラップすることで、全てのフォント出力をカスタマイズできる。
  • プラグインDLLの呼び出しの自由度がNScripterより高い。Luaのどこからでも自由に呼び出せて、BMPデータやテクスチャデータ等のやり取りが出来る。たとえば上記のフォント出力関数からDLL関数を呼ぶことが出来るので、フォントの出力をプラグインで行うことが出来る。
  • 最初からシステムのカスタマイズを前提としているため、仕様がシンプルになった。デフォルトのシステムというものがないので、サンプルシステムを供給していく予定。
  • 現在、NScripterと同程度の禁則処理、ルビ機能と、アウトラインフォント出力をサポートしているが、将来的にもっとリッチなものに入れ替えたい(あるいはプラグインに期待)

現状、ドキュメント整備が進んでいないのと、システムが多層構造になったため、エラーメッセージがLuaレベルのものとBASICレベルのものが混在して不親切になりがちだという問題があります。内輪で使う分には問題ないのですが、一般公開向けとしてはまずいので、これはおいおい解決していく予定。

3Dライブラリ開発

出来ればNScripter2本体から分離して単独のオープンソースライブラリにしたいのだが、画像ロードやムービーテクスチャ、音声再生等がNScripter2本体とがっちり組み合ってしまっているため分離が難しい。一度NScripter2の内部で完成させてから考えたほうがいいかもしれない。
今のところコンパイル時のマクロ設定で3D部分が丸々外せるように作ってある。

今出来ていること
  • パーピクセルライティング
  • バンプマッピング
  • スキンアニメーション(ただし仕様変更予定)

実装予定

  • 一般的な、初期姿勢行列とフレーム時姿勢行列によるスキンアニメーション(MMDのアニメ部分をそのまま実装するのは大変そうなのと、一ツールに特化しすぎてしまうと柔軟性がなくなりそうなので、一般的なツールから出力出来そうなものにしたい)
  • メッシュ、アニメーションについて、COLLADAから独自形式へのコンバータ(とりあえずCOLLADAを予定、多くのツールで吐けるので)、フリーで使えるツールとしてBlenderを想定しているが、最終的にCOLLADAであれば通るようにはする。
  • シャドウマップもしくはシャドウボリューム
  • ライトマップ
  • 環境マップ
  • 物理エンジンbullet
  • アニメーション間の補間
  • 3D音響は必要?