難解度「AA」
※このページ全体の難解度です。

ダブル系

リスト形式で扱われる項目の一種ですが、表示用のリストと、処理用のリストの二種類を使うことから、ダブル系と呼ばれます。二つのリストは行単位で関連しており、表示用のリストで2行目を選択した場合、処理用リストの2行目が処理されるという特徴をもっています。

ダブルリスト項目

リスト項目の場合、書き込む値は「初項＋行数＊公差」で固定のため、書き換えを行わない行を作ったり、書き込む値をバラバラに配置することができません。それに対しダブルリスト項目(d_list)は、書き込む値を処理用のリストに記述するため、それら複雑な処理も可能になります。書式は
[subject]項目名: d_list, アドレス, リストファイル1, 最小値, 最大値, リストファイル2, オフセットか

です。表記上２行で書いてますが、実際は１行で書いて下さいね。

アドレス | 読み書きする対象のアドレスです。詳しいアドレスの書き方は、《A-アドレス》を参照。
リストファイル1 | 選択できる一覧として表示するリストファイルを指定します。ファイル指定の詳細は、《C-ファイル指定》を参照。
最小値 | 読み書きする値が取りうる最小値を記述します｡
最大値 | 読み書きする値が取りうる最大値を記述します｡
リストファイル2 | リストファイル1で特定行を選択したとき、処理する内容を記述したリストファイルを指定します。ファイル指定の詳細は、《C-ファイル指定》を参照。
オフセットか | リストファイル2に記述したアドレスに、この項目のアドレスを加算するかを指定します。 offset を指定すると、読み書きするアドレスは、「リストファイル2に書いたアドレス＋項目のアドレス」になります。 real を指定すると、リストファイル2に書いたアドレスがそのまま読み書きするアドレスとなります。ただし、後述する「書き込む値」の場合のアドレスは、「項目のアドレス」ですので、オプションに real を指定したからといって、必ずしも項目のアドレスが不要というわけではありません。省略すると、 offset が選択されます。ファイル中のアドレスとオフセット値の扱いについては、《2.3-bundle-一括電卓項目》を参照。

項目名は、"/"区切りで表示先を分けることができます。詳細はリスト項目に準じます。
リストファイル2には、

書き込む値 (空行) ,アドレス=バイト列 ,アドレス=バイト列,アドレス=バイト列 ,開始アドレス=終了アドレス-バイト列 @チェインファイル名

のように、幾つかの方法で処理を指定できます。（バイト列の詳細は、《B-バイト列》を参照。）

書き込む値 | 400や0xFFなど、そのまま数値を指定します。
(空行) | 何も書かれていない行ならば、処理を行いません。
,アドレス=バイト列 | 行頭に','があると、以降を','区切りで複数指定可能なバイト列として処理します。「アドレス」に指定したアドレスから、「バイト列」を処理します。
,アドレス=バイト列,アドレス=バイト列 | 複数指定する場合の例です。
,開始アドレス=終了アドレス-バイト列 | 繰り返し処理も可能です。
@チェインファイル名 | 「アドレス, バイト列」という書式で羅列した、チェインファイルの指定も可能です。

まとめとして、いくつかのパターンでダブルリスト項目を書いておきますね。

[subject]装備中の武器:d_list,0x400000,リスト1,0,999,リスト2,offset [subject]装備中の防具:d_list,0x500000,リスト3,0,999,リスト4,real リスト1.LST ひのきの棒 日本刀 銀の斧 ブーメラン 和太鼓 リスト2.LST 0x1B 200 72 ,0x20=C03A ,0x40=0x60-FFFF リスト3.LST 人民服 薄手のローブ 皮の鎧 シルバークロス 紋付き リスト4.LST 0x1B 200 72 ,0x500020=C03A ,0x500040=0x500060-FFFF @処理リスト2

ダブルリスト項目での現在値(選択行)は、一致する「書き込む値」がある行か、全てのバイト列が一致する行になります。

