過去の開発日誌

2004年

11月29日

αβεさんの patch を取り入れ、getcselstr, cellcheckspbtn, bgmvol 命令を追加しました。

αβεさんの patch を取り入れ、systemcall に automode を追加しまし た。いつもありがとうございます。

本家の変更に伴い、*customsel に飛んだ時点で自動的に skipoff されな いようにしました。

11月03日

一部のコンパイラでコンパイル時にエラーになったので、修正しました。

一部のコンパイラ(?)で、初期化のし忘れから OpenGL 環境で起動直後 にセグメンテーションフォルトで落ちるバグを修正しました。

ついでに、非明示的なキャストなどで warning が出る箇所を修正しました。

20041025 であからさまな問題のなかった人は、アップデートする必要はあ りません。

10月25日

pretextgosub, gettag, indent, linepage2, checkpage を実装しました。

checkpage, getlog, logsp, texthide, textshow を実装しました。

definereset を実装しました。

ルビの情報をセーブファイルに格納するように修正しました。また、回想画 面でルビの情報を表示できるように修正しました。

変更点が多くバグが混入している可能性があるので、挙動が以前と違って いる場合には遠慮無くご報告下さい。

9月27日

いただいた「 ひぐらしのなく頃に:BGM一部再生せず」を参考に、アーカイブではなく ファイルシステムから直接ファイルを読み込む際に、ルートパスから2階層以 下にファイルがある場合、大文字小文字の違いを吸収できず読み込めない場合 があるバグを修正しました。

右クリックメニューのデフォルトのフォントサイズを変更しました。なに げに、最初のリリースから存在するバグでした。

20040925a で発生した、ENABLE_1BYTE_CHAR 指定時に1行の半角表示数が 奇数の際に無限ループに陥るバグを修正しました。

9月25日

blt で、引数が負の場合に対応しました。

右クリックメニュー表示の英語化に対応しました。英語化する場合は、コ ンパイル時に ENABLE_1BYTE_CHAR と FORCE_1BYTE_CHAR を両方指定してくだ さい。またこの場合、数字変数や prnum の表示も半角になります。 ENABLE_1BYTE_CHAR 指定のみならば、私の知る限り既存のゲームの動作に影響 はありませんが、FORCE_1BYTE_CHAR も指定すると表示に影響が出ます。

20040925a

ENABLE_1BYTE_CHAR 有効時に、連続して _ で 1byte の clickstr 文字を 回避する場合に、文字間にスペースが入ってしまうバグを修正しました。

9月18日

for ループのネストの情報をセーブファイルに入れていなかったバグを修 正しました。

セーブファイル中の配列を読み込む際に、キャストを間違えて値によって は正常に読み込めていなかったバグを修正しました。保存はうまくいっていた ようです。とはいえ、保存したものを読み込んでまた保存していたら結局駄目 だったわけですが。

テキストの表示スピードが0の時に、スキップ扱いで文字が描画されなかっ たバグを修正しました。

20040918a

一部のコンパイラでエラーになったので、修正しました。

9月15日

そ〜かむさんからのバグ報告「 MacOSX 上で、Ogg Vorbis使用のゲームでは、声が砂あらしに」を元に、 Mac などの big endian の機種で Ogg Vorbis 使用時に、正しく wav 形式に 変換されず再生音がノイズのようになっていたバグを修正しました。このバグ は Ogg Vorbis に対応した1年前から存在していたので、今まで ONScripter on 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 等の暗号化されたファイルを探 しにいきます。

9月13日

某ゲームのロゴ画面の描画があまりに遅かったので、追ってみました。つ まるところ、20040419 で drawbg2 等に対応したときに、描画の前処理のルー チンを共通化したため、スケーリングや回転を含まない通常描画の際に不必要 なオーバーヘッドができていたのですが、それが予想以上に大きかったようで す。通常描画の前処理のルーチンを分け、一概には言えませんが、描画に関し ては2〜3倍速くなりました。というか、元に戻りました。

9月11日

lr_trap を実装しました。

セーブファイル中の BGM 演奏状態に関するバグを修正しました。

異なるプラットフォーム上で同時に遊ぶ 方法について補足しました。

9月10日

半角カタカナの表示に対応しました。

textgosub 使用時に、行末で改行していなかったバグを修正しました。

9月9日

さっそくエンバグです。goto や gosub 命令で、文字変数を引数に取 れなくなっていたバグを修正しました。

