SFC シャイニングスコーピオン ボディの色が変わる条件とその意味
このゲームの大きな特徴は、主人公のマシンである「シャイニングスコーピオン」のボディの色が変わることです。このページでは、ボディカラーの変化条件などについてまとめています。
目次
シャイニングスコーピオン ボディカラー変化の秘密
土屋博士からシャイニングスコーピオンを受け取ったとき、土屋博士は「シャイニングスコーピオンには隠された秘密がある」と言っていましたね。
シャイニングスコーピオンの秘密は、レース中にボディの色が変わるということです。ボディの色は青から紫、ピンク、そして赤へと変化します。この色変化は4つの段階に分かれています。
ただ、最初から赤まで変化するというわけではなく、装備しているモーターとギヤの関係、そして主人公の熟練度に依存するのです。
まずモーターとギヤーの組み合わせで最大何段階変化するのかが決まり、熟練度によってそのうちの何段階まで変化するのかが決まります。このゲームでは、モーターとギヤーの組み合わせが基本スピードを決める要素となっており、高回転のモーターとギヤ比の小さいギヤーを選ぶと、マシンのボディの色が赤に近づく傾向があります。そして、基本的には熟練度が高いほど、マシンボディの色は変わりやすくなります。
なお、以下の要素は色変化に影響を及ぼさないことが分かりました。
- モーターブレークインの有無、モーターの消耗度
- 電池の種類・残量
- ホイールタイヤの組み合わせ
- 放熱フィン、アルミモーターサポートの有無
- ローラーの装備状態
- シャフトの種類
- ターミナルの種類
- シャーシの種類
ボディ色変化表
以下は、モーターとギヤーの組み合わせによる色変化表です。
※()内は何段階かを示す。
標準 | ハイスピード | スーパーカウンター | 超速 | |
---|---|---|---|---|
トルク | 青(00) | 紫(01) | 青(00) | 赤(03) |
レブ | 青(00) | 紫(01) | 紫(01) | 赤(03) |
ハイパー | 赤(03) | 赤(03) | 赤(03) | 赤(03) |
マッハ | 紫(01) | 赤(03) | 赤(03) | 赤(03) |
ウルトラ | 紫(01) | 赤(03) | 紫(01) | 赤(03) |
公式ガイドブックのp28に色変化表が掲載されています。しかし上記の表といろいろと違うところがあり、検証結果と相違が出てしまいました。
色変化の検証はタイヤバグを発生させてマシンを最高速度にし、熟練度はMAX状態で行いました。距離の短いコースでは色変化が途中になることがあり、最後まで変化しにくいので結構長いトンネルコースを選択。
下の画像はレブ×超速の組み合わせでゴール直前に赤に変わったときのものです。赤に変化するときはゴール直前のタイミングになることが多かったです。
この結果をみて思うことは、「なんかハイパーダッシュモーター色変化しやすいなぁ」ということ。不思議なことにハイパーダッシュモーターは標準ギヤーとの組み合わせでも赤への変化がみられました。マッハ、ウルトラは紫なのに・・・。謎である。設定間違いなのだろうか?
熟練度が高いほどシャイニングスコーピオンの色が変わりやすいのですが、必ずしもそうとは限らないようです。熟練度が低いからといって必ずしも色が変化しないわけではなく、逆に熟練度が中程度の場合でも赤まで変化することがある一方、さらに高くてもピンクで止まることも確認しています。この変化は熟練度の数値に乱数テーブルが関与している可能性も考えられます。
そして、熟練度数値がメモリ値で0x36以下ならば、毎回赤に変化することを確認しました。熟練度レベルが最高になれば、ストレートコース以外では必ず赤に変わりことになります。なお、公式大会ではモーターの種類がマッハダッシュモーターに置き換わる仕様なので、トルクチューンで車検を受けてもピンクや赤に変わります。
※さらなる解析の結果、この色変化システムの詳しい仕組みが明らかになりました。次の見出しをご覧ください。
【技術仕様解説】シャイニングスコーピオン「色変化システム」の真相
シャイニングスコーピオンのボディの色変化には、どのような法則があるのでしょうか。
走行テストを重ねた結果、「モーターとギヤーの組み合わせによって、色変化の上限が決まるのではないか」という仮説が浮かび上がりましたね。しかし、内部コードの解析結果は、この一見もっともらしい仮説を覆すものでした。
ここでは、コード解析によって明らかになった、ボディ色変化システムの完全なメカニズムを解説します。
このシステムの核心は、レース開始直前に呼び出される一つのサブルーチンに集約されています。これは、ボディが色変化するまでの「必要場面数」を算出するためのプログラム(パラメータ・ジェネレーター)で、このプログラムは単に決まった数値を参照するのではありません。以下の4つの要素を複雑に組み合わせ、レースごとに最終的な値を動的に算出するのです。
- マシンセッティング(モーター / ギヤー)
- プレイヤーの熟練度
- 走行コース
- 乱数
このサブルーチンが具体的にどのような処理を行っているのかを、ステップごとに詳しく見ていきましょう。
第1部:初期化とデータテーブルの準備
プログラムはまず、プロセッサを16ビットモードに設定し、計算に使用するゼロページアドレス($21~$2Bなど)をゼロクリアして準備を整えます。
次に、計算の核となる各種データテーブルのアドレスを取得します。このアドレスはコード内に直接書き込まれているのではなく、特定の「ポインタテーブル」を介して間接的に読み込まれます。
具体的には、ポインタテーブル内の特定位置を示すオフセットを元に基準値を読み出し、それにベースオフセットを加算することで、目的の「モーター/ギヤー基本テーブル」が格納されている最終的なアドレスを算出します。
こうして算出されたアドレスは、後続の処理ですぐに利用できるよう一時メモリに保存されます。このような動的なアドレス解決は、将来的なデータ構造の変更や不具合修正に柔軟に対応できる、洗練された設計となっています。
2部:基本パラメータの算出
色変化の計算は、マシンの心臓部であるモーターとギヤーの組み合わせから算出される「基本パラメータ」が土台となります。モーターとギヤーが関係するというのは、これまでの検証や攻略本情報で知っているとおりです。
ここからの計算は、レースに参加する5台のマシンそれぞれに対して、計5回繰り返されます。
まず、各マシンが装備しているモーターIDとギヤーのIDを読み込みます。モーターIDをASL命令(算術左シフト)を2回行なって値を4倍にし、そこにギヤーIDを加算する「(モーターID × 4) + ギヤーID」という計算を行い、データテーブルを参照するためのインデックス値を生成します。
次に、このインデックス値を使って、第1部で準備した「モーター/ギヤー基本値テーブル」から基本値を取得します。
そして、この取得した基本値をそのまま使うのではなく、そこからデクリメント(-1)し、さらに値を12倍にします。(ASL×2→STA→ASL→ADC)
この12倍された最終的な値が、そのマシンセッティングでの「基本パラメータ」となります。
算出された基本パラメータは、後続の計算で使われるため、マシンごとに対応する一時メモリ領域(ゼロページ)へ保存されます。この時点で、純粋なマシンセッティングに基づいた色変化の基礎値が決定されることになります。
以下は、モーター/ギヤー基本テーブル(基本値表)とモーターとギヤーの組み合わせによる基本パラメータ表です。
インデックス | 基本値 | インデックス | 基本値 |
---|---|---|---|
+$00 | 03 | +$01 | 02 |
+$02 | 04 | +$03 | 03 |
+$04 | 04 | +$05 | 03 |
+$06 | 04 | +$07 | 03 |
+$08 | 02 | +$09 | 01 |
+$0A | 03 | +$0B | 02 |
+$0C | 02 | +$0D | 01 |
+$0E | 03 | +$0F | 01 |
+$10 | 03 | +$11 | 02 |
+$12 | 04 | +$13 | 02 |
セッティング | 基本パラメータ値 |
---|---|
マッハダッシュモーター | |
マッハダッシュ & ハイスピード | 24 |
マッハダッシュ & 標準 | 12 |
マッハダッシュ & 超速 | 36 |
マッハダッシュ & スーパーカウンター | 24 |
ハイパーダッシュモーター | |
ハイパーダッシュ & ハイスピード | 36 |
ハイパーダッシュ & 標準 | 24 |
ハイパーダッシュ & 超速 | 36 |
ハイパーダッシュ & スーパーカウンター | 24 |
レブチューンモーター | |
レブチューン & ハイスピード | 12 |
レブチューン & 標準 | 0 |
レブチューン & 超速 | 24 |
レブチューン & スーパーカウンター | 12 |
トルクチューンモーター | |
トルクチューン & ハイスピード | 12 |
トルクチューン & 標準 | 0 |
トルクチューン & 超速 | 24 |
トルクチューン & スーパーカウンター | 0 |
ウルトラダッシュモーター | |
ウルトラダッシュ & ハイスピード | 24 |
ウルトラダッシュ & 標準 | 12 |
ウルトラダッシュ & 超速 | 36 |
ウルトラダッシュ & スーパーカウンター | 12 |
※0、12、24、36の4レベルとなります。数値が高いほうが色が変化する潜在能力の高いセッティングです。
第3部:熟練度による補正値の加算
いくら高回転のモーターと高速用ギヤーを装備していても、そのポテンシャルを最大限に引き出せるかはプレイヤーの「熟練度」にかかっています。この熟練度がボディの色変化に直接影響することを、プログラムは明確に示しています。
ここでは、第2部で算出した基本パラメータに対し、「熟練度」に基づく補正値が加算されるプロセスを解説します。
熟練度スコアの算出
まずは「熟練度補正テーブル」のアドレスを取得します。
次に、プレイヤーの熟練度データを元に「熟練度スコア」を算出します。主人公の熟練度は、初期値がFF(255)で、経験を積むほど減少し、最大で00になります。そこで、プログラムは以下の計算を行います。
熟練度スコア = 255 – 現在の熟練度
この計算により、経験を積んだ量、つまり「累計熟練度」がスコアとして数値化されます。
補正ランクの決定(ループ処理)
続いて、算出した「熟練度スコア」を使い、プレイヤーの熟練度ランクを判定します。
「熟練度補正テーブル」には、[100, 200, 255] という3つの「閾値(しきい値)」が設定されています。この値は「昇格試験の合格点」のようなものだと考えてください。プログラムは、プレイヤーの熟練度スコアが、これらの合格点をいくつクリアできるかをループ処理でチェックします。
<処理の流れ>
- ランクカウンター(Yレジスタ)を0で初期化
- テーブルから最初の合格点(100)を読み込む
- 熟練度スコア > 合格点 なら、試験クリアとみなし、ランクカウンターを+1して次の合格点(200)で再度判定
- スコアが合格点を下回った時点でループを終了
このループを抜けた時点でのランクカウンターの値が、そのプレイヤーの「補正インデックス」となります。熟練度が高いほど多くの試験をクリアできるため、このインデックス値も大きくなります。
最終的な補正値の加算
最後に、決定した「補正インデックス」を4倍して「最終的な補正値」を算出します。
そして、この補正値を第2部で求めた「基本パラメータ」に加算します。これにより、熟練度が高いプレイヤーほどパラメータが大きく強化され、ボディの色変化がより発生しやすくなるのです。
この仕組みをまとめると、以下のようになります。
熟練度スコア (255 – 熟練度) |
クリア条件 | 補正インデックス | 最終的な補正値 |
---|---|---|---|
200 ~ 255 | スコア > 200 | 2 | +8 |
100 ~ 199 | スコア > 100 | 1 | +4 |
0 ~ 99 | なし | 0 | +0 |
このように、100, 200, 255 という値は、プレイヤーの熟練度を3つのランク(ボーナス+0, +4, +8)に振り分けるための境界線として機能しているのです。熟練度が少しずつ上がってもすぐにはボーナスが増えず、ある一定のラインを超えたときに段階的に性能が向上するようになっています。
第4部:乱数と「除数」の決定
ここまでの計算で、「基本パラメータ(マシン性能)」と「熟練度補正」を統合した、マシンのポテンシャル値が算出されました。最終段階では、これに「運」の要素である乱数を加え、色変化の発生しやすさを決定づける「除数」を導き出します。
この乱数の介入により、たとえ全く同じセッティングのマシンや同じ熟練度であっても、レースごとに結果が微妙に変動するという、予測不可能な面白さが生まれるようになります。
乱数の生成
0から4の範囲を指定して乱数生成ルーチンを呼び出します。0から4というと5つの範囲となりますが、指定された範囲の最大値を生成しないという乱数生成器の内部仕様により、実際に得られる乱数値は「0、1、2、3」 のいずれか4種類に限定されます。
最終インデックスの算出
次に、これまでの計算結果と生成された乱数を統合し、最後のデータテーブルを参照するための「最終インデックス」を算出します。計算式は以下の通りです。
「最終インデックス = (基本パラメータ + 熟練度補正値) + 乱数値」
「除数」の決定
最後に、この「最終インデックス」を使って「最終パラメータテーブル」を参照し、今回のレースにおける最終的な「除数」を読み出します。
この「除数」こそが、マシンセッティング、プレイヤーの熟練度、そして乱数という全ての要素が統合された、この計算の集大成です。この除数の値が大きいほど、後の計算で色変化がより起こりやすくなります。
以下が最終パラメータテーブルです。見てわかるようにインデックスが遠くなるほど値が大きくなっています。
インデックス | 除数 | インデックス | 除数 |
---|---|---|---|
+$00 | 01 | +$01 | 01 |
+$02 | 01 | +$03 | 01 |
+$04 | 01 | +$05 | 01 |
+$06 | 01 | +$07 | 01 |
+$08 | 01 | +$09 | 01 |
+$0A | 01 | +$0B | 01 |
+$0C | 01 | +$0D | 01 |
+$0E | 02 | +$0F | 02 |
+$10 | 01 | +$11 | 02 |
+$12 | 02 | +$13 | 02 |
+$14 | 02 | +$15 | 02 |
+$16 | 02 | +$17 | 02 |
+$18 | 02 | +$19 | 02 |
+$1A | 02 | +$1B | 03 |
+$1C | 02 | +$1D | 02 |
+$1E | 03 | +$1F | 03 |
+$20 | 03 | +$21 | 03 |
+$22 | 03 | +$23 | 03 |
+$24 | 02 | +$25 | 03 |
+$26 | 03 | +$27 | 04 |
+$28 | 03 | +$29 | 03 |
+$2A | 04 | +$2B | 04 |
+$2C | 04 | +$2D | 04 |
+$2E | 04 | +$2F | 04 |
第5部:コース係数による最終調整と割り算
全ての計算の最後に、レースが行われる「コース」の特性が反映され、最終的な目標値が算出されます。
コース係数の取得
現在のコースIDを元に、コース定義テーブルから「コース係数」を読み込みます。
ここでの係数とは、そのコースの「最大場面数」そのものです。「場面数」とは、レース中に画面が暗転して切り替わる回数のことであり、この数値が大きいほど、そのコースの距離が長いことを意味します。
最終計算の実行
次に、ハードウェアの除算機能を利用し、以下の最終計算を実行します。小数点以下は切り捨てます。
「必要場面数 = コース係数 / 除数」
この計算は、第4部で算出したマシンの総合的なパフォーマンス値(除数)を、レースの舞台となるコースの長さ(コース係数)に応じて調整する役割を担っています。
「レベルアップ・ノルマ」の確定
この割り算の結果こそが、今回のレースにおける「色が変化するまでに必要な場面数」、すなわち「レベルアップ・ノルマ」として最終的に確定します。マシンは走行中に場面をクリアするごとにカウンターを進め、このノルマを達成した次の場面でボディの色を変化させるのです。
第6部:例外処理と最終調整
ここまでの計算で、出場する全マシンに対して色変化に必要な「ノルマ(必要場面数)」が算出されました。しかし、ご存知の通り、実際に色が変化するのはシャイニングスコーピオンだけです。この最終セクションでは、算出されたノルマに対し、ゲームの仕様に合わせるための二つの重要な例外処理が行われます。
例外処理①:シャイニングスコーピオン専用機能への限定
この色変化システムは、原作の設定を忠実に再現し、特定のボディパーツ「シャイニングスコーピオン」(ボディID:08)の専用機能とする必要があります。
そのために、プログラムは5台のマシンそれぞれのボディIDをチェックします。そして、ボディがシャイニングスコーピオンではない場合、それまで計算してきた「必要場面数」を$2710(10進で10000)という、事実上到達不可能な巨大な数値で上書きしてしまいます。
例外処理②:短距離コースでの発動制限
次に、色変化という特別な演出の価値を保つための調整が行われます。もし、数場面で終わるような短距離コースで簡単に色が変わってしまうと、その特別感が薄れてしまいます。
これを防ぐため、プログラムは現在のコースの「最大場面数」が10未満かどうかをチェックします。そして、もし10場面に満たない短距離コース(「ストレートコース」のみが該当)だった場合、シャイニングスコーピオンであっても、その「必要場面数」を問答無用で $2710 に書き換えます。ですので、ストレートコースでは色変化が絶対に起こりません。
これら二つの例外処理は、ゲームの世界観を守り、色変化を特別なイベントとして正しく機能させるための、いわば安全装置です。全てのチェックを終えると、プロセッサの状態を元に戻し、この一連のサブルーチンはその処理を完了します。
<各コースの最大場面数リスト>
コース名 | 最大場面数 |
---|---|
クリームパンコース | 27 |
ストレートコース | 3 |
藤吉のゲームセンターコース | 62 ※1 |
スプリングレース予選コース | 62 |
スプリングレース決勝コース | 62 |
特設野試合バトルコース | 77 |
ジェットコースターコース | 42 |
サマーレース決勝コース | 59 |
鍾乳洞コース | 57 |
オータムレース決勝コース | 67 |
クリームパンコース(直線コース追加ver) | 37 |
スーパーグレートジャパンカップコース | 64 |
トンネルコース | 77 |
※1 色変化の計算に使われる「藤吉のゲームセンターコース係数」は、最大場面数62を元に算出されますが、実際の走行場面数は57です。
結論
シャイニングスコーピオンの色変化システムは、単一のルールや単純な確率で決まる現象ではなく、「セッティング(マシン性能)」「熟練度(プレイヤー経験)」「乱数(運命)」、そして「コース(舞台)」という4つの要素を合成し、最終的な「レベルアップ・ノルマ」を算出するものです。
これで、「モーターとギヤーの組み合わせによって、色変化の上限が決まる」という仮説は覆されました。
このシステムの根底にある設計思想は、極めて明確です。それは、プレイヤーに「最高の腕前(熟練度)」と「最高のマシン(セッティング)」の両方を追求させることにあります。
- マシンが最高性能でも、熟練度が低ければ真価は発揮されません。
- 逆に、熟練度がMAXであっても、マシン性能が低ければ限界があります。
この絶妙なバランスを技術的に実現しているのが、「基本パラメータ(マシン性能)」に「熟練度補正値」を『加算』するという仕組みです。熟練度はあくまで元の性能を「ブースト」する役割であり、元々の性能が低ければ、どれだけブーストしても最高レベルには到達できません。
「熟練度が高いはずなのに紫やピンクで止まってしまう」という現象は、バグではなく、むしろこの設計思想が完璧に機能している証拠なのです。最高のパフォーマンス(最速の色変化)を引き出すには、最高の腕前と最高のマシンの両方が必要不可欠であるという、開発者からのメッセージと言えます。
最終的に、このシステムは「割り算」を用いて、ユーザーの努力が報われる合理的なゲームバランスに着地します。試行錯誤を重ねてマシンを仕上げ、レース経験を積んだプレイヤーほど、色変化という形で明確なリターンを得られるのです。
これは単なる数値生成プログラムではありません。ユーザーの探求心を刺激し、戦略性と何度でも遊べるリプレイ性を深く支える、このゲームの面白さの源泉そのものと言えるでしょう。
実際の計算例
ここまでの解説で、色変化の裏にある複雑な計算システムの全体像が見えてきました。では、これらの要素が組み合わさって、実際のゲームプレイでどのように「必要場面数」が決定されるのか、具体的な例を挙げて計算を追ってみましょう。
【今回の条件】
セッティング:レブチューンモーター & 超速ギヤー
熟練度: 0x70(112)
コース:クリームパンコース
【マシンセッティングから「基本パラメータ」を算出する】
まず、マシンポテンシャルとなる「基本パラメータ」を計算します。
レブチューンモーターのIDは02、超速ギヤーのIDも02です。
計算式(モーターID * 4) + ギヤーID に当てはめると、(2 * 4)+ 2 = 10(16進数で$0A)となります。
次に、「モーター/ギヤー基本値テーブル」を参照し、インデックス$0Aに格納されている値を探します。テーブルを見ると、基本値は「3」であることがわかります。
最後に、(基本値 – 1) * 12 という計算を行います。
(3 – 1)* 12 = 24
すなわち、このセッティングの基本パラメータは「24」であると確定しました。
【プレイヤーの腕前を反映させる「熟練度補正」】
次に、熟練度を数値に反映させます。
まず、255 – 現在の熟練度 という計算で、プレイヤーのスキルレベルを「熟練度スコア」に変換します。
255 – 112(0x70)= 143(0x8F)
今回の熟練度スコアは「143」です。
このスコア143を使って、熟練度ランクの判定試験に挑みます。
第1試験(合格ライン スコア > 100))143は100より大きいので、合格です。
しかし、第2試験(合格ライン スコア > 200)143は200より大きくないため、不合格となります。
この結果、今回の熟練度ランクは「ランク1」と判定され、4倍して、補正値として +4 が与えられます。
【運の要素を加えて「除数」を決定する】
最後に、ここまでの計算結果に「運」の要素である乱数を加え、最終的なパフォーマンスを決定する「除数」を導き出します。
基本パラメータ + 熟練度補正値
24 + 4 = 28(16進数で$1C)
これが、乱数が加わる前の基準となるインデックスです。
この計算で使われる乱数は0, 1, 2, 3の4種類です。これにより、最終的なインデックスは28, 29, 30, 31(16進数で$1C~$1F)のいずれかに決まります。
「最終パラメータテーブル」で、インデックス$1Cから$1Fの範囲を見てみましょう。そこには [02, 02, 03, 03] という値が格納されています。
つまり、このセッティングと熟練度では、それぞれ50%の確率で「除数2」か「除数3」が選ばれるということです。
【最終的な「必要場面数」の算出】
仮に、今回のレースで乱数値1が選ばれ、「除数」が2に決定したとします。
クリームパンコースの最大場面数は27なので
最終計算:floor(コース係数 / 除数)
必要場面数(27 / 2)= 13.5
小数点以下は切り捨てられるため、13となります。
【結果】
以上の計算により、この条件でレースに臨んだ場合、色が1段階変化するまでに必要な場面数は「13場面」であると決定されました。
なぜ私の検証では「ピンク止まり」がなかったのか
以前に私が提示した、熟練度MAXで各セッティングを試した色変化表で、変化の終着点が「ピンク」になっている組み合わせが一つもなかったことにお気付きでしょうか。
その理由は、私が検証の舞台として選んだ「トンネルコース」の長さと、色変化の「ノルマ達成タイミング」に隠されていました。
色変化は「場面数」の積み重ねで起こる
まず、色変化のメカニズムを再確認しましょう。システムはレースごとに「1段階の色変化に必要な場面数(ノルマ)」を算出します。マシンは場面をクリアするごとにカウンターを進め、このノルマを達成した瞬間に色が変化します。
これを、私の検証条件に当てはめてシミュレーションしてみましょう。
舞台:トンネルコース(最大場面数: 77)
あるセッティングでの計算結果:得られた除数は3で、1段階あたりの必要場面数 = 25
この場合、レース中の色変化は以下のように進行します。
スタート → 紫へ
場面 0 からスタートし、25 場面が経過。
→ 場面 26 になったときに、1段階目の変化が起こる。
紫 → ピンクへ
場面 26 から、さらに 25 場面が経過。(26 + 25 = 51)
→ 場面 51 になったときに、2段階目の変化が起こる。
ピンク → 赤へ
場面 51 から、さらに 25 場面が経過。(51 + 25 = 76)
→ 場面 76 になったときに、3段階目の変化が起こる。
ゴール直前という絶妙なタイミング
この結果が示すのは、まさに「ゴール直前」という絶妙なタイミングです。トンネルコースの全長は 77 場面。そして、最後の色変化が起こるのが 76 場面目。これは、ゴールチェッカーを通過する最後の走行場面にあたります。
つまり、このマシンセッティングは、トンネルコースを走り切る能力をギリギリ最大限に発揮し、最終盤で赤色に到達するという、非常にドラマチックな性能を持っていたのです。これが、私の検証で「ピンク止まり」が観測されなかった理由です。
なぜ他のコースでは「ピンク止まり」が起こるのか
では、なぜ他のコースでは「ピンク止まり」が発生し得るのでしょうか。スーパーグレートジャパンカップコース(最大場面数: 64)を例に考えてみましょう。
あるセッティングでの計算結果:得られた除数が3で1段階あたりの必要場面数 = 21
この場合、色変化のタイミングは以下のようになります。
22 場面目で紫に変化。
43 場面目でピンクに変化。
そして 64 場面目で赤に変化する…はずです。
しかし、SGJCコースの最大場面数は 64 です。場面 64 はマシンがゴールラインを通過した後でリザルト画面が表示されるときであり、場面 64 に到達する前にレースは終了してしまいます。
内部的には赤に変わっているかもしれませんが、プレイヤーがそれを視認できるのは 63 場面目まで。結果として、赤色に変わるための場面数があと一歩足りず、プレイヤーの目には「ピンクまでしか変化しなかった」と映るのです。
このことから、色変化がどこまで進むかは、マシンセッティングだけでなく、走行するコースの最大場面数にも大きく依存することが分かります。
具体的には、最大場面数が59である「サマーレース決勝コース」、最大場面数が62の「スプリングレース予選コース」「スプリングレース決勝コース」、最大場面数が77の「特設野試合バトルコース」「トンネルコース」では他のコースよりも赤まで色変化が起こりやすいです。
解説:「シャイスコ色変化システム・マネージャー」の動作
これまで解説してきた「パラメータ・ジェネレーター」が、色が変わるまでの『計画』を立てるプログラムだとすれば、この「システム・マネージャー」は、レース中にその『計画』を遂行する、まさにシステムの心臓部です。
このサブルーチンは、レース中のメインループから毎フレーム呼び出され、5台のマシンそれぞれが色を変化させるべき「その瞬間」が訪れたかを判定し、実行します。その判定は、単に場面数を数えるだけでなく、「マクロなタイミング(総走行場面)」と「ミクロなタイミング(場面内進行度)」という、洗練された二段階のチェックによって行われます。
以下に、1台のマシンに対する処理の流れを詳述します。
ステップ1:事前チェック
無駄な判定を省き、システムが正常に動作するための前提条件を確認します。
最初に、マシンの現在の「色変化レベル」(00:青~03:赤)を確認します。このレベルが既に03(赤)に達していれば、それ以上変化する必要はないため、このマシンの処理は即座に終了します。
次に、「色変化演出用カウンター」($3250,x)を確認します。色が変わる直前には約10フレームの点滅演出が発生します。この演出がまだ終わっていない(カウンターが1~9で動作中)場合、新たな色変化の判定は行わず、このフレームの処理をスキップします。もし、演出がちょうど終了した(カウンターが10になった)場合は、後述のステップ4へ直接ジャンプし、色の確定処理を行います。
ステップ2:「総走行場面数」の判定
事前チェックを通過すると、いよいよ色変化のタイミングが来たかを判定します。最初の関門は、レース全体を通したマクロな視点でのタイミングです。
このステップでは、まず「次に色が変わるためには、通算で何場面を走行し終えている必要があるか」という目標達成条件を計算します。
ハードウェア乗算機能を用い、以下の計算で「目標となる総走行場面数」を算出します。
目標総走行場面数 = (必要場面数) * (現在の色レベル + 1)
例えば、必要場面数が6で現在が青色(レベル0)なら、目標は6 * (0+1) = 6となります。これは「レース開始から6つの場面を完全に走り終えること」が、次の色に変わるための条件であることを意味します。
そして、プログラムは計算した「目標総場面数」と、マシンの実際の「場面カウンター」($3251,x)を比較します。このカウンターは「現在走行中の場面番号」ではなく、「これまでに走り終えた場面の総数」を記録しています。
if (目標総走行場面数 < 総走行場面カウンター) then まだ
if (目標総走行場面数 >= 総走行場面カウンター) then OK
この比較の結果、マシンがまだ目標の場面数を走り終えていなければ、このマシンの処理はここで終了します。
つまり、「6場面を走り終えること」が条件であり、その条件が満たされたことが確定するのは「7場面目が始まった直後」となるのです。
この「条件達成」と「判定・実行」のわずかなタイムラグが「1場面のズレ」を生み出しているのです。
ステップ3:「場面内進行度」の判定
第一の関門を突破しても、すぐに色は変わりません。プログラムはさらに、場面内でのミクロなタイミングをチェックし、レースの流れとして自然なタイミングで変化するように調整します。
場面内進行度のチェックとして以下の比較を行います。
(セクション目標値/4) < (マシンのセクション現在値)
マシンのセクション目標値をロードし、LSR命令(論理右シフト)を2回行って4分の1にして、そのマシンのセクション現在値とCMP命令で比較します。
セクション目標値とは「その区間で目指す値」のことで、セクション現在値とは「今、その区間内でどこまで進んでいるか」を表します。
これは、「マシンが現在の場面の約25%以上を走行したか?」を判定しています。場面が切り替わった直後は条件を満たさず、ある程度コースを進んだ「場面の中間あたり」で初めて条件が満たされます。もし場面の切り替わりと同時に色が変化してしまうとプレイヤーが見逃す可能性があるため、この処理は、色変化という重要なイベントをしっかり認識させるための、巧みな演出上の配慮と言えます。
ステップ4:色変化の実行
二つの関門をすべて突破し、ついに色を変化させるべき「その瞬間」が訪れると、以下の実行フェーズに移行します。
条件を満たしたフレームから、「色変化演出用カウンター」($3250,x)がインクリメントされ始めます。このカウンターが1~9の間、マシンのボディ色パレットの各色データにEOR #$7FFFという演算を行い、色を反転させることでマシンが点滅する視覚効果を発生させます。
この点滅演出が9フレーム続いた後、10フレーム目に演出カウンターが10に達すると、最終処理が実行されます。
点滅を終了させ、マシンの「色変化レベル」を+1します(例:紫01→ピンク02)。次に、新しい色レベルに対応したグラフィックや性能パラメータが格納されている専用テーブルからデータを読み出し、VRAM(描画用メモリ)やワーキングRAMに書き込みます。そしてマシンの見た目が実際に更新され、色が確定します。
色が変わっても速度は変わらない
他のサイトやRTA動画では、シャイニングスコーピオンの色変化について以下のような説明がよく見られます。
それは「シャイニングスコーピオンの色が変わると速度が上がっていき、赤になると最高速になる」というものです。
しかし、これは勘違いであり、実際は色の変化でスコーピオンの速度は変わっていません。なぜなら、SGJCレースにおいてライバルマシンは後半の1分を超えると、そこから徐々に失速するように設定されているからです。
ライバルマシンが遅くなるのはモーターピークを過ぎたためでもなく、ストーリーモードのSGJCレースだけに適用される特殊な処理によってスコーピオンが最後のストレートでごぼう抜きをしてオープニングのあの追い抜きを再現させているというわけです。つまり演出です。
色が変わると速くなるのであれば、スコーピオンのボディのみが圧倒的に速いはずです。それなのにピンク色でも追い抜きができますし、他のボディを変えてもほとんどタイムは変わりません。空気抵抗値の差は出るものの、ごく僅かなものです。
ですから「色が変わると速くなる」という説は正しくないのです。
「赤いから速いのではなく、速いから赤くなる」といえます。ボディの色変化は、熟練度の高さとセッティングのスピードを示しているのです。
当時、初見でラストレースにて真紅になったスコーピオンがライバルマシンをぶち抜いて優勝したときには、さぞかし感動したに違いないでしょう。
本作の企画段階では、最初はシャイニングスコーピオンの色変化は考えられていなかったようです。しかし、開発の終盤になる頃、発売元のアスキーから色変化を導入したいとの要望があったそうで、その後、デザイナーと検討して実装することができたとのことです。
それを裏付けているかのように、シャイスコ色変化システムに関するサブルーチンがプログラムの最後のほうにあります。それ以降はデータテーブルなど(C5バンクの一部にはプログラムあり)