ONScripter 開発日誌

Since: Feb. 6, 2002
Last updated: Mar. 21, 2002

2001年12月

12月30日

savename, savenumber, rmenu, menusetwindow を実装しました。

右クリックメニューとセーブの表示部分を実装しました。

─と…が UTF8 に無い(?)もしくは Qt で変換できないため表示されないのを、drawLine で表示するようにしました。

globalon を実装し、global.sav の globalon 時の読み込みと、終了時の書出しを実装しました。

選択肢以外待ちを行わないモードにして、長時間耐久試験をしました。なぜか、qnscripter は一切リークしていないのに、XFree86 の確保メモリが 3MB/s くらいの速度で増えていきます。しばらくして、実メモリもスワップも全部食い尽くしてしまったので、中断しました。原因不明です。

12月24日

ld, cl の透過 a のみ実装。 alphaBlend を実装しました。これで、遅いもののクロスフェードが出来るようになり、立ち絵の透過読み込みにも対応しました。ついでに、text window の色味を下げる処理も、QBrush を使う方法から alphaBlend に変更しました。これで、ほぼ一通り最後まで動くのではないでしょうか。

12月23日

select を全実装しました。マウス待ちは、btnwait と同じ機構です。

12月19日

途中で落ちるのは、内部で %4020 とかを変数に使っていたからでした。最大変数番号は 1000 までだと思っていましたが 10000 に拡張しました。

cmp を実装しました。

woody only 環境で動かしました。apt-get install libqt3-mt-dev として、setenv QTDIR /usr/share/qt として、正常にコンパイル&実行できました。

skip で、label をまたぐ場合を考慮していなかった問題を修正しました。

12月20日

select を半分実装しました(複数行を正しく解釈し、SelectLink を作るところまで)。

12月18日

effectblank を実装しました。

Shutter effect を実装しました。ピクセルの輝度を変化させない effect は、簡単に実装できます。問題は、最もよく使われる cross fade をどうするかです。

12月17日

gosub と return を実装しました。プロローグの、途中まで一応行くようになりました。

mov と br と '\\' を実装したら、オープニングの結構先まで進むようになりました。しかし、文字表示の間隔がおかしいです。スペースも変です。

inc, skip, mov, goto を実装しました。その他、bug fix をしました。

タイトルを越え、その先のオープニングも OK になりました。

setwindow を実装しました。これで、フォントの表示は大体よくなりました。ただ、右端で切れることがあります。

12月16日

文字表示を実装しました。日本語もばっちりです。textCommand を半分くらい実装しました。

if, notif の実装に伴い、string_buffer の途中からでもコマンド解釈できるようにし、また全てのコマンド実行を executeLabel から行うことにしました。これに結構時間を取られました。

ソースを印刷し、この時点でのバグを洗い出し。結構あった。

最初の画面が出るところまで行きました。gosub を実装していないのでここまでです。

12月12日

qpixmap に対して qpainter と bitBlt を使えば、画像表示も文字表示も全て解決しました。なんとこんな解があるとは思いませんでした。すごいです Qt。直したところ、劇的とも言えるパフォーマンスアップです。何しろ前回 60msec と言っていましたが、0msec になりました。つまり Qt の event loop と cache 能力を最大限に使うにはこうするということのようです。素晴らしいです。

12月11日

btnwait と reset を実装しました。後は、文字表示を入れれば bbndemo が完全に動きます。

12月10日

表示用の画像データを独自の配列で持ち、部分 copy や画面効果などは全部自前で実装し、最後に widget にコピーするようにしました。何故か X11 の waring もでなくなりました。

無理やり setWFlags( WRepaintNoErase ) を設定して、再描画しないで draw するようにしていましたが、180msec くらいかかります。QLabel を継承して、独自に QLabel を継承して class を作ったら、何故か 60msec くらいでかなりスムーズになりました。何故でしょうか?

高速化のため、画像データを ButtonLink に直接持たせることにしました。

12月8日

effect handler を一通り実装しました。DelayedEffectInfo で、即実行・遅延実行に対応させます。

readStr で、alias を解決するようにしました。

"effect", "arc", "bg", "btndef", "btn" を一応動作する程度に実装しました。機能 (btn) を実装しました。ただし、Qt で画面の一部 windows に別の画像を張り付ける方法が分からないため、表示はおかしいです(全画面コピーになっています)。

さらにボタンの上を通過する度に、以下のエラーメッセージが出ます。

X Error: 204 204
  Major opcode:  156
X Error: BadMatch (invalid parameter attributes) 8
  Major opcode:  156

これで、NScripter の btndemo が半分動きます。

12月7日

ScriptParser を書き始めました。メモリに script を全部読み込み、各ラベルの index を作成し、一行づつ parse しながら、lookup table 形式でコマンドに対応する class method を dispatch する仕組みを書きました。

numaliasCommand と straliasCommand を先頭固定の link list として実装しました。

QScripter_impl を ScriptParser から継承し、string_buffer などを共有できるようにしました。コマンドは、まず ScriptParser の parseLine で解析し、解析できたらその内部で処理を行い、解析できない場合(画面表示系)は QScript_impl の parseLine で解析して処理するようにしました。

gosub に対応して、ラベルの状態を先端固定の link list で管理するようにしました。別のラベルに移る時には、かならず event loop を経由するようにする予定です。

12月5日

開発を開始しました。

sar 形式のファイルを読み込む SarReader を書きました。圧縮ファイルの中身を見ていたところ、フォーマットが分かってしまいました。圧縮がかかっていなかったので簡単に復元できました。ついでに、サンプルアプリケーションで arc.sar の中身を全部展開する sardec を書きました。

nscript.dat の暗号化方式も、web を探していたら分かってしまいました。とりあえずスクリプトを復元しました。

Qt で GUI を作りました。一応メニューバー等を付け、背景がロード・表示できることを確認しました。MouseEvent と TimerEvent のハンドリングも書きました。