もう2月になりそうですが今年最初なので一応、明けましておめでとうございます。去年の年始(一昨年の年末)はインフルエンザに罹ってボロボロでしたが今年は穏やかに迎えることができました。でも今年の方が流行ってるんですねえ。
さて、これまでのスーカツ(スーファミ活動)ですが……
とりあえず勢いでSFCのプログラムを作る(実機版1号)
↓
内容が微妙なのでWindowsでプロトタイプを作ってゲーム内容を真面目に考える
↓
プロトタイプと同じ内容をSFC実機で実装(実機版2号)
↓
グラフィックの豊井さん、サウンドのNinoさんと初めて会って打ち合わせ、いろいろ要望が出たので大きく変更することに
↓
プロトタイプから作り直す
↓
SFC実機へ移植(実機版3号)[作業中]
という経緯があり、ここまで2年ぐらい? いやあ、時間が流れるのって速い速い。そして製作は遅い。でも、流石にもうちゃぶ台返しはナシと決めていますのでこれでいきます。調整はしても変更はしない。
実機版の実装はコア部分がだいたい出来て一安心というところまできました。
パフォーマンスの話
以前にも書きましたがスーファミのCPUは初代ファミコンに毛が生えた程度で、当時でも高性能とは言い難い物なので、処理落ちを気に掛ける必要があります。ということで性能を計測したくなるわけですが、ここで走査線の位置を見るという方法があります。
スーパースローでブラウン管テレビの写り方を撮影するとどんなふうに見えるのか? - GIGAZINE
えっ、画面をカメラで……というわけではなくて、プログラムの中で走査線の位置を取得できるのでそれをメモリに書き込んでおいて、エミュレータのデバッガで見るという話です。当時のゲームは走査線を使ったトリックを実装していることが多いので、エミュレータはこのへんもしっかり再現しているわけです。
走査線のカウンタは以下のようなサイクルになっていて……
0xE0 : VBLANK開始、走査線が画面の下端に到達して描画が終わる
↓ (この間はハード側の描画処理が休むので、VRAMに書き込めるようになる)
0xFF
↓ (オーバーフローして0に戻る)
0x00 : VBLANK終了、走査線が画面の上端に現れ次フレームの描画が始まる
↓ (この間はVRAMに書き込めないので当たり判定等のCPUだけでできる処理を行う)
0xE0 : 次のVBLANK開始、ここまでに当たり判定等の処理が終わっていないと処理落ちになる
…なので、処理が終わった時点でのカウンタ値が0xE0に迫ってきたらアルゴリズムかゲーム内容を見直さないといけないということになります。
実際に計測してみると、まず敵(ネコ)を1体も置かないときは……
0x04程度。余裕ですね。続いて、3体投入すると……
0x32程度。さらに、5体まで増やすと……
0x4C程度。まだまだいける?と思いそうなんですが、ここで考えなければいけないのは、プレイヤーがネコに体当たりして魚を落とさせた後、ネコが魚に触れると取り返されるルールがあること。つまり、ネコ(多)-魚(多)の当たり判定という結構重い処理が入るので、5体全部が魚を落とした状態を計測。
0x9C~瞬間的に0xA2ぐらい。だいぶ重くなりました。ということで余裕を見て5体がMAXという仕様にしておきました。プロトタイプ版は4体でテストプレイをしていたので、5体も出せれば目標以上ってことで。
という感じで牛歩のように、しかし確実に作っていますんで、今年こそは完成目指してやっていきましょう。
そういえば最近、ビックやらヨドバシに行くと立派なレトロゲーコーナーがあるじゃないですか。あるんですよ。といっても中古カセットは流石に無くて、互換機とか8BIT MUSIC POWERとかが置いてあるんですが、8BIT MUSIC POWERがOKってことはこれもいけそうじゃないですか。あそこに置くのを今年の目標としましょう。