龍8については、まだプレイ中の方も多いでしょうし、小ネタとか裏話はもう少し時間が経ってから投稿しようと思います。
ということで、しばらく「スパイクアウト」の話をします。龍ファンの方、ごめんなさい😓
龍8のゲームセンターで遊べる「スパイクアウト」は、およそ25年前にリリースされたアーケードゲームです。若い龍ファンの方はリアルでプレイしたことはないかもしれませんが、実は、龍のバトルシステムは、このスパイクアウトがベースとなっています。
初代の龍が如くは、家庭用ゲームを作ってきたチームとアーケードゲームを作ってきたチームが融合して開発されましたが、バトルシステムの開発には、VF3やスパイクアウトのメインプログラマーを始め、アクションに強いアーケードメンバーが多く携わっていました。
スパイクアウトは「1人vs多人数の格闘アクションとは?」ということについて、とても長い時間と、数えきれないくらいの会議やテストを重ねて作り上げたタイトルだったので、龍のバトルシステムがスパイクアウトを継承するのは当然の流れだったと思います。
ちなみに、龍8に収録されている「スパイクアウトFE」には5つのステージがあります。「4つのステージしかない!」と思われている方、多いかもしれません。
実はこのゲーム、途中で何箇所も分岐があります。「BREAK THE GATE!」が表示されたら、たまにはいつもと違うところへ散歩に行ってみては…😉
スパイクアウトの開発が始まったのは1997年頃。私はまだ入社2年目、チームでは下っ端だったので、会議の時に資料を印刷して配布したり、議事録をまとめたりする役割でした。その時の資料は個人的にファイリングしていて、今でも持っています。分厚い😓
スパイクアウトの開発は、VF3を拡張した技術検証からスタートしました。この画像は「対戦格闘を、同じボードで4組同時に動かす」の検証です。この頃はまだ1対1が4組動いているにすぎず、他人の敵には干渉できない状態でしたが、メモリの使い方や処理の基本方針はある程度固まっていたかもしれません。
スパイクアウトは本当に試行錯誤の連続で、特に操作系はあらゆる可能性を試しました。当時の議事録を見るとその辺りが良く分かります😓「ジャンプボタン2回押しでダッシュ」なんて、普通は弾かれそうなアイデアですが、「新しいゲームなのだから、とにかく何でもやってみよう」というチームの方針で。
最終的なボタン配置は「S(シフト)、B(ビート)、C(チャージ)、J(ジャンプ)」の4ボタンになりました。攻撃ボタンが「ビート」という聞き慣れないボタンになった理由を知りたい方は「スパイクアウトの思い出」で検索してみてください😉若造の私がボスに意見する姿を想像しながら読むとなかなか😓
スパイクアウトのプログラムは、全て「アセンブリ言語」で書いていました。「分厚いマニュアルを見ながら謎の呪文を並べる作業」なのですが(笑)子供の頃からPC-6001やMSXでZ80のアセンブラを使っていた自分にとっては「レジスタ多い!」「こんな命令まである!」と楽しくて仕方ありませんでした😆
スパイクアウトの開発チームにはプランナーがいません。ゲームシステムの設計は全てプログラマーが行っていました。「面白くなるかどうかはプログラマー次第」という使命感もあり、何も知らない若造にも関わらず、自分の意見はガンガン主張していたので、ボスや先輩とはよく喧嘩をしていた気がします😓
スパイクアウトのスタッフロールには、各職種とは別に「GAME REGULATION」というカテゴリーがあります。ゲームの根幹を作ったメンバーということで、ボスの意向で最後に追加されたそうです。上からすれば私は生意気で面倒なヤツだったと思いますが、こうして認めてもらえたことが本当に嬉しかったです
新卒採用の時、よく「プログラマーでもゲームの内容に口を出すことはできますか?」という質問が出ますが、セガは昔からそういう文化ですし、龍は今でも全ての職種のメンバーでアイデアを出し合いながら開発しています。逆に、仕様書通りに作るだけのプログラマーは龍スタには向かないかもしれません😓
スパイクアウトの通信について話してみたいと思います。
スパイクアウトは、同じ店舗にある筐体どうしをケーブルで直接繋いで通信を行っていました。インターネットと違って、すべてのデータが瞬間的に送られます。途中で切断されたり、ネットワーク環境が悪かったり、そういうこともありません。
ざっくりいうと、スパイクアウトは「コントローラーの入力のみ」を送受信していて、ゲーム中の全ての処理は各筐体が独自に行います。
例えば、1Pがレバーを前に入力したら、1Pの筐体だけでなく、2P~4Pそれぞれの筐体で「1Pのキャラクターを前に動かす」という計算処理を同時に行います。
もし1台でもこの処理が行われなかったり遅れたりしてしまうと、「その筐体の中だけ1Pのキャラクターの位置が後ろにずれている」ということになり、「次のフレームで1Pのキャラクターが攻撃モーションを出したが、その筐体だけ、攻撃が敵にヒットしない」というような状況が生まれてしまいます。
前述の通り、スパイクアウトはコントローラー入力のみを送受信しているため、このように他の筐体とズレてしまったとしても判断ができませんし、補正することもできません。スパイクアウトは「全ての筐体で、常に『同じ世界』が動いている」ということが前提のシステムなのです。
例えば「ランダムに敵が動く」というプログラムがあったとして、乱数が筐体ごとに違うと動きが変わってしまうのでNGですし、「ある筐体では乱数を2回取得し、別の筐体では乱数を3回取得した」というようなことがあると、その後の乱数がズレてしまうため、これも許されません。
このように、スパイクアウトは「1フレームの入力遅延も、1mmのキャラクターのズレも許さない、完全同期な通信システム」で動いています。最終的には、少しの遅延であれば許容するようにしましたが、「ゲームセンター内の高速かつ安定した通信」を前提としたシステムであることに代わりはありません。
「オンラインに対応した家庭用移植を」というご意見は本当にたくさんいただきますが、しっかりと遊べるものにするには設計部分から全て作り直さなければならず、また、もし大幅にコストをかけて対応したとしても、アーケードでのプレイ感覚に慣れた皆さんが満足の行く完成度になるのかも分かりません。
#龍が如く8 に実装されているスパイクアウトは、今の私たちが出来る限りの対応をしたつもりです。画面分割での4人協力プレイは、各方面に無理を言ってギリギリで入れたものです。ぜひ、コントローラーを持ち寄って、当時を思い出しながらプレイしていただければ嬉しいです。
Q)スパイクアウトは、本当に全ての筐体で1mmの誤差もなく同じ世界が動いているの?
A)本当です。開発中はとにかくひたすらエージング(長時間の継続した動作確認)を行い、あらゆる不確定要素を取り除き、完全同期を実現しました。
↓こんなエピソードもありました。
Q)店内通信とはいえ、通信が滞ったり遅れたりすることもあるのでは?
A)回避方法として、バッファに全員分の過去の入力を溜めてから処理しているため、3フレーム程度の切断であれば問題なく動作します。これは操作の遅延にも繋がってしまうのですが、快適な通信プレイを実現するためにそうしました。
Q)通信エラーが出るのはどういう時?
A)「筐体間で通信しているのはコントローラー入力情報のみ」と書きましたが、実はチェック用のデータとして、各プレイヤーの座標や体力なども送受信しています。本来ズレるはずがない値なので、もしこれが1台でも違う値になった場合は通信エラーとなります。
Share this Scrolly Tale with your friends.
A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.
