過去の開発日誌

2002年1月〜3月

3月31日

αβεさんの御指摘により、mode800 の時の underline の初期値に関する バグを取る。

αβεさんの御指摘により、cmp の戻値がおかしいバグを取る。

コードの clean up。

20020331a

大量にメモリリークしていたのを改善。

3月30日 セーブファイルの互換性が無くなりました

saveon, saveoff を実装。

forCommand, nextCommand の clean up と bufix。

その他 bug fix。

ショートカットキーの space が押された場合、マウスカーソルの下にボタ ンがあってもボタン外を押したことにする。

セーブファイルに text の表示/非表示を示すフラグを格納する。以前のセーブ ファイルは次のようにして移行してください。末尾に 1byte (0x01) 追加する だけです。

echo -n '\001' >> save1.dat

3月27日

sdl-fan-jp の Iguchi さんのパッチを取り入れ、MacOS X で CD-ROM を使 わないようにするためのコードを修正。MacOS X で正常にコンパイルできるか どうか未検証だが、こちらの方がずっと綺麗。MacOS X での動作報告お願いし ます。

3月26日

Takano さん adas さんから MacOS X 上での初動作報告をいただきました。 いただいた Makefile.MacOSX を追加。

adas さんの御指摘により、SDL_image を使って画像を読み込む際、必要ラ イブラリ(libjpeg 等)未インストールのために読み込めず落ちる現象に対処。

3月25日

textgosub, textbtnwait, getcursor, texec, ispage を仮実装。 textgosub は一見正常に機能しているように見えるかもしれませんが、 saveon, saveoff が未実装であるため textgosub 内からの save, load は正 常には行えません(一応 save, load はできます)。他にも色々おかしいとこ ろがあるので、あくまで試験的なリリースだと思ってください。なお、 textgosub を使用しないゲームについては 20020321a 同様に動作するはずで す。

len を実装。

20020325a

MacOS X で動作するように、コンパイル時に CD Audio 制御用の命令を #ifdef でスキップできるようにする。

3月21日

αβεさんの報告された、select の選択肢が文字列変数の時に生じるバグ の原因を一昨日直したつもりが、検証が不十分だったため直しきれていません でした。αβεさんの patch を参考に再度修正。

textoff, texton を実装。

αβεさんの御指摘により、表示文中に特殊命令以外のASCII文字を表示す るようにする。

20020321a

効果 1 で wait を省いたら、busy loop になって入力を受け付けない状況 が発生したため、開始時に wait を入れるように戻す。

ついでに textspeed を実装。

3月20日

富田さんの patch を参考に、--edit オプション指定時に z キーで音量・ 変数変更モードに入れるおまけ機能をつける。この機能は暫定的なものであり、 今後どうなるかは不明です。

3月19日

αβεさんの御指摘をヒントに、命令文中に "" で囲まれた 2bytes 文字があった場合に、以降をテキスト文として解釈し変数を decode していたバグを取る。

富田さんの patch を取り入れ、CD Audio で BGM 演奏する際に、再生トラッ ク番号がセーブされないバグを取る。

3月18日

quakex, quakey, quake を実装。再現性に関して報告募集。

20020318a

select が複数行にまたがるときに、先頭が * ではじまることは許されな いようだ。TODO から削除。

select で "" を取り扱えるようにする。

富田さんの patch を参考に getreg を実装。

3月17日

erasetextwindow を実装。ただし、select や btnwait 時に文章と選択対 象が重なる場合に正しく表示できない。

20020317a

効果の 15, 18 を実装。ただし遅い。

命令直後に表示文があると最初の文字が欠けるバグを取る。

delayed effect が効いていなかったバグを取る。というか、link 構造に する必要が全くなかった。仕様の勘違い。とほほ。

3月13日

起動オプションの --font で ttf フォントを指定できるようにする。

アーカイブからデフォルトカーソルを読み込めるようにする。

美しくないが文字列スプライトで文字列変数を使えるようにする。そのた めに、readToken 系を、string_buffer のみではなく任意の char 配列から読 めるようにする。

3月12日

起動時にコマンドラインオプションを取れるようにする。

富田さんの patch を参考に CD audio による演奏を選択できる機能を追加。 デフォルトでは mp3 ファイル演奏、--cdaudio オプションを付けて起動する ことで CD audio 演奏になります。

αβεさんの patch を参考に、再生中の track に対する play 命令を無 視するようにする。ただし、これが妥当な動作かどうかは未検証。

