12月30日
数値変数と文字変数で、インデックスの指定が範囲外のときの処理を入れました。現在インデックスは 0 から 4095 まで取れますが、ONScripter ではこの範囲外を指定すると、共通の一時変数へのアクセスに置き換え続行する仕様にします。
数値変数と文字変数で、インデックスの指定が範囲外のときの処理を入れました。現在インデックスは 0 から 4095 まで取れますが、ONScripter ではこの範囲外を指定すると、共通の一時変数へのアクセスに置き換え続行する仕様にします。
zZzさんからのバグ報告を元に、テキスト表示の際に奇数個の半角数字の後に空白・改行があると文字化けすることがあるバグを修正しました。
zZzさんからのパッチを取り入れ、キーイベントの SDLK_KP_ENTER も SDLK_RETURN と同様に扱うようにしました。
バグ報告「「ヒトナツの夢」の文字表示について」を元に、以下の縦書きモード時の不具合を修正しました。
縦書きかつルビ使用時に、テキスト行が文字間分右にずれていたバグ(?)を修正しました。しかし、getcursor の戻値にこのずれが反映されないのは本家のバグだという気がします。
文字スプライトは、常に横書きで描画するようにしました。
スプライトの透過度を、ロードの際にリセットしないようにしました。
縦書きのときは、本家では setwindow の「縦の文字数」×「縦の文字数」が文字表示領域になり、clickstr のクリック待ちと改ページの区別も「縦の文字数」を基準に決めているようです。これもバグだと思いますが、現状のゲームはこの仕様の元に作成されているので、ONScripter もこれにならいます。
これまでバグって機能していなかった縦書き時の select 系コマンドに対応しました。
ScriptHandler::readToken() において、想定外の文字が現在バッファの先頭に来たときに、スクリプトが不正にスキップされることがあるバグを修正しました。昔は無かったのですが、パーサを書き換えたときにエンバグしたようです。
にゃののん日記によると、プログラム本体をアイコン登録すれば、Homeキーでホーム画面に戻った後も、タスクバーのアイコンからゲームに復帰できるとあります。さっそく試してみましたところ、VGA でしかやっていませんが、うまくいっているようです。素晴らしい。ONScripter の配布パッケージに取り入れさせていただきます。また、ONScripter-Resume は削除しました。
上の事情もあり、Zaurus 用パッケージのためにアイコンを作りました。今までは碁のアイコンを流用していましたが、最近の Zaurus には入っていないようです。私の Zaurus にはあるのですが、なぜかタスクバーには出てきません。
画面効果のモザイクイン・アウトに関してバグ修正を行いました。onscripter-20051101 での修正ミスです。
し~くるさんからの「PSP 用のパッチ」を適用し、PSP 用の Makefile やキーバインドを追加しました。
画面効果のモザイクイン・アウトにおいて、解像度によってはセグメンテーションフォルトを起こすバグを修正しました。そもそもモザイクの描画の仕方が間違っていたので、そちらも修正しました。
BPP16 を定義してコンパイルしたときに、奇数幅の画像を正常に扱えないことがあるバグを修正しました。SDL_Surface で画像バッファの幅が 4byte に align されているのを忘れていました。
bar コマンド後の再描画領域が不正になることがあるバグを修正しました。
バグ報告「歌月十夜」を元に、selnum コマンドにおいて、行をカウントする変数が正しく更新されないバグを修正しました。
し~くるさんからの修正「save_data_lenの初期化ミス?」を取り入れ、save_data_len が初期化されていないため ScriptParser::allocFileIOBuf 内の memcpy の挙動がおかしくなることがあるバグを修正しました。PSP 上で動作したそうです。
erasetextwindow で 0 が指定されたときに、既にテキストが描画されているときのみ、画面効果に入ってもテキストの表示を継続するようにしました。これまでは、画面効果に入ると強制的にテキストを表示するようにしており、結果として意図しないテキスト枠が表示されることがありました。
仕様として、デフォルト(saveon 有効時)では改ページする度に(厳密には少し違いますが)セーブデータのスナップショットをとっているのですが、これまではこれを tmpfile で生成したファイルに格納していました。今回、スナップショットをメモリ上に保存するように変更し、またセーブデータの実際の読み書きも、メモリ上で全体を構築し fread, fwrite で一度に読み書きするようにしました。ディスクアクセスの遅い環境では結構有効だと思います。もしかしたら、セーブデータの読み書きに関してエンバグしている可能性があるので、何か気づいた方は御報告下さい。
また、セーブファイル以外で読み書きを行うデータファイルについても、同様に一気に読み書きするように変更しました。
今まで、fgetc もどうせ内部でバッファリングされているんだろうから、fread と読み込み速度はたいして変わらないだろうと思い込んでいたのですが、実装にもよるのでしょうが、比較してみたら相当差があることが分かりました。ScriptHandler::readScriptSub の処理時間を比較してみましたが、某ゲーム(nscript.dat が 5M 程度)で、fputc 版1秒、fread版(自前で 4K バッファリング) 0.04 秒でした。何がネックになっているのかしりませんが、ディスクアクセスが遅い環境だとかなり影響がありそうです。というわけで、fread で実装したものに更新しました。
ついでに、アーカイブ読み込みルーチンも一部バッファリングするようにしました。
memprof で見てみたら、ScriptHandler::ArrayVariable をコピーするときと ScriptParser::loadStr で非常にわずかですがメモリークしていたので修正しました。
バグ報告「ルビの問題」を元に、文章がルビ付きの文字から始まっている場合に正常に描画されないバグを修正しました。
バグ報告「レミュオールの錬金術師で商品が減らない」を元に、bar コマンドで現在値に負の数が指定されたときに、unsigned でキャストされ異常な値となり、その結果環境によっては落ちるバグを修正しました。
データ読み込み時に、bar と prnum の初期化処理が不完全で落ちることがあるバグを修正しました。
バグ報告「レミュオールの錬金術師で商品が減らない」で nyo さんからいただいたパッチを元に、puttext コマンドが '/' で終わる際に、不必要な改行が入るバグを修正しました。
さっそく BPP16 を定義していたときに落ちるバグを発見し、修正しました。単なる型の書き換え漏れです。Zaurus 用パッケージをお使いの方は必ず更新してください。
cselbtn コマンドで、csel で設定されていない番号が渡されたときに、無視して続行するようにしました。これまでは強制終了していました。
BPP16 を定義してコンパイルした場合に、内部画像を RGB 16bpp, alpha 8bpp で管理するようにし、最終出力も 16bpp となるようにしました。BPP16 を定義しない場合は、これまで通り RGBA 32bpp で管理します。これにともない、画像処理関係を大幅に変更しました。エンバグして表示がおかしくなっているかもしれませんので、お気づきの方はご報告下さい。
これまでは PDA を定義すると、画面サイズを QVGA にして最終出力である screen_surface のみを 16bpp で確保していましたが、今回からは PDA を定義しても画面サイズが QVGA になるだけです。なお、PDA に加えて PDA_VGA も定義すると、最初に VGA を確保しにいき、失敗すると QVGA で確保しようとします。Zaurus 用パッケージでは、PDA, PDA_VGA, BPP16 を全て定義してコンパイルしています。Zaurus では体感できる程には速くなりましたが、思ったほどではありませんでした。また、BPP16 を指定すると、なぜか smpeg で mpeg1 動画の再生画面がノイズの様になります。
SDL_ACTIVEEVENT, SDL_VIDEOEXPOSE イベントが発生したときに、正しく画面が再描画されない場合があるバグを修正しました。
createBackground(), btnCommand() 等で、無駄に画像メモリを確保していたバグを修正しました。
monocro, nega の効果が命令直後に反映されるようにしました。前はそう いう仕様では無かった気がするのですが……。
バグ報告「レミュオールの錬金術師で商品が減らない」を元に、MIDI ファイルの演奏を停止する際に、ループ演奏の有無を示す状態変数を誤って設定してしまうことがあるバグを修正しました。
バグ報告「レミュオールの錬金術師で商品が減らない」を元に、表示文の '/' の後の改行で、スクリプトの行カウンタが正しく増加しないバグを修正しました。
tmkkさんからいただいたパッチを参考に、UTF8 ファイルシステム上の日本語ファイル名の読み込みに対応しました。Linux では、デフォルトでは EUC を想定し、UTF8_FILESYSTEM を定義してコンパイルすると UTF8 を想定します。MacOS X では、Makefile.MacOSXのデフォルトで UTF8_FILESYSTEM を定義しており、UTF8 を想定しています。
OpenGL 関連のコードを削除しました。
今後ですが、Zaurus では framebuffer のフォーマットに合わせて内部画像を RGB 16bpp, alpha 8bpp で管理し、使用メモリ量の低減と描画の高速化を図ろうと思います。今までは RGBA 32bpp で管理していたので、結構効果があると思います。9月中には実装する予定です。
Zaurus で使用していて、右クリックからのロード・セーブの表示が遅いので、TTF_RenderGlyph_Blended の結果を単純な LRU で30文字分キャッシュすることにしました。なぜ30文字かというと、これだけあればセーブ・ロード画面の文字がたいていの場合全部キャッシュに入りそうだからであまり深い意味はありません。体感速度は上がっています。というか、私のは素の SL-C700 なのですが、VGA だと画面描画が遅くて遊ぶ気がしません。リリース前のテストに使っているだけです。カーネルを入れ替えたり新しい機種にすれば快適になるのでしょうか。
drawsp2, drawbg2 で使用する拡大縮小回転付きのアルファブレンディング処理から、無駄な部分を省きました。下の布石です。
これまで、高速化のための試みとして OpenGL をバックエンドにした実装を試してきましたが、非OpenGL版との互換性を保つことに限界を感じてきました。実装上の問題(バグ)以外のあからさまな問題は、nega, mono が効かないことと1つのテクスチャメモリに乗らない大きな画像が扱えないことですが、他にも、多くの画面効果が高速化の恩恵を被れない、OpenGL 側の出力がダブルバッファリングされていることやビデオチップ内でレイヤー合成をするのかメインメモリ上でレイヤー合成をするのかの違いから意図したとおりの描画が難しい等々問題があります。このうちいくつかは、画像分割や GLSL で fragment shader を書くなどすれば解決しますが、OpenGL を使用するメリットが低下したり、なるべく多くの環境で使用してもらいたいという主旨から外れてしまいます。本当は STL も使いたいのですが、同じ理由で敢えて使っていません。さすがに C で書く気はしませんが。そういうわけで、OpenGL 関連のコードは現状 ifdef で完全に分離されていますが、可読性やメンテの問題もあり、特に要望がなければ次回のリリースから OpenGL 関連コードを削除します。
bgcopy, getspsize コマンドを実装しました。ただし、bgcopy は画像の保存に未対応です。
bar_info, prnum_info で、セーブデータ読み込み時に初期化していなかったバグを修正しました。
btnwait 時に、スプライトのアニメーションが機能しないバグを修正しました。
バグ報告「2byte ファイル名」を元に、アーカイブからではなくファイルシステムから直接ファイルを読み込む際に、LINUX が定義されている場合ファイル名を SJIS から EUC に変換するようにしました。
ボタン選択時に、あるボタンからフォーカスが外れたら、別のボタンに連続してフォーカスが移る場合にも常に exbtn_d の中身を実行するようにしました。また、exbtn の P 指定でセルの番号を指定しない場合には、セル番号を0にするようにしました。
if コマンドの fchk, lchk で、"*label" 形式の引数を扱えなかったバグを修正しました。
exbtn コマンドにおいて、C 指定でボタン自身のスプライト番号を指定した場合に、非表示にならないバグを修正しました。
spi, soundpressplgin コマンドにおいて、nbzplgin.dll が指定されたときのみ復号を関連づけるようにしました。
~を通過するときに、現在行が1つ余計にカウントされていたバグを修正しました。
効果番号1のときに、全画面を再構築するのではなく、dirty な領域のみ再構築するようにしました。小さなスプライトを print 1 で連続的に動かすような演出が高速化されます。
セーブデータのバージョンが2未満のときに、古い形式のテキスト履歴の読み込み方に問題があり落ちることがあるバグを修正しました。
puttext コマンドによるテキスト描画の際は、ゲーム状態を保存しないようにしました。
*start 直後で必ずゲーム状態を保存するようにしました。
exbtn コマンドの M 指定(移動)の際に、非表示だったスプライトが表示状態にならないバグを修正しました。
saveoff コマンド実行時に、ゲーム状態を保存しないようにしました。
csel コマンド実行時に、テキストモードに入らないようにしました。
pretextgosub の飛び先に行く前にゲーム状態を保存していたのを、pretextgosub の飛び先から帰ってきてテキスト描画に入る前に保存するようにしました。
OpenGL 使用時に、文字の描画等が乱れるバグを修正しました。ただし、無条件でトップに描画されない不具合があります。
バグ報告「ひぐらし を nsaconv 時の途中停止」を元に、nsaconv, sarconv において、Windows bitmap フォーマットの1画素あたりの bit 数が8の場合(パレットカラー)の縮小に対応しました。ただし、bit 数が1と4の場合には未対応です。
バグ報告「文字表示領域の背景位置がずれる」を元に、setwindow の状態をセーブデータから復元する際に、背景画像ファイル名が NULL でない場合に無条件でそれを設定していたバグを修正しました。
Seung Park さんからいただいたパッチを参考に、X11 以外の環境で SDL_WM_ToggleFullScreen, SDL_WM_ToggleFullScreen が機能しない問題で、代替コードを入れました。これで、Windows や MacOSX の環境でも起動後に画面モードの切り替えが出来るようになりました。
Seung Park さんの修正を採り入れ、SDL_QUIT イベントを補足し endCommand を実行するように修正しました。
OpenGL を有効にし SMPEG を使用して MPEG1 動画を再生する際に、これまではビデオサーフェスを毎回 SDL_SWSURFACE に切り替えていたのですが、OpenGL サーフェスのまま再生するように修正しました。動画の再生前後で画面を切り替えが発生し見苦しい問題と、Win32 環境でフルスクリーンで動画を再生した後にマウスが復帰しない問題を解決しました。なお、SDL-1.2.6, SDL-1.2.7 には Overlay の初期化コードにバグがあり、落ちます。最新の SDL をお使い下さい。
バグ報告「紅刻の唄 第壱話で無限ループ」を元に、おそらくだいぶ前から if 文中の lchk 命令が機能しなくなっていたバグを修正しました。
Zaurus 用パッケージでは、キーボードでマウス操作を代行できるように --force-button-shortcut オプションを指定して起動するようになっているのですが、いつの頃からかこのオプションが機能していませんでした。まともに操作できなかったゲームが多数あったと思われます。機能するように修正しました。
monocro の効果が発生するレイヤや humanz の初期値を修正しました。「レイヤ描画順」を開発メモにまとめました。
SDL surface の RGBA の並びを、TTF_RenderGlyph_Blended が返すものとそろえ、文字描画を高速化しました。その他、alphaBlend の loop 内の高速化等で、systemcall load の描画が 4% 程(Linux Desktop)速くなりました。
文字は、描画時には他のレイヤを無視して必ずトップに書くように修正しました。
し~くるさんからのバグ報告「フルスクリーンモードについて」を元に、SDL_WM_ToggleFullScreen() が実装されていない環境(X11 以外)で --fullscreen を指定して起動したときに、フルクリーンモードになるように SDL_SetVideoMode に SDL_FULLSCREEN を渡すようにしました。また、ウィンドウモードで起動する --window オプションを追加しました。
春男さんからのバグ報告「選択肢表示中ホイール上下を繰り返すと Access violation」を元に、--enable-wheeldown-advance オプションを使用した状態で、select コマンドからマウスホイールの上で回想画面に入りそこから復帰するときに、落ちることがあるバグを修正しました。
今回は Zaurus では使わない機能に関する修正なので、Zaurus 版パッケージの更新はありません。
上の回想画面から復帰するときに落ちる問題で、別の問題とのからみを考え修正箇所を変えました。
もう beta 版ということもないだろうと思い、バージョン表記から beta を取ることにしました。今後、通常のリリースは onscripter-20050514.tar.gz (バージョン 20050514)、実験版のリリースは onscripter-exp-20050514.tar.gz (バージョン exp-20050514)という表記にします。ソースのディレクトリにもバージョン番号を付けるようにしましたので、バイナリパッケージを作成されている方はご注意ください。
なお実験版とは、大きな修正の結果エンバグしている可能性が高い場合や、要望によって私が試すことの出来ない環境での動作変更を行った場合にリリースし、私や他の人が十分にテストをした上で問題がなければ通常版に取り込まれます。
20050504 では、スクリプトの現在行の計算を間違えており、現在の状態が正しくセーブデータに保存されません。20050507 以降に差し換えてください。
春男さんからのバグ報告「未初期化変数2件」を元に、フォントや文字位置の状態を管理するクラスで横書き・縦書きの状態を初期化していなかったバグと、テキスト処理における文字カウンタを初期化していなかったバグを修正しました。
春男さんからのバグ報告「マウスのホイールアップで回想モードに入れません」を元に、テキスト終端のクリック待ちの際に、マウスのホイールアップで回想モードに入れなかったバグを修正しました。ついでに、rmenu が定義されていないときに、右クリックでテキストを消すようにしました。
春男さんからいただいたご要望「ホイールダウンで読み進めたい」を採り入れ、起動時に --enable-wheeldown-advance オプションを指定すると、テキスト終端でのクリック待ちの際に、マウスのホイールダウン操作をクリック操作として扱うようにしました。textgosub でクリック待ちをカスタマイズしているときには効果はありません。最初は、本家とは挙動が違うものの ONScripter の標準仕様にしようと思ったのですが、上記のホイールアップでの回想モードと組み合わせて回想モードと行ったり来たりしているときに、間違って意図せず読み進めてしまうことがあったので、オプション扱いにしました。
画面効果 16, 17 のモザイクで、解像度によってはセグメンテーションフォルトを引き起こすバグを修正しました。
起動時に、コンソールに常にバージョン番号を表示するようにしました。
zenkakko 命令使用時に、[]でくくられた箇所が gettag で取得されるように修正しました。また、pretextgosub に関する挙動の細かいバグを修正しました。
画面効果の描画ルーチンを若干高速化しました。
今までは puttext の引数を強引にテキスト扱いにしていたのですが、pretextgosub 内でうまく機能するように通常のコマンドと同様に扱うように修正しました。
logsp コマンドで、ログ用スプライト画像の横幅を対象ログの全文字数分確保していたバグを修正しました。
テキスト用の制御命令でその行が終了するときに、次のテキスト行の先頭で pretextgosub が効かないバグを修正しました。
画像解像度変更ルーチンの平滑化の部分を高速化しました。getscreenshot 命令や実行時の解像度変更処理・アーカイブ中の画像解像度を変更するプログラムが高速になります。
mp3 系で再生された wav フォーマットの音が、stop 命令で消音されないバグを修正しました。
し~くるさんからいただいたパッチを取り込み、USE_GL_TEXTURE_RECTANGLE をコンパイル時に定義することで、2の冪乗以外の幅を持つテクスチャを直接読み込めるようにしました。これによって、実装系によってはだめかもしれませんが、必要なテクスチャメモリの量が期待値半分になるはずです。
し~くるさんにご提案いただき、フルスクリーンの状態で起動可能にする --fullscreen オプションを追加しました。
exbtn の制御文字列で、コマンドが小文字の場合に対応しました。
itoa2, logsp2, cellcheckexbtn, spreload, sp_rgb_gradation, zenkakko, loadgosub を実装しました。
btndef 時に、exbtn_d の内容が消されていなかったバグを修正しました。
textclear 後に、行の解釈がおかしくなるバグを修正しました。
前からおかしいと思っていたのですが、特に小さな文字で輪郭にエッジのようなものが出て汚く描画されていたバグを修正しました。文字描画の際に、アルファ値を二重に掛けていたせいでした。
文字スプライトを使用時に、文字列が途中で改行されないように修正しました。
コマンドラインに出力されるメッセージを一部抑制しました。
tattsuu さんにご指摘いただき、以前 Linux Zaurus への機種依存部分を吸収するために組み込んだマウスの座標変換回りのコードを削除しました。20030622 以降で機種依存部分の処理を SDL ライブラリ側でやってもらうことにしたため、現在では使われていませんでした。このあたりの経緯については、20030622 の開発日誌を参照してください。
にゃののんさんからのバグ報告に基づき、音楽再生のチャンネル管理のバグを修正しました。今回調べて分かったのは、stop 命令は、play 系, wave 系, mp3 系には効果がありますが、loopbgm, dwave 系には効果がありません。また、dwave 系は、save, load, reset によって消音されることはありません。このあたりを曖昧に処理していたため、鳴るべき音が消されてしまうことがありました。ちなみに、いつもりなざうテクノウを拝見しております。
スクリプト中で配列変数の要素をさらに配列変数で指定している時に、参照された配列の値を格納する構造体が、親子の配列変数から同時に上書きされてしまい、正しい値の取得ができなかったバグを修正しました。
ファイルが存在しない場合の表示色指定が反映されないバグ、デフォルトの文字色が間違っていたバグ、右クリックメニューの表示色が間違っていたバグを修正しました。
今までこの機能に気付かなかったのが自分でも不思議ですが、SDL_ttf の TTF_SetFontStyle 関数を使うと太字(bold)表示に対応できます。しかし、今まで使用していたフォントが、太字になったらかなり見ずらくなってしまいました。この太字の機能は、フォントファイルの情報とは無関係に SDL_ttf が独自に実現しているせいか、特に大きなサイズのフォントでつぶれが目立ちます。そのため、実装はしましたが無効にしてあります。試したい方は、ONScripterLabel::drawGlyph 関数中の #if 0 を外してください。また、なぜか太字にすると、embedded bitmap を含む TrueType font において、embedded bitmap を使用するサイズで文字を描画しようとすると落ちるようになりました。太字にしなければ落ちませんが、標準の SDL_ttf では embedded bitmap を正しく描画できないので、そもそもユーザの方がこういったフォントを使用しているとは考えられず実害はないと思います。
tokuhirom さんからのパッチを参考に、CD-ROM ドライブが複数ある場合に、使用するドライブを指定するオプション --cdnumber を追加しました。
tokuhirom さんにご指摘いただき、古賀さんが公開されている Debian Woody 用のパッケージへの apt line を更新しました。
tokuhirom さんからのパッチを取り入れ、キーボードショートカットにおいて、カーソルの上下移動を k と j キーでできるようにしました。vi のキーバインドです。
tattsuu さんからのバグ報告を元に、ogg vorbis ファイルを wave フォーマットに復号するときに、ヘッダの「サンプルあたりのビット数」の指定が間違っていたバグを修正しました。
ld, tal, humanorder コマンドにおいて、位置指定が不正な場合でも落ちない仕様に対応しました。
tmkkさんからの patch を取り入れ、MacOS X 上の SDL-1.2.8 環境において、SDL_WM_SetCaption関数に仕様変更があったため、引数に UTF-8 の文字列を渡すように修正しました。この環境に該当する方は、コンパイル時にリンカオプション -liconv を指定してください。
tmkkさんからの patch を取り入れ、libmad を使用して MP3 を再生する際に、時々ノイズが乗る問題を修正しました。MadFixedToUshort関数にクリップの処理を追加しました。
FORCE_1BYTE_CHAR 設定時に、文の最後の単語に対してワードラップが機能していなかったバグを修正しました。
効果描画時に、クリッピング処理を間違えていたため、画像の一部が効果中描画されないことがあるバグを修正しました。
ScriptParser::loadStr( FILE *fp, char **str ) でファイルから文字列を読み込む際に、途中で EOF になると無限ループに陥るバグを修正しました。対象ファイルが古いプログラムからの生成物で情報が足りない場合に起こるようですが、続行するようにしました。また、この関数内で毎回一時バッファを確保していたので、バッファをクラス変数に持たせるようにしました。
画像ファイルのタグ指定の読み込み部分を強化しました。アニメ指定が不正な場合に、その部分は読み飛ばしてファイル自体は読み込むようにしました。
sin, cos, tan コマンドを実装しました。
セーブファイル読み込み後に、非テキストモードで再開するように修正しました。読み込み後に、間違ってテキストウィンドウが表示されることがあるバグへの対処です。
chendoさんの patch を参考に、FORCE_1BYTE_CHAR 設定時に、ワードラップされるようにしました。つまり、単語の途中で行をまたぐ場合に、その単語の前で改行されるようになります。
コンパイル時にENABLE_1BYTE_CHARが指定され、かつスクリプト中で`(backquote)を使用し 1byte 文字列であることを指定している場合に、文字数が奇数個であると直後に半角スペースが挿入されることがある状態を修正しました。英語ノベルを作ろうという人以外には影響の無い修正のはずですが、文字描画処理をかなり変更したので、副作用でエンバグしている可能性もあります。なにか問題がありましたらご報告ください。
chendo さんからのバグ報告に基づき、セーブデータ読み込み時に wave ファイルが鳴りっぱなしになる場合があるバグを修正。
for ループ中の break から次の next までに現われるコマンドや変数を読み飛ばす際に、変数を評価していたバグを修正。例えば mov ?1[%1], 1 というコマンドを読み飛ばす際に、?1[%1]という変数を評価すると、本来このコマンドが実行されないことを想定して %1 に配列の範囲外の値が入っていた場合にエラーになります。オープニングロゴが重い某ゲームで落ちることがありました。
Hayashi さんより、Tru64 UNIX 5.1B(pk4), Compaq C++ V6.5-042 におけるコンパイルエラーと対処法を報告していただき、修正しました。