EXCEEDの同人ソフト開発日記という名の備忘録

趣味のゲームソフト開発人。プロなのかアマなのかは不明(不定)らしい。

任天堂のソフトはいつも予定通りに出てこないって言われるけど、
ソフト作りっていうのは、そういうもの。
ゲームソフトは、期限までにやれと言われて、徹夜したり死に物狂いでやったからといって、
期待通りのものにはならない。そういうふうにすると、
結局、チームは妥協しなければならなくなる。
妥協させられて、できたものは、粗くなってしまう。
ユーザーは目が肥えていますから、受け付けてもらえない

山内 薄

続続続続続続続 XLATE65

さて、もう完全に直せる場所が無くなったわけだが・・・。

恐らく、手作業で直した部分にバグがあるのかと思われるが、またソースを全部追っても、「思い込み」で見逃してしまうと思われるし、なによりも時間と労力が掛かり過ぎるので、趣向を変えて、原因箇所を追求していく方法を取ってみる。


■現在の不具合

1.マップ表示がおかしい
  ステージに関係なく、「直線道路+くねった山道」の繰り返しが延延と続くが、
  背景の当たり判定は(それなりに)更新されているらしい

2.デモ時の速度挙動
  ジャンプ時の時速が 144MPH になってる(基板は 140MPH)
  背景当たり判定との連動挙動がおかしい

3.ネームエントリー時にキートリガーが利かない

4.敵車に対して背景衝突が一切なされない

■ついでに、対処方法が分っていて保留している不具合

・スプライトとBGのプライオリティー
・画面クリア時に同時にスプライトアトリビュート
 クリアしているルーチンがあるが、
 スプライトはミラーVRAMから参照しているので、
 一緒に消えるようにする必要がある。
・タイトルロゴの表示
・単純ループウェイトを実時間で換算する
・春夏秋冬パレット更新

とくにヤバイのは1と4

2はとくに進行上、実害はないので、後回し。たぶん1と4を解決すれば、自動的に直るものと思われる。

3は恐らく、キートリガーを得るルーチンで EOR かなにかを単純に失敗してるだけだろうから、後回し。

とりあえず、自分の車は背景との当たり判定があるので、1を追ってみれば、背景衝突ルーチンの概要も同時につかめると思うので、1を先に追うことに決定。


調査(試行錯誤)の結果、背景には、16パターンの大きなブロック(便宜上、セグメントと呼ぶ)があり、


 0=直線道路
 1=くねった山道その1
 2=直線道路内山道
   :
   :
 F=2車線+小川

これを複数くっつけることにより、各ステージ(各面)を構成しているようだ。さらに、セグメントのテクスチャを構成するタイルマップテーブルとセグメント内の当り判定を構成するテーブルが存在していた。つまり、セグメントを構成するために「タイルマップデータテーブル」と「当り判定データテーブル」とが別々に用意されていることになる。

これで、背景と当り判定が噛み合わない理由がはっきりした。そこで試しに、ステージ構成テーブルをいじり、全ステージ構成をセグメント0(直線道路)だけで構成してみたら、


  「背景描画+当たり判定」が正常に行われていた。


次に、全ステージ構成をセグメント1(くねった山道)だけで構成してみたら、


  「くねった山道+当たり判定」が正常に行われていた。


問題は次に起きた・・・
全ステージ構成をセグメント2(直線道路内山道)だけで構成してみたら、


   なぜか「直線道路+おかしい当たり判定」となり、


全ステージ構成をセグメント3(くねった山道その2)だけで構成してみたら、


   なぜか「くねった山道+おかしい当たり判定」


となった。おそらくではあるが、表示上は「直線道路」「くねった山道」の循環ループになってしまっているが、当たり判定テーブルはちゃんと認識できているということらしい。


ということで・・・ソースのアタリを付けたら・・・

下位バイトまで余計に ADC している所を発見。ちょちょいと直して、解決!(止むを得ないことではあるが)やっぱり手動修正は危険だ・・・・



さて、最大の難関(敵車と背景の当り判定がない)をどうするか・・・