「ふにゃさん」に関する日記(17)

<前 次>

ミューティ・スニピット

ふにゃさんのカメラワークを改良しました。
右に移動するときは右側を広く表示し、下に移動するときは下側を広く表示します。
ゲームによってはできるだけ視点を移動しないようにこれの逆にしてることがあるけど、正直言って目的の方向があまり見えないと不便だと思うんですよ。
視点の移動速度も状態によって3段変速になっています。
左右方向の調整は非常に良好ですが上下方向がちょっと難ありです。
基本的にゲームの大半が落ちっぱなしなんだから下方向を広く取ればよさそうなものだけど、連続ジャンプのときなどは上方向を大きくとりたいし。
まあいいや。後で考えよう。

今日は某あぎこサマの結婚祝いの絵(某の意味がない)。
特に何の脈絡もなくミューティ・スニピット。
これに2時間かかりました。
人はともかく甲殻類をきちっと描けるようになってみようかなぁ。

バンジョーとカズーイの大冒険はゴビバレー砂漠まで完全クリア。
ただしハニカムは一切取らず。いまだにエネルギー最大値は5です。

1121608412.jpg

下着泥棒キャティア

ふにゃさん、バナナを取れるところまでできました。
ついでにポーズを掛けるたびにガーベジコレクションが働いて取られたバナナを消していきます。

今日は人物の立ち姿を。
まだまだ顔を描くことに対するコンプレックスは残っているので横向きです。
まあ、上半身のバランスは見られないほど悪くはない、けど下半身が…。
描いたのは下着泥棒キャティア、Bomber丸Worldに登場します。
キャティアの絵の別バージョンはそっちのほうのページにアップしておきました。
実際のところこれを描くまでは私自身キャティアが男だと信じて疑わなかったのですが、描いてみて、下着泥棒が男だというのは偏見による先入観じゃないのかと思うようになってきました。

1121525181.png

猫と鼠

例えば猫が鼠を食べたとき、それは「猫が鼠を食べた」というべきだろうか。それとも「鼠が猫に食べられた」というべきだろうか。
一般的には後者が使われる。
猫が鼠を食えば、普通鼠は死ぬ。
なぜ死ぬのだろう?猫が鼠を食べたから?鼠が猫に食べられたから?
鼠が死ぬんだ。食べるのは猫が主語なのに死ぬのは鼠が主語。

バンジョーとカズーイの大冒険を久しぶりに始めてみました。
どんどんジグソーピースもオンプも集まっています。

ふにゃさん、例の独立して動かす部分が完成。
まずは何が何でも必要不可欠なバナナを実装。表示だけしかできないけど。
さっきの猫と鼠の話で気にしていたのは、つまりふにゃがバナナを食ったときにはどっち側で食べたことを処理すればよいのか。
実際の動作は一切変わらないんだから、どっちでも構わないようなものだけれど、やっぱりやるからにはきちんとやりたいのです。
今日の画像はふにゃさんのゲーム画面。

1121437364.png

依存性を断ち切る

爆ボンの敵キャラデータを更新しました。
今回は主にボス系統です。
アブソリュートとマスターは狙いが定まらないのでHPがよくわかりませんでした。

ふにゃさん、今日はアイテム全般の処理を作っていました。
このあたりはyaneSDKのCGameObjectBaseを参考に。
マップクラスに所有権を与えている時点であまりよい状態とはいえないのですがそれはそれで仕方が…って、もしかしたらもうちょっと依存性を低くする方法があったかも!?
そうだよ。せっかく少し細かくアイテム・敵・エフェクトと分けたんだからそれぞれが別次元のGameObjectとして働けばいいんだ。
というわけで明日から書き換え開始。

今日はBomer四角。
う~ん、純粋に下手というのは仕方ないとして、左右のバランスがうまく取れていないのが気になります。
ちなみにBomber丸Worldでの登場キャラです。

1121266330.gif

対比効果

ふにゃさん、地面の摩擦力をいろいろ変えてテストしました。
だいたい0.05~1.00で良好でした。
0.01以下は最高速が測定できず、2.00以上では速度が不安定、つまり、一瞬終端速度を大きく超えたりストップの瞬間後ろに吹っ飛んだりしてゲームになりませんでした。
ちなみに、第一作でも同じ現象は起こっていました。
公開していない炎のステージでは極端に地面の摩擦が高く、崖付近でバグるのです。

トップページをちょっと更新しました。
まあ、TWSとGWSのリンク位置を変えただけです。

メテオスのゲルゲルのMIDIを作ったのでアップしました。
ゲーム記からいけます。
結構音をはずしているようですが。

