「Bomber丸World」に関する日記(3)

<前 次>

ドットずれが直った!

マップ表示を作るなら、ドットずれバグ回避のためのドット絵の制約をなくすために、yaneSDK自体を修正しなければいけないと思い、今まで恐ろしくて手を付けられなかったyaneSDKのアセンブラで書かれた描画ルーチンについに足を踏み入れました。
ところが、そこでわかったのは、描画ルーチン自体は何もおかしなことをしていないということ。
使われているパラメータがどうにもおかしいらしい、ということで、パラメータを設定していると思しきClipping関数を調べていると、アセンブラではなくCで書かれた部分にあからさまに怪しい、というか、どう見てもわざとずらしている処理を見つけました。
ただ、これは意図的にしているものらしいので、正常な動作を確認できた整数倍拡大のときのみずらす処理をスキップするようにしました。

雰囲気チェンジ

Bomber丸WorldのBGMシステムの転調による雰囲気チェンジができましたよっ!!
いや、もう、今まで転調をなめてました。
半音上げ下げの組み合わせでこんなにも変わるなんて!
バトル中状況に応じて変化が現れるとか、フィールド上でイベント中に微妙に変わるとか、そういうのを考えていたのですが、別の曲みたいに聞こえるほど変わってしまうので、いっそのことキャラごとに別々のアレンジを割り当てるとかそういうことを考えてしまいます。
あと、曲の終止とかも考えています。
要するに、ただ単にぶつ切りとかフェードアウトだけじゃなくて、最後に終わりっぽいフレーズを入れてどーんと終わらせるような、そんな方式です。

ミディビについてですが、もしかしたらmultipartで送信しようとしていたのが問題だったのかもしれません。
なんとなく予想しただけなんですが、全部のデータをひとまとめにして送っているのにもかかわらずmultipartというのはどうにも合っていないような気がしたのです。

プログラムチェンジができませんでした

BGMシステムのプログラムチェンジとテンポ変更ができました。
…といいたいところなのですが、プログラムチェンジのほうはなぜか正常に動作せず、変更した瞬間から音が出なくなってしまうようでした。
一応、音が出るときもあるのですが、そんな状態ではとても使い物にならないので、プログラムチェンジは使わないか、MIDIファイルを使っての変更で代用しようかと思います。
雰囲気チェンジも作成中ですが、ちょっとメッセージを盗み見るだけのツールとは勝手が違うので戸惑っています。

フェードができました

Bomber丸WorldのBGMシステムのフェードのテストプログラムが出来上がりました。
現在のボリューム、パンポット、エクスプレッションの値を見ることができるほか、それぞれの値を自由に変更することができます。
値を変更するとその値まで実際の値がゆっくりと近付き、フェードイン・フェードアウトが実現されます。
更には、裏技的な方法で範囲外の値を指定しても正常に動作する安全機能付きです。
これで確かめて初めて気付いたのですが、音量が50を切るとほとんど無音になってしまいます。
元も音量の二乗が音のエネルギーに比例するとのことだったのである程度想像はしていたのですが、結構予想以上だったので実際に使うときは音量は実際に指定したい値の平方根オーダーで指定するようにしようと思います。
今後はプログラムチェンジ、テンポ変更、雰囲気チェンジに手を付けていこうと思っています。

ミディビ、どうせだから休止している間にPHPで書き換えてやろうかなーと考えていたりします。
ただ、いまだにアプレットから曲が送信できない問題の解決法は見つかっていません。
場合によってはサーバー管理者に問い合わせてみようかなとも思っています。

ミディビ休止

ミディビ色々試してるんですがどうにも改善しません。
しばらく改善できそうにないので非常に残念ですがしばらくの間ミディビは休止させていただきます。

Bomber丸WorldはBGMシステムのフェード関連のチェックプログラムがようやくでき始めてきたところです。
ここから先はすんなり行ってくれるはずですが…。

騎馬戦

既に6月末ということで、とり急いでネットワーク環境を整えてWiiのインターネットチャンネルをダウンロードしてみました。
ただ、安物の無線ルータを買ったせいか、時々通信が途切れて、アップデートに失敗したりエラーが起こったりしてました。
トワンセス(どういう略だ)は、見所の一つである騎馬戦を体験しました。
追いかけっこは楽しいけど、あまりバトルとしては張り合いがないような気もします…。

Bomber丸WorldのBGMのテスト用に、Luaラッパを改造してました。
単純な機能拡張なので、必要なくてもとりあえず残しておくつもりです。
しかし、テストのために作ったスクリプトのほうがまずくて、何度も何度もプログラム本体の問題ではないエラーで苦戦していました。

フェード前

で、フェードの前処理のパラメータ監視を作りました。
ほぼふにゃさんのコピーです。
あと、ファイルを読み込んでいないときに動作させようとしてもエラーも何も起こらないことも確認しました。

BGMループ再生

Bomber丸WorldのBGMシステムの単純な音楽の読み込みとループ再生ができるようになりました。
最終的にはキャラの状態によって音量バランスが変わったりイベントとかで曲の内容が変化していったりとかをやりたいです。
例えばキャラごとに楽器を割り当てて、HPが減っていたらその音量は小さくとか、キャラの位置によって聞こえてくる位置を変えるとか、戦いが白熱してきたらテンポを速めたりとかもできそうです。
次はチャンネルごとのフェード処理を作ろうかと思っています。

CBWBGMxx系

