ダンジョンデータ完全分析

※このページは上級者向けであることを予め断っておきます。
このページの内容を理解するには、16進数、バイナリデータ及び風来のシレンのシステムに関する知識を必要とします。
それらに関する初歩的な質問はご遠慮下さい。

ダンジョンデータの構造は、暗号化こそされてはいませんが、少々複雑な構造になっています。
ダンジョンデータの構造は以下の通りです。(括弧内の数値はデータサイズ)

ヘッダー(4)
ダンジョン名(16)
設定1(8)
怪物分布図(4+3x)
道具出現率データ(4+5x)
道具種類出現率データ(4+5x)
固定地形設定(4+4x)
特殊地形設定(4+10x)
モンスターハウス出現率データ(4+9x)
設定2(8)
ダンジョンの説明(4+x)

勿論、これだけでは分からないと思うので、順番に解説していきます。

・ヘッダー(4)
このファイルが、ダンジョンデータであることを宣言します。必ず「87 65 43 21」と入力します。

・ダンジョン名(16)
ダンジョン名を入力します。ダンジョン名の後は、このデータの長さが16バイトになるまで00hを入れます。

・設定1(8)
ダンジョンの各種設定を行います。ここでは便宜上、最初の桁から順にA B C D E F G Hとします。
A必ず00、00以外にするとプレイ不可(恐らくダンジョン名が16バイトの時のEndcode)
Bbit0がオンならタイムを競う(オフならスコアを競う)、bit1:何でしょ?
C00:ランダム地形、01:日替わり固定地形、02:週替わり固定地形、03:月替わり固定地形
D00なら道具の持ち込み不可、00以外なら道具の持ち込み可(5個まで)
E中層境界設定(ここで指定された階層以降(指定された階層も含む)の階層は中層になる)
F深層境界設定(ここで指定された階層以降(指定された階層も含む)の階層は深層になる)
G最深階層を設定します
Hbit0:エンドレス、bit1:スコア計算式が変わる(通常より低くなる)
固定地形にした場合は後で乱数の種を入力する必要があります。
中層、深層は店で売られる商品に影響します。

・怪物分布図(4+3x)
怪物分布図の構造は以下の通りです。(括弧内の数値はデータサイズ)
怪物分布図の長さ(4)1階のデータ(3x)00 00 002階のデータ(3x)00 00 003階のデータ(3x)00 00 00・・・
まず、怪物分布図の長さを4バイトで入力しますが、ここでは実際の怪物分布図のバイト数を3で割った値を入力しなければなりません。
怪物データは3バイト1組で、優先度、レベル、種族の順番になっています。これを、1フロアに出現する怪物分続けて入力していきます。
最終的な怪物出現率は、「優先度/その階層の怪物の優先度の合計」となります。
例:
02 01 02 01 02 02 01 01 1Dマムル(優先度02)、あなぐらマムル(優先度01)、ネズミ子分(優先度01)
この場合マムルの出現率は2/(2+1+1)=50%となります。
各階層の区切りには00 00 00を入力しますが、怪物分布図の終わりにも入力することを忘れないで下さい。
怪物分布図は、例えば全50階なのに、怪物分布図を30階分までしか入力しないと、31階以降は全て30階以降の設定が適用されます。
またエンドレスの場合、最終階層の設定が適用されます。

