ファミコンのバグった画面とは
ここでいうファミコンは、ゲーム機全般を指して何でもかんでも「ファミコン」と呼称するオカン的なワードではなくて、1983年に任天堂が発売したファミリーコンピュータのことである。
私はファミコンと同じ年に生まれ、リアルタイムにファミコンで遊んでいた世代。小学生の頃は、友だちの家に入り浸って「桃鉄」や「くにおくん」の対戦に明け暮れていた。当時の光景はいまでもたまに思い出す。純粋に毎日が楽しかった頃の記憶のひとつである。
そんなファミコンだけれど、うっかりしているとすぐに画面がバグっていた(厳密には「バグ」ではないと思うが、一般的にバグと呼ばれている現象なので、以降もそう呼称する)。カートリッジが上手く刺さってないときをはじめとして、トイレに立つとき本体を蹴飛ばしてしまったり、熱狂してコントローラーを引っ張ってしまったり……そんなときに容赦なくバグっていた記憶がある。「ブーーー」という悲しい音が響き渡るなか、誰が見ても「バグった」としか言いようのない、ぐちゃぐちゃの画面がテレビに映し出されていた。
検索ワードのサジェストに「掃除機」が出てくるのも面白い。そうだった、ゲームをしているときに親が掃除機をファミコンにぶつけてバグるのだ。そういう悲しい事故が全国の家庭で頻発していた。
そんなバグ自体は遠い昔の出来事だけれど、狂った画面はいま見ても面白い。現代の日常に、あのぐちゃぐちゃな感じを取り込んでみたい。うまいこと写真を加工すれば、あの雰囲気が再現できるかもしれない。試行錯誤してみよう。
ブロック状にバグる
当時はただ「バグった」としか認識していなかったこの現象だけれど、いまなら何となくバグの原因が理解できる。ただ、バグる仕組みを解説した文献なんてないので、私の推測が混じっている。もし間違ってたらやさしく教えて下さい。
まず重要なのは、ブロック状にバグることが多い点だろう。
カートリッジの端子は、画像が入ったROMのアドレスバス(どの画像を読み出すか指定する信号線)とデータバス(画像データが送信される信号線)につながっている。そこが接触不良を起こすことにより、例えばアドレスの特定のビットが0に固定されるなどして、意図しないアドレスから画像データが読み込まれる。その結果、本来配置されるべきブロックとは違うブロックが画面に表示される。そんな感じだろうと予想した。
なのでファミコン画面は、無秩序ではなく、8x8のブロック単位でバグることになる。
どうバグるかは、考え出すと深みにはまってくる。たとえばアドレスの下位ビットや、データバスが接触不良を起こしたら、画像はもっと乱れるはずである。ただどう乱れるかはケースバイケースなので、一番考えやすい「誤ブロック配置」をバグの基本形として考えていきたい。
写真をバグらせる
顔が写っている写真の方が、バグらせたときに面白いんじゃないかという予想である。ただ私は人物写真をまったく撮らないので、デイリーライターの方々の集合写真を題材に使わせていただくことに。まずは、ブロック単位でのバグりを再現してみよう。
バグった。たしかにバグったのだが、なんだか「ヒントでピント」のテクニカル問題みたいになってしまった。ファミコンぽくないのは、あまりに無秩序すぎるせいだろう。
お、なんだか時空の歪みみたいな画像ができあがったぞ。このあと世界が再構築され、並行世界のデイリーポータルZが始まりそうな勢いである。とはいえ、見た目はグッと良くなった気がする。もう少し調整を入れて……
繰り返しパターンの発生
バグったファミコン画面を見ていると、同じブロックが連続的に出現しているのが特徴的だ。まずは何も考えずに繰り返しパターンを作ってみよう。
ブラウザがおかしくなったとき、画面スクロールに合わせて写真の下端が引き延ばされビローンとなることがある(そういえば最近は見ない気がする)。あれに着想を得て、特定のブロックをビローンと伸ばしてみた。
こういうバグありそう! と浮かれ気分になったものの、ファミコンで果たしてこうなるのかは不明である。もう少しファミコンの特性を踏まえた繰り返しパターンを考えてみよう。
ファミコンでは少ないブロックを繰り返し使うことで、ひとつの大きい画面を作り出している。接触不良が起こると、同じブロックを使っているすべての箇所に影響がでるはずである。それが原因で繰り返しのパターンが生まれていると考えた。
さて写真の場合は全く同じブロックなんて存在しないけれど、ある程度似ているブロックはあるだろう。
この青枠はすべて同じブロックだと仮定して、そこへ特定のブロックを一気に貼り付けてみる。
広範囲に同じブロックが敷き詰められることによって、狂った感じが強調された。いい感じだ。しかしバグった画像を見過ぎたせいか、ここに来てだんだんとゲシュタルト崩壊が始まってきた。崩壊した画像が崩壊するので、一周回って何だか普通の画像に思えてくるのだ。そんなことってあるのか。新たな気付きを得てしまった。
ところでこの手法を使う場合には、最初に赤枠をどれにするかが重要である。例えば人の顔が写ったブロックを選択してしまうと、似ている箇所が他にないので、結果的に繰り返しパターンが生まれない。できるだけどこにでもありそうな、平坦な(柄のない)ブロックを選ぶ必要がある。
また逆に、貼り付けられるブロックは、ごちゃごちゃしている(柄がある)方がそれっぽくなる。どのブロックを選択するかは、離散コサイン変換(DCT)という計算をした結果を使って、いい感じにアレコレして選択するようにした。詳しくは省略する。
これにて、写真をバグらせるアルゴリズムの完成である。プログラムを使って一瞬でバグらせることができるようになった。次はそれを使って、いろんな写真をバグらせていこう。
バグ写真の世界
いろんな写真で試していると、バグ映えする写真と、そうでない写真があることが分かってきた。
あの頃のファミコンを再現してみる
最後に、当時を思い起こさせるデバイスを作ってみた。
実際にファミコン(当時の実機)で遊んでいたのは、いまから30年前のはずだ。他のことはあんまり覚えていないのに、このバグり方だけは今も脳裏に焼き付いている。それだけファミコンに熱中していたのだろうし、そのぶんゲームが途中でバグって止まるという体験が強烈だったのだろう。
いま見ても、バグ画面は悪夢のようなビジュアルである。ここまで見てきたように、ファミコンの仕組み上たまたまこんなバグり方になっただけで、誰かが意図して生み出したものではないところが興味深い。それなのに無意識下の意思というか、なるべくしてああなったような運命すらも感じてしまう。
いまのゲーム機は接触不良なんてほとんどないし、あったとしてもゲームが起動しないだけだろう。ゲーム機に衝撃を与えると画面がバグる機能の実装が待たれる。隠し機能として、どうでしょうかメーカーさん。
動画をバグらせてみた
ファミコンでは、画面がバグった状態でもゲームを進められる場合がある。プログラムは正常に読み込めるが、画像だけ読み込み異常になる微妙なカセットの挿し方をすることで実現できるとされている。
それに倣って、動画を毎フレーム バグらせてみた。どうなるだろうか。
……なんだかよく分からないものができてしまった。いや、でもファミコンのバグった画面自体よく分からないものなので、これで合ってるとも言えるのか? うーむ。
今回の画像生成に使ったプログラム(Python)をこちらに置いておくので、使い方が分かる方は試してみて下さい。改良も歓迎です。
https://github.com/nekopla/fc_bug