過去の独りごち/独りごとはこちら
過去のJavaアプレットは
こちら

 

5/27 因数分解

 また久々に上げてみますか。キーボードでの操作法が大幅に変わりました。マニュアルをご確認ください。

mukiSTG_0527.zip
(26.7MB バイナリ)

 今回からZiki_7氏の珠玉の作品より、有り難くBGMをお借りいたしました。何気にこの作品の開発の契機になったのがZiki_7氏の某楽曲でして、その曲もゆくゆくは、この作品の中で使わせて頂きたいと思っています。圧倒的なスピード感と印象的なリズムが実に心地良いZiki_7氏の曲ですが、実際に自分でゲームを作ってみるとなんだかふんわりした作品になってしまいます。どうしてだろう…。東方だからですねきっと。

 Ziki_7氏のサイトや掲示板によると二次使用に関して特に制限を設けていないとの事で、有り難く使わせていただきました。これから有難うの報告しに行ってきます λ ...

 人によっては、いくら明記してあるからとて無断使用・無断再配布とは失礼極まりないとお思いになるかもしれませんが、僕はそういう奴です。ねぇ、Ko-Taさん(何故) 実際のところ、Ziki_7氏は実生活の合間に幾つものアルバムへの楽曲提供やライブイベントへの参加をいつもなさっている、どう考えても僕より随分多忙な方なので、いちいち許諾申請に煩わされるというのも酷というものでしょうし、これもモヒカン流の気遣いというものです。

 さて、今回は見た目には二重結界が打てるようになった程度しか変わりが無いんですが、内部的には大分変わってはいます…たとえば時間軸を伸縮させたり出来るようになりました。今のところは勝敗決定時のエフェクト用に導入しています。プロセッサによる不動小数点数の丸め方の設定の違いなどが気になりますが、多分、リプレイに影響を及ぼしたりはしないと思います。リプレイ機能自体まだ作ってないので、ライブラリ側で知らないうちに乱数系列の読み先を進められたりしないように、独自の乱数生成用にメルセンヌツイスターを導入した後になりますけど。

 それから、霊夢と幽々子用のコードがそれぞれ約半分に減りました。キャラ共通部分を基幹クラスに追い出したんですね。コンボゲーでは無いのでAIもあまり凝らずに基本的な移動速度とかにまつわる定数とか、性格付けに関する定数くらいしか導入しません。

性格付け定数はいまのところ以下の2つだけですけど。

