解析不能!30年以上前のレトロゲームから謎の「自動生成アルゴリズム」が見つかる

fun 2019/09/24
Credit:depositphotos

Point

■レトロゲームには容量不足や技術的制約を解決するため、現代の我々から見ても解析できない謎の技術が使われていることがある

■今回、ATARI2600から82年に発売されたゲーム『Entombed』に、全くロジックが不明の迷路自動生成プログラムのコードが発見された

■迷路の壁を完全ランダムに配置すればクリア不能になってしまうが、このプログラムがなぜ通行可能なパターンで迷路を生成しているかは、まったくの謎だという

ほんの数十年前、コンピュータ関連の技術が飛躍的に向上しました。

特にデータ容量の向上はめざましく、現代の若い人たちにとって容量の単位は「ギガ」が標準になっています。

しかし初代のスーパーマリオの全ゲーム容量は40KB、初代ドラゴンクエストの全容量は64KBでした

ちなみにこの記事のトップに貼られている画像の容量は97KBなので、スーパーマリオの2.4倍、ドラゴンクエストの1.5倍も容量をオーバーしています。

レトロゲームの開発は、そんな小さなデータ容量に、いかにゲームを収めるかが重要な課題となっていました。そのため、普通なら思い付きそうもない創意工夫がふんだんに盛り込まれているのです。

ハード性能による技術的制約も大きく、ゲームプログラマーたちは、現代の技術者にも解析できないような摩訶不思議なコードを創作することによって、当時のハード性能では到底無理と思われる挙動を、ゲームの中で実現していたりするのです。

そのために、最近はレトロゲーム専門の研究者「レトロゲーム考古学者」なるものも登場しています。これは、もはやロストテクノロジーと化したプログラムコードを発掘し、現代技術の問題解決に利用できないか探る研究分野です。

今回の研究者らも、古いゲーム機体ATARI2600のゲームソフト500本近くを調査している中から、謎のコードを発見したといいます。

この研究はカナダのガルガリー大学、イギリスのヨーク大学の研究者により発表され、論文はコーネル大学arXivで公開されています。

Entombed: An archaeological examination of an Atari 2600 game
https://arxiv.org/abs/1811.02035v1

迷路ゲーム『Entombed』の謎のコード

Credit:Wikipedia Commons /atariage.com

今回研究者たちが謎のコードを発見したのは、ATARI2600で1982年に発売されたゲーム『Entombed』です。

これは上から下へと画面が移動していく縦スクロールアクションゲームで、プレイヤーは画面に押しつぶされないようにルートを選んで迷路を攻略していきます。

後戻りはできないため、行き止まりにぶつかってしまうとゲームオーバーです(アイテムにより決められた回数だけ壁は破壊できます)。

Credit:Entombed Atari 2600 Review/TheLimeyDragon

このゲームの迷路はひどく単純なものに見えますが、当時のゲームカートリッジのメモリでは、予めデザインした迷路セットを保存し、後から読み出して表示するということができませんでした

そのためこのゲームは、迷路を設定された「手続き」に従ってランダム生成しています。

問題は、このゲームの迷路がどうやって無用な壁の生成や、侵入できないようなエリアの生成を避けているのかという部分です。

このゲームでは、進行に合わせて迷路を連続生成しています。プログラムは現在描画されている迷路を解析し、次に現れるスペースそれぞれに壁を描画するかしないか判断します。

問題は、この壁の配置を決定する基礎理論が、どうやって作られているのか理解できないことです。

壁の配置決定に使われているパラメータテーブルの値が、どうやって導き出されたものなのか全くわからないのです。研究者たちは、テーブルに含まれる値のパターンを見つけようと試みましたが、無駄に終わりました。

しかし、このテーブルの値が僅かに異なったりすると、もう迷路は通行可能な形で描画されません。

研究者たちは後に、このゲームの開発者の1人と接触することに成功しましたが、その開発者も迷路生成のアルゴリズムは当時から理解できなかったと話します。

