【 Making「ASALT」その3 】 |
---|
Home | PC-6001mkII | Program | etc |
このページでは、クリア処理以降の実装過程を書いています。 |
2009/04/11〜05/0x:クリア判定 |
ここまで作った以上、避けられないであろうクリア処理。とりあえず実装方法を考える。 まずクリア判定を決めよう。オリジナルでは砲台を倒したときにクリアになるのでこの辺り、薄紫色の部分にクリア判定を入れよう。面の途中にもクリア判定の色と同色が使われていたので、クリア判定用の色を、同じ色合いに見える別の色にする。 とりあえずここまでで確認。クリア用の処理は当然まだ作っていないので、ジャンプの処理と同じになってしまうが、うまく判定できているようだ。 さてここからが面倒だ。「ASSAULT」のクリア処理はかなり手間が掛かっている。大まかにクリア処理を列挙しただけでもこれだけの処理を行っている。
そして5月。今年もP6オフをするとの連絡がHashiさんの掲示板であった。どう書こうかと迷ったが、「半分位作っているネタがある」と書き込む。 さあこれで後へは引けなくなった。 |
2009/05/11:クリア処理その1 | ||||||||
ASSAULTのプレイ動画と見比べて、クリア処理を少しずつ進めていくことにする。 はじめは、少しの間止まる処理だ。これまでジャンプ中等で使用していた自機のステータスをカウンタ代わりに使用する。ちなみに、この時点では以下のような値の割り振りになっている。
これに、最初の待ち状態ステータス(02H-1FH)を追加する。これがカウントアップしている間は、その場に止まった状態にする。 あ、それともう一つ文字表示だ。途中で何箇所か文字表示を行う部分が出てくるので、ある程度共通の処理にしておこう。文字データと表示処理を分離し、文字データの開始アドレスと文字数と文字色を指定すれば良いようにする。 ついでにもう一つ、ゴールへのルートの方向転換する処理を追加する。ステータスは20H。もちろん、自機の方向によって右方向か左方向かに分かれるようにする。 さて、動作を確かめよう。
|
2009/05/30:面データ圧縮 |
以前にも書いた通り、この時点でマップデータのサイズは16KBある。 せっかく作ったプログラム、実機でも試したいところだが、カセットで16KBだと結構時間がかかる。よし、ここらで面データの圧縮を考えようか。データ的にはスカスカなので、1/10位に収まらないかな? 圧縮形式は、おなじみのRLE圧縮にする。面の壁部分が市松模様になっているので、2キャラを1組とすると少しは圧縮が効くのではという淡い期待を持って実装する事にする。 ...まてよ、面データで使用した色数が16色以内だったら... → 色番号1〜16のような表現に変えれば、1キャラが4ビットで表現できる → 2キャラだとちょうど1バイト(8ビット)に収まる → (RLE圧縮前の)データ量が1/2になる! という事で、色数を数えてみる...全部で16色!10色くらいかと思っていたが、意外と使っていたようだ。とにかくギリギリ収まったので、これで行こう。 面データの展開ルーチンをマシン語で作成し、合わせて圧縮面データを作成するプログラムをHSPで作成する。こういう小さいツールを作るにはHSPは便利だと思う。 いざ圧縮すると959バイト、約1/17になった。思ったより短くなって満足、いやいや、まだ圧縮面の展開を試していないではないか。P6側で、このデータを展開してみる...うまくいっているようだ。改めて満足だ。 あとはカセット用に実行しやすいようにメモリマップを微調整していこう。 |
2009/05/16〜27:クリア処理その2 | ||||||||||||||||||||||||||||||
残りのクリア処理を、淡々と作成する。 改めて思うが、ASSAULTの面クリア処理は数あるシューティングゲームの中でも指折りの凝り具合(と操作不能時間の長さ)だと思う。 結局、以下のように自機のステータスをフル活用する感じの処理となった。
これでも、一部は再現しきれていないけど、個人的には大満足だ。 音が一切入っていない部分が大きな難点だが、オフ会までに日にちもないので、ひとまずこのあたりでまとめる事にしよう。 |
2009/06/03:メモリマップ修正 | ||||||||||||||||||||||||||||||||||||||||||||||
現状のメモリマップは以下の通りだ。これをカセット版に直す事を見越して、少しでも隙間なく繋がった状態にしたい。
圧縮面データの展開部分やプログラム実行後に作成される部分は置いといて、データとマシン語部分について考える。 これまでのプログラムの都合上、データ部分には以下のしがらみがある。
|
2009/06/05:カセット版作成 |
さて、いよいよカセット版の作成に移る。 カセット版では、これまで何度か行っている、BASICリストの後ろにデータやマシン語プログラムをくっつける方式にする。この方式も以下のように欠点というか制限がある。
もちろんBASICプログラムのサイズ変更がデータ/マシン語のコピー元アドレスに影響がある部分は変わらないが、そんなものはBASICのサイズが決まれば割り出せる。 2. は、特にデータ部分で注意する必要がある。今回は、当たり判定用データが該当してしまう事がわかっているので、この部分だけビット反転したデータに変更し、コピー時にまたビット反転させるようにする。 さて、確認...途中までしかロードされない。 どうやら、ジャンプ用拡大縮小データの実際に使われていない部分で00Hが10個以上連続していたようだ。この部分をFFHに修正し、再度確認...OK! いよいよ、実機の確認だ。PCからP6に直接ロードしようとすると、音のバランスの関係か、途中でロードエラーになってしまう。まあ、どうせ実際のカセットに入れる予定だったので、PCからデータレコーダを通してカセットに録音しよう。しばらく使ってなかったからか、データレコーダがキュルキュル音を出しているが、大丈夫だろうか? 改めて、データレコーダからP6にロード...うまくいった!!
|
2009/06/06:オフ会 |
カセットテープを土産に秋葉原に向かう。 会場となる某カラオケ屋ではアテにしていたモニタが使えず残念だったが、66実機からPCに画面表示するキットのおかげでとりあえずカセットからのロードを行う事が出来た。 そしていざ起動...歓声があがった。今回は見た目も凝った甲斐があって、評判も上々のようだった。でもやっぱり音がないとさびしいかな?この後、動画も公開しようと思っているので、何かしらの音を付けたいところだ。 責任を取ってくださいね(^^)、と言われたが、まずは一区切りを入れてそこから考えようと思う。でも欲しいよね、グレネード。 |
2009/06/13〜06/21:公開 |
動画で公開できるレベルにするために、自機の移動音とクリア時の音楽を入れよう。 まず、ASSAULTのプレイ動画より実際の音がどうなっているか確認する。自機の移動音は動いている間だけ鳴っていると思い込んでいたが、実際は止まっている時は低いエンジン音、動き始めると最高速までエンジン音が上がる、と段階的になっていた。う〜ん、これはある程度反映すべきなんだろうな。 さて、まず移動音だ。はじめに、移動音専用のステータスを用意する。音の段階を0(高)〜3(低)とし、カーソルキー上下を押した時にカウントダウン、それ以外ではカウントアップする。このステータス値に応じて、以下のように音を鳴らす。
この辺りの処理は、前回「ワイアノ」で作成した部分を流用したので、それほど難しくはなかった。 次に、クリア時の音楽だ。音楽をSOUND相当の機能で鳴らすとなかなか面倒なので、BASICからPLAY文を実行して表示と重ねることにする。これも、ASSAULTのプレイ動画を参考にして少しだけ作ってみる。いざ表示と重ねてみると、テンポが遅い上にリズムがおかしい。 原因はわかっている。回転画面の表示処理中に(PLAY文の正常実行に必要な)割り込みをOFFにしているからだ。とはいえ、いまさら割り込みを許可する処理にはとても変更できないので、なるべく影響が出なさそうな音楽に差し替える。まあ、どちらにしても耳コピーが出来なかったので音楽は変える必要があったのだが。 こうして完成したプログラムを使って何度か動画を取り直し、ニコニコ動画に投稿する。合わせて「ASALT」の更新を行い、これも公開する。 これで、ようやく一区切りがついた。まだもう少しできそうな部分もあるが、こちらはまたぼちぼちと考えていくことにする。 |
← その2 | Making「ASALT」 | その4 → |