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

<前 次>

気まぐれに

とりあえず必要なところはCGameObjectBaseから抜いてきて、一応Cf3MapObjectBase完成。
さらにこれを派生させて主人公クラス作成。
グラフィックはstaticメンバにして無駄なメモリ消費を減らす。
主人公は一体だけだから関係ないはずだけど。
ちなみにグラフィックはGIF画像で用意されていて、透過情報はGIF側で持っています。
一応表示までできるようにはなってます。
やっぱり目に見えるところから作ると作ってるって感じがしていいねぇ。

気まぐれ人工無能、そろそろ作り出そうかなと考えていたり。
正規表現にマッチする応答を返す方式、マルコフ連鎖、人対人の会話から自動学習、呼ばれて出てきて落ちたら消える。

しまった!!

半導体レーザのレポートがやっとこさ完了しました。
結局ひとつのレポートで合格もらうのに1ヶ月もかかってしまった…。
一応文章の部分はデータとして手元にあるので、気が向けば学習帳にアップするかもしれません。

ミディビの開発をそろそろ再開しようと思って、とりあえず何か音を鳴らそうと考えて、書き始めてから気が付いた。
私はJavaを知らない!
オブジェクトの生成とか、構造体の使えるかどうかとか、基本的なことを。
使ってりゃ何とかなるというポリシーの私ですが、さすがに先立つ知識が何にもないとはじめられそうにありません。

ゲーム記、ちょっとだけ変えました。
文面を微妙に。

ふにゃさん、昨日のはサイズがちょっと小さくてはみ出していたのですが、無事サイズを正常にすることができました。
そんでもって、下に余った部分にいろいろ情報を表示してみようかと思ったのですが、その前にマップのほうをまともに表示できたほうがいいと思って、昨日ピンクになっていたところを0番チップ(背景)に置き換える処理を作りました。
その後さらに置き換えた部分にマップキャラを置くことになるのですが、その辺はまだ作っていなかったので、Cf3MapObjectから作ることにしました。
Cf3MapObjectは、マップ上に表示されるオブジェクト(キャラに限らず)で、いつかはCGameObjectBaseから派生させるといっていましたが、細かいところの実装でこのゲームにあわないようなので、自前のものを作ることにしています。
元々yaneSDKのCGameObjectBaseはある程度自立したオブジェクトを使うためのものなのですが、今回は完全にマップに癒着したオブジェクトなので、マップと関連付けられるオブジェクトが必要だったのです。

マップ読み込み

FFCC、ケアルリングゲット。

ふにゃさん、マップ読み込みを作ってみました。
右下2チップが不定になっているので、まだ読み込みに不具合が、と思いきや、実はセーブミスだったようです。
ピンクの四角は未対応だから、ということで。
ウィンドウサイズも同様。
圧縮については、圧縮しきれずに逆に膨張しちゃうこともあるんじゃないかと危惧していたのですが、デタラメにマップチップを配置してテスト圧縮(エディタ以外で圧縮)しても半分程度まで圧縮できたようなので、これは特に問題はなさそうです。

1118846015.png

実験中断

簡易アクセス解析を更新しました。
自分で使っていて納得いかない部分を2・3パッパッと直してみました。
まず、検索フレーズで、検索と誤認して関係ない語句を追加してしまうバグを修正。
これは意味もなく配列を流用していたのが原因でした。
次に、ユーザーエージェントの正確な表示。
モジラばっかりじゃなにがなんやらわかんないので。
しかしアップするまで気付かなかったけど、バージョン1個すっ飛ばしてたのね…。
今考えれば0.07としてアップすべきだったわ。

ふにゃさんエディタ、マップデータやマップタイトルもセーブできるようになって、セーブの部分はひとまず行えるようになりました。
マップの大きさをまだ変更できなかったりもするのですが、ゲーム本体のほうがまだまだということを考えると、まず初期の大きさだけでうまく動かしてから、サイズ変更を実装するという方法をとっても良いかな、と考えてしまいます。
でもやっぱり最初から完成形(スクロールあり)を意識して作らないと、と思ってしまうのですが…。
そんなわけで、そろそろ本体の開発に移るので、読み込むためのサンプルデータを用意してみました。

学校の実験では、なぜか実験で使わないはずののこぎりが置いてあったり、なぜか1学年下の学生のものらしきレポートが置き忘れてあったり(しかも再提出)、なぜか測定器の針がいきなり負の方向に振り切れてしまったり、そんなこんなで実験は中断になっちゃいました。

心にもない俳句

プリンタドライバ見つけてきました。
これでレポートを印刷するたびに親のパソコン借りずに済みます。
インストーラCDがなくなっていたのですがCanonの公式サイトから見つけてきたんですよ。
どうやらOSによってドライバのバージョンが違っていたようなので、CDを使わなくて結果的には正解だったようです。

