ビデオクリップ


Q&A

●このラリーXは何? (開発の経緯)
私が個人で楽しむためにナムコ社の許諾を受けずに勝手に移植したX1用ラリーXです。
X1用ラリーXは電波新聞社から当時発売されていましたが、個人的にその出来栄えに不満を持っていました。
(ゲームとしては十分遊べる物でしたが、主に見た目の部分でいろいろと不満がありました。)


X1用ラリーX (内容はニューラリーX)
(C)ナムコ、電波新聞社

まず、道路が黒いこと。車のタイヤが水色。車の形も違う?
車のパターンが上下左右向きの計4パターンしかないこと。(斜めのパターンがない。)
全てPCGで描画しているようで、キャラクタが重なるとチラつくのと、
レッドカーのスピードが常に一定であること。(移動が8ドット単位なので。この点が最悪。)

という訳で、「私ならラリーXはX1でこう動かす!」という物を作ってみることにしました。
(もちろん当時の開発者の方々は仕事として開発されていたのですから納期もありますし、
私の納期なし・嫌になったらいつ辞めてもいい趣味の開発とはまったく事情が異なったと思います。
開発環境も現在とは雲泥の差ですから、単純に成果物だけで比較できないことは理解しているつもりです。)

今回は、ニューラリーXではなく初代ラリーXを作ることにしました。その理由は、
車のパターンが初代の方が好きなのと、ニューのあの軽快なBGMが個人的に食傷気味なのと、
あとはラッキーフラッグ等がないので初代の方が楽だろうと考えたからです。

アーケード版のプログラムの解析等はせずに、当時の移植作業と(多分)同じように
自分の目で見て再現しましたので細かな点ではいろいろ違いがあると思います。


もしご質問があればメールでどうぞ。


開発メモ

ここではプログラムの技術的な内容やアーケード版の調査結果(マップ等)を紹介していきます。

●PCG・グラフィック画面の用途

 本移植作では、道路・岩・煙幕・フラッグ等はPCG表示で、車とレーダーをグラフィック表示としています。 (表示プライオリティ設定でグラフィックがテキストよりも前面になるように指定。)

これにより、レッドカーのドット単位の追い上げ、車と煙幕等の重ね合わせ表示を実現しています。
道路のスクロールが8ドット単位となってしまいますが、ラリーXのスクロール速度だとさほど気にならないだろうと判断しました。 (アーケード版と比較するとやはりスムーズさが全然違いますが、チャレンジングステージの高速スクロールもそれなりに再現できたので 落とし所としては良かったのではないかと思っています。)

 パレットは下表のように設定しています。

0 0 透過色
1 1 マイカーの青色
2 2 レッドカーの赤色、レーダー上のレッドカー
3 2 マイカーとレッドカーが重なった時に赤色が上になるように
4 0 タイヤの黒色、レーダー上のマイカー(白黒点滅)
5 7 マイカーの白色、レーダー上のマイカー(白黒点滅)
6 5 レッドカーの水色
7 6 レーダー上のフラッグ

マイカー・レッドカーのグラフィックデータは上記パレット設定を受けてこのようになります。 (それぞれ左側がグラフィックデータで、右側がゲーム中の表示です。)

マイカー・レッドカーとも、G-RAMの2プレーンをセットすれば済むようにしています。


●画面構成

 アーケード版の画面解像度は288×224ドット(キャラクタ単位だと36×28)で、X1は320×200ドット(同40×25)です。
X方向は左右に2キャラクタずつ遊びを作ることでアーケード版と同サイズとできます。
Y方向はアーケード版より3キャラクタ分狭くなります。画面右側の情報パネル部は2UPのスコア表示をなくすことで アーケード版のイメージを損なわずにレイアウトできます。

マップ表示部はキャラクタ単位で28×25となります。


●マップデータとスクロール処理

 初代ラリーXのマップデータは、私が探した限りではネット上で見付けることができませんでしたので、
Youtubeの動画を材料にして自分で調べました。

それぞれ左側(青色)が初代ラリーX、中央(赤色)がニューラリーX、右側(紫色)が比較のための合成画像です。

[ マップA ]

[ マップB ]

[ マップC ]

[ マップD ]

1つのマップデータは32×56マスです。各マスは道路か道路でないか(1ビット)なので、32÷8×56=224バイトとなります。これをマップA〜Dの4枚分持っています。(計896バイト)