ついでに、ふにゃさんの音楽、として使うかどうかは実際には未定ですが、MIDIを作ってみました。
炎のステージをイメージして作っています。
音楽に限らず、あるものを表現するときにはそれと対照的な要素を織り交ぜることで全体を引き締めることができるように思います。
まあそれにはいろいろありますが、今回は熱さの表現なので、逆の冷たさ、滴り落ちる汗の冷たさ、物影に入ってほっと一息、そんなイメージで。
基本的に熱さは低い音、冷たさは高い音で表現されることが多いのですが、それは温度が高くなると硬いものも軟らかくなり、きんきんとした高い音がくぐもった低い音になることから来るのだろうと思っています。
今日作ったのはその点ではさっぱりですね。
オルゴールの使い道間違ってます。

1121176917.mid

敵キャラデータベース

爆ボンバーマンの敵キャラデータを更新しました。
全部じゃないにしても結構それなりに揃ってるんじゃないかな~と思っていて自分としてはそれなりに満足だったりして、また暇のあるときにでも完成させようかなと思っていたりします。

VB小ネタを更新しました。
自分のウィンドウがアクティブかどうかを判定する方法を。
ゲームなどに使えるんじゃないかな。

ふにゃさんエディタでいろいろ安全対策をしてみました。
まずマップサイズの制限。
幅は10以上、高さは7以上が保障されるようになります。
そして主人公を一番下のラインに置かせない。
一番下から始まると先はもう場外しかないので。

listにてこずる

ふにゃさん、ナビゲーションバーを一部実装しました。
情報のスクロールはできていませんが表示だけなら何とかできます。
STLのlistによるものなのですが、setと同じ名前の関数があるので使用方法も同じだと思って使ったらかなりひどいことになっちゃいました。
まあヘルプを読み直して直しましたが。
で、それを使って何をやったのかというと、横方向速度を表示しての横向きパラメータ調整。
さっきまではどう考えても横移動が大きすぎたので、空気抵抗を増やして調整しました。
その結果、空中速度が地上速度より1%遅いだけになり、ほぼ同じになりました。
ついでに縦方向も調整。

マップの表示位置を決めるのはキャラのほうにして、キャラを扱うクラスは主人公クラスの派生クラスとしてふにゃクラスを実装。
扱いが別なので敵キャラやアイテムと同じ扱いにしておく必要はなかったんだ。
今後はアイテムクラスや敵キャラクラスやエフェクトクラスなどを作ってその派生クラスでその実態を作るようにしようかと考えています。

ナビゲーション

パネルγの遊び方6を更新しました。
あの絵は実際のプレイ中の映像ではなく画像素材を組み合わせて作っています。

ふにゃさん、ナビゲーションバーを作り始めました。
なんせウィンドウのキャプションを今回は使えないので(フルスクリーンのため)、そして32x32のマップチップじゃ上下がぴったり合わないので、そのスペースにいろいろ情報を表示することにしたのです。
仕様としては、常に左方向にゆっくりとスクロールし、情報を表示するのですが、更新された情報があるとそっち方向に移動して表示するようにします。

氷の谷に落ちる

ふにゃさん、場外判定をつけました。
ふにゃ1みたいに場外付近に仮想的なとげを配置して、というのではなく、ふにゃふにゃみたいに実際の座標で判定しています。
ただし、キャラクターの移動を制限するために1式の場外マップも作ってあったりします。
壁であり且つとげであるので主人公はどうあがいても外へは出られません。
敵キャラはとげを無視して壁だけを見ていたりすることもあるので両方の要素が必要かと思って、いや、本当は別に深い意味はなかったりしますが。

画像読み込みにも対応。
つまり、自分で描いたマップチップがゲーム内で使えるということ。
この機能で、氷のマップチップを読み込んで1の氷のステージを再現してみました。
しかし、いくら操作を似せているとはいえ実際動作は違うので、結局はクリア不可能なようです。
やっぱり1のような荒さがないとああいう爽快技はできないのかなぁ。

そうそう、カメラワークを改善したりもしました。
表示が完全にはふにゃの動きに追随しないので見た目に滑らかになります。
ただ、実際にはまだまだ改善予定ではあります。

1120574875.png

風の抵抗

ふにゃさん、空気抵抗、実装。
パラメータ、調整。
第一作、ほぼ同じ。
風、空気抵抗、基準値。