朝、寝冷えしたのか何なのか、ちょっと調子悪かったです。
午前中、なんとなく寒いような気がする状態が続きました。

ふにゃさんエディタで、非圧縮セーブを実装して、テスト書き込みしたら、セーブしたはずのない「きたなー」の文字がなぜかデータに紛れ込んでいました。
[....TITL0123....AUTH4567....DESCabcdきたなー]
そういえばその前に
[....LTITうんこ....HTUAしっこ....CSEDきたなー]
なんてデータを入れてたっけ。
やっぱり下品な言葉を使ったのが悪かったのか…
というわけで、改めてセーブの処理を完全に実装してから綺麗な言葉でセーブ。
今度はバッチリうまく行った模様です。

1118672625.png

復元仙人のワナ

アキヤメのメテオスDB、更新しましたよー。
面白作品ベストを数点追加しました。

そんでもって、ゲーム記のカービィのエアライドのエアライドクリアチェッカも少し更新しました。
どっちも中途半端ですが。

ゼルダの伝説不思議な木の実時空の章やってました。
三日月島のダンジョンを半分ほど終わらせてセーブしていたはずなのになぜかセーブされていなくてダンジョンの最初からになってしまったのですが、何とかクリアして、次のどくろダンジョンに入るところまで行ってきました。
道中、赤くて刺激的な味がしそうだとトカゲ人に言われたウィウィや迷いの森で立ち往生していたムッシュと出会ったり、シメトリ村の下品ヒゲ男にヒゲをもらったり、メイプルのアイテムを何度も強奪したり(今考えるとやっていることはひったくりそのものだ)、ワナの仙人リペアに挑戦したり。
いやあ、懐かしいなぁ。

ふにゃさんエディタ、ステージ名(ステージファイルの全体のタイトル)と作者名と作者からのコメントが記録できるようになりました。
そんでもって、セーブの部分も作り始めました。
今のところはファイル名取得の部分だけです。
流れとしては、ステージの生データを一時ファイルに書き出し→必要ならば圧縮→ヘッダをつけて指定されたファイル名に出力、となります。
ちなみに、圧縮ステージファイルと非圧縮ステージファイルは同じファイルフォーマットではありますが、拡張子が違い、圧縮ファイルのほうはエディタ側では読み込みには対応しません。
展開すれば普通に読めるようにはなるけど、バイナリエディタで簡単にデータ改竄されるということはなくなるのではないかと思います。

1118582193.png

非線形要素

Bomber丸Worldの要素のひとつ、非線形ダメージ特性。
属性別防御力は、すなわち攻撃耐性を意味し、少ない攻撃力ではほぼノーダメージだけど、ある臨界点を超えると、つまり耐性の限界に達すると急に大ダメージを受けるようになり、しかし限界まで行くとまた急にダメージが増えなくなったり。
例えば、なまくらな剣では切断ダメージなんて受けるわけないけど、普通の刀なら結構ダメージを受けるわけです。しかしながらその100倍鋭利な刃物を使ったとしても、決して100倍のダメージを与えられるわけではない。
ということです。
実際に非線形にするとややこしいことになるので、これは折れ線で近似することになります。

ふにゃさんエディタのステージタイトルの指定を作りました。
とりあえず何か作らねば、ということで。

レポートは無事提出完了≠完成。

月影の祠

久しぶりにゼルダの伝説不思議の木の実時空の章をプレイしてみました。
三日月島でウロチョロしている最中で、盾だけ取り戻せていなかったようなので取り戻してダンジョンへ。
ワープポイントが作られていなかったからまだ未攻略のようです。

ふにゃさんエディタ、マップエディット画面からマップチップを呼び出せるようにしてみました。
いやぁ、これがないと不便で不便で。

フェルミ準位

う~ん、レポートの残った課題、どうしてもわからんです。

ふにゃさん、エディタ、新規作成のときの挙動をどうしようか。
ウィンドウが残っててもウィンドウに関連付けられたデータは新規データとは既に切り離されているから別に無理に消さなくてもデータ上問題はないけど、やっぱり見栄えがね。

エディタ形になる

マップエディタ、そこそこ使えそうなところまでできてきました。
GIF機能もつけてやろうかと思ったのですが、さしあたりしばらくは必要なさそうだったので後回しにしました。
そろそろステージ全般設定とファイル読み書きを作らねば。

1116683741.png

反応的なゲーム