実際に画面表示する際は1マスを3×3キャラクタとして表示します。
下記画像はマップAの左下の部分です。

単純に3×3倍にするだけでなく、道路と路肩の境目(上記画像で紫色の部分)がありますので、1キャラクタ毎に周囲の状況によって表示するキャラクタを決定します。(この処理はラウンド開始時に実施しています。なぜ予めそういうデータを持たないのかは後述。)
マップ外の草花の部分も含めた最終的なマップデータは121×190キャラクタとなります。(22,990バイト)

 スクロール処理は、例えばマイカーが上へ向かう時(下スクロール時)、下から2番目のラインを一番下へコピーして下から3番目のラインを2番目にコピーして…というような処理はせずに、 メモリ上に持っている上記の121×190バイトのスクロール用マップデータのうちの「現在表示中の左上位置」から一画面分(28×25)をテキストV-RAMに毎回転送しています。 マイカーが移動すると「現在表示中の左上位置」をずらすだけです。
(アトリビュートV-RAMは予め定数で埋めておき変更しません。なお、全般的に画面描画は表示中でない方のSCREENに対して行い、描画完了後に切り替えることでチラつきを防止しています。)

余談になりますが、当初、上記の121×190バイトのスクロール用マップデータを圧縮して4枚分持とうとしたところ、メモリが足りませんでした。
圧縮すると1枚当たり約4KBになったので4枚で約16KBでいけるかと思っていましたが無理でした。やはり121×190の約22.5KBがズシリと重かったです。


●レーダー表示

 ラリーXと言えば画面右側にあるレーダー表示が特徴的です。(ボスコニアンも)
ファミコンではこのレーダー表示の実現に手間取ったせいで結局発売されなかったという話もありました。 (レーダー表示そのものではなく、画面分割スクロールが原因だったかも。)

レーダーのサイズは64×112ドット(8×14キャラクタ)で、これはマップデータ(32×56ドット)の縦横2倍のサイズです。 車・フラッグの表示サイズは2×2ドットですので、表示位置は単純計算で求められます。

しかし、アーケード版をじっくり見ると気付きますが、フラッグの表示位置は計算上の位置と微妙に(上下左右いずれかに1ドット)ずれている場合があります。
このずれの法則(意図)がよく分からなかったので、本移植作ではマップ上の上下左右の隅っこにある場合のみ、内側に1ドットずらすようにしています。 (この法則はアーケード版でもあるようでした。)

表示は、背景の青色はキャラクタで表示し、レーダー上のドットはグラフィックで表示しています。
下表は先に記載のパレット設定表のうち、レーダー関連の色を抜き出したものです。

2 2 レーダー上のレッドカー
4 0 レーダー上のマイカー(白黒点滅)
5 7 レーダー上のマイカー(白黒点滅)
7 6 レーダー上のフラッグ

つまり、G-RAMのBプレーンにはマイカー(白の時)とフラッグ、Rプレーンにはレッドカーとフラッグ、Gプレーンにはマイカー(白と黒の時両方)とフラッグを表示します。
マイカーとレッドカーは前回の分を消して今回の分を描くという処理を基本的に毎回しています。
フラッグはラウンド開始時に10個分表示し、マイカーがフラッグを通過するとその分を消しています。

また余談ですが、このレーダー表示、実は結構苦労しました。
グラフィック表示はX方向に8ドットで1バイトのデータとなるため、必要なビットも消してしまったり逆に不要なビットが残ってしまったり…。 (SCREEN0/1を交互に切り替えているのも災いしました。)
公開した制作中の動画でも一部バグが映っています。完成版の一つ前の動画で、 ラウンド2の2本目のフラッグを取る直前に一瞬赤色が見えます。(本当に一瞬です。)


●サウンド

 ALL ABOUT NAMCO(電波新聞社 1985年刊)には、初代ラリーXのサウンドデータとして下記の曲が記載されています。

