ランダムな固有名について

むかしのBeolineliedに、「地球とは全く異質文化であるはずの架空世界における”名前”」という記事があって、そこには誰しも納得させられるもっともなことが書いてある。これを踏まえて、ゲームに出てくるランダム固有名の生成についてちょっと考えてみよう、という話だ。やけに具体的で限定的な話題だが、私の意図としてはこれも広義の「ランダム論」の一端になると考えている。

大きくわけて三通り

ゲーム中に何らかの名前を持つ存在(NPCアーティファクト、ダンジョンなど)が出てくるとしよう。それに名前をつけるやり方としては、ゲーム作者がはじめから固定した名前をつけてしまうか、いくつかある名前候補の中から一つをゲーム実行中にランダムで選び出すか、名前そのものを何らかのアルゴリズムに基づいてランダム生成するか、の大きく分けて三通りがあり得るだろう。変愚蛮怒で言えば、街やダンジョンの名前は固定であり、ランダムアーティファクトの名前は実行時にリストから選択される形式であり、名前が動的に生成されるような局面はない、ということになる。

既存リストからのランダム選択という方略は手堅いが、元のリストがよほど巨大でない限り、ちょっとやり込むとすぐに重複が発生してしまう。そんな時にプレイヤーは、見たくもない楽屋裏を覗いた気がして、わりと萎えてしまうものだ。またこちらの方が重要なのだが、既存リストからの選択方式は、あまりにも自己完結的(静的)な手法であるために、他の世界内要素を支配する様々な法則と、名前を支配する法則との相互干渉を起こしづらいという問題がある。例えば人の社会的地位が上がるにつれて名前の傾向が徐々に変わる、というようなデザインを実現しようとしたとき、そのやり方に悩むことになるだろう。他にも、命名法則に影響するようなゲーム仕様が加わるたびに、名前候補リストにも情報を足すとか名前候補リスト自体を増補するとかしなければならないだろう。(そもそもそんなゲーム仕様は無用、という意見については、最後でちょっと触れる。)

固有名をランダムに生成する

そこで固有名をランダム生成しよう、ということになるわけだが、上のBeolineliedの文からもわかるようにこれはかなりリスキーな道である。舐めてかかると馬鹿げた名前を生成して、それこそ決定的にプレイヤーの興をそぐことになってしまう。

そこで推奨されるのが、まずその固有名が属する言語における妥当な音韻法則を定め、それにしたがって固有名の語幹部分をランダム生成し、そして語幹に(もし名詞曲折のある言語なら)語尾をくっつけ、最後に文化固有のアレンジメントを加える、という方法だ。このそれぞれの段階において、命名対象の性質に応じた調整をおこなう余地がある。

音韻

妥当な音韻法則は、ラテン語やアヴェスター語やヘブライ語のような地球上の言語から取るのでもよいし、クエンヤやシンダリンやアドゥナイクみたいな有名な架空言語から取るのでもよいし、自分のセンスに自身があれば自作するのもよいだろう。
経験上、固有名の生成に必要となる要素はだいたい以下のような感じだ:

  • すべての母音群のリスト(ラテン語だと8、ただし手抜きして母音の長短の概念は無視した結果)
  • 語頭(あるいは音節頭)に立ち得る母音群のリスト(ラテン語だと7、ただし手抜きして母音の長短の概念は無視した結果)
  • 個々の母音群の重さ(ラテン語については、単母音と二重母音の2段階にしてみた)
  • すべての子音群のリスト(ラテン語だと102)
  • 語頭(あるいは音節頭)に立ち得る子音群のリスト(ラテン語だと44)
  • 個々の子音群の重さ(ラテン語については4段階にしてみた)

ここに登場する「重さ」というのは何かというと、「耳に感じられるウザさ」を表すと考えていただければよい。例えばcas-trumもce-naも同じ二音節だが、「str」という子音群は最大級に「重い」ので「重さポイント」を大きく消費することになる。例えば四音節語幹を生成するときなどに、いちど最重量級の子音群が現れたら同じ語の中ではもう最軽量級の子音しか使えない、というようなコントロールに使うわけだ。Rebeccaという名前は良好だが、Rebbeccaは耐え難いし、Rembrectraはもっと嫌だ。(Rembrectraだって、別に子音の連続性に関するラテン語の音韻規則を破っているわけではないのだが。)

