αβεさんの patch を取り入れ、game 命令で intlimit 命令の効果を無効にしているバグを修正しました。
αβεさんの patch を取り入れ、erasetextwindow 命令の状態をセーブファイルに保存するように修正しました。
コードを clean up しました。
未来のバージョンのセーブファイルを読み込まないようにしました。
blackbrd さんからのバグ報告を元に、古いセーブファイルを読み込む際に gosub 命令の入れ子状態を保存する変数の一部を初期化していないバグをとりました。20020616〜20020621 のバージョンで発生するバグで、古いセーブファイルを読み込むと場合によっては内部状態が破壊されます。結構重大なバグでした。
バグフィクスのバグをとりました。
ONScripter のテストを兼ねて、Zaurus で某ゲームをエンディングまでプレイしました。QVGA で絵がつぶれていること以外特に問題はありませんが、解像度変更ルーチンは工夫するべきです。
systemcall reset 命令でカーソルの状態を保存する変数をクリアしていないバグをとりました。
以前使われていたスプライト番号に別のスプライトを読み込んだときに、変数が正しく初期化されないバグをとりました。
カーソル待ちのときだけではなくタイマー待ちのときにも立ち絵・スプライトのアニメーションが行われるようにしました。
中身が一行しかないラベルを越えて wait なしで次のラベルに移ったときに、次のラベルの一番目の行が読み込まれず前のラベルの行が使われるバグをとりました。ラベルをまたいだときに line_cache を無効にしていないバグでした。
allspresume, allsphide 命令が呼ばれたときに、その場で画面に効果が反映されないように挙動を変更しました。
ラベル情報のセーブに関するバグをとりました。
バグフィクスのバグをとりました。
昨日は嘘を書いてしまいました。define ラベルに入る前にすべての変数を初期化して gloval.sav があれば読み込み、start ラベルに移るときにローカル変数をすべて初期化する、というのがオリジナルの正しい挙動のようです。検証スクリプトでローカル変数を使っていたので勘違いしてしまいました。失礼しました。というわけで、同様の動作をするように修正しました。
textgosub 命令を使用しかつ skip しているときに、テキスト文中で @ の後に連続して命令が来ると命令がテキストとして解釈されるバグをとりました。
textgosub 命令を使用しかつ skip をしていないときに、@ の後で必ず改行していたバグをとりました。
savetime 命令を使ったときに、セーブ可能なデータ数がカスタマイズしない場合の上限(デフォルト 9)になっていたバグをとりました。
Marv さんのバグ報告に基づくαβεさんの patch を参考に、グローバル変数が格納されている global.sav ファイルを、start ラベルに移る直前の game 命令で読み込むようにしました。前は globalon 命令で読み込んでいました。
Marv さんより FreeBSD での動作報告をいただきました。コンパイルの際は Makefile.Linux を使ってください。
save/load/reset 時に確認画面を表示するようにしました。
blt 命令の拡大縮小に対応したつもりです。あまり検証していません。
--root を指定したときに MIDI が演奏されないバグをとりました。
ONScripter の開発をはじめて半年が経ちました。当初は、現実逃避の一環として、某ゲームを Linux 上で楽しむための2週間限定プロジェクトのつもりだったのですが、始めてみれば2週間ではとても終わらず、一通り動かすのに一月程かかってしまいました(過去の開発日誌参照)。
その後、他のゲームにも対応したい、折角つくったのだから他の人にも使ってもらいたい等々欲が出て、開発を続けるとともに公開に至りました。
しかし公開はしたもののつてが全くなかったので、千熊屋さんにお願いしてリンクを張ってもらいました。そうしたらその翌日くらいにさらしるさんのところで ONScripter が紹介されており、びっくりした覚えがあります。
その後、αβεさんをはじめ多くの方に協力していただき、当初は予想していなかった多くの環境・ゲームに対応することができました。特に、ソースレベルの patch を送ってもらえることは、開発・検証を分担できるという点で非常に助かっています。
アクセスログをとっていないため、どのくらいユーザがいるのかさっぱり分からないのですが、google でヒット数がじわじわ増えていくのをみるとそこそこユーザがいるのかなとも思い、それがやる気につながっています。バグ報告だけではなく「使ってます」報告もいただけるとうれしいです。
まだ当面は開発を続けていきますので、今後もよろしくお願いします。
btndown, isdown, getmousepos 命令を実装しました。
hachikun さんのバグ報告に基づくαβεさんの patch を参考に、monocro 命令の効果が反映されないバグをとりました。monocro 命令の効果は、
・次の画像描画・エフェクト系の命令
・次の改ページ
のいずれかが生じたときに反映されるのがオリジナルの挙動であり、文字描画だけでは反映されないようです。
800x600 の QVGA 化に対応しました。
SDL_SoftStretch を使っていたら何故か落ちるので、画面の解像度を変更するルーチンを自前で実装しました。
起動オプションの --root でゲームファイル(アーカイブ)のある場所を指定できるように変更しました。
αβεさんの patch を取り入れ、click 後に event_mode を解除し忘れているバグを修正しました。
αβεさんの patch を取り入れ、ボタン選択モードで rmode が 0 の場合に右クリックを正しく取り扱えないバグを取りました。
αβεさんの patch を取り入れ、即値形式の透過モード指定に一部対応しました。
起動オプションの --arc でゲームファイル(アーカイブ)のある場所を指定できるようにしました。以降のファイルアクセスはその場所が起点になります。
--arc 指定時にセーブファイルの一覧を正しく取得できないバグを取りました。
Zaurus (SL-5500) のために、MP3 デコードエンジンとして MAD も選択で きるようにしました。MPEG Audio Decoder Low-Level Demonstrationを参考に、SDL_RWops に対応し SMPEG のインターフェースに準拠した wrapper を書き、MP3_MAD を定義すれば MAD に差し換えて使われるようにしました。もちろん、Zaurus 以外のプラットホームでも使えます。その場合は Makefile.ARMLinux を参考に Makefile を書き換えてください。
実装上の制限として、周波数変換を行わないので MP3 の周波数とデバイスの周波数が異なると音がおかしくなります。
Koske さんからのバグ報告を参考に、変数編集モードか否かの状態を表す変数を初期化していなかったバグを取りました。
Zaurus (SL-5500) に対応しました。SDL を移植し、CD-Audio 演奏を除く ONScripter の全ての機能が動作します。ソースは全く共通です。素晴らしいです。セーブファイルも共通ですので、デスクトップでゲームをして続きを Zaurus でやるなんてこともできます。ただ、Zaurus (SL-5500) を買おうという粋狂な人は、現時点ではほとんどいないと思いますが。
setwindow 命令の window の縦横の幅を save?.dat に格納する際に、おかしな値を格納していたバグをとりました。
MP3 演奏開始時にチャタリングすることがあるバグを直しました。
αβεさんの patch を取り入れ systemcall rmenu 命令を追加しました。
なお、不具合修正 patch に関しては、こちらで不具合を検証した後に取り込むことにしています。すぐに不具合が確認(再現)できないものについては保留になりますので御了承下さい。
amsp 命令で透明度省略時に透明度を 0 としていたバグをとりました。
汎用のアニメーション機構を実装し、立ち絵・スプライト・カーソルのアニメーションを同時に実行できるようにしました。ただし、タイミングのとり方は要改善です。
アニメーション用に画像メモリを2倍余計に確保していた仕様をやめました。
コードを clean up しました。
lookbacksp 命令を実装しました。
erasetextwindow 命令の取り扱いを修正しました。おそらく正しい挙動ではないと思いますが、仕様がわからないのでなんとも言えません。
SPB を解凍するときに、確保した領域を越えて値を格納し、後で segmentation fault を誘発することがあったバグを取りました。
tablegoto, savetime 命令を実装しました。
αβεさんの patch を参考に、bar, barclear, prnum, prnumclear 命令を実装しました。
αβεさんの patch を一部取り入れ、sar アーカイブ中の spb ファイルを取り扱えるようにしました。ただし未検証です。
セーブファイルを読み込むときに、セーブファイルの無いスロットを選択するとハングアップするバグを取りました。
セーブファイルに Magic number と Version を導入しました。beta 版の間は、これで互換性を保ちつつセーブファイルの構成を変えていきます。もはやそんなに修正することはないと思いますが。
αβεさんの patch を取り入れ、font の縦幅と横幅が異なる場合に対処しました。
αβεさんの patch を取り入れ、表示文中の ASCII 英字大文字が小文字になるのを抑制するようにしました。
αβεさんの patch にあった repaint 命令を仮実装しました。ただ、仕様書やこちらで確認した範囲では、少なくともスプライトを消すのはおかしいと思うのですが。いまいち挙動がよく分からない命令なので、挙動がおかしい場合には再現するサンプルスクリプトをお願いします。
αβεさんの patch を一部取り入れ、mode_saya 命令を暫定実装しました。文字ウィンドウが消えているときにスプライトの 0 から 9 を消します。しかし、オリジナルで右クリックメニューでウィンドウを消す時以外にこの効果が現れる例が見つかりません。
画像読み込み時の m 指定に対応しました。
カーソル位置を絶対値で指定する場合に、絶対値であることを正しく扱っていなかったバグを取りました。
開発環境を SDL-1.2.4, SDL_image-1.2.2, SDL_mixer-1.2.3, SDL_ttf-2.0.5 に移行しました。
SDL_mixer に playmidi が取り込まれているようですが、当方では動作未確認です。
αβεさんの patch を参考に複合ボタンの挙動を変更しました。
sprite の透明度をサポートしました。
lsp 命令で sprite の透明度を正常に読み込めていなかったバグを取りました。
select 命令が複数行に渡るときに、行末にコメントがあると正しく解釈されないバグを取りました。
画面の特定領域を最描画する時に、文字スプライトにもクリッピングが適用されるようにしました。
menu_full, menu_window 命令を実装。また、ショートカットキー f で fullscreen mode と window mode を切り替えられます。ただし、Linux の X のみで動作を確認しています。Windows では変化なしでした。MacOS X では動くかもしれません。
久々に Windows で動作確認をしたら、MIDI 演奏で SDL が落ちるようになっていました。timidity.tar.gz を展開したら鳴るようになりました。おかしいです。以前はこれをやらなくても鳴ったと思ったのですが。MacOS X 上の MIDI 演奏で落ちる件もこれが関係するかもしれません。
quakex と quakey 命令で、描画速度が遅くとも最低1周期に4回は描画するようにしました。
quake 系の命令で、テキスト表示時にはテキストを表示したまま揺れるようにしました。
ボタンを選択した後で画面効果に行く場合に、押された表示のまま画面効果が始まるようにしました。
上記の修正の結果 quake 時に無限ループに陥ることがあるバグを取りました。
αβεさんの patch を取り入れ defaultspeed 命令を実装しました。
αβεさんの patch を取り入れ btndef 命令の読み込み画像を tag 対応にしました。
ONScripter の返すバージョンを 1.98 にしました。
resotreTextBuffer で連続する半角文字が正しく復元されないバグを直しました。
Linux の Frame Buffer Console で試したら問題なく動作しました。
富田さんの御指摘に基づき、drawString 内での半角スペースの取り扱いに関するバグを直しました。
αβεさんの patch を取り入れ、usewheel 命令を解釈するようにしました。ただし、マウスの wheel が使えるようになるわけではありません。
αβεさんの patch を取り入れ、「goto*label」や「csp-1」のように書かれているスクリプトに対処しました。
αβεさんの patch を取り入れ btntime, getbtntimer 命令を実装しました。
csel 系の命令の選択肢表示時のセーブに対応しました。
その他 bug fix、改善が多数あります。
富田さんの御指摘に基づき、画面効果を処理した後にスクリプトの行読み込みキャッシュを無効にしていなかったバグを修正しました。
ソースから assert を取り除きました。
コードを clean up しました。
画面描画まわりを大幅に改善しました。accumulation_surface の役割を、背景+立ち絵+スプライト+テキストウィンドウの状態保存としました。
csel 系の命令を修正しました。ただし、依然 csel 命令の選択肢が出ているときにセーブするとロード時に落ちます。
windowback 命令を実装しました。
allsphide, allspresume 命令を実装しました。
その他 bug fix が多数あります。
一行の中で、一文字毎もしくは一命令毎に readLine していたのを一回にしました。
textgosub 命令時に、\@ の直後の同じ行に命令文があると、テキスト文としてデコードされたものを命令文として解釈しようとして破綻するバグを直しました。ただし、同じ行で最初に変数を設定しその後テキストとして使用すると、設定が正確にテキストに反映されません。textgosub 命令を設定しないとスクリプトエラーになるようなこんなトリッキーなことをするゲームが存在しないことを願います。
αβεさんの patch を一部取り入れ、skipoff 命令を実装しました。patch のその他の部分については今回は保留とさせてください。
外部音源で MIDI を演奏する際に、曲の切り替え時やループ時に正常に鳴らないバグを取りました。富田さんの元の patch では大丈夫だったのですが、私が意図に気付かず別の理由で削っていました。
富田さんの patch を取り入れ、MIDI 演奏機能を追加しました。素晴らしいです。今まで BGM が鳴らなかったゲームで BGM が鳴るようになるとかなり感じが違います。
αβεさんの patch を取り入れ、csel, cselbtn, cselgoto, getcselnum, selectbtnwait 命令を実装しました。的確な patch をいつもありがとうございます。ただし、αβεさんも指摘されていますが、csel 命令の選択肢が出ているときにセーブすると次回ロード時に落ちます。他の場所でセーブすれば大丈夫です。原因は分かっていますが、どう対処したものか検討中です…。
テキスト文中に英数字が来た場合に、命令ではなくテキストとして解釈するように修正しました。