日記(998)

<前 次>

色のない世界

レ、レティス強っ!
どうせ異世界とやらでレティスと対決でしょ?
なんて軽い気持ちで行ったら攻撃力、防御力ともに桁外れの強さ!
例のアポロンたちの最強モンスターチームをけしかけたらたいしたダメージを与えることもできず瀕死になって退却。
普段はどんな相手にでも余裕で150以上のダメージを与えていくアポロンの攻撃で70前後のダメージしか与えられないし、普段はどんなに強い攻撃を受けても60程度のダメージまでしか受けなかったでんすけが一発で180を超えるダメージ!
これで1ターン2回行動でもされた日にゃもう逃げ帰るしかありませんわなこりゃ。
そんな相手にその後モンスターチーム抜きで戦わなきゃならないんですから大変です。
主人公ハーゴンの攻撃がたった18のダメージ。
そんな情けないダメージはゼシカと出会う前にとっくに卒業してたはずなんですが。
そんなものだからククールの攻撃はわずか4のダメージ。
メタルじゃない相手にダメージ一桁ですよ!
涙が出てきます。
そんなことだから主砲ヤンガスの渾身の一撃も80前後のダメージどまり、ゼシカが最近覚えたメラゾーマも40程度のダメージのみ。
そしてHP・守備力共に最強のヤンガスが体力を充分残していたはずなのに1ターンで瞬殺されてしまったときには勝てる相手ではないと覚悟しましたね。
補助呪文も全く効きませんでしたし、まともなダメージを与えようとテンションをため始めたら絶妙のタイミングでいてつく波動!
全滅を確信したワレワレはせめて死ぬ前に少しでもダメージを、と、残る力全てを攻撃に集中して戦いました。
倒れる仲間、MPが残る限りザオリクで呼び戻すククール、こまめにベホマズンを唱えていたのに結局瞬殺されてしまったハーゴン、そして次の瞬間、ヤンガスの攻撃。

「レティスをやっつけた!」

1万を超える経験値。
ぶっ倒れたままのハーゴン。
進むイベント。
まだ倒れたままのハーゴン。
本当はワレワレが戦ったよりはるかに強いレティス。
自動で生き返らないハーゴン。
人質、もとい卵質をとられているレティス。
聞いてないハーゴン。
卵奪還に向かうことになったワレワレ。
イベントに完全に取り残された主人公ハーゴン。
ハーゴン…。

爆ボンのグリーンガーデンのページを少し更新しました。
パワーの取り方について質問があったのでその答えを。

なんとずさんな!

見ての通りふにゃふにゃ、最後の更新です。
シークレットを大放出して終了!
と思って添付のドキュメントを書き換えようと開いたら別の更新内容が1.06の場所に書かれているではありませんか。
なんと、更新していたにもかかわらず公開するのを忘れていたのです!
そして圧縮前の最後の確認で、アーカイブに入れるファイルだけを専用のフォルダに移動して実行。
BGM音程ずれてるし音量もめちゃくちゃ!
改良されたバージョンのBGMじゃなかったんです!
なんと、BGM改良するだけしておいて配布用データに反映するのを忘れていたのです。
まあともかく、忘れてたのをいろいろ追加して更新完了、開発終了です。
あのボスが出てくることのできるバージョンは今後やる気があれば作りましょう。

ぎゃっはっはっは!

笑いが止まらん!
ドラクエ8で・・・ドラクエ8で!!
新たなレシピ発見!!
なんとなくふざけていろんなもの放り込んだらできてしまった!!!
とりあえずレシピ表風味に表すと次のような感じ。
究極のチーズ=チーズ+カビ+うんこ!!

そういえば今日は読売テレビの見学に行きました。
滞りなく終わったことだけ言っておきます。

うぷぷぷ・・・トーポ可哀想やわ。

3Dの結末

どないしよー。
それでDirectDrawとDirect3Dでやってみようと思ったんだけど3D部分にドット絵を置いたらやっぱりドット抜けが起こって元の木阿弥なのです。
じゃあそもそも3Dでやりたかったことって何だったのか。
まずマップの前後関係のためのZバッファはZソートによって完全に無意味になっています。
エレコやギャモンは、正直、ポリゴンでさえあればなんだっていいし、アクセラレータを使わずとも自前の計算で充分何とかなるポリゴン数に収まるはずなのでこの点でもあまり意味はないわけです。
そしてDirectDrawだけではできないこと、半透明処理…やねさん、またライブラリ貸してもらいます。

バージョンダウン

