11月29日
αβεさんの patch を取り入れ、getcselstr, cellcheckspbtn, bgmvol 命令を追加しました。
αβεさんの patch を取り入れ、systemcall に automode を追加しました。いつもありがとうございます。
本家の変更に伴い、*customsel に飛んだ時点で自動的に skipoff されないようにしました。
αβεさんの patch を取り入れ、getcselstr, cellcheckspbtn, bgmvol 命令を追加しました。
αβεさんの patch を取り入れ、systemcall に automode を追加しました。いつもありがとうございます。
本家の変更に伴い、*customsel に飛んだ時点で自動的に skipoff されないようにしました。
一部のコンパイラでコンパイル時にエラーになったので、修正しました。
一部のコンパイラ(?)で、初期化のし忘れから OpenGL 環境で起動直後にセグメンテーションフォルトで落ちるバグを修正しました。
ついでに、非明示的なキャストなどで warning が出る箇所を修正しました。
20041025 であからさまな問題のなかった人は、アップデートする必要はありません。
pretextgosub, gettag, indent, linepage2, checkpage を実装しました。
checkpage, getlog, logsp, texthide, textshow を実装しました。
definereset を実装しました。
ルビの情報をセーブファイルに格納するように修正しました。また、回想画面でルビの情報を表示できるように修正しました。
変更点が多くバグが混入している可能性があるので、挙動が以前と違っている場合には遠慮無くご報告下さい。
いただいた「ひぐらしのなく頃に:BGM一部再生せず」を参考に、アーカイブではなくファイルシステムから直接ファイルを読み込む際に、ルートパスから2階層以下にファイルがある場合、大文字小文字の違いを吸収できず読み込めない場合があるバグを修正しました。
右クリックメニューのデフォルトのフォントサイズを変更しました。なにげに、最初のリリースから存在するバグでした。
20040925a で発生した、ENABLE_1BYTE_CHAR 指定時に1行の半角表示数が奇数の際に無限ループに陥るバグを修正しました。
blt で、引数が負の場合に対応しました。
右クリックメニュー表示の英語化に対応しました。英語化する場合は、コンパイル時に ENABLE_1BYTE_CHAR と FORCE_1BYTE_CHAR を両方指定してください。またこの場合、数字変数や prnum の表示も半角になります。ENABLE_1BYTE_CHAR 指定のみならば、私の知る限り既存のゲームの動作に影響はありませんが、FORCE_1BYTE_CHAR も指定すると表示に影響が出ます。
ENABLE_1BYTE_CHAR 有効時に、連続して _ で 1byte の clickstr 文字を回避する場合に、文字間にスペースが入ってしまうバグを修正しました。
for ループのネストの情報をセーブファイルに入れていなかったバグを修正しました。
セーブファイル中の配列を読み込む際に、キャストを間違えて値によっては正常に読み込めていなかったバグを修正しました。保存はうまくいっていたようです。とはいえ、保存したものを読み込んでまた保存していたら結局駄目だったわけですが。
テキストの表示スピードが0の時に、スキップ扱いで文字が描画されなかったバグを修正しました。
一部のコンパイラでエラーになったので、修正しました。
そ~かむさんからのバグ報告「MacOSX 上で、Ogg Vorbis 使用のゲームでは、声が砂あらしに」を元に、Mac などの big endian の機種で Ogg Vorbis 使用時に、正しく wav 形式に変換されず再生音がノイズのようになっていたバグを修正しました。このバグは Ogg Vorbis に対応した1年前から存在していたので、今まで ONScripteron Mac では Ogg Vorbis 再生不可でした。
スクリプトの読み込み手順を変更しました。まず、0.txt, 00.txt を探し、見つかった場合には、0.txt, 00.txt, 1.txt, 01.txt ... 99.txt の順に全探索します。ただし、?.txt がある場合には、0?.txt は見にいきません。0.txt, 00.txt が無い場合には、nscript.dat 等の暗号化されたファイルを探しにいきます。
某ゲームのロゴ画面の描画があまりに遅かったので、追ってみました。つまるところ、20040419 で drawbg2 等に対応したときに、描画の前処理のルーチンを共通化したため、スケーリングや回転を含まない通常描画の際に不必要なオーバーヘッドができていたのですが、それが予想以上に大きかったようです。通常描画の前処理のルーチンを分け、一概には言えませんが、描画に関しては2~3倍速くなりました。というか、元に戻りました。
lr_trap を実装しました。
セーブファイル中の BGM 演奏状態に関するバグを修正しました。
異なるプラットフォーム上で同時に遊ぶ方法について補足しました。
半角カタカナの表示に対応しました。
textgosub 使用時に、行末で改行していなかったバグを修正しました。
さっそくエンバグです。goto や gosub 命令で、文字変数を引数に取れなくなっていたバグを修正しました。
コンパイル時に ENABLE_1BYTE_CHAR を定義した場合の挙動を改善しました。clickstr, select などが正常に機能するようになりました。サンプルスクリプトを参照してください。ちなみに、ENABLE_1BYTE_CHAR は ` の取り扱いだけを変更します。私の知る限り既存のゲームでは半角の ` は使われていないので、ENABLE_1BYTE_CHAR を定義した状態でも既存のゲームは正常に実行できます。
select や btnwait 等で選択待ちの時に、アニメーションが有効になるように修正しました。
chvol を実装しました。ただし未検証です。
defsub, getparam を実装しました。
TTF_RenderGlyph_Blended で作られる SDL_Surface の pixel order と、ONScripter 内で使う SDL_Surface の pixel order が異なることが原因で、文字の色指定が正しく反映されないバグを修正しました。
効果0番の命令が来た時点で、テキストが描画されている場合に消すように修正しました。今までは、実際に効果が描画される時点でテキストを消すバグがありました。
何度目かの parser を含むコア部分の大幅書き換えを行いました。全体にかなり手を入れたため、エンバグしている可能性がありますので、今まで動いていたゲームの挙動がおかしくなった場合にはお知らせください。
コンパイル時に ENABLE_1BYTE_CHAR を指定することで、`(back quote) 以降行末もしくは別の ` までを、1byte 文字で記述されたテキスト文とみなして表示するようにします。半角スペースが表示として有効になりますが、テキスト内の色・時間指定、変数表示は無効になります。テキスト途中で色を変える場合は、/ で行を分けるなどしてください。要は、英語ノベル用のための拡張で、これは ONScripter 独自の拡張です。将来本家で ` に何か機能を割り振った場合には、削除もしくは別の文字に変更されます。
そ~かむさんからのバグ報告を元に、USE_OPENGL 使用時に PFNGLBLENDCOLOREXTPROC が定義されていない場合に、定義するように変更。なお、PFNGLBLENDCOLOREXTPROC ではなく、PFNGLBLENDCOLORPROC を使用することにしました。
そ~かむさんからのバグ報告によると、g++ 2.95.2 on MacOS X では、glGenTextures, glDeleteTextures の第2引数を、それぞれ (GLuint*), (const GLuint*) にキャストしないとコンパイルエラーになるそうです。g++ 2.95.4 on Linux では特にエラーにはならないのですが、キャストするように修正しました。
OpenGL 有効時のデモ用演出命令(drawclear, drawfill, drawbg, drawbg2, drawsp, drawsp2, drawtext, draw)を実装。ビデオメモリに載る限り何枚スプライトを重ねてもさくさく動きます。
GL_REPLACE の代わりに GL_MODULATE を使うことで、ピクセル単位のアルファブレンディングとスプライト単位のアルファブレンディングの両立を実現。drawsp, drawsp2, tal, amsp, msp などで、これまでアルファ値の再計算と画像の再読み込みをしていた部分が省略され高速化されました。
数式の最初が数値変数で、かつその前に - があった場合に、マイナスとして正しく扱われなかったバグを修正。
きさらさんより、20040608 版の Mac OS X 上での動作報告をいただきました。OpenGL を無効・有効にした時に、いずれも問題なく動作するそうです。一安心。
20040606 以降に、big endian のマシンで明らかにおかしくなりそうなコードがあったので、修正しました。ただし検証できないので未確認です。
USE_OPENGL 使用時に、glBlendColor が定義されていない場合に SDL_GL_GetProcAddress で関数へのポインタを取得するように変更。これで、大抵の環境で少なくともコンパイルは通るようになると思います。glBlendColor が実装されていない場合は、関数へのポインタの取得に失敗し、そこでプログラムは終了します。なお、Zaurus 版パッケージでは OpenGL は使用しないので、こちらの更新はありません。
OpenGL のために、画像読み込み時に、アルファ値を計算し SDL_Surfaceの各ピクセルに格納することにする。副次的効果として、アルファ付き画像(a指定)の必要メモリ量が半分になるので、全体の使用メモリ量も結構減っていると思います。また、内部用全画面画像バッファを2枚削除したので、使用メモリ量がさらに減っています。
ボタン(btn,cselbtn,spbtn,exbtn)や選択肢(select)等を他の表示要素と統一的に扱うようにし、コア部分を簡素化。開発初期の遺物の整理。
USE_OVERLAY や SCREEN_ROTATION 関連のコードを削除。前者は VRAM への画像転送の高速化テストのために、後者は以前のバージョンの Zaurus 用 SDLライブラリを使うために入れていたのですが、どちらも今後使う予定がないので削除しました。
コンパイル時に USE_OPENGL を指定することで、下記のような若干の制限はあるものの、OpgnGL を利用した高速描画に対応。ビデオカード上に画像をあらかじめ読み込んでおき、なるべく演算は全てビデオカード上で行うようにしています。大きな画像の切り替えを伴うため今までかなり反応が遅かった某ゲームのキャラ選択画面が超高速に。なお、endian 関係の処理を間違えている可能性があるので、どなたか big endian の CPU 上で動作確認をしていただけるとうれしいです。
効果18番などビデオカード内で演算できる目処が立っていない機能がいくつかあり、それらはメインメモリ上で合成した後に glTexSubImage2D で転送することにします。OpenGL を使わない場合とどの程度異なるのかを調べるために、640x480の画面で実際に計測してみたところ,私の環境では効果18番では 27:40 (fps)で素よりは速いがそれほど変わらないという結果になりました。これは画像生成と転送を合わせた時間です。ちなみに、ビデオカード内で演算ができる glBlendColor を使ったアルファブレンディング(効果10番)だと 52:702 (fps)で素に比べて爆速という結果になりました。
uniuni-z さんからのバグ報告を元に、PDA が定義されアーカイブ中の画像の解像度変更をしているときに、btn 命令で btndef で指定された画像が正しく設定されなかったバグを修正。20040417 以降でバグが発生していました。
セーブファイル読み込み後に、btndef で指定されたボタン画像ファイルを設定していなかったバグを修正。
loopbgm, loopbgmstop を実装。
配列変数をセーブファイルに書き込むように変更。また、配列の番号をいくつでも取れるように変更。これにともない、セーブファイルのバージョンを上げました。
640x480 以外の解像度の時に、システムメニューが画面中央にこないバグを修正。
exbtn で、第一引数で指定したスプライトの領域と制御文字列内のスプライトの領域が重なっている場合に、後者が正常に描画されないバグを一部修正。
spbtn, exbtn で、セルが1個しか無い場合にも非選択状態の画像を用意していたバグを修正。
再描画領域管理の効率化。
bgm, bgmonce, mp3, mp3loop, mp3save 命令で MIDI ファイルを演奏可能にする。
rmenu で end に対応。またこれまで、rmenu reset は"終了します。よろしいですか?"と表示していましたが、これは rmenu end の時の表示とし、rmenu reset の際は"リセットします。よろしいですか?"と表示するように変更しました。
drawclear, drawfill, drawbg, drawbg2, drawsp, drawsp2, drawtext, draw を実装。浮動小数点プロセッサが無い機種を考慮し、回転を含め画像変換は整数演算でやっています。ハードウェアアクセラレーションは使っていないので、速さには期待しないでください。
mask 画像等の読み込みの際に、directory 付きのファイル名を parse できるようにする。stralias や文字変数でも指定できるようにしようとして中断していましたが、そもそも本家では対応していないのであっさりあきらめました。
描画更新領域管理に関するバグを修正。実画面外を指定したときに、描画更新領域が不正になる場合がありました。
縦書きモード and/or ルビに関する修正多数。使用する分にはだいたい問題ないと思います。縦書きは単に横書き用の文字を縦に並べているだけで、句読点や括弧は個別に位置・回転を調整しています。括弧はもっと位置を本文側に詰めなければならないのですが、そのうちに対処します。縦書きをもっと自然に扱う方法はないものでしょうか。
shadedistance を実装。ただし、影が既に描画している文字にかぶると、上書きしてしまいます。本家ではクリック待ちになったときに上側を全て再描画しているようですが、そのうち対応します。
00.txt, 01.txt 等のスクリプトの読み込みに対応。
csp 命令で、スプライトを使用しないボタンをボタン定義から削除しないように修正(エンバグ)。
btn 命令で、ボタン画像ファイルの外側を指定したときに、ボタン画像がクリッピングされないバグを修正(エンバグ)。
spbtn, exbtn 命令でボタン定義をした後に、登録したスプライト番号に新たに画像を読み込むとそれが反映されないバグを修正(エンバグ)。
いつの間にやら相当バグが累積していました。これまでに、やむをえず内部仕様の大幅な変更を何度か繰り返しているため、昔は動いていたのに今になって正常に動かなくなっているものが他にも結構あると思います。気づいた方は、フィードバックをよろしくお願いします。
hiromizu さんからのバグ報告を元に、』が禁則文字として扱われていなかったバグを修正。
spbtn, exbtn でボタンを設定した後に csp でスプライト自体が消去された場合に、btnwait で不具合が生じる(落ちる)バグを修正。csp 時に、ボタンリストから削除するようにしました。
αβεさんからのパッチを取り入れ bgmstop 命令を追加しました。
αβεさんからのパッチを取り入れ ":/~;file" 形式(trans-mode指定が無い) 画像指定へ対応しました。
αβεさんからのパッチを参考に、nsa 命令後の arc 命令を無視するようにしました。(nsa 命令と arc 命令が併用できる仕様である場合、問題があるかもしれません)
αβεさんからのパッチを取り入れ、locate 命令を修正しました。X, Y が逆になっていました。今まで引数は先頭から評価されるものだと思っていました。
αβεさんからのパッチを取り入れ playMP3 で WMA ファイルを指定した場合にエラーにならないためセグメンテーションフォルトが発生する現象をアドホックに回避しました。 → とりあえず AVIWrapper を拡張して対応する方向で? → うーん、どうしたものか。
Copyright を更新しました。
btnwait 命令で、ボタン押下後常にボタン定義をクリアしていたバグを修正しました。戻値が1以上の時のみクリアするように修正しました。ボタン選択画面でうっかり右クリックするとボタンが選択できなくなることがありましたが、これが解決されています。