「パネルγ」に関する日記(7)

<前

迷惑な話じゃ

えーかげんDirectX9SDKでコンパイルできないのに痺れを切らしたので、DX9SDKをアンインストールし、DX8.1SDKをマイクロソフト以外から探してきてインストール。
一発でコンパイルが通りました。
これでまたパネルγの開発が再開できます。

今日は飛び込みがあったらしく電車が30分遅れに。
1時間ほど余裕を見て家を出ていたからよかったものを…

プロトタイプ

「パネルγ」のプロトタイプを作ってみました。
操作はマウスでイロカエのみ、「消す」ボタンを押すまでは勝手に動き出さない、プレス機がない、音楽がない、ゲームオーバーもない、消えるのは最小単位の四角形のみ、コンボと連鎖の区別がない、といういろいろな制約がありますが、まあまあこんなものかといったところです。
普通に消すだけだったら5点、何連鎖かすると数百点、何十連鎖もすると万の単位に!
パネルの落下速度が少し問題か。
スクリーンショット公開しました。

困ったときのリビルド

DirectX9をインストールしたらDirectMusicで一部の曲の演奏が変になるようになりました。
よりにもよって自分の作ったMIDIが…
しかもDirectX9SDKだとVC++6でDirectSoundが使えないときた!
…と思ったらリビルドしたらあっさりコンパイルが通ったり。あほらし。
stdafx.hを変更したらリビルドするってことまだ覚えんのか自分は!
とりあえず理不尽なエラーが起こったらリビルドすればいいと覚えておこう。

「パネルγ」がルミネスに似ているというのは、問題なしということにしておきます。
四角形を作るというのは案外誰でも思いつきそうだし、落ち物と入れ替えではゲーム性も大きく違うし、音楽もコンセプトが全然違うみたいだし…

具体的な仕様についてですが、まず、FPSは、ゲームが4分の3秒単位で進行するため4の倍数、また、ミリ秒単位で性格にタイミングを合わせる必要があるため1000の約数、ついでに一般的な画面のリフレッシュレートは60FPSなのでそれ以下の数値、コマ数が少ないとパネルが落ちる表現やプレスから逃げる表現がしづらいので高いFPS、ということで、40FPSに仮決定。
コンボは一回につきコンボ継続数のみに比例した得点、連鎖は基本得点と連鎖継続回数に比例した得点、同時消しは単純にそれらの総和。
ただ、大きい正方形で消すと中に小さな正方形がたくさんできることになるので、同時消しも案外儲かると思います。
でも普通に消していくと多分数百点くらいがいいところだろうと予想しています。

再インストール完了

ブラウザを入れなおすためLunascapeのサイトに行ったらバージョン2があったのですが、プレビューリリースということで、今は導入しないほうがよさそうだし、だからといって旧バージョンをインストールしてもすぐにいらなくなりそうだったので、とりあえずしばらくはIEで我慢ということになりました。

1日に更新していたのですが、トップページの更新を忘れていました。

DirectX8.1SDKがなかったので仕方なく9SDKをインストール。
サンプル見てみたけど数は少ないし大して見た目変わんないのにピクセルシェーダなんか使ってコンマ数FPSまで重くなるし、利用者を舐めてんのかと言いたくなる内容。
実際に製品として組み込むときにはピクセルシェーダを使わない設定とか付けたりするんでしょうかね。
とりあえずこれで「パネルγ」をリビルドしてみたけど必要環境がDirectX9になってしまっていないか不安です。

CGI&PHPの動作確認環境も何とか復帰。
ついでに新日記もちょいと更新。

本末転倒ではないか

