savename, savenumber, rmenu, menusetwindow を実装。
右クリックメニューとセーブの表示部分を実装。
─と…が UTF8 に無い(?)もしくは Qt で変換できないため表示されな いのを、drawLine で表示するようにした。
globalon を実装し、global.sav の globalon 時の読み込みと、終了時の書 出しを実装。
選択肢以外待ちを行わないモードにして、長時間耐久試験。なぜか、 qnscripter は一切リークしていないのに、XFree86 の確保メモリが 3MB/s く らいの速度で増えていっている。しばらくして、実メモリもスワップも全部食 い尽くしてしまったので、中断。原因不明。
ld, cl の透過 a のみ実装。 alphaBlend を実装。これで、遅いもののク ロスフェードが出来るようになり、立ち絵の透過読み込みにも対応。ついでに、 text window の色味を下げる処理も、QBrush を使う方法から alphaBlend に 変更。これで、ほぼ一通り最後まで動くのではないのだろうか。
select を全実装。マウス待ちは、btnwait と同じ機構。
途中で落ちるのは、内部で %4020 とかを変数に使っていたからだった。 1000 までじゃないの???10000 に拡張する。
cmp を実装。
woody only 環境で動かす。apt-get install libqt3-mt-dev として、 setenv QTDIR /usr/share/qt として、正常にコンパイル&実行できた。
skip で、label をまたぐ場合を考慮していなかったのを修正。
select を半分実装(複数行を正しく解釈し、SelectLink を作るところまで)。
effectblank を実装。
Shutter effect を実装。ピクセルの輝度を変化させない effect は、簡単 に実装できる。問題は、最もよく使われる cross fade をどうするか。
gosub と return を実装。プロローグの、途中まで一応行くようになった。
mov と br と '\\' を実装したら、オープニングの結構先まで進むように なった。だが、文字表示の感覚がおかしい。スペースも変?
inc, skip, mov, goto を実装。その他、bug fix。
タイトルを越え、その先のオープニングも OK。
setwindow を実装。これで、フォントの表示は大体良し。ただ、右端で切 れることがある。
文字表示実装。日本語もばっちり。textCommand を半分くらい実装。
if, notif 実装に伴い、string_buffer の途中からでもコマンド解釈でき るようにし、また全てのコマンド実行を executeLabel から行うことにする。 これに結構時間を取られる。
ソースを印刷し、この時点でのバグを洗い出し。結構あった。
最初の画面が出るところまで行ったが。gosub を実装していないのでここ まで。
qpixmap に対して qpainter と bitBlt を使えば、画像表示も文字表示も 全て解決する。なんとこんな解があるとは。すげー Qt。で、直したら、劇的 とも言えるパフォーマンスアップ。何しろ前回 60msec と言っていたのが、 0msec。つまり Qt の event loop と cache 能力を最大限に使うにはこうしろ ということらしい。素晴らしい。
btnwait と reset を実装。後は、文字表示を入れれば bbndemo が完全に 動く。
表示用の画像データを独自の配列で持ち、部分 copy や画面効果などは全部 自前で実装し、最後に widget にコピーするようにする。何故か X11 の waring もでなくなった。
無理やり setWFlags( WRepaintNoErase ) を設定して、再描画しないで draw するようにしていたが、180msec くらいかかる。QLabel を継承して、独 自に QLabel を継承して class を作ったら、何故か 60msec くらいでかなり スムーズになった。何故?
高速化のため、画像データを ButtonLink に直接持たせる。
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 が半分動く。
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 を経由するようにする予定。
開発開始。
sar 形式のファイルを読み込む SarReader を書く。圧縮ファイルの中身を 見ていたら、フォーマットが分かってしまった。圧縮がかかっていなかったの で簡単に復元できた。ついでに、サンプルアプリケーションで arc.sar の中 身を全部展開する sardec を書く。
nscript.dat の暗号化方式も、web を探していたら分かってしまった。と りあえずスクリプトを復元する。
Qt で GUI を作る。一応メニューバー等を付け、背景がロード・表示でき ることを確認。MouseEvent と TimerEvent のハンドリングも書く。