NScripterの更新計画

NScripter関連の記事もこっちに書いていこうと思います。

テスト版でPNGの直接読み込みに対応しました。

http://www.nscripter.com/newfile.lzh
(バグを見つけたら随時修正しています)
旧来のnsaファイル内のBMPファイルは、SPB形式という自前の圧縮を掛けているのですが、これがあんまり縮まらない上に遅い。当時はPNGのような便利なフォーマットが普及してなかったのでしょうがないのですが、特に最近の環境で、DLLを使ったPNGのロードやJPEGのロードと比べてさえも遅さが目立つようになってきました。そこで、今後はPNGに乗り換えていこうと思います。PNGは元々nsaファイル内では無圧縮ですので、高速になるのではないかと。
無圧縮BMPを読むのがそれは一番速いには決まっていますし、商業ゲームだと、最近のご時世ではそれで容量が増えても音声に比べればたかがしれているので、別に許されてしまいそうな気もするのですが、まずこれで試してみて、問題なさそうならこれでいいかなと。

今後の更新計画

一年か二年ほど、新エンジンを開発しては複雑になりすぎて白紙に戻し、ということを繰り返していたのですが、発想を転換しようと思います。いきなり0からNScripter同等のエンジンを目指すのではなく、NScripterリファクタリングして次エンジンにつなげます。
文字修飾機能とか、今まで対応するつもりでなかなか出来てないのは、だいたい内部構造のまずさに起因していますので、いずれ全体のリファクタリングは必要なのです。

  • NScripterに外部DLLとしてLuaを搭載します。
  • NScripterの従来機能のうち、Luaでカスタマイズ出来る領域を増やしていきます。
  • 出来る限りすべてのNScripterの機能をLuaでカスタマイズできるようにします(ここまでは互換性を保ちます)。
  • Lua機能だけを取り出して別のエンジンを作ります。このときレガシーでもう使わない仕様を切り捨てたり、文法を整理したり、ソースコードリファクタリングします(ここで互換性がなくなりますが、極力簡単に移行できるようにはします。また、もちろんNScripterの公開・保守も続けます)。

とりあえずこのような方針で更新していくつもりです。これならどこで断念してもそこまでの成果は残る。
Luaを使うのは、システム部分の記述にリッチなスクリプト言語を使いたいからです。Luaは他言語とのバインドに強いので、DLL機能もLua経由でもっと粒の細かい処理を投げられるように出来ると思います。