αβεさんの patch を参考に、 ("")"true""false"の("")部に変 数が使えないバグを取る。

回想時にボタンの位置がおかしいバグを取る。

3月10日

コードの clean up とバグ取り。

タグの読み取りで、アニメ指定の1コマの時間を解釈する個所を間違えてい たバグを取る。

s コマンドで文字から絵を作るときに、描画時ではなく生成時にその幅と高 さを取得する。これで spbtn で使えるようになる。

回想時に select 文の文字が表示されないようにする。

αβεさんの patch を取り入れ、nbz を解凍する際に無限ループに陥る場 合があるバグに対処する。

3月9日

αβεさんの patch を取り入れ、select 画面で禁則処理が行われるように する。

select 待ちの時に、右クリックメニューから skip モードにすると select が選択状態になるバグを取る。

某ゲームやっと終了。問題といえば quake が無いことくらい。

3月8日

("")"true""false"を実装。

3月7日

sar って「泡沫」で使われていた。しかし、仕様書には乗っていない。と りあえず nsa と同じ扱いにする。というわけで、sar 復活。

arc の引数に対応し、複数アーカイブを扱えるようにする。

αβεさんの patch を取り入れ、caption を実装。

ONScripter の返すバージョンを 1.96 にする。

3月6日

movl を実装。

配列を 0 で初期化するようにする。

αβεさんの patch を取り入れ、setwindow で指定したウィンドウ画像の αブレンディングがおかしいバグを取る。

αβεさんの御指摘により、rmode 0 にしても、右クリックに反応してし まうバグを取る。roff を実装。

3月5日

exbtn, exbtn_d, spstr を実装。

αβεさんの御指摘により、右クリックメニューで選択肢以外をクリック すると処理が止まるバグを取る。

sar なんて命令ないんじゃない?なんでいれたんだろ?というわけで削除。

btnwait の時に、skip mode を off にするようにする。

trap を実装。

3月4日

spbtn の取り扱いの高速化。

省略値かどうかを検出し一つのコマンドの区切りを正確に判断することで、 コマンドの区切りが':'で無い場合も取り扱えるようにする。

3月3日

グラフィックのタグ指定の透過形式指定に r を追加+画像取り扱い周りの バグ修正。

btnwait で、テキストを消し描画用に画面を描き直す。

cell, spbtn を実装。

defvoicevol, defsevol, defmp3vol を実装。

voicevol, sevol, mp3vol を実装。

wave 演奏を SDL_Mixer の MIX_CHANNELS(=8) チャンネル分同時に鳴らせ るようにし、wave コマンドは 1 番に、dwave の 0-7 はそのまま、8 以降は 7 番に割り付けるようにする。

mp3 を演奏するときに、今までは SDL_sound で読み込み SDL_mixer で他 の音とミックスしていたのだが、これだとボリュームを変更できないという問 題があった。そこで、SMPEG を直接用いて読み込み SDL_mixer で合成し、 SMPEG_setvolume を直接使ってボリュームを変えるようにする。結果として、 SDL_sound が不必要になった。

3月1日

αβεさんの御指摘により、/コマンド(直後の改行無視)の扱いのバグを 取る。

αβεさんの御指摘により、"ー"を禁則文字に追加。

αβεさんの御要望により、selnum を実装。

2月28日

btndef clear に対応。しかし、ONScripter では "" で囲まれ た文字列と素の文字列を区別しないため、"clear" という名前の画 像を指定すると、btndef clear として認識されてしまう。しかし、どうやら clear という名前の画像が指定されことはなさそうなので、まあいいか。

skip でラベルをまたぐときに正しい位置に行かないバグを取る。よく今ま で動いていたものだ。

連続する空白をスキップするコードが、最初の一つしかスキップしないよ うになっていたバグを取る。

20020228a

blt を中間 surface を経由しないようにし高速化。

setwindow, menusetwindow の色味モードと画像ファイルモードにまともに 対応。

mov3 - mov10 を実装。

デフォルトのテキストスピードをそれぞれ2倍に変更。

2月27日

αβεさんの patch を取り入れ、abssetcursor を実装。

αβεさんの御指摘により、readInt で省略値を読み込む際のバグを直す。

Nbz decode を実装。これにより、必要なライブラリに bzip2 が加わりま した。

bg#000000, ... のように、# が前の token と隣接している場合にも取り 扱えるようにする。

画像ファイルが存在しなくともゲームを続行するようにする。

20020227a

