/*---- SceneList ----*/
typedef struct _NisSceneList
{
u32 scene_header_tag;
/* Scene header tag */
u32 scene_header_size;
/* The number of bytes in SceneHeader area */
u32 scene_size;
/* The number of bytes in the whole Scene are */
u32 scene_cfg;
/* Setting to draw a whole scene */
u32 scene_name_index;
/* Index number in NameList that describes scene name */
u32 scene_obj_link_num;
/* The total number of linked Obj nodes */
u32 scene_env_link_num;
/* The total number of linked Env nodes */
u32 scene_cam_link_num;
/* The number of linked Cam nodes */
u32 scene_light_link_num;
/* Then number of linked Light nodes*/
u32 nin_ext_blk_size;
/* Nintendo Expansion data block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *scene_obj_link_index;
/* Obj link */
u32 *scene_env_link_index;
/* Env link */
u32 *scene_cam_link_index;
/* Cam link */
u32 *scene_light_link_index;/*
Light link */
u32 *n_ext;
/* Nintendo Expansion data block */
u32 *u_ext;
/* User Expansion data block */
NisSceneListExt *n2;
/* extending in NIFF2.0 */
} NisSceneList;
/*--------------------- EnvList ------------------------------------*/
typedef struct _NisEnvListHeader
{
u32 env_list_tag;
/* EnvList are tag */
u32 env_list_header_size;
/* The number of bytes of EnvListHeader are */
u32 env_list_size;
/* The number of bytes of EnvList area */
u32 env_num; /*
env_num is Env area number */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *env_num_byte; /*
env_num_byte is the number of bytes for each Env area */
} NisEnvListHeader;
/* Env area */
typedef struct _NisEnv
{
u32 env_tag; /* Env area tag
*/
u32 this_env_index; /*
Index number of this Env */
u32 env_size; /* The number of bytes in this Env area
*/
u32 env_name_index; /*
Index number in NameList area that describes Env name*/
u32 fog; /* Whether or not to use FOG
*/
u32 fog_color; /* Set a FOG color as 0xRRGGBBAA when using FOG */
u32 fog_near; /* Position where it starts Fogging
*/
u32 fog_far; /* Position where is stops Fogging
*/
u32 fill_color; /* Color to clear a frame buffer
*/
u32 fill_depth; /* Color to clear the Z buffer
*/
u32 bg_sprite_img; /* Specify an index number TexList when using a texture image for BG.
u32 bg_sprite_depth;/*
Specify an index number in TexList when using
a depth image for BG */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisEnv;
typedef struct _NisEnvList
{
NisEnvListHeader
*h;
NisEnv *env;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisEnvList;
/*--------------------- CamList ------------------------------------*/
typedef struct _NisCamListHeader
{
u32 cam_list_tag;
/* CamList area tag */
u32 cam_list_header_size;
/* The number of bytes in CamListHeader area */
u32 cam_list_size;
/* The number of bytes in CamList area */
u32 cam_num; /*
The total number of Cam area in CamList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *cam_num_byte;
/* The number of bytes in corresponding Cam area */
} NisCamListHeader;
/* Cam area */
typedef struct _NisCam
{
u32 cam_tag;
/* Cam area tag */
u32 this_cam_index;
/* Index number of thi Cam area */
u32 cam_size;
/* The number of bytes of this Cam area */
u32 cam_name_index;
/* Index number in NameList that describes a camera name */
u32 cam_type;
/* Specify a camera type */
float cam_near_clip;
/* nearClipping plane */
float cam_far_clip;
/* farClipping plane */
float cam_right_clip;
/* rightClipping plane */
float cam_left_clip;
/* leftClipping plane */
float cam_top_clip;
/* topClipping plane */
float cam_bottom_clip;
/* bottomClipping plane */
float cam_fovy;
/* fovy value */
float cam_aspect;
/* aspect proportion */
float cam_scale;
/* scale value */
u32 cam_lookat_obj;
/* Link a focal point of the camera to the object */
u32 cam_eye_obj;
/* Link upper direction vector of the camera to the object */
u32 cam_up_obj;
/* Link upper direction vector of the camera to the object */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisCamExt *n2;
/* extending in NIFF2.0 */
} NisCam;
typedef struct _NisCamList
{
NisCamListHeader
*h;
NisCam *cam;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisCamList;
/*----------------------------- LightList
----------------------------------*/
typedef struct _NisLightListHeader
{
u32 light_list_tag;
/* LightList area tag */
u32 light_list_header_size;
/* The number of bytes in LightListHeader area */
u32 light_list_size;
/* The number of bytes in LightList area */
u32 light_num;
/* The number of Light area in LightList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *light_num_byte;
/* The number of bytes in the corresponding Light area */
} NisLightListHeader;
/* DirLight area */
/* TYPE_DIRECTION */
typedef struct _NisDirLightDirection
{
u32 dir_light_tag;
/* DirLight area tag TAG_DIR_LIGHT_DIFFUSE */
u32 this_dir_light_index;
/* Index number of this DirLight area */
u32 dir_light_size;
/* The number of this DirLight area */
float dir_color_r;
/* Red component for directional light color */
float dir_color_g;
/* Green component for directional light color */
float dir_color_b;
/* Blue component for directional light color */
float dir_x; /*
X directional vector of Diffuse light */
float dir_y; /*
Y directional vector of Diffuse light */
float dir_z; /*
Z directinal vector of Diffuse light */
} NisDirLightDirection;
/* TYPE_POSITION */
typedef struct _NisDirLightPosition
{
u32 dir_light_tag; /*
DirLight area tag TAG_DIR_LIGHT_POSITION */
u32 this_dir_light_index;
/* Index number of this DirLight area */
u32 dir_light_size;
/* The number of bytes of this DirLight area */
float dir_color_r;
/* Red component for directional light color */
float dir_color_g;
/* Green component for directional light color */
float dir_color_b;
/* Blue component for directional light color */
float pos_x; /*
X coordinate of Positional light (absolute coordinate) */
float pos_y; /*
Y coordinate of Positional light (absolute coordinate) */
float pos_z; /*
Z coordiante of Positional light (absolute coordinate) */
float dir_a1; /*
attenuation factor 1 for Positional light */
float dir_a2; /*
attenuation factor 2 for Positional light */
} NisDirLightPosition;
typedef union _NisDirLight
{
NisDirLightDirection
dir;
NisDirLightPosition
pos;
} NisDirLight;
/* Light area */
typedef struct _NisLight
{
u32 light_tag;
/* Light area tag */
u32 this_light_index;
/* Index number of this Light area */
u32 light_header_size;
/* The number of bytes of this LightHeader area */
u32 light_size;
/* The number of bytes of this Light area */
u32 light_name_index;
/* Index in NameList which describes Light name */
u32 light_type;
/* light type */
float ambient_r;
/* Red component from ambient light */
float ambient_g;
/* Green component from ambient light   */
float ambient_b;
/* Blue component from ambient light */
u32 dir_light_num;
/* The number of DirLight area */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
NisDirLight
*dirlight;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisLight;
typedef struct _NisLightList
{
NisLightListHeader *h;
NisLight *light;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisLightList;
/*------------------------- ObjList --------------------------------*/
typedef struct _NisObjListHeader
{
u32 obj_list_tag;
/* ObjList tag */
u32 obj_list_header_size;
/* The number of bytes of ObjListHeader area */
u32 obj_list_size;
/* The number of bytes of ObjList area */
u32 obj_num; /*
The number of all the objects used in the scene */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *obj_num_byte; /*
The number of bytes for each Obj area */
} NisObjListHeader;
/*---- Obj area ----*/
typedef struct _NisObj
{
u32 obj_tag; /* Obj area tag
*/
u32 this_obj_index;
u32 obj_size; /* The number of bytes of this Obj area
*/
u32 obj_name_index; /*
Index number of the object name */
u32 obj_state;
u32 obj_type;
u32 obj_group; /* Group ID
*/
u32 obj_pri; /* Priority of this object
*/
u32 obj_render_cycle_type;
/* Cycle type of N64 Obj area */
u32 obj_render_pri;
/* Cycle type of N64 RDP */
u32 obj_render_type0;
/* Priority when rendeing object */
u32 obj_render_type1;
/* Specify N64 render mode */
u32 have_link_billboard;
/* Whether or not have fierarchical links to billboard object */
u32 obj_lod_num;
/* LOD number */
u32 obj_child_num;
/* Child object number */
u32 obj_parent_link;
u32 obj_shape_link;
u32 obj_mat_link;
u32 obj_anim_link;
u32 obj_coll_link;
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
float *obj_lod_dist;
/* Switching distance of LDD level of object */
u32 *obj_lod_link;
/* Index number of Obj which links every LDD */
u32 *obj_child_link;
/* Index number of child object */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisObjExt *n2;
/* extending in NIFF2.0 */
} NisObj;
typedef struct _NisObjList
{
NisObjListHeader *h;
/* ObjListHeader */
NisObj
*obj; /* Obj area */
u32
*n_ext; /* Nintendo Expansiondata block */
u32
*u_ext; /* User Expansion data block */
} NisObjList;
/*---------------------------- ShapeList
-----------------------------------*/
typedef struct _NisShapeListHeader
{
u32 shape_list_tag;
/* ShapeList tag */
u32 shape_list_header_size;
/* The number of bytes of ShapeListHeader area */
u32 shape_list_size;
/* The number of bytes of ShapeList area */
u32 shape_num;
/* The number of shapes described in ShapeList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *shape_num_byte;
/* The number of bytes of each Shape area */
} NisShapeListHeader;
/*---- Shape area ----*/
typedef struct _NisShape
{
u32 shape_tag;
/* Shape area tag */
u32 this_shape_index;
/* Index number of this Shape area */
u32 shape_size;
/* The number of bytes of this Shape ara */
u32 shape_name_index;
/* Index number of shape name */
u32 shape_type;
/* Specify shape type Shape */
u32 shape_tri_link;
/* Index number of TriGroup in TriList */
u32 shape_mat_link;
/* Index number of in MatList */
u32 shape_part_num;
/* The number of parts included in shape */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *shape_part_link;
/* Index number of PartList */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisShapeExt *n2;
/* extending in NIFF2.0 */
} NisShape;
typedef struct _NisShapeList
{
NisShapeListHeader *h;
NisShape
*shape;
u32
*n_ext; /* Nintendo Expansiondata block */
u32
*u_ext; /* User Expansion data block */
} NisShapeList;
/*--------------------------- VtxList
--------------------------------*/
typedef struct _NisVtxListHeader
{
u32 vtx_list_tag;
/* VtxList area tag */
u32 vtx_list_header_size;
/* The number of bytes of VtxListHeader area */
u32 vtx_list_size;
/* The number of bytes of VtxList area */
u32 vtx_group_num;
/* The total number of VtxGroup included in VtxList area */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *vtx_group_num_byte;
/* The number of bytes of corresponding VtxGroup */
} NisVtxListHeader;
/*---- Vtx area ----*/
typedef struct _NisVtx
{
float x; /* x_coordinate;*/
/* X coordinate of vertex */
float y; /* y_coordinate;*/
/* Y coordinate of vertex */
float z; /* z_coordinate;*/
/* X coordinate of vertex */
} NisVtx;
/*---- VtxGroup area ----*/
typedef struct _NisVtxGroup
{
u32 vtx_group_tag;
/* VtxGroup area tag */
u32 this_vtx_group_index;
/* Index number of this VtxGroup area */
u32 vtx_group_header_size;
/* The number of bytes of this VtxGroupHeader area */
u32 vtx_group_size;
/* The number of bytes of this VtxGroup area */
u32 vtx_group_name_index;
/* Index number of VtxGroup name */
u32 vtx_num; /*
The total number of Vtx included in this VtxGroup */
NisVtx
*vtx;
} NisVtxGroup;
typedef struct _NisVtxList
{
NisVtxListHeader *h;
/* list header */
NisVtxGroup
*vtxg; /* Array of VtxGroup area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisVtxList;
/*------------------------ TriList ---------------------------------*/
typedef struct _NisTriListHeader
{
u32 tri_list_tag;
/* TriList tag */
u32 tri_list_header_size;
/* The number of bytes of TriListHeader area */
u32 tri_list_size;
/* The number of bytes of TriList area */
u32 tri_group_num;
/* The total number of TriGroup included in TriList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tri_group_num_byte;
/* The number of bytes of each TriGroup */
} NisTriListHeader;
/* ReferenceVtxData */
typedef struct _NisRefVtxData
{
u32 vtx_anim_key_num;
/* The total number of keys in case of key frame animation */
u32 *vtx_anim_key;
/* Corresponding key frame value */
u32 *vtx_group_index;
/* Index number of referenced VtxGroup area */
} NisRefVtxData;
/* ReferenceTriColorData */
typedef struct _NisRefTriColorData
{
u32 tri_color_anim_key_num;
/* The total number of keys in case of key frame animation */
u32 *tri_color_anim_key;
/* Corresponding key frame value */
u32 *tri_color_group_index;
/* Index number of referenced TriColorGroup */
} NisRefTriColorData;
/* ReferenceVtxColorData */
typedef struct _NisRefVtxColorData
{
u32 vtx_color_anim_key_num;
/* The total number of keys in case of key frame animation */
u32 *vtx_color_anim_key;
/* Corresponding key frame value */
u32 *vtx_color_group_index;
/* Index number of referenced VtxColorGroup */
} NisRefVtxColorData;
/* ReferenceTriNvData */
typedef struct _NisRefTriNvData
{
u32 tri_nv_anim_key_num;
/* The total number of keys in case of key frame animation */
u32 *tri_nv_anim_key;
/* Corresponding key frame value */
u32 *tri_nv_group_index;
/* Index number of referenced TriNvGroup */
} NisRefTriNvData;
/* ReferenceVtxNvData */
typedef struct _NisRefVtxNvData
{
u32 vtx_nv_anim_key_num;
/* The total number of keys in case of key frame animation */
u32 *vtx_nv_anim_key;
/* Corresponding key frame value */
u32 *vtx_nv_group_index;
/* Index number of referenced VtxNvGroup */
} NisRefVtxNvData;
/* ReferenceStData */
typedef struct _NisRefStData
{
u32 st_anim_key_num;
/* The total number of keys in case of key frame animation */
u32 *st_anim_key;
/* Corresponding key frame value */
u32 *st_group_index;
/* Index number of referenced StGroup area */
} NisRefStData;
/* ---- Tri area ---- */
typedef struct _NisTri
{
u32 tri_tag; /* Tri area tag
*/
u32 this_tri_index; /*
Index number of this Tri area */
u32 tri_size; /* The number of this Tri area
*/
u32 tri_nv_index; /*
TriNv index in referenced TriNvGroup */
u32 tri_color_index;/*
TriColor index in referenced TriColorGroup */
u32 vtx_index0; /* Vtx index in referenced VtxGroup
*/
u32 st_index0; /* St index in referenced StGroup
*/
u32 vtx_nv_index0; /*
VtxNv index in referenced VtxNvGroup */
u32 vtx_color_index0;/*
VtxColor index in referenced VtxColorGroup */
u32 vtx_index1;
u32 st_index1; /* St index in referenced StGroup
*/
u32 vtx_nv_index1; /*
VtxNv index in referenced VtxNvGroup */
u32 vtx_color_index1;/*VtxColor index referenced VtxColorGroup
*/
u32 vtx_index2; /* Vtx index in referenced VtxGroup
*/
u32 st_index2; /* St index in referenced StGroup
*/
u32 vtx_nv_index2; /*
VtxNv index in referenced VtxNvGroup */
u32 vtx_color_index2;/*VtxColor index in referenced VtxColorGroup
*/
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisTri;
/*---- TriGroup area ----*/
typedef struct _NisTriGroup
{
u32 tri_group_tag;
/* TriGroup area tag */
u32 this_tri_group_index;
/* Index number of this TriGroup */
u32 tri_group_header_size;
/* The number of bytes of this TriGroupHeader */
u32 tri_group_size;
/* The number of bytes of this TriGroup */
u32 tri_group_name_index;
/* Index number of TriGroup name */
u32 tri_anim_type;
/* Specify shape animation type */
u32 tri_anim_frame_num;
/* The number of shape animation frames */
u32 tri_num;
/* The number of Tri areas in this TriGroup */
NisRefVtxData *refVtx;
NisRefTriColorData *refTriColor;
NisRefVtxColorData
*refVtxColor;
NisRefTriNvData
*refTriNv;
NisRefVtxNvData
*refVtxNv;
NisRefStData *refSt;
NisTri *tri;
} NisTriGroup;
typedef struct _NisTriList
{
NisTriListHeader *h;
/* List header */
NisTriGroup
*trig; /* Array of TriGroup area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisTriList;
/*---------------------- ColorList ------------------------*/
typedef struct _NisColorListHeader
{
u32 color_list_tag;
/* ColorList tag */
u32 color_list_header_size;
/* The number of bytes in ColorListHeader area */
u32 color_list_size;
/* The number of bytes in ColorList area */
u32 tri_color_group_num;
/* TriColorGroup number */
u32 vtx_color_group_num;
/* VtxColorGroup number */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tri_color_group_size;
/* The number of bytes in corresponding TriColorGroup area */
u32 *vtx_color_group_size;
/* The number of bytes in corresponding VtxColorGroup area */
} NisColorListHeader;
/*---- TriColor area ----*/
typedef struct _NisTriColor
{
float red; /*_component;*/
/* Red componet of polygon color */
float green;/*_component;*/
/* Green component of polygon color */
float blue; /*_component;*/
/* Blue component of polygon color */
float alpha;/*_component;*/
/* Alpha component of polygon color */
} NisTriColor;
/*---- TriColorGroup area ----*/
typedef struct _NisTriColorGroup
{
u32 tri_color_group_tag;
/* TriColorGroup tag */
u32 this_tri_color_group_index;
/* Index number of this TriColorGroup */
u32 tri_color_group_header_size;/*
The number of bytes of this TriColorGroupHeader */
u32 tri_color_group_size;
/* The number of bytes of this TriColorGroup area */
u32 tri_color_num;
/* The number of TriColor areas */
NisTriColor *tricolor;
} NisTriColorGroup;
/*---- VtxColor area ----*/
typedef struct _NisVtxColor
{
float red;
/*_component;*/ /* Red component of polygon color
*/
float green;
/*_component;*/ /* Green component of polygon color */
float blue;
/*_component;*/ /* Blue component of polygon color */
float alpha;
/*_component;*/ /* Alpha component of polygon color */
} NisVtxColor;
/*---- VtxColorGroup area ----*/
typedef struct _NisVtxColorGroup
{
u32 vtx_color_group_tag;
/* VtxColorGroup tag */
u32 this_vtx_color_group_index;
/* Index number of this VtxColorGroup */
u32 vtx_color_group_header_size;/*
The number of bytes of this VtxColorGroupHeader */
u32 vtx_color_group_size;
/* The number of bytes of this VtxColorGroup area */
u32 vtx_color_num;
/* The number of VtxColor areas in this VtxColorGroup */
NisVtxColor *vtxcolor;
} NisVtxColorGroup;
typedef struct _NisColorList
{
NisColorListHeader *h;
/* List header */
NisTriColorGroup
*tri_c_g; /* Array of TriColorGroup area */
NisVtxColorGroup
*vtx_c_g; /* Array of VtxColorGroup area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisColorList;
/*------------------------ VectorList -------------------------*/
typedef struct _NisVectorListHeader
{
u32 vector_list_tag;
/* VectorList tag */
u32 vector_list_header_size;/*
The number of bytes of VectorListHeader */
u32 vector_list_size;
/* The number of bytes of VectorList */
u32 tri_nv_group_num;
/* Total number of TriNvGroup area */
u32 vtx_nv_group_num;
/* Total number of VtxNvGroup area */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tri_nv_group_size;
/* The number of bytes of each TriNvGroup area */
u32 *vtx_nv_group_size;
/* The number of bytes of each VtxNvGroup area */
} NisVectorListHeader;
/*---- TriNv area ----*/
typedef struct _NisTriNv
{
float x; /*_vector;*/
/* X component of normal vector */
float y; /*_vector;*/
/* Y component of normal vector */
float z; /*_vector;*/
/* X component of normal vector */
} NisTriNv;
/*---- TriNvGroup area ----*/
typedef struct _NisTriNvGroup
{
u32 tri_nv_group_tag;
/* TriNvGroup area tag */
u32 this_tri_nv_group_index;
/* Index number of this TriNvGroup area */
u32 tri_nv_group_header_size;
/* The number of bytes of this TriNvGroupHeader area */
u32 tri_nv_group_size;
/* The number of bytes of this TriNvGroup area */
u32 tri_nv_num;
/* Total number of TriNv area */
NisTriNv *trinv;
} NisTriNvGroup;
/*---- VtxNv area ----*/
typedef struct _NisVtxNv
{
float x; /*_vector;*/
/* X component of normal vector */
float y; /*_vector;*/
/* Y compoent of normal vector */
float z; /*_vector;*/
/* Z component of normal vector */
} NisVtxNv;
/*---- VtxNvGroup area ----*/
typedef struct _NisVtxNvGroup
{
u32 vtx_nv_group_tag;
/* VtxNvGroup area tag */
u32 this_vtx_nv_group_index;
/* Index number of this VtxNvGroup area */
u32 vtx_nv_group_header_size;
/* The number of bytes of this VtxNvGroupHeader area */
u32 vtx_nv_group_size;
/* The number of bytes of this VtxNvGroup area */
u32 vtx_nv_num;
/* Total number of VtxNv area */
NisVtxNv *vtxnv;
} NisVtxNvGroup;
typedef struct _NisVectorList
{
NisVectorListHeader *h;
/* List header */
NisTriNvGroup *tri_nv_g;
/* Array of TriVectorGroup area */
NisVtxNvGroup *vtx_nv_g;
/* Array of VtxVectorGroup area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisVectorList;
/*-------------------------- StList ----------------------------*/
typedef struct _NisStListHeader
{
u32 st_list_tag;
/* StListTag area tag */
u32 st_list_header_size;
/* The nubmber of bytes of StListHeader area */
u32 st_list_size;
/* The number of bytes of StList area */
u32 st_group_num;
/* Total number of StGroup area */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *st_group_size;
/* The number of bytes of each StGroup */
} NisStListHeader;
/*---- St area ----*/
typedef struct _NisSt
{
float s; /* S texture coordinate
*/
float t; /* T texture coordinate
*/
} NisSt;
/*---- StGroup area ----*/
typedef struct _NisStGroup
{
u32 st_group_tag;
/* StGroup area tag */
u32 this_st_group_index;
/* Index number of this StGroup area */
u32 st_group_header_size;
/* The number of bytes of this StGroupHeader area */
u32 st_group_size;
/* The number of bytes of this StGroup area */
u32 st_num;
/* The number of St area included in this StGroup area */
NisSt *st;
} NisStGroup;
typedef struct _NisStList
{
NisStListHeader *h;
/* List header */
NisStGroup
*stg; /* Array of StGroup area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisStList;
/*-------------------------- PartList -------------------------------*/
typedef struct _NisPartListHeader
{
u32 part_list_tag;
/* PartList tag */
u32 part_list_header_size;
/* The number of bytes of PartListHeader area */
u32 part_list_size;
/* The number of bytes of PartList area */
u32 part_num; /*
Total number of Part area in PartList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *part_num_byte;
/* The number of bytes of each Part area */
} NisPartListHeader;
/*---- Part area ----*/
typedef struct _NisPart
{
u32 part_tag; /* Part area tag
*/
u32 this_part_index;/*
Index number of this Part area */
u32 part_size; /* Size of this Part area
*/
u32 part_name_index;/*
Index number of Part name */
u32 mat_index; /* Mat index used in Part */
u32 tri_group_index;/*
TriGroup index used in this Part */
u32 part_tri_num; /*
Triangle number used in this part */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tri_index; /* Triangle index number
*/
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisPart;
typedef struct _NisPartList
{
NisPartListHeader
*h; /* List header */
NisPart
*part; /* Array of Part area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisPartList;
/*----------------------------- MatList --------------------------------*/
typedef struct _NisMatListHeader
{
u32 mat_list_tag;
/* MatList tag */
u32 mat_list_header_size;
/* The number of bytes of this MatListHeader */
u32 mat_list_size;
/* The number of bytes of this MatList */
u32 mat_num;
/* The number of Mat area described in MatList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *mat_num_byte;
/* The number of bytes of each Mat area */
} NisMatListHeader;
/*---- Mat area ----*/
typedef struct _NisMat
{
u32 mat_tag; /* Mat area tag
*/
u32 this_mat_index; /*
Index number of this Mat area */
u32 mat_size; /* Size of this Mat area
*/
u32 mat_name_index; /*
Index number in NameList which describes Mat name */
u32 mat_type; /* Material type :
NIFF|N64 */
u32 mat_shade_type; /*
Shading */
u32 mat_color_type0;
/* Color modulation */
u32 mat_color_type1;
/* Color modulation 2 cycle mode only */
u32 mat_alpha_type0;
/* Alpha modulation */
u32 mat_alpha_type1;
/* Alpha modulation 2 cycle mode only */
float prim_red; /* Red component of primitive color
*/
float prim_green; /*
Green component of primitive color */
float prim_blue; /* Blue component of primitive colior
*/
float prim_alpha; /*
Alpha component fo primitive color */
u32 usr_flag0; /* 32bit flag of user definition
*/
u32 usr_flag1; /* 32bit flag of user definition
*/
u32 usr_flag2; /* 32bit flag of user definition
*/
u32 usr_flag3; /* 32bit flag of user definition
*/
u32 usr_flag4; /* 32bit flag of user definition
*/
u32 usr_flag5; /* 32bit flag of user definition
*/
u32 usr_flag6; /* 32bit flag of user definition
*/
u32 usr_flag7; /* 32bit flag of user definition
*/
u32 local_light_index;
u32 tex_num; /* The number of texture used in Mat. 0,1, or 2
*/
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tex_index;
/* Index number of texture */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisMatExt *n2;
/* extending in NIFF2.0 */
} NisMat;
typedef struct _NisMatList
{
NisMatListHeader *h;
/* List header */
NisMat
*mat; /* Arry of Mat area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisMatList;
/*---------------------- TexList -------------------------*/
typedef struct _NisTexListHeader
{
u32 tex_list_tag;
/* TexList area tag */
u32 tex_list_header_size;
/* The number of bytes of TexListHeader area */
u32 tex_list_size;
/* The number of bytes of TexList area */
u32 tex_num; /*
Total number of Tex area described in TexList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tex_num_byte; /*
The number of bytes in each Tex area */
} NisTexListHeader;
/*---- TexDataArea ----*/
/* Data when TEX_ANIM_OFF is specified */
typedef struct _NisTexDataAnimOff
{
u32 tex_img_width; /*
The number of texel of texture image data width */
u32 tex_img_height; /*
The number of texel of texture image data height */
u32 tex_tile_width; /*
The number of texel of the width of the portion that is used */
u32 tex_tile_height;/*
The number of texel of the height of the portion that is used */
u32 tex_offset_x; /*
X coordinate of upper left texel of the portion taht is used */
u32 tex_offset_y; /*
Y coordinate of upper left texel of the portion that is used */
u32 tex_img_index; /*
Index number in TexImgList */
} NisTexDataAnimOff;
/* Whe texture animation is done
(TEX_ANIM FLIPBOOK, TEX_ANIM_FLIPBOOK_KEY,
TEX_ANIM_SCROLL_OFFSET,
TEX_ANIM_SCROLL_OFFSET_KEY,
TEX_ANIM_SCROLL_SCALE,
TEX_ANIM_SCROLL_SCALE_KEY specified )
*/
typedef struct _NisTexDataAnimOn
{
u32 tex_img_width; /*
The number of texel of texture image data width */
u32 tex_img_height; /*
The number of texel of texture image data height */
u32 tex_tile_scale_num;
u32 tex_tile_offset_num;
u32 tex_tile_img_num;
u32 *tex_tile_scale_key;
u32 *tex_tile_width;
u32 *tex_tile_height;
u32 *tex_tile_offset_key;
u32 *tex_tile_offset_x;
u32 *tex_tile_offset_y;
u32 *tex_tile_img_key;
u32 *tex_tile_img_index;
} NisTexDataAnimOn;
/*---- Tex area ----*/
typedef union _NisTexData
{
NisTexDataAnimOff anim_off;
NisTexDataAnimOn anim_on;
} NisTexData;
typedef struct _NisTex
{
u32 tex_tag; /*
Tex area tag */
u32 this_tex_index;
/* Index number of this Tex area */
u32 tex_header_size;
/* The number of bytes of this TexHeader area */
u32 tex_size; /*
The number of bytes of this Tex area */
u32 tex_name_index;
/* Index number in NameList that describes Tex name
*/
u32 tex_type; /*
Texture format */
u32 tex_wrap_s;
/* Specification regarding S direction wrapping of texture */
u32 tex_wrap_t;
/* Specification regarding T direction wrapping of texture */
u32 tex_anim; /*
Setting regarding texture animation */
u32 tex_data_area_size;
/* The number of bytes of TexDataArea portion */
u32 tex_anim_frame_rate;
/* Frame rate of texture animation */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
NisTexData *texdata;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisTexExt *n2;
/* extending in NIFF2.0 */
} NisTex;
typedef struct _NisTexList
{
NisTexListHeader
*h; /* List header */
NisTex
*tex; /* Array of Tex area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisTexList;
/*------------------------ TexImgList ------------------------------*/
typedef struct _NisTeximgListHeader
{
u32 tex_img_list_tag;
/* TexImgList tag */
u32 tex_img_list_header_size;
/* The number of bytes of TexImgListHeader area */
u32 tex_img_list_size;
/* The number of bytes of whole TexImgList area */
u32 tex_img_num;
/* The number of TexImg area */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *tex_img_num_byte;
} NisTeximgListHeader;
/*---- TexImg area ----*/
typedef struct _NisTeximg
{
u32 tex_img_tag;
/* TexImg area tag */
u32 this_tex_img_index;
/* Index number of this TexImg area */
u32 tex_img_header_size;
/* The number of bytes of TexImgHeader area */
u32 tex_img_size;
/* The number of bytes of this TexImg area */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u8 *teximgdata;
/* Texture image char->u8 for win */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisTeximgExt
*n2; /* extending in NIFF2.0 */
} NisTeximg;
typedef struct _NisTeximgList
{
NisTeximgListHeader *h;
/* List header */
NisTeximg *teximg;/*
Array of TexImg area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisTeximgList;
/*------------------------- AnimList ---------------------------*/
typedef struct _NisAnimListHeader
{
u32 anim_list_tag;
/* AnimList area tag */
u32 anim_list_header_size;
/* The number of bytes of AnimListHeader area */
u32 anim_list_size;
/* The number of bytes of AnimList area */
u32 anim_group_num;
/* Total number of AnimGroup area described in AnimList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *anim_group_num_byte;
/* The number of bytes of corresponding AnimGroup */
} NisAnimListHeader;
/*---- Anim area ----*/
typedef struct _NisAnimStatic
{
u32 anim_tag;
/* Anim area tag */
u32 this_anim_index;
/* Index number of this Anim area */
u32 anim_size;
/* The number of bytes of this Anim area */
float translate_x;
/* X axis directional translation */
float translate_y;
/* Y axis directional translation */
float translate_z;
/* Z axis directional translation */
float rotate_axis_x;
/* X component of rotating axis */
float rotate_axis_y;
/* Y component of rotation axis */
float rotate_axis_z;
/* Z component of rotation axis */
u32 rotate_expand_flag;/*
Expansion flag */
float scale_x;
/* X axis directional scale value */
float scale_y;
/* Y axis directional scale value */
float scale_z;
/* Z axis directional scale value */
} NisAnimStatic;
typedef NisAnimStatic NisAnimFull;
typedef struct _NisAnimKey
{
u32 anim_tag;
/* Anim area tag */
u32 this_anim_index;
/* Index number of this Anim area */
u32 anim_size;
/* The number of bytes of this Anim area */
u32 key;
/* Frame value of current key frame */
u32 next_key;
/* Frame value of next key frame */
u32 interpolation_type;
/* Interpolation type between this key and the next */
float translate_x;
/* X axis directional translation */
float translate_y;
/* Y axis directional translation */
float translate_z;
/* Z axis directional translation */
float rotate_axis_x;
/* X component of rotating axis */
float rotate_axis_y;
/* Y component of rotating axis */
float rotate_axis_z;
/* X component of rotating axis */
u32 rotate_expand_flag;
/* Expansion flag */
float scale_x;
/* X axis directional scale value */
float scale_y;
/* Y axis directional scale value */
float scale_z;
/* Z axis directional scale value */
} NisAnimKey;
typedef struct _NisAnimBillboard
{
u32 anim_tag;
/* Anim area tag */
u32 this_anim_index;
/* Index number of this Anim area */
u32 anim_size;
/* Size of this Anim area */
u32 lookat_obj_index;
/* Specify index number in ObjList */
u32 upper_obj_index;
/* Specify index number in ObjList */
} NisAnimBillboard;
typedef union _NisAnim
{
NisAnimStatic
anim_static;
NisAnimFull
full;
NisAnimKey
key;
NisAnimBillboard billboard;
} NisAnim; /* Define structure that complies with anim_type
*/
/*---- AnimGroup area ----*/
typedef struct _NisAnimGroup
{
u32 anim_group_tag;
/* AnimGroup area tag */
u32 this_anim_group_index;
/* Index number of this animGroup */
u32 anim_group_header_size;
/* The number of bytes of this AnimGroupHeader area */
u32 anim_group_size;
/* The number of bytes of this AnimGroup area */
u32 anim_name_index;
/* Index number in NameList that describes AnimGroup name */
u32 anim_type;
/* Animation type */
u32 frame_rate;
/* Frame rate of animation */
u32 anim_num;
/* The number of Anim area */
u32 anim_loop;
/* The number of loop of animation */
u32 anim_rot_mtx_order;
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
NisAnim *anim;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
NisAnimGroupExt *n2;
/* extending in NIFF2.0 */
} NisAnimGroup;
typedef struct _NisAnimList
{
NisAnimListHeader
*h; /* List header */
NisAnimGroup
*animg; /* array of Anim area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisAnimList;
/*--------------------- CollList ------------------------*/
typedef struct _NisCollListHeader
{
u32 coll_list_tag;
/* CollList area tag */
u32 coll_list_header_size;
/* The number of this CollListHeader area */
u32 coll_list_size;
/* The number of CollList area */
u32 coll_group_num;
/* Total number of CollGroup area in CollList */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *coll_group_num_byte;
/* The number of bytes of corresponding CollGroup */
} NisCollListHeader;
/*---- CollData area ----*/ /* Data structure varies depending upon on coll_type
*/
typedef struct _NisCollTerrain
{
u32 coll_data_tag;
/* CollData area tag */
u32 this_coll_data_index;
/* Index number of this CollData area */
u32 coll_data_size;
/* The number of bytes of this CollData area */
u32 x_subdivide;
/* X directional resolution of whole geographical data */
u32 z_subdivide;
/* Z directional resolution of whole geographical data */
u32 shape_list_index;
/* Index number of shape data used for geographical data */
} NisCollTerrain;
typedef struct _NisCollPoint
{
u32 coll_data_tag;
/* CollData area tag */
u32 this_coll_data_index;
/* Index number of this CollData area */
u32 coll_data_size;
/* The number of bytes of this CollData area */
float coll_point_x;
/* X coordinate of Collision point */
float coll_point_y;
/* Y coordinate of Collision point */
float coll_point_z;
/* Z coordinate of Collision point */
} NisCollPoint;
typedef struct _NisCollCircle
{
u32 coll_data_tag;
/* CollData area tag */
u32 this_coll_data_index;
/* Index number of this CollData area */
u32 coll_data_size;
/* The number of bytes of this CollData area */
float center_x;
/* X coordinate of center of circle */
float center_y;
/* Y coordinate of center of circle */
float center_z;
/* Z coordinate of center of circle */
float normal_x;
/* X coordinate of normal vector of circle */
float normal_y;
/* Y coordinate of normal vector of circle */
float normal_z;
/* Z coordinate of normal vector of circle */
float radius; /* Radius of circle
*/
} NisCollCircle;
typedef struct _NisCollSphere
{
u32 coll_data_tag;
/* CollData area tag */
u32 this_coll_data_index;
/* Index number of this CollData area */
u32 coll_data_size;
/* The number of bytes of this CollData area */
float center_x;
/* X coordinate of center of sphere */
float center_y;
/* Y coordinate of center of sphere */
float center_z;
/* Z coordinate of center of sphere */
float radius; /*
Radius of sphere */
} NisCollSphere;
typedef struct _NisCollCylinder
{
u32 coll_data_tag;
/* CollData area tag */
u32 this_coll_data_index;
/* Index number of this CollData area */
u32 coll_data_size;
/* The number of bytes of this CollData area */
float center_x;
/* X coordinate of center of base circle of cylinder */
float center_y;
/* Y coordinate of center of base circle of cylinder */
float center_z;
/* X coordinate of center of base circle of cylinder */
float radius; /*
Radius of cylinder */
float height; /*
Height of cylinder */
} NisCollCylinder;
typedef struct _NisCollBox
{
u32 coll_data_tag;
/* CollData area tag */
u32 this_coll_data_index;
/* Index number of thi CollData area */
u32 coll_data_size;
/* Index number of this CollData area */
float center_x;
/* X coordinate of center of cube */
float center_y;
/* Y coordinate of center of cube */
float center_z;
/* Z coordinate of center of cube */
float length_x;
/* Length of X axis direction of cube */
float length_y;
/* Length of Y axis direction of cube */
float length_z;
/* Length of Z axis direction of cube */
} NisCollBox;
typedef union _NisCollData
{
NisCollTerrain
terrain;
NisCollPoint
point;
NisCollCircle
circle;
NisCollSphere
sphere;
NisCollCylinder cylinder;
NisCollBox
box;
} NisCollData; /* Define structure that complies with coll_type
*/
/*---- Coll area ----*/
typedef struct _NisColl
{
u32 coll_tag;
/* Coll area tag */
u32 this_coll_index;
/* Index number of this Coll area */
u32 coll_header_size;
/* The number of bytes of this CollHeader */
u32 coll_size;
/* The number of bytes of this Coll area */
u32 coll_name_index;
/* Index number in NameList that describes CollGroup name */
u32 coll_type;
/* Collision type */
NisCollData
*colldata;
} NisColl;
/*---- CollGroup area ----*/
typedef struct _NisCollGroup
{
u32 coll_group_tag;
/* CollGroup area tag */
u32 this_coll_group_index;
/* Index number of this CollGroup */
u32 coll_group_header_size;
/* The number of bytes of this CollGroupHeader */
u32 coll_group_size;
/* The number of bytes of this CollGroup area */
u32 coll_group_name_index;
/* Index number of CollGroup name */
u32 coll_num; /*
Coll area number */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32
*coll_num_byte;
NisColl
*coll;
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisCollGroup;
typedef struct _NisCollList
{
NisCollListHeader
*h; /* List header */
NisCollGroup
*collg; /* Array of CollGroup area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisCollList;
/*-------------------- SwitchList ------------------------*/
typedef struct _NisSwitchListHeader
{
u32 switch_list_tag;
/* SwitchList tag */
u32 switch_list_header_size;
/* The number of bytes of SwitchListHeader area */
u32 switch_list_size;
/* The number of bytes of SwitchList area */
u32 switch_num;
/* Switch area number */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *switch_num_byte;
/* The number of bytes of corresponding Switch area */
} NisSwitchListHeader;
/*---- Switch area ----*/
typedef struct _NisSwitch
{
u32 switch_tag;
/* Switch area tag */
u32 this_switch_index;
/* Index number of this Switch area */
u32 switch_size;
/* The number of bytes of this Switch area */
u32 link_list_type;
/* Tag that shows a list to which Switch node links */
u32 default_link_index;
/* Index of node that links by default */
u32 case_node_num;
/* The number of nodes that branch conditions */
u32 switch_condition;
/* Conditions when branching */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *case_val;
/* Constant formula for branch condition */
u32 *case_dest_index;
/* Destination of branch when corresponding conditions are met */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisSwitch;
/*---- SwitchList ----*/
typedef struct _NisSwitchList
{
NisSwitchListHeader *h;
NisSwitch *nisswitch;
u32 *n_ext; /*
Nintendo Expansiondata block */
u32 *u_ext; /*
User Expansion data block */
} NisSwitchList;
/*---- NameList ----*/
typedef struct _NisNameListHeader
{
u32 name_list_tag;
/* NameList area tag */
u32 name_list_header_size;
/* The number of bytes of NameListHeader area */
u32 name_list_size;
/* The number of bytes NameList */
u32 name_num; /*
Name area number */
u32 nin_ext_blk_size;
/* Nintendo Expansiondata block (bytes) */
u32 usr_ext_blk_size;
/* User Expansion data block (bytes) */
u32 *name_num_byte ;
/* The number of bytes of each Name area */
} NisNameListHeader;
/*---- Name area ----*/
typedef struct _NisName
{
u32 name_tag;
/* Name area tag */
u32 this_name_index;
/* Index number of this Name area */
u32 name_header_size;
/* The number of bytes of this NameHeader */
u32 name_size;
/* The number of bytes of this Name area */
u32 *node_name; /* Describe node name with ASCII characters */
} NisName;
typedef struct _NisNameList
{
NisNameListHeader
*h; /* List header */
NisName *nisname;
/* Array of Name area */
u32 *n_ext;
/* Nintendo Expansiondata block */
u32 *u_ext;
/* User Expansion data block */
} NisNameList;
typedef char NisFilename;
/*-------------------- NIS1.whole ------------------------*/
typedef struct _Nis
{
NisFilename
*filename; /* Set to keep an open file name
though it is not mentioned in the NIFF specification. Using for
niWriteNb() */
NisFileHeader
*fh;
NisSceneList
*scenel;
NisEnvList
*envl;
NisCamList
*caml;
NisLightList
*lightl;
NisObjList
*objl;
NisShapeList
*shapel;
NisVtxList
*vtxl;
NisTriList
*tril;
NisColorList
*colorl;
NisVectorList
*vectorl;
NisStList
*stl;
NisPartList
*partl;
NisMatList
*matl;
NisTexList
*texl;
NisTeximgList
*teximgl;
NisAnimList
*animl;
NisCollList
*colll;
NisSwitchList
*switchl;
NisNameList
*namel;
/* extending in NIFF2.0 */
Nis2Lists
*n2;
} Nis;
#endif /* ! _NIS_H_ */