・道具出現率(4+5x)、道具種類出現率(4+5x)
最大の難関です。よく読んで下さい。
道具出現率データと道具種類出現率データの構造は以下の通りです。
ここでこのように2つのデータを一緒にするのは、この2つのデータが密接に絡み合っているからです。
道具出現率データの長さ(4)道具出現率データ(5x)道具種類出現率データの長さ(4)道具種類出現率データ(5x)
まず、道具出現率データの長さを4バイトで入力しますが、ここでは実際の道具出現率データのバイト数を5で割った値を入力しなければなりません。
道具出現率データは5バイト一組で、優先度(拾う)、優先度(通常店)、優先度(中層店)、優先度(深層店)、道具コードの順番になっています。
これは、道具コードの低い順番に入力する必要はありません。省略されたコードの道具は、全て00と同じ扱いになり、出現しません。
ここで、道具の出現率は「その道具の優先度/全道具の優先度の合計」としたい所ですが、ここは一筋縄では行きません。
実は、道具の上に、道具種類という設定があるのです。
道具の出現率は、まず道具種類別に出現率を算出し、その種類別の道具の中で更に出現率を算出するのです。
道具種類出現率データは、道具出現率データの後に入力します。
道具種類出現率データの長さも、実際の道具種類出現率データのバイト数を5で割った値を入力しなければなりません。
道具種類出現率データも5バイト一組で、優先度(拾う)、優先度(通常店)、優先度(中層店)、優先度(深層店)、道具種類コードの順番になっています。
道具種類コードは以下の通りです。こちらも、道具種類コードの低い順番に入力する必要はありません。
01:武器 02:盾 03:腕輪 04:矢 05:おにぎり 06:卵 07:草 08:巻物 09:杖 0A:壺 0B:ギタン
道具の出現率は、
「その道具の優先度/その道具と同じ種類の道具の優先度の合計*その道具種類の優先度/道具種類出現率の優先度の合計」となります。
難しいですが、こればかりは覚えるしかありません。このようなシステムになっているのは、恐らく専門店の為だと思います。
例:
道具出現率:04 00 00 00 01 02 00 00 00 02
道具種類出現率:02 00 00 00 07 01 00 00 00 08
薬草(優先度4,0,0,0)、弟切草(優先度1,0,0,0)
草(優先度2,0,0,0)、巻物(1,0,0,0)
この場合、薬草は4/(4+1)*2/(2+1)=4/5*2/3=8/15、弟切草の出現率は1/(4+1)*2/(2+1)=1/5*2/3=2/15の確率で落ちているということになります。
店の商品は、設定1-Eの階層以降だと中層店、設定1-Fの階層以降だと深層店の値が適用されます。
ギタンは店で売られているとその数値に関わらず0ギタンとなってしまうので、必ず01 00 00 00として下さい。
道具は出現するのにその種類は出現しない、例えばかなしばりの杖は出るのに杖は出ないようにすると、かなしばりの杖は出現しません。
その逆の場合、例えば杖は出るのに出現する杖が無いと、道具種類で杖が選択された時、NULLが出現します。
罠は独立で、罠の出現率は、「その罠の優先度/全ての罠の優先度の合計」となります。
出現する罠が無いと、本来ならば罠があるべき場所にNULLが出ます。
また、残念なことですが魅惑の種、物忘れの草、見破りの杖を除く全ての没道具、没罠はその値に関係無く絶対に出現しません。

・固定地形設定(4+4x)
固定地形の設定を階層毎に設定します。
まず、固定地形設定の長さを4バイトで入力しますが、ここでは実際の固定地形設定のバイト数を4で割った値を入力しなければなりません。
その後、1階から順に乱数の種を入力していきます。4バイトで1階分です。
通常は完全にランダムな数値からダンジョンが生成される訳ですが、
固定地形の場合はここで設定された乱数の種と日/週/月からダンジョンが生成される訳です。
面白い例として、乱数の種を全て同じ数値にしておくと、全ての階層が同じ地形になることになります。
設定1-Cを00以外にしないとこの数値は有効にはなりません。
固定地形設定は、例えば全10階なのに、固定地形設定を5階分までしか入力しないと、6階以降は全て00と同じ扱いになります。
よって、ランダム地形のダンジョンの場合は、01 00 00 00 00 00 00 00と入力しておいて下さい。

・特殊地形設定(4+10x)
特殊地形の出現率を階層毎に設定します。
まず、特殊地形設定の長さを4バイトで入力しますが、ここでは実際の特殊地形設定のバイト数を10で割った値を入力しなければなりません。
その後、1階から順にデータを入力していきます。10バイトで1階分です。
各バイトは、順に、普通、大部屋、2分割、4分割、格子、外周、一本道、2分裂、飛び地、大迷路の優先度となっています。
値が全て00だと、通常通りの確率となりますが、一つでも01以上の値があると、それぞれの地形の出現率は、
「その地形の優先度/その階層の設定の優先度の合計」となります。
例:00 01 00 00 00 00 00 00 00 00(大部屋しか出現しない)
これを利用して、特定の階層には必ず大部屋モンスターハウスが出る、必ず大迷路になるといった設定が出来ます。
外周、一本道にしても、出入口が1つしかない部屋が存在しない場合、店は出ませんのでご注意下さい。
(格子はその地形の構造上、出入口が1つしかない部屋が必ず存在するため必ず店が存在します)
特殊地形設定は、例えば全10階なのに、特殊地形設定を5階分までしか入力しないと、6階以降は全て00と同じ扱いになります。
よって、特殊地形の出現率を変更しない場合は、01 00 00 00 00 00 00 00 00 00 00 00 00 00と入力しておいて下さい。