何気なくゲーム雑誌を見てみたら四角形を作って消すとか、音楽がどうのこうのとか、そんなPSPのゲーム、「ルミネス」が紹介されていました。
妙に「パネルγ」に似ていて、しかもタイミングがタイミングなだけに実にまずい。
落ちるか入れ替えるかなどの違いはあれど「四角形を消す」と「音楽とゲーム性が絡む」というのは「パネルγ」の肝となる部分なのでここがかぶっちゃうと本当にまずい。
ルール変更してルミネスから遠ざけねば!

  • 基本ルールは「入れ替えて消す」。
    これ自体は問題ではないけれどもう一捻りあったほうがいいのではないか。
    「回す」は「入れ替える」の一種、「落とす」は根本的にダメ。
    「色を変える」、これはいいんじゃないだろうか。
    「イレカエ」と「イロカエ」で一文字違いというのが良さそう。
    もしかしたら共存できるのではと思います。
    元々の操作は左クリックで入れ替え、右クリックでパネル生成だけど、Shiftキーを押しながら左右クリックで色変え。
    ただ、別にこだわりはなかったんだけど、一度マウス操作にすると決めたからにはマウス操作だけでも遊べるようにしたい、ということで、マウスホイールで「イレカエ」と「イロカエ」を切り替えるとか。
  • いっそのこと打ちあげてしまえ!
    完全完璧一点の疑いもないほどに「メテオス」のパクリだけど。
    やっぱダメかな。
  • 消えるルール、実は四角形を作って消すということに拘りはない。
    ただ縦横斜めというたった一次元の並びだけで消すというのはもう古いということで二次元にしたのみ。
    絵を作って消すということをやってみたかったんだよね。
    例えばパネルを別の色のパネルで囲んで中身が消えるとか?
    でもそうすると連鎖が組みにくくなるので最も簡単な図形の四角形が使いたいところ。

WindowsXPSP2のセキュリティセンターが本格的に腹が立つ。
なんでウィルスバスターが一瞬途切れただけでポップアップを出しまくるんだ!!
問題を解決するためにはここをクリックしてくださいってのをクリックしてずっと待ってやっとセキュリティセンターが出たころには既にウィルスバスターは復帰しているのだ。

こんな無駄なことでいちいち作業の邪魔をされては能率が著しく下がるどころかセキュリティ警告の信頼性も著しく落ちる。
本当に問題となるのは、10分程度無防備な状態が続いたときだ。
1秒やそこらだとセキュリティセンターを出すリスクのほうがはるかに大きいというのに。

メモリ

「パネルγ」の使用メモリについて考えてみる。
画面、幅640*高さ480*16bitcolor/8bit*2画面=1.2MB
画像リソース、幅256*高さ256*8bitcolor/8bit=0.1MB
BGMリソース、約1KB*10曲程度=0.0MB
セーブデータ、0.0MB
パネル、横36*縦28*(色+状態+その他)=0.1MB
何もしない現状で使っているメモリ、5.6MB
その他もろもろ含めると、10MBくらい。
参考までに「ふにゃふにゃ」の使用メモリはプレイ時で約5MB。
BGMをリソースとしてぶっ込んでみました。

レポートまたしても再提出。
大丈夫なんだろうか…
でも次こそは…!

微妙なものを作ってみたいものです

「パネルγ」はマウスを激しく動かすという特性上よほどのことがない限りフルスクリーンモードでの利用になるのですが、そのときBackBufferFormatをD3DFMT_A8R8G8B8にするとREF(要するに一応動くが重い)モードでデバイスが作成されたので、本当にA8R8G8B8が必要かと考えると、バックバッファはそのまま画面に表示されるんだからA値なんて不要ということで、X8R8G8B8にするとTnL(要するに速い)で動いてくれたようで、一応対応しているディスプレイモードを調べてみたら、R5G6B5の65536色モードも使えるようなので、どちらかを設定から選べるようにしてみたいと思います。

「Bomber丸」の32bit版を作りました。
VB6でVB2のプロジェクトを読み込んでコンパイルしなおしただけですが、VB2ランタイムのない新しいコンピュータでもVB6ランタイムがあれば動きます。
そこまでしてやりたくなるかどうかは微妙なところですが…

そういえば「微妙」って「美しさや味わいがなんとも言えずすぐれているさま」って意味もあるようですね。
「美妙」と同じ意味ですが。
ということは、良いか悪いか聞いたときに「う~ん、微妙。」と答えてもらったらすぐれていると言ってもらったことになるので喜ばしいことなのです。
ついでにいうと、「微妙」には「微」という文字があるにもかかわらず「少ない、小さい」といった意味は本来なく、強いて言うなら、比較対象との差が小さいことが微妙ということらしく、数学的な表記をあえて使うなら、x≒0ではなくdx≒0ということであるようです。

