第3章 バイナリフォーマット


3-21. SwitchList


(2)Switchエリア

 Switchエリアは実際のSwitchノードにあたる部分です。Switchノードは他のノードとは多少異なる性質を持っています。通常、例えばノードA→ノードBというリンクを張る場合に、ある条件化ではノードA→ノードCというリンクに変更したいという場合があります。その場合に、デフォルト値としてノードBをリンクしておき、ノードCに切り替わるためのu32型の定数を決めておくことができます。マッピングは以下のようになっています。

  尚、各ノードからSwitchノードにリンクする際に指定する方法は、SwitchListエリア中の指定したいSwitchエリアのインデックスがNの場合、0x80000000 | Nとして指定します。このようにすることによってNIFFのコンバータ側で記述されているフィールドの最上位ビットが1の場合に、本来インデックス番号を検索するべきノードのリストではなく、SwitchList中のインデックス番号であると判断します。従って、各リスト中は0x80000000以上のインデックスは存在しないことになります。(もちろん、それほどのインデックスを持つファイルは現実的ではありません。)

u32 switch_tag
u32 this_switch_index
u32 switch_size
u32 link_list_type
u32 default_link_index
u32 case_node_num
u32 switch_condition
u32 nintendo_extension_block_size
u32 user_extension_block_size
u32 case_val(0)
・・・
u32 case_val(case_node_num - 1)
case_dest_index(0)
・・・
cese_dest_index(case_node_num - 1)
NintedoExtensionBlock
UserExtensionBlock

図 Switchエリアメモリマップ

u32 switch_tag Tag indicating Switch
TAG_SWITCH      0x00130100

u32 this_switch_index Index number of Switch corresponding to SwitchList
u32 switch_size Size of this Switch
u32 link_list_type Index of node linking to this Switch node
u32 default_link_index デフォルトでリンクするノードのインデックスを記述します。
u32 case_node_num Number of nodes which branch off
u32 switch_condition Condition of branching off
u32 nintendo_extension_block_size 任天堂拡張ブロックサイズ
u32 user_extension_block_size ユーザー拡張ブロックサイズ
u32 case_val Constant formula of condition
u32 case_dest_index Index number of destination when fulfill the case
NintendoExtensionBlock 任天堂拡張ブロック
UserExtensionBlock ユーザー拡張ブロック


Copyright 1997 NINTENDO Co.,Ltd. All rights reserved.

目次へ次へ