彼の話によると、担当したプログラマーは「酔って頭をぶつけた拍子に、このアルゴリズムを思いついた」と語ったそうですが、研究者らは問題のプログラマーと接触することはできなかったとのこと。

レトロゲームに見られる創意工夫の数々

こうした話は、何も珍しいものではありません。

例えばゲーマーの間では、「ファイナルファンタジーⅢ(FF3)」に登場する小型飛空艇ノーチラスのとてつもない移動速度が、ファミコンの性能ではそもそも実現できない挙動だった、という逸話が有名です。

Credit:Let’s Play Final Fantasy Ⅲ Pt.21 ノーチラスで世界探索/Reon Nekosky

FF3に登場する飛空艇ノーチラスは、通常歩行速度の8倍という驚異的なスピードで移動することで、当時多くのプレイヤーの度肝を抜きました。

これはスクウェア(現スクウェア・エニックス)の伝説的なプログラマーのナーシャ・ジベリ氏が、ファミコンのバグを利用して実現した挙動と言われていて、他のどんなゲームでも真似することができないどころか、当のスクウェアのスタッフでさえどうやっているのか解析できなかったと言われています。

FF3は2006年にNintendo DSでリメイク作品が作られていますが、そこでもこの驚異的な挙動は再現されていません。

ナーシャ・ジベリ氏はこの他にも色々と謎のプログラミング技術を披露した人物で、同じくスクウェアから87年に発売された「とびだせ大作戦」というゲームでは、当時としては革新的な3Dシューティングを実現しています。

これもファミコンのハード性能では到底実現できない挙動だと言われ、その技術力に驚きの声が寄せられました。

Credit:とびだせ大作戦/たぶやんゲームス

発売からたった数十年しか経っていないゲームを研究するというのは、一見奇妙なことのように聞こえるかも知れません。しかし、当時のゲーム開発ブームの中に埋もれてしまった、クリエイターたちの突飛な発想や、創意工夫は、現代の私達が抱える技術的問題をブレイクスルーさせるための重要なヒントになる可能性もあるのです。

プログラムを極限まで短く切り詰め容量を少なくしようとする試みは、あまりプログラムに詳しくない人たちには分かりづらい世界の話ですが、似たような話でわかりやすい例を出すなら、一昔前にネットで話題になった7行テトリスというものを見ると良いかも知れません。

下が7行テトリスのソースコードです。

<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i–*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i–;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l–;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;–j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S=””;i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+=”<br>”,S+=X
[i]?”■”:”_”;document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>

【動作のサンプルページ】カーソルキー(左右)とSPACEキー(回転)で操作可能です。(Credit:ZAPAnet総合情報局)

これはいかに短いコードでテトリスを再現できるかを、プログラマーたちが競い合って作ったもので、もはやソースを見ても、なんでこれでテトリスが動くのか多少プログラムをかじった程度の人たちには解析不能な代物です。

実際テトリスはもっと長いプログラムが必要です。しかし、こんなコードでも実行するとテトリスが起動してしまいます。

このようにプログラムの内容はやろうと思えば極限まで切り詰めることも可能です。しかし、そのためには正規のプログラミング技術以外の知識や発想が必要になってきます。そしてそんなコードは、実際動いても後から見たら何がどうなっているのかわけがわからない、という状況になるのです。

このように、コンピュータ技術はあまりに早すぎる進化を遂げたため、もはやレトロゲームのコード発掘は一種の考古学として学問の世界でも成立してしまっています。

今はただの古いゲーム好きという人たちの中からも、もしかしたら未来の「ビデオゲーム考古学者」が誕生するのかも知れません。

【編集注 2019.09.25 10:40 2019.09.26 9:30】
文中に一部誤りがあったため、修正して再送しております。

AIが突然教えていないはずの「数の概念」に目覚める

reference:BBC/ written by KAIN

SHARE

TAG