「ミディビ」に関する日記(3)

<前 次>

モンキーウォーク

ミディビ更新しました。
できること自体はそんなに変わっていません。

Bomber丸Worldのキャラの動きについて考えてます。
動きタイプをFollowにすると基本的に特定の人物についていくんですが、実は人によって歩調が違ってましてね、つまり、相手の動きが速いと取り残されることがあるということです。
それから更に踏み込んで考えたのが、バルーンモンキー。
バルーンモンキーって知ってますか?マザー2の。
ジェフの後についてくるキャラクターなんですが、ほっとくとしばらくその辺をうろうろしていて、ある程度距離を置くと思い出したように駆けつけてくるんです。
そのようにしてつかず離れず追いかけてくるのがバルーンモンキー。
これが結構面白そうなのでやってみたいのです。
アルゴリズムは案外簡単です。
ある距離以上に離れるまではRandomで歩かせておいて、離れたらFollowモードに内部的に切り替えるのです。
あと、前に言ったかどうか知りませんが、相手を押すというシステムも作っています。
押すリスクも加えて追いかけるプログラムを書くのは少し難しそうな気がしますがそう難しくもなさそうなのでまあできそうな気がします。(どっちだ

エラー処理

ミディビ作ってます。
エラー処理をちょっと作ってます。
プログラミングコーナーのほうも作っていますよ。

バグ修正

ミディビのバグを一個修正しました。
長い音符を作ったときその音符をダブルクリックすると音符の内部に音符ができてしまうバグがありました。

ミディビもフリーズするんだね

ミディビのデータ復元処理、なんとかうまくいきました~♪
途中で16進数読み込みのところで無駄なデータを読み飛ばす条件を間違えて必要なデータまで読み飛ばしてしまったためにデータが復元できなかったり、データを記録する順番を間違えてしまったために限りなく長いデータができてしまってフリーズしたりもしましたがもう大丈夫なはずです。
復元用データは原則的に上位互換ではありますが下位互換性はありません(エラーが出ます)。
やってみればわかりますが出てくる復元用データは結構でかいです。
圧縮してあれなんだから圧縮しなかったらどれほどになっていることでしょう。
ついでに音色を選べるようにもしてみました。
これでピアノ曲からの脱却ができますよ。

8もフリーズするんだね

で、クリア後になって初めてフリーズしました。
クリアするまでフリーズしないでくれていたことに親指を立てればいいのか結局8もフリーズすることに中指を立てればいいのか複雑な心境ですが、フリーズによる被害は高々、2つ上がったレベル、4匹ほど見つけたスカウトモンスター、1つの小さなメダル、パンドラボックス×4との戦いでの奇跡の大逆転、各地で見つけた宝箱、新たに発見した4つの錬金レシピ、そして成功した3つの錬金アイテム、スカウトモンスターのかっこいい連携技、ぐらいのものなので、別にそんなに気にしちゃいないです。
7のときのようにめちゃくちゃわずらわしいイベントがフリーズしたわけでもなし、モンスターズ2のように400時間のプレイデータがお気の毒ですがになったわけでもなし、軽いものです。
そういえば8のラスボスもマダンテ使えるらしいですね。
あっという間に死んじゃって使うところ見たことないんですが。
攻略サイトを見たら突破レベル38、うちのデータのレベルは45、楽勝なわけです。

ミディビのコーナー、プログラミングのほうのコンテンツはそろそろできそうですが、アプレットのほうはデータ形式をきっちり決めないといけないのでもう少し時間がかかりそうです。

竜神族の里

で、勢いでクリアしちゃったドラクエ8だけど、どうやら今回はクリアしてからが本番だった模様。
旅の目的はラスボスを倒してトロデーンが元通りになった時点で達成したからエンディングでいいんだけど、そのストーリーに隠された裏話がクリア後に展開されるんですよ。
この裏話自体は旅の目的とは関係ないんでストーリー内に出てくる必要はなかったんです。
それがまさかこんな形で現れようとは!!
しかもクリア後ダンジョンは敵も程よく強く、つまり、気を抜いたら全滅しかねないほどの強さで、構造も実際以上に広く感じさせてまさにクリアしてなお物足りない人向けといった印象でした。
それだけにボスがそんなに強くなかったのは残念。
だけど今度からは正気に戻っての戦いだから今回みたいなみっともない行動はなくなるかな?
そうそう、バトルロードランクS、以前はセーブしていなかったので今回改めてクリアしました。
で、今回はレベルが上がっていたこともあって1・2回戦は順当に楽勝でクリアしたのですが、第3回戦、つまりモリー戦、ちょっと想定外のことが起こりました。
そこらの浜辺で捕まえたタコのリーが、絶妙なタイミングでベホマを使うリーが、最初のターンで麻痺させられてしまったのです。
回復手段を失い倒れる攻撃手二人、痺れが消えないリー。
もうだめだ。いい夢見させてもらったよ。
そう思った瞬間リーの痺れが消え、即座にザオラル。
なんと2回連続でザオラルが成功し、大逆転勝利を収めたのです。
前回戦ったときも劇的でしたが今回はもっと劇的で、なおかつ全員生存しての勝利、まさに理想的な勝利でした。

ミディビ、文字列テーブルをURLから読み込むようにしました。
CGIのときと同じようにSocketを使って読み込んでいます。
本当ならこういうことを一発で行うようなクラスがあればよかったんですけど探すのが面倒だったので地道な方法を使うことにしました。
しかしデータバックアップのほうは遅々として進まず。
一応バックアップ用のデータのフォーマットだけはおぼろげに決まったんですが、もしかしたら頼みの綱のクリップボードが使えないかもしれないのです。
こればかりは実際に試してみないとわかりませんが。

どっちにすべきか

ミディビのファイルの保存について考えてました。
ミディビはMIDIデータだけをバイナリのまま送りつけてるんですがそれじゃ将来的には使えなくなるんですよね。
しぃPaintBBSが送信しているデータはヘッダとデータ本体でした。
そもそも掲示板として動かすためには二重投稿の問題についても考えなくてはいけません。
そこでMIDI投稿の流れを考えてみました。

  1. アプレットからCGIにPOSTでデータを渡す(ただし、データは、MIDI本体のデータに加え、ユニークな識別番号と、その他必要な情報を有する)
  2. 最近投稿されたファイルのログに同じ識別番号がないかどうか確認し、なければ保存し、ログに識別番号を記入する
  3. 掲示板ログに同じ識別番号がないか確認し、なければコメント記入フォームを表示し、あれば二重投稿として処理する
  4. 最近投稿されたファイルのログから識別番号を削除する
  5. あとは普通の掲示板と同じ
というわけで、送るデータはMIDIだけではいけなさそうです。
さて、テキストで送るかバイナリで送るかがまた悩みどころです。
CGI側でテキストデータをバイナリにデコードするのは実はかなり容易です。
アプレット側でバイナリデータを16進文字列データにエンコードするのもそのためのOutputStreamを容易に作れます。
しかし問題は送信データが単純計算で2倍になるということです。

クリップボードに保管

ミディビのデータ保護機能、とにかくJavaの外にデータを退避させておかなければJavaごと落ちたときに復旧ができないのです。
もちろんJavaが落ちるタイミングがわかるわけじゃないので常にどこかにデータのバックアップを取っておくことになります。
サーバー上に保存するというのは回線を切って作業できなかったりサーバー負荷が大きくなることなどから非現実的ですし、クライアント側のコンピュータにファイルとして保存するのもセキュリティの関係でできません。
そもそもバックアップがあったからといってどうやって復旧すればよいのでしょう。
画像のようにスクリーンショットが取れるわけじゃないのです。
そこで考えたのが、MIFUMIDIA上で復元可能な曲データを文字として表示し、コピーさせるというもの。
実際には面倒くさくてコピーなんてあんまりしないでしょうから、定期的に勝手にクリップボードにデータを転送します。
そうなるとユーザーがクリップボードを使えなくなるという弊害が出てくるのでデフォルトで自動バックアップは使わないようにして、「定期的にクリップボードに保存」にチェックを入れれば自動バックアップが働くようにします。
もちろんデフォルト設定はOFFです。
また、経験的にMIDIデータは同じ音が何度も続いたりして非常に冗長なので圧縮をかけてデータ量を減らします。
まともな曲を真面目に作るならどうしても10KB以上になってしまうことが多くて、その10KB分の文字というのが結構な量になったりするので圧縮が必要になるのです。
しかしそうすると高速圧縮アルゴリズムが必要になりますね。
ちなみに、この文字データをサーバー側のファイルに保存すれば、サーバーに一時保存してから後で再開するということもできるようになります。

2月1日、Bomber丸Worldのマップにかかるメモリを計算するときにさりげなく4をかけたりしていましたが、これは元々半キャラ分の大きさを当たり判定の単位にしようと考えていたからだったのですが、こうすると、二つのマップチップにキャラがまたがったときにどちらのマップチップを優先するかで困ってしまうため、やっぱり当たり判定等もマップチップの大きさとあわせることにしました。
本当は見た目に動きが不自然になるので嫌だったんですが遊びにくくなるよりはマシです。
実はこの方法、謎の男の歩き方にも悪影響を及ぼすのですが、しかしこうすることでメモリ使用量が単純計算で4分の1になるわけですから逆に言えば同じメモリで広いマップを作れるようになるので、やはりマップ優先で作ることにします。

hs_err_pid

ミディビ、なんだかエラーが起こるようです。
不完全な状態でロードすると本来起こらないはずの例外が発生するというのはわかっていましたがJavaごと落ちるというのは完全に想定外でした。
エラー終了してもどこかにデータを残しておく方法はないかな…。

ありえない例外

あのあとかなりブラウザのキャッシュに泣かされましてね、いやホントに泣きました。
ブラウザのキャッシュを消してもJavaのキャッシュを消しても保存しないように設定しても昔のアプレットが出てきて、結局呼び出すごとにファイル名を変えることでキャッシングを回避しました。
そしてその結果がありえないNullPointerException。
絶対に起こらないように注意深くコーディングしたはずなのに。
原因はいつぞやのセキュリティエラー。ならもっと的確な例外出せっつーの!
まあ、そんなこんなでいろいろ機能追加しました。
色分けとか全トラック表示とか。

フロアマスター

ゼルタク、大地の神殿をクリアしたのですがハーラの写真を撮り忘れていたので神殿に入るずっと前のデータからやり直しました。
そういえば後半ダンジョンの厄介な敵フロアマスターの効率的な倒し方を見つけましたよ。
それは、出てきた瞬間ブーメランで気絶させて剣で斬り、ダメージを与えたらすぐさままたブーメランを当てて気絶させ剣で斬るという動作を繰り返すのです。
フロアマスターはつかまれると特定の場所に連れて行かれますし、地中に引っ込まれたら穴の上にいるリンクがやはり引きずり込まれるので、フロアマスターを倒すときには絶対にフロアマスターに動く隙を与えないのが肝心なんですよ。
もっとも、やり直しデータでは急いでいたので不意打ちを食らって一度メドリが連れ去られてそれを追って自分もフロアマスターにつかまれに行ったりしたんですが。
そして2回目は1回目の過ちを繰り返さないために写真を撮るだけ撮ってセーブ。
こうすればもし写真がうまく取れていなくてもハーラは倒されていないので撮り直しができるんですよ。
そういえば撮り直しといえば、今回すごく納得できないことが!!
それは、夜プロロ島に行って、ヂルのかわいい寝顔を撮影し、ハジメに見せに行ったら、顔がちゃんと写ってないとか言ってたんです!!
その後昼に行って起きて立っている状態の当たり障りのない写真でOKだったんですがやっぱりあまりよい気分ではありませんでした。

そうそう、ミディビのコーナー更新準備中です。
日付が変わる前に更新したい。

いつもと同じ日常

すごく久しぶりにちびロボやってみました。
やっぱりストーリーは進みません。
いつもと同じマンネリとした空気。
掃除だけして半日終了。

ミディビでメッセージ画面を作っています。
結局メッセージボックスが出せなかったからビューの部分にメッセージを出すことにしたんです。
一応基本部分はできたのでこれから見栄えを良くしたり機能拡張していくことになります。

モンスターズ

ドラクエ8、バトルロードランクSに出場してみました。
いや、モリーの選んだ最強の2人というのがどうしても気になりまして。
で、登場したのがトの付く肥満商人とラの付く王宮の戦士。
個人的にはモンスターズ2のイルとルカをすごく期待してたんだけどな…。

ミディビのもう一つの保存形式を考えています。
とりあえず、4バイトの識別子とそれに続くデータを一塊にしてそれをずらずらと並べていこうと思っています。

ラスボスじゃないのかよ!

ドラクエ8、ラプソーンに勝つには勝ったけどやっぱり負けた気分…。
さあラプソーン、冗談はここまでにして本気を出したらどうだ。と思っていたらそのままとけてぶしゅー…。
その後脱出イベントでただ叩くだけが能の敵にラプソーンと同じ音楽が使われていたのが悲しくも印象的でした。
で、なんかまたラプソーンが現れて魔力吸って風船みたいに膨れ上がったんですがあれはあれで期待はずれ。
この後はドラクエ3のラーミアと同じ展開だそうです。

ミディビ更新しようと思ったんですがちょっと送信データの改善案を考え付かなかったのでまたあとになりそうです。

無制限に長く

ミディビの開発はそろそろプログラミングコーナーからは独立させようと思います。
このごろいい加減プログラム的に面白い内容が少なくなってきてこのままいくと今日はコレやりましたの報告になっていきそうなのですよ。
というわけでプログラミングコーナーを差し置いてミディビのコーナーだけ更新しました。
スクロールバーがどんどん勝手に長くなっていくのでいくらでも長い曲が作れますよ。

蟲使い、蟲捨てた。

Bomber丸Worldのアニメーション機能がエラーを起こしていたので直しました。
原因は機械的な置換ではすまないところを機械的に置換してしまったことにあったようです。

MIFUMIDIA、特定の環境で灰色画面になることがあるようです。
おそらくJavaのバージョンの違うゆえのものだろうけど今確認できる状況にないんですよね…。
だから想像で改善していくしかありません。
それと空MIDIを送信できてしまう症状。
これも改善しなきゃいけません。
早いうちに突っ込まれてよかった。
本格始動してからだとカッコ悪いことこの上ない。

そーいえばテレビでナウシカ見ました。
アニメのほうだと登場人物があんまり死ななくて安心して見てられます。
原作ではユパ様もテトもカイも死んじゃうんだもんね。
クロトワさんもかなりズタズタにされちゃいます、本当に物理的に。
ナウシカは蟲使いに女神様と呼ばれてたり。

おまえの星

メテオスデータベース更新です。
手持ちのメテオ数と目標メテオ数を入力すると目標値に一番速く近づける惑星を計算してくれます。

そうそう、ミディビ、今度は送信データを見直そうと考えています。
お絵描き掲示板のように投稿した作品を後でまた修正するとなると出来上がったMIDIからでは編集用のデータは作りにくいので簡単に編集用データを復元できるようなデータも一緒に作って保存させたいんですよ。
そのためには2つのファイルのデータとサイズを渡さねばなりません。
必然的にデータ送信は変更せざるを得ないでしょう。

そうそう、音楽つながりで、Bomber丸WorldのBGM作ってました。
まだ途中ですがせっかくなのでアップしておきます。

1138717272.mid

謎の男

最近日記を書くだけ書いてアップするのを忘れがちです。
特に他のコンテンツの更新とかぶっていたりすると一緒にアップしただろうと思い込んで確認を怠ることがあるようです。

ミディビの投稿データを毎回別のファイル名にして保存するようにしました。
過去ログを残すとか、将来掲示板として稼動することを見越して、というよりブラウザのキャッシュ対策だったりします。

ドラクエ8ではラストダンジョンらしき場所に潜入。
なぜか図書館があったり、クレイジーな量のタルがおいてあったり、リレミトで脱出できずにルーラが使えたり、手入れが行き届いていなくてそこいらじゅうボロボロになっていたり、従来のラストダンジョンとは違った雰囲気がありました。

Bomber丸World、マップデータの方式が決まりません。
一つのマップに二つ以上のマップチップ素材があってもかまわない方式でないと困るんですよね。
だけどマップチップ一つ一つに対してどのファイルのどこのデータですというデータを書いていけば面倒なことこの上ないし、できれば番号で管理したいのです。
となれば別のファイルでどのファイルのどのデータかという情報に通し番号を付けてマップデータのほうではその番号に従ってマップを作ればよいのでは?
しかしそうなると番号のつけ方が問題に…。
それはそうと、今日の絵は謎の男仮バージョン。
輪郭に色つけると思ったよりよくなるね。

1138628860.gif

台無し

ミディビ更新ですよ。
で、ためしに一曲作ってみたらキャッシュのせいでうまく保存されたMIDIがならなくて頑張って作ったのが台無しになってしまいましたよ。
アプレット自体に問題はないはずだけど。

騎士団長

マ、マルちゃんすげえ。
暗黒神を支配し利用してやがった。
しかし主人公らが余計な手出しをしたせいで結局ラプちゃん復活。
いや、でも案外これでよかったのかも。
そうでないとマルちゃんがラスボスに…?

ちょっとアクセス解析でディレクトリごとのアクセスの様子を見てみました。

1. /tokio6/ 178,249 28.61%
昔の遺産ですな。ずいぶんと長いこと皆をだましてました。
2. /akiyame/ 67,402 24.35%
飽きる前に忘れ去っているので意外に消えなかったりします。やっぱり繋ハートが強い。
3. /gohma6/ 170,821 23.55%
昔の遺産。どちらかというと馴れ合いサイト。
4. [root directory] 52,815 6.07%
正面玄関。リンク集やブックマーク経由だと大抵一度は通るんですよね。
5. /prog/ 33,910 4.96%
なんだかんだ言ってもメインコンテンツ。更新が少なくてもメインコンテンツ。
6. /diary/ 10,471 3.17%
更新量最大だけあって結構見てくれてますな。おそらくほとんどがリピーター。
7. /game/ 9,526 2.94%
「爆ボンバーマン 攻略」でYahoo!検索1位に君臨するんだから多くても不思議はありません。エアライド関係でも結構来てくれてるんですよね。
8. /dl/ 8,503 2.31%
かつては事実上のメインコンテンツだったのですが…。ページ構成を見直さねば。
9. /cgi/ 17,056 1.51%
この内部に特設サイトを作っていて大きなサイトからリンクしてもらってるので結構人が来てます。
10. /tgscript/ 9,663 0.85%
掲示板ですな。リピーターさんは何も書かないときでも結構見てるものです。
11. /profile/ 906 0.46%
1ページが馬鹿みたいにでかい。それだけ。
13. /ul/ 2,615 0.20%
電子工学系を今後充実させていきたいです。
14. /links/ 1,435 0.18%
どうでもいい。
15. /hpm/ 1,305 0.17%
欠番の12位は実は一代目HPM。だからそれ以上のところにはいきたい。
16. /midib/ 1,134 0.09%
ミディビはまだまだマイナーな様子。やはり必要な機能を早く実装しないと。
17. /support/ 493 0.08%
必要なときに見てもらえればそれで充分なので。
18. /gift/ 15 0.06%
ずたきゅん専用。
ミディビとダウンロードを頑張らねば。

掲示板が文字化けするようだったので直しました。
GBBS時代の文字数を可能な限り少なくする過剰に省略した書き方のせいで文字コードがブラウザに渡されず結果ブラウザだけの判断で最初のTGWSを見て英語らしいと判断されてしまっていたのが原因だったようです。

ミディビの開発やってます。
アンケートの結果多くの人がアプレット実行可能な環境でないこと、たとえ実行できても正しく音が鳴るとは限らないことがわかったのでそっち方面に改良を加えています。
それに伴いアンケートのほうは終了させました。

<前 次>