ONScripter 開発日誌

Since: Feb. 6, 2002
Last updated: Sep. 22, 2002

2002年7月~9月

9月22日

αβεさんの patch を取り入れ bgm, bgmonce 命令を実装しました。

αβεさんの patch を参考に、selnum 命令を実行した後に次の命令に正常に進めなかったバグをとりました。

selectgosub や selnum 命令の直後に、: で次の命令を続けられないバグをとりました。

αβεさんの patch を取り入れ、savegame 命令でセーブ位置が 1 token 前(savegame の引数)にずれていたバグを直しました。

なんと、MAD に周波数を半分にしてデコードするオプションがありました。MP3 は 44.1KHz で用意し、デバイスを 22.05 KHz で開いてこのオプションを使えば、音切れが解消される可能性大です。というわけで、Zaurus 環境では 22.05KHz をデフォルトとします。パッケージを更新しました。なお、bitrate は 64Kbps 等に落としても構いません。

9月19日

SL-A300 で MP3 が途切れるという症状が二人以上で出ているようなので、どうやら arm-linux-gcc で libmad を作る際に、StrongARM (SL-5500) には最適化されているが、XScale (SL-A300)には最適化されていないコードを吐いているようです。効果があるのかどうか分かりませんが、libmad を作る際により一層の最適化をするようにしてコンパイルしました。ザウルスのパッケージのみ更新しました。

Googleで onscripter を検索したときのヒット数が100を越えました。

9月15日

αβεさんの patch を取り入れ、SDL_DEBUG=1 でテストしているときにエラーメッセージを出さないように、SDL_BlitSurface の前に、ButtonLink::no_selected_surface の NULL チェックをいれました。

αβεさんの patch を参考に、"csp-1" や "gosub*label" のようなスクリプトを解釈できるように修正しました。'-' は、私の理解している限りでは token の先頭にしか出てこないため、このように処理します。

1byte 文字表示に関するバグを修正しました。

NSA 用のアーカイブコンバータで、-e オプションで bmp 及び wav ファイルを nbz 圧縮するように改良しました。これを行うと、アーカイブの圧縮の種類を示すフラグに ONScripter 独自の値を設定します。この独自拡張については、本家が将来アーカイブの仕様を拡張したときにバッティングする可能性がありますが、その時はそれを回避するようにコンバータを修正し、再コンバートすることで解決できます。その場合でも、セーブファイル等には一切影響はありません。そのため、Zaurus で使用される方はこのオプションを付けてコンバートすることをお勧めします。wav を bzip2 で圧縮するので、wav を多用するゲームではかなりアーカイバが小さくなります。デメリットとしては、bzip2 の復号を行うため若干遅くなりますが、気がつかない程度です。

アーカイブコンバータで、変換する必要のないファイルを無意味に展開していたのを抑制しました。

アーカイブコンバータで、解像度をバイリニア変換で変更するように修正しました。800x600 を縮めるときにましになります。

9月14日

SMPEG では演奏できるが MAD では演奏できない MP3 ファイルがありましたが、MP3 の frame header の資料と MAD のソースを付き合わせ原因を究明しました。Emphasis が 2(resereved) に設定されていると、MAD は無効な frame として弾いてしまうのが原因でした。0(none) として処理を続行するように変更することで直りました。更新はザウルスのパッケージのみです。これで、BGM が MP3、音声 が WAV なゲームでも音切れなく楽しめます(SL-5500 で確認)。

9月12日

tateyoko 命令を実装しました。

getversion 命令の戻値を 200 に変更しました。

コードを clean up しました。

Intel(R) C++ Compiler 6.0 on Linux でコンパイルし、正常動作することを確認しました。

SMPEG では演奏できるが MAD では演奏できない MP3 ファイルがあります。どうしたものでしょうか。

9月11日

アーカイブコンバート関連で色々不具合があったので修正しました。

それに関連して、SPB 圧縮の画像データを解凍するときに、PPM ではなく本来の BMP で戻すようにしました。

9月10日

Zaurus の 512M の CF に納まらないゲームをするために、archive 中の jpeg と bmp の大きさを半分にするコンバータを書きました。数種類のゲームで確認しています。コンバータの使い方は、アーカイブ圧縮についてを参照してください。

PDA を設定してコンパイルし、コンバート済アーカイブを使用する場合のために、--disable-rescale オプションを追加しました。