コンパイル時に ENABLE_1BYTE_CHAR を定義した場合の挙動を改善しました。 clickstr, select などが正常に機能するようになりました。サンプルスクリプトを参照してく ださい。ちなみに、ENABLE_1BYTE_CHAR は ` の取り扱いだけを変更します。 私の知る限り既存のゲームでは半角の ` は使われていないので、 ENABLE_1BYTE_CHAR を定義した状態でも既存のゲームは正常に実行できます。

9月2日

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 独自の拡張です。将来本家で ` に何か機能を割り 振った場合には、削除もしくは別の文字に変更されます。

6月14日

そ〜かむさんからのバグ報告を元に、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 などで、これまでアルファ値の再計算と画 像の再読み込みをしていた部分が省略され高速化されました。

数式の最初が数値変数で、かつその前に - があった場合に、マイナスとし て正しく扱われなかったバグを修正。

6月9日

きさらさんより、20040608 版の Mac OS X 上での動作報告をいただきまし た。OpenGL を無効・有効にした時に、いずれも問題なく動作するそうです。 一安心。

6月8日

20040606 以降に、big endian のマシンで明らかにおかしくなりそうなコー ドがあったので、修正しました。ただし検証できないので未確認です。

6月7日

USE_OPENGL 使用時に、glBlendColor が定義されていない場合に SDL_GL_GetProcAddress で関数へのポインタを取得するように変更。これで、 大抵の環境で少なくともコンパイルは通るようになると思います。 glBlendColor が実装されていない場合は、関数へのポインタの取得に失敗し、 そこでプログラムは終了します。なお、Zaurus 版パッケージでは OpenGL は 使用しないので、こちらの更新はありません。

6月6日

OpenGL のために、画像読み込み時に、アルファ値を計算し SDL_Surface の各ピクセルに格納することにする。副次的効果として、アルファ付き画像(a 指定)の必要メモリ量が半分になるので、全体の使用メモリ量も結構減ってい ると思います。また、内部用全画面画像バッファを2枚削除したので、使用メ モリ量がさらに減っています。

ボタン(btn,cselbtn,spbtn,exbtn)や選択肢(select)等を他の表示要素と統 一的に扱うようにし、コア部分を簡素化。開発初期の遺物の整理。

USE_OVERLAY や SCREEN_ROTATION 関連のコードを削除。前者は VRAM への 画像転送の高速化テストのために、後者は以前のバージョンの Zaurus 用 SDL ライブラリを使うために入れていたのですが、どちらも今後使う予定がないの で削除しました。

コンパイル時に USE_OPENGL を指定することで、下記のような若干の制限 はあるものの、OpgnGL を利用した高速描画に対応。ビデオカード上に画像を あらかじめ読み込んでおき、なるべく演算は全てビデオカード上で行うように しています。大きな画像の切り替えを伴うため今までかなり反応が遅かった某 ゲームのキャラ選択画面が超高速に。なお、endian 関係の処理を間違えてい る可能性があるので、どなたか big endian の CPU 上で動作確認をしていた だけるとうれしいです。

  • 実装されている OpenGL のバージョンは、一般にビデオカードのドラ イバによって異なり、古いバージョンしかサポートされていない場合、コン パイルできない・挙動がおかしいなどの問題が出ると思われます。今回は OpenGL 1.4 の標準命令・定数(glBlendColor, GL_CONSTANT_ALPHA)を使用し ていますので、そのままコンパイルするには OpenGL 1.4 以上の環境が必要 です。ただし、古いバージョンでもオプション(別名)でサポートしている場 合があるので、フィードバックしてくだされば対応出来るかもしれません。
  • 画像サイズがハードに依存する最大テクスチャサイズを越えると、そ の画像が描画されません。セル画像を横に並べた横長の画像を使うアニメーショ ンなどでたまに問題になります。
  • drawsp などデモ用表示命令未実装。近々対応します。というか、これ らの命令のために OpenGL を導入したようなものです。
  • monocro, nega が未実装。良い実装方法が思い浮かばず、どうしたものか。

効果18番などビデオカード内で演算できる目処が立っていない機能がい くつかあり、それらはメインメモリ上で合成した後に glTexSubImage2D で転 送することにします。OpenGL を使わない場合とどの程度異なるのかを調べる ために、640x480の画面で実際に計測してみたところ,私の環境では効果18 番では 27:40 (fps)で素よりは速いがそれほど変わらないという結果になりま した。これは画像生成と転送を合わせた時間です。ちなみに、ビデオカード内 で演算ができる glBlendColor を使ったアルファブレンディング(効果10番) だと 52:702 (fps)で素に比べて爆速という結果になりました。

5月16日

uniuni-z さんからのバグ報告を元に、PDA が定義されアーカイブ中の画像 の解像度変更をしているときに、btn 命令で btndef で指定された画像が 正しく設定されなかったバグを修正。20040417 以降でバグが発生していまし た。

5月3日

セーブファイル読み込み後に、btndef で指定されたボタン画像ファイルを設 定していなかったバグを修正。

loopbgm, loopbgmstop を実装。

配列変数をセーブファイルに書き込むように変更。また、配列の番号をいく つでも取れるように変更。これにともない、セーブファイルのバージョンを上 げました。

640x480 以外の解像度の時に、システムメニューが画面中央にこないバグ を修正。

exbtn で、第一引数で指定したスプライトの領域と制御文字列内のスプラ イトの領域が重なっている場合に、後者が正常に描画されないバグを一部修正。

spbtn, exbtn で、セルが1個しか無い場合にも非選択状態の画像を用意し ていたバグを修正。

再描画領域管理の効率化。

bgm, bgmonce, mp3, mp3loop, mp3save 命令で MIDI ファイルを演奏 可能にする。

rmenu で end に対応。またこれまで、rmenu reset は"終了します。 よろしいですか?"と表示していましたが、これは rmenu end の時の表 示とし、rmenu reset の際は"リセットします。よろしいですか?" と表示するように変更しました。

4月19日

drawclear, drawfill, drawbg, drawbg2, drawsp, drawsp2, drawtext, draw を実装。浮動小数点プロセッサが無い機種を考慮し、回転を含め画像変 換は整数演算でやっています。ハードウェアアクセラレーションは使っていな いので、速さには期待しないでください。

mask 画像等の読み込みの際に、directory 付きのファイル名を parse で きるようにする。stralias や文字変数でも指定できるようにしようとして中 断していましたが、そもそも本家では対応していないのであっさりあきらめま した。

描画更新領域管理に関するバグを修正。実画面外を指定したときに、描画 更新領域が不正になる場合がありました。

4月17日

縦書きモード and/or ルビに関する修正多数。使用する分にはだいたい問 題ないと思います。縦書きは単に横書き用の文字を縦に並べているだけで、句 読点や括弧は個別に位置・回転を調整しています。括弧はもっと位置を本文側 に詰めなければならないのですが、そのうちに対処します。縦書きをもっと自 然に扱う方法はないものでしょうか。

shadedistance を実装。ただし、影が既に描画している文字にかぶると、 上書きしてしまいます。本家ではクリック待ちになったときに上側を全て再描 画しているようですが、そのうち対応します。

00.txt, 01.txt 等のスクリプトの読み込みに対応。

csp 命令で、スプライトを使用しないボタンをボタン定義から削除し ないように修正(エンバグ)。

btn 命令で、ボタン画像ファイルの外側を指定したときに、ボタン画 像がクリッピングされないバグを修正(エンバグ)。

spbtn, exbtn 命令でボタン定義をした後に、登録したスプライト番号 に新たに画像を読み込むとそれが反映されないバグを修正(エンバグ)。

いつの間にやら相当バグが累積していました。これまでに、やむをえず内 部仕様の大幅な変更を何度か繰り返しているため、昔は動いていたのに今になっ て正常に動かなくなっているものが他にも結構あると思います。気づいた方は、 フィードバックをよろしくお願いします。

4月2日

hiromizu さんからのバグ報告を元に、』が禁則文字として扱われていなかっ たバグを修正。

2月25日

spbtn, exbtn でボタンを設定した後に csp でスプライト自体が消去され た場合に、btnwait で不具合が生じる(落ちる)バグを修正。csp 時に、ボタ ンリストから削除するようにしました。

1月19日

αβεさんからのパッチを取り入れ bgmstop 命令を追加しました。

αβεさんからのパッチを取り入れ ":/〜;file" 形式(trans-mode指定が無 い) 画像指定へ対応しました。

αβεさんからのパッチを参考に、nsa 命令後の arc 命令を無視するようにしました。(nsa 命令と arc 命令が併用できる仕様である場合、問題があるかもしれません)

αβεさんからのパッチを取り入れ、locate 命令を修正しました。X, Y が逆になっていました。今まで引数は先頭から評価されるものだと思っていました。

αβεさんからのパッチを取り入れ playMP3 で WMA ファイルを指定した場合にエラーにならないためセグメンテーションフォルトが発生する現象をアドホックに回避しました。 → とりあえず AVIWrapper を拡張して対応する方向で? → うーん、どうしたものか。

Copyright を更新しました。

1月5日

btnwait 命令で、ボタン押下後常にボタン定義をクリアしていたバグを修正しました。戻値が1以上の時のみクリアするように修正しました。ボタン選択画面でうっかり右クリックするとボタンが選択できなくなることがありましたが、これが解決されています。