初代『ポケモン』内に『オセロ』を実装するユーザー現る。知恵と執念によるゲーム内ゲーム実装

Image Credit: ア▶イス on YouTube
advertisement
Pocket
reddit にシェア
LINEで送る

ゲームボーイ向けに発売された初代『ポケットモンスター』内で、ボードゲームである『オセロ』を動作させたユーザーが現れた。ゲーム内にゲームを仕込む離れ業の背景には、ある種狂気さえ感じるプログラミング作業があったようだ。


『ポケットモンスター 赤・緑』は、1996年ゲームボーイ向けにリリースされた『ポケモン』シリーズ第1作だ。シリーズの原点として、「多彩なポケモンの捕獲・育成」「6匹チームによるバトル」など、後年の作品の基礎となる要素を盛り込んだRPGである。そして、当時初代『ポケモン』を楽しんだプレイヤーのなかには、多様な「バグ技」を楽しんだ方も多いのではないだろうか。

というのも同作には、特定操作で開発者の意図しない挙動を実行できてしまう不具合が散見されたのだ。たとえば特定のポケモンを手に入れたり、アイテムを手に入れたり。用途は多岐にわたる。ゲームボーイには簡易にパッチがあてられるようなオンラインシステムもなかったため、多くの子どもたちが幻のポケモンやアイテム増殖を目指してゲームをバグらせていた。また、発売から約26年経っていることもあり、不具合の再現方法や発生機序についても、極めて詳細な研究がなされている。長年のポケモン研究の成果により、現在の本作では本格的なプログラム実装さえも可能になっているのだ。そうした技術を背景に、初代『ポケモン』内にプレイ可能な『オセロ』を実装してしまったユーザーがあらわれた。初代『ポケモン』のバグなどを研究する国内ユーザーのア▶イス氏である。


しかし、一体何をどうやってゲームの中に別のゲームを実装したというのだろうか。その背景には、初代『ポケモン』がもつ挙動のひとつである「任意コード実行(Arbitrary Code Execution/ACE)」がある。任意コード実行は、ユーザーがゲーム内で好きなプログラムコードを実行できてしまう現象だ。つまり、ソフトとハードの仕様の範囲であれば、さまざまなプログラムをゲーム内で実行できてしまう。例としては同作のスピードラン(RTA)にも利用されている。スピードラン統計サイトSpeedrun.comの同作Any%(バグあり)カテゴリー上位は、「いかに速く任意コード実行を利用し“殿堂入り”にたどり着くか」という世界になっている。今回の『オセロ』実装は、そうした任意コードを緻密に編集して構築されているのだ。

実際に初代『ポケモン』内に実装された『オセロ』の様子を見てみると、しっかりとルールに則って動作している様子が伺える。また、カーソルを十字キーで移動してボタンを押すだけの操作実装もきちんとなされている。実装に際して利用されたのは、『ポケットモンスター 緑』後期版とのこと。動画にはゲームボーイとの後方互換性があるゲームボーイアドバンス実機で動作している様子も収められている。ふたりで対戦する際には、ゲーム機を交代で操作するかたちになるだろうか。画面だけ見れば、完全に『オセロ』であり、『ポケモン』のカセットが刺さっているとは信じられない仕上がりである。

そして興味深いのは、オセロ実装の前段階としてプログラムを編集するツール「バイナリエディタ」までも初代『ポケモン』内に実装されている点だ。つまり、ゲームの中にプログラミングに使えるソフトウェアを実装しているといえる。ア▶イス氏の別の解説動画では、任意コード実行を利用した実際のバイナリエディタ構築の様子が紹介されている。技術的な詳細は割愛するものの、任意コード実行の下準備からバイナリエディタ実装に至るまで、緻密な作業を数時間にわたっておこなう異様な工程が繰り広げられている。また、同氏は参考先として国内の初代『ポケモン』研究ユーザーたちの名前を挙げている。多くの技術蓄積によって、今回のオセロは実現したのだ。


バイナリエディタが実装できたからとて、スイスイとオセロが作れるわけではない。そもそもゲームの中にゲームを作ろうという方が無茶なのである。そして、バイナリエディタはプログラムの実装手段には適していないのだ。一般にイメージされる「文字列を入力しておこなうプログラミング」とは別物であり、数列をチマチマと入力する極めて地道な作業が要求される。

筆者もプログラミングの実務経験があるものの、「バイナリエディタでプログラムを書いて」と言われたら泣いて勘弁してくれと懇願するであろうほどの、大変な作業である。ア▶イス氏によれば、今回の『オセロ』は制約となる1119バイトをほぼすべて利用して構築されているとのこと。今回の『オセロ』がどのように編集されたかは不明なものの、1119セットある数値をひとつひとつポチポチと指で入力した可能性がある。しかも、1バイトの状態数は256種類。つまり、場合によっては一箇所につき最大で255回ボタンを押す必要が出てくるわけだ。想像を絶する地道な作業である。同氏はバーチャルコンソール版でも動作するとは思われると述べつつ、「指が死んじゃうよ」として動作未確認であると伝えた。

ア▶イス氏の動画によれば、同氏は先人たちによる『テトリス』や『マインスイーパ』などの実装に触発されて、今回“ポケモンオセロ”実装に踏み切ったとのこと。つまりこの世界には、初代『ポケモン』でゲーム制作に打ち込む猛者たちが複数存在するのだ。約26年前のゲームが、現在そうした楽しみ方をされているとは開発者たちも思いもよらなかっただろう。任意コード実行がもつ可能性は大きい。今後も新しい初代『ポケモン』の遊び方が編み出されていくかもしれない。





※ The English version of this article is available here

advertisement
Pocket
reddit にシェア
LINEで送る