しかし、アーカイブの中で音声ファイルの比重の高いゲームは厳しいです……。

9月9日

kni さんから SL-A300 での動作報告をいただきました。以前のパッケージでは、画面表示が90度回転するという不具合があり、それに対処する修正を行いこちらは正常に動いているようです。昔 SL-5500 を買う直前に導入し、SL-5500 では要らないことが分かって速攻でリリース版から消してしまった「表示・入力系90度回転機能」をほぼそのまま復活させました。

9月6日

effectcut 命令を実装しました。

αβεさんの patch を取り入れ、getcursor, getenter, useescspc 命令を実装しました。

getenter と useescspc 命令を無効にする --force-button-shortcut オプションを追加しました。ONScripter では、マウスクリックを return, space, esc キーに割り付けているため、getenter と useescspc 命令がスクリプトで設定してある場合、全ての操作をキーボードのみから行えなくなる可能性があります。私のように普段極力マウスを使いたくない(キーボードとマウスを行ったり来たりしたくない)人は、このオプションを使ってください。ただし、そんなことはまずないと思いますが、スクリプト側で前記のキーをゲーム進行上必須の特殊用途に割り付けている場合は、このオプションを外してください。

αβεさんの patch を参考に、ラベルにジャンプした直後に文字列変数のテキスト表示があると解釈に失敗するバグを修正しました。

setwindow 命令でフォントサイズの変更が反映されないことがあるバグをとりました。

exbtn 命令でスプライトが無効の時に残りの引数を処理していなかったバグをとりました。

ONScripter が途中で落ちたときにも save??.dat と global.sav その他との同期がとれるように、save??.dat を保存するときに毎回 global.sav その他を保存するようにしました。

コードを clean up しました。

8月24日

mayfifth さんからのバグ報告を元に、テキスト選択画面でセーブをすると落ちるバグをとりました。最近該当するゲームをしていなかったので、全然気づきませんでした。

yamagu さんからのバグ報告を元に、スクリプト中で命令もしくはその引数が後続のテキストとスペース無しで連続している場合に、後続のテキストが前者の一部として解釈されるバグをとりました。

lsp, lsph 命令のサイズ指定付き文字列が正常に解釈されていないバグをとりました。

gettext 命令を実装しました。

gettab, getfunction 命令を実装しました。

btntime2 命令をとりあえず btntime 命令と同じ挙動をとるように実装しました。要修正です。

20020824a

αβεさんの patch を取り入れ、TTF_RenderGlyph_Blended() の返り値が NULL の場合に落ちるバグに対処しました。

パーサを修正し、「bg black,1mov $1,"あいうえお"」「bg black,1あいうえお」に対処しました。

8月21日

【LINUX】ザウルス国内はいつ?【SL5000】によると、SL-A300 でも SL-5500 と同様 swap が使えるようです。

昨日ザウルスで swap 16MB にして某ゲームを遊んでいたところ、1時間位して途中で凍りました。ゲームによると思いますが、32MB くらい取っておいたほうが安心かもしれません。

うんすいさんに Solaris9 on SPARC での動作報告をいただきました。

8月19日

Zaurus (SL-5500) で swap memory を作ることでメモリ不足が解消されることを発見しました。これで Qtopia 上で固まることがなくなりました。というわけで、価値のなくなった FB console 用のパッケージは公開を中止しました。しかし、SL-A300に関するFAQのページには、
Q. SDカードなど外部メモリをSWAP領域として利用することは可能でしょうか?
A. SWAPはサポートしていません。
とあるため、SL-A300 では駄目なのかもしれません。

Zaurus で便利なように、ショートカットキーとして、よく使う s と o キーを左矢印と右矢印に割り付けました。

フォントの取り扱いを若干変更しました。

8月18日

SMPEG では、一部の MP3 ファイルを演奏できず、その場合演奏開始時にハングします。48KHz 系が駄目?MAD なら問題ないので、SMPEG はやめて MAD を標準採用するべきでしょうか。しかし、(あまりやる気はありませんが)将来的には SMPEG を使って MPEG の動画再生も実装したいところなので、どうしたものでしょうか。

FB console on SL-5500 で動かすと、Qtopia 環境で動かすのに比べて必要メモリ量が 10MB も少なくて済みます。

8月17日