Hイズム : 何も考えずにとりあえず攻撃行動をしてしまう傾向が強くなる
てゐズム : 霊力に十分な余裕が無ければ攻撃をせずに回避行動をとる傾向が強くなる

 ともかく、このおかげで移動とAIに関してはほとんどキャラ固有のコード書かずに定数の設定だけで済むので、10〜15KB程度のコーディングで1キャラ作れそうです。で、何を10KBも書くのかというと、武器の記述ですがな。直進する弾とか、ホーミングする弾とかの基本クラスはありますが、どういう組み合わせで撃つのかといった弾幕生成にまつわる事は固有のプログラムを書く必要があります。今のところ、

  1. 直進する弾
  2. 自由落下する弾(CPUの回避ルーチン未実装)
  3. ホーミングする弾
  4. 動かない弾
  5. 上記1〜4に加え、一定時間後に位置固定の当たり判定が出る属性

 5.が分かりづらいんですが、レーザーは 4 + 5ですし、陰陽玉は2 + 5だったりします。二重結界は1 + 5なわけですね。まだ作ってませんけど、バーチャロンに出てくるファランクスボムのような攻撃は4 + 5を線状に連ねれば出来上がるわけです。つまり、回転するレーザーが作れません。回転が止まってから当たり判定が出る、正直者の死とかは近似的に作れますね。

 ともかく、いろいろサポートできてなかったりします。リグルを作る前に、カーブする弾くらいは実装したいところですが、CPUの回避ルーチンの記述が厄介そうです。回転速度・回転軸一定という事に限定すれば、極座標を導入するだけで簡単に当たるか当たらないかの予測が出来るのかなぁ? つまり、ユーニラタルは無理って事です。

 今のところ弾幕実装について抱えている問題としては、地形と弾の当たり判定が結構重いという事です。OctetTreeのノードをホジホジしながらポリゴンを拾い上げて、拾い上げられたポリゴン一つ一つと弾(弾の動きも考慮します)の当たりを毎フレームとるので、障害物無しの2Dの場合のように画面外に出たらおしまい、という物に比べると何百〜何千倍も重いです。でも、弾が地形を易々と貫通してしまうというのは風情がありませんし、避けたはずのホーミング弾が地面から湧き出てきてゴッソリと体力を奪われたりした日には詐欺だ!と叫びたくなるでしょう。

 弾幕なので弾をグループ化して、グループと地形の当たり判定 → グループが地形に接触している可能性があるなら、個々の当たり判定に絞り込む、といった工夫が必要な気がします。しかし、グループを管理するためにリストを生成するのはともかく、グループの境界を毎フレーム更新したりという手間を考えると正直どうなんだろうという気がします。

 ともかく軸が一本増えたのに本家より弾幕が薄いと、弾幕が薄すぎると感じられると思うのです。かといって、ブ厚くすると重いのはもとより、先に弾出したほうが勝ちという事態に陥るので、それだけは避けなければならない。極厚の弾幕を、増えた軸を使って華麗に避け、すかさず攻撃を叩き込む、という程度のバランスにしたいのです。本家に有るような弾の隙間を縫う楽しみ方は僕がわざわざ実装しても、本家の足元にこぼれた角化上皮の剥落物程度にもならないと思うので、目指しても仕方ありません。ですが、弾幕を見て楽しむ、という要素は大事にしたいんです。折角軸が一本増えたんですから。

 今のところ、夢想天生*2の256発程度が1キャラから出せる最大の弾数です。本家では24方向弾*16程度の弾幕は普通に出てくるので、1キャラあたり500〜1000程度は見といてもいいのかな、という気はします。作ってみて重かったら適宜調整、という前向きな方法で調整していきたいですねえ。

 と、書きながら思いついたこととしては、直進する弾に関しては、地形が動かないなら生成した瞬間にどこで止まるか、という判定ができるわけで、毎フレーム正直に当たり判定をとるよりは幾分高速化できます。とりあえず、ホーミング弾が200も300も出るというのはゲームバランス的に有りえないので、軽い直進弾を上手に使って弾幕のボリュームを増していくようにしたいところですね。

 

 しかし、最大の問題は…背景データですか… 以前に苦心惨憺した割りに大した出来にならないもので、すっかりトラウマです。メタセコイアは本当に簡単で、素晴らしいモデラなんですが、僕の腕前ではいかんとも成り難い物を感じます。

 肝心の制作期間は今の職場を離れて次の職場に移る準備も考えて11月の半ばまでであり、当初は十分あると思ったものの、気づけば六月も近いという事で、このままでは時間切れでプロジェクト凍結という最悪の可能性もあります。できれば背景は4つ*昼・夕(夜)の二通りで8つくらいに絞りたい、うっうっ(泣)

 本家東方project作品は、仕上がりだけでなく、実装内容の取捨選択なども含めて本当に上手いなぁ、といつも思います。風神録では更に磨きが掛かっているようですし。ともかく、何を伝えたいのかを明確に持っていて、そのために何を実装すればいいのかを明確に理解しているから、最小限の時間で最大限の作品が出来上がるんだろうなぁと、僕はただ涎を垂らすだけです。

 単純に趣味とはいえ、こういうゲームの製作に関しては、実際に会って酒でも酌み交わしながら…というのは別にしても、アドバイスを仰ぎたい方が幾人もいますが、Ko-Taさん以外とは長い事連絡を絶ってしまったので、今更何の用だ!と追い返されそうな気がしてなりません。そう考えると僕もゲーム製作に関しては実に孤独な物です。個人でゲームを作る方というのは、例えばひらにょん氏のようにプログラミングだけでなく、作画・作曲・コレオグラフ(?)・ストーリーテリング(余談ですが、氏の「動き」に関するセンスには本当に、震撼します)と多才な方が多いのですが、僕は本当にプログラミングが、ほんの少し出来るだけなので、切れるカードが圧倒的に少ないという事を痛感します。

 愚痴はともかくとして、風神録といえば遠方に住んでいるもので残念ながら例大祭には参拝できませんでした。とりあえず遊ぶにはまだ旧作を…という事になっています。昨年まで永夜抄と萃夢想しかもっていなかったので、今年の春の再販に合わせて他の作品も買い込んできたのですが、まだ妖々夢も紅魔郷もEx未クリアです。なので、紫んがまだ作れません。文Exは出したので、それで妥協…はしたくないですしねぇ。

 とりあえず、次にどのキャラ・背景を実装するかも大体固まってきましたので、乞うご期待ということで!

 それから、Udongain1.20を公開しました。

 終了時に固まる事が多いというどうしようもないバグを抱えていたので、なるべく固まる事がないよう頑張りました…

 バグフィクスがメインですが、とし氏のサイトが東方界隈の事情に詳しいため、無限旋律をデフォルト設定のRSSに加えさせていただきました。従来はSJIS , UTF-8だけだったエンコードをEUC-JPにも対応、めでたい!

 更にはこんなものまで作ってしまいました。 …うーん、やっぱ僕が作ったのではイマイチですね。

 

Taku Hayase(SANDMAN)

戻る