ダブルトグル項目

アイテムの所持/非所持を書き換えるときに使う項目といえば、トグル項目があがります。一片にアイテム全部の所持/非所持を書き換えるなら、一括トグル項目を使うでしょう。では、アイテムごとに所持/非所持を分けたい場合で、アイテム全てを操作できるようにするにはどうしたらいいでしょう？ 単純な方法は、トグル項目を必要分書くことです。そしてもう一つの方法としてあげられるのが、このダブルトグル項目です。ダブルトグル項目で表示するリストは、他の一般的なリストのように「どれか一つを選ぶ」という形ではなく、各行ごとに「選択している/していない」を切り替える形式です。…察しが付いたでしょうか？リスト形式で各行ごとに「選択している(ON)/していない(OFF)」を指定する、いわばトグル項目の配列を作れるというわけです。 書式は
[subject]項目名: d_toggle, アドレス, リストファイル1, リストファイル2, オフセットか

です。表記上２行で書いてますが、実際は１行で書いて下さいね。

アドレス | 読み書きする対象のアドレスです。詳しいアドレスの書き方は、《A-アドレス》を参照。
リストファイル1 | 選択できる一覧として表示するリストファイルを指定します。ファイル指定の詳細は、《C-ファイル指定》を参照。
リストファイル2 | リストファイル1で特定行を選択したとき、処理する内容を記述したリストファイルを指定します。ファイル指定の詳細は、《C-ファイル指定》を参照。
オフセットか | リストファイル2に記述したアドレスに、この項目のアドレスを加算するかを指定します。 offset を指定すると、読み書きするアドレスは、「リストファイル2に書いたアドレス＋項目のアドレス」になります。 real を指定すると、リストファイル2に書いたアドレスがそのまま読み書きするアドレスとなります。つまり、オプションに real を指定したとき、項目のアドレスは不要になります。ファイル中のアドレスとオフセット値の扱いについては、《2.3-bundle-一括電卓項目》を参照。

項目名は、"/"区切りで表示先を分けることができます。詳細はトグル項目に準じます。
リストファイル1中での空行(改行のみの行)は、「選択できない行」として扱われます。選択して欲しくない内容の行は初めから書かなければいいのですが、リスト中の空行は、画面上では空白行として表示されるので、仕切りとして使う方法もあります。
リストファイル2には、リストファイル1と行ごとに対応するよう、

アドレス=ONのバイト列/OFFのバイト列

という形で書いていきます。（バイト列の詳細は、《B-バイト列》を参照。）','区切りで、一行内に複数指定することも可能です。
また、ダブルリスト項目と同様に、行頭に'@'を付けてのチェインファイル指定も可能です。 その際、チェインファイルの書式は

アドレス, ONのバイト列, OFFのバイト列

のようになるので注意して下さい。
まとめとして、ダブルトグル項目の例を書いておきますね。

[subject]CGモード一覧:d_toggle,0x400000,表示リスト,処理リスト,offset 表示リスト.LST 城A攻略済み 城B攻略済み 城C攻略済み 城D攻略済み 城E攻略済み 処理リスト.LST 0x10=00/FF 0x12=00/FF 0x30=0x40-00/01 0x20=00/FF, 0x30=0x40-00/01 @処理リスト2

なおダブルトグル項目の場合、ONのバイト列と一致する行が選択されます。また、','による複数指定の場合は、全てのONのバイト列と一致したときに選択されます。（前述の通り、選択行は複数になることもあります。）
＊　捕捉　＊
ダブルトグル項目は、複数の「違ったアドレスを書き換える」トグル項目を一つにまとめて、「個別にON/OFF切り替えしたい」、といったときに使うことになるでしょう。同じアドレスを書き換えるのであれば、どれか一つを選択するダブルリスト項目などを使います。
ねくすと　せくしょん⇒
≪せくしょん　ばっく