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

<前 次>

8bitの追加分

ふにゃさんのAVI録画クラスが出来上がりました。
例によってまだテストが済んでいないのですが。
CDIB32の都合により無理やり32bitで記録しているのでどうなることか少し不安ではあります。

CAVIRecorder

前に掲示板に追加したいずみさんとキャットバイパーのアイコンをチャットにも追加しました。

ふにゃさんの動画作成については、AVI記録クラスを作成している途中で、いろいろな構造体の内容を調べたりしつつうまく記録できるような方法を考えているところです。
画面の解像度変更が行われる前に出力ファイル指定や圧縮方法の設定を済ませたい都合から、パラメータ解析と最初に表示するシーンの決定などをプログラムの一番最初に実行するようにしました。

ランチャーのアイコン

浮き沈みランチャーにアイコン表示機能をつけてアップしました。
今回実際にやりたかったのはショートカットの自動解析の中止だったんですが、それが終わってから、アイコンがないとどうしても探しにくいと感じたため、簡単に作ってみました。
ショートカットのほうは、項目に追加した時点ではショートカットのままで、項目編集画面に追加された「リンク解析」ボタンでショートカット経由から直接実行にできます。
アイコンについては、読み込みに多少時間がかかるため、必要になったときにバックグラウンドで読み込んで、表示できるようになってから表示するようにしています。
ただ、アイコン表示はテキストのみのときと比べて多少時間がかかるので、テキストのみの表示や、アイコンよりも表示が軽いであろうビットマップ形式での表示にも対応できるようにしたいと考えています。

で、ふにゃさんのほうは、無事リプレイの表示ができるようになったので、いよいよ動画作成に取り掛かりたいと思います。

圧縮されていたリプレイ

結局フォルダ選択はSHBrowseForFolderで実装しました。
スタートメニューなどに登録して作業フォルダの指定を間違っていたら出ます。
で、今度こそリプレイシーンを出せるようにしようと思っていたのですが、本体を起動するための設定プログラムでのリプレイファイルの一覧を作ろうとしていたらまた欲が出てきて、リプレイファイルの内容(ステージ名など)を選択画面で表示できるようにしたいと思い始めてしまいました。
で、リプレイデータはステージファイルとよく似た形式なので、データ読み出しにはエディタにあったプログラムが流用できるだろうと思って開いてみたところ、エディタでのステージファイル一覧でも似たようなことを考えていたのを思い出して、結局横道にそれ続けてエディタを改良したわけです。
で、ちょっと戻って設定プログラムのほうに移ったわけですが、タイトル情報取得ができるかどうか確かめるためリプレイデータの内容を見てみると、ゲーム本体以外では今のところ扱えない圧縮形式で保存されていたため、急遽データ読み込みDLLに圧縮データ展開機能を付けることになりました。
今ここで止まっているわけですが、もうちょっと欲を出して、DLLがなかったらエラーを出さずにファイル名だけで表示するようにしようかなと思っていたりします。
そんなわけで、リプレイの再生および録画はもうちょっと先のことになりそうです。

フォルダチェック

引き続きふにゃさん。
今日は何とかリプレイの表示だけは理屈の上ではできるようになって、いざリプレイファイルを開けるようにしようと思ったら、そういえば作業フォルダが実行ファイルのある場所と違ってたら動かなかったというのを思い出して、そっちの改善のほうを試みてました。
とりあえず一番直接的にフォルダを選ばせる方法としてSHBrowseForFolderがあったのですが、なんだか面倒臭そうなのでyaneSDKに入ってたCFileDialogを使おうとしたところ、そっちはそっちで若干不便な部分があったりして、結局どれも作れず、ということで現在に至っています。
リプレイデータの開き方は、設定プログラムから開くのが便利かなーと思ってます。
録画などの設定はWindows本来のGUIでやったほうが早いですからね。

メニューID

リプレイシーンを作る前にちょっと不満の残っていた部分の改善をちまちまやっていました。
まず、ステージ選択に入ったらもう最初の画面へ戻れなくなっていたのを改善しました。
これは前から、というより最初からやりたかったのですが、続きから始める機能との相性が悪かったためこれまで実装できていませんでした。
要するに、続きからはじめるという項目があるとタイトルに戻るという項目の位置がずれるので、プログラムが複雑化すると考えたのです。
なので、位置によらない項目識別番号を使うことにして相性の問題を解消しました。
ほかには一部にあった英語表記を日本語に直したこと、といったところですね。

リプレイシーン

ふにゃさん録画機能のために、まずはリプレイを再生するためのシーンを作っていました。
リプレイデータは1コマずつ記録されているので動画の1コマと対応付けて保存すればきれいな動画の出来上がりということになるのです。
あと、ついでにリプレイデータの保存先の指定をできるようにしようとも考えています。
サウンドの保存に関しては、どうするかは結構それなりに未定です。
理屈の上ではできるはず…という構想の段階です。
う~ん、でもリプレイ&録画専用シーンってどういう風にゲーム的に組み込めばいいかなぁ…。

