キャラ作ってます
Bomber丸Worldのマップシステム構築中です。
しかしやっぱり路線変更してキャラの動きのほうに走っています。
結局のところキャラが実際にする動きは行動アルゴリズムに関わらず上下左右に動くかその場で止まっているかのどれかであって、共通の部分はマップとはあまり関係ないので先に作れそうな気がしたのです。
行動アルゴリズム上どうしてもマップに依存する部分があるのでそこはまた後から作らなきゃいけないのですが。
Bomber丸Worldのマップシステム構築中です。
しかしやっぱり路線変更してキャラの動きのほうに走っています。
結局のところキャラが実際にする動きは行動アルゴリズムに関わらず上下左右に動くかその場で止まっているかのどれかであって、共通の部分はマップとはあまり関係ないので先に作れそうな気がしたのです。
行動アルゴリズム上どうしてもマップに依存する部分があるのでそこはまた後から作らなきゃいけないのですが。
ミディビのバグを一個修正しました。
長い音符を作ったときその音符をダブルクリックすると音符の内部に音符ができてしまうバグがありました。
バイオハザード4クリアしたそうですわ。
クラウザーが強いです。
まさに事実上のラスボス。
イージーであの強さって何事よ。
「しかも行動パターンは限られてる。」って、その限られた行動パターンが鬼なんですってば!!
もはやサバイバルホラーになっていません。戦争です。
それに比べてラスボスの弱いこと。
中ボスのエルヒガンテと倒し方そのものは同じなんですが、2つあるステップのうちの1つ目の撃ちまくってダメージを与える段階では弱点に一発命中させるだけでよくて、2つ目のボタン連打でダメージの部分は操作しなくても勝手に一発入れてくれるので、むしろ中ボスより弱いのです。情けなや。
Bomber丸Worldのキャラの動きはマップ構造に関係する部分があるのでマップのほうを先に作ることにしました。
しかしBomber丸Worldのマップは一つのマップにつき画像が一つだけという制限もないしアニメーションもするのでどのようにしてメモリ効率よく複数のマップチップを読み込ませるかでちょっと悩んでます。
とにかく画像が大きいと考えて、今は画像以外のデータと画像データを切り離して管理して、画像データは必要なときのみ読み込み、それ以外(現状では画像を読み込むためのデータと高さのみ)は常にメモリ上に置いておくという手法にしています。
やろうと思えば「それ以外のデータ」も適宜ファイルから読み込むようにできるのでしょうがあまり意味がないような気がします。
そうそう、ClipCaptorというのを作ってアップしました。
クリップボードに画像をコピーずると0.2秒後にファイルに書き出してクリップボードをクリアするというプログラムです。
たぶんベクターなどで探せば見つかるのでしょうが、探すより作ったほうが早いぐらいのものだったのでちゃちゃっと作ってみました。
Bomber丸Worldのキャラクター定義ファイルを作り始めました。
じゃあ、例を出してみます。
Name "クロ"
Animation "Black.and"
StopDelay 10
WalkDelay 10
Type Follow "White"
プログラム側ではまだ対応していません。
このファイルの書き方とか、ダウンロードのページにアップしてます。
ひそかにキャラごとに移動速度が違ったりします。
2月1日の日記に書いていたBomber丸Worldのアニメーション機能の問題ですが、データとしては4方向使えるようにしつつも、必要ない場所では3方向はデータを用意しない方法で、使用するメモリを押さえることができそうです。
ただそれだけであれば2月1日の時点でわかっていたのですが、問題はそれを生真面目にやろうとすると全てのアニメーションデータで方向を明記しなくちゃならなくて、それが結構な数になるということでした。
それを解決するために、省略時に自動的に指定される方向を決めるコマンドを作ってみました。
あ、でもマップチップとかはほとんどアニメーションしないからあまり意味はないのか。
まあいいや。気休め程度に。
ドラクエ8では今日神秘のビスチェだったか、そんなアイテムを手に入れて…そうそう、ゲームのページ更新しましたよ。
ラのつくあの風船について書いたんです。
マザー3が4月に発売されるとのことなのでまだクリアしていないマザー1をやってみました。
いや、これは。
今まではただ難しくて鬱陶しいだけだと思っていたんですが、イースターを越えてから急によくなりましたね。
イースターの宿屋で止まったときとか、バレンタインで踊ったりとか、ホーリーローリーマウンテンで…おっと、このネタバレはいけない。
うん、ドラクエのラのつく肥満体のことをばらすよりある意味いけない。
最後の仲間のあのにくい心配りがいいね。
しかも多分寝たふりだ。
弟がバイオ4を買ってきました。
はしごをはさんでの必死の攻防が笑えます。
レオンがはしごを倒す→村人がはしごを立て直す→村人、はしごを上る→レオン、村人を撃ち落とす→はしごを倒す、の繰り返し。
それとかA連打で必死でダッシュも笑えました。
それにしてもあのグラフィックは本当にすごかったですね。
ミディビのデータ復元処理、なんとかうまくいきました~♪
途中で16進数読み込みのところで無駄なデータを読み飛ばす条件を間違えて必要なデータまで読み飛ばしてしまったためにデータが復元できなかったり、データを記録する順番を間違えてしまったために限りなく長いデータができてしまってフリーズしたりもしましたがもう大丈夫なはずです。
復元用データは原則的に上位互換ではありますが下位互換性はありません(エラーが出ます)。
やってみればわかりますが出てくる復元用データは結構でかいです。
圧縮してあれなんだから圧縮しなかったらどれほどになっていることでしょう。
ついでに音色を選べるようにもしてみました。
これでピアノ曲からの脱却ができますよ。
で、クリア後になって初めてフリーズしました。
クリアするまでフリーズしないでくれていたことに親指を立てればいいのか結局8もフリーズすることに中指を立てればいいのか複雑な心境ですが、フリーズによる被害は高々、2つ上がったレベル、4匹ほど見つけたスカウトモンスター、1つの小さなメダル、パンドラボックス×4との戦いでの奇跡の大逆転、各地で見つけた宝箱、新たに発見した4つの錬金レシピ、そして成功した3つの錬金アイテム、スカウトモンスターのかっこいい連携技、ぐらいのものなので、別にそんなに気にしちゃいないです。
7のときのようにめちゃくちゃわずらわしいイベントがフリーズしたわけでもなし、モンスターズ2のように400時間のプレイデータがお気の毒ですがになったわけでもなし、軽いものです。
そういえば8のラスボスもマダンテ使えるらしいですね。
あっという間に死んじゃって使うところ見たことないんですが。
攻略サイトを見たら突破レベル38、うちのデータのレベルは45、楽勝なわけです。
ミディビのコーナー、プログラミングのほうのコンテンツはそろそろできそうですが、アプレットのほうはデータ形式をきっちり決めないといけないのでもう少し時間がかかりそうです。
で、勢いでクリアしちゃったドラクエ8だけど、どうやら今回はクリアしてからが本番だった模様。
旅の目的はラスボスを倒してトロデーンが元通りになった時点で達成したからエンディングでいいんだけど、そのストーリーに隠された裏話がクリア後に展開されるんですよ。
この裏話自体は旅の目的とは関係ないんでストーリー内に出てくる必要はなかったんです。
それがまさかこんな形で現れようとは!!
しかもクリア後ダンジョンは敵も程よく強く、つまり、気を抜いたら全滅しかねないほどの強さで、構造も実際以上に広く感じさせてまさにクリアしてなお物足りない人向けといった印象でした。
それだけにボスがそんなに強くなかったのは残念。
だけど今度からは正気に戻っての戦いだから今回みたいなみっともない行動はなくなるかな?
そうそう、バトルロードランクS、以前はセーブしていなかったので今回改めてクリアしました。
で、今回はレベルが上がっていたこともあって1・2回戦は順当に楽勝でクリアしたのですが、第3回戦、つまりモリー戦、ちょっと想定外のことが起こりました。
そこらの浜辺で捕まえたタコのリーが、絶妙なタイミングでベホマを使うリーが、最初のターンで麻痺させられてしまったのです。
回復手段を失い倒れる攻撃手二人、痺れが消えないリー。
もうだめだ。いい夢見させてもらったよ。
そう思った瞬間リーの痺れが消え、即座にザオラル。
なんと2回連続でザオラルが成功し、大逆転勝利を収めたのです。
前回戦ったときも劇的でしたが今回はもっと劇的で、なおかつ全員生存しての勝利、まさに理想的な勝利でした。
ミディビ、文字列テーブルをURLから読み込むようにしました。
CGIのときと同じようにSocketを使って読み込んでいます。
本当ならこういうことを一発で行うようなクラスがあればよかったんですけど探すのが面倒だったので地道な方法を使うことにしました。
しかしデータバックアップのほうは遅々として進まず。
一応バックアップ用のデータのフォーマットだけはおぼろげに決まったんですが、もしかしたら頼みの綱のクリップボードが使えないかもしれないのです。
こればかりは実際に試してみないとわかりませんが。
不愉快なモンスターを用意しおって!!
カジノで儲からないのも新しいレシピがうまくいかないのもお弁当が売り切れで変えないのも全てはにくきラの字のせいだ!!
そんなわけで、先日の脱力系ラの字を手っ取り早く倒し、その他もろもろの敵をハイテンションイオナズンで蹴散らして、外に出て風船ラの字をだし、7つのオーブをあっさり集めて(本当にただアイテムを集めるだけだった)、ラの字戦。
弱い。脱力系のほうが攻撃力だけでは強かった。
8では何かとパワーのインフレが起こっていたのにラの字だけはデフレーション。
笑えるバカであることは確かだけど、それだけ。
ドルちゃんのギリギリの死闘やレティスの圧倒的なパワーとは次元が違いすぎるんです!
いてつく波動ばかり使ってくるから大した攻撃は加えられないし、痛恨一発即死系の攻撃もしないし、回復が賢者の石だけでほとんど間に合っちゃうし、6や7のようにマダンテを使ってくることもなかったし、BGMがシューティング風味だし、どーなってるんですか。
こうなったらクリア後要素に期待。
エンディングはクラビウスとトロデが仕組んだな?聖堂騎士団が哀れ。
ミディビのファイルの保存について考えてました。
ミディビはMIDIデータだけをバイナリのまま送りつけてるんですがそれじゃ将来的には使えなくなるんですよね。
しぃPaintBBSが送信しているデータはヘッダとデータ本体でした。
そもそも掲示板として動かすためには二重投稿の問題についても考えなくてはいけません。
そこでMIDI投稿の流れを考えてみました。
自分用のリンク集を作ってました。
追加・編集・削除がかなり便利になりました。
工場見学に行ってきました。
うん、バイオハザードでゾンビがうろついていそうな工場でした(どういう形容やねん)。
そういえば昔のフロッピーの整理をしていたら小学生の頃に作ったくだらないプログラムが出てきました。
元祖バナナゲームとか、変な文章を作成するツールとか、そしてドキュメント中でことさらに年齢を強調。
再配布規定などもあったけど実は一時配布すらしていなかったり。
ミディビのデータ保護機能、とにかくJavaの外にデータを退避させておかなければJavaごと落ちたときに復旧ができないのです。
もちろんJavaが落ちるタイミングがわかるわけじゃないので常にどこかにデータのバックアップを取っておくことになります。
サーバー上に保存するというのは回線を切って作業できなかったりサーバー負荷が大きくなることなどから非現実的ですし、クライアント側のコンピュータにファイルとして保存するのもセキュリティの関係でできません。
そもそもバックアップがあったからといってどうやって復旧すればよいのでしょう。
画像のようにスクリーンショットが取れるわけじゃないのです。
そこで考えたのが、MIFUMIDIA上で復元可能な曲データを文字として表示し、コピーさせるというもの。
実際には面倒くさくてコピーなんてあんまりしないでしょうから、定期的に勝手にクリップボードにデータを転送します。
そうなるとユーザーがクリップボードを使えなくなるという弊害が出てくるのでデフォルトで自動バックアップは使わないようにして、「定期的にクリップボードに保存」にチェックを入れれば自動バックアップが働くようにします。
もちろんデフォルト設定はOFFです。
また、経験的にMIDIデータは同じ音が何度も続いたりして非常に冗長なので圧縮をかけてデータ量を減らします。
まともな曲を真面目に作るならどうしても10KB以上になってしまうことが多くて、その10KB分の文字というのが結構な量になったりするので圧縮が必要になるのです。
しかしそうすると高速圧縮アルゴリズムが必要になりますね。
ちなみに、この文字データをサーバー側のファイルに保存すれば、サーバーに一時保存してから後で再開するということもできるようになります。
2月1日、Bomber丸Worldのマップにかかるメモリを計算するときにさりげなく4をかけたりしていましたが、これは元々半キャラ分の大きさを当たり判定の単位にしようと考えていたからだったのですが、こうすると、二つのマップチップにキャラがまたがったときにどちらのマップチップを優先するかで困ってしまうため、やっぱり当たり判定等もマップチップの大きさとあわせることにしました。
本当は見た目に動きが不自然になるので嫌だったんですが遊びにくくなるよりはマシです。
実はこの方法、謎の男の歩き方にも悪影響を及ぼすのですが、しかしこうすることでメモリ使用量が単純計算で4分の1になるわけですから逆に言えば同じメモリで広いマップを作れるようになるので、やはりマップ優先で作ることにします。
ミディビ、なんだかエラーが起こるようです。
不完全な状態でロードすると本来起こらないはずの例外が発生するというのはわかっていましたがJavaごと落ちるというのは完全に想定外でした。
エラー終了してもどこかにデータを残しておく方法はないかな…。
あのあとかなりブラウザのキャッシュに泣かされましてね、いやホントに泣きました。
ブラウザのキャッシュを消してもJavaのキャッシュを消しても保存しないように設定しても昔のアプレットが出てきて、結局呼び出すごとにファイル名を変えることでキャッシングを回避しました。
そしてその結果がありえないNullPointerException。
絶対に起こらないように注意深くコーディングしたはずなのに。
原因はいつぞやのセキュリティエラー。ならもっと的確な例外出せっつーの!
まあ、そんなこんなでいろいろ機能追加しました。
色分けとか全トラック表示とか。
ゼルタク、大地の神殿をクリアしたのですがハーラの写真を撮り忘れていたので神殿に入るずっと前のデータからやり直しました。
そういえば後半ダンジョンの厄介な敵フロアマスターの効率的な倒し方を見つけましたよ。
それは、出てきた瞬間ブーメランで気絶させて剣で斬り、ダメージを与えたらすぐさままたブーメランを当てて気絶させ剣で斬るという動作を繰り返すのです。
フロアマスターはつかまれると特定の場所に連れて行かれますし、地中に引っ込まれたら穴の上にいるリンクがやはり引きずり込まれるので、フロアマスターを倒すときには絶対にフロアマスターに動く隙を与えないのが肝心なんですよ。
もっとも、やり直しデータでは急いでいたので不意打ちを食らって一度メドリが連れ去られてそれを追って自分もフロアマスターにつかまれに行ったりしたんですが。
そして2回目は1回目の過ちを繰り返さないために写真を撮るだけ撮ってセーブ。
こうすればもし写真がうまく取れていなくてもハーラは倒されていないので撮り直しができるんですよ。
そういえば撮り直しといえば、今回すごく納得できないことが!!
それは、夜プロロ島に行って、ヂルのかわいい寝顔を撮影し、ハジメに見せに行ったら、顔がちゃんと写ってないとか言ってたんです!!
その後昼に行って起きて立っている状態の当たり障りのない写真でOKだったんですがやっぱりあまりよい気分ではありませんでした。
そうそう、ミディビのコーナー更新準備中です。
日付が変わる前に更新したい。
すごく久しぶりにちびロボやってみました。
やっぱりストーリーは進みません。
いつもと同じマンネリとした空気。
掃除だけして半日終了。
ミディビでメッセージ画面を作っています。
結局メッセージボックスが出せなかったからビューの部分にメッセージを出すことにしたんです。
一応基本部分はできたのでこれから見栄えを良くしたり機能拡張していくことになります。
ドラクエ8、バトルロードランクSに出場してみました。
いや、モリーの選んだ最強の2人というのがどうしても気になりまして。
で、登場したのがトの付く肥満商人とラの付く王宮の戦士。
個人的にはモンスターズ2のイルとルカをすごく期待してたんだけどな…。
ミディビのもう一つの保存形式を考えています。
とりあえず、4バイトの識別子とそれに続くデータを一塊にしてそれをずらずらと並べていこうと思っています。
ドラクエ8、ラプソーン倒す前のデータから始めてバトルロードランクA制覇。
そこらの浜辺で捕まえたタコが役に立った。
絶妙なタイミングでのベホマ、持てる力を無駄なく使ったさみだれ突き。
そしてランクS登場。
風のタクト、妖精の女王に会った。
いつ見ても良いキャラクターだと思った。
そしてゲーム中一度しか会えないことを残念に思った。
火山の中のアイテムは入手した。
氷山の中のアイテムは入手できなかった。
ドラクエ8、ラプソーンに勝つには勝ったけどやっぱり負けた気分…。
さあラプソーン、冗談はここまでにして本気を出したらどうだ。と思っていたらそのままとけてぶしゅー…。
その後脱出イベントでただ叩くだけが能の敵にラプソーンと同じ音楽が使われていたのが悲しくも印象的でした。
で、なんかまたラプソーンが現れて魔力吸って風船みたいに膨れ上がったんですがあれはあれで期待はずれ。
この後はドラクエ3のラーミアと同じ展開だそうです。
ミディビ更新しようと思ったんですがちょっと送信データの改善案を考え付かなかったのでまたあとになりそうです。
ラプソーンに負けました。もう、完全に。
甘かった。完全に計算違いだった。まさかラプソーンがあんなのだったとは。
装備はまともだし、アイテムは万全を期していっていたし、HPもMPも充分にあって、回復も早め早めにやっていました。
ですがあれは避けようがない。
まさか、ドルマゲスの気持ちを知ってしまうことになるとは。
悲しいなあ。悲しいなあ。
ラプソーンがあんなのだったなんて。
爆ボンのラスボスのページを更新しました。
こちらもまた重要ボス、というよりラスボス自身の気持ちになって書いてみました。
悲しいなあ。悲しいなあ。
掲示板ちょっといじってみました。
本当は記事の削除を作ろうと思っていたのですがその前にローカルではクッキーを記録してもオンラインとは別のユーザー扱いになってBBSデータのバックアップを取るときにローカルのユーザー情報が消えてしまって不便だったので記録されているユーザー情報からクッキーを復元する機能を作りました。
この復元機能、本当はひらがなのふっかつのじゅもんにしたかったのですが復元の難しさ(というより面倒さ)や正当性チェックなどの問題があって一般的なID・パスワード方式にすることになりました。
こっちのほうはもう実装が楽で楽で。
NeoMuplのVC++での開発を開始しました。
MFC使おうかとも思ったのですが前にMFCを無理に使おうとして撃沈したことがあったのでノーマルなWindowsAPIを使ってウィンドウのデザインはすることに決めました。
とは言えどもラッパークラスを作らないことには管理が大変なので自己流のMFCっぽいものを作ることにはなるんですが。
まあ、音声の再生にはDirectShowを使うかそれが技術的に難しければ何か他の使いやすいライブラリでも使おうかと思っています。
なんかWord不便だなーと思ってしまいます。
なんか知らんがエクセルのワークシートをオブジェクトとして貼り付けて編集したらデータが壊れているとかなんとか言われてこれ以上の変更ができなくなったり、何の説明もなく図が拡大されたり、縮小されたビットマップの編集をするとスクロールバーが使えなかったり、とにかく挿入されたオブジェクトに関してかなり不便な思いをしています。
しかしオブジェクトを既存ファイルへのリンクとして貼り付けるとワード側では編集せずに済むのでものすごく効率が上がります。
ファイルは増えてしまいますがフォルダ分けすれば問題ないのでこれで解決…だけどやっぱりこれはおかしいよマイクロソフトさん。
お絵描き掲示板のスタイルを微調整しました。
不必要な線が出ていたので消して必要な線を強くしてみました。
ミディビの開発はそろそろプログラミングコーナーからは独立させようと思います。
このごろいい加減プログラム的に面白い内容が少なくなってきてこのままいくと今日はコレやりましたの報告になっていきそうなのですよ。
というわけでプログラミングコーナーを差し置いてミディビのコーナーだけ更新しました。
スクロールバーがどんどん勝手に長くなっていくのでいくらでも長い曲が作れますよ。
Bomber丸Worldのアニメーション機能がエラーを起こしていたので直しました。
原因は機械的な置換ではすまないところを機械的に置換してしまったことにあったようです。
MIFUMIDIA、特定の環境で灰色画面になることがあるようです。
おそらくJavaのバージョンの違うゆえのものだろうけど今確認できる状況にないんですよね…。
だから想像で改善していくしかありません。
それと空MIDIを送信できてしまう症状。
これも改善しなきゃいけません。
早いうちに突っ込まれてよかった。
本格始動してからだとカッコ悪いことこの上ない。
そーいえばテレビでナウシカ見ました。
アニメのほうだと登場人物があんまり死ななくて安心して見てられます。
原作ではユパ様もテトもカイも死んじゃうんだもんね。
クロトワさんもかなりズタズタにされちゃいます、本当に物理的に。
ナウシカは蟲使いに女神様と呼ばれてたり。
スマブラを久しぶりにやってみたら十人組み手で次々記録更新。
全員15秒以内にクリアを果たしました。
多くのキャラで上強攻撃が有効のようですね。
そして続けてヨッシーで百人組み手クリア。
ヨッシーの場合下強攻撃がザコ軍団には有効です。
そして更に更にホームランコンテストでも記録更新。
特に今までずっと足を引っ張り続けていたドンキーで大きく記録を伸ばしました。
ホームランバットを取ってから、ヘッドバット→下強攻撃→下スマッシュ、を2回、落ちてきたサンドバッグ君にSMAAAAASH!!!
Bomber丸Worldのフィールドマップ、ファミコン・スーパーファミコンのDQやFFのように世界地図の上を歩く感じで行こうと思っていたのですが、そうすると広い範囲が一気に見えて、パルネッド王国にはほとんど町がない田舎国というイメージが付いてしまうので、ここは一つ、完全3DのRPGのように町の中とフィールドをほぼ同じ縮尺にして同じ感覚で移動できるようにしようと思います。
そもそもフィールド上で起こるイベントも結構あったりするのでフィールド上でも普通に人が表示できるようにしたかったんですよね。
しかしそうするとますますマップサイズが…。
となれば連続したマップでも少しずつ必要な部分だけ断片を読み込んでいってシームレスにつなげるということになるのか。
ちょっと面倒そうだぞ。
Bomber丸Worldのアニメーション機能をマップチップとして使うときにメモリ効率がよくなるように改造を加えていました。
しかしキャラクターには前後左右を向いたバージョンがあり、マップチップは同じものを大量に表示するという特性の違いがあるので両方にバッチリ合うものって作りにくいんですよね。
あるいは最近のハイスペックなパソコンでは適当に使いまくって問題ないものなのでしょうか。
しかし最近のソフトが好き放題に無茶をやっているのはハイスペック化もさることながらそれ以上に特定の無茶に特化したハードウェアの上で特定の無茶をしているからなんとか動いているような気がするのです。
32bitWindowsで開発している以上何MBというオーダーでメモリを消費するのならそれはメモリ節約を……そんなに使うのか?
画像とは別にマップチップ固有の情報が一つあたり1KBあるとしましょう。
そうすると、320x240のワールドマップで75MB……節約を考えねば。
マップチップに特化した方式ならばマップチップ一枚あたりに必要なメモリは画像マップ用データ4B、キャラマップ4x4B、高さマップ4x4B、計36Bとなります。
それでも全部で2.6MBか……まあまあ許容範囲か。
更にこの方式でキャラを100人表示すると、すごく複雑なキャラクターを使っても1MB以内。マップ重視だな。
学習帳を更新しました。
今回は半導体レーザという分野を扱っています。
しかも教授にOKもらったのと同じ内容なのでそれなりに信憑性はあるはず!!
NeoMuplの今後について考えています。
既にVBのプロジェクトは破棄しています。
何を実装すべきかを先に考えておく必要があるかもしれません。
そういうことでNeoMuplのページに実装したい機能を列挙してみました。
まあできる範囲で適当にやってみましょう。