えっとですね、描画エンジン、マップ表示の段階が出来上がりました。
結果はというと・・・・
・・・・
・・・・
惨憺たる結果でした。全くお話にもなりません。
ハードウェア的な相性もあるのでしょうが、これではドット絵など使えたものではありません。
とにかく今わかったことは、DirectX8はドット絵の描画にはとても使えたものじゃないということ。
おそらくDirectX9でも10でも同じことでしょう。
将来この問題が改善されるとしても私はもうそんなものに興味はありません。
逆にバージョンを下げてDirectX7を使えばDirectDrawというドット絵に特化したコンポーネントがあります。
そしてDirectDrawはDirect3Dの描画先として使うこともできます。
バージョンを落として不自由なことはありません。
プレイできる層が増え、更に表現力まで高まるのなら、それを使わない手はないでしょう。

ちなみに画像はDirect3D8で小さなドット絵を貼り付けたポリゴンを等倍でレンダリングした結果を拡大表示させたものです。
小さくレンダリングした時点でドットが潰れ、更に拡大表示する段階で画像が大きく歪んでしまっています。

1136812679.png

再利用性

もう言ったと思いますが、Bomber丸Worldのグラフィックは2Dに見せかけた3Dにしています。
そして今日作ったのはテクスチャ管理システム。
今回はRPGである都合上、画像をふんだんに使いますので、その画像を効率よく処理する仕組みが必要というわけです。
3Dで作るということで画像の表示はポリゴンにテクスチャを貼って表示させるわけですが、RPGのマップだと同じマップチップをいろんなところで表示したり、戦闘画面では同じ種類の敵が複数登場したりと、同じ画像が複数の場所で使われるケースが多いため、使う数だけ同じ画像のテクスチャを作っていては無駄であり、特にマップチップだと同じテクスチャ(それも結構でかいやつ)が何百枚と作られて、まともに動かせる状態ではなくなってしまいます。
だから、同じ画像のテクスチャを作ろうとしたときは前に作ったテクスチャを代わりに使うようにするわけですが、RPGでは場面の切り替わりと共にさっきまで沢山使われていた画像が今度は全く使われなくなるというケースもあり、逆にもう使われなくなった画像はどんどん破棄していく仕組みが必要なわけです。
ちなみにふにゃさんでは画像再利用をマップキャラ(ふにゃやギヤバネなど)に使っていたのですが、画像のサイズは高が知れているし、どのキャラもその後近いうちに再び使われる可能性が高いということで、読み込み時間を減らすため、破棄するのは絶対に使われなくなってから、つまり、ゲーム全体の終了時のみになっていたりします。
話を戻しますと、幸いにしてDirectXの全てのインターフェースはそのための参照カウントシステムを持っているため、ファイル名とテクスチャを関連付けてリスト(実際にはSTLのmap)に記憶しておき、あるファイルのテクスチャを使うときはリストからファイル名に対応するテクスチャを探し出し、見つかったらテクスチャの参照カウントを1増やしてからそのポインタを確保しておき、見つからなかったらテクスチャを作成した上でリストに追加、逆に使い終わったときは必ずリストにあるはずのテクスチャを探し出して参照カウントを1減らし、0になったらテクスチャを破棄(これは自動で行われる)した上で、リストからもテクスチャの情報を削除。
これで、常に必要な分のテクスチャだけがメモリ上に置いてあるということになります。
もしかしたらこういうことはDirectXが勝手にやってくれてて自分は無駄なことをやっているだけという可能性もありますが、まあそれにしても無駄はリスクに比べればそう大きなものでもないのでよしとしましょう。

人物を描いてみた

以前の日記に書いたドットを潰さないレンダリング方法、あれ別に3Dでなくとも2Dでも高さ成分を真正面から見た高さの8割になるように、奥行きを真上から見た奥行きの6割になるようにドット絵で描けば縦・横・高さの比率が正しいドット絵として立派に成立するじゃないですか!
というわけでそういう描き方をしたマップチップでマップを描くプログラムを作ろうとしていたのですが何をどう間違えたのかマップチップを作っているうちにマップ上に配置する人物キャラを描きだしてしまいました。
元々人物のデッサンなんて小学校以来やってはいないしましてや37度から直立姿勢の人を描くなんてことは一度もなかったので、とりあえず理論的に正しい人物を描こうと身長別-男女のボディサイズ平均を見て数値を見ながら描いていったのですがどうにも日本人の体は細長すぎるようだったので、今度はメタセコイアに入っていた人物の3Dモデルを37度の角度から見下ろした画像から輪郭抽出してそれを参考にしながら描いてみたら結構自然な感じになりました。
しかし謎の男のつもりで描いていたのですが、暗いね。

1136645637.gif

<前 次>