近況

仕事がいくつかストップしたりキャンセルしたり。そろそろ復活しないとまずい。
NScripter2は、今のAPIで、いきなり汎用エンジンじゃなくて、まずは小さな同人ゲームを作ってみようと思う。その辺でいろいろ見えてきてから汎用エンジンを作ってもいいんじゃないかという気がしてきたので。
基本的に、NScripterと同じ条件で配布するつもりなので、自分で同人(or商業)ゲーム作るか、どこかに商業で使って貰わないと、金にならないのよね。

直近

シナリオ仕事がとっても忙しいのですが、最初の発注の締め切りがもうすぐ終わりですので、それが終わったら(1/24〜26までには)次の作業をします。
今後の収入設計的に、まったく進めないままでいるのもまずいので。

いろいろで遅れ中。

  • NScripterの更新、手早く出来そうな奴をやってしまう。二重起動関連等
  • 少しだけエンジンプログラミングもする

途中経過

まだまだ開発中のものですが逐次更新していきます。
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と同じようなもんか。

来年の予定

http://www.nscripter.com/sgesmpl.lzh
(12/26)GDIモードを付けた。

  • とりあえず命令を少し整理した。これで基盤部分は完成。来年からはこれでADVエンジン組んでいく。
  • Intel(R) 82810Eで動かない報告。1999年に出たカードで、最新版ドライバが2002年か。対応すべきかどうか迷う。GDI版SGE.exeを作っておくべきか(でも、その世代のPC向けに作るなら多分NScripterで作った方がよさそう)。このデモはCPU描画では多分無理だけど。
    • 32ビット画像に対応していないっぽい。バックバッファフォーマットを決めうちしてるからなあ。
    • よし、決めた。GDIオンリーで描画するモードを作ります。何かの方法で動作を選べるようにする。描画性能はNScripterと同程度になるけど。だから多分このデモは動かない。
    • ほとんどのマシンでDirectX9が使える事が予想されるので、この機能はあくまで安全弁。texture、drawモジュールの該当命令をGDIに書き換えたもので、無理な命令(ポリゴン描画や3D)はガン無視です。
  • 更新しました。config.vbsを実行すると(vbsファイルは普通のexeの起動と同じようにすれば起動できます)GDIモードで立ち上がります。3D描画は何も表示されませんが、星のほうは表示されます。ただ、多分これを使わなきゃいけないようなマシンだと星100個はまともに動かないと思います。boundstar.luaの一行目のlocal starmax=100が星の数設定なので、10とか5とかで試すといいかも。