2008/11/07

今日の壁

・壁との当たり判定実装
衝突の式も入れたが適当にやったので予想通り上手く行かない。汎用性がない上に汚いので作り直し必須。

再びOpenCVやOpenALに興味を持ってみた。特に後者の日本語情報の少なさが魅力。OpenCVでもカメラの画像の取得にはDirectShowを使っているようなので微妙。どちらもC言語で書かれているので、大きな面倒はなくD言語のインポートヘッダを書ける。

2008/11/06

今日の時計

・エネルギー計算
昨日に引き続き。式は変わっていないはずなのに、今日試したら直感にあまり背かなかった。衝突面の角度によって大きく差が出る模様。

一般相対性理論勉強中。シュヴァルツシルトの解をだいぶ理解した。今の状態でもプログラムが書けそうだが、この先の章に具体的に運動の計算が載っているのでそこを読んでから。

SQLiteに興味を持ってみた。ただ、蘇生に使うのは今更感があるし、復讐では必要性を感じない上D言語用にするのが大変そう。現状使い道があるとすればパラボラマスター程度だが、毎回ランダムで設定をしたほうがいい気もする。

2008/11/05

今日の直感

・エネルギー計算
衝突によるエネルギーの損失が、どうも変なように感じたので損失を直接計算する公式を使うのをやめて、前後それぞれの運動エネルギーの和を求めてその差を取るという方式に変更したのだが、結果が変わらない。その式はあっているはずなのだが、どうも直感的に変に感じる。運動エネルギーの損失はそんなに直感から背く結果となるのだろうか。

Re:Actionで、ボス敵を出そうと思って暫く構想。普通に大きいだけの丸では面白みがないので、もう少し複雑な形を取りたい。だが、衝突判定の都合上円以外のものを使うの大変。ということで、円をいくつかつなげた物をボスにする事に。ただ円を繋げるだけでもあまり面白くないので、化学からネタを引っ張ってくることにした。

相対性理論の勉強を開始。学部3,4年生向けと書かれていたので、4年生の自分にはぴったり。まだあまり進んでいないが、ややこしさがなさそうでいい感じ。

OpenGLでモデルファイルを読み込むライブラリを見つけた。まだ試していないが、これで上手く行くようであればフォトンとかもOpenGLで作りたい。

2008/11/04

今日の鵺

・Re:Action進行
全方位シューにしようと思っていたが結構きつかったので横シューにした。弾と敵との間の判定実装。

Re:Actionの完成日を宣言しておいてなんだがそろそろSSも作りたくなってきた。

それから少し考えたこと。「個性的な鵺」について
鵺というのは西洋で言うキメラのような物だが、キメラ程はパーツになっているのが変な動物ではない。でも個性的な見た目をしている。
しかし、平凡な要素を沢山足し合わせたゲームや物語というのはたいてい没個性的。奇抜な要素を組み合わせても個性的になれないことがある。この鵺と、ゲームや物語の間の差は一体何であろうか。

2008/11/03

今日のトンネル

・デバッガ使用成功
・Re:Action進行
Code::BlocksでのDdbgの使用に成功。デバッガを指定するところに、ddbg.exeではなくもう一つのバッチファイルの方を指定すると使えるようになる。その際、ファイルを選択するダイアログではExeファイルしか指定できないようになっていて、ファイル名を手書きで指定するのがミソ。使ってみた感じ、Descentから使ったときよりも使いやすく感じたが、何故かSDLの初期化が異様に遅くなる。

乱数を使いたかったので、ドキュメントを参考にしてやったら何故か未定義と出る。良く見れば使っているDMDのバージョンが1.0系列で、使おうと思っていた乱数の機能はDMD2.0系列からのサポートだった。そこで、2.0を入れてコンパイルして、最初に文字列がconstであることに引っかかった。これはキャストを使って解決したが、今度はOpenGLのリンクでずっと文句を言い続けた。インポートヘッダを書き直したり、インポートライブラリを作り直したりしてリンクが通ったと思えば、変数を使うと変なタイミングで例外が出て、OpenGLの関数を使うと確実に落ちる。
色々試したが上手く行かなかったので諦めて1.0の乱数を使っている。マルチスレッドを使わない限りは大きな問題が発生することはないそうなので妥協。1.0に戻すとき、ライブラリファイルを変えたまま戻し忘れていたせいでOpenGLの機嫌を損ねてその原因の究明にも時間がかかった。

なんだかんだあってD1.0でRe:Actionの開発を進行。仕様書を書いて仕様を固め、その実装に入った。現在敵を沢山出して動かすまで。ランダムの関数の戻り値がuintだったことで微妙に詰まったり。
ゲームの救済システムにトンネル効果が登場予定となった。トンネル効果が意味を持つスケールよりも明らかに大きすぎるのだが、トンネル効果と呼ぶのが一番しっくり来る。
Re:Actionの完成目標は今月20日に設定。

2008/11/02

今日の演習

・開発環境変更
・反動ゲームタイトル決定・進行
・蘇生ストーリー発案
D言語の開発環境を、DescentからCode::Blocksに変更した。Descentに比べて、正式にコンパイラがサポートされているのがいい。コード補完機能はある程度動くが不完全。Descentでは他のファイルに書かれたものは補完されないようだったが、こちらはまだ基準が分からない。このIDEは本来はC++用なのでC++の文法で通じるように書いたところは利くのかもしれない。
デバッガは動かない。Ddbgと連携できると公式には書かれていて、スクリーンショットもあるのだがその設定方法が書いていないように見える。

反動ゲームのタイトルを決定。「Re:Action」。つまりは反作用。アクションゲームに対する一つの回答、とかいう訳ではない。そもそもアクションゲームというよりはシューティングに近くなりそう。GIMPを使ってロゴを描いたりもしてみた。
衝突の式を自分で計算せずに他のところを見て実装。これから一般相対性理論を自力で学ぶのだからこれぐらいわざわざ車輪の際発明をしなくても許される、と無理やり妥協。めり込む問題は美しくない形で解決。そのうち直す。
衝突によるエネルギーの損失に比例した量のパーティクルを出す機能を付けた。パーティクルをただの演出から、ゲームの重要なアイテムに格上げ予定。

蘇生の4面から5面へのストーリーの展開も考えてみた。これまで考えていた案に比べてより筋が通っていて、且つキャラクターの名誉を傷つけない妙案。ついでに5面のコンセプトを考えてみて、その結果奥義の名前が決定。

2008/11/01

今日の回転

・衝突仮実装
物理のノートを読んだら式が出てきた。複素平面を利用して、速度ベクトルを衝突面に沿うように回転させ、衝突の法線方向の要素に関して衝突の演算。その後保存されている衝突の水平方向の要素と合成して、最後にXY座標に合うように再び回転させる。
行列が出来なくても複素平面を使えば2次元なら簡単に出来る。3次元も多分可能。
今のところは、衝突した後相対速度が落ちて、物と物がめり込むようになっているが、衝突後に適当な距離に矯正してやれば解決するはず。

ブロック崩し風の背景に、色々とグラフを書こうかと思っていたが、数式をそのまま背景に描画するのも悪趣味でいいと思った。衝突するたびに背景に衝突の数式を出してみたり。ブロック崩し風の演出のコンセプトは数学、反動ゲームのコンセプトはパーティクル。
画面が見えなくなるぐらいにパーティクルを出すネタというのはいいと思う。