Atari2600 Pong 風にぬるっと動いてみるテスト

OpenAI GymのAtariゲーム環境の中にPong-ramというのがあって、ゲーム画面ではなくメモリ内容を直接見られるようなので、Stellaで動かしながらメモリアドレスなどを調べています。

幸いAtari 2600はNESと同じでCPUが6502(正確には機能削減版の6507)なので、少しコードを読んでみました。わりと癖があるというかNESゲームとは違う書き方をしているところが多くて読みにくいですが、自機の移動に関するコードがちょっと面白かったので紹介してみます。

自機の移動は擬似コードで書くとこんな感じになっています:

y = (y + dst_y) / 2

これはつまり現座標と最終的な移動先座標の中間点へ移動するということで、一気に移動するのではなく徐々に移動する感じになります。実際にこのゲームをプレイしてみると自機の移動がぬるっとした感じなのですが、それを実現するのがこのコードだったというわけですね(こういうのをeasingって言うのかな?)。

なんとなくjavascript同じようなものを作ってみました(玉がマウスカーソルを追いかけてくるだけ)。上のスライダーで係数を変えると動きの勢いが変わります。