2007年7月の日記

<2007年08月 2007年06月>

マップ処理開発開始

まぁ、それでもメテオスオンライン初心者向けガイドは続けるわけです。
サービス終了まであと3ヶ月あるわけですし。
とりあえず金がかかりそうという不安を解消するためのページを作ってきました。

メテオスオンラインのことであまり沈んでいても仕方がないので、他にBomber丸Worldの開発なども再開しました。
とりあえずアニメーションを完成させて、マップ処理に取り掛かったところですが、やっぱり以前と変わっている部分は結構変わっているので、前のを流用せずマップシステム構築しなおすべきか、考えています。
そうするとまた少し時間がかかってしまうんですけどね…。

全消しを体験してみよう!

爆ボンのページのトップにあるコンテンツ一覧のツリーをJavaScriptで開閉できるようにしてみました。
日記の左メニューの応用、というかコピーです。
よく使われる項目は最初から開くようにしてみました。

で、メテオスオンラインのページも一つ更新しました。
やっぱり全消しができるのとできないのとでは楽しさが全然違うので、とりあえず全消ししたことない人には一度体験してもらおうということで作りました。
ついでっぽくですが、公式のお手本ムービーにもリンクしてあります。

出現率ランキング

ナマライザいじってました。
本当にやりたかったログの分析です。
まあ、要するに各項目ごとの出現数の統計というわけなのですが。
色々試行錯誤しながら、まあまあ順調に進んではいます。

メテオスオンライン初心者向けガイド

突然ですが、メテオスオンライン初心者向けガイドのページを作りました。
他の人を誘い込むときに、その人たちが驚くほどメテオスというゲームについて無知だったこと、そしてそういう人たちにメテオスの楽しさを伝える立場のサイトがろくに存在しないこと、このあたりが非常に気にかかったので作ることになりました。
せっかくうまい人たちが人並み外れた腕前の動画を公開しても、玄人・神レベルを目指す攻略サイトを作っても、「惑星って何?」「お金かかるんだったらやらないよ。」「パズルゲーム苦手だし…。」という人を引き込むことはほとんどできませんし、攻撃メテオを見て「ぎゃー!なんか1個ふってきたー!」とパニックに陥る人などにメテオスをより深く楽しんでもらうことはできないのです。
ということで、勝っても負けても、プレイしているだけで楽しい、そんな気持ちになるようなサイトを目指してみました。
ゲーム記からいけますので興味のある方はどうぞ。

詳細フィルタ

ナマライザをいぢくってました。
まず、ログフィルタを通したログの扱いを変更。
読み込むかどうかを判断するための読み込みフィルタと、解析対象にするログの絞り込みを行うための解析フィルタに加えて、今回新たにウィンドウごとに更に細かく絞り込む詳細フィルタをつけました。
つまり、例えばエラーが出ているファイルのうち、favicon.icoだけを見たいとか、そういうのに対して使えるはずなのです。
そして、フィルタそのものもバージョンアップして、文字列関係には、「~で始まる」「~で終わる」なども指定できるようにしました。
本当にやりたかったログの分析はこれらの作業のため今日は作れませんでした。

自動車運転免許取れましたー

はいよー。技能試験は今月1日に終わっていたのですが、なんだかんだで延ばし延ばしになってやっと今日学科試験が受けられました。
なんだか一発では受からなさそーな気分でしたが結果は95点で合格でした。

今日こそNeoMuplを更新しようと思っていたのですが、ファイルの切り替えがうまくいかず、別のリストを開くと後から読み込もうとしたほうのリストが破壊されるという問題が発生したので公開はまたしばらく見送りとなりました。
そのかわり、たまたまバージョンアップしたのに公開されていなかったCharaBox3が残っていたのでそちらをアップして今回の更新としました。

ネコブラ:
大きく発達した耳で周りの状況を判断する。
尻尾を震わすとニャーという威嚇音が発せられ獲物はうっとりと縮み上がる

1185375294.png

真のランダムセレクト?

今日公開するつもりでNeoMuplの足りない部分を作ってました。
まあ、見ての通り公開できなかったのですけど、一応色々できました。
まず、何も再生していないときにストップすると例外が出る問題を修正しました。
次に、設定ダイアログを実装しました。
ふにゃさんのときなどと同じく、フレーム(.NETではGroupBox)コントロールを列挙して自動的にカテゴリーを表示するようにしています。
とは言ってもカテゴリーは、そして設定項目も、一つしかないのですが。
で、その一つというのが、タイトル付け規則です。
タイトル付け規則というのは、ファイルをリストに追加したときに自動的にタイトルをつけるときの規則をテキスト形式で表したもので、特別な文字列を埋め込むとその部分がファイル名の一部と置き換わります。
そして、もう一つできたのが、ランダム再生のアルゴリズムの改良。
前々からスキップ率がうまく機能していないのが気になっていたので、この前プログラミングコーナーに書いたランダムセレクトの方法を使ってみたところ、面白いように再生される確率が変わるようになりました。
最後に、今日できなかったのが、音源リセット。
これも前々から気になっていたところで、極まれにMIDIの音が鳴りっぱなしになることがあったので、その部分を修正したいと思っていたのですが、リセット後の設定の復帰が、元々復帰を想定していないプログラムだったために難しく、結局今日中には終わりませんでした。