skip mode もしくは1ページ表示で select 待ちに行き、そこで右クリッ クメニューに行ってまた select 待ちに戻ってきたときに、カーソルが表示さ れマウス操作が不可能になることがあるバグを直す。

20020227b

本日3回目のアップ。上の変更にともない skip mode もしくは1ページ表 示でカーソル待ちの扱いがおかしくなったバグを取る。

2月26日 セーブファイルの互換性が無くなりました

ScriptParser の Script を解釈する部分を大幅に変更し、配列に対応。

げげげー。仕様書にはスプライトが 0-49 とあるのに、実際には 0-255 ら しい。またセーブファイル変更だよ。この際、取り得る範囲もセーブファイルにい れ、デフォルト値の変更に耐えられるようにする。

あと、回想も無限にできるようにした方がいいようだ。ここは将来直すとし て、ついでに必要なパラメータをセーブファイルに追加しておく。

btnwait2 を実装。

mid を実装。

800x600 モードを実装。

というわけで、言ったそばからまたセーブファイルの互換性がなくなりまし た。2月24日バージョンのセーブファイルから移行する場合は次のようにしてくだ さい。まず、2月26日バージョンのONScripterLabel::loadSaveFile( int no ) を次のように書き換えます。
・loadInt( fp, &text_history_num ); をコメントアウト

    /* ---------------------------------------- */
    /* Load text history */
    //loadInt( fp, &text_history_num );