知らぬはエゼロばかりなり

ウィンドウの淵の問題、CreateWindowのときにスタイルにWS_POPUPを指定すると枠が消えてくれました。
「パネルγ」のことです。
連鎖と同時消しはこの手のパズルゲームでは定番ですが、それに加えて、今作ではコンボ(仮称)というのがあります。
これは、連鎖と同じタイミングで連鎖とは関係なく連続で消すこと。
要するに間を空けずにどんどん消していけば得点が増えるということ。

学校で実験やってたんですが、今回は簡単な実験で、来週先生が出張だということで、今日中に2週間の実験を終わらせました。
ところが、簡単で2つ一度にやってもすぐ終わるはずだった実験が思ったより時間がかかってしまい、乗る電車も遅くなって、人身事故のため止まってしまいますます遅くなって、明日のテスト勉強をする時間がなくなってしまい、開き直ってゲームやってました。

というわけで、「ふしぎのぼうし」やってました。
エレメントが4つ集まって、そろそろ何ができるか何と無く察しがついてきたところ、予想通りフォーソードができてきました。
で、これまた予想通りグフーたんがタイミングよく登場。
エゼロはビックリしてましたがプレイヤーは大抵ここまで来るとこうなることは想像がついていたでしょう。
さて、グフーを倒すためには5つ目のエレメント、すなわちフィフス・えれm…そろそろやめます。

明後日がレポート、明々後日がまたテスト

学校のパソコンに入っているVS.NET2003にはlibci.libがないのでDirect3Dを使ったプログラムがビルドできないようです。
最初からSDKが入ってるくせに使えないとは何事かっ!
他のVS.NETはどうなんでしょうか…

XPの丸いウィンドウの淵、ウィンドウモードならともかくフルスクリーンモードだと四隅が開いてしまうので右上をクリックしてしまったときものすごく困るんです。
ウィンドウの淵をなくすかウィンドウを最大化すれば隙間はなくなるんですが、VBみたいにボーダースタイル無しはCreateWindowではできないみたいだし、最大化してもダブルクリックで元に戻っちゃうし何故か移動できちゃうし…
でもVBだって内部ではAPIを使っているわけだし、できないことはないと思うのですが。
サンプルでもこのあたりは妥協しているようです。
「パネルγ」はなかなか思うようには進みません。

テスト、直前しか勉強しなかった割にはできたような気が、でも、直前しか勉強しなかったなりの点数にはなりそうな気がします。

イメージ音楽

「パネルγ」作ってます。
ウィンドウの作成とDirect3Dの初期化を作りました。
フルスクリーンがうまくいってなかったりしますが大方良好な感じです。
ほとんどサンプルからのコピーだけど文の一つ一つの意味を理解しながら写していかないと後々面倒なことになりそうです。
いや、実際そうなりつつあるんですけど。
あと、BGMを数種類作りました。
で、ある程度揃ってきたので適当に繋げて実際のゲームみたいなイメージのものを作ってみました。
チャンネル数の関係でいくつかの楽器が似た音色のものと置き換わっていますが、大体イメージどおりになってくれているようです。
ただ、ピンチのときの音楽だけがちょっと浮いてるかな、という印象を受けます。
一応、構成としては、ゲームスタート→2連鎖+同時消し1回!→1~100点のテーマ→11連鎖+同時消し4回!→100点~200点のテーマ→こりゃやばい!→苦し紛れに普通消し→こりゃやばい!→ゲームオーバー…てな感じになってます。
ゲームオーバーだけはまだ作ってないけど適当に入れました。
専用ページも一応開通。

「ふしぎのぼうし」のしずくの神殿をクリアしました。
なんででかいザコはこんなに強い!
あと、剣技全部覚えられたようです。

あ、実験レポートもテスト勉強も宿題もやってなかった!

世界の中心で虎が回る