Bomber丸WorldのBGMシステムのBGMスクリプトを作ったりしてました。
そのためにLuaクラス自体も簡便になるように改良したり。
CBWBGMのユーザからはCBWBGMxx系のクラスには直接アクセスできないようになっています。
CBWBGMクラスが一つのCBWBGMScriptを管理して、CBWBGMScriptが複数のCBWBGMResourceを管理します。
現在のところ再生タイミング調整をどうするかが決まりきっていない状態です。

BGMの読み込みと再生

Bomber丸WorldのBGMシステム作ってました。
今回は単純な再生と停止のみ…。
一応読み込みはリソースシステムを使ってそれなりに効率よく、のつもりであります。

対照的なイベント

Bomber丸Worldのね、考えてるのに結構大きなイベント群として「さやかたんイベント」と「いずみさんイベント」がありましてね、これが結構対照的だったりするんですよ。
「さやか」のほうは明るく楽しく、さやか自身の年齢が4歳というのもあり、ほぼ死ぬとかそういう心配はなくて、間の抜けた警察とどこか憎めない犯罪者集団が登場したり、出てくるボスキャラもスライムの出来損ないみたいな「むにゅむにゅ」だったり、シリアスさはほとんどないわりとのんびりしたイベントです。
一方「いずみ」のほうはというと、死ぬキャラがいたり、暗く重いストーリーが陰に潜んでいたり、そんなことだからボスも飢えたサイボーグ「ベティ」だったり、いずみの年齢が24歳と大人であることもあって、わりと容赦ない部分があったり、年齢相応のネタが仕込まれていたりもしています。
でも、そんなに対照的であっても、始まり方は同じように底抜けに明るかったりします。
「さやかたんまほーつかえるでしゅよー。」
「いずみペットショップオーナーのいずみでーす!」

ランダムセレクト

プログラミングのところの乱数のページを増やしました。
前々からやろうと思ってたんですけどね、ランダムセレクトの話です。
またBomber丸Worldのスクリプトにでも組み込もうかなと思ってまして。

DM積んでみた

今日はBomber丸WorldのBGMシステムを作るためにMIDIを調整していました。
とりあえず2つの曲についてデータ内容がばらばらだったのを統一しました。
それでもまだまだデータ自体は流動的なんですけどね。

で、タイトルのことですが、メテオスオンラインでみんなからダークマターを贈ってもらいました。
私は17個でしたがこれでも悪いほうで、40個が二人、55個が一人いました。

1182005576.png

ふにゃさんと同じく

Bomber丸WorldのBGMシステムを作り始めました。
とりあえずふにゃさんのを参考に、と思ったらふにゃさんのほうではBGM再生にyaneSDKを改変して使っていたんですね…。
忘れていました。
そんなわけで、今回もふにゃさんと同じくDirectMusic7(というか6.1)でやっていこうと思います。
だから、一応動作環境にはWindows95も入るはずです。

チューニング中

LuaそのものをBomber丸World用にチューニングしてました。
Bomber丸Worldで使われると困る標準関数を削除したり、ゲーム上でうまく動かない関数の仕様を変更したり、紛らわしい名前の関数をリネームしたり。
で、削除しまくってたらライブラリのサイズが400KBから300KBまで大幅に落ちました。
まあ、どっちみち使ってないものはリリースコンパイルで消えるはずだから直接的なサイズ削減効果はないかもしれませんが。

lua_dumpは遅いのか!?

コンパイル済みのデータを保持するクラスを作り始めたのですが、どうにもバイナリ出力するlua_dumpはコードの細切れごとにwriterを呼び出すようで、予め全体の大きさがわからないし断片ごとに何度も書き込まれるのでまとめて書き込んで高速化というのができないし、ということで、バイナリを保持しておいて高速化というのは、最初のコストや後で再利用される割合などを考えるとどうにも割に合わないようです。
そんなわけで、もっと単純でリスクの少ない方法を考えることにします。

luaU_dump

ウィンドウシステムの相対座標での描画も出来上がったのでWikiにアップしておきました。
そして、BGMシステムを作ることにしたのですが、その前にもう一度Luaの見直しを行っておこうということで、CBWLuaを改造中です。
BGMスクリプトとか、マップイベントとかで、同じスクリプトを繰り返し何度も読み込むことがありうるので、auto_resourceが使えるかもしれないと思い、auto_resourceで使いまわすためのコンパイル済みチャンクを作るためのクラスをluacを参考に作っているところです。

新ウィンドウシステム

Bomber丸Worldのウィンドウシステムの見直しをしてました。
兎にも角にも新しいウィンドウを作るのが面倒すぎるので、その点の改善です。
以前のバージョンではまずウィンドウアイテムクラスを構築してそれをウィンドウクラスに登録する必要があったのですが、それをウィンドウ上に直接構築する形にしました。
あと、相対座標の導入で、ウィンドウを気分的に後ろの画面から独立させてます。

CBWLua

LuaのBomber丸World用カスタマイズ版ができたのでアップしました。
本当は5.1.2の日本語対応版を作りたかったんですが、やはりというか日本語化パッチは5.1.2には対応していなかったようで。
そんなわけで、ちょっと古いかもしれませんが5.1の日本語対応版を使うことになりました。
変数名には日本語は使えませんよ!

卒業写真撮影日

もう分子模型は学校に持っていきました。
Bomber丸Worldのほうは、HTML表示をちょっとだけ改良しました。
文字列の設定が若干手軽になった程度ではありますが。

<前 次>