Site hosted by Angelfire.com: Build your free website today!

ONScripter 開発日誌

Since: Feb. 6, 2002
Last updated: Mar. 31, 2002

過去の開発日誌

2002年

3月31日

αβεさんの御指摘により、mode800 の時の underline の初期値に関する バグを取る。

αβεさんの御指摘により、cmp の戻値がおかしいバグを取る。

コードの clean up。

20020331a

大量にメモリリークしていたのを改善。

3月30日 セーブファイルの互換性が無くなりました

saveon, saveoff を実装。

forCommand, nextCommand の clean up と bufix。

その他 bug fix。

ショートカットキーの space が押された場合、マウスカーソルの下にボタ ンがあってもボタン外を押したことにする。

save file に text の表示/非表示を示すフラグを格納する。以前のセーブ ファイルは次のようにして移行してください。末尾に 1byte (0x01) 追加する だけです。

echo -n '\001' >> save1.dat

3月27日

sdl-fan-jp の Iguchi さんのパッチを取り入れ、MacOS X で CD-ROM を使 わないようにするためのコードを修正。MacOS X で正常にコンパイルできるか どうか未検証だが、こちらの方がずっと綺麗。MacOS X での動作報告お願いし ます。

3月26日

Takano さん adas さんから MacOS X 上での初動作報告をいただきました。 いただいた Makefile.MacOSX を追加。

adas さんの御指摘により、SDL_image を使って画像を読み込む際、必要ラ イブラリ(libjpeg 等)未インストールのために読み込めず落ちる現象に対処。

3月25日

textgosub, textbtnwait, getcursor, texec, ispage を仮実装。 textgosub は一見正常に機能しているように見えるかもしれませんが、 saveon, saveoff が未実装であるため textgosub 内からの save, load は正 常には行えません(一応 save, load はできます)。他にも色々おかしいとこ ろがあるので、あくまで試験的なリリースだと思ってください。なお、 textgosub を使用しないゲームについては 20020321a 同様に動作するはずで す。

len を実装。

20020325a

MacOS X で動作するように、コンパイル時に CD Audio 制御用の命令を #ifdef でスキップできるようにする。

3月21日

αβεさんの報告された、select の選択肢が文字列変数の時に生じるバグ の原因を一昨日直したつもりが、検証が不十分だったため直しきれていません でした。αβεさんの patch を参考に再度修正。

textoff, texton を実装。

αβεさんの御指摘により、表示文中に特殊命令以外のASCII文字を表示す るようにする。

20020321a

効果 1 で wait を省いたら、busy loop になって入力を受け付けない状況 が発生したため、開始時に wait を入れるように戻す。

ついでに textspeed を実装。

3月20日

富田さんの patch を参考に、--edit オプション指定時に z キーで音量・ 変数変更モードに入れるおまけ機能をつける。この機能は暫定的なものであり、 今後どうなるかは不明です。

3月19日

αβεさんの御指摘をヒントに、命令文中に "" で囲まれた 2bytes 文字があった場合に、以降をテキスト文として解釈し変数を decode していたバグを取る。

富田さんの patch を取り入れ、CD Audio で BGM 演奏する際に、再生トラッ ク番号がセーブされないバグを取る。

3月18日

quakex, quakey, quake を実装。再現性に関して報告募集。

20020318a

select が複数行にまたがるときに、先頭が * ではじまることは許されな いようだ。TODO から削除。

select で "" を取り扱えるようにする。

富田さんの patch を参考に getreg を実装。

3月17日

erasetextwindow を実装。ただし、select や btnwait 時に文章と選択対 象が重なる場合に正しく表示できない。

20020317a

効果の 15, 18 を実装。ただし遅い。

命令直後に表示文があると最初の文字が欠けるバグを取る。

delayed effect が効いていなかったバグを取る。というか、link 構造に する必要が全くなかった。仕様の勘違い。とほほ。

3月13日

起動オプションの --font で ttf フォントを指定できるようにする。

アーカイブからデフォルトカーソルを読み込めるようにする。

美しくないが文字列スプライトで文字列変数を使えるようにする。そのた めに、readToken 系を、string_buffer のみではなく任意の char 配列から読 めるようにする。

3月12日

起動時にコマンドラインオプションを取れるようにする。