本に記載の曲名 私のコメント
(1) スペシャル・チェック・ポイント・クリア音 スペシャルフラッグ通過音
(2) クレジット音 コイン投入音
(3) ラウンド・クリア・ミュージック 各ラウンドの最後のフラッグを取った後に流れる曲
(4) チェック・ポイント通過音 通常フラッグ通過音
(5) 燃料切れ警告音 そのまま
(6) 燃料を得点に加算するときの音 ラウンドクリア時のスコア加算の音
(7) ボーナス音 1up音
(8) ハイスコア・ミュージック 最後のハイスコア表示画面の曲
(9) 煙幕発射音 そのまま 必ず3回鳴る
(10) チャレンジング・ステージ・スタート・ミュージック ボーナスラウンド開始画面の曲
(11) マイカー走行ミュージック メインBGM
(12) サービス・スイッチ音 本移植作では未使用
(13) ゲーム・スタート・ミュージック コイン投入音の次に流れる曲

ゲーム中の音はほぼ網羅されており、本移植作ではアーケード版の印象に近くなるように音階を多少上下しているぐらいで、基本的には上記のデータをそのまま使用しています。

問題が3点ありました。

ます、上記(13)のゲーム・スタート・ミュージックが、ALL ABOUT NAMCOでは「ニューラリーXと同じ」とありましたが、 Youtubeで動画を探して聴き比べてみるとアレンジが全然違いました。 掲載されているのはニューの方で初代はもっと軽快な感じです。これは自分なりに変更しました。

参考までにアーケード版のYoutube動画のリンクを張っておきます。(いつ切れるか分かりませんが。)
初代ラリーX ニューラリーX

2つ目の問題点は、マイカーがやられた時の爆発音が上記に載っていないことです。
過去にどこかで読んだ情報によると、当時のナムコのアーケード基盤には爆発音専用のチップが載っており、 いくつかのパラメータを与えて鳴らしていたのだとか。 確かに言われてみると、ラリーX・ゼビウス・ギャラガ等の爆発音はほぼ同じで、ALL ABOUT NAMCOにもそろって記載がありません。
仕方がないので爆発音はPSGを適当に弄ってそれっぽい音を探しました。

3つ目はエンジン音です。アーケード版を注意して聴いているとエンジンの音が鳴っていますが、これも記載がありません。 (ニューでも一応鳴っているようですがBGMにかき消されていて分かりづらいです。)
エンジン音はマイカーの向いている方向によって音量が変わるようです。また、チャレンジングステージや燃料切れの時には音が変化します。
この音もそれっぽい音を鳴らすようにしましたが、満足いく出来には至りませんでした。こういう時は音感が優れている人が羨ましくなります。


●岩とフラッグの位置

 岩とフラッグの位置もマップデータと同様にYoutubeの動画を材料に自分で調べました。

[ マップA ] [ マップB ]
[ マップC ] [ マップD ]

岩はアーケード版では各マップで予め16箇所が定義されており、そのうちの最大8箇所がランダムで出るようでした。 本移植作でもそのようにしています。

フラッグはアーケード版でどのようなアルゴリズムで出しているのか不明でしたが、同じような位置に出ることが多いので おそらく岩と同様に予め場所が定義されているのだろうと考え、本移植作ではそのようにしています。 全部は調査しきれていないと思いますが、各マップでアーケード版と同じ位置の90箇所ほどを定義しています。


●レッドカーのアルゴリズム

 レッドカーのアルゴリズムについて、ALL ABOUT NAMCOでは次のように記載されています。

本の記述 私のコメント
(1) マイカーを追いかけてくる(当然!) 異論なし
(2) 1本道では方向転換をしない 異論なし。方向転換は交差点でのみ行う
(3) 2車線の場合は内側を走る 2車線のうちのどちらかしか走らないという動きはないと思う。(「内側」とは?)
(4) 上下どちらへ行ってもマイカーとの距離が変わらないときは、上を優先する。左右の場合は右を優先する こういう動きはないと思う(多分)
レッドカーが壁に当たった時、能動的に方向転換しない場合は右へ曲がると思う
(5) レッドカーがスクロール画面に入るとスピードが上がる こういう動きはないと思う(多分)
(6) マイカーの残りFUELが3目盛りになったとき、マイカーが4本フラッグを通過したときにレッドカーのスピードが上がる 細かい数字は別として、残燃料とフラッグ取得数でスピードが上がるのは異論なし
残燃料によるスピードアップはないと思う(多分)。5本目のフラッグを取るとスピードアップする
(7) マイカーで手放し運転をして壁にぶつかると、マイカーから見て左へ左へと曲がる 右へ右へだと思う。(これはレッドカーのアルゴリズムではない)