・モンスターハウス出現率データ(4+9x)
モンスターハウスの出現率を階層毎に設定します。
まず、モンスターハウス出現率データの長さを4バイトで入力しますが、
ここでは実際のモンスターハウス出現率データのバイト数を9で割った値を入力しなければなりません。
その後、1階から順にデータを入力していきます。9バイトで1階分です。
各バイトは、順に、モンスターハウス無し、ノーマル、泥棒、ドレイン、一つ目、ゴースト、パワー、ドラゴン、番犬隊の優先度となっています。
値が全て00だと、通常通りの確率となりますが、一つでも01以上の値があると、それぞれの地形の出現率は、
「そのモンスターハウスの優先度/その階層の設定の優先度の合計」となります。
例:00 00 01 01 01 01 01 01 00(必ず特殊モンスターハウスが出る)
特殊地形設定を併用すれば、特定の階層には必ず大部屋番犬隊が出現する、といった設定が出来ます。
モンスターハウス出現率は、一つでも01以上の値があると、その階層の地形に関係なくここで設定された通りの出現率となるので、
ここでモンスターハウスが出現しないようにすると、大部屋、2分割、4分割でもモンスターハウスが出現しなくなります。
但し、大迷路の場合、ここで必ずモンスターハウスが出現するようにしてもモンスターハウスは出現しません。
モンスターハウス出現率データは、例えば全10階なのに、
モンスターハウス出現率データを5階分までしか入力しないと、6階以降は全て00と同じ扱いになります。
よって、モンスターハウス出現率を変更しない場合は、01 00 00 00 00 00 00 00 00 00 00 00 00と入力しておいて下さい。

・設定2(8)
こちらの設定はインターネット版になるまでは使用されていなかった領域です。
ダンジョンの各種設定を行います。ここでは便宜上、最初の桁から順にA B C D E F G Hとします。
A何を競うか、設定1-Bのbit0をオフにすると有効、00:スコア、01:経験値の少なさ、02:ターンの少なさ、03:潜った階数、04:泥棒回数
B多分意味無し
C多分意味無し
D多分意味無し
Eオプション
bit0:道具を最大10個しか持てない、bit1:早く突風が吹く、bit2:各階層毎に必ず店が出現、bit3:自然回復しない
bit4:マップを見られない、bit5:部屋でも視界が通路と同じ、bit6:初期レベル70で初期HP5、bit7多分意味無し
F多分意味無し
G多分意味無し
H多分意味無し
オプションは全てチュンソフトの新ダンジョンに使用されていますね。

・ダンジョンの説明(4+x)
そのまんまです。最初の4バイトはダンジョンの説明の長さをそのままバイト数で入力し、その後にダンジョンの説明を入力して終わります。
ダンジョンの説明の改行コードは0Ahにして下さい。

ダンジョンデータの構造は以上の通りです。
最初は難しいと思いますが徐々に慣れていって下さい。チュンソフトのダンジョンをバイナリエディタで眺めていくのも良いでしょう。
オリジナルダンジョンをテストプレイする時は、風来日記のバックアップを取っておくことをお勧めします。
ダンジョンデータを間違えると、ハングアップしたり、風来日記が開けなくなることもあります。
最後に、オリジナルダンジョンをプレイする時は、必ずネット機能を無効にしてからプレイして下さい。

チュンソフトの新ダンジョンは当初は公開される予定があったようですが、公開されることはなく、遂にコンテンツから消えてしまいました。
それが今、私達が自由に新ダンジョンを作成出来るのです。
私はWinシレンは全不思議のダンジョンシリーズ中SFCシレンを通り越して最高の出来だと思います。
ダンジョンデータの構造は少々複雑で、怪物分布図や道具出現率の入力は大変ですが、
貴方も是非一度オリジナルダンジョンを作ってみては如何でしょうか。

戻る