何かにつけてふにゃ1と比較してますが、これにはちゃんとした理由があります。
それは、ふにゃさんはふにゃのリメイクであること。
1と2はボタンを押すと単純に加速していって、一定値で飽和しますが、ふにゃさんの場合は飽和値が高く、その代わりに空気抵抗を掛けることで減速しています。
これにもまた理由があって、今回は敵キャラクターに弾き飛ばされるなどして激しく加速されたり、風によってふわりふわりと飛ばされたりするため、相当大きな速度まで許容しつつ、風速と速度の差を利用できる方法でないといけなかったのです。
でもなんだか指数関数的に減速していくのは少し気持ち悪い気がします。
ちなみに、全部の作品に共通なのですが、飛び上がり中のふにゃは全く風の抵抗を受けません。
これには特に深い意味はないのですが、普段の空気抵抗を受けまくるふにゃとの対比になっているかと思われます。
まあ、風の処理が自然な形で実装できたのは大満足です。

パネルγのページを更新しようと思ったのですが、画像が用意できなかったので更新は保留ということになりました。

プニプニの強さ

爆ボンバーマンでちょっと敵の強さを調べていました。
いやはや、プニプニが防御力最強とはね。
ノーマルボムだと19回も当てないと倒せません。
一部をゲーム記にて公開しています。
気が向けば全部入れます。

メテオス、途中までだけど恐怖の館000をアップしました。
最初の数小節で早くも音程を外しているような気がしてならないけど、めんどくさいのでほっときます。

ふにゃさんエディタのステージ読み込みを作り始めました。
とりあえずデータをメモリに読み込むところまではできました。
後はこれを解釈するのですが、ポインタをいじれないVBではちょっと難航しそうな予感です。

テンプレートの練習

ふにゃさん、マップのスクロール機能を実装してみました。
普段ならここらで結構てこずっていたりしたのですが、今回は結構あっさり実装できてしまいました。
これというのもよく使いそうな機能をテンプレートとして実装して、Saturateとかしたからだと思っています。
で、早速テンプレートのSaturateで主人公の移動速度も制限。
めり込みをなくしたのです。
ついてに、当たり判定と移動のアルゴリズムを改良。
まず横に動かして全方向に当たり判定。
これで上下にぶつかっていなかったら縦にも移動した上また当たり判定。
これですり抜けバグも当たり判定が1フレーム遅れるバグも解消されたはず。力技だけど。

ひらカタチェンジャデラックスをアップしてみました。
ダウンロード→その他から落とせます。
リコチキ語+同時通訳にしているとタイトルがとんでもないことになっちゃいます。
巡回置換の周期も調べてみようと思ったのですが、根性が足りず計算できませんでした。
10桁は軽く超えると睨んでるんだけど…。

掲示板にニストのアイコンを追加しました。
不死身のあいつです。
まだ出ていないRPGの敵です。

Bomber丸Worldのページも更新。
ゲームシステムの詳細です。

template<class T>
void Saturate(T min,T& num,T max){
if (num>max) num=max;
if (num<min) num=min;
};

スミスチャート

ひらカタチェンジャDX作ってみました。
ひらカタチェンジャにリコチキエンジンのユーザーインターフェースを施して、もちろんリコチキ語も同時収録!
しかもおまけにタイトルもなぜかひらカタチェンジ!
リコチキは巡回置換なので何度も同じ変換を繰り返していると必ず元の文章が現れるはずですが、それは巡回置換一つ一つの巡回周期の最小公倍数となるので、そう簡単には元には戻ってくれないようです。

ふにゃさんエディタにマップサイズ変更機能を施しました。
レポートの合間にちょいちょいっと実装したにしてはまともに動いてくれていますが、将来3層マップに対応するときにちょっと面倒になりそうな気がしないでもありません。
標準以下の大きさになったときの処理ができてないな…。

inDLableを更新したりしてみました。
スタイルシートを新しく替えただけですが。

レポートについては、現在スミスチャートドローマシンとなって作成中。そろそろ終わらせます。

ふにゃ1・2・3

ふにゃさんのすり抜けバグは直しました。
ふにゃふにゃステージ制作講座番外編にあったように、「同時」であることが問題だったので、当たり判定に時間差を設けることですりぬけを回避したのです。
すり抜けバグはあくまでもバグですので、面白くても今回は取り入れませんよ。
実はふにゃさんには当初考えていたものからカットされた要素が既にいくつかあります。
例えば、ギヤバネは最初の予定では性能差により32種類のバリエーションがある予定だったのですが、ステージに組み込むのが、私にもステージ作者にも大変そうだったので、歩行+3方向バネの1タイプのみになりました。
敵も只のマップチップと同じように選んで配置するだけのほうが手軽でいいですよね?
とりあえずすり抜けバグの確認用のテスト版をアップしましたんでよければ見ていってください~。