上記を踏まえ、レッドカーのアルゴリズムを自分なりに考えました。

(1) 壁にぶつかった時、右、左、後ろの優先順位で方向転換する。(能動的に方向展開をしない場合)

右に進める時は右 右に進めない時は左 右にも左にも進めない時は後ろ
(2) 前後左右方向のうち進める方向が3つ以上の時、能動的に方向転換する。

進める方向が3つなので方向転換する 2つなので方向転換しない
(3) 追いかけモードとして「Y軸合わせモード」と「X軸合わせモード」があり、 「Y軸合わせモード」の時はマイカーとのY軸値の差を縮めようとし、一定数未満になると「X軸合わせモード」に切り替わる。「X軸合わせモード」の時も同様。
交差点では現在のモードによって能動的に方向転換する。
(4) 各ラウンドの5本目のフラッグを取得するとレッドカーのスピードが上がる。(マイカーが死んで再スタートした後もそのラウンド中はスピードアップしたまま)
燃料がゼロになると大幅にスピードが上がる。
ラウンドが進むとラウンド開始時のスピードが徐々に上がっていく。


レッドカーがドット単位で迫ってくるのが本移植作の醍醐味です!
(5)

レッドカーが岩にぶつかった時は反転し、少ししてから走り出す。(レッドカー同士がぶつかった時も同じ)


レッドカーが煙幕に巻き込まれた時は3周スピンし、少ししてから走り出す。


(6) アーケード版ではわざとなのかバグなのか、同じ方向に走っているレッドカーがきれいに一列に並んでいないことが多々あります。 アルゴリズム上は特に意味はありませんが見た目に面白いので本移植作でもその現象を再現しています。
アーケード版での発生条件は不明ですが、本移植作ではレッドカーの左右転回時に、進行方向に規定値よりも突っ込んでいた場合は外側に膨らみ、規定値未満だった場合は内側に入るようにしています。(規定値ぴったりの場合はきれいに道路の中央に入ります。)


マイカーのすぐ後ろのレッドカーが少しずれています。

レッドカーのアルゴリズムは概ね上記のとおりですが、無限パターン(レッドカーが同じ所をぐるぐる回る時がある)防止のため、 同じモードが一定期間続いた場合は強制的にモードを変更するような処理も入れています。
また、各レッドカーが全く同じ動きとならないように(3)の「一定数」は各車でバラバラにしています。


●タイトル画面

 タイトル画面と言ってもタイトルは表示されません。(ニューラリーXではテキストで表示されます。)
トリガーボタンを押すと(アーケード版ではコインを投入すると)右側の画面に切り替わります。

ナムコフォントはやっぱりいいです。当時、X1付属のDEFCHR TOOL(PCGデータ作成ツール)で本の写真を見ながらフォントを作成して自作BASICゲームで使用していました。 今ではネットで簡単に実寸大イメージが見付かるので何の苦労もなく本物と同じフォントを作成できます。(当時作成した物を検証してみると微妙に間違っている文字がいくつかあり興味深かったです。)


左から右へマイカーが走った跡に文字がでてくる演出ですが、これは次のように処理しています。

これらの画像では分かりやすいように、マイカーを下に1キャラクタ分ずらし、パレット設定もゲーム本編中と同じ設定にしています。 (実際のタイトル画面ではタイトル画面用のパレット設定で、青を白に、レッドカーをマイカーに色変更しています。
マイカーは画面中央に表示するだけで画面内を走り回る処理が存在しないため、タイトル画面ではレッドカーを走らせています。)

徐々に表示される文字は画面に予め書いておき、その上にグラフィックで青色の横長の長方形を描いて隠しておき、 マイカー(レッドカー)が通過した所の青色をドット単位で消して、スムーズに文字が出てくるようにしています。

アーケード版のニューラリーXでは、このスムーズに文字が表示される演出が省略され、普通に一文字ずつ表示されるのが個人的に残念でした。

チャレンジングステージ開始画面も同様に処理しています。
ニューと比べて非常にシンプルなこの画面、結構好きです。ちなみにアーケード版のこの画面にはスペルミスがあります。




(C) 2015 T. INABUKI / イナブキタケノ