ともすればカービィっぽくなりかねないふにゃ。
ふにゃらしさとはどんなものか、考えてみました。
まず、弱いこと。
食欲に任せて危険の中に飛び込んでいくけど、とげとげにぷすっとやられただけでミス。
「ふにゃふにゃ」は強いほうのふにゃにあわせてしまったので今回は除外。
もしかしたらバイタリティ制を導入するかもしれませんが、それでもとげとげに当たれば即ミスです。
そして、反応的であること。
自ら飛び込まない限りは危険はやってこないから、安全な場所で動かなければ寝てても大丈夫なんですね。
そういう意味で言うならアクションゲームっぽさは少し薄いです。
とにかく、プレイヤーからの操作がなければ何も動き出さない。
そういうゲームなんです。
あとは小ステージ構成。
大きなステージを、ダメージを受けたり回復したりしながら突き進んでいくんじゃないんです。
一つ一つの小さなステージにそれぞれテーマがあって、それをクリアすることが目的。
ステージセレクトが比較的簡単に出てくるのもこのためだとか。

ふにゃさんのステージエディタ、ボタンを押したままマウスを動かしてマップが描けるようになりました。
先日のGIF描画にも対応する予定。

Lunascape2がまたバージョンアップしてますね。
やっと使い心地のいい状態になってきたかというところです。

リファラを見る限り、MIDIBは一応それなりに需要はありそうです。
とりあえず次の次の更新はこれで行くかな。

惑星ハイリア

本日の画像宇宙に煌々と輝くこの星では、長い歴史の中で、星の象徴でもある黄金の聖三角をめぐり、魔王と勇者の戦いが幾度となくあった。
そのたびに勇者は賢者の力を借り、魔王を撃破していたのだ。
その名はいつも決まってリンク、ゼルダ、ガノンであり、いつしか伝説となったこの話にあやかって、息子が生まれればリンクと、娘が生まれればゼルダと名づける風習が広がった。
メテオが飛来したとき、魔王ガノンの仕業として、無数のリンクと無数のゼルダが旅に出たという。

ふにゃさん、PNGが表示されないことを確認しました。
これでグラフィックはBMP/GIF/JPG/YGA(yaneSDKの独自形式)でいくことになりました。
となると、透過GIFとYGAをVBのステージエディタで表示できるように、と。
そんなわけで、透過GIFを透過転送するプログラムをちょっと組んでみました。
白背景の画像と黒背景の画像を用意して、その二つをSRCINVERTで合成すればマスクの出来上がり。
あとはいつものように透過転送。っと。

1116514307.png

透過GIF

とりあえずレポートは終わった感じ。
感じてるだけかも。再提出になったりしたら。

ふにゃさん、透過GIFが正しく表示されることを確認しました。
その前にはGetDraw()->SetDisplayを忘れていて一時間ほど潰れてしまったりしていたのですが。
とりあえず基本となる形式はGIFで、まあ、半透明が必要ならPNGも考慮するということで。
場合によっては半透明PNG→YGAコンバータを作ることになるかも。
写真は、透過GIFに対して、Blt、BltFast、BltNatural、BlendBltをそれぞれ試したもの。

1116427804.png

TGL再び!

えっとですね。ふにゃさんのエディタ作るつもりでした。
しかし、今回、3層マップもありうるということで、半透明もありうるというわけで、半透明対応描画DLLを作ってやろうということになったわけです。
しかし、描画系のDLLといったら、あのとてつもなく遅いことで有名ではない、TokioGLただひとつのみ。
せめてこれがまともな速度で動かないことには半透明DLLなんて夢のまた夢でしょう。
そんなわけで、TokioGL、改良を始めました!

今日もエディタ作成中

結局エラーの件はピクチャを返すべき関数が何もしていなかったからという結論に達し、IPictureDispは単体じゃ使えないなということで、よくあるPictureBoxをメインフォームに置くことにして、それのhDCを返す仕様にして、マップチップは表示できるようになったりして、ついでに言えばマップチップセレクトもできるようになって、マップウィンドウもだんだん使えるようになってきて、FormMapとMapEdit間違えてしばらくエラー出っ放しで、ウィンドウがなぜか2つ出るところで原因に気付き、これでやっとマップエディタが作れる、そしてさっさと保存を作って第一作ぐらいのマップは作れるようにしたいのです。

ステージ仕様考案中

うん。識別子を渡してデータをもらう部分ができました。
本当はタイトルから作ろうと思ったけど、自分自身は役目に見える結果を出したいのでゲームプレイの部分からはじめることにしました。
まず必須データを決めないと。
下層中層上層マップがあって、当たり判定を保持しているのは中層マップだけ。他は単なる見栄えなので必須ではない。
スタート位置には何もないほうがいい。マップチップとしてスタート位置チップを作って、プレイ時には通行可能チップとふにゃ本体に置き換える。バナナも同様。敵も同様。
当然のことながらマップには大きさ情報が必要。
1と同程度のことをするならば、これだけで充分のはず。

データ読む

ファイル読み込み部分はできました。たぶん。
読み込んだデータを解釈する部分はまだです。
識別子を渡してその識別子に対応するデータを返す関数とかそんなものが必要そうで候。

<前 次>