αβεさんの patch を取り入れ、 arc コマンドでアーカイブファイルが 見つからなくても処理を継続するように修正。
αβεさんの patch を取り入れ、reset 時に一時的にテキストが残ってし まうことがある不具合を修正。
αβεさんの patch を参考に、menusetwindow コマンドで、背景色が省略 している場合(デフォルト値: #999999)の対応を追加。
αβεさんの patch を取り入れ、Ctrl キーでのスキップ機能を追加。
αβεさんの patch を取り入れ、Shift+'Q'で強制的に end コマンドを実 行するように拡張。これは前から入れたかったのですが、簡単に押せるキーだ と間違って押してしまう可能性があり、どうしようかと思っていたところでし た。
そ〜かむさんの patch を参考に、MacOS X での MIDI 演奏に対応。現在の SDL on MacOSX では MIDI が演奏できないため、別途そ〜かむさんに作成して いただいた ONScripter ランチャのMIDI再生補助機能に対応するための修正を 行いました。これは SDL での不具合が解消されるまでの暫定的な処置になり ます。この ONScripter ランチャを含んだバイナリについては、ONScripter for Mac OS X(かつらさん)からダウンロードできるようになる予定です。
そ〜かむさんの patch に関連して、私が誤った修正をしてしまった箇所を 直しました。
効果番号15番が正常に描画されなくなっていたバグを修正。
alpha blending を書き直し高速化。
文字のクリッピングに関するバグを修正。
PDA および blt コマンド用の画像の解像度変更ルーチンを、3x3 平滑化フィ ルタ+ bi-linear 補間に変更。さらに、コンバータとルーチンを共通化。こ れでかなり綺麗に縮むようになりました。PDA でアーカイブを圧縮している人 は、今回のコンバータで圧縮し直すことをお勧めします。ただし、補間をして いる関係上、アルファ付き画像の縁が線として見えたり、特定色で抜いている カーソル画像の特定色境界が見えたりしますが、これはトレードオフなので我 慢してください。デスクトップマシンでも、-DPDA 付きでコンパイルすること で、効果を試すことができます。
s1100089さんからのバグ報告をもとに、goto コマンドの引数が文字列変数 ($で始まる)の場合、正しく扱えていなかったバグを修正。parser を変更し たときにエンバグしたものですね。
s1100089さんからのバグ報告をもとに、行のそれ以前に2byte文字(テキス ト)が無い状態で@が現れたときに改行していたバグを取る。
だいぶ遅くなりましたが、beroさんに報告していただいたバグを修正しま した。また、ONScripter for Dreamcastへのリンクを追加しました。
beroさんにDreamcastでの動作報告をいただきました。同時に報告していた だいたバグについては、近日中に修正したものをリリースいたします。
かつをのえぼしさんに、ONScripter のWindows バイナリ を公開していただきました。本来 Windows 上では製品付属のNScripterを 使用すればよいのですが、ONScripter とNScripterとではセーブファイルに互 換性が無いため、例えば外では PDA(SLシリーズのザウルス)、家では Windows でやりたいという方にはお勧めです。
ADPCM の wave ファイルを bgm, mp3 命令で演奏できるように修正。
soundpressplgin, spi に暫定対応。指定された拡張子を NBZ 復号するよ うにします。そもそも、spi や soundpressplgin によるデコード処理はアー カイブ側でやるべきではないのですが、ONScripter ではどのみち DLL を使用 できないため、NBZ を仮定して便宜上アーカイブ側で復号するようにしていま す。
コマンド後の@や\の取り扱いや、#(色指定)のみの行の取り扱いの不具合 を修正。
試しにとったhttp://galileo.spaceports.com/~ogapee/onscripter.html が、なぜかαβεさんに補足されている。ですが、ここはさしあたって更新はしません。現行のスペースが使えなくなったらバックアップで使用します。
ページ公開一周年
かつらさんに、ONScripter for Mac OS Xを公開していただきました。Mac OS X ユーザの方でONScripterのコ ンパイルに苦労されている方は是非お試し下さい。
かつらさんからのバグ報告を元に、20030128以降でセーブデータが正常に 作成されない不具合を修正。たいへん申し訳ないのですが、20030128 および 20030202 で作成したセーブデータは破棄して下さい。
遠藤さんからのバグ報告を元に、puttext後の改行に関する不具合を修正。
αβεさんの patch を取り入れ、getreg コマンドの不具合を修正。
mask 指定の不具合を修正。
アーカイブ圧縮時に、左上もしくは右上のピクセルを透過色に指定している画像の場合に、補間の影響によって正しく透過色が反映されない場合があったので、補間方法を従来の bi-linear に戻しました。
nsaconv, sarconv における画像解像度変更ルーチンにおいて、メモリを正 しく確保していないバグを修正。
A.Bさんからの報告を元に、(条件ファイル名)"TRUE文字列""FALSE文字列" 解釈におけるバグを修正。
αβεさんの patch を参考に、lsp コマンドで mask や string 指定を解 釈する際のバグを取る。プログラムが終了してしまう重大なバグなので、 20030126 を使っている人は必ず更新してください。
αβεさんの patch を取り入れ、ファイル直接読み込み(DirectReader)時 に ファイルが見付からなければ、ファイル名を大小文字区別せずに 検索し、 読み込むよう修正。(Win32 以外) (注: ディレクトリ名を区別しないようには なってません。 その辺にも対応するとしたら、 もっと別の(ちゃんとした)実 装方法を採る必要があります。)
αβεさんの patch を参考に、ファイル直接読み込み(DirectReader)時に ファイルが無圧縮の場合のファイルサイズを正しく扱えていなかったバグを修 正。
αβεさんの patch を参考に、nsa コマンドで arc.nsa が見付からない 場合に続行するように修正。
αβεさんの patch を取り入れ、reset 時に font の色を reset しない ように修正。
αβεさんの patch を参考に、readToken で、現状態がテキストではない 場合、'\'や'@'を区切りとして解釈するように変更。goto コマンド等で指定 ラベルの後に '\' 等の ゴミがあった場合に対する修正です。
数字の式( mov %0,1+(2*%4+(5-3 mod 2)) など)に対応。parser にかな り大掛かりな変更を加えました。エンバグしている可能性があります。
以下、terminology。
readStr 命令文引数の文字列・色、もしくはテキスト途中の文字列変数を読む
readInf 命令文引数の数字、もしくはテキスト途中の数字変数を読む
readToken 命令文コマンド、ラベル、テキスト文章およびその他を読む
nsaconv を圧縮後 640x480 モードに対応。-e オプションを組み合わせる ことにより、640x480→640x480 もしくは 800x600→640x480 の変換でよく縮 みます。
-e 付き 640x480 にしてギリギリ512MBのCFに収まるゲームをやってみまし た。swap を 64MB とって、なんとか正常に動きました。ただし、メモリー不 足というウィンドウが頻繁に出ます。無視できますが。free で見ると、used が瞬間最大風速 Mem: 29604, Swap: 57684, Total 87288 までいきます。この ゲームは特に同時使用画像量が多いと思うのですが、一般にVGA だとデータ量 も半端ではないので、使われていない画像データを一時的に解放する機構を実 装しないときついかも。画面は非常に綺麗なんですけどねぇ。
640x480→640x480 の場合は、onscripter-cf, onscripter-sdのアイコンを 使ってください。800x600→640x480の場合は、対応するアイコンを作ってない ので、コンソールから
onscripter --root /mnt/cf/nscr --force-button-shortcut --disable-rescale
とやってください。そのうちに、launcher を作ります。
free.prohosting.comで、一 回限りだという支払いをしないとアカウントを抹消される可能性が濃厚なので、 tripod.co.jpに移転しました。
藤田さんが、ONScripter の Free BSD Ports を公開してくださったので、 リンクを張りました。
sarconv, nsaconv の解像度変更を、2x2近傍バイリニア補間から4x4近傍重 み付きバイリニア補間に変更。ちょっとはきれいになった?
Zaurus で入力を受け付けなくなる現象ですが、Frame Buffer Driver のロッ クに関するSDL on Qtopiaの不具合が原因でした。SL-C700以外ではこの不具合 はでないようなので、VGAとQVGAの切り替えに関する部分と干渉していたので しょう。
以下、探求の軌跡。
まず、マルチスレッド関連で dead lock になっていることを疑う。ところ が、アプリケーション内のQt 関連の部分は single thread で動いており、こ れは入力を受け付けなくなっても動いているため、アプリケーション内部では dead lockしていないようです。つまり、ONScripterLabel::eventLoop の中で、
ONScripterLabel::eventLoop{
SDL_WaitEvent
SDL_PumpEvents
qApp->processEvents
qt_fbdpy->getEvent (Frame Buffer Driverからイベントを受け取る)
qwsProcessEvent (widgetへイベント発行)
widget->###event(widgetのイベント処理)
SDL_Private####(SDL のイベントをキューへ)
select (時間制限つきイベント待ち)
widget->event(widgetへイベント発行)
widget->###event(widgetのイベント処理)
SDL_Private####(SDL のイベントをキューへ)
SDL_PeepEvents(SDL イベントキューからイベントを取り出す)
ONScripter でのSDLイベントの処理
}
というループ自体はぐるぐる回っているが、Key event や Mouse event が QApplication に来なくなっているようです。
次に、某ゲームで、入力を受け付けなくなる確率95%以上(100%では
ないところがいやらしい……)の場所で、スクリプトとONScripter双方をちょっ
とずついじって問題の切り分けをすると、どうやらONScripterLabel::flush()を多
発すると入力を受け付けなくなる確率が高くなるということが判明。というか、
画面表示を全く行わないと、入力を受け付けなくなることはありません。
ONScripterLabel::flush を呼び出すと、
ONScripterLabel::flush()
SDL_UpdateRect()
QT_NormalUpdate()
SDL_QWin::repaintRect(const QRect& rect)
が呼び出され、SDL_QWin::repaintRect で Frame Buffer に直接描画されます。つまり、この時のFrame Bufferアクセスが何か 悪いことを引き起こしているらしい。
ここの部分では、QDirectPainterで直接Frame Bufferにアクセスしているの ですが、WebでQDirectPainterの使用例を探したところ、
という例が見つかりました。
ところが、SDL_QWin では、
しています。ここで試しに、end()を呼ばないようにし たところ、入力を受け付けなくなることはいっさい無くなりました。この end()は、QDirectPainterの親クラスであるQPainterのデコンストラクタでも 呼ばれる機会があり、それ以前に呼ばれていなければそこで呼び出されます。 つまり、~ QDirectPainter()で終了処理をする前に、親クラスのend()で親ク ラスの終了処理をしているため、~QDirectPainter()の終了処理がうまくいっ ていないようです。
また、公開されているqtopia-free-1.5.0を自前コンパイルし、 libqte.so.2.3.2, libqpe.so.1.5.0 を作り、ONScripterをこれとリンクさせ て走らせましたが、C700 ではプログラム自体は動くのですが、起動時に Protocol error 等の表示が出る上、そもそもアプリケーションがイベントを もらえないようでうまくいきません。というわけで、Qt/Eのソースを直接いじ るのは、C700用のソースが公開されるまでできそうにありません。
文字列スプライトで、一文字ずつflushしていたのを、文字列全体で一回 flushするように変更。
いつのまにかSL-5500でHomeが効くようになっていてびっくり。