メテオンもどき、最後の更新として、初期積み上げ高さが1だったときにメテオが消滅するバグを解消しました。
で、トップページはすでに終了日までのカウントダウン開始です。
後は終了後の処理を考えるのみであります。

AVIキャプチャのことについて

爆ボン関係の動画を整理してました。
これまではWikiに書いていたのですが、Wikiスパムに荒らされていたため凍結して、動画一覧はYoutube側でプレイリストとして公開することにしました。
Wikiのほうは該当ページを凍結して、別のページで別の方式で動画を取り扱うことにしました。

そういえば、ふにゃさんに録画機能付けたいな~とか思ってます。
リプレイから自動生成すれば、画面キャプチャによる頼りない録画じゃなくてコマ落ちなしの完璧な動画ができると思うのです。
サウンドのほうもDirectSound&DirectMusicでなら…と思っています。

ふにゃさんソース公開

ふにゃさんのソース公開しました~。
まあ、気分的にはオンラインバックアップということで。
中を覗けばネタバレ全部オープンなわけですが。

メテオンもどきのメンテナンスはこんなこともあろうかと思って用意しておいた面倒なメンテナンスもあっという間に終わらせてしまう装置により3分で終わりました。
ついでに素材ビューアも作ったのでアップしました。
ビューアはアプレットでできているのでメテオンもどきで再生できるかどうかが一発でわかるのです。

で、今日はゲーム記のメテオスオンラインのところを更新しました。
メテオスオンラインサービス終了時に持っていたもの全部をメテオ数に換算して合計してみました。
こうしてみてみると、たくさんやったんだな~と思います。
スポットライトがたくさんあまっているのは強力すぎてなんでもあり部屋ですら使うのがためらわれたから。
最終日に1回だけやったメテガチャで手に入れたドクロキャップが3つ目のアバターの装飾品だったり。

Oggとか鳴らしたい

メテオンもどきを多重起動していると動作がおかしくなる問題が発見されたのですよ!!
おそらくどこかのstatic変数が競合しているために起こると思われます。
あと、よく打ちあがる惑星ではBGMが結構せわしなく切り替わるので、消極的なBGM切り替えを実装しようかと考えています。
あと、やっぱり非圧縮waveでは100KB以内でまともな効果音を作るのは難しいようなのでどれかひとつに絞って圧縮音声に対応しようと思っています。
う~ん、でもライセンス問題でますますややこしくなったり本体よりも大きいデコードライブラリとかになったりするとなんだか嫌だしなぁ…。

それはそうと、ふにゃさんのソースコードを公開しようかと考えています。
みんな、ゲーム開発の参考にしてくれーい!
というのもありますが、ソースコードのバックアップをWeb上に置いておくという意味もあります。

たんたんと

突然ですがふにゃさん更新しました。
これからの追加要素はそれなりに時間がかかりそうなので間が空き過ぎないようにとりあえず現状をアップしたというわけです。

Bomber丸WorldのBGM「山の音楽家」をちょっと思いつきでいじってました。
今までのが曲の進行が淡々としすぎていたため、ノートオンベロシティを編集してメリハリを付けてみたのです。

1180018669.mid

フェードできたぞ

ふにゃさんのフェードプログラム、実際に組み込んでみると、多少の問題はありましたが無事組み込めました。
ファイルの場所を移動した関係でリビルドしないといけなくなったり、MIDIイベントのステータスバイトにチャンネルが載ってこなかったり、イベントを変更せずにツールを通すにはタイムスタンプを押しなおした上でDMUS_S_REQUEUEを返す必要があったり、そのあたりの細かいところでちょっと詰まってました。
ともかくこれで、眠ったときの曲の切り替えがスムーズになり、またBomber丸Worldに使うことも出来るようになりました。

爆笑親玉どんとこい

フェードは多分完成~。
テスト及びゲームへの組み込みはできていませんけどね。
ただ、Pチャンネルの扱いがまだよくわかっていないので、その点が不安ではあります。

すこっぷ君完全クリアしました。
久々にあのエンディングを見ましたね。
あの時はファイルが壊れて最初からエンディングになっていたものでした。

SuperDepthもついでにクリアです。
こちらは起動時オプションで残機MAXにして挑んだら15ミスぐらいでクリアできました。
一度ミスするとパワーアップするまでが大変です。
パワーアップができないボス戦は特に…。

そうそう、日記がほぼ完成となったので、アップしてみようかと思っています。
添付ファイルの削除とログオフだけができていないのですが、やろうと思えばすぐできそうですし、そもそもなくてもあまり困らなさそうです。

FinalRound

ふにゃさんのBGMフェードを本格的に作り出しました。
現在値と目標値と変化の速さを入力すればその目標に向かってボリュームが変化する…はずです。

すこっぷ君は100面についに到達しましたが、最後だけあってなかなか難しく、まだクリアできていません。
そういえばSuperDepthのほうは、起動時オプションで残機を増やせるんだとか。

日記の削除は本文消して