「パネルγ」アイコン作りました。
何も表示されないけどせめてアイコンくらいは表示できるようにと。
あと、WM_PAINTメッセージを受け取ってBeginPaintとEndPaintだけするようにしました。
何もしてないときよりはマシなれど相変わらずぐちゃぐちゃ。

今日も3Dやってみました。
いろんなところから拾ってきたサンプルをつぎはぎして光の当たる虎を作りました。
カメラが回りライトも回ります。
本当は虎も回るはずだったのですが、いつの間にか回らなくなっていました。3Dの神秘です。
虎だけしかなかったら虎が回ってるのかカメラが回ってるのか区別がつかないので地面も用意してみました。
地面には法線ベクトルが設定されていないのでアンビエントライトしか当たらず暗くなっています。
ちなみに地面はこれまたどっかから拾ってきた世界地図で、虎に踏んでいるところはちょうどアフリカのあたりになっています。
ファイル置き場にそのときの画像があります。

おめでとう!ありがとう!

スマブラDXでやっとノーダメージクリアを達成しました!
キャラはマルス、シンプルモードベリーイージーストック1で数回挑戦。
飛び道具を使うキャラは万が一にもシールドリフレクトされたらまずいので飛び道具主体のキャラは除外、やられ判定のない剣による素早い攻撃ということでマルスに決定。
通常ステージのザコどもはスマッシュか強攻撃剣先当てでスパッとクリア。
動きがわかりやすすぎるドクターマリオは画面端で待ち伏せてのこのこやってきたところを後ろ投げで場外へ直行。
メタルもベリーイージーでは落下速度が速いだけ。
神殿だけはステージのど真ん中にいてもルーペ化してダメージを受ける可能性があるのでできるだけルーペ化しない位置をキープ。
「ターゲットを壊せ」は一応1個だけ壊してからダメージを受けないうちに転落。
「フィギュアゲット」は一応全回収。
「突き進め!」は一番近くのゴールに突き進め!
ここんとこのダメージは関係ないと思うけど念のため。
で、最後の難関マスターハンド。
他のザコどもとは違い一発で決めることが不可能であり攻撃範囲もステージ全体に及ぶため確実に避けなければならない。
指先からビーム→攻撃はせずステージ左端で避けに専念
はたき・キラー→攻撃はせずシールドで回避
つかみ・人差し指突き→攻撃はせず緊急回避
上から拳骨→左端で避けた後攻撃
叩き潰し・指で蹴る→空中ジャンプから上必殺技で反撃
奥から拳骨→避けるだけ
奥から突進→2段ジャンプからシールドブレイカーで帰ってきたところへ反撃
待機→どんな攻撃が来るのかわからないのでこっちも待機
最後は時間がなくなってきたので突っ込んでいきましたが、何とかノーダメージクリアに成功しました。
そして最後のフィギュア「ディスくん」をゲット。
フィギュアが全部揃った!

「ふしぎのぼうし」、小さい状態だと泳ぐほうが圧倒的に速いんですね。
沼地ではうまく水溜りを見つけて飛び込んでいけば相当速く移動できるようになります。

「パネルγ」のプログラムを作り始めました。
ウィンドウだけ作ってあとは必要そうなヘッダファイルをインクルードしただけ。

ガンマ線

とりあえず昨日のパズルゲーム、「パネルγ(仮)」という名前にしました。
いや、「(仮)」は付きませんけど。
で、BGMにこだわるということで、まず2つMIDIを作ってみました。
1つ目はメインBGM。
ただし、パネルを消すたびに別の曲と摩り替わって、長い間聞くことはないので、8小節の短い曲として作りました。
メインBGMは得点や状況によってたくさんのアレンジバージョンが存在し、テンポの速い曲だと10秒もしないうちに1ループ終わってしまうかもしれません。
4分の3拍子の短調の曲です。
実は昔遊んだWindows3.1のフリーゲーム「ヨコリス」だったか「ヨコラモス」だったか、そんな名前のゲームのBGMに影響を受けています。
0点のテーマは、ゲームを始めた最初のときだけに流れるので、カウントダウンの音も入っちゃってます。
2つ目は連鎖BGM。
パネルを消すと流れ出し、連鎖が続いている間流れ続けます。
1小節が1連鎖の時間と同じなので、1連鎖ごとに1小節進み、1小節ごとに半音ずつ音階が上がっていきます。
そして、17連鎖以上するとそれ以上音階が上がらなくなります。
実は昔遊んだWindows3.1のフリーゲーム「うにさめ」の効果音に影響を受けています。
連鎖が終了すると次の通常BGMに移り変わります。
通常BGMのほうをファイル置き場にアップしました。
短調とギターって合うねぇ。
ちなみに、DirectX8の練習も兼ねて、VC++6&DX8で開発することにします。
もちろんスコアランキングにも対応で。

