Top攻略・調査 > 財宝決定の規則

財宝決定の規則(暫定版)

発掘した財宝のデータ&乱数表&war of side様の記述と死ぬ気でにらめっこした結果です。
この内容を出すにあたって多くの方の発掘データを使わせて頂き、多くの方に閃き(電球)のきっかけを頂いています。
特にトカマクさん、みどりさん、nobodyさん、シングルソードさん、kryさん、その他MAD様にて情報提供されている方々には本当に感謝いたします。
自信のないところ、わからないところも多々ありますが、現状でわかってきたことを書きます。
自信がありそうに書いている内容は、これまでに取ったデータを説明できているというのが根拠です。 ひょっとしたら多少の修正が必要になるかもしれませんが、ほとんど合っているでしょう。

乱数を使用する処理の順番

以下のような処理の順番で合っていると思います。各処理の間では乱数の消費はありません。
サブアイテムの個数決定
金額決定
財宝メインアイテム決定
サブアイテムの中身決定
発掘ポイントの決定

それぞれの処理の中身

サブアイテムの個数決定

処理の流れは以下のようになります。
サブアイテム1つ目が出るかどうか判定(乱数1個消費)
 ・出ないならば金額決定へ(サブ個数=0)
 ・出るならば、サブアイテム2つ目が出るかどうか判定(乱数1個消費)
   ・出ないならば金額決定へ(サブ個数=1)
   ・出るならば、サブアイテム3つ目が出るかどうか判定(乱数1個消費)
     ・出ないならば金額決定へ(サブ個数=2)
     ・出る場合も、金額決定へ(サブ個数=3)


それぞれのサブアイテムが出るかどうかの判定の中身は以下のようになります。
乱数をNで割った余りが発掘スキルレベル(=Sとします)より小さければ「出る」、そうでなければ「出ない」
Nの値は1つ目、2つ目、3つ目の順に10、20、100です。
「出る」と判定される確率を求めてみると、
1つ目の場合、S/10、つまりS×10%
2つ目の場合、S/20、つまりS×5%
3つ目の場合、S/100、つまりS×1%
アルティの通りになりますね。

「クマーの日本語よりC言語が読みやすい!」という方は以下をどうぞ。
そうでない方は読み飛ばして「金額決定」へどうぞ。
int S=HakkutsuSkillLevel;
int Num_SubItem=0;//サブアイテムの個数を保存する変数

if(rand()%10<S){
  if(rand()%20<S){
    if(rand()%100<S){
      Num_SubItem=3;
    }
    else{
      Num_SubItem=2;
    }
  }
  else{
    Num_SubItem=1;
  }
}
それともこちらの方が読みやすいですきゃね?
int S=HakkutsuSkillLevel;
int Num_SubItem=0;//サブアイテムの個数を保存する変数

if(rand()%10>=S){
   Num_SubItem=0;
}
else if(rand()%20>=S){
   Num_SubItem=1;
}
else if(rand()%100>=S){
   Num_SubItem=2;

}
else{
   Num_SubItem=3;
}

金額決定

現時点でよくわかっていないのは主にここです。 わかっていないことも含めて書きます。

とりあえず、
・乱数が9個〜10個消費してなんとかして金額を決めてる(笑)

あとは読み飛ばし可です。
・消費される乱数の個数は地図のテーブルと処理を開始する乱数IDが決まれば固定だと思われます。
・消費される乱数は地図のテーブルが低い場合はほとんど9個。
・同じくT8の場合はほとんど10個。(T8で9個の場合を確認したことがあります)
・その9個〜10個を金額だけに使っているかどうかは分かりません。
 金額に使っているのはその中の一部という可能性もあります。

財宝メインアイテム決定

本サイト特有の表記になりますが、それぞれの財宝メインアイテムにはレベル(Lv)と族があります。
以下のようなテーブルを考えて、たとえば1族のLv3が青の剣、というわけです。
0,2,4族をまとめて「偶数族」、1,3,5族をまとめて「奇数族」ということにします。
  Lv0 Lv1 Lv2 Lv3 Lv4