富田さんの patch を参考に CD audio による演奏を選択できる機能を追加。 デフォルトでは mp3 ファイル演奏、--cdaudio オプションを付けて起動する ことで CD audio 演奏になります。

αβεさんの patch を参考に、再生中の track に対する play 命令を無 視するようにする。ただし、これが妥当な動作かどうかは未検証。

αβεさんの patch を参考に、 ("")"true""false"の("")部に変 数が使えないバグを取る。

回想時にボタンの位置がおかしいバグを取る。

3月10日

コードの clean up とバグ取り。

タグの読み取りで、アニメ指定の1コマの時間を解釈する個所を間違えてい たバグを取る。

s コマンドで文字から絵を作るときに、描画時ではなく生成時にその幅と高 さを取得する。これで spbtn で使えるようになる。

回想時に select 文の文字が表示されないようにする。

αβεさんの patch を取り入れ、nbz を解凍する際に無限ループに陥る場 合があるバグに対処する。

3月9日

αβεさんの patch を取り入れ、select 画面で禁則処理が行われるように する。

select 待ちの時に、右クリックメニューから skip モードにすると select が選択状態になるバグを取る。

某ゲームやっと終了。問題といえば quake が無いことくらい。

3月8日

("")"true""false"を実装。

3月7日

sar って「泡沫」で使われていた。しかし、仕様書には乗っていない。と りあえず nsa と同じ扱いにする。というわけで、sar 復活。

arc の引数に対応し、複数アーカイブを扱えるようにする。

αβεさんの patch を取り入れ、caption を実装。

ONScripter の返すバージョンを 1.96 にする。

3月6日

movl を実装。

配列を 0 で初期化するようにする。

αβεさんの patch を取り入れ、setwindow で指定したウィンドウ画像の αブレンディングがおかしいバグを取る。

αβεさんの御指摘により、rmode 0 にしても、右クリックに反応してし まうバグを取る。roff を実装。

3月5日

exbtn, exbtn_d, spstr を実装。

αβεさんの御指摘により、右クリックメニューで選択肢以外をクリック すると処理が止まるバグを取る。

sar なんて命令ないんじゃない?なんでいれたんだろ?というわけで削除。

btnwait の時に、skip mode を off にするようにする。

trap を実装。

3月4日

spbtn の取り扱いの高速化。

省略値かどうかを検出し一つのコマンドの区切りを正確に判断することで、 コマンドの区切りが':'で無い場合も取り扱えるようにする。

3月3日

グラフィックのタグ指定の透過形式指定に r を追加+画像取り扱い周りの バグ修正。

btnwait で、テキストを消し描画用に画面を描き直す。

cell, spbtn を実装。

defvoicevol, defsevol, defmp3vol を実装。

voicevol, sevol, mp3vol を実装。

wave 演奏を SDL_Mixer の MIX_CHANNELS(=8) チャンネル分同時に鳴らせ るようにし、wave コマンドは 1 番に、dwave の 0-7 はそのまま、8 以降は 7 番に割り付けるようにする。

mp3 を演奏するときに、今までは SDL_sound で読み込み SDL_mixer で他 の音とミックスしていたのだが、これだとボリュームを変更できないという問 題があった。そこで、SMPEG を直接用いて読み込み SDL_mixer で合成し、 SMPEG_setvolume を直接使ってボリュームを変えるようにする。結果として、 SDL_sound が不必要になった。

3月1日

αβεさんの御指摘により、/コマンド(直後の改行無視)の扱いのバグを 取る。

αβεさんの御指摘により、"ー"を禁則文字に追加。

αβεさんの御要望により、selnum を実装。

2月28日

btndef clear に対応。しかし、ONScripter では "" で囲まれ た文字列と素の文字列を区別しないため、"clear" という名前の画 像を指定すると、btndef clear として認識されてしまう。しかし、どうやら clear という名前の画像が指定されことはなさそうなので、まあいいか。

skip でラベルをまたぐときに正しい位置に行かないバグを取る。よく今ま で動いていたものだ。

連続する空白をスキップするコードが、最初の一つしかスキップしないよ うになっていたバグを取る。

20020228a

blt を中間 surface を経由しないようにし高速化。

setwindow, menusetwindow の色味モードと画像ファイルモードにまともに 対応。

mov3 - mov10 を実装。

デフォルトのテキストスピードをそれぞれ2倍に変更。

2月27日

αβεさんの patch を取り入れ、abssetcursor を実装。

αβεさんの御指摘により、readInt で省略値を読み込む際のバグを直す。

Nbz decode を実装。これにより、必要なライブラリに bzip2 が加わりま した。

bg#000000, ... のように、# が前の token と隣接している場合にも取り 扱えるようにする。

画像ファイルが存在しなくともゲームを続行するようにする。

20020227a

skip mode もしくは1ページ表示で select 待ちに行き、そこで右クリッ クメニューに行ってまた select 待ちに戻ってきたときに、カーソルが表示さ れマウス操作が不可能になることがあるバグを直す。

20020227b

本日3回目のアップ。上の変更にともない skip mode もしくは1ページ表 示でカーソル待ちの扱いがおかしくなったバグを取る。

2月26日 セーブファイルの互換性が無くなりました

ScriptParser の Script を解釈する部分を大幅に変更し、配列に対応。

げげげー。仕様書にはスプライトが 0-49 とあるのに、実際には 0-255 ら しい。またセーブデータ変更だよ。この際、取り得る範囲もセーブデータにい れ、デフォルト値の変更に耐えられるようにする。

あと、回想も無限にできるようにした方がいいようだ。ここは将来直すとし て、ついでに必要なパラメータを save file に追加しておく。

btnwait2 を実装。

mid を実装。

800x600 モードを実装。

というわけで、言ったそばからまたセーブファイルの互換性がなくなりまし た。2月24日バージョンの save file から移行する場合は次のようにしてくだ さい。まず、2月26日バージョンのONScripterLabel::loadSaveFile( int no ) を次のように書き換えます。
・loadInt( fp, &text_history_num ); をコメントアウト

    /* ---------------------------------------- */
    /* Load text history */
    //loadInt( fp, &text_history_num );

