凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46608
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

何を見てもアルゴリズムを考えてしまうのがプログラマの職業病第二段。
前回はナイトレイドという、 非常にマイナーな作品だったのですが、今回はメジャーなタイトルを取り上げてみたいと思います。

バトルガレッガの臨死

メジャーといいつつも世間的には非常にマイナーで申し訳ありません。
90年代後半の弾幕シューティングの幕開けは怒首領蜂(どどんぱち 1997年 cave)とされることが多いですが、 BATTLE GAREGGA(バトルガレッガ 1996年 RAIZING)の2面ボスを見てcaveの開発者が 「そこまでやってもいいんだ」と弾幕をコンセプトにした怒首領蜂を作ったという逸話があり、 このバトルガレッガを弾幕シューティングの始祖とする意見も多いです。

シューティングゲームのスコアラー(スコアアタックをする人々)界隈では非常に有名なこのゲーム、 いくつかバグがあるのですが、初めてみたときに何が起こったのか理解できないのが「臨死」と呼ばれる現象でしょう。

本当は実物を見てもらいたいところなのですが、YouTubeで手ごろな動画が見つかりませんでした…。
現象としては残機のない状態で、ミスをしながら1UPするとGameOver時にばらまくアイテムをばら撒いて死んだはずなのに 何事もなかったようにプレイ続行できる、という現象です。

バトルガレッガというゲームでは100万点ごとに1UPする上、スコアを稼ぐのにボムを大量に使用するので、 ゲームオーバー時に出るボムアイテムを回収しながらGameOverにならずにプレイ続行できるこの現象は、 スコアアタックでは非常に有利なのです。私も当時はこの「臨死」の練習をしたものです。

その原理

前提条件が幾つかあります。

  • パワーアップなどがアイテム制で、ミスした際にはパワーアップアイテムなどをばら撒くタイプのゲームであること。
  • ミスした際にその場で復活するタイプのゲームであること(グラディウスシリーズのような戻るタイプでは不可能)
  • ミス中に1UPすることが可能であること

最後の1機をミスをした瞬間にGameOverと表示させるのであれば面倒はないのですが、 ミスをした後にアイテムがばら撒かれ、自機が爆煙を上げて落ちるといった演出がされます。
そのため、ミス時のアイテムの種類の判定はミスの瞬間に行い(GameOver時には多くのアイテムをばら撒く)、 GameOver判定は次の自機が登場するタイミングで行うというアルゴリズムが用いられます。

そのため、アイテム判定時にはGameOverと判断され、コンティニュー用に多くのアイテムをばら撒き、 GameOverが確定するまでの間に1UPすることでGameOverとならずに復活することができるのです。

開発もとのRAIZINGのアームドポリス バトライダー(1998年)では1UPをアイテム方式にして この「臨死」が行えないようにしています。 臨死を行えるゲームはそれなりに多くあるようですが、あまりにシビアであったり、 また、臨死をするメリットがないので単なる大道芸となったりといった具合です。

ゲームのようなリアルタイム性の強いプログラムでは、この現象のように思わぬタイミングで 処理が発生すると奇異な現象が起こることがあります。 プログラムする際にはこういった「間」にも注意を払いましょう。

投稿日時 : 2007年9月12日 20:51
コメント
  • # re: ゲームのバグにみるアルゴリズム - GameOver
    melt
    Posted @ 2007/09/13 13:59
    バルドバレットは知ってますがバルドガレッガは知りませんw

    ゲームだとデバッグしてるとこういうのはよくありますねw
    特に自分の場合はタスクシステムで管理してたので、1フレームバグが多かったです。
    あと解放ミスとかも時々あって、もう既に死んでるオブジェクトにアクセスしてたまたま動いていたときの悲惨さといったらもう……orz
  • # re: ゲームのバグにみるアルゴリズム - GameOver
    凪瀬
    Posted @ 2007/09/13 14:52
    バトルガレッガはシューターには伝説のゲームですが、一般知名度は低く、
    また独特のプレイスタイルが要求されるため素人にはまったくお勧めできません。

    数フレームの取り扱い方でバグとなることも多いですが、
    場合によっては同一フレーム内での処理の前後によるバグといったものもありますので難しい。

    C言語などのガーベッジコレクションのない言語でのオブジェクトのライフサイクル管理のミスは致命的ですね。
    かといってゲームなどのリアルタイム系用途では何時動くとも知れない、
    しかも動きだしたらどれだけ負荷をかけるか分からないGCが
    乗った環境で開発というのは厳しい…。
  • # re: ゲームのバグにみるアルゴリズム - GameOver
    K5
    Posted @ 2007/09/13 16:01
    多分コメントするのは初めてだと思います。
    オブ熱の後の懇親会ではDIコンテナのあたりをごにょごにょと教えていただいたやつです。

    バルドガレッガ、激しく懐かしい。
    今だと間違いなく臨死のタイミング取れないだろうな…
    クリアも絶対無理

    自爆が攻略の肝になるゲームなんてちょっと方式は変わるけど同人のヒトガタハッパぐらいしか知らんす。
  • # re: ゲームのバグにみるアルゴリズム - GameOver
    凪瀬
    Posted @ 2007/09/13 16:49
    おぉ。あのときの。
    ナイトレイドは知名度が低すぎるんでコメントしがたいところでしたので
    知っている人は知っているガレッガを取り上げたのですが。
    よかった、知っている人がいてw

    次あたりはダンジョンズ&ドラゴンズ シャドーオーバー・ザ・ミスタラのバッファオーバーフローでもやろうかな。
    それともガレッガの6面の砲台2回壊しとかエスプレイドのアリスクローン稼ぎの仕組みとかにしようかな。
  • # george
    bogemi
    Posted @ 2011/10/01 19:59

    http://www.buysale.ro/anunturi/arges.html?localitate=oestii-pamanteni - arges
タイトル
名前
Url
コメント