# Nintendo Confidential

## 19. JointList

### (1) JointList

> u32 joint_list_tag | JointListを示すタグを記述します。下記のタグを指定してください。
>     TAG_JOINT_LIST          0x00250000
> u32 joint_list_header_size | JointListHeaderのバイト数を記述します。
> u32 joint_list_size | JointListのバイト数を記述します。
> u32 joint_num | Joint数を記述します。
> u32 joint_num_byte | それぞれのJointのバイト数を記述します。
> Joint | Jointエリアです。

> Appendix ... about IK System

> Go to the data chunk

> Go back to the index

### (2) Joint

> u32 joint_tag | Jointを示すタグを記述します。下記のタグを指定してください。
>     TAG_JOINT               0x00250100
> u32 this_joint_index | このJointのインデックス番号を記述します。
> u32 joint_size | Jointのバイト数を記述します。
> u32 joint_name_index | Joint名をNameList内のインデックス番号で記述します。
> u32 joint_type | Jointのタイプを記述します。 NIFF2.0ではIK-Chainは2joint-chainのみを扱います。下記のフラグが定義されています。
>     NIFF2_1ST_JOINT             0x00000000
>     NIFF2_2ND_JOINT             0x00000001
>     NIFF2_JOINT_UP              0x00000000
>     NIFF2_JOINT_DOWN            0x00010000
> NIFF2_1ST_JOINTは第1Jointの場合に設定します。 NIFF2_2ND_JOINTは第2Jointの場合に設定します。 NIFF2_JOINT_UPはEffectorの移動に応じて正方向にIK-Chainが動作します。正方向とは、第1JointのY軸の正の方向にEffectorを移動した時にIK-Chainが曲がることを意味します。 NIFF2_JOINT_DOWNはEffectorの移動に応じて逆方向にIK-Chainが動作します。逆方向とは、第1JointのY軸の負の方向にEffectorを移動したときにIK-Chainが曲がることを意味します。

> NIFF2_1ST_JOINT, NIFF2_2ND_JOINTとNIFF2_JOINT_UP, NIFF2_JOINT_DOWNはそれぞれbitORして記述します。

> float joint_length | Jointの長さを記述します。
> float resplane_axis_x float resplane_axis_y float respalne_axis_z | 本来のZ軸の向きからのずれを示すベクトルです。IKのレゾリューションプレーンの法線ベクトルを示します。通常はZ軸の向き(x, y, z)=(0, 0, 1)に設定してください。
> u32 obj_num | JointからリンクするObj数を記述します。
> u32 external_obj_num | 外部ファイル参照するJointからリンクするObj数を記述します。
> u32 joint_index | このJointがリンクするJointのインデックス番号を記述します。このJointがEffectorにリンクする場合、下記のフラグを記述してください。
>     NIFF2_NO_LINK_TO_JOINT		0xffffffff
> u32 effector_index | このJointがリンクするEffectorのインデックス番号を記述します。このJointがJointにリンクする場合、下記のフラグを記述してください。
>     NIFF2_NO_LINK_TO_EFFECTOR	0xffffffff
> u32 anim_index | このJointがリンクするAnimGroupのインデックス番号を記述します。 第１Jointの場合、PreferredAxisConstraintまたはUpVectorConstraintチャンネルを使用することでレゾリューション・プレーンを決定することができます。 これらのconstraintがされていない場合は、ChainRootのZ軸に沿ってレゾリューションプレーンが決定されます。 Jointの回転はX軸周りの回転がもっとも優先されます。実際のレゾリューションプレーンはX軸の回転に矛盾しない形にZ軸を向けた時に決定します。

> PreferredAxisConstraintをリンクした場合はJointのZ軸をそのconstraintされたオブジェクトに向くように調整されます。勿論、最優先回転軸はX軸です。

> UpVectorConstraintをリンクした場合は、第２Jointの原点と、Effector、Constraintされているオブジェクトの原点がレゾリューションプレーン上になるように計算されます。

> 第２Jointにはアニメーションがリンクされていても無視されます。

> また、何もアニメーションをリンクしない場合はanim_index = 0xffffffffを記述してください。

> u32 obj_index | JointからリンクするObjのインデックス番号を記述します。 obj_num = 0の場合、このフィールドは記述されません。
> u32 external_obj_file_name_index | JointからリンクするObjを外部ファイル参照する場合、そのファイル名をExternalNameListのインデックス番号で記述します。 ファイル名はディレクトリ名などを含まない形で記述してください。 external_obj_num = 0の場合、このフィールドは記述されません。
> u32 external_obj_name_index | JointからリンクするObjを外部ファイル参照する場合、そのObj名をExternalNameList内のインデックス番号で記述します。 external_obj_num = 0の場合、このフィールドは記述されません。

> Appendix ... about IK System

> Go to the data chunk

> Go back to the index

Copyright 1998,1999 NINTENDO Co.,Ltd. All rights reserved.
Copyright 1998,1999 MONEGI CORPORATION All rights reserved.