ある言語の音韻についてだいたい上記のような基礎データがあれば、

  1. 音節数
  2. 母音の重さ許容指数
  3. 子音の重さ許容指数

を入力とし、

  1. 文字列

を返すgeneratorを実装することができる。(この実装は場合分けなどを多用した力技になりがちである。具体的には、個々の音節について、子音で始まるか否か、子音で終わるか否かを決め、重さ許容指数の範囲内で、その音節の中のそれぞれの箇所を埋める母音群と子音群とを選択し、その音節の始まりと直前の音節の終わりとの連続性が、禁則に引っかかっていないかを調べる。)

文法

このgeneratorが生成してくれた文字列を語幹として、次に(名詞曲折をする言語ならば)語尾をつける。これは音韻の問題ではなく文法の問題だ。対象とする固有名を含む言語には、印欧語の文法性(gender)にあたるような名詞クラスがあるのか、あるとしたらそれぞれの語形の特徴は何なのか、みたいなことを決めればよい。語尾じゃなく語頭が曲折するような言語を作りたいなら、それもご自由に。
この段階に影響するのは、生成しようとしている固有名が人の名前なのか土地の名前なのか物の名前なのか、そしてそれはどの名詞クラス(印欧語で言えば「男性名詞」とか)に属するのか、といった情報である。

文化に由来する名称構造

最後に、文化に依存する名前のアレンジを決める。物の名前ならば、「ロングソード『XXX』」とか「賢者XXXの杖」みたいな穴埋めになることが多いだろうが、土地や人の場合はもっと複雑な構造を実現しないと雰囲気が出ないかもしれない。たとえばミドルアースの自由の民の人名について言えば、Frodo Bagginsみたいな「名前−苗字」方式、Thorin Oakenshieldみたいな「本名-添名」方式、Aragorn, son of Arathornみたいな「父称」方式が、それぞれの文化や時代や人物の名声に応じて使い分けられているわけだ。こういう名前の構造をコントロールする処理を入れるのは、もちろん良い考えだと思う。

たかが名前生成にそんなに凝って何の役に立つの?

名前生成にいくら凝ってもしょせん単なるflavorに過ぎない、他の要素に影響を与えないゲーム要素は存在しないも同然、と言われたら、、、

  • 例えば、伝説の「XXXの宝珠」を探す必要があるが、いったいどこにあるのやら、といったシチュエーションで、少なくともそれがどの国の歴史に関係ありそうなアイテムなのかぐらいは想像できる。結果、北へ行くのか東へ向かうのかを決める手がかりぐらいにはなるかも。
  • 名前を生成するための法則が、世界内の他の要素を律している法則とちゃんと密接に関連しているならば、さしあたっては凝った名前生成が単なるflavorに過ぎないとしても、いずれはきっと、ゲームプレイの上でも他の要素と面白い形で相互作用させる方法が見つかるはず。世界というのはそういうふうにできている。

というような感じで答えたい。

教訓

今回の記事で私がいちばん主張したいのは、ランダム生成の質を大きく作用するのは、実はランダム生成の対象領域についての考察と、それに基づいた調整だ、ということである。固有名をランダムに生成しようとするならば、音韻と文法と命名文化とに情熱を持って取り組まなければならないし、それらの観点から好ましい結果が得られるように、ランダム生成の過程を細かく制御しなければならない。

ダンジョンマップをランダムに生成しようとするならば、要塞や宝物庫の構造とその守備や攻略について様々なことを考えて調整しなければならないし、世界をランダムに生成しようとするならば……潜在的にはすべてをコントロールできなければならないのだろう。

こうやって手間ひまをかければ、ランダム生成という手法は、作者自身も驚くような興味深い結果を生成してくれるものだ。