Zaurus (SL-5500) 用の FB コンソールで動作するバイナリパッケージを公開しました。こちらは問題なく動作しますが、Zaurus 起動時にコンソールに降りる必要があるため、おそらくキーボードのない SL-A300 では動かすことができないと思います。

8月16日

SL-5500 で Qtopia 上から実行しようと試行錯誤していますが、途中までは実行できるものの、メモリが少ない旨の警告ウィンドウが出ようとすると ONScripter がハングしてしまいます。使用メモリ量が大きくなるとダメです。-qws オプションを付けて Qtopia と並列に実行すれば、Qtopia のメモリ不足の警告ウィンドウが出ても無視して続行できるので、メモリは足りているが警告ウィンドウとデッドロック状態になってハングしているようです。しかしちょっと対策を思いつきません。ハングしたらリモートログインして kill するしかないので現状では実用になりません。ちなみに、Qtopia を立ち上げない状態で console から立ち上げれば問題なく動作します。

とりあえず、ONScripter の必要メモリを少なくする努力を始めます。

無駄な select_surface を廃止しました。代わりに、ButtonLink にもたせるようにしました。

SL-5500 用で、無意味に smpeg にリンクしていたのでやめ、無駄を省いて SDL_mixer を作り直しました。

Zaurus (SL-5500, SL-A300) の Qtopia 環境で動作するバイナリパッケージを公開しました。ただし、上記の通り現状ではメモリ不足ですぐハングするので、試験的なリリースだと思ってください。SDL on Zaurus (SL-5500) のページからダウンロードできます。ただし、SL-A300 では未検証なので、試してみた方は動作報告をお願いします。

8月2日

vortex さんからのバグ報告を元に、puttext 命令の引数を再 parse すると表示がおかしくなることがあるバグや、puttext 命令が改行扱いにならないバグを修正しました。しかし、puttext 命令まわりはまだまだおかしいです。取り扱い方を根本的に変えないとだめかもしれません。

コードを clean up しました。

7月28日

blackbrd さんからのバグ報告を元に、セーブファイルに gosub 命令の入れ子構造を正しく格納していなかったバグをとりました。

kidokuskip, kidokumode 命令を実装しました。

7月27日

20020723 の大幅改良の際に、予想以上にエンバグしていました。experimental と注意書を書いておくべきでした。ですが、そろそろ安定してきたと思います。

vortex さんからのバグ報告を元に、selgosub 命令が正しく機能していないバグを修正しました。

readToken を強化しました。行末で " が浮いている(閉じられていない)行儀の悪い状態に対応しました。

mp3 "" に対応しました。

select 命令の2行目以降で、文字変数をテキスト文として解釈するバグを直しました。

空行をテキスト行として扱わないようにしました。

7月26日

αβεさんの patch を取り入れ、autoclick 命令時にカーソルが消えないバグを修正しました。

autoclick 命令の引数が0より大きい時に、クリック待ちの時のクリックが無効になるようにしました。

7月25日

αβεさんの patch を参考に sentence_font 再初期化時の修正ミスを直しました。

Vusual C++ 付属のコンパイラで通るように若干修正しました。

puttext で特殊文字(例えば _,/,@,\ など)を処理できるようにしました。

textgosub 命令時に、同じ行で最初に変数を設定しその後テキストとして使用すると、設定がテキストに正確に反映されないバグをとりました。20020723 の段階で取れていました。(例:mov $1,"だめ"@ mov $1,"よい" は$1)

readToken がまだまだ練れていないため、使用頻度の少ない構文パターンでは色々挙動が異なります。

20020725a

puttext 命令で上記特殊文字を使用している際にデータを保存した場合に、正しく保存と復元が行えるようにしました。

20020725b

セーブファイル読み込み後の挙動が正常でない部分を調整しました。

7月24日

マスク画像読み込みに関するバグ修正しました。

単語切り出しのバグ修正しました。

7月23日

αβεさんの patch を取り入れ、立ち絵が消えるタイミングで透過度を 255 に戻す処理を追加しました。

αβεさんの patch を取り入れ nsadir 命令を実装しました。

αβεさんの patch を取り入れ ofscpy 命令を実装しました。

αβεさんの patch を取り入れ、文字列スプライト定義時に文字サイズを反映するように修正しました。

αβεさんの patch を参考に、reset 命令時に sentence_font を初期化するようにしました。

αβεさんの patch を取り入れ、bar, prnum 命令の表示位置に関する修正しました。