家のパソコンでも3Dやってみました。
SDKに付属のサンプルをいろいろ改造。
やりたいのはトゥーンレンダリング。
球とか円筒などの簡単なのを表示しても面白くないから、チュートリアルの最後、Xファイルからメッシュを読み込んで表示するサンプルを使ってみました。
とりあえず虎のテクスチャは要らないので表示コードをコメントアウト。
そしたら灰色一色の虎が。
テクスチャ貼ってるだけの色もライティングもない虎だから当たり前ですけど。
で、ライティングのサンプルからその辺の処理引っ張ってきたら今度はほぼ真っ黒に。
これは環境光の色そのままだから、恐らく法線ベクトルが定義されていないために直接光の成分がなくなったためだと思われます。
と、とと、まてまてまて、もうひとつ、オブジェクト側では反射のしかたにも2種類あって、そのうちのアンビエント反射、要するに入射角と反射角が一緒ってことは、「ふにゃふにゃ」のビーム反射処理にも応用できるんじゃないか?
それでもって、話は変わってDirectMusic、これまたDirectX8では良さそうな機能が追加されてたりして、全面的に8使うようにしようかなと思っていますが、DirectDrawがなくなったことを考えると思い切れないのも事実だったりします。

パズルゲームを考えています。パネポン風味のやつを。
数色に色分けされた長方形(以後これをパネルと呼ぶ)を画面の特定の範囲にルールに沿う範囲で整然と並べ、任意の2パネルを交換することによりルールによって定められた数種類のパターンのうち最低一つに一致するようパネルの配置を変更し、パターンに一致したパネル全てを消去し、それにとって得点を得る、また、パネルが消去されたことに起因してパネルの配置が換わり、それにより新たにパターンに一致する配置を作り、連続して消去すること(以後これを連鎖と呼ぶ)、そして、一度の操作でより多くの、またはより困難なパターンに一致させることにより通常より多くのパネルを消去すること(以後これを同時消しと呼ぶ)、さらに連鎖動作中にパネルを移動することにより、連鎖終了後に再びパターンに一致するように配置し、連鎖を続けること(以後これをアクティブ連鎖と呼ぶ)により通常より多くの得点を得ることのできるゲーム、ということです。
もちろん違いもありますよ。

縦や横に並べるわけじゃない
これをやっちゃったらパネポンそのものでしょーが!
次世代らしく、四角形になるように並べます。
可愛い女の子が出ない
昔にも言ったことがあると思いますが、そんなもの私に期待するもんじゃありません!
そして本当に誰も期待していないんですね…
せりあがってこない
その代わり横からプレス機が迫ってきます。
横長
横から迫ってくるので横長にします。
マウス操作が基本
隣同士を入れ替えるのではありません。
好きなところ2箇所をマウスでクリックして入れ替えるんです。
パネルが多い
ちょっと理由があってパネル数を多くします。
多分目一杯パネルを出したら1000個超えると思います。
ほかにも、こだわりたい部分としては、BGMがあります。
パネルを消すとちょろっと短い音楽が鳴りますが、連鎖をすると短かったのがだんだん長くなって、派手になっていきます。
また、通常BGMも、得点や状況で切り替わったりします。
0点の音楽→1連鎖の音楽→1~100点の音楽→1連鎖→2連鎖→3連鎖→4連鎖の音楽→101~300点の音楽→ピンチのときの音楽→ゲームオーバー…みたいな感じで。
ゲーム音楽のインタラクティブ性というものはまだまだ挑戦できることが多そうです。

<前