SVX日記
2024-02-16(Fri) トラディショナルなバックグラウンドの回転技術に思い至る
というのも、結構なペースでレトロゲーの類似品を作っている人をツイッターで見て、ちょっと触発されてしまったのだ。自分は、ゲームっぽいものを作るのは好きなのだが、ゲームシステムを作った辺りで満足して終わってしまうのだよな。レベルデザインに興味がないと言うか。
しかし、ちょっと思いついたのだ。せっかく「WebAssemblyでトラディショナルな回転技術を再現」したのだから、それを生かしたゲームができないだろうか。しかも、ほとんどレベルデザインをする必要なしに、だ……あるんだ……あるんだよ。
と思いつつ、あまりにユルユルとやっているので、任意の場所を映して、それを回転させた辺りで、着手から1ヶ月も経ってしまい、しかも、重大な問題に気づいてしまった。というのは、オブジェクト(キャラクタ/スプライト)の回転機能とバックグラウンドの回転機能は違うということだ。
キャラクタの回転機能は、特定の「正方形のパターン」を元に、回転後の「正方形のパターン」を得るものだ。当初、バックグラウンドを表示するなら、それを敷き詰めればいいと思い、アルゴリズムを考えたのだが、「パターンの特定位置を中心に、回転後のパターンの表示位置」を求めようと思うと、どうにもパターン中心までのベクトルを求める必要が生じて、アークタンジェントを計算することが避けられそうにない。
これまで、すべて整数演算で済ませていたのに、そこに逆三角関数が出てくるのは美しくなさすぎる。数表で済まそうとしても、済ませられない規模になるし、誤差も出るだろうから、敷き詰めたパターンにスキ間が出ることも予測される。しかし、当時のアーケード(A-JAX, アサルト, スーパーフォーミュラなど)に一切のスキ間は見当たらない。つまり、当時からバックグラウンドの回転機能は、回転パターンを敷き詰めて実装しているワケではないのだ。