コアを大幅に書き直しました。いままでと比較して、ゲームをする上での見掛けの違いはありません。ただ、未実装部分をオリジナルに添った形で実装しやすいように、スクリプト読み込みと単語切り出し(parse)部分の処理を変え、さらに独立させています。大きな違いは、スクリプト中で 2byte ある改行コードは 1byte として読みこむ・行単位ではなく単語単位で読み込み及び解釈を行う・改行を単語として解釈する・無駄な再読み込を減らす・冗長部分を削る、といった地味な内容ですが、これで懸案の textgosub 命令時の同じ行の変数設定が表示に反映されない問題と, kidokuskip, puttext 命令の実装等は解決できそうです。

kidokuskip 命令を実装中です。

20020723a

getreg 命令の再実装ミスを修正しました。他にも色々エンバグしているかもしれません。

単語切り出しのバグをとりました。

ちなみに本 beta 版以降で、以前の古いセーブファイルを読み込んだときに、運が悪いと若干位置ずれすることがあります。これは、保存した場所が表示文の行でかつその中で変数を使用している場合に起こります。この部分の互換性を厳密に保つのは大変なので、もうしわけないのですがそうなったら運が悪かった思ってあきらめてください。ゲームの進行に影響することはまずないと思います。本 beta 版以降で保存したものについては大丈夫です。

7月21日

αβεさんの patch を取り入れ、tal 命令を再実装しました。20020712 では検証を怠ったため、いただいた patch を改悪して取り込んでしまいました。失礼しました。

スクリプトの読み込み&解釈部分を大幅に書き直し中です。進捗8割くらいです。ようやく、某ゲームは一通り遊べそうです。ただし、save と load はまだです。というか、セーブファイルの内容の変更に伴い互換性を持たせる部分が手付かずです。

7月20日

スクリプトの読み込み&解釈部分を大幅に書き直し中です。進捗5割くらいです。ようやく、某ゲームのタイトル画面まではいくようになりました。

7月12日

島本さんからのバグ報告を元に、nsa アーカイブ中に nbz 圧縮されたファイルがあったときに復号されないバグをとりました。島本さん、いろいろと情報提供ありがとうございました。

αβεさんの patch を参考に tal 命令を実装しました。仕様書(msp の項)によると、tal 命令は内部状態を変更するだけで、その場では効果は現れないようです。ただし未検証です。

αβεさんの patch を取り入れ setwindow2 命令を実装しました。ただし未検証です。

αβεさんの patch を参考に savefileexit 命令を実装しました。ただし未検証です。

最近はあまり検証せずブィルターと化しているので、おかしなところはどんどん突っ込んでください。

7月7日

αβεさんの patch を取り入れ (not)if 命令の条件式を文字列比較に対応しました。

αβεさんの patch を取り入れ reset 命令にスプライト消去処理を追加しました。

αβεさんの patch を参考に、文字スプライト指定形式の新形式 ":s/<幅>,<高さ>,<間隔>;#<色1>...<文字列>" に対応しました。

αβεさんの patch を取り入れ、dwave, dwaveloop 命令時に無条件で DEFAULT_WAVE_CHANNEL(ch=1) の音を停止していたバグを修正しました。

αβεさんの patch を取り入れ、filelog 命令が sar, nsa 命令よりも前にあると前回の filelog を維持できなかったバグを修正しました。

7月6日

αβεさんの patch を取り入れ nega 命令を実装しました。

αβεさんの patch を取り入れ、セーブファイルのバージョン番号の計算法が誤っていたバグをとりました。おおぼけです。

色が大文字の A から F を使って指定されていた場合に正しく解釈されないバグをとりました。

文字描画のクリッピングに関するバグをとりました。文字が表示されないことがありました。

exbtn 命令で cell の番号を指定したときに表示されないことがあるバグをとりました。

repaint 命令、もしくは mouse がスプライトボタンの上を移動したときに、テキストモードでなくともテキストウィンドウを描画していたバグをとりました。ひとかたや某ゲームの音楽鑑賞画面で挙動がおかしかったのが直っています。

7月2日

αβεさんの patch を取り入れ clickvoice, selectvoice, menuselectvoice 命令を実装しました。αβεさんも私もオリジナルの実装を確認していないため、本来のものと動作が異なるかもしれません。menuselectvoice 命令の 5 番目の音(できない操作をしたときの警告)は、未だ用法が不明なので保留となっています。

コードを clean up しました。