今年はコミケ行かないことにしました。
体力が落ちてきているので、多分今行ったら風邪を引くなあと。
新エンジンのプロトタイプ版公開
http://www.nscripter.com/sgesmpl.lzh
(12/11朝6:00)FPSの固定をDirectXの垂直同期待ちに任せるのではなくスクリプト側で実装した。62.5FPSとか半端な数字になってますが、これは1フレーム16ミリ秒だからです。
(12/11夜7:00)3Dのデモが視点が近すぎて不自然だったので少し離した。
(12/20)かなり高速化。これならネットブックでもDirectXで出来ます。フォントをキャッシュせずに直接書く命令を作った(多分こちらを正式採用する)。年内更新はこれで終了。
*フォント機能は変更予定。
- 当面忙しいのでここで小休止です。
- ぶっちゃけて言うと、これがTJSに相当する。このLuaでKAGに相当するシナリオ解釈プログラムを組んで、そちらがNScripter2ということになればいいなと(仮称だけど)
- Sunday Game Engineという名前は、小学校の頃BASICでやってたような日曜ゲームプログラミングを楽しめるツールになればいいなーという思いを込めて付けました(これも仮称だけど)
- DirectX9の2008年12月版より新しいものが必要です。
- 2DギャルゲADVの演出装置として3Dを融合していく方向で考えています。例えば天球を作って書き割り背景を貼るとか、四角い部屋を作って部屋の壁を貼るとか。ビルボードも搭載しているので、現状でもパラッパ的なものは作れそう。
- 画像はPNG、音楽はOGG、ムービーはMPEGに対応しています。SQLiteを内蔵していて、セーブ等に利用できます。
予定メモ/進捗状況
- ns2でbmpを直接読む時に何かバグがあるらしい。ns2にbmpを格納すると容量がかなり大きくなるのであまり使わない機能だと思うけど、一段落ついたら修正します。
- 現在商業製品でns2を使って作業中。pngを使っています。
- 必要だったのでpngをα値を維持したまま左右もしくは上下に連結して保存するツールを作った。Luaスクリプトで連続実行できるので、好きなように連結できる。が、これは開発中のゲームエンジンをそのまま使って作ってるので、単独ツールとして公開するには無駄な部分が多すぎて、どう扱うか考え中。
- まあいいや、ということで試験公開。次期ゲームエンジン……を使ったPNG連結プログラム。自分が使う時用に公開しておきます。http://www.nscripter.com/pngrenketu.lzh
新しいエンジンについて
- SJIS版のLuaでも英語の(オリジナルの)プラグイン類はたぶんだいたい使えるのでこのままでも外のライブラリを使う分には問題ないと思うんだけど、一応内部的にUTF-8にして、もともとのLuaを使うようにしようかな。すると中身をシフトJISで動かしてるのはあまり意味がなくなるので、Unicodeでコンパイルしなおす必要があるけど、今の段階でその処理をするのは簡単なので今のうちにやる。OggもPNGも内部に持ってるのでそういう改造は比較的楽。
- 現状のNScripterではC++で書かれているような処理のうち、Luaで書いても問題なさそうなものをLuaで外部に出すことで、ユーザー側からいじれるようにして、その分システムカスタマイズ周りの仕様がすっきりするようにするのが狙い。このLuaスクリプトを使って、NScripterの(システムカスタマイズを伴わない)シナリオ演出スクリプト相当のものを作り上げるので、そちらはむしろ現状のNScripterより初心者向けのはず。
- 問題は、システムカスタマイズをやろうとしたときに、Luaの既存の入門コンテンツはほとんどがC言語を習熟しているのを前提にしていることだけど、これはまあ、そのうちなんとか。
- NScripterのマニュアルがとっちらかってる問題。アーカイブをns2、音楽再生をnsogg2、画像をnspngに絞った形ですっきりしたガイドを書いていきたいけど、時間がない。レガシーな機能の解説まで含んでいると大変なので。
- Lua上で行番号式のクラシックなBASIC言語を実装しようかなとか検討してる。作るのも簡単だし、プログラマじゃない人が使うにはLuaよりは敷居が低いだろうと思うので。
(メモ追記)
- TP.exeとSGE.exeを統合する。ついでにインストーラーくらいはSGE.exeで書けるようにしてもいいかも。(今の汎用インストーラーは、ちゃんと動くけどちょっと古くなってきてるからなあ)
- この場合二重起動の判定処理に工夫が必要→ミューテックスを二つ使って処理すればexeごとに別の判定ができるかも。
- SGE.exeにLua経由でSQLiteを組み込む(バインドライブラリにライセンスがMITのがある)。
- エラー処理をテキストエディタと連携することを考えていたが、テキストエディタは固定しないほうがよさそうな気がする。エラー処理関数をlua上でコールバックできるようにする。
- 関数をテーブルに分けて、他のライブラリとあわせて全部小文字の名前にする。
プロット作業中
仕事でおおまかなストーリーを構想中。NScripterちょっと止まってます。25日以降更新します。
- NScripterはGDIで特化することにする。DirectXで何か作りたいなら子ウィンドウ作ってそこで動かしたほうが楽そう。
- というわけで、GDI描画命令と、画面もしくはスプライトからNSDテクスチャに画像を取り込む命令と、テクスチャ画像をNScripterスプライトに変換して書き込む命令を追加する。
- あと画像がないときのエラー落ちバグ修正が必要
- これで、Luaを通してフォントを出力する仕組みが完成する。
- Luaの文字列処理でいろいろ前処理が出来る。
- 表示文で一文字ずつ表示するところはNSD系命令で組む
- 表示文を出力し終わったら、テキストのテクスチャ画像をスプライトに書きこんでしまえば再描画も簡単
- テクスチャもメモリの中に置くことになったので、NSDCallに""を渡したら前のテクスチャデータをそのまま使うことにする。フォントを自由にいろいろ書けるかも。
NScripter更新中
しばらく、作業中のものはここに付け足していきます。
http://www.nscripter.com/test1.lzh
- RPG風スクロールマップ移動のデモ。カーソルキーで移動です。
- さすがにGDIで800x600を毎回再描画すると、多少ちらつくのかな。1920x1200の液晶モニタなんで、限界が来てるだけかもしれない(フルスクリーンだとちらついてない気もする)。
- たぶんこの液晶の転送の限界っぽい。動画でもときどき引っかかってるからなあ。ネットブックでもそう無理なく動いてました。
- 階段踏むとウィンドウが出て文字が出るようにしてみた。こんな感じでNScripterのほうの機能と連携取れますよ、ということで。
- これを見てユーザさんがRPGを作る、というのはたぶん難しいと思います(C言語とかHSPとかJava等を使ってプログラム組むのとあまり変わらないので)。実際にはこういうコードを汎用に書いて供給するライブラリプログラマが必要になると思います。そういう基盤部分の技術デモなので、中身が分からなくてもあまり気にすることはないかと。
http://www.nscripter.com/nsdtest.lzh
- NSD系命令のシンプルなデモ。
(進捗状況)
- 拡大縮小回転も実装した。
- NSD系命令からNScripter側のトランジションを使えるようにした。
- テクスチャをDLLを呼び出してその中の関数で初期化できるようにした。
- DLLとしてフォントを描画する物をサンプルに提供した。
(メモ)
- Luaの分厚い本買った。仕事道具になりそうなので奮発した。とりあえず、バグらないけどバグ発見。今出先なので、帰ったら直します。
- forループのカウントの変数は自動生成されるforループ内ローカル変数なので、ループより前にlocal宣言してる今まで書いたソースは間違いです。値を使ってないから不具合になってないけども。直します。
(以下検討中)