途中経過

まだまだ開発中のものですが逐次更新していきます。
http://www.nscripter.com/nscr2smpl.lzh
(更新)ボイスと名前欄機能を付けた。
(メモ)

  • スプライトシステムは、これは仮組みにしてはよく動いてるけど、もうちょっと練り込む。簡潔な記述も可能にしつつ、複雑な指定も全部取り込みたいので。
  • BGMとSEの実装も少し考える。
  • ここでしばらく作業止める。続きは来年。
  • 禁則やルビを先にやるかも。
  • スプライトシステムが固まったら、後はシステム回りをそれで作るだけ。
  • ソースが読みにくくなる可変長引数にするよりは、テーブルで作り込むべきかもなあ。設定が多いものは。エフェクト指定とか、末尾に付くだけのものは可変長でいいんだけど、前のほうの引数で後ろの引数の解釈が変わるのはバグの元になりそうな気がする。

(メモ)

  • 立ち絵の仕様が番号制に変わったのは、スプライトと統合するためと、移動する関係で場所によって管理はできなくなったためだけど、解決方法を思いついた。
  • ld c,"chr.png",f,300 このような従来型の記述の場合は、ll,l,c,r,rrをそれぞれ例えば1〜5番に割り当てればいい。この場合なら、ld 3,c,"chr.png",f,300に置き換えればいい。これなら後で動かすことも出来る。
  • ld num,pos,filename(,トランジション指定) こちらが正式のスタイルで、今実装しているもの以外に、このposの部分にテーブルで色々渡せるようにして、複雑な指定が出来るようにする。
  • 今考えてるのはこんな感じ。無理に互換性を取ろうとは思わないけど、省略形として有効そうなものはなるべく取り入れる感じで。
  • アスキー文字と非アスキー文字で幅を変える命令があってもいいかもしれない。これなら半角文字は半角文字の大きさで出せる。ややこしいのは折り返しの処理だけだし、その辺もひとつにまとめるつもりだから出来そうだし。
  • UTF-8のBOM対策。エンジン側の読み込み関数をちょっと弄ればエンジン側では直せそう。Luaのソースは弄りたくないので(向こうのそのままの生Luaであることに意味がある)、そっちは直せないけど。
  • Lua文字列から画像を読み込む関数の作成。テンポラリファイルでもいいかもだけど。これがあればネット対応も簡単。音声は、ストリーミングの都合があるので、これは素直にテンポラリファイルを吐いた方がいい気がする。

(課題)

  • 表示オーダーの問題。立ち絵とスプライトを統合するのはいいとして、ウィンドウよりも上に出るスプライトも必要なので、それらより下に立ち絵は位置することになる。数字が大きくなって、それを覚えておくのはダルい気がする。
  • 案1:いっそ、プラスとマイナスで分けちゃうか? プラス→ウィンドウより下 マイナス→ウィンドウより上、みたいな感じで。
    • 配列の添字そのままではなくなるけど、それはLua側の問題に過ぎないので、ユーザーには関係ないか。
    • とはいえ、マイナスのスプライト番号には違和感はあるかも
  • 案2:Z値を別に作る。スプライト番号と表示オーダーを切り分ける
    • Zソートの必要があるけど、時間コスト的にはほぼ無視できる。
    • 値が増えるのは面倒に感じる人もいるかも。

(検討)(出来るかどうかわからない)

  • 現状、スプライトシステムはLua側で実装し、エンジン側ではGDI描画とDirectGraphicsを使った2D描画を切り替え可能にして、透過的に扱えるようにしている。これを少し発展させて、フリーのエンジンであるIrrlichtを3D部分に組み込めないか(2D部分のインタフェースは他のベースライブラリと透過的にして)。この方法のいいところは、仮に不具合が出ても、2DADVを作っている分には、安全弁が二つ付いていること。DirectGraphicsの2D描画をしてる分には、これは俺の自前のコードだし、最悪ボードがトラブっても、GDIでも普通のエロゲ程度のものなら普通に動く。
    • ライセンスはzlibなんで、pngと同じようなもんか。