2014]ナムコ作品で見る乱数の歴史。Split」出場チーム情報をお届け。今シーズンの覇者となるのはどのチームかなぜ新スタジオなのか。eスポーツ選手をいかにしてサポートしているのかフォーナインズがゲーミンググラス「PLAIDe」(プレイド)を立ち上げた理由とは。「レジェンド・オブ・ルーンテラ」デッキガイド。STRANDING」の世界をより理解するための“運び方”ガイド姿の見えない世界中のプレイヤーと緩く助け合う。2019]ティガレックスやバフバロの狩猟に挑戦。REMAKE」の最新映像が公開。2014]ナムコ作品で見る乱数の歴史。往年のナムコタイトルから学ぶ乱数の進化と応用」という講演が行われた。加来量一氏この講演のユニークな点は,旧ナムコの作品を「乱数」という視点から振り返るということだ。HE技術部のプログラマーである加来量一氏は,旧ナムコの初期作品50本を解析し,それぞれの時代でどのような乱数が使われていたかを特定した。そこから見えてくる乱数技術改良の歴史を見ていくというのが,講義の主旨なのである。1980年代のナムコアーケード作品で使用されている乱数技術の一覧表。加来氏がそれぞれのプログラムを解析した結果だ。それぞれのプログラマーが独自に乱数生成アルゴリズムを作っていた「混沌」,乱数生成アルゴリズムを用いた「線形合同法(LCG)」「線形帰還シフトレジスタ(LFSR)」「LCGとLFSRを組み合わせて使用」,そして「乱数表(テーブル)の参照」......と大別できる。それぞれの乱数技術は時代の流れと共に明確に切り替わる訳ではなく,いくつかの方式が並行して使われていた。これはプログラマー個人のこだわりによるものではないか,と加来氏は推測するMSXやファミコンで発売されていたナムコ作品における,乱数技術の一覧表。さまざまな方式が混在していたアーケードとは違い,「LCGとLFSRを組み合わせて使用」に統一されているが,加来氏はプログラマー同士の技術交流が盛んだったためではないかと考えているそうだ氏が乱数にこだわった理由は,乱数が生み出す偶然性が遊びの本質と考えているからだ。乱数とは,ランダムに数を生成すること。サイコロなどは乱数を作り出す装置だ。次に出る目が何になるかは分からないからこそ,偶然性による遊びが生まれる。すごろくでは自分の駒を進める数がサイコロによって決められるため,毎回異なった展開が生まれるが,これなどは乱数の偶然性が遊びを面白くする好例だろう。ゲームにおいても,乱数は重要な役割を担っている。敵の動きやAIの振る舞いなどが毎回変化し,展開が単調にならないのは乱数のおかげだ。乱数は,次に何の数が出るか分からない「真の乱数」と,ある程度の法則性がある「疑似乱数」に分類できるが,現代のゲームでは疑似乱数が使われている。これは,真の乱数を使うと,自分のプレイを後から再生できるリプレイ機能などがうまく働かないためであるという。ゲームでは後者が用いられる疑似乱数の仕組み。上部のseed(乱数のもととなる数)に,アルゴリズムで加工を加えることで乱数を生み出していく。加来氏は,ナムコ最初期を乱数技術における「混沌の時代」であると分類する。CPUの処理能力やメモリの制限が大きい中,プログラマーが乱数を発生させる方法を模索し,それぞれのタイトルで色々な手法が使われていたためだ。画面同期を行った回数を乱数の替わりに用いたほか,「パックマン」ではseedを使ってメモリのどこかのアドレスにアクセスし,そこに存在する数値を乱数として用いたり,「ギャラガ」のようにメモリをリフレッシュするための「Rレジスタ」をseedにするといった工夫が用いられていたという。混沌の時代では,プログラマーごとに異なった方法で乱数を生成していたパックマンではseedを使ってメモリにアクセスし,そこにある数値を乱数として使用していたという。・線形合同法(LCG)の時代その後,乱数生成に「線形合同法」(LCG)というアルゴリズムが用いられるようになる。LCGはC言語標準ライブラリの乱数で使われていることでも有名で,ひと言で表わすと「足し算とかけ算の組み合わせ」だ。当時CPUとして使われていたZ80はかけ算ができなかったため,足し算を連続させることで擬似的なかけ算とし,LCGを実現していたというから,いかに制限が大きかったかがうかがえる。画面のキャラクターは乱数生成アルゴリズム「線形合同法」の擬人化。名前を募集中とのこと加来氏解析による,LCGを使用した代表的なナムコタイトル。それぞれの作品で微妙に方法が異なっているのが分かるLCGの欠点。簡単に実装でき,ばらつきのある乱数を出力できることから,LCGに次いで次いで「線形帰還シフトレジスタ」(LFSR)が使われるようになった。「ギャラクシアン」や「ギャラガ」の背景できらめく星々も,実はLFSRによる乱数から作られている。画面を1ドット描くごとに乱数が作られ,星の有無や色などが決められているそうだ。「線形帰還シフトレジスタ」(LFSR)の概念。元々は電子回路で使われていた方式であり,そのためハードウェア的な実装が容易だという。「ギャラクシアン」や「ギャラガ」においてLFSRはハードウェア的に実装され,星々を描くのに使われている加来氏解析による,LFSRを使用した代表的なナムコタイトルそして「乱数の話をする際には欠かせないだろう」ということで紹介されたのが「ドルアーガの塔」だ。本作は,主人公のギルが迷路状のフロアを突破していくという60面構成のゲーム。現在のゲームであれば,プログラムの中に60階分のマップデータが内蔵されているところだが,本作にはそうしたものは存在しない。ステージ開始時の音楽が鳴っている最中,乱数を使って迷路の壁が生成されているという。乱数のseedとなるのは,ステージごとに決められた数値。seedが決められているため,毎回同じ形の迷路が生成されることになる。ランダムな結果を導き出すはずの乱数が,毎回同じでなければならないマップを作るのに使われている逆転現象が面白い。同作の迷路で特徴的なのが,通路が右下へ伸びるジグザグの階段状になっていることで,これはLFSRが1回の計算で1ビットの乱数を生成するところを,2ビット組み合わせて使っていることから,規則的な階段状の構造が生まれるのだという。加来氏によれば,ドルアーガの塔については「このテーマだけで講演時間を全て使っても説明しきれない」ほどにディープな話題なのだそうだ。ドルアーガの塔のLFSRで作られた迷路(左写真)と,本当にランダムに作成された迷路(右写真)。ドルアーガの塔の迷路では「上下の回廊」と「右下へ伸びるジグザグの階段状通路」が特徴となるが,これは1ビットの乱数を生成するLFSRを2回分組み合わせて使ったことによるものだそう。結果として,複雑すぎず,足が遅い初期状態のギルでも制限時間内に突破できる迷路が生まれているLFSRを2ビット分使ったドルアーガの塔の迷路生成LFSRの欠点。右側に並ぶコードは,LFSRをソフト的に実装する際の例。ソフト的にLFSRを作ろうとすると,プログラマーによって全く異なるコードになるため,エラーが見つけづらくなるという。加来氏によれば,過去のナムコ作品の中にもミスしたであろうと思われるLFSRが残っていたとのことだ・LCG+LFSRの時代ある程度まんべんなく乱数が出力できるものの,偏りも生まれやすく,下位のビットが周期化しやすいLCG。ハードウェア的には簡単に実装できるものの,1回の操作で1ビットしか乱数が出力できないため,ビット数の多い乱数を生成するためには計算回数が増えてしまうLFSR。それぞれにメリットとデメリットを持つ2つの形式だが,80年代中盤には両者を組み合わせた使用法がメインになった。これにより,両者の良い所取りが可能になっていったという。使えるメモリが少なかった時代は,テーブル(乱数表)を内部に持つようなことが難しかったが,80年代末にメモリが増えたことから,テーブルを使った乱数が主流になっていく。・C言語の時代90年代のゲーム開発ではC言語が盛んに使われるようになる。前述したようにC言語は標準ライブラリで乱数を生成できるため,これまでのような自作アルゴリズム乱数は姿を消していったそうだ。標準ライブラリの乱数はLCGによるものなので,LCGの問題が再燃したことから,現在では近代的なアルゴリズムが使われているという。現代の乱数技術の数々。LFSRを32個並べるという,現在のCPUならではの力技を使い,一回で32ビットの乱数を生成できる「GFSR」。その発展型である「メルセンヌ・ツイスタ」。GFSRを様々な演算法で加工する「遅延フィボナッチ数列」など,過去のものをベースに現在の乱数技術が成り立っていることが分かる。最後に加来氏は「癖のある乱数も,使い方次第でドルアーガの塔のようにゲームに味を加えることができます。乱数の性質を見極めて正しく使って下さい」と語って講演を締めくくった。関連記事ネクソンが「みらいクリエイターズプロジェクト」の第2回を開催。2014]ナムコ作品で見る乱数の歴史。チック4Gamer」第240回:シリーズ2作がこれ1本で楽しめる。