スーパーグローバル変数

さて、いろんなところ(特にシナリオ関連のLuaスクリプト)から自由にアクセスできるゲーム中の状態を保持するグローバル変数が欲しいところです。
そこで、Lua変数と互換の、ゲーム全体で、つまり複数のLuaステートの環境をまたいで利用できるデータ構造を考えてみました。
まぁ、あまり複雑なデータ構造にするのもなんだから、単純に名前と実際のデータのペアのような形で実装することになりそうです。

CBWAnimationScript

アニメーションのスクリプト制御は出来上がったはずです…一応。
テストが済んでいなかったりというのもあるのですが、スレッドをC側から閉じるすべがないとはいえ、スレッドの終了をLua側に押し付ける形になったのが少し心残りでした。
スレッドを使わない方法なら別に良かったのですが、終了の責任を押し付けられてもやっぱりスレッドを使ったほうが楽そうな気がしましたので。
スレッドを終了し損ねてもそんなにむちゃくちゃメモリが食われることは無いと思うし…。

CBWAnimationNormal

標準のアニメーション処理できました。
で、アニメーション処理自体はうまくいったのですが、描画エンジンの不具合でむちゃくちゃ拡大して表示されたので今日はさしあたりその部分を直していました。
原因は一部分の切抜きのときでも表示されるサイズを画像全体の大きさを基準に決めていたことでした。
後はスクリプト制御だけです。

1185029931.png

すべってころんだ

アニメーションの動きの部分を作ってます。
とはいえ、この動作自体は以前に作ったものでほぼ完成されているのでデータの仕様変更に合わせる以外はほぼそのまま移植しています。
まあ、その仕様変更が結構いろんなところで効いてきたりもしているのですが…。

リストから削除しますか?

NeoMuplのスキップ率の挙動がどうにもおかしいような気がしたのでちょっとプログラムをいじってました。
どうにもプログラムを見た限りでは何の問題もなさそうだったので実際に動かそうと思ったのですが、今現在デバッグ用に入れてあるデータは無効なデータが多い状態だったので、スキップ率のことはとりあえず置いておいて、無効なデータを消しやすいようなエラー処理の拡張をしました。

Bomber丸Worldのほうは、アニメーションデータの要素の一つとして、アニメーションの動きがどの範囲で変動するかというデータが必要だったのでそれに対応するデータを追加しました。

CBWAnimation

マップ表示のためのアニメーション機能を作ってました。
プログラムで細かい制御したい!データを楽に作りたい!
とか考えていると、複数のフォーマットができてしまったので両方対応させることにしました。
一つはLuaスクリプトにより複雑なアニメーションができる方式。
もう一つは1コマ1コマのデータを指定するシンプルなアニメーション形式。
最後に実はもう一つ、もっとシンプルに一枚絵の形式。
あわせてこの3つです。
アニメーションの使い方は以前に作っていたものよりもずいぶんとシンプルになり、ファイル形式も冗長ながらよりシンプルな形式になりました。

リファラスパムだらけ

ナマライザの動作確認もかねてひたすら過去のアクセスログを見てました。
細かなバグも直しました。
しかしリファラスパムが100件以上ってどうよ…。

海の日なのに学校へ

また唐突にナマライザです。
ナマライザでフィルターの掃除…じゃなくて、保存と読み込みを作ってました。
まともなアクセスログばかりだったら別にフィルターの保存と読み込みなんて必要ないのですが、リファラスパムが最近非常に増えてきているので、毎回の入力を省いて一発で弾きたいのです。

あまりに美人で声も出ないか?

ゼス(ここまで略すともうわからんな)クリアしました!
中盤で予兆はあったとはいえザントの本性には結構驚きました。
あんなのにはそりゃ影の世界も光の世界も任せられませんわな。
そしてミドナ様の底知れぬ真の力にも驚き。
終盤のボスラッシュでは今までやってきたバトルの要素をほぼ網羅していて楽しかったナー。

天空都市

ゼルダの伝セス(いつもながらとんでもない略し方!)ではおばちゃんのふるさとへ。
想像はしていたけど、やっぱり実際に見てみると圧巻。
…というほど凄まじい光景ではありませんでしたが。
上昇気流に乗って飛ぶ感じはロックビルを思い出させます。

Bomber丸Worldは、マップ表示関連のファイルを旧プロジェクトからコピーしてきて、新プロジェクト向けに書き直しているところです。
マップ表示に関わる部分といえば、マップそのものの表示、キャラクターの配置、アニメーション処理の3つなのですが、中には考え方自体が変化しているものもあるので、もしかしたら全部書き換え…ってことになるかもしれません。

