Coding Memorandum

プログラミングに関する備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ゲームプログラミングの思い出

この記事は MSX Advent Calendar 2015 の最終日の記事です。

MSX Advent Calendarの最終日の記事は人が集まらなかった反省会ネタの予定でしたが、それも不要な状況になりましたので、本日は私のMSXの思い出を綴ってみようと思います。

私はソフトウェアのエンジニアとして生計を立てていますが、ご多分に漏れずにMSXとの出会いがこの道に進むきっかけでした。

この時代のパソコンユーザーは、雑誌や本に載っているプログラムを打ち込んで遊ぶことが一般的でした。ある意味、プログラムの写経をやらされているようなもので自然とプログラマーとして養成されていく環境にあったと言えます。

私もMSXを使い始めて数年経つころには、BASICだけではなくZ80アセンブラまでマスターし、何かまとまったプログラムを作ってみたいと思うようになりました。そんな中で、初めて作った(ゲーム)プログラムが次の動画のものです。

これを作ったときは、スーパーファミコンが発売された頃で、スーファミのローンチタイトルであったスーパーマリオワールドの最終面のスポットライト処理に感銘を受けて、同じような画面効果を作りたいと思って作成したものです。

このときはアセンブラを持ってなく、紙にアセンブリコードを書いて、MSXマガジンに載っていたワンラインアセンブラを使ってマシン語コードを作成していました。ワンラインアセンブラは、ニーモニックを1行ずつ打ち込んでマシン語コードに変換するツールでした。このやり方は、プログラムの修正でコードサイズが変わると大変なことになりました。当時は、Z80の相対ジャンプ命令を駆使して無理やり修正コードの領域を確保したように記憶しています。(今ではとてもやる気にならない作業です。若いときの情熱がすごい!)

ゲームの内容は、警備員の視線とスポットライトを避けながらキーを集めるゲームで、キーはスポットライトが当たらないと見えないというものでした。

このプログラムの開発では、とてつもないバグに悩まされた思い出があります。キャラクタ(スプライト)が画面中を縦横無尽に飛び回ってしまうバグで、紙のアセンブリコードを何回も机上デバッグしても原因が見つからず、何日も悩みました。

判明した原因は、VRAMへの書き込みをVDPへのI/Oポートアクセスで直接行っていたことが原因で、VRAMへの書き込み速度が速すぎたため、VRAMに書き込んだスプライトの位置データの値が化けるというものでした。VRAMへの書き込みをBIOS経由に変える(CALL命令のオーバヘッドが増える)ことであっさり直りました。プログラムのロジックには何の問題もなかったのです。このバグはプログラマ人生の中で一番記憶に残るバグです。

次に作ったゲームは、次の動画のゲームです。

最初のタイトル画面だけはBASICで、その先のゲーム本編はオールアセンブラの力作です。Z80アセンブラのコードをこちらに置きました。鑑賞用にどうぞ。

このゲームを作ったときは、プレイステーションが発売されていた時期で、リッジレーサーをやりながらドリフト(らしい動き)のアルゴリズムを考えて作成したものです。

ドリフト中の動きは、車の曲がる動きは通常通りであるが、車の向きを変える角速度が2倍になって、向きだけが先行して変わっていきます。カウンターステアをあてるとそのときの車の向きに直進するという処理にしたと記憶しています(実際に動かしながら確認もしました)。

動画をとるために久しぶりに遊んでみましたが、慣れてくると爽快感があって結構面白かったです(動画の4,5週目はノーミスで疾走しています)。もう少しゲームバランスを調整すればイケてるゲームにできたんじゃないかなと思います。

MSXからは離れますが、これらのゲーム作成の経験を踏まえて作ったゲームがxrot(X-Window)です。

このゲームも試したいアルゴリズム(図形回転アルゴリズム)があって作成したゲームでした。このプログラムでは、2重レイヤの画面描画、加速表現、一定の動作速度を保つ処理などに前出の2つのプログラムの技術が活かされています。

振り返ると、私のゲームプログラムは何か試してみたいアルゴリズムがあって、その検証のためにゲームを作るというスタイルになっていました。ゲームというよりはDemoに近いような感じがします。


MSX Advent Calendar 2015に参加してくださった皆様、ありがとうございました。Merry Christmas !

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://msirocoder.blog35.fc2.com/tb.php/94-42de85d4
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。