0族 雪花石の指輪 雪花石の指輪 雪花石の指輪 竜鱗の剣 雪花石の指輪
1族 炎のロッド フランベルジュ ファランギー 青の剣 紅孔雀
2族 ポケットドラゴン ブリムスラーブス アンバージャック レディホーク 竜槍ケレンドロウズ
3族 アンバーマリーチ 魔石の仮面 流星刀 ヴォーパルアクス 竜槍マリストリク
4族 ラストリーフ 光砂のローブ 藤娘 竜鱗の盾 水鏡の盾
5族 精霊銀の腕輪 魔骨の腕飾り タイタスグリープ 竜鱗の鎧 黒の石鎧
ここでの処理はレベルと族を別個に決めています。

具体的な処理の流れは以下のようになります。
A=乱数を"ゲームランク+1"で割った余り。(値は0〜ゲームランク)
B=乱数を"テーブルランク+1"で割った余り。(値は0〜テーブルランク)
X=(A+B)÷4(余り切り捨て)
レベル=乱数を"X+1"で割った余り
族=乱数を6で割った余り

消費される乱数は必ず4個ピッタリです。ここでは乱数の合流などは起こりませんね。
尚、本サイトで財宝のIDと言っているのはその財宝の族を決めるのに使われる乱数(赤字で書いたもの)のIDのことです。
上の処理を見て「あれ、じゃあ、なんでLv3の青の剣は当たり地図じゃないととれないの?」 と思われた方、素晴らしい着眼点ですが、それは罠です(笑)。
これについては雑記で述べます。

C言語っぽく書くとこんな感じになります。
int GR=GameRank;
int TR=TableRank;
int X;
int Lv;
int Zoku;
Zaihou MainItem; //"Zaihou"は構造体かクラスと思ってください

X=rand()%(GR+1);
X+=rand()%(TR+1);
X/=4;
Lv=rand()%(X+1);
Zoku=rand()%6;
MainItem=ZaihouTable[Zoku][Lv]; //配列ZaihouTableがどこかで定義されてるとしてます

サブアイテムの中身決定

具体的な処理の流れは以下のようになります。

・乱数1個消費(謎。多分使っていないです)
・乱数を10で割った余りに対応するサブアイテムに決定
・ここまでの処理をサブアイテムの個数分繰り返す


尚、余りに対応するサブアイテムは以下のようになります。
余り 0123456789
サブアイテム GSSPPPWWTT
G=ゴールドリング、S=シルバーリング、P=パールリング、W=ワンダーバングル、T=高い靴

サブアイテムの個数×2の乱数が消費されますね。
同じ財宝でもサブアイテムの個数によって発掘ポイント、敵の配置・所持交渉アイテムが違ったりするのはこのためです。

例によって適当C言語です。
int S;
SubItem SubNakami;  //"SubItem"は構造体かクラスと思ってください
for(int i=0;i<Num_SubItem;i++){  //Num_SubItem はサブアイテムの個数
  S=rand();  //何に使う気だったのか。
  SubNakami=SubItemTable[rand()%10];  //配列は他で定義されているとします。
}

発掘ポイントの決定

シングルソードさんとメールの議論がきっかけで調べたらわかりました。感謝です。
まだ財宝の穴2F(発掘ポイント3箇所)でしか試していないので、微妙ですが、
具体的な処理の流れ・・・というか処理は以下のようになります。

乱数をフロア内の発掘ポイントの数で割った余りに対応する発掘ポイントになる

余りのどの値にどのポイントが対応するかは地図毎に調べる必要があるでしょう。
財宝の穴2Fでは1F側の入り口から近い順に余り0,1,2に対応していました。

以下は少々込み入った話題なので読み飛ばしてくださって結構ですが、
コモドドラゴンさんのサイト"RomaSaga_MS データ置き場"のコンテンツにある 発掘ポイントが偶数の場合(以下略)というのは
・サブアイテムの中身決定に使われる乱数の個数が偶数
・財宝に使われている乱数が偶奇偶奇・・と繰り返す
ということの結果です。
つまり、発掘ポイントの決定に使われる乱数が、 メインアイテムが偶数族の場合は奇数、奇数族の場合は偶数であるため、 それらを発掘ポイントの数(偶数)で割った余りが必ず奇数、偶数となる。
つまり、偶数族しか出土しないポイントと奇数族しか出土しないポイントに分かれる、ということです。

ここについてはC言語で書くまでもないでしょう。

Top攻略・調査 > 財宝決定の規則

inserted by FC2 system