古籏一浩氏の昔話【後篇】 ~ MZ-700版スペースハリアーの開発話
昔話:以前の昔話はtiny XEVIOUS for 700でしたので、次にmz-700版のスペースハリアーの開発話を書いていこうと思います。一応以下のページには開発話があります。 bit.ly/tW0aIr
2011-11-03 00:07:44昔話:スペースハリアーと書くのは長いので以後スペハリと省略します。スペハリはSEGAが1985年に発売したアーケードゲームです。ハングオンに続く体感ゲーム第二弾として登場しました。なお、mz-700版は移植後に正式にSEGAから許諾を得てOh!XS誌上で発表されました。
2011-11-03 00:13:29昔話:スペハリに関しては当時のゲーム雑誌BEEPに開発者のインタビューと写真が載ってました。それを読んでからゲーセンに行ったわけですが結局挫折。という事でスペハリではなくファンタジーゾーンを遊んでいました。
2011-11-03 00:21:53昔話:という事でスペハリよりもファンタジーゾーンという事で、そっちをmz-700でどうにかこうにか。でSBFZができあがったのですが、当時は技術力がなく理想とは違うものができちゃったというところです。
2011-11-03 00:26:30昔話:ゼビウスの時はキャラクタ画面とカラー画面の両方を書き換えていました。でも、文字を全部チェッカーにすればカラー画面の書き換えだけですみます。つまり単純に2倍速になるわけです。
2011-11-03 00:33:03昔話:実機(mz-700)のゼビウスをプレイするとわかりますが、自機(ソルバルウ)が移動したり敵が動くと微妙に色ズレが発生します。これはキャラクタのVRAMへの転送とカラーVRAMへの転送に手間取っているためです。このため垂直ブランキング期間内に転送できずちらつきます。
2011-11-03 00:35:40昔話:Space Bluster SG(以後SBSG)の背景はチェッカーのみで素。文字色と背景色を組み合わせることで海や山、砂漠やピラミッドなどを表現しています。でも、まあ背景以外は通常の文字なので手抜き背景に見えてしまうというのもありました。
2011-11-03 01:02:39昔話:SBSGの時には背景をチェッカーで描くだけでなく長い背景を少ないメモリでどう実現するかというのもありました。mz-700はメモリが64KB(実際には、もう少し使える)なのでSBFZのように細かい背景にしてしまうと1画面で1KB。SBSGは1ステージあたり6画面分あります。
2011-11-03 21:29:02昔話:SBSGは全6ステージですが、最終面はシンプルな背景でスクロールしません。実質5ステージ。1ステージあたり6画面分なので30画面分。文字+背景なら30KB。背景色だけのデータなら15KB。でも、15KBは当時としてはあまりに巨大なサイズで無理がありました。
2011-11-03 21:31:00昔話:そこで、参考にしたのが1986年に発表されたタイトーのDARIUS。DARIUSは3画面という高大な広さで、なおかつ非常に長いマップ&全26ゾーンを実現していました。そこで、DARIUSをじっくりと観察(プレイ)することにしました。
2011-11-03 21:36:12昔話:DARIUSをプレイしつつ観察すると1面をクリアするまでに同じマップが3回出てきます。つまり、同じところ(マップ)をぐるぐると回っていることになります。とは言っても、かなりの長さがあることは確かです。
2011-11-03 21:39:06昔話:さらにDARIUSをプレイすると同じ背景ブロックが繰り返し表示されています。つまり1(文字)×1(文字)で1ブロックではなく8(文字)×8(文字)という感じ。これなら1ブロックを大きくしておくことでマップデータをコンパクトにできます。
2011-11-03 21:42:07昔話:そこでDARIUSを参考にしてSBSGではマップの1ブロックを8文字×2行にすることにしました。SBSGの画面は40文字×14行なので1画面あたり5×7バイト=35バイトでマップデータを構成できることになります。35バイトなら10面でも350バイトにしかなりません。
2011-11-03 21:45:29昔話:通常キャラクタを表示したら消す必要があります。文字画面は空文字(00番)を描くことで消します。が、SBSGでは空文字でなくチェッカー文字で消しました。これは背景が文字色と背景色を使って描かれているためです。こうすることでゼビウスの時のようなちらつきを軽減しました。
2011-11-04 23:35:35昔話:ちらつきはSBFZの時にも発生してました。この時にも仮想画面はVRAMを使用していたためです。SBSGの場合はブロックサイズが大きかったためVRAMでなく内部メモリに仮想画面を用意しました。そこにマップデータを描画し8文字分スクロールしたら新たに描くという具合です。
2011-11-04 23:37:51昔話:後で考えたら内部にマップ用仮想画面を用意しなくてもマップデータから算出されるブロックデータを、そのまま画面に描けばよかったはずです。最後の方に作ったゲームは、そうなっていますがSBSG当時は技術力不足というかアイデア不足で、こんな作りになってました。
2011-11-04 23:39:16昔話:スペースハリアーでは敵が撃った弾は必ず自分に向かって飛んできます。XEVIOUSの場合は16方向でしたので(mz-700版は8方向)、これとは違うロジックが必要でした。ただ、どうやれば自分に向かって弾を飛ばせるのかが分かりませんでした。
2011-11-07 00:07:21昔話:で、ある時ぱっとひらめきました。なんでひらめいたのかは忘れましたが、2点間を結ぶ直線と同じじゃないか!と。分かってしまえば後は実装するだけです。とは言っても当時はZ80ですので浮動小数点演算はもちろん乗算、除算命令すらありませんでした。
2011-11-07 00:09:38