・for ( i=0 ; i<MAX_SPRITE_NUM ; i++ ){ の MAX_SPRITE_NUM を 50 に
    /* ---------------------------------------- */
    /* Load current sprites */
    //for ( i=0 ; i<MAX_SPRITE_NUM ; i++ ){
    for ( i=0 ; i<50 ; i++ ){

この状態でコンパイルしてゲームを起動し、移行するセーブファイルを一旦読 み込みすぐに保存します。セーブファイルの書き換えが終わった後に ONScripterLabel::loadSaveFile( int no ) を元に戻し、以後はこれを使って 普通に遊べるようになります。

2月24日 セーブファイルの互換性が無くなりました

lookbackbutton, lookbackcolor, lookbackflush を実装。

回想モードを実装。これで文章履歴が見られる。

マウスカーソルが最初にボタンの上にある場合に選択状態にならないバグを 直す。

selectcolor, menuselectcolor を実装。

monocro 修正。なおこれに伴い、セーブファイルの互換性がなくなっています。

αβεさんの御指摘により、sprite の重ね合わせの順序が逆になっている バグを直す。

αβεさんの御要望により、rmenu の状態をセーブファイルに入れる。これに 伴い、セーブファイルの互換性がなくなっています。

αβεさんの御要望により、gettimer を実装。

セーブファイルの互換性がなくなることはなるべく避けるようにしていますが、 今回は以前のバージョンが作成した save?.dat は全て消してください。ただ し、かなりゲームが進行していてデータを継続して使いたい方のために、セーブファイルを移行する裏技があります。旧バージョンを持っている人は、新バージョ ンの関数 ONScripterLabel::loadSaveFile( int no ) を旧バージョンの関数 ONScripterLabel::loadSaveFile( int no ) で差し換え、コンパイルします。 この状態でゲームを起動し、移行するセーブファイルを一旦読み込みすぐに保存 します。この時、保存は新バージョンの形式でなされます。セーブファイルの書き 換えが終わった後に ONScripterLabel::loadSaveFile( int no ) を差し換え ない真っ新の新バージョンをコンパイルし、これを使って普通に遊べるように なります。ただし、この裏技は今回のバージョンアップではうまくいきますが、 常にうまくいくとはかぎりません。

2月23日

monocro 命令を実装しました。セーブファイルに monocro 命令の情報を追加しました。

select 命令でテキストが一行未満の時には、キーボードショートカットで選択肢を選ぶときに、マウスカーソルが行の中心ではなくテキストの中央にくるようにしました。

0.txt, 1.txt の連番ファイルで、ファイル末尾が改行文字で無い場合に正常に読み込めなかったバグを修正しました。

2月22日

for, next, break 命令を実装しました。

intlimit, amsp 命令を実装しました。

命令の返り値が RET_JUMP の時に、timer event で executeLabel に飛んでいたのを、goto で executeLabel の最初に戻るようにしました。これで余計な時間待ちが減ります。

以上、雪を降らせるために努力をしてみましたが、スムーズに降りません。一カ所 timer event 待ちをしているところがあり、そこで引っ掛かっているのだと思いますが、すぐに回避策が思いつきません。保留にします。

2月18日

select 命令で複数行中に空白行があると動作しないバグを修正しました。

delay, transmode 命令を実装しました。

マシンパワーによって画面効果の継続時間が異なっていため、画面効果命令で定められた時間内に終わるようにしました。CPU や描画速度に応じて、画面効果の描画間隔を調整するようにしました。

2月16日

parseTaggedString のループ回数読み取り部分のバグを修正しました。

アニメーションカーソルを実装しました。これで、キー待ちとタイマ待ちを区別できるようになりました。

某ゲームのために、アーカイブを検索する前に現在のディレクトリを検索するようにしました。

保存ファイルを読み込むときに、ファイル名が書いてある場所以外をクリックすると固まるバグを修正しました。

2月13日

!d 命令を実装しました。

2月12日

今日 Windows で動かしてみたところ、スクリプトを読み込む段階で止まってしまいました。調べたら、なんと Windows と Linux で fread の戻り値の仕様が異なることが判明しました。今までよく Windows で動いていたと思いました。そういうわけで修正しました。

2月11日

profiler でメモリリークを調べました。2個所でリークしていたため、解放するようにしました。

2月10日

表示文で特殊文字しかない場合に改行しないようにしました。

stralias 命令で正しく復号されない場合があるバグを修正しました。se1? が全て se1 として解釈されていました。どおりで効果音が場面に合っていないと思っていました。

某サブシナリオを実行していたところ、画面のスクロールに必要だったため blt 命令を実装しました。ただし、拡大縮小には未対応です。

げげげ、もしかして savegame 命令と loadgame 命令を実装しないとゲームが進まないのではないのかという気が非常にしています。そういうわけで、savegame, loadgame 命令を実装しました。今までの進行は…。

2月8日

セーブファイルから背景と立ち絵が正常に復元されない場合があるバグを修正しました。

文字の色変更を実装しました。

スクロール画面効果を実装しました。

date, time 命令を実装しました。

2月7日

「ひとかた」では define 節の中で gosub 命令を使っており、ここで timer を使ってしまうため、ONScripter のコンストラクタの最後で define 節を読み、game 命令を実装してここで start 節に飛ぶようにしました。

「ひとかた」で、なぜかディレクトリのセパレータが arc.nsa と nscripter.dat とで異なっているため、ファイルの読み込みに失敗していました。それで、もしかしてと思い確認したところ、スクリプトの改行も 0x0a になっています。どうやら、Unix 上で作って、Nsa の圧縮だけ Windows でやっているようです。事前に Windows 用のセパレータに置換することで回避しました。

仕様書によると、画像タグ s を使う時に引用符で囲まれた区間にある stralias が展開されることになっていますが、その他の場合では引用符で囲まれた区間では展開されないようになっており、後から無理に命令を追加して仕様に一貫性が無くなっているように感じます。というよりも、自身のコードの一貫性が崩れるため実装したくありません。そういうわけで、stralias を展開しない形で画像タグ s を実装しました。

コードの変更にともない、セーブファイルの背景画像保存回りを更新しました。以前のセーブファイルと互換性が無くなりました。

vsp 命令を実装しました。これで「ひとかた」がほぼ動くようになりました。

2月6日

jumpb 命令を実装しました。

HG ゴシックと HG 丸ゴシックフォントでは、embedded bitmap がないため全ての font size で正常に表示されるようです。

公開のために Web page を作り、ベータ版として公開しました。

2月5日

DelayedInfo の変数の中身が変化することがあるため、元々のコマンドラインを再解釈するのではなく、展開されたコマンドラインを保存してそれを解釈するようにしました。

dwave, dwaveloop, dwavestop 命令を全てチャンネル 0 にマッピングすることにして実装しました。某ゲームでしゃべるようになりました。すごい、これでフルボイスを実現しています。

stop 命令を実装しました。

mp3, mp3save, mp3loop 命令を実装しました。アーカイブ埋め込みの MP3 演奏に対応しました。BGM とボイスがあると大分違います。

btnwait 命令と select 命令と右クリックメニューをキーボードのみで操作できるようにしました。これでキーボードのみで全ての操作が可能になりました。

btndef 命令を高速化しました。

click, mul, div, mod 命令を実装しました。

if 命令を強化しました。

2月4日

itoa, atoi 命令を実装しました。

BaseReader から派生するクラスを大幅に変更し、arc1.nsa - arc9.nsa の複数アーカイブに対応させました。

2月3日

公開に向けて大筋に関係ない細かい仕様の実装を始めました。

SMPEG の news group などを見て、smpeg on Win32 で global optimization を off にする区間を MPEGaudio::layer3reorderandantialias の関数に設定したところ、Win32 環境で MP3 が正常に演奏されるようになりました。素晴らしいです。前回は この関数から呼ばれる inline 関数の前後に入れたため、無視されているのではと思っていましたが、まさにその通りでした。

Win32 環境でのファイル時刻読み取りを実装しました。

resettimer, waittimer, autoclick 命令を実装しました。

clickstr 命令を実装しました。強制クリック待ちができるようになりました。

leaveTextDisplay で行っていた処理を timerEvent の先頭に持っていきました。これが筋ですし、懸案のバグも取れてかなり描画がスムーズになりました。

立ち絵とスプライトの前後関係が逆だったのを直しました。

キーボードの 1, 2, 3 で文字速度を切り替えられるようにしました。

右クリックメニューのうち windowerase と reset を実装しました。

なんと reset 命令でグローバル変数を初期化していたバグを直しました。

セーブファイルに文章履歴と setwindoweffect 命令のパラメータとその他の文章の状態とスプライト情報を含めるようにしました。

1月27日

いきなり某ゲームを動かしてみたところ、動きはするものの、15pt 文字の表示がめちゃめちゃです。26pt だとうまくいきます。どうやら、SDL_ttf もしくは freetype2 が埋め込みビットマップに対応していないことが原因のようです。困りました…。

kochi フォントだと 17pt 以下が、MS フォントだと 22pt 以下がだめです。setwindow 命令で強制的に 18pt 以上にして動かします。

画像展開回りが遅いです。キャッシュなどの導入を検討した方がいいかもしれません。

オープニング途中で segmentation fault で落ちました。まだまだです。

1月26日

!w 命令を実装しました。

windoweffect 命令の解釈のバグをとりました。

windows でビルドすると、コンパイラのチェックが厳しいため、Linux では気付きにくいバグが見つかることが多いです。いくつかバグを取りました。

enterTextDisplay で、既読文字がスムーズに表れるようにしました。

禁則処理を実装しました。

効果があるのかいまいち不明ですが、カーテンなどの画面効果を 16bit 間隔にしました。また、画面効果の処理時間間隔を 20msec から 10msec にしました。遅いマシンだとつらくなるかもしれません。

SDL_mixer を入れ、wave, waveloop, wavestop 命令を実装しました。mixer のまともなマニュアルがないので苦労しましたが、mp3 と同時に演奏できています。素晴らしいです。

1月25日

NScrflog.dat を大文字にすべく、SarReader と NsaReader の内部では大文字で扱うことにしました。

lchk と labellog 命令を実装しました。NScrllog.dat の中身は同様に大文字です。

これで某ゲームは一通り動くようになったかもしれません?

1月23日

humanz, lsp, lsph, csp 命令を実装しました。ようやくスプライトが実装されました。

立ち絵とスプライトのオーバーラップ処理をまともにしました。

1月24日

filelog 命令を実装しました。BaseReader にアクセス状態を保存するフラグを入れました。notif 命令の実装が間違っていたのを訂正しました。これで、グラフィック一覧が正常に動くようになりました。ただし、本来は NScrflog.dat に格納される文字が大文字であるのに対し、今回の実装ではアーカイブの中の文字をそのまま使っています。

1月22日

readLine の時点でテキスト行か否かを判定し、同時に1次 parse をし、readInt と readStr で2次 parse をするように直しました。

1月19日

NSA の SPB を実装しました。元々は BMP で吐くようになっていますが、楽なので PPM で吐くようにしました。そのうち BMP にするかもしれません。BMP のヘッダの仕様を調べれば15分くらいで BMP に出来そうな気もしますが…。

「泡沫」のために、readToken で quat と 2bytes 文字以外の命令を大文字から小文字に変換するようにしました。

!sd を実装し、また sentence_font.wait_time が 0 になることがあったバグを直しました。

「泡沫」のために、立ち絵の透過形式の左上とコピーを実装しました。

セーブファイルに現在演奏中の CD track の番号を入れるようにしました。

bg 命令で立ち絵を除去する際に、状態変数をクリアしていなかったバグを取りました。

「泡沫」のために、デフォルトアーカイブを Direct から NSA に変更し、arc.nsa が開けないときには Direct でいくようにしました。

select 命令の後に enterNewPage を実行するようにしました。

某ゲームのために getversion, jumpf, rnd, rnd2 命令を実装しました。

1月15日

NSA の lzss をさくっと実装しました。

ショックというかショックじゃないというか…。SPB の SPI の逆アセを始めたところで、既に実装してソースを公開している人を発見しました。同じ時期に同じことをやっており結構かぶっています。

1月14日

play 命令もしくは playonce 命令が playstop 命令を挟まず連続した場合に、セグメンテーションフォルトを引き起こすバグを直しました。

某ゲームでグッドとトゥルーに行けることを確認しました。

1月13日

昨日おかしかったところを直し、メニューバー以外は Qt の状態に復帰しました。

ファイルの修正時刻やパスの区切り文字など、ファイルアクセス関連が機種依存になっています。いいライブラリはないものでしょうか?

SDL_sound を入れ、さくっと MP3 演奏を実装しました。play, playonce, playstop 命令を実装しました。ただし、MIDI は無視し、CD 演奏は対応する MP3 演奏に割り付けるようにしました。BGM があるといいです。

Windows 用の Makefile を書き、Windows でコンパイルしてみました。思ったよりも表示がもたつきますが、問題なくコンパイルでき、文字・音楽・効果を含めて実行できました。ただ、機種依存の searchSaveFiles() は未実装です。

1月12日

音楽再生を実装しようとして Qt の限界を感じました。libmad や libsmpeg などの使用も考えましたが、ここにきて結局 Qt から SDL に移行することにしました。そもそも開発前に Qt でいくか SDL でいくか迷ったのですが、SDL をよく調べなかったせいもあり使いなれていた Qt にしてしまった経緯があります。

JPEG 画像の読み込みを試し、また sjis2utf16 を書いて TTF を使った日本語描画を試しました。文字のアンチエイリアシングが素晴らしいです。フォントファイルを直接指定しなければいけないのが難点ですが。画面の bit 転送も Qt とくらべて速そうですし、alpha blend も未検証ですが速そうです。欠点と言えば、メニューバーを自前で実装しなければいけないことくらいですが、今はメニューバーをほとんど使っていないので構いません。実装自体も簡単そうです。

というわけで、一日かけて移植しました。8割方移植が終了しました。GUI を外して、Blit 命令を置換するだけでほぼ済みました。enterTextDisplay と rmenu 周りが若干おかしいくらいです。

1月10日

ファイル名を QNScripter 系に統一し、copyright を入れ、ライセンスを GPL にしました。

Makefile を Linux 用と Windows 用に分けました。Windows 用は書いただけで未試行です。

1月8日

文章履歴の保存を実装し、表示部分は完成しました。履歴のセーブはまだです。

1月7日

テスト実行中のループで引っ掛かり先に進めなくなったので、dec 命令を実装しました。

テキストウィンドウがフェードインするときに画面効果が適用されるようにしました。

文章履歴用のリングバッファを作りました。

「ハーバー」で立ち絵の位置がおかしいので、underline 命令を実装し、立ち絵の下限の位置を underline に合わせるようにしました。

1月6日

locate 命令を実装しました。

windoweffect 命令を実装し、テキストウィンドウがフェードアウトするときに画面効果が適用されるようにしました。フェードインの場合は未実装です。skip と one page をきちんと実装しました。テキスト表示中に画像が追加される場合に、既表示のテキストが消えてしまうバグを何とかしたいです。文章履歴保存を兼ねて、バッファリングしておいて最描画するのがよさそうです。

1月5日

save, load 命令を実装しました。入れ子を含む現在の状態と変数と背景と立ち絵の情報が保存ができます。後はテキストとスプライトとカーソルの保存ができればよいのでしょうか?

curtain 効果を実装しましたが、かなり遅いです。

テキストのクリック待ちのときに、space キーと return キーで先に進めるようにしました。

systemcall 命令を実装しました。

selgosub 命令を実装しました。

1月3日

WAIT_BUTTON_MODE を追加し、btnwait 命令で右クリックメニューが無効になるようにしました。

「ハーバーランドでつかまえて」(以下「ハーバー」)を動かすテストをしていて、bg 命令で小さな画像を読み込むときの問題を直している時に、偶然、占有メモリが増えていくバグの原因を発見しました。単なる delete のし忘れでしたが、qnscripter ではなく XFree 側のメモリが増えていくところが嫌らしいです。これで全くメモリリークがなくなりました。