昔ハマったゲーム"ドルアーガの塔"にもう一度感嘆とした件

子供の頃にハマったゲーム『ドルアーガの塔』。
60階建ての塔を、フロア1から一つずつ登っていく途中で、迷路状になった塔内でモンスターと戦ったり、フロアごとに異なる条件で出現する宝物をゲットして、悪魔(?)ドルアーガを倒すゲーム

f:id:vfr750f2:20190422163605g:plain
・ドルアーガの塔 プレイ画面(フロア1)

まぁこの年になるとゲームとはまったく触れ合いのない生活なのですが、ふと『乱数』という視点から情報収集をしている途中で、たまたま"ドルアーガの塔"がひっかかり、ちょっと脱線して記事を読んでみたらすごく面白くて、まさかの人生で二度ハマるゲームだなんて!というお話。
すでに同様なお話を書いている方が多数おられるのですが、私も感激したので書いておこうと思いまして。


乱数・・・・まあ言ってみればサイコロを振って出た、まったくデタラメな数のことで、すごろくゲームにおいては予測できないストーリーを作り出す重要な要素


コンピュータゲームにおいても乱数は重要な仕掛けなわけですが、プログラムで"完全な乱数"を作り出すのはすごく大変。
そこで、擬似乱数という乱数を作り出すプログラムを書くのですが、特に昔のコンピュータ資源が貧弱な頃は複雑なことは出来ず、ある程度の周期で循環しちゃうような、単純なもの。
たとえは、サイコロのふりをする乱数処理では『時計の秒数を6で割り算した余り』なんて感じで、一見乱数ですが、6秒で周期性が見られる・・・・現在の時刻を乱数のきっかけ(種)にしている疑似乱数


その乱数をどうやって作り出すかをテーマとして、ゲームショウか何かで講演が有ったんですって!
その名も『ゲーム世界を動かすサイコロの正体 ~ 往年のナムコタイトルから学ぶ乱数の進化と応用』。

http://cedec.cesa.or.jp/2014/session/ENG/9557.html CEDEC 2014
https://www.4gamer.net/games/042/G004287/20140905040/ レポートWebサイト

そして、そのナムコゲームの歴史で乱数を語る上で避けて通れないのが前振りをした"ドルアーガの塔"なんですって。


あのフロアごとに異なる迷路は、何度プレイしても同じ。

f:id:vfr750f2:20190422205825g:plain
・フロア2の迷路・・・・何度プレイしても迷路はフロア毎に同じ

なので、プログラム内にマップデータとして保持しているのかと思いきや・・・・コンピュータ資源が貧弱なので、そんなに大量なマップデータを保存する領域がもったいない。


そこで(詳細は省略するけれど)フロア番号を乱数の種にして、各杭からどちらの方向に壁を伸ばすのかを乱数で決定しているとのこと。(0→上、1→右、2→下、3→左)
疑似乱数なので、種が同じだと結果が毎回同じ。なのであのマップのデータ量は・・・・なんとゼロバイト!!(でも、閉じた空間にならないチェックロジックとか考えると、マップデータとして保持したほうが容量的には得な気が?(爆))
最後の60面だけは、種を255(0xff)で与えると乱数の特性上常に1を返すので、ずーっと壁が右に伸びる独特の結果になるのですが、それすら神秘性の演出に使っているという、乱数を応用している好例。

f:id:vfr750f2:20190422163606g:plain
・ドルアーガの塔 最終フロア60

すごいなぁアキンド内藤さん(←プログラマ)。
こういう知恵を練る行為、私も8ビット機で処理を書くときとか少なからずやったのですが、今のPCなりゲーム機だと何も考えずに力技でやっちゃうのだろうな・・・・
まぁ、ニューエイジの人からしてみれば、無駄な努力と見られてしまうのかもしれませんね・・・・