とりあえず要望をこなすという方向で。ネットワーク対応は相当後の話になりそうです。
System.exceptionHandler みたいのを作って、そこでスクリプト内で捕捉されなかった例外の処理を行えるようにします。
あと、ウィンドウのレイヤの表示更新をするときに、いったんオフスクリーンビットマップに転送してから表示する機能をつけて、吉里吉里設定から選択可能にします。
いままでは画像の演算が終わったら終わった順に画像に転送していました (終わった順、というのは吉里吉里はメモリキャッシュ効率を上げるために更新領域を細かく分割して処理するので )。今回やろうとしているのは、演算が終わったらすぐに画面には転送せずにいったんオフスクリーンの DDB (デバイス依存ビットマップ) に転送し、ぜんぶ転送し終わってから表示領域中に再び転送するという物です。
オフスクリーン DDB はスクリーンと同じ形式で作成するので、たいていビデオメモリ上に置かれるようになりますし、DDB から表示領域への転送はビデオメモリ間転送になるので非常に高速です。DirectDraw 使えばいいじゃないかということにもなりますが、実測すると DirectDraw でサーフェース間で Blt するのとほとんどかわらないし、機種依存しまくりそうな DirectX をこれ以上使うのはちょっと抵抗があります。
これによりなにがよくなるかというと、表示領域を一気に更新できるので、見た目のチラつきが減ると言うことです。VSync 待ちと組み合わせるとよりよくなりそうです。
ただもちろん、転送が1段階増えるのでパフォーマンスは下がります。
それと、吉里吉里本体にデバッグ時とリリース時のモードをつけようかと。デバッグ時とリリース時でシステムの機能を変えることはよくあることですし。
本がついに出ました!おめでたいですね。推進委員会ニュースやダウンロードページをご覧ください。
Array.save や Dictionary.saveStruct で利用できるフラグに "z" を用意しました。圧縮します。KAGだとsaveDataMode に "z" で栞を圧縮できます。圧縮するとそのままでは人間が読めないようなデータになるので、暗号化みたいな効果もあります。
TJS2 に Mersenne Twister 法による乱数発生器を実装しました。Math.RandomGenerator ですが、こいつはクラスなので new Math.RandomGenerator() としてオブジェクトを作成する必要があります。複数の乱数列を使うのに便利。シードはコンストラクタで指定できるほか、serialize メソッドを通して永続化することも出来ます。
ううむ、NTFS で使える、リパースポイント (フォルダ対象のシンボリックリンクみたいなもの) で自分よりも浅い階層にリンクすると見事にループにはまるアプリがありますな・・・(吉里吉里のReleaserもそう)
いずれはパス長の最大長にふれてそこで検索がストップするわけなんですが。
なんとか回避しなければ。
フォルダを全検索するようなアプリを作る場合は、今更ながら気にしないといけないかもしれません。
エンターブレイン社「テックウィン」6月号から3回にわたって「吉里吉里アドベンチャーマジック」が連載されます(こちらは私は記事制作には関わっていません)。
工学社 I/O Books 「吉里吉里/KAGで始めるゲーム制作」 価格 \1,900 + 税 CD-ROM付き
5/17〜19 あたりに本屋さんに並ぶ予定です。
ツリー型の原型見たいのが出来ました。
http://kikyou.info/tvp/bbs/single/bbs.tjs
ソースは
http://kikyou.info/tvp/bbs/single/bbs.tjs.txt
見づらいので使いづらいですが、こんな感じで。
サーバ更新の際に削除しました