日記に削除機能をつけました。
元々削除フォームをつけて作るつもりだったのですが、確認画面の作成が面倒だったので編集フォームで本文を消すことにより削除機能を実装しました。
これはひそかにPukiWikiと同じ仕様です。
他のWikiはどうなのか知りませんが。

ふにゃさんのBGMフェードプログラムも作成中です。
参照カウントをどうするかとか、削除のタイミングをどうするかなど、ドキュメントに詳しく載っていない部分はサンプルを見ながら頑張ってみました。

CControlCheckTool

ふにゃさんのBGMのフェード処理の改良のためIDirectMusicToolをいじったりしてました。
3月14日に書いたことの実装であり、今のところセグメントによるボリューム変更をキャッチするところができていて、それを元にツールにキャッチされないようにこっそりメッセージを送ってボリュームを変更して実際のフェードを実現するところをこれから書きます。
しつこいようだけど、Bomber丸Worldに応用する前提で作っているので、ふにゃさんに特化したものにはせず、ある程度汎用的なものにするつもりであります。

カウンターが吹っ飛んだ

トップページを見ればわかると思いますが、カウンターが吹っ飛びました。
最近はバックアップを取ってないし、そもそも地味で目立ってないし、それ以前に私自身忘れかけてたので、もう戻さなくていいかと思ってます。
でも今後のためにロック処理はきっちりしておかないと。

それはそうと、爆ボンのページのバトルステージ4と7を詳しく書きました。
「よくばりはまれ」と「みずのせせらぎ」です。

それと、ふにゃさんのBGMの睡眠時用アレンジ、あれをMIDIファイルじゃなくてプログラムで制御することにしました。
というのも、Bomber丸Worldでも同じようなことをしようと考えていて、その練習もかねてDirectMusicToolを使ってみようと思い立ったのです。
そうでなくとも今の状態だと眠った次の瞬間に起こすとボリュームがおかしくなるので、そのあたりの不自然さの解消もかねています。

なんてひどいステージ!

でっかいステージ完成しました。
本当に作るのが楽しかったです。
その代わりテストプレイがかなり苦痛だったのですけれども。
20分かけて半分ぐらいまで上ったら操作ミスでチクリとやられてしまいましたよ。
もっともっとショートカットルートを用意したり救済手段を講じていかないと本気で嫌がらせステージになりそうです。

SetStretchBltMode

ふにゃさんの全体像画面、出来上がりました。
画面をはみ出すほど大きいステージだと縮小表示されるのですが、その縮小結果が最初やたらと黒々としたものになっていたので、どうなってるのかと思い、調べてみたら、SetStretchBltModeで縮小方法が変更できて、これの初期値が黒優先となっていたために暗い色ばかりになってしまっていたようでした。
それなりの画質で高速なものとか、高画質で低速なものなどがありましたが、通常チップは最初にマップチップそのものを高画質のStretchBltで縮小し、その結果をBitBltでどんどん使っていくという方式で速度を確保し、キャラチップのほうはその都度それなり画質のStretchBltで表示するようにしました。
なお、全体像では背景色は手抜きのため黒となっておりますのであしからず。
でっかいステージも9割方できてきました。

ところで、この高画質StretchBlt、実はTokioGLと縮小結果がほぼ同じなんですよね。
それでいてこのスピード、素人が練習で作った描画アルゴリズムとは根本的に違うのか、あるいはハードウェアで対応しているんでしょうかね。

NeoMuplは、プレイヤークラスをDirectShow、DirectMusic、普通は使わない無音の3タイプを作って、それらを一箇所で扱えるようにしていました。
DirectMusicは今のところ実装していないんですけどね。
あと、項目のプロパティの画面を作ったりしてました。
一応編集機能が、今実装できるものに関しては全部作り終わって、後はその変更結果を実際のデータに反映するところに来ています。

1173711171.png

複数行入力対応InputBox

ふにゃさんの残り一枠、コインにしようかとも思ったのですが、もともとふにゃさんは集めるゲームであり、集めなければならないものと集めたほうがいいものが混在していた場合、混乱する可能性が高いためやめておいたほうがよさそうです。
単なる1UPという線もあるのですが、ミスするとアイテムや敵の状態なども含めて全部元の状態に戻ってしまうためこのあたりの公平さを考えると実装が難しそうです。
通過するとヒントが表示されるというのもよさそうだと思ったのですが、これはこれで追加データが必要になるため避けたいところです。
冗談で、すぐ眠れるエリアというのも考えてみたのですが、空中にあった場合全然使えないし、そもそもゆっくり待って眠らせる楽しみがなくなってしまいます。
とにかく、実装が簡単で、現状のゲームに大きな影響を与えなくて、あればあったで嬉しいものが望ましいのです。

エディタのほうでは、拡張InputBoxに複数行入力機能をつけて、マップタイトルの複数行入力を可能にしました。
あと、メニューを作るだけ作って実装していなかった全体像(1.05ではメニューを消すのを忘れてました)を作り始めました。
大きすぎるマップなんかは縮小表示しますが、もう色々面倒くさいので、中層マップしか表示しないようにしています。

<前 次>