ふにゃふにゃのページ、キャラクター、更新しました。
いつまでも絵がないんじゃさびしいので昔2分2秒で描いた適当なふにゃの絵でも載せておきました。
タグで拡大してて比率が変だけどないよりはマシ。

もしかしたらアキタラヤメル企画に「ふにゃ」を追加するかもしれません。
ふにゃのいろんなことがわかっちゃうというコンテンツ。
需要があるなしは関係なしに、自分で思い入れが強いから作りたいんですよ。

パネルγの遊び方ページを少し見やすくしました。
特に新しいものの追加はなし。

Bomber丸WorldのBGMのページを更新しました。
地下ダンジョンボスのBGMです。
イントロをちょっと変えました。
ちなみにキャラとしては、何ターンに一回かの割合で溜め攻撃を使うのでそのたびに防御しないと手痛い打撃を受けてしまいます。
しかも、この攻撃、溜めた実時間によりダメージが増えるので、素早く防御しないと大ダメージを受けてしまいます。
そこで考え出されたシステムが、コマンドショートカット。
せっかくパソコンのキーボードには標準で百個以上のキーが付いているんだから、これを利用しない手はない、ということで。
防御にBキーを割り当てていた場合、ヤツが力を溜め始めたら必死でB連打していたらダメージを減らせるという寸法です。

1119709646.mid

クラスの実体

パネルγの遊び方9と自己紹介とゲーム記のゲームボーイと同じくロクヨン、それぞれ更新しました。
昨日書き忘れていたところと、たくさんの質問への回答と、標準語化をしてみました。

レゴ、昔買ったものを5つほど復元しました。
ずっと前に作ってばらさずに置いたものを数には入れてないので全体としてはもう少し多くなります。

Java、とりあえずサンプルを落として見てみました。
eclipseが異常に重いのが気になったけど、クラスの扱いについては大体わかりました。
Class1 c = new Class1();

昨日断念した音楽、今日何とかMIDI化に成功しました。
なんに使うかはまだ検討中。
メテオスでこんな惑星があったらいいなと思っていたときに妄想中の惑星のBGMとして思いついたものだったのです。
うちってMIDI化するときにどうしても半音を使ってしまう悪い癖があるのね。
しかし今までMIDIだからいいやとPiccoloを使いまくってたけど結構無茶な奏法だったのね…。

1119625040.mid

風の影響

ふにゃさん、走るときのグラフィックを出せるようにしてみました。
今回は移動や当たり判定の処理と描画の処理を分けて作っているので、動作から先に作って、直立姿勢のまま走ったり跳んだりするようにしてから、動作が安定するころにグラフィックの変更を行ったりしています。
スピードの減速方法、地面に立っているときは速度0に向かって一定加速度+風の抵抗をかける。
走っているときは最高速+風速を超えているときには最高速+風速に向かって減速。
跳び上がり・しゃがみ・歩き中は減速処理はせず。
落下中は風の抵抗のみによって減速。

パネルγのページを更新しました。
ルールの同時消しのところです。
う~ん、LARGE以上のどでかい同時消しボーナスについては書き忘れてたけど、まあいいや。

同じくパネルγ、ランキングへの得点の送信には公開鍵暗号を使ってみようかと思ったのですが、これは第三者が解読できないようにということで、送信者本人によるデータ捏造への対応ができなさそうなので、見送ることにします。

なんとなくメロディが思いついたのでMIDIにでもしてみようかと思ったのですが思ったとおりの音が出せずに断念。
それはそうと、音源を変えてMIDIを聞くと同じ曲でもなんだか新鮮ですね。

動けるぞ!

ゲーム記、プレステのとこ、更新しちゃいました。
標準語にしたのと、ドラクエ5の話を少々。