・for ( i=0 ; i<MAX_SPRITE_NUM ; i++ ){ の MAX_SPRITE_NUM を 50 に
    /* ---------------------------------------- */
    /* Load current sprites */
    //for ( i=0 ; i<MAX_SPRITE_NUM ; i++ ){
    for ( i=0 ; i<50 ; i++ ){

この状態でコンパイルしてゲームを起動し、移行する save file を一旦読 み込みすぐに保存します。save file の書き換えが終わった後に ONScripterLabel::loadSaveFile( int no ) を元に戻し、以後はこれを使って 普通に遊べるようになります。

2月24日 セーブファイルの互換性が無くなりました

lookbackbutton, lookbackcolor, lookbackflush を実装。

回想モードを実装。これで文章履歴が見られる。

マウスカーソルが最初にボタンの上にある場合に選択状態にならないバグを 直す。

selectcolor, menuselectcolor を実装。

monocro 修正。なおこれに伴い、save file の互換性がなくなっています。

αβεさんの御指摘により、sprite の重ね合わせの順序が逆になっている バグを直す。

αβεさんの御要望により、rmenu の状態を save file に入れる。これに 伴い、save file の互換性がなくなっています。

αβεさんの御要望により、gettimer を実装。

save file の互換性がなくなることはなるべく避けるようにしていますが、 今回は以前のバージョンが作成した save?.dat は全て消してください。ただ し、かなりゲームが進行していてデータを継続して使いたい方のために、save file を移行する裏技があります。旧バージョンを持っている人は、新バージョ ンの関数 ONScripterLabel::loadSaveFile( int no ) を旧バージョンの関数 ONScripterLabel::loadSaveFile( int no ) で差し換え、コンパイルします。 この状態でゲームを起動し、移行する save file を一旦読み込みすぐに保存 します。この時、保存は新バージョンの形式でなされます。save file の書き 換えが終わった後に ONScripterLabel::loadSaveFile( int no ) を差し換え ない真っ新の新バージョンをコンパイルし、これを使って普通に遊べるように なります。ただし、この裏技は今回のバージョンアップではうまくいきますが、 常にうまくいくとはかぎりません。

2月23日

monocro を実装。save file に monocro の情報を追加。

select でテキストが一行未満の時には、キーボードショートカットで選択 肢を選ぶときにマウスカーソルが行の中心ではなくテキストの中央にくるよう にする。

0.txt, 1.txt の連番ファイルで、ファイル末尾が改行文字で無い場合に正 常に読み込めなかったバグを直す。

2月22日

for, next, break を実装。

intlimit, amsp を実装。

コマンドの返り値が RET_JUMP の時に、timer event で executeLabel に 飛んでいたのを、goto で executeLabel 最初に戻るようにする。これで余計 な wait が減る。

以上雪を降らせるために努力をしてみたが、スムーズに降らない。一カ所 timer event 待ちをしているところがありそこが引っ掛かっていると思うのだ が、すぐに回避策が思いつかない。保留。

2月18日

select で複数行中に空白行があると動作しないバグを取る。

delay, transmode を実装。

マシンパワーによって効果の継続時間が異なっていたのを、effect で定め られた時間内に終わるようにする。CPU や描画速度に応じて、効果の時間間隔 を調整する。

2月16日

parseTaggedString のループ回数読み取りにあるバグを取る。

アニメーションカーソルを実装。これで、キー待ちをしているのかそれと もタイマ待ちなのかが分かるようになる。

某ゲームのために、アーカイブを検索する前に現在のディレクトリを検索 するようにする。

保存ファイルを読み込むときに、ファイル名が書いてある場所以外をクリッ クすると固まるバグをとる。

2月13日

!d を実装。

2月12日

今日 Windows で動かしてみたらスクリプトを読み込む段階で止まってしま う。調べたらなんと、Windows と Linux で fread の戻り値の仕様が異なるこ とが判明。よく今まで Windows で動いていたなぁ。というわけで修正。

2月11日

profiler でメモリリークを調べる。2個所でリークしていたので解放する ようにする。

2月10日

表示文で特殊文字しかない場合に改行しないようにする。

str alias のデコードにバグがあり、正しくデコードされない場合があっ たのを直す。se1? が全部 se1 として解釈されていた。どうりで効果音が場面 に合っていないと思っていたが…。

某サブシナリオをやっていたらスクロールのために出てきたので blt を実 装。ただし、拡大縮小には未対応。

げげげ、もしかして savegame と loadgame を実装しないとゲームが進ま ないのではないのだろうかという気が非常にしている。というわけで、 savegame, loadgame を実装。今までの進行は…。

2月8日

セーブデータから背景と立ち絵が正常に復元されない場合があるバグを直 す。

文字の色変えを実装。

Scroll effect を実装。

date, time を実装。

2月7日

「ひとかた」で define の中で gosub を使っておりここで timer を使っ てしまうため、ONScripter のコンストラクタの最後で define 節を読み、 game を実装してここで start 節に飛ぶようにする。

「ひとかた」で、何故かディレクトリのセパレータが arc.nsa と nscripter.dat とで異なっているため、ファイルの読み込みに失敗していた。 それでもしかしてと思って見てみたら、スクリプトの改行も 0x0a になってい る。どうやら、Unix 上で作って、Nsa の圧縮だけ Windows でやっているよう だ。事前に Windows 用のセパレータに置換することで回避。

仕様書によると、画像タグs を使う時に引用符で囲まれた区間にある stralias が展開されることになっているが、その他の場合では引用符で囲ま れた区間では展開されないようになっており、後から無理にコマンドを追加し て仕様に一貫性が無くなっていることを感じる。というか自分のコードの一貫 性が崩れるから実装したくない。というわけで、stralias を展開しない形で 画像タグ s を実装。

コードの変更にともない、セーブデータの背景画像保存回りを更新。以前 と互換性が無くなる。

vsp を実装。これで「ひとかた」がほぼ動くようになる。

2月6日

jumpb を実装。

HG ゴシックと HG 丸ゴシックだと、embedded bitmap がなく全ての font size で正常に表示されるっぽい。

公開のために、Web page を作り、ベータ版として公開。

2月5日

DelayedInfo で、変数の中身が変化することがあるため、元々のコマンド ラインを再解釈するのではなく、展開されたコマンドラインを保存しそれを解 釈するようにする。

dwave, dwaveloop, dwavestop を全てチャンネル 0 にマッピングすること にして実装。某ゲームでしゃべるようになる。すげー、これでフルボイスを実 現しているのか…。

stop を実装。

mp3, mp3save, mp3loop を実装。アーカイブ埋め込みの mp3 演奏に対応。 うーむ、BGM とボイスがあると大分違う。

btnwait と select と右クリックメニューをキーボードのみで操作できる ようにする。これで、キーボードのみで全ての操作が可能になった。

btndef の高速化。

click, mul, div, mod を実装。

if を強化。

2月4日

itoa, atoi を実装。

BaseReader から派生するクラスを大幅に変更し、arc1.nsa - arc9.nsa の 複数アーカイブに対応させる。

2月3日

公開に向けて、大筋に関係のない細かい仕様の実装を始める。

SMPEG の news group などを見て、smpeg on Win32 で global optimization を off にする区間を MPEGaudio::layer3reorderandantialias の関数に設定したら、Win32 で MP3 が正常に鳴るようになった。素晴らしい。 前回は この関数で呼ばれる inline 関数の前後に入れたため無視されている のではと思っていたが、まさにその通りであった。

Win32 でのファイル時刻読み取りを実装。

resettimer, waittimer, autoclick を実装。

clickstr を実装。強制クリック待ちができるようになる。

leaveTextDisplay で行っていた処理を timerEvent の先頭に持ってくる。 これが筋だし、懸案のバグも取れかなり描画がスムーズになった。

立ち絵とスプライトの前後関係が逆だったのを直す。

キーボードの 1, 2, 3 で文字速度を切り替えられるようにする。

右クリックメニューで windowerase と reset を実装。

なんと reset でグローバル変数を初期化していたバグを直す。

save file に文章履歴と setwindoweffect のパラメータとその他の文章用 の状態と sprite を含める。

1月27日

いきなり某ゲームを動かしてみたら、動きはするものの、なんと 15pt 文 字の表示がめちゃめちゃ。26pt だとうまくいく。どうやら、SDL_ttf もしく は freetype2 が埋め込みビットマップに対応していないかららしい。困った…。

kochi だと 17pt 以下がだめ。MS だと、22 以下がだめ。setwindow で強 制的に 18pt 以上にし動かす。

画像展開回り?が遅い。キャッシュでも入れるかのう。

しかも、オープニング途中で segmentation fault 落ち。まだまだだ。

1月26日

!w を実装。

windoweffect の解釈のバグをとる。

windows で make すると、コンパイラのチェックが厳しいため、Linux で は気付きにくいバグが見つかることが多い。というわけで、いくつかバグを取 る。

enterTextDisplay で、既読文字がスムーズに表れるようにする。

禁則処理を実装。

効果があるのかいまいち不明だが、curtain 等の effect を 16bit 間隔に する。また、effect の処理時間間隔を 20msec から 10msec にする。遅いマ シンだとつらくなるかも。

SDL_mixer を入れ、wave, waveloop, wavestop を実装。mixer のまともな マニュアルがないので苦労したが、mp3 と同時演奏できている。素晴らしい。

1月25日

NScrflog.dat を大文字にすべく、SarReader と NsaReader の内部は大文 字で扱うことにする。

lchk と labellog を実装。NScrllog.dat の中身は同様に大文字。

これで某ゲームは一通り動く?

1月23日

humanz, lsp, lsph, csp を実装。ようやくスプライトが実装された。

立ち絵とスプライトのオーバーラップ処理をまともにする。

1月24日

filelog を実装。BaseReader にアクセス状態を保存するフラグを入れる。 notif の実装が間違っていたのを訂正。これで、グラフィック一覧が正常に動 くようになった。ただし、元々は NScrflog.dat の中が大文字になっているの に対し、ここでの実装はアーカイブの中の文字をそのまま使っている。

1月22日

readLine の時点で text_line か否かを判定し同時に1次 parse をし。 readInt と readStr で2次 parse をするように直す。

1月19日

nsa の spb を実装。元々は bmp で吐くようになっているが、楽なので ppm で吐くようにする。そのうち bmp にするかも。というか、bmp のヘッダ の仕様を調べれば15分くらいで bmp に出来そうな気もするが…。

「泡沫」のために、readToken で quat と 2bytes 文字以外で大文字命令 を小文字に変換するようにする。

!sd を実装し、sentence_font.wait_time が 0 になることがあったバグを 直す。

「泡沫」のために、立ち絵の透過形式で左上とコピーを実装。

save file に現在演奏中の CD track を入れた。

bg で立ち絵を除去する際に、状態変数をクリアしていなかったバグを取る。

「泡沫」のために、デフォルトアーカイブを Direct から Nsa に変更し、 arc.nsa が開けないときには Direct でいくようにする。

select の後に enterNewPage するようにする。

某ゲームのために、getversion, jumpf, rnd, rnd2 を実装。

1月15日

nsa の lzss をさくっと実装。

ショックというかショックじゃないというか…。spb の SPI の逆アセを始 めたところで、既に実装してソースを公開している人を発見。なんか、同じ時 期に同じことをやっている…。結構かぶっているなぁ。まあいいか。

1月14日

play もしくは playonce が playstop を挟まず連続した場合に、 segmentation fault するバグを直す。

某ゲームでグッドとトゥルーに行けることを確認。

1月13日

昨日おかしかったところを直して、menubar 以外は Qt の状態に復帰。

File の修正時刻や delimiter など、file アクセス関連が機種依存になっ ている。いい library ないかのぉ?

SDL_sound を入れ、さくっと MP3 演奏を実装。play, playonce, playstop を実装。ただし、MIDI は無視し、CD 演奏は 対応する MP3 演奏に割り付ける。 BGM があると良いねぇ.

Windows 用の Makefile を書き、Windows でコンパイル。思ったよりも表 示がもたつくが、問題無くコンパイルでき、文字・音楽・効果を含めて実行で きる。ただ、機種依存の searchSaveFiles() は未実装。

1月12日

Audio を実装しようとして、Qt の限界を感じる。libmad や libsmpeg な どの使用も考えたが、ここにきて結局 Qt から SDL に移行することにした。 そもそも開発前に Qt か SDL でいくか迷ったのだが、SDL を良く調べなかっ たせいもあり使いなれていた Qt にしてしまった経緯がある。うーむ。

jpeg 画像読み込みを試し、sjis2utf16 を書いて ttf での日本語描画は試 す。文字の aliasing が素晴らしい。フォントファイルを直接指定しなければ いけないのが難点だが。画面の bit 転送も Qt とくらべて速そうだし、 alphablend も未検証だが速そうだ。欠点と言えば、menu bar を自前で実装し なければいけないくらいだが、今は menu bar をほとんど使っていないので構 わない。実装自体も簡単そうだし。

というわけで、一日かけて移植。8割方移植終了。GUI を外して、Blit 命 令を置換するだけでほぼすんだ。enterTextDisplay と rmenu 周りが若干おか しいくらい?

1月10日

ファイル名を QNScripter 系に統一し、copyright を入れ、ライセンスを GPL にする。

Makefile を Linux 用と Windows 用に分ける。Windows 用は書いただけで 未試行。

1月8日

文章履歴の保存を実装し、表示部分は完成。履歴の save はまだ。

1月7日

テスト実行中のループで引っ掛かり先に進めなくなったので、dec を実装。

text window fade in 時に effect が適用されるようにする。

文章履歴用の ring buffer を作る。

「ハーバー」で立ち絵の位置がおかしいので、underline を実装し、立ち 絵の下限の位置を underline に合わせる。

1月6日

locate を実装。

windoweffect を実装し、text window fade out 時に effect が適用され るようにする。fade in 時は未実装。skip と one page をきちんと実装する。 テクスト表示中に画像が追加される場合、既表示のテクストが消えてしまうバ グを何とかする。文章履歴保存と兼ね、バッファリングしておき最描画するの が妥当そう。

1月5日

save と load を実装。入れ子を含む現在の状態と変数と背景と立ち絵の保 存ができる。後は、テキストとスプライトとカーソルの保存ができればよい?

curtain を実装したが、かなり遅い。

テキストのクリック待ちの時に、space key と return key で先に進める ようにした。

systemcall を実装。

selgosub を実装。

1月3日

WAIT_BUTTON_MODE を追加し、btnwait の時には右クリックメニューを無効 にする。

「ハーバーランドでつかまえて」(以下「ハーバー」)を動かすテストを していて、小さい bg をロードする時の問題を直している時に、偶然、占有メ モリが増えていくバグの原因を発見してしまった。単なる delete のし忘れだ が、qnscripter ではなく、XFree 側のメモリが増えていくところが嫌らしい。 これで全くメモリリーク無し。