2025/2/6(木)

Rabbit Holeをやった。ネタバレ注意。

Spoiler
ついにYomiを倒した!体力残り2でギリッギリ!と思ったら、なんか最終決戦が始まった。マジ????緒戦のYomiと似た攻撃もあったので少し戦えたが、そもそもそっちもギリギリの戦いなので勝てる訳がなかった。無様に敗北。このゲーム厳しすぎないか!!

とりあえず表の方のYomi戦を安定させるのが喫緊の課題と言える。大剣の衝撃波みたいなやつは遅いから難なく避けれるとして、他が軒並み「攻撃前モーションで読み切って避けろ」という性質の攻撃なので簡単に避けさせてくれない。大剣を投げてくるやつはリズムが読めないので調べた結果、どうやらしゃがめばよいだけだった。その次の三本投げナイフはリズムは読みやすいが、反応がちょくちょく間に合わない。鎖を張ってくるやつも同じく反応が間に合わない。自機狙いっぽいので動いてればいいのか?

頭を整理しておく。

  1. 衝撃波(ジャンプ回避)
  2. 剣投げ(しゃがみ回避)
  3. 投げナイフ(ジャンプ回避)
  4. 3本鎖(歩き回避)
  5. 突進×2(緊急回避)
  6. 投げナイフ(ジャンプ回避)
  7. 全体鎖攻撃(歩き回避)

こうやって整理すると割と避け方は確立してるはずなのだが、それでも反応が間に合わない。テンポが速すぎる。

道中でダメージを貰わないことも重要である。特にボスはノーダメージなら体力アップが来るので積極的にノーダメージを狙いたい。が、2ボスの姉妹が全く安定しない。スライディングを捌ければ勝機はあるのだが、バットで撃ち返そうとしても返し切れないし、ジャンプで飛び越しても挟み撃ちになるだけである。どうしろというんだ。

他、ザコ敵の攻撃もパターンを覚えてきたが、パターンを覚えるほどにこれ無理じゃね?という気持ちになってくる。1体1体ならなんとかなるのが複数体だと厳しくなってくる。

  • 1面: だいたい殴ればよい。
  • 2面:
    • 人魚: 冷静に誘導して殴ればよい。が、他の敵との兼ね合いで回避困難になる。
    • 缶のやつ: 倒したときに出てくるスライムに注意。距離を取って撃ち続ける。緑弾はバウンドしているところをくぐる。他の敵との兼ね合いで回避困難になる。
    • 赤くらげ: 弾を撒いてくる。銃撃で削ってる間に距離を詰められるので、殴ってノックバックさせた方がいいかもしれない。
    • 白いやつ: ジャンプして着地と共に弾を撒いてくる。弾は隙間も大きいので、上から撒かれた場合はくぐれる。殴った方がいいかもしれない。
    • 青いやつ: 爆発枠。緊急回避で避ける。回避先に他の敵がいたら無理ゲになる。
    • 蟹: 癒し枠。
  • 3面:
    • 骨: 骨を投げてくる。一回放物線を描いて終わりではなくバウンドすることに注意。
    • 赤リボン: 弾を4方向に撃ってくるだけだが、軌道が読みづらいので距離をとる。
    • フードのやつ: 撃ってくる上に撃ったら吹っ飛ぶ。正面に立ってはいけないが、正面以外にいても体が当たる可能性がある。即殺したい。
    • おばけ: 銃口を向けてれば止まってくれる。複数体いて他の敵もいる場合は厳しい。
    • コーヒー: 弾を落としてくる上に落とした弾がその場にちょっと残る。殴った方がいい。
    • 燃えてるやつ: 爆発枠。爆風に巻き込まれないように距離をとって撃つ。
  • 4面:
    • 赤いやつ: 突撃してくる。出来れば即殺す。無理ならバットで撃ち返す。
    • おばけ: 突撃してくる。バット一撃では止まらないので、何発か銃撃を入れてからバットで撃つ。
    • 青いコウモリ: 爆発枠。地面に落ちて左右に弾を飛ばすので、緊急回避してもよけきれない。くぐってからジャンプが正攻法かもしれないがいっぱいいるときはどうしようもない。
    • スイカ: ダメージを与えると割れて弾を撒き散らし始める。硬い。バットでも下がってくれない。どうすればいいのか分からない。
    • 植物: いっぱい小さいのを出してくる。移動は遅いので殴ればよい。小さいのも殴ればよい。小さいのが地形の影響で不規則な突撃をしてくると対処困難。
    • メンダコ: 弾は8方向に飛ぶので注意。こんなんでも癒し枠。


ゲーム制作ライブラリの開発を進めた。音が出るようになった。感動!

とりあえずoggファイルの読み込みだけ実装した。サンプリングレート情報に対応してないので音がちょっと変に(44100Hzの音声を48000Hzで再生…)なったが、とにかく音声ファイルの音が鳴ることを確認できた。OpenALのように何から何までやってもらわなくてもバッファに書き込むコールバックさえ自由にできれば音声システムが構築できることが実証できたわけだ。これは大いに自信になる。

再生情報を表す構造体は結構雑に設計したつもりだったのだが、なんか実装を進めると思ったより筋のいい設計になってそうなことが分かった。単にサンプルデータへのポインタと終了位置、その他補助情報を持たせていただけだったのだが、こうするとサンプルデータを準備する処理をサンプルデータを再生する処理から切り離せる。他でもやる機会があれば積極的に活用していきたい。

次にやることはこの辺か。

  • サンプリングレートを取得して適宜リサンプリングをする
  • とりあえずの確認用の雑コードなので設計を整理する
  • ogg以外にwav、mp3あたりも対応する
  • 多数同時再生のためのインタフェースを整備する
  • ストリーミング再生に対応する
  • 再生状態を取得できるようにする
  • 一時停止・再生・再生位置変更・ボリューム・パンなどをできるようにする
  • フィルタ適用の類をできるようにする

ともかく、キリの良い感じになったのでしばらく触るのを我慢する。研究と就活と課題の全てが滞っている。

Categories: