スーパーファミコン時代のRPGを攻略のために解析しているような記事を見ると、ゲームではメルセンヌ・ツイスタなどのアルゴリズムによる乱数生成ではなく、あらかじめ用意された乱数テーブルを使っているようです。
これは何故なのでしょうか?
簡単に思いつく予想としては、以下のような理由が考えられますが実際のところはどういう理由なのでしょうか?
・RAMの使用容量をバイト単位で削るため?
・人間が乱数だと認識するような、実は真の乱数ではない(0が100回連続で出たりしない)出現パターンを得るため?
ゲームで使われていた乱数の生成方法の変遷は、ナムコの加来量一さんという方の公演に詳しいようです。
http://app-review.jp/news/222268
線形合同法などの乱数としての問題点は、こちらでも。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/TEACH/ichimura-sho-koen.pdf
スーファミの発表が '90年。
メルセンヌ・ツイスタの発表が '96年で、新聞に載ったのが翌 '97年。
このLCGとLFSRを組み合わせて使う手法はしばらく流行しましたが、1980年代末にはテーブル参照手法が復権してきました。
【CEDEC2014】パックマン、ドルアーガの塔…往年のナムコタイトルから学ぶ乱数の進化と応用|APPREVIEW
当時CPUは80年代中盤から変化なかったのですが、メモリ増量が実現し余裕ができたので乱数テーブルを置こう、という考え方に至ったのです。
(snip)
そして1990年代、乱数は大変革の時を迎えました。コンシューマーレベルでのC言語の導入が始まったのです。
C言語には一般に標準Cライブラリが付属するため、開発でそれに含まれるrand()関数を利用するケースが次第に増えてきました。
しかし、当時のrand()関数は大半が乱数アルゴリズムとしてLCGを採用していたため、80年代中盤にLCGとLFSRの合体で解決していた問題が再燃しました。
後、乱数の精度が良くなったとして、ゲームにそのまま使えるかどうかという話。
http://blog.livedoor.jp/lunarmodule7/archives/4523745.html
「乱数調整」というキーワードはスーファミのときにもあったように記憶しています。
周期性などの問題もあるし、調整するなら表持ちの方がやりやすいかも、みたいなことがあったかどうか。
なるほど。ゲームで使われる乱数は時代とともに変遷していっており、その流れの中に乱数テーブルによる乱数発生があるんですね。
2017/01/04 23:35:16URL先の記事も参考になりました。素晴らしい回答をありがとうございます。