ふにゃさん、走る・跳ぶ・止まるの基本的な動作ができて、狭いステージの中を駆け回れるようになりました。
当たり判定の基準位置を間違えていたりして、なかなかうまく動いてくれなかったりもしましたが、現状の動作としてはまあまあよくできているといった感じではあります。
今回はいろいろな部分を関数化させて多分後から見てもそれなりにわかりそうなコードにしています。
コードを一部抜粋。

	if (m_State==STANDING) {	// 立ってるとき
if (f3Input.GetKeyPressed(F3KEY_UP)) StartJump();
if (f3Input.GetKeyPressed(F3KEY_LEFT)) Run(DIR_LEFT);
if (f3Input.GetKeyPressed(F3KEY_RIGHT)) Run(DIR_RIGHT);
if (m_DX>0) m_DX = (m_DX>STANDFRICT?m_DX-STANDFRICT:0);
if (m_DX<0) m_DX = (-m_DX>STANDFRICT?m_DX+STANDFRICT:0);
if (m_DX==0) m_Direction = DIR_FRONT;
if (!m_HitBottom) {
Fall();
}
ジャンプの処理を呼び出すのにStartJumpを呼び出しているのは、立っているときの上キーがジャンプの予備動作をさせるためのものだから。
Jumpは上キーを離したときに発動されて、実際に上向きの速度を与えてジャンプさせています。

1119449256.png

前作からのパワーアップとか

昔からずっと思っていたんだけど…
レゴの幽霊パーツがほしい。
それで、情報を集めるため公式サイト含めいくつかのサイトを回ってみたんだけど、自作の作品やミニフィグ(人形)やレアパーツのこととかばかりで目的の情報には近寄ることすらできず。
せめて写真だけでも拝みたかったですよぉ。
レゴ自体はもう飽きちゃったのですが、嫌いになったわけじゃないし、むしろ今も大好きなので、「サイズ」の観点からレゴを語るサイトでも作ろうかと思ったのですが、自分ちのレゴで頑張って作った完成品だけがなくなっているのを見つけてげんなりしたので見つかるまでしばらくは手をつけなさそうです。

ふにゃさん、ジャンプの処理を作り始めました。
例によってジャンプ力係数も浮動小数型で。
ちなみに、ジャンプ力そのものは第一作に対して特に増やすようなことはしません。
普通ならばゲームの遊べる幅を増やすためパワーアップなどさせるべきものなのでしょうが、ジャンプ力アップに関してはギヤバネが補ってくれるので、他では不用意に増やさないようにという判断です。
キー入力周りの挙動がどうも怪しいようです。見直さねば。

レポート、痛恨のミスを犯していました。
グラフが・・・・逆さま。

天界へ

ふにゃさんの当たり判定を作ったりしてました。
昨日書いたとおりに少数と整数を混在させたデータにしてます。
一応キーで上下左右に飛ばして確認できるようになったので、今度は本格的に動きの作成に取り掛かるつもりです。
しかし代表位置として足元の位置を選んだのは当たり判定の観点からは少々面倒なことになっていて、また改めて体の中心を代表位置にしようかと考えていたりしてます。

久々にエアツェー2プレイ。
ボスの強さに面食らってアイテムで準備を万全にして改めて行ったらアイテムを一切使わずに楽勝ってのは意図されたバランスなのかな。
それともRPGは自然にそうなるようにできているんだろうか…。
途中の負けボスは1ターン目に気付いておしょくじとかスロースターとかでボケをかましつつ潔く全滅。
しっかし、ラストのこの装備の異常な強さ、これはあんまりだと思うなぁ…。

再提出のレポートなんかもやってます。

へたっぴ

パネルγの遊び方のページを更新しました。
基本中の基本なのでやった人が見てもなんともないのですが。
そういうこともあってしばらくぶりにプレイしてみると思ったようにクリックできない。
初めて触る人はきっとこんな感覚なんだろうなと思いました。
こういうのは開発中にはどう頑張っても頑張らなくてもわからないのでこういうことは貴重なのかなと思ったりも、しかしなんだか複雑な気分。

ふにゃさん、今ちょっと考えていることがあります。
それは、主人公の位置の変数の型をどうするか。
現在はCGameObjectに倣ってint型にしているのですが、そうすると加速度や抵抗やいろいろな物理量を使う以上それなりの精度を設ける必要があって、それはそれでスケーリングで何とかなる範囲ではあると思うのですが、今回は多くのオブジェクトを扱う可能性があるということで、スケーリングの倍率はできるだけ一定、あわよくば1にしたいので、それなら小数点以下も結構な精度のあるfloatやdoubleなどの小数型を使いたいのですが、そうすると処理速度の点で不利に、とはいっても近頃のコンピュータではそんなの気になるほどではないと思うけど、処理数はオブジェクト数の2乗のオーダーで増えることを考えるとやっぱりオブジェクトが増えたとき無視できないかと思ったりもするけど、それならば相手オブジェクトとの関係を持つ部分では整数型を使って、その整数型による位置を割り出すのに内部で使う変数だけを小数型にしたらどうかと考えて、つまり以下のようになったわけです。

  • 内部で使用する正確な位置などの情報(小数型)
  • 外部に公開する実用上問題ない精度の情報(整数型)

他には、当たり判定データを作ったりもしていました。
とはいっても、今はデフォルト値を作っただけで、実際にどのチップがどの当たり判定に対応するかを作るために機能を作ったわけではないのですが。
デフォルトでは第一作と同じく、一番左のチップが通行可能、二番目が壁、三番目から左が危険地帯となっています。
今回はすり抜けはありません。

<前 次>