ドットずれが直った!

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

西部劇!?

雪山はとても素晴らしいラヴストーリーでハートがいっぱいになりました(文字通り)。
そしてなんやかんやでストーリー進めて存在を明かすこと自体ネタバレのはずなのに公式サイトに堂々と載っている神殿に潜入し、結構不便なアイテム入手。
そのままボス部屋へ直行し、ボスを撃破…と思いきや!
似たようなパターンは風のタクトにもあったんですが、トワイライトのほうが驚いた顔やファンファーレの止まりっぷりが好みでした。
で、ついに西部劇調の場所へ到着。
最後の奥義は何ナノかな。

データの送り方

ん、更新しました。
レイアウトの問題は解決してないのでほったらかしで。
もう自分でレイアウト作っちゃおうかなとも思うけど、そうするとまた一回分のネタになっちゃうので、そりゃいいやって思って次の更新はレイアウト関連にしたいなーと。
今回の更新の内容は通信内容の見直しでした。
一応ミディビ自体も復活です。

極上のスープ

スープはカボチャとチーズで味付けされておいしくなりました。

ミディビ、ついでにボリュームとかパンとかにも対応させようとか、アプレットの横幅が狭いと一部表示されなくなる問題をどうにかしようとか考えていたのですけれど、横幅のほうの問題が解決しなくて、今のところこれといった進展はありません。

雪山の廃墟

ゼルダの伝説は獣人さんのお宅訪問のところまでやってきました。
なにやら恐ろしげな面相の割にはご夫婦とも良い方々で、家に招かれて魚のスープをご馳走になってしまいました。
まだ味付けはされていませんでしたが贅沢は言わないということで。

オクテットストリーム

うむ、ミディビの問題は案の定Content-Typeの問題でした。
multipart/form-dataからapplication/octet-streamにしたらあっさり解決です。
結局、単なるバイナリデータをわざわざmultipart/form-data、すなわちフォームからの送信のように扱ってしまったことが問題だったようです。
ただ、もしかするとこれは逆にフォームデータとして正しくなるような送り方をしてやればまた違った使い方ができるようになるかもしれません。
ともかく、次回の更新はこのあたりを中心に話していこうと思います。

ゼルダのトプ(毎度毎度ひどい略し方だ)は後半ダンジョンをひとつクリアしてやっと後半の目的が見えたところです。
新しく出てきた乗り物が結構爽快だったりします。
サブイベントのほうでもお店買収の話が出てきたりしてなかなか楽しくなってきました。

俺はお前が欲しい

ゼルダのトワイプ(またなんちゅう略し方だ)はいよいよマスターソードを手に入れて後半に突入しました!
ミドナ様もようやく色々語りかけてくれるようになってきて、しもべとして守り甲斐のある主人になってきました。
しかし、ザントが想像以上にエロそうなんだが…。

雰囲気チェンジ

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

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

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

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

フェードができました

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

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

ミディビ休止

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

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

404 Not Acceptable

ミディビで曲を送信できないという問題が報告されたので、調査してました。
とりあえず、実際のサーバーで動かしていると406エラーが出てリクエストが通らなかったらしいということがわかったので、何が悪くて受理されないのかを今調べているところです。

Wiiならではの過ち

うぅ~…。返品したくなってきた。
Wiiそのものが悪いのか相性が悪かったのか、とにかく操作性が悪すぎます。
ゲーム内容はすごく良かったからこれまで我慢して続けていたのですが、ちょっと今日のは堪りかねました。
弓矢を構えると、まずポインタを画面内に持っていく必要があるのですが、画面内に入るポイントを探す間にも敵は時々刻々迫ってきているので、弓を構えて固まったままゲームオーバーになること数知れず。
コントローラ一つを両手で持てないため弓矢の狙い撃ちは手ブレがひどいし、アナログスティックは方向が定まらない。
十字キーは武器の切り替えだったりアイテムの使用だったりと不統一でやたら操作ミスが、それも致命的なミスが多い。
これに関しては、Wiiなのだからガンコンみたいに人差し指で扱わせようとしたものなのでしょうが、そのおかげで十字ボタンの役割がセットしたアイテムによって異なっていちいち説明を見ないと誤使用必至というあまりにも非直感的なものとなってしまっていたのです。
そういう意味で言えば、ポインティングと全く同じ動作で剣を振るアクションが出るというのも不便。
さっきも書いたとおり、ポインティングはかなり難しいので、コントローラを適当に動かしながら画面内に収まる位置を探すのですが、それをやっていると剣を振る動作と誤認識されて、せっかく構えた弓がしまわれたりすることも日常茶飯事なのです。
クラシックコントローラやGCコントローラをつなげたら従来の操作に戻るなんてことはないのかなぁ…。

<2007年08月 2007年06月>