技術系日記
(…というかやっぱりよくわかんない記録)
2004/05/10
私の尊敬するプログラマの金子さん(winnyの作者=47氏)が逮捕されました。(窓の杜記事)
氏の作るAnumBodyやNekoFlightのようなハッカー精神に満ちた技術的プログラムに影響を受けてきた私としては、これを書いている今でも、正直ショックを隠し切れません。
氏のHPには開発の経過や実験内容を細かく日記形式で書いてあり、興味深い部分が多かったです。
NekoFlightのホーミングミサイルの軌跡を美しくみせるための調整の日々の日記を、当時何度も読んでいた記憶があります。そしていつか私もこういうものを作ろうと夢見てました。
後に私がParityShotでホーミングレーザーを作ったときは、氏の記録と同じように経緯を開発日記に書いてみました。まあ技術的には全然追いついておらず自己満足で終わっていますが、そういう追求しているというスタイルが嬉しくて仕方ないんです。
WinnyとかP2Pについて私が言うことはあまりありません。しかし憤りは感じています。
真のエンジニアにとって開発とはそれ自体が喜びであり全てなんです。その産物がどのように使われたり、どのように応用されるか束縛することも我々作り手は考えていかないといけないのですか?
2003/12/06(土)
今回は経過報告のみ。
ParityShot 0.95 test2
実験的試み1 ロック範囲サイトを付けてみる、画像はとりあえず暫定として魔方陣。
実験的試み2 ロック後の敵にロックボタンを押したままショットボタンを押していると敵が死ぬまでロックレーザーで攻撃する。
と言うわけで現在、ショットとロックボタンの組み合わせで4種類の攻撃ができるようになりました。
1.S ショット
2.L ロックオン
3.S+L ラピッド
4.LでロックしたままS ロックショット
自分で作っといてなんだけど文章で書くとヤヤコシクないかい?慣れると自由に使い分けられるんだけど、初めての人はどうなんだろう?
微妙なのは3と4、結局どっちともSとLの同時押しなんだよね。先にどっちを押したかが分かれ目なんだけど。
2003/08/23(土) ParityShot0.94e Test4に対する反響と問題と解決案
今回の有言実行バージョン、実は内部にリプレイ記憶ルーチンが組み込まれています。といっても再生機能がまだ試作中なので記録だけしてファイルには出力してません。そしてリプレイ機能の為にキー入力部も改良したのですが、その影響で変な現象がおきているようです。
まずく〜はくより
「マナフラッシュ発動条件50%は変わってないけど、マナフラッシュ発動すると100%からでも全ゲージ消費するようになってる……仕様変更なのか?実装ミスなのか?微妙やね」
ミスです。これは100%の時に限って同時に2回ボムが発動されてます。多分ボム画像も2枚重なって表示されてます。普段よりイナズマが白いので気が付きました。これはキーリピートで解決しようと思ったのですが、以前からボムが2連続でうてるのはどうかという指摘があったので。間隔をあけるためにマナ消費量を60あたりに設定しようかと。
おなじくく〜はくより
「今回のバージョンでは「ブーストボタン」押しっぱで常に倍速状態になるようになってて(仕様か実装ミスかどうか知らないけど、コレはコレで楽しいw)、」
これもさっきと同じようにブーストキーが連続ではいってるからです。大きな誤算は楽しいって言われたことですね(笑)。これは……直すべきかなおさるべきか。いや、やはり今のままだとよくない。別の形でもいいから何らかの修正がされるべきだ。オーバーブーストは普段の性能以上の力を発揮させてこそナンボだと思うから。慣性をつけるとかマナを消費させるとか。なんらかのペナルティは加えたい。ロボットものでよくあるのはオーバーヒートなんだけど、個人的にあれはストレスが溜まる。バーチャロンみたいのが好き。となるとダッシュキャンセルの実装か?
チョゴリとおおかみより
「ボスをうっかり画面外で倒して金貨回収出来ない罠が」
画面外で倒すということ自体イリーガルなことだよなー。これはボスに体力ゲージを付けることで解決しようかと思います。
同じく
「最終ロックオンのマーカー表示を変えて判り易くする(青>赤等)とか最終ロックオン掛けた状態でラピッド倒しすると隠しボーナス(ロック数が少ない程高め)とか考えてしまうんですけどね」
昔のパレットカラー時代には簡単にできた色変化って今は結構負荷がかかるんですよねー。って最初から色違いのデータ用意すればいいんですが。もうひとつマジカル(?)な方法としては赤、青、緑の3枚の画像を用意して同時に加算描画っ!そして各α値を変化させるとフルカラーの表現が可能……卓上の理論ですが。
そして最大の問題はこれらの案が有言実行されるかどうか。忘れないようにココにメモってはみたけど……。
2003/07/16 定期報告
2003/06/01(日) 製作日記定期報告
今までコンティニューしたらステージの最初に戻されていたが、その場で復活するようにする。たいしたことない変更のようだが、これからのゲームの方向性と難易度に大きくかかわると思われる。昔のゲームの復活パターン模索に燃えた私としては個人的には少し哀しい。古き良き時代は終わったと解釈しよう。
Rapidショット
現在なんとも微妙な存在である。バランス取れてないせいだろう。また実験でロックして攻撃する方法も試してみたが、結構面白い。しかしやっちまったら最後、それがゲームの主軸になってしまう諸刃の剣だ。コンセプトとしてもっている自分の好きな攻撃モードで進めれるというバランスが崩れてしまう。つまり通常ショットオンリーでも普通に戦えるゲームにしたいのである。
とはいえ、なんとかバランスとればいけるかもしれないので、やってみる価値はあると思う。通常ショットに比べてリスクである移動速度の減少とマナの消費、そして攻撃力のバランスを±0すればいい。口で言うのは簡単だがこれが結構難しい。
人によって攻略方法と評価が分かれれば成功なのかもしれない。
2003/05/16(金)曲がるレーザー研究所、東京支部
http://www.gamespot.com/ps2/action/gradius5/screenindex.html
あの硬派で一直線だったビックバイパーのレーザーもこんなに曲がってます。 ビッグコアのコアに当たるんだろうか?
動画で見るとさらにうねうねしてて面白いです。
ただ、気になるのはレーザーよりもエフェクトのα加算かな。使いすぎるとすぐホワイトオーバーしちゃうのできりぎりでバランスとるんだけど、そうしてできた表現はどれも似た色になっちゃうらしい。今回のE3出展のゲームの大半も光エフェクトが似たような表現になってるのが残念。まあこのブームが過ぎればまた違う方向の表現が模索されるかもしれないが。。。
私?えーっとたまに考えてますよ(汗。
2003/04/28(月)方針
各地でフリーソフトとして紹介されているParityShotだが、いつの間にフリーになったのだろうか?一言も書いてないんだけどな。
まあ、ええけど。
いや、そうやってあいまいにしているからいけないのかもしれない。
というわけで、現在のパリティショットの位置付けはフリー版という事にします。
しかし、もし製品版がでてもフリー版とは基本的にゲーム内容には差異がないようにします。(Linuxのディストリビューション販売のように)
パッケージ版にはゲーム以外の部分で+αの付加価値がつくようにします。豪華マニュアルとか。とりあえず、冬コミには何か出したいなー。という希望的観測。当分の目標はクオリティを高めることだが。
2003/03/31(月)ショットだ、ショットで行こう
レーザー
そしてより美しく、エレガントに。とはいえ、メインウェポンはあくまでショットであり。シューティングの真髄もショットだと思う。
道に迷ったらショーティア(怒首領蜂大往生)を選べ。しかしレイニャンも捨てがたい。つうかレーザー強化だからレイニャンなんだろうか?すごいネーミングセンスだ。
てなわけで次の目標はロックショットorガンナーモードのようなショットにおける機能美を追求してみるったい。
2003/03/23(日)ホーミング係数 4.5×101
ホーミングの軌跡がもっとも美しくなるように研究中。
一つ判明したのが馬鹿なほど美しいということだ。なにしろ真面目な誘導は敵に一直線で飛んでいってしまうので軌跡が単なる直線になってしまうからだ。
とは言え馬鹿すぎても駄目である。つうか当たらなきゃゲームになんないし。
const float rate = 45.0f; // 誘導率
const float resist = 0.94f; // 抵抗
// 誘導(実際はもっと複雑です)
flaot a = atan(len_y, len_x);
add_x = add_x * resist + cos(a) * rate;
add_y = add_y * resist + sin(a) * rate;
x += add_x * speed;
y += add_y * speed;
2003/02/28(金)湯水のようにメモリを使おう
先日の日記で
>ストリームじゃなくて最初に一曲丸ごとデコードしておくという方法もあるのだが
なんて言ってたら、東方妖々夢のVer.0.06(02/05UP)にて
・環境設定に「BGMをメモリにロード」を追加
というオプションが追加されているではないか。(再生には体験版プラスが必要だが)
なるほど、BGMといえばストリーミングと思っていたが、こっちの方も主流としていけるかもしれない。
というわけで即採用。まあ、時間があればoggストリーミングでも負荷0になるように研究してみるのだが。
ちなみにもう一つ案として、インストール時にoggからwavに変換したBGMを作成しておくなんてことも考えたんだけど、…それは…どうなんだろ……?。
CPU節約 vs メモリ節約 vs HDD節約?それはともかく東方面白ィ。
2003/02/23(日) ogg化
今まで、midiで鳴らしてきた音楽をoggにすることにする。大体一曲1M〜2Mぐらいの容量、これだったらダウンロードサイズとしてもいい感じである。Jun.A(音楽)氏も音源を気にしなくてよくなるかも。
問題はデコード時の負荷である。ストリーム再生してCPU負荷率が2%ぐらい(Pentium2GHz)。MP3より負荷が高いと聞いていたので、まあこんなもんだろうと思っていたが、WinAmpで再生した時の負荷率がなんと0%ということに気が付いてちょっとショックをうける。
なにが悪いんだろう。oggサンプルコード通りにやっているのに。
ストリームじゃなくて最初に一曲丸ごとデコードしておくという方法もあるのだが(ゲームミュージック系は無圧縮でも大体10〜20M程度なので全部メモリに収まるし)。
まだだ、まだ終わらんよ。
2003/01/19(日) バグ?
ものすごーくまれにテクスチャがバグって左図のようになるのだが。
原因がいまいちわからない。
サーフェイスのロストか、
テクスチャの読み込みミスか
はたまたドライバのバグなのか。
これに関する情報を少しでも持っている方は教えてください。
(現在募集中2003/2/24)
2002/05/19(日) Geforceバイリニアフィルタ問題クイズの解答
2000/10/7の日記を覚えているだろうか?私は忘れていた(笑)。
ところが、最近αチャンネルのことを調べてたら偶然にもGeforceでバイリニアフィルタがかかんない問題の原因がわかってしまったのである。
答えは
透過色を使った画像にバイリニアフィルタをかけて輪郭が滑らかになっちゃうRivaTNTの方が変なのでは?
というのは、HELモードで起動した時も輪郭がギザギザになってたので、実はこっちの方が正解なのかなと思ったからである。
輪郭を滑らかにしたかったら透過色抜きを使わずちゃんとαチャンネルをつくれとの結論でした。
てなわけでこつこつ1bitのαチャンネル画像をつくる今日この頃。おかけで以前はとんがってたコインも今ではこんなに丸くなりました。(当社比)BEFORE→AFTER
→
2002/04/03(水) ファイルサイズ肥大化?
これまでなんとか3MB以内に抑えてきたダウンロードファイルサイズですが、今回のサイズは3.6MB。こんにちのブロードバンド時代にたかが数メガバイトたいしたことないといえないこともないのですが、私自身ISDNなのでこのまま肥大していくとFTPでのUPが大変なんです。 こういう時はCDで配布している同人ソフトの方がうらやましく思えます。MIDIではなく高品質のBGM、キャラクターボイス(萌え)、フルカラー素材画像(もちろん無圧縮)。嗚呼なんか別の意味で大変そう。
でも、もし可能性としてParityShotをコミケとかでCD販売するとすれば……
うーん。その前に中身をもっと作りこまないとだめだな。
2001/05/21(月) 内部時間固定化宣言
X‐boxが気になる今日この頃、クラスライブラリを作ると言いながらオブジェクト指向なんたらの深さに挫折しながら、こつこつ作りなおしてる今日のこの頃。
少しはC++のなんたらがわかってきて前よりはマシなクラスが作れるようになってきたのだが、
Rubyの作者曰く「クラスは3回作りなおして完璧になる」
って事は、あと一回作りなおすことになるのか?がっくし。
功夫の道はまだまだ長い。
それとは関係無しに、ゲームの概念的に変わったことがある。
AutoFrameの廃止である。AutoFrameは造語だけど意味としては固定FPSを持つコンシューマ系ゲームシステムに対して、スペックの違いやリフレッシュレートの異なるWindouwsでも同じようにゲームが動くようにするゲームシステムの概念である。
利点としては、たとえユーザーがリフレッシュレートを80に設定してもちゃんと同じスピードで動作し、しかもスムーズであるという事。また処理に負担がかかってもゲームループ事態が同期するので比較的綺麗にゲームが進行する。
そう言うわけでELライブラリの作者も推薦してた概念なのだが、シューティングゲームで使うには大きな弱点がある。
それは異なる環境下ではゲームの性質まで違ってしまうことだ。たとえば、敵の弾が飛んできて目の前に来た時に処理負担で描画スキップが発生しても次の瞬間には死なずに弾がすり抜けてしまうとこがあるのである。本来ならば描画スキップが発生しても死んでいなければいけない筈だ。
もう一つの弱点としてリプレイが作れないという点も上げられる。無理すれば作れないことも無いが誤差のある浮動小数点では違うゲーム環境で精密なリプレイを再現にするのは難しいだろう。
てなわけで60FPSの固定内部時間のゲームループに移行したいのだがX-BOXがその辺どうなっているのかが気になる今日この頃。
2000/12/25(月)
爆発をちょっとカッコ良くしてみる(当社比)
2000/10/7(土) 不具合?
右の画像。上がRivaTNT2の画像で下はGeforce2だが違いがわかるだろうか?
そう、Geforce2ではバイリニアフィルタがかかっていないので回転中の画像がギザギザしているのだ。
何故このような現象がおきるのかは不明。考えられる原因としては。
1.プログラムミス、もしくは足りないステータスがあったのにもかかわらずRivaTNTではたまたま動いていた
2.Geforce2のドライバの不具合
3.ローカルルール
2000/9/25(月) CRA
ネームエントリーなどというハイカラなものをつけてみるテストじゃ。
3文字だけって短いかな?
AAAなんて無粋な入力する奴は勝手にCRAに書き換えちゃえ。
え、どうしてもAAAって入力したいって?
だったらファイルを直接書き換えて…(根本的間違い)上下のキーを押す事で大文字、小文字の切り替えが出来ます。
2000/9/5(火) ソードダンシング
今のところただの演出
これを実体化するには単形と直線の当たり判定処理をやらないといけないのでなんとなく面倒。
まあいつかはやらなければいけないとは思っていたけど。
2000/9/04(月) デモ中にボタンを押してタイトルに戻ろうとすると落ちちゃうバグの原因
いままでのゲームのメインループの流れとして
1.ゲーム処理
2.描画処理
3.入力処理
の順番で処理していたのを新しいバージョンでは
1.入力処理
2.ゲーム処理
3.描画処理
の順番に変えました。これでなんで落ちちゃうかというと、たとえ1番で入力があってタイトル画面に戻ろうとしても、2と3は必ず通過しないとループが終了しないんです。つまりボタンが押されたときにVRAMの内容がメインゲーム用からタイトル用にすでに入れ替えちゃったのにもかかわらず、最後に一回だけパリティやら背景やらの既に存在しないオブジェクトを表示しようとしちゃったわけなんです。
うっかり八兵衛ポイント+1 (現在のポイント累計3ポイント)
2000/8/26(土) うっかり八兵衛ポイント+1 (現在のポイント累計2ポイント)
マナフラッシュ(仮名)を使うとほとんど全部の雑魚キャラと敵弾を消滅させることができるのですが、時々マナフラッシュを使った瞬間にパリティがやられてしまうことがあったのでバグと思い調査していたら。 今回から、ある程度大きい敵がやられるとその爆発開始から大爆発までに重力に引かれて落ちていく演出があるんですが、その時の敵キャラにはまだあたり判定が残っていることが判明。
つまりパリティの頭上に巨大敵キャラがいる時にマナフラッシュを使うと、それが落ちてきてパリティも巻き添えを食らっちゃいます(笑)
まあ、これはこれで面白いかなと思いつつ様子見の状態なんですが、どうでしょう? 知らない人がこれ食らったらやっぱりバグと思うかな…