TwlIPL_commit-99/add-ins/TwlSystem/include/nnsys/g3d/binres/res_struct.h

1617 lines
60 KiB
C
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: NITRO-System - include - nnsys - g3d - binres
File: res_struct.h
Copyright 2004-2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Revision: 172 $
*---------------------------------------------------------------------------*/
//
// AUTHOR: Kenji Nishida
//
#ifndef NNSG3D_BINRES_RES_STRUCT_H_
#define NNSG3D_BINRES_RES_STRUCT_H_
#include <nnsys/g3d/config.h>
#define NNS_G3D_RES_INLINE NNS_G3D_INLINE
#ifdef NNS_FROM_TOOL
// VC++
typedef u32 NNSGfdTexKey;
#else
#include <nnsys/gfd.h>
SDK_COMPILER_ASSERT(sizeof(NNSGfdTexKey) == sizeof(u32));
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
An overview of relation between NNS_G3D_DATABLK_MDLSET structs
(NNSG3dResMdlSet as a root)
.... -- 1:N relation(referenced by name/index, using NNSG3dResDict)
---> -- 1:1 relation(own/refer by offset)
NNSG3dResMdlSet .... NNSG3dResMdl ---> NNSG3dResMdlInfo
---> NNSG3dResNodeInfo
---> Structure Byte Code
---> NNSG3dResMat
---> NNSG3dResShp
NNSG3dResMdlInfo ---> NNSG3dSbcType/NNSG3dScalingRule/NNSG3dTexMtxMode etc.
NNSG3dResNodeInfo .... NNSG3dResNodeData ---> NNSG3dSRTFlag etc.
NNSG3dResMat .... NNSG3dResMatData
NNSG3dResShp .... NNSG3dResShpData ---> Display List
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
Signatures for G3D's binary files
*---------------------------------------------------------------------------*/
#define NNS_G3D_SIGNATURE_NSBMD '0DMB'
#define NNS_G3D_SIGNATURE_NSBTX '0XTB'
#define NNS_G3D_SIGNATURE_NSBCA '0ACB'
#define NNS_G3D_SIGNATURE_NSBVA '0AVB'
#define NNS_G3D_SIGNATURE_NSBMA '0AMB'
#define NNS_G3D_SIGNATURE_NSBTP '0PTB'
#define NNS_G3D_SIGNATURE_NSBTA '0ATB'
/*---------------------------------------------------------------------------*
Signatures for G3D data blocks
*---------------------------------------------------------------------------*/
#define NNS_G3D_DATABLK_MDLSET '0LDM'
#define NNS_G3D_DATABLK_TEX '0XET'
#define NNS_G3D_DATABLK_JNT_ANM '0TNJ'
#define NNS_G3D_DATABLK_VIS_ANM '0SIV'
#define NNS_G3D_DATABLK_MATC_ANM '0TAM'
#define NNS_G3D_DATABLK_TEXPAT_ANM '0TAP'
#define NNS_G3D_DATABLK_TEXSRT_ANM '0TRS'
/*---------------------------------------------------------------------------*
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>E<EFBFBD>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD>̎<EFBFBD><CC8E>ʃC<CA83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>E<EFBFBD>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD>ɂ‚<C982><C282>Ă̓f<CD83>[<5B>^<5E>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD>Ƃ<EFBFBD><C682>”\<5C>Ȃ悤<C882><E682A4>
<20><><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B<EFBFBD><42><EFBFBD>_<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>ߒ<EFBFBD><DF92>_<EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȃV<C883>F<EFBFBD>C<EFBFBD>v<EFBFBD><76>
<20>K<EFBFBD>v<EFBFBD><76><EFBFBD>A<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̊g<CC8A><67><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
NOTICE:
<20>֐<EFBFBD><D690>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂ŁA
<20><><EFBFBD>p<EFBFBD>”\<5C>Ȓl<C892>͊֐<CD8A><D690>e<EFBFBD>[<5B>u<EFBFBD><75><EFBFBD>̃T<CC83>C<EFBFBD>Y<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef u16 NNSG3dItemTag;
#define NNS_G3D_ITEMTAG_MAT_STANDARD 0
#define NNS_G3D_ITEMTAG_SHP_STANDARD 0
/////////////////////////////////////////////////////////////////////////////////
/*---------------------------------------------------------------------------*
Name: NNSG3dResFileHeader
Description: A header of a resouce file
signature = (sigVal = NNS_G3D_SIGNATURE_XXXX)
byteOrder = 0xfeff
version = described in u8.u8 style
fileSize = size of a data file
headerSize = always 16
dataBlocks = the number of blocks
(the number of datablock header)
Following 'dataBlocks' words are the indices to the blocks.
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResFileHeader_
{
union
{
char signature[4];
u32 sigVal;
};
u16 byteOrder;
u16 version;
u32 fileSize;
u16 headerSize;
u16 dataBlocks;
}
NNSG3dResFileHeader;
/*---------------------------------------------------------------------------*
Name: NNSG3dResDataBlockHeader:
Description: A header of a data block
kind = the kind of a data block
size = size of a data block
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDataBlockHeader_
{
union
{
u32 kind;
char chr[4];
};
u32 size;
}
NNSG3dResDataBlockHeader;
/////////////////////////////////////////////////////////////////////////////////
/*---------------------------------------------------------------------------*
Name: NNSG3dResDictTreeNode:
Description: A node of a patricia tree
refBit = an index to a referred bit(0-127)
idxLeft = go left if the bit is zero
idxRight = go right if the bit is one
idxEntry = an index to a data entry
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictTreeNode_
{
u8 refBit;
u8 idxLeft;
u8 idxRight;
u8 idxEntry;
}
NNSG3dResDictTreeNode;
/*---------------------------------------------------------------------------*
Name: NNSG3dResDict:
Description: <20><><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>̎<EFBFBD><CC8E><EFBFBD><EFBFBD>w<EFBFBD>b<EFBFBD>_
<20>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD><58>&NNSG3dResDict<63><74><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDict_
{
u8 revision; // revision of dictionary
u8 numEntry; // num of entry(not that of tree node)
u16 sizeDictBlk; // size of this block
u16 dummy_;
u16 ofsEntry; // (NNSG3dResDictEntryHeader*) ((u8*)this + idxEntry)
// patricia tree and its data entry
NNSG3dResDictTreeNode node[1]; // variable size
}
NNSG3dResDict;
/*---------------------------------------------------------------------------*
Name: NNSG3dResName
Description: A structure for a resouce name
'\0' must be filled if the length of string is less than 16.
*---------------------------------------------------------------------------*/
#define NNS_G3D_RESNAME_SIZE (16)
#define NNS_G3D_RESNAME_VALSIZE (NNS_G3D_RESNAME_SIZE / sizeof(u32))
typedef union NNSG3dResName_
{
char name[NNS_G3D_RESNAME_SIZE];
u32 val[NNS_G3D_RESNAME_VALSIZE];
}
NNSG3dResName;
/*---------------------------------------------------------------------------*
Name: NNSG3dResDictEntryHeader
Description: <20><><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>̎<EFBFBD><CC8E><EFBFBD><EFBFBD>G<EFBFBD><47><EFBFBD>g<EFBFBD><67><EFBFBD>w<EFBFBD>b<EFBFBD>_
<20><><EFBFBD>O<EFBFBD>̌<EFBFBD><CC8C><EFBFBD>sizeUnit-16<31>o<EFBFBD>C<EFBFBD>g<EFBFBD>̃f<CC83>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictEntryHeader_
{
u16 sizeUnit; // <20>f<EFBFBD>[<5B>^<5E>G<EFBFBD><47><EFBFBD>g<EFBFBD><67>1<EFBFBD>•<EFBFBD><C295>̃T<CC83>C<EFBFBD>Y<EFBFBD>i<EFBFBD>o<EFBFBD>C<EFBFBD>g<EFBFBD>j
u16 ofsName; //
u8 data[4]; // NNSG3dResDictEntryItem<65>̕<EFBFBD><CC95><EFBFBD>(1<>‚<EFBFBD><C282><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̑傫<CC91><E582AB><EFBFBD><EFBFBD>sizeUnit)
}
NNSG3dResDictEntryHeader;
/////////////////////////////////////////////////////////////////////////////////
//
//
// Texture Image
//
//
/*---------------------------------------------------------------------------*
NNSG3dTexImageParam
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD>
<20><><EFBFBD>f<EFBFBD><66><EFBFBD>̃}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>Ɗ֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>Ƃ<EFBFBD><C682>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>̏<EFBFBD><CC8F>񂪃R<F182AA83>s<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_TEXIMAGE_PARAM_TEX_ADDR_MASK = 0x0000ffff,
NNS_G3D_TEXIMAGE_PARAM_S_SIZE_MASK = 0x00700000,
NNS_G3D_TEXIMAGE_PARAM_T_SIZE_MASK = 0x03800000,
NNS_G3D_TEXIMAGE_PARAM_TEXFMT_MASK = 0x1c000000,
NNS_G3D_TEXIMAGE_PARAM_TR_MASK = 0x20000000,
NNS_G3D_TEXIMAGE_PARAM_TEX_ADDR_SHIFT = 0,
NNS_G3D_TEXIMAGE_PARAM_S_SIZE_SHIFT = 20,
NNS_G3D_TEXIMAGE_PARAM_T_SIZE_SHIFT = 23,
NNS_G3D_TEXIMAGE_PARAM_TEXFMT_SHIFT = 26,
NNS_G3D_TEXIMAGE_PARAM_TR_SHIFT = 29
}
NNSG3dTexImageParam;
/*---------------------------------------------------------------------------*
NNSG3dTexImageParamEx
ORIGW<47><57>ORIGH<47>̓e<CD83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD>̌v<CC8C>Z<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>ĕK<C495>v
NNSG3dTexImageParam<61>̒l<CC92>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>Όv<CE8C>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>̂ŁA
<20>t<EFBFBD><74><EFBFBD>O(WHSAME)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_TEXIMAGE_PARAMEX_ORIGW_MASK = 0x000007ff,
NNS_G3D_TEXIMAGE_PARAMEX_ORIGH_MASK = 0x003ff800,
NNS_G3D_TEXIMAGE_PARAMEX_WHSAME_MASK = 0x80000000,
NNS_G3D_TEXIMAGE_PARAMEX_ORIGW_SHIFT = 0,
NNS_G3D_TEXIMAGE_PARAMEX_ORIGH_SHIFT = 11,
NNS_G3D_TEXIMAGE_PARAMEX_WHSAME_SHIFT = 31
}
NNSG3dTexImageParamEx;
/*---------------------------------------------------------------------------*
NNSG3dResDictTexData
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>G<EFBFBD><47><EFBFBD>g<EFBFBD><67>
<20>ʏ<EFBFBD><CA8F>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>ɂ͉•ϒ<C295><CF92>f<EFBFBD>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
<20>Œ蒷<C592>̏ꍇ<CC8F>͎<EFBFBD><CD8E><EFBFBD><EFBFBD>̃G<CC83><47><EFBFBD>g<EFBFBD><67><EFBFBD>Ƃ<EFBFBD><C682>ē<EFBFBD><C493><EFBFBD>ނ<EFBFBD><DE82>Ƃ<EFBFBD><C682>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictTexData_
{
// 31 30 29 28 26 25 23 22 20 19 16 15 0
// Pltt0 TexFmt TSize SSize 3bit<69>E<EFBFBD>V<EFBFBD>t<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 texImageParam; // NNSG3dTexImageParam
// 31 30 22 21 11 10 0
// SameBit OrigH OrigW
u32 extraParam; // NNSG3dTexImageParamEx
}
NNSG3dResDictTexData;
/*---------------------------------------------------------------------------*
NNSG3dResTexFlag
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W(4x4<78>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>ȊO)<29><><EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD>X<EFBFBD><58><EFBFBD>b<EFBFBD>g<EFBFBD>Ƀ<EFBFBD><C983>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɁA
NNS_G3D_RESTEX_LOADED<45><44><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɂ̓<C982><CD83>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
NNSG3dResTexInfo::flag<61>p<EFBFBD>̒l<CC92>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_RESTEX_LOADED = 0x0001
}
NNSG3dResTexFlag;
/*---------------------------------------------------------------------------*
NNSG3dResTexInfo
NNSG3dResTex<65><78><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>́B
4x4COMP<4D>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>ȊO<C88A>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD>Ɋւ<C98A><D682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ێ<EFBFBD><DB8E><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
nsbmd/nsbtx<74>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Ƀe<C983>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD>f<EFBFBD>[<5B>^<5E>͂P<CD82>‚ɂ܂Ƃ߂<C682><DF82><EFBFBD><EFBFBD>Ă<EFBFBD><C482>āA
<20>܂Ƃ܂<DC82>ƂɃ<C682><C983>[<5B>h<EFBFBD>^<5E>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResTexInfo_
{
NNSGfdTexKey vramKey; // gfd<66><64><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD>l<EFBFBD><6C>VRAM<41>L<EFBFBD>[<5B><><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>B
u16 sizeTex; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^<5E>̃T<CC83>C<EFBFBD>Y<EFBFBD><59><EFBFBD>E<EFBFBD><45>3bit<69>V<EFBFBD>t<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><CC82>\<5C>ߓ<EFBFBD><DF93><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
u16 ofsDict;
u16 flag; // NNSG3dResTexFlag
u16 dummy_;
u32 ofsTex; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g(&NNSG3dResTexImage<67><65><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g)
}
NNSG3dResTexInfo;
/*---------------------------------------------------------------------------*
NNSG3dResTex4x4Flag
4x4COMP<4D>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD>X<EFBFBD><58><EFBFBD>b<EFBFBD>g<EFBFBD>Ƀ<EFBFBD><C983>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɁA
NNS_G3D_RESTEX4x4_LOADED<45><44><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɂ̓<C982><CD83>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
NNSG3dResTex4x4Info::flag<61>p<EFBFBD>̒l<CC92>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_RESTEX4x4_LOADED = 0x0001 // VRAM<41>Ƀ<EFBFBD><C983>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EA82BD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
}
NNSG3dResTex4x4Flag;
/*---------------------------------------------------------------------------*
NNSG3dResTex4x4Info:
NNSG3dResTex<65><78><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>́B
4x4COMP<4D>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD>Ɋւ<C98A><D682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ێ<EFBFBD><DB8E><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
nsbmd/nsbtx<74>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Ƀe<C983>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD>f<EFBFBD>[<5B>^<5E>͂P<CD82>‚ɂ܂Ƃ߂<C682><DF82><EFBFBD><EFBFBD>Ă<EFBFBD><C482>āA
<20>܂Ƃ܂<DC82>ƂɃ<C682><C983>[<5B>h<EFBFBD>^<5E>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResTex4x4Info_
{
NNSGfdTexKey vramKey; // gfd<66><64><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD>l<EFBFBD><6C>VRAM<41>L<EFBFBD>[<5B><><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>B
u16 sizeTex; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^<5E>̃T<CC83>C<EFBFBD>Y<EFBFBD><59><EFBFBD>E<EFBFBD><45>3bit<69>V<EFBFBD>t<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>̏ꍇ<CC8F><EA8D87>2bit)
u16 ofsDict;
u16 flag; // 0<>r<EFBFBD>b<EFBFBD>g<EFBFBD>ڂ̓e<CD83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD>VRAM<41>Ƀ<EFBFBD><C983>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EA82BD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
u16 dummy_;
u32 ofsTex; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g(&NNSG3dResTexImage<67><65><EFBFBD><EFBFBD><EFBFBD>̃o<CC83>C<EFBFBD>g)
u32 ofsTexPlttIdx; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g(&NNSG3dResTexImage<67><65><EFBFBD><EFBFBD><EFBFBD>̃o<CC83>C<EFBFBD>g)
}
NNSG3dResTex4x4Info;
/*---------------------------------------------------------------------------*
NNSG3dResDictPlttData
<20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>G<EFBFBD><47><EFBFBD>g<EFBFBD><67>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictPlttData_
{
u16 offset; // <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^<5E>̋N<CC8B>_<EFBFBD>ɑ΂<C991><CE82><EFBFBD><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67>3bit<69>E<EFBFBD>V<EFBFBD>t<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 flag; // 0<>r<EFBFBD>b<EFBFBD>g<EFBFBD>ڂ<EFBFBD>Tex4Pltt<74><74><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>O
}
NNSG3dResDictPlttData;
/*---------------------------------------------------------------------------*
NNSG3dResPlttFlag
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>X<EFBFBD><58><EFBFBD>b<EFBFBD>g<EFBFBD>Ƀ<EFBFBD><C983>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>
NNS_G3D_RESPLTT_LOADED<45><44><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɂ̓<C982><CD83>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_RESPLTT_USEPLTT4<54>́A<CD81>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^<5E><>4<EFBFBD>F<EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>܂܂<DC82><DC82>Ă<EFBFBD><C482><EFBFBD>
<20><EFBFBD>ɃZ<C983>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B4<42>F<EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>̃<EFBFBD><CC83>[<5B>h<EFBFBD><68><EFBFBD>ɂ͐<C982><CD90><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E982A9><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_RESPLTT_LOADED = 0x0001, // VRAM<41>Ƀ<EFBFBD><C983>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EA82BD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
NNS_G3D_RESPLTT_USEPLTT4 = 0x8000 // <20>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD>4<EFBFBD>F<EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
}
NNSG3dResPlttFlag;
/*---------------------------------------------------------------------------*
NNSG3dResPlttInfo
NNSG3dResTex<65><78><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>́B
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>Ɋւ<C98A><D682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ێ<EFBFBD><DB8E><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
nsbmd/nsbtx<74>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD>Ƀe<C983>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^<5E>͂P<CD82>‚ɂ܂Ƃ߂<C682><DF82><EFBFBD><EFBFBD>Ă<EFBFBD><C482>āA
<20>܂Ƃ܂<DC82>ƂɃ<C682><C983>[<5B>h<EFBFBD>^<5E>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResPlttInfo_
{
NNSGfdTexKey vramKey; // gfd<66><64><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD>l<EFBFBD><6C>VRAM<41>L<EFBFBD>[<5B><><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>B
u16 sizePltt; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>̃f<CC83>[<5B>^<5E>T<EFBFBD>C<EFBFBD>Y<EFBFBD><59><EFBFBD>E<EFBFBD><45>3bit<69>V<EFBFBD>t<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD><EFBFBD>
u16 flag; // NNSG3dResPlttFlag
u16 ofsDict;
u16 dummy_;
u32 ofsPlttData;
}
NNSG3dResPlttInfo;
/*---------------------------------------------------------------------------*
NNSG3dResTex
<20>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>e<EFBFBD><65><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>́AVRAM<41><4D><EFBFBD>̃X<CC83><58><EFBFBD>b<EFBFBD>g<EFBFBD>ɑ΂<C991><CE82><EFBFBD><EFBFBD>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^<5E>ȊO<C88A>́A
&NNSG3dResTex<65><78><EFBFBD>x<EFBFBD>[<5B>X<EFBFBD>ɂ<EFBFBD><C982>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResTex_
{
NNSG3dResDataBlockHeader header;
NNSG3dResTexInfo texInfo;
NNSG3dResTex4x4Info tex4x4Info;
NNSG3dResPlttInfo plttInfo;
NNSG3dResDict dict; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD>
// <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD>
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^(4x4<78>ȊO)
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^(4x4)
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^
// <20>Ƒ<EFBFBD><C691><EFBFBD>
}
NNSG3dResTex;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41>
//
//
/*---------------------------------------------------------------------------*
NNSG3dResDictMatData
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E>B
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>f<EFBFBD>[<5B>^<5E>͉•ϒ<C295><CF92>Ȃ̂<C882>NNSG3dResMatData(<28><>)<29>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictMatData_
{
u32 offset; // &NNSG3dResMat<61><74><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^
}
NNSG3dResDictMatData;
/*---------------------------------------------------------------------------*
NNSG3dResDictTexToMatIdxData
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD>-><3E>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>񎫏<EFBFBD><F18EAB8F>f<EFBFBD>[<5B>^
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictTexToMatIdxData_
{
u16 offset; // NNSG3dResMat<61><74><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u8 numIdx; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD>ɑΉ<C991><CE89><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>h<EFBFBD>c<EFBFBD>̐<EFBFBD>
u8 flag; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><-><3E>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>̃o<CC83>C<EFBFBD><43><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EA82BD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
}
NNSG3dResDictTexToMatIdxData;
/*---------------------------------------------------------------------------*
NNSG3dResDictPlttToMatIdxData
<20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67>-><3E>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>C<EFBFBD><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>񎫏<EFBFBD><F18EAB8F>f<EFBFBD>[<5B>^
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictPlttToMatIdxData_
{
u16 offset; // NNSG3dResMat<61><74><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u8 numIdx; // <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>ɑΉ<C991><CE89><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>h<EFBFBD>c<EFBFBD>̐<EFBFBD>
u8 flag; // <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<-><3E>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>̃o<CC83>C<EFBFBD><43><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EA82BD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>̃t<CC83><74><EFBFBD>O
}
NNSG3dResDictPlttToMatIdxData;
/*---------------------------------------------------------------------------*
NNSG3dMatFlag
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>Ɋւ<C98A><D682><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD>
<20>r<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>΁AX<41><58><EFBFBD>g<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>O<EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɁA<C981>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>f<EFBFBD>[<5B>^<5E>Ɗ֘A<D698>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɑ<EFBFBD><C991><EFBFBD><EC82B3><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_MATFLAG_TEXMTX_USE = 0x0001, // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD>
NNS_G3D_MATFLAG_TEXMTX_SCALEONE = 0x0002, // <20>X<EFBFBD>P<EFBFBD>[<5B><><EFBFBD><EFBFBD>1.0<EFBFBD>Ȃ<EFBFBD>ON(<28>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD>g<EFBFBD>p<EFBFBD><70>)
NNS_G3D_MATFLAG_TEXMTX_ROTZERO = 0x0004, // <20><><EFBFBD>]<5D><><EFBFBD>Ȃ<EFBFBD><C882>Ȃ<EFBFBD>ON(<28>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD>g<EFBFBD>p<EFBFBD><70>)
NNS_G3D_MATFLAG_TEXMTX_TRANSZERO = 0x0008, // <20><><EFBFBD>s<EFBFBD>ړ<EFBFBD><DA93><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>Ȃ<EFBFBD>ON(<28>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD>g<EFBFBD>p<EFBFBD><70>)
NNS_G3D_MATFLAG_ORIGWH_SAME = 0x0010, // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD>Width/Height<68><74><EFBFBD>V<EFBFBD>X<EFBFBD>e<EFBFBD><65><EFBFBD>Ɠ<EFBFBD><C693><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NNS_G3D_MATFLAG_WIREFRAME = 0x0020, // <20><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD>\<5C><><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_DIFFUSE = 0x0040, // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>diffuse<73><65><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_AMBIENT = 0x0080, // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>ambient<6E><74><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_VTXCOLOR = 0x0100, // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>vtxcolor<6F>t<EFBFBD><74><EFBFBD>O<EFBFBD><4F><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_SPECULAR = 0x0200, // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>specular<61><72><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_EMISSION = 0x0400, // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>emission<6F><6E><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_SHININESS = 0x0800, // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>shininess<73>t<EFBFBD><74><EFBFBD>O<EFBFBD><4F><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_TEXPLTTBASE = 0x1000, // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>x<EFBFBD>[<5B>X<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD>w<EFBFBD><EFBFBD><E882B7><EFBFBD>Ȃ<EFBFBD>ON
NNS_G3D_MATFLAG_EFFECTMTX = 0x2000 // effect_mtx<74><78><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD>Ȃ<EFBFBD>ON
}
NNSG3dMatFlag;
/*---------------------------------------------------------------------------*
NNSG3dResMatData
<20>X<C281>̃}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>̃f<CC83>[<5B>^<5E>B
<20>f<EFBFBD>[<5B>^<5E><><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>́AitemTag<61>̒l<CC92><6C><EFBFBD>ς<EFBFBD><CF82>āA<C481>\<5C><><EFBFBD>̂̌<CC82><CC8C><EFBFBD><EFBFBD>Ƀf<C983>[<5B>^<5E><><EFBFBD>z<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD>
<20><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResMatData_
{
NNSG3dItemTag itemTag; // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ʔF<CA94><46><EFBFBD>^<5E>O(<28><><EFBFBD>̍\<5C><><EFBFBD>̂̏ꍇ<CC8F><EA8D87>NNS_G3D_ITEMTAG_MAT_STANDARD<52>ł<EFBFBD><C582><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
u16 size; // <20>T<EFBFBD>C<EFBFBD>Y
u32 diffAmb; // MaterialColor0<72>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ւ̃p<CC83><70><EFBFBD><EFBFBD><EFBFBD>^
u32 specEmi; // MaterialColor1<72>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ւ̃p<CC83><70><EFBFBD><EFBFBD><EFBFBD>^
u32 polyAttr; // PolygonAttr<74>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ւ̃p<CC83><70><EFBFBD><EFBFBD><EFBFBD>^
u32 polyAttrMask; // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>Ŏw<C58E><EFBFBD><E882B7><EFBFBD>r<EFBFBD>b<EFBFBD>g<EFBFBD><67>1<EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD>
u32 texImageParam; // TexImageParam<61>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ւ̃p<CC83><70><EFBFBD><EFBFBD><EFBFBD>^
u32 texImageParamMask; // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>Ŏw<C58E><EFBFBD><E882B7><EFBFBD>r<EFBFBD>b<EFBFBD>g<EFBFBD><67>1<EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD>
u16 texPlttBase; // TexPlttBase<73>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>ւ̃p<CC83><70><EFBFBD><EFBFBD><EFBFBD>^
u16 flag; // NNSG3dMatFlag<61>փL<D683><4C><EFBFBD>X<EFBFBD>g
u16 origWidth, origHeight; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƀe<C983>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>C<EFBFBD><43><EFBFBD>[<5B>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fx32 magW; // <20>o<EFBFBD>C<EFBFBD><43><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>̕<EFBFBD>/origWidth
fx32 magH; // <20>o<EFBFBD>C<EFBFBD><43><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>̍<EFBFBD><CC8D><EFBFBD>/origHeight
// fx32 scaleS, scaleT; // exists if NNS_G3D_MATFLAG_TEXMTX_SCALEONE is off
// fx16 rotSin, rotCos; // exists if NNS_G3D_MATFLAG_TEXMTX_ROTZERO is off
// fx32 transS, transT; // exists if NNS_G3D_MATFLAG_TEXMTX_TRANSZERO is off
// fx32 effectMtx[16]; // exists if NNS_G3D_MATFLAG_ENV_EFFECTMTX is on
}
NNSG3dResMatData;
/*---------------------------------------------------------------------------*
NNSG3dResMat
<20>P<EFBFBD>‚̃<C282><CC83>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƒ}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>̏W<CC8F><57><EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResMat_
{
u16 ofsDictTexToMatList; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>-><3E>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41>ID<49>񎫏<EFBFBD><F18EAB8F>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u16 ofsDictPlttToMatList; // <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g-><3E>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41>ID<49>񎫏<EFBFBD><F18EAB8F>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
NNSG3dResDict dict; // NNSG3dResDictMatData<74>ւ̎<D682><CC8E><EFBFBD>
// NNSG3dResDict dictTexToMatList; // (u8*)this + idxDictTexToMatList
// NNSG3dResDict dictPlttToMatList; // (u8*)this + idxDictPlttToMatList
// u8[] matIdxData; // (u8*)this + idxMatIdxData
// seq of NNSG3dResMatData matData // (u8*)this + idxMatData
}
NNSG3dResMat;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>V<EFBFBD>F<EFBFBD>C<EFBFBD>v
//
//
/*---------------------------------------------------------------------------*
NNSG3dResDictShpData
<20>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E>B
<20>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD>f<EFBFBD>[<5B>^<5E>͉•ϒ<C295><CF92>Ȃ̂<C882>NNSG3dResShpData(<28><>)<29>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictShpData_
{
u32 offset; // (u8*)&NNSG3DResShp + offset -> NNSG3dResShpData&
}
NNSG3dResDictShpData;
/*---------------------------------------------------------------------------*
NNSG3dShpFlag
<20>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD>̃f<CC83>B<EFBFBD>X<EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>̓<EFBFBD><CC93>F<EFBFBD><46><EFBFBD>\<5C><><EFBFBD>t<EFBFBD><74><EFBFBD>O<EFBFBD>ł<EFBFBD><C582>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_SHPFLAG_USE_NORMAL = 0x00000001, // DL<44><4C><EFBFBD><EFBFBD>Normal<61>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82>܂<EFBFBD><DC82>B
NNS_G3D_SHPFLAG_USE_COLOR = 0x00000002, // DL<44><4C><EFBFBD><EFBFBD>Color<6F>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82>܂<EFBFBD><DC82>B
NNS_G3D_SHPFLAG_USE_TEXCOORD = 0x00000004, // DL<44><4C><EFBFBD><EFBFBD>TexCoord<72>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82>܂<EFBFBD><DC82>B
NNS_G3D_SHPFLAG_USE_RESTOREMTX = 0x00000008 // DL<44><4C><EFBFBD><EFBFBD>RestoreMtx<74>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82>܂<EFBFBD><DC82>B
}
NNSG3dShpFlag;
/*---------------------------------------------------------------------------*
NNSG3dResShpData
<20>X<C281>̃V<CC83>F<EFBFBD>C<EFBFBD>v<EFBFBD>f<EFBFBD>[<5B>^<5E>B
<20>قȂ<D982><C882>f<EFBFBD>[<5B>^<5E>\<5C><><EFBFBD>ŃV<C583>F<EFBFBD>C<EFBFBD>v<EFBFBD><76><EFBFBD>L<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>AitemTag<61><67>size<7A><65><EFBFBD><EFBFBD><EFBFBD>͏<EFBFBD><CD8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResShpData_
{
NNSG3dItemTag itemTag; // <20>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD><76><EFBFBD>ʔF<CA94><46><EFBFBD>^<5E>O(<28><><EFBFBD>̍\<5C><><EFBFBD>̂̏ꍇ<CC8F><EA8D87>NNS_G3D_ITEMTAG_SHP_STANDARD<52>ł<EFBFBD><C582><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
u16 size; // <20>T<EFBFBD>C<EFBFBD>Y
u32 flag; // NNSG3dShpFlag
u32 ofsDL; // <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 sizeDL; // <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD>̃T<CC83>C<EFBFBD>Y
}
NNSG3dResShpData;
/*---------------------------------------------------------------------------*
NNSG3dResShp
<20>P<EFBFBD>‚̃<C282><CC83>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƒV<C283>F<EFBFBD>C<EFBFBD>v<EFBFBD>̏W<CC8F><57><EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResShp_
{
NNSG3dResDict dict; // NNSG3dResDictShpData<74>ւ̎<D682><CC8E><EFBFBD>
// NNSG3dResShpData[] shpData;
// u32[] DL;
}
NNSG3dResShp;
typedef struct NNSG3dResEvpMtx_
{
MtxFx43 invM;
MtxFx33 invN;
}
NNSG3dResEvpMtx;
/////////////////////////////////////////////////////////////////////////////////
//
//
// ModelInfo
//
//
/*---------------------------------------------------------------------------*
NNSG3dSbcType
<20><><EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Structure Byte Code<64>̃^<5E>C<EFBFBD>v<EFBFBD><76><EFBFBD>w<EFBFBD><EFBFBD><E882B7>
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_SBCTYPE_NORMAL = 0 // <20><><EFBFBD>݂̂Ƃ<CC82><C682><EFBFBD><EFBFBD>P<EFBFBD><50><EFBFBD>̃^<5E>C<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD>
}
NNSG3dSbcType;
/*---------------------------------------------------------------------------*
NNSG3dScalingRule
<20><><EFBFBD>f<EFBFBD><66><EFBFBD>̃X<CC83>P<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD><EFBFBD><E882B7>
<20><><EFBFBD>ԃt<D483>@<40>C<EFBFBD><43><EFBFBD>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD><67><model_info>::scaling_rule<6C>ɑΉ<C991><CE89><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_SCALINGRULE_STANDARD = 0, // <20><><EFBFBD>ʓI<CA93>ȍs<C88D><73><EFBFBD>v<EFBFBD>Z<EFBFBD>ł悢
NNS_G3D_SCALINGRULE_MAYA = 1, // Maya<79><61>Segment Scaling Compensate<74>̍l<CC8D><6C><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂Ȃ<CE82><C882>Ȃ<EFBFBD><C882>m<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD>
NNS_G3D_SCALINGRULE_SI3D = 2 // Softimage3D<33>̃X<CC83>P<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>v<EFBFBD>Z<EFBFBD><5A><EFBFBD>s<EFBFBD><73><EFBFBD>Ȃ<EFBFBD><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD>
}
NNSG3dScalingRule;
/*---------------------------------------------------------------------------*
NNSG3dTexMtxMode
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD>̌v<CC8C>Z<EFBFBD><5A><EFBFBD>@<40><><EFBFBD>w<EFBFBD><EFBFBD><E882B7>
<20><><EFBFBD>ԃt<D483>@<40>C<EFBFBD><43><EFBFBD>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD><67><model_info>::tex_mtx_mode<64>ɑΉ<C991><CE89><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_TEXMTXMODE_MAYA = 0x00, // Maya<79>̌v<CC8C>Z<EFBFBD><5A><EFBFBD>@<40><><EFBFBD>K<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_TEXMTXMODE_SI3D = 0x01, // Softimage3D<33>̌v<CC8C>Z<EFBFBD><5A><EFBFBD>@<40><><EFBFBD>K<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_TEXMTXMODE_3DSMAX = 0x02, // 3dsMax<61>̌v<CC8C>Z<EFBFBD><5A><EFBFBD>@<40><><EFBFBD>K<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_TEXMTXMODE_XSI = 0x03 // XSI<53>̌v<CC8C>Z<EFBFBD><5A><EFBFBD>@<40><><EFBFBD>K<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>B
}
NNSG3dTexMtxMode;
/*---------------------------------------------------------------------------*
Name: NNSG3dResMdlInfo
Description: <20><><EFBFBD>f<EFBFBD><66><EFBFBD>̕t<CC95><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResMdlInfo_
{
u8 sbcType; // Structure Byte Code<64>^<5E>C<EFBFBD>v<EFBFBD><76><EFBFBD>ʎq(NNSG3dSbcType)
u8 scalingRule; // <20>X<EFBFBD>P<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ʎq(NNSG3dScalingRule)
u8 texMtxMode; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>s<EFBFBD><73><EFBFBD>v<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʎq(NNSG3dTexMtxMode)
u8 numNode;
u8 numMat;
u8 numShp;
u8 firstUnusedMtxStackID;
u8 dummy_;
// <20><><EFBFBD>_<EFBFBD>ʒu<CA92><75><EFBFBD>W<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>P<EFBFBD>[<5B><><EFBFBD>l<EFBFBD>Ƃ<EFBFBD><C682>̋t<CC8B><74>
// FX32_ONE<4E>ȊO<C88A><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>W<EFBFBD>I<EFBFBD><49><EFBFBD>g<EFBFBD><67><EFBFBD>G<EFBFBD><47><EFBFBD>W<EFBFBD><57><EFBFBD>̃X<CC83>P<EFBFBD>[<5B><><EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h<EFBFBD>𗘗p<F0979897><70><EFBFBD><EFBFBD>
// <20><><EFBFBD>_<EFBFBD>ʒu<CA92><75><EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>V<EFBFBD>F<EFBFBD>C<EFBFBD>v<EFBFBD>̃f<CC83>B<EFBFBD>X<EFBFBD>v<EFBFBD><76><EFBFBD>C<EFBFBD><43><EFBFBD>X<EFBFBD>g<EFBFBD><67><EFBFBD>ōs<C58D>񂪃<EFBFBD><F182AA83>X<EFBFBD>g<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
// (<28>G<EFBFBD><47><EFBFBD>x<EFBFBD><78><EFBFBD>[<5B>v<EFBFBD><76><EFBFBD>p)<29><EFBFBD>A<EFBFBD><41><EFBFBD>X<EFBFBD>g<EFBFBD>A<EFBFBD><41><EFBFBD>AposScale<6C>ŃX<C583>P<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD>
fx32 posScale;
fx32 invPosScale;
u16 numVertex; // IMD<4D>t<EFBFBD>@<40>C<EFBFBD><43><output_info>::vertex_size<7A>̒l
u16 numPolygon; // IMD<4D>t<EFBFBD>@<40>C<EFBFBD><43><output_info>::polygon_size<7A>̒l
u16 numTriangle; // IMD<4D>t<EFBFBD>@<40>C<EFBFBD><43><output_info>::triangle_size<7A>̒l
u16 numQuad; // IMD<4D>t<EFBFBD>@<40>C<EFBFBD><43><output_info>::quad_size<7A>̒l
fx16 boxX, boxY, boxZ; // boxPosScale<6C>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǝ<EFBFBD><C68E>ۂ̍<DB82><CC8D>W<EFBFBD>ɂȂ<C982>
fx16 boxW, boxH, boxD; // boxPosScale<6C>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǝ<EFBFBD><C68E>ۂ̍<DB82><CC8D>W<EFBFBD>ɂȂ<C982>
fx32 boxPosScale;
fx32 boxInvPosScale;
}
NNSG3dResMdlInfo;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>m<EFBFBD>[<5B>h
//
//
/*---------------------------------------------------------------------------*
NNSG3dResDictNodeData
<20>m<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E>B
NNSG3dResNodeData<74>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictNodeData_
{
u32 offset; // &NNSG3dResNodeInfo<66><6F><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>f<EFBFBD>[<5B>^
}
NNSG3dResDictNodeData;
/*---------------------------------------------------------------------------*
NNSG3dSRTFlag
<20>m<EFBFBD>[<5B>h<EFBFBD><68>SRT<52>f<EFBFBD>[<5B>^<5E>Ɋւ<C98A><D682><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD>
<20><><EFBFBD>̃t<CC83><74><EFBFBD>O<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Č㑱<C48C>ɂǂ̂悤<CC82>ȃf<C883>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD><E982A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E882B7><EFBFBD>B
<20>f<EFBFBD>[<5B>^<5E>ʂ̍팸<CC8D>Ɨ]<5D><><EFBFBD>Ȍv<C88C>Z<EFBFBD>̏ȗ<CC8F><C897><EFBFBD><EFBFBD>ړI<DA93>Ƃ<EFBFBD><C682>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_SRTFLAG_TRANS_ZERO = 0x0001, // Trans=(0,0,0), <20>ړ<EFBFBD><DA93>f<EFBFBD>[<5B>^<5E>̏o<CC8F>͂<EFBFBD><CD82>ȗ<EFBFBD><C897><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_SRTFLAG_ROT_ZERO = 0x0002, // Rot=Identity, <20><><EFBFBD>]<5D>s<EFBFBD><73><EFBFBD>f<EFBFBD>[<5B>^<5E>̏o<CC8F>͂<EFBFBD><CD82>ȗ<EFBFBD><C897><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_SRTFLAG_SCALE_ONE = 0x0004, // Scale=(1,1,1), <20>X<EFBFBD>P<EFBFBD>[<5B><><EFBFBD>f<EFBFBD>[<5B>^<5E>̏o<CC8F>͂<EFBFBD><CD82>ȗ<EFBFBD><C897><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
NNS_G3D_SRTFLAG_PIVOT_EXIST = 0x0008, // <20><><EFBFBD>]<5D>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1<><31>-1<>̗v<CC97>f(Pivot)<29><><EFBFBD><EFBFBD><EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD>B
NNS_G3D_SRTFLAG_IDXPIVOT_MASK = 0x00f0, // +1,-1<>v<EFBFBD>f(Pivot)<29>̏ꏊ
NNS_G3D_SRTFLAG_PIVOT_MINUS = 0x0100, // ON<4F>Ȃ<EFBFBD><C882><EFBFBD>Pivot<6F><74>-1, OFF<46>Ȃ<EFBFBD><C882><EFBFBD>+1
NNS_G3D_SRTFLAG_SIGN_REVC = 0x0200, // <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><43>B<EFBFBD>̔<EFBFBD><CC94>΂̕<CE82><CC95><EFBFBD>
NNS_G3D_SRTFLAG_SIGN_REVD = 0x0400, // <20>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD><44>A<EFBFBD>̔<EFBFBD><CC94>΂̕<CE82><CC95><EFBFBD>
NNS_G3D_SRTFLAG_IDXMTXSTACK_MASK = 0xf800, // 0-30<33><30><EFBFBD>ƃX<C683>^<5E>b<EFBFBD>N<EFBFBD>ɂ<EFBFBD><C982><EFBFBD>,31<33><31><EFBFBD>ƃX<C683>^<5E>b<EFBFBD>N<EFBFBD>ɂȂ<C982>
NNS_G3D_SRTFLAG_IDENTITY = NNS_G3D_SRTFLAG_TRANS_ZERO |
NNS_G3D_SRTFLAG_ROT_ZERO |
NNS_G3D_SRTFLAG_SCALE_ONE,
NNS_G3D_SRTFLAG_IDXPIVOT_SHIFT = 4,
NNS_G3D_SRTFLAG_IDXMTXSTACK_SHIFT = 11
}
NNSG3dSRTFlag;
/*---------------------------------------------------------------------------*
NNSG3dResNodeData
flag(NNSG3dSRTFlag)<29>̒l<CC92>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Č㑱<C48C>ɂǂ̂悤<CC82>ȃf<C883>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E982A9><EFBFBD>ω<EFBFBD><CF89><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResNodeData_
{
u16 flag; // NNSG3dSRTFlag
fx16 _00;
// exists if !NNS_G3D_SRT_FLAG_TRANS_ZERO
// fx32 Tx, Ty, Tz;
// exists if !NNS_G3D_SRT_FLAG_ROT_ZERO && !NNS_G3D_SRT_FLAG_PIVOT_EXIST
// fx16 _01, _02;
// fx16 _10, _11;
// fx16 _12, _20;
// fx16 _21, _22;
// exists if !NNS_G3D_SRT_FLAG_ROT_ZERO && NNS_G3D_SRT_FLAG_PIVOT_EXIST
// fx16 A, B;
// exists if !NNS_G3D_SCALE_ONE
// fx32 Sx, Sy, Sz;
// fx32 InvSx, InvSy, InvSz;
}
NNSG3dResNodeData;
/*---------------------------------------------------------------------------*
NNSG3dResNodeInfo
<20>P<EFBFBD>‚̃<C282><CC83>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƒm<C283>[<5B>h<EFBFBD>r<EFBFBD>q<EFBFBD>s<EFBFBD><73><EFBFBD><EFBFBD><EFBFBD>̏W<CC8F><57><EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResNodeInfo_
{
NNSG3dResDict dict;
// a seq of NNSG3dResNodeSRTInfo
}
NNSG3dResNodeInfo;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20><><EFBFBD>f<EFBFBD><66>
//
//
/*---------------------------------------------------------------------------*
NNSG3dResMdl
<20>P<EFBFBD>‚̃<C282><CC83>f<EFBFBD><66><EFBFBD>Ɋւ<C98A><D682><EFBFBD><EFBFBD>i<EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>ȊO<C88A>́j<CC81>S<EFBFBD>Ă̏<C482><CC8F><EFBFBD><EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResMdl_
{
u32 size; // <20><><EFBFBD>f<EFBFBD><66><EFBFBD>̃T<CC83>C<EFBFBD>Y
u32 ofsSbc; // &NNSG3dResMdl<64><6C><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>Sbc<62>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 ofsMat; // &NNSG3dResMdl<64><6C><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>NNSG3dResMat<61>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 ofsShp; // &NNSG3dResMdl<64><6C><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>NNSG3dResShp<68>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 ofsEvpMtx; // &NNSG3dResMdl<64><6C><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>NNSG3dEvpMtx<74>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
NNSG3dResMdlInfo info; // <20><><EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>Œ蒷)
NNSG3dResNodeInfo nodeInfo; // <20>m<EFBFBD>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD>
// SBC
// Materials
// Shapes
// EvpMtxs
}
NNSG3dResMdl;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20><><EFBFBD>f<EFBFBD><66><EFBFBD>Z<EFBFBD>b<EFBFBD>g
//
//
/*---------------------------------------------------------------------------*
NNSG3dResDictMdlSetData
<20>X<C281>̃<EFBFBD><CC83>f<EFBFBD><66><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g(&NNSG3dResMdlSet<65><74><EFBFBD>N<EFBFBD>_)<29><><EFBFBD>i<EFBFBD>[<5B><><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictMdlSetData_
{
u32 offset;
}
NNSG3dResDictMdlSetData;
/*---------------------------------------------------------------------------*
NNSG3dResMdlSet
<20><><EFBFBD>f<EFBFBD><66><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>̍\<5C><><EFBFBD>́B<CC81>f<EFBFBD>[<5B>^<5E>u<EFBFBD><75><EFBFBD>b<EFBFBD>N<EFBFBD>w<EFBFBD>b<EFBFBD>_<EFBFBD><5F><EFBFBD>܂ލ\<5C><><EFBFBD>̂ł<CC82><C582><EFBFBD>Ƃɒ<C682><C992><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResMdlSet_
{
NNSG3dResDataBlockHeader header;
NNSG3dResDict dict;
// a seq of NNSG3dResMdl follows
}
NNSG3dResMdlSet;
/////////////////////////////////////////////////////////////////////////////////
//
//
// Structure Byte Code(Sbc)
//
//
/*---------------------------------------------------------------------------*
SBC<42><43><EFBFBD>߃Z<DF83>b<EFBFBD>g
*---------------------------------------------------------------------------*/
#define NNS_G3D_SBC_NOP 0x00 // NOP
#define NNS_G3D_SBC_RET 0x01 // RET
#define NNS_G3D_SBC_NODE 0x02 // NODE idxNode, visibility
#define NNS_G3D_SBC_MTX 0x03 // MTX stackIdx
#define NNS_G3D_SBC_MAT 0x04 // MAT idxMat
#define NNS_G3D_SBC_SHP 0x05 // SHP idxShp
#define NNS_G3D_SBC_NODEDESC 0x06 // NODEDESC idxNode, idxMtxDest, idxMtxParent
#define NNS_G3D_SBC_BB 0x07
#define NNS_G3D_SBC_BBY 0x08
#define NNS_G3D_SBC_NODEMIX 0x09 // NODEMIX idxNode, idxMtxDest, numMtx, idxMtx1, ratio1, ..., idxMtxN, ratioN
#define NNS_G3D_SBC_CALLDL 0x0a // CALLDL u32(relative), u32(size)
#define NNS_G3D_SBC_POSSCALE 0x0b // POSSCALE
#define NNS_G3D_SBC_ENVMAP 0x0c
#define NNS_G3D_SBC_PRJMAP 0x0d
#define NNS_G3D_SBC_NOCMD 0x1f // not exist in compiled structure byte code mnemonic
#define NNS_G3D_SBC_COMMAND_NUM 0x20
#define NNS_G3D_SBCFLG_000 0x00
#define NNS_G3D_SBCFLG_001 0x20
#define NNS_G3D_SBCFLG_010 0x40
#define NNS_G3D_SBCFLG_011 0x60
#define NNS_G3D_SBCFLG_100 0x80
#define NNS_G3D_SBCFLG_101 0xa0
#define NNS_G3D_SBCFLG_110 0xc0
#define NNS_G3D_SBCFLG_111 0xe0
#define NNS_G3D_SBCCMD_MASK 0x1f
#define NNS_G3D_SBCFLG_MASK 0xe0
typedef enum
{
NNS_G3D_SBC_NODEDESC_FLAG_MAYASSC_APPLY = 0x01,
NNS_G3D_SBC_NODEDESC_FLAG_MAYASSC_PARENT = 0x02
}
NNSG3dSbcNodeDescFlag;
#define NNS_G3D_GET_SBCCMD(x) ((x) & NNS_G3D_SBCCMD_MASK)
#define NNS_G3D_GET_SBCFLG(x) ((u32)((x) & NNS_G3D_SBCFLG_MASK))
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>
//
//
//
// REQUIREMENT:
// <20>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD>̃u<CC83><75><EFBFBD>b<EFBFBD>N<EFBFBD>͂P<CD82>‚ŁANNSG3dResAnmSet<65><74><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A
// NNSG3dResDictAnmSetData<74><61><EFBFBD>ʂ<EFBFBD><CA82><EFBFBD>NNSG3dResAnmHeader<65><72><EFBFBD><EFBFBD>Ɏ<EFBFBD><C98E>Še<C28A>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>\<5C><><EFBFBD>̂ɒB<C992><42><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD><C882>B
//
/*---------------------------------------------------------------------------*
NNSG3dResAnmHeader
<20>e<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C>[<5B>X<EFBFBD>̐擪<CC90>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>w<EFBFBD>b<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResAnmHeader_
{
// 'M' for material animation
// 'J' for joint animation
// 'V' for visibility animation
u8 category0;
u8 revision;
// 'CA' for character(joint) animation
// 'VA' for visibility animation
// 'MA' for material color animation
// 'TP' for texture pattern animation
// 'TA' for texture SRT animation
u16 category1;
}
NNSG3dResAnmHeader;
/*---------------------------------------------------------------------------*
NNSG3dResAnmCommon
<20>S<EFBFBD>ẴA<CC83>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̓w<CD83>b<EFBFBD>_<EFBFBD><5F>numFrame<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD><C882>B
*---------------------------------------------------------------------------*/
typedef struct
{
NNSG3dResAnmHeader anmHeader;
u16 numFrame;
u16 dummy_;
}
NNSG3dResAnmCommon;
/*---------------------------------------------------------------------------*
NNSG3dResDictAnmSetData
(u8*)&NNSG3dResAnmSet+offset<65>ԁX<C281>̃A<CC83>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ɒB<C992><42><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef struct
{
u32 offset; // <20>X<C281>̃A<CC83>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ɒB<C992><42><EFBFBD><EFBFBD>߂̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
}
NNSG3dResDictAnmSetData;
/*---------------------------------------------------------------------------*
NNSG3dResAnmSet
<20>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̏W<CC8F><57><EFBFBD>𑩂˂<CB82>߂̍\<5C><><EFBFBD>́B
*---------------------------------------------------------------------------*/
typedef struct
{
NNSG3dResDataBlockHeader header;
NNSG3dResDict dict; // <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD>-><3E>eAnmSetData
}
NNSG3dResAnmSet;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>r<EFBFBD>W<EFBFBD>r<EFBFBD><72><EFBFBD>e<EFBFBD>B<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>
//
//
/*---------------------------------------------------------------------------*
NNSG3dResVisAnm
<20>r<EFBFBD>W<EFBFBD>r<EFBFBD><72><EFBFBD>e<EFBFBD>B<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>1<EFBFBD>•<EFBFBD><C295>̃f<CC83>[<5B>^<5E>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResVisAnm_
{
NNSG3dResAnmHeader anmHeader;
u16 numFrame;
u16 numNode;
u16 size;
u16 dummy_;
// variable length
u32 visData[1];
}
NNSG3dResVisAnm;
/*---------------------------------------------------------------------------*
NNSG3dResDictVisAnmSetData
<20>X<C281>̃r<CC83>W<EFBFBD>r<EFBFBD><72><EFBFBD>e<EFBFBD>B<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>(NNSG3dResVisAnm)<29>̃f<CC83>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
&NNSG3dResVisAnmSet<65><74><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResDictAnmSetData NNSG3dResDictVisAnmSetData;
/*---------------------------------------------------------------------------*
NNSG3dResVisAnmSet
<20>r<EFBFBD>W<EFBFBD>r<EFBFBD><72><EFBFBD>e<EFBFBD>B<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>b<EFBFBD>g<EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>NNSG3dResVisAnm<6E><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NNSG3dResDictVisAnmSetData<74>o<EFBFBD>R<EFBFBD><52>NNSG3dResVisAnm<6E><6D><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><E98EAB>
kind==NNS_G3D_SIGNATURE_NSBVA<56>łȂ<C582><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD><C882>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResAnmSet NNSG3dResVisAnmSet;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>
//
//
/*---------------------------------------------------------------------------*
NNSG3dMatCElem
NNSG3dResDictMatCAnmData<74>̊e<CC8A>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>̒l
NNS_G3D_MATCANM_ELEM_CONST<53><54><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>΁A<CE81><41><EFBFBD><EFBFBD>16bit<69>͒萔<CD92>J<EFBFBD><4A><EFBFBD>[<5B>l<EFBFBD>A
<20>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΁A<CE81>J<EFBFBD><4A><EFBFBD>[<5B>f<EFBFBD>[<5B>^<5E><><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>A<EFBFBD>ƂȂ<C682><C882>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_MATCANM_ELEM_CONST = 0x20000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EA8D87>ON
NNS_G3D_MATCANM_ELEM_STEP_1 = 0x00000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_MATCANM_ELEM_STEP_2 = 0x40000000, // <20>f<EFBFBD>[<5B>^<5E><>2<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_MATCANM_ELEM_STEP_4 = 0x80000000, // <20>f<EFBFBD>[<5B>^<5E><>4<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_MATCANM_ELEM_STEP_MASK = 0xc0000000,
NNS_G3D_MATCANM_ELEM_LAST_INTERP_MASK = 0x1fff0000,
NNS_G3D_MATCANM_ELEM_OFFSET_CONSTANT_MASK = 0x0000ffff,
NNS_G3D_MATCANM_ELEM_OFFSET_CONSTANT_SHIFT = 0,
NNS_G3D_MATCANM_ELEM_LAST_INTERP_SHIFT = 16
}
NNSG3dMatCElem;
/*---------------------------------------------------------------------------*
NNSG3dResDictMatCAnmData
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̊e<CC8A>v<EFBFBD>f<EFBFBD>ɂ‚<C982><C282>Ă̏<C482><CC8F><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictMatCAnmData_
{
// NNSG3dMatCElem:
// 31 30 29 28 16 15 0
// frmStp isConst iFrame_interp offset/constantCol
u32 diffuse;
u32 ambient;
u32 specular;
u32 emission;
u32 polygon_alpha;
}
NNSG3dResDictMatCAnmData;
/*---------------------------------------------------------------------------*
NNSG3dMatCAnmOption
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>(<28><><EFBFBD>ԃt<D483>@<40>C<EFBFBD><43><EFBFBD>Ŏw<C58E><77>)
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_MATCANM_OPTION_INTERPOLATION = 0x0001, // <mat_color_info>::interpolation<6F>ɑΉ<C991>
NNS_G3D_MATCANM_OPTION_END_TO_START_INTERPOLATION = 0x0002 // <mat_color_info>::interp_end_to_start<72>ɑΉ<C991>
}
NNSG3dMatCAnmOption;
/*---------------------------------------------------------------------------*
NNSG3dResMatCAnm
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>1<EFBFBD>•<EFBFBD><C295>̃f<CC83>[<5B>^<5E>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResMatCAnm_
{
NNSG3dResAnmHeader anmHeader;
u16 numFrame;
u16 flag; // NNSG3dMatCAnmOption
NNSG3dResDict dict;
}
NNSG3dResMatCAnm;
/*---------------------------------------------------------------------------*
NNSG3dResDictMatCAnmSetData
<20>X<C281>̃}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
&NNSG3dResMatCAnmSet<65><74><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResDictAnmSetData NNSG3dResDictMatCAnmSetData;
/*---------------------------------------------------------------------------*
NNSG3dResMatCAnmSet
<20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>b<EFBFBD>g<EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>NNSG3dResMatCAnm<6E><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NNSG3dResDictMatCAnmSetData<74>o<EFBFBD>R<EFBFBD><52>NNSG3dResMatCAnm<6E><6D><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><E98EAB>
kind = NNS_G3D_DATABLK_MATC_ANM<4E>łȂ<C582><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD><C882>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResAnmSet NNSG3dResMatCAnmSet;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E>[<5B><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>
//
//
/*---------------------------------------------------------------------------*
NNSG3dResTexPatAnmFV
<20>t<EFBFBD><74><EFBFBD>[<5B><>->(<28>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>, <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g)<29>f<EFBFBD>[<5B>^<5E>ł<EFBFBD><C582>B
<20><><EFBFBD>̃f<CC83>[<5B>^<5E>̕<EFBFBD><CC95>т<EFBFBD><D182>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82>B
idxFrame<6D><65><EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD>idTex<65><78>,<2C>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67>idPltt<74>ɐ؂<C990><D882>ւ<EFBFBD><D682><EFBFBD><EFBFBD>A
<20>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>Ӗ<EFBFBD><D396>ɂȂ<C982><C882>܂<EFBFBD><DC82>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResTexPatAnmFV_
{
u16 idxFrame;
u8 idTex;
u8 idPltt;
}
NNSG3dResTexPatAnmFV;
/*---------------------------------------------------------------------------*
NNSG3dTexPatAnmOption
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E>[<5B><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_TEXPATANM_OPTION_NOPLTT = 0x0001 // <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>̓A<CD83>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EA8D87>ON
}
NNSG3dTexPatAnmOption;
/*---------------------------------------------------------------------------*
NNSG3dResDictTexPatAnmData
<20>e<EFBFBD>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>Ɏ<EFBFBD><C98E>ƒe<C283>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E>[<5B><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>ł<EFBFBD><C582>B
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictTexPatAnmData_
{
u16 numFV; // NNSG3dResTexPatAnmFV<46>̐<EFBFBD>
u16 flag; // NNSG3dTexPatAnmOption (<28><><EFBFBD>݂͎g<CD8E>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>܂<EFBFBD><DC82><EFBFBD>)
fx16 ratioDataFrame; // numFV / numFrame<6D>ł<EFBFBD><C582>B<EFBFBD>f<EFBFBD>[<5B>^<5E>T<EFBFBD><54><EFBFBD>p<EFBFBD>̃q<CC83><71><EFBFBD>g<EFBFBD>ł<EFBFBD><C582>B
u16 offset; // &NNSG3dResTexPatAnm<6E><6D><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD>FV<46>f<EFBFBD>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
}
NNSG3dResDictTexPatAnmData;
/*---------------------------------------------------------------------------*
NNSG3dResTexPatAnm
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E>[<5B><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>1<EFBFBD>•<EFBFBD><C295>̃f<CC83>[<5B>^<5E>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResTexPatAnm_
{
NNSG3dResAnmHeader anmHeader;
u16 numFrame;
u8 numTex; // <20>g<EFBFBD>p<EFBFBD>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>̐<EFBFBD>
u8 numPltt; // <20>g<EFBFBD>p<EFBFBD>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD>̐<EFBFBD>
u16 ofsTexName; // <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><7A><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g(NNSG3dResName<6D><65>numTex<65>•<EFBFBD><C295><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD>)
u16 ofsPlttName; // <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>z<EFBFBD><7A><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g(NNSG3dResName<6D><65>numPltt<74>•<EFBFBD><C295><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD>)
NNSG3dResDict dict; // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NNSG3dResDictTexPatAnmData<74><61><EFBFBD>Ђ<EFBFBD><D082><EFBFBD><EFBFBD><EFBFBD>
// Frame-Value data
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><7A>
// <20>p<EFBFBD><70><EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>z<EFBFBD><7A>
}
NNSG3dResTexPatAnm;
/*---------------------------------------------------------------------------*
NNSG3dResDictTexPatAnmSetData
<20>X<C281>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E>[<5B><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
&NNSG3dResTexPatAnmSet<65><74><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResDictAnmSetData NNSG3dResDictTexPatAnmSetData;
/*---------------------------------------------------------------------------*
NNSG3dResTexPatAnmSet
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>p<EFBFBD>^<5E>[<5B><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>b<EFBFBD>g<EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>NNSG3dResTexPatAnm<6E><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NNSG3dResDictTexPatAnmSetData<74>o<EFBFBD>R<EFBFBD><52>NNSG3dResTexPatAnm<6E><6D><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><E98EAB>
kind = NNS_G3D_DATABLK_TEXPAT_ANM<4E>łȂ<C582><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD>
*---------------------------------------------------------------------------*/
typedef NNSG3dResAnmSet NNSG3dResTexPatAnmSet;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>SRT<52>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>
//
//
/*---------------------------------------------------------------------------*
NNSG3dTexSRTElem
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>SRT<52>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̊e<CC8A><65><EFBFBD>t<EFBFBD><74><EFBFBD>O<EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_TEXSRTANM_ELEM_FX16 = 0x10000000, // <20>f<EFBFBD>[<5B>^<5E><>fx16<31>̃x<CC83>N<EFBFBD>^<5E>Ŏ<EFBFBD><C58E><C28F><EA8D87>ON(rot<6F>̂Ƃ<CC82><C682>͏<EFBFBD><CD8F><EFBFBD>OFF)
NNS_G3D_TEXSRTANM_ELEM_CONST = 0x20000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EA8D87>ON
NNS_G3D_TEXSRTANM_ELEM_STEP_1 = 0x00000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_TEXSRTANM_ELEM_STEP_2 = 0x40000000, // <20>f<EFBFBD>[<5B>^<5E><>2<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_TEXSRTANM_ELEM_STEP_4 = 0x80000000, // <20>f<EFBFBD>[<5B>^<5E><>4<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_TEXSRTANM_ELEM_STEP_MASK = 0xc0000000,
NNS_G3D_TEXSRTANM_ELEM_LAST_INTERP_MASK = 0x0000ffff,
NNS_G3D_TEXSRTANM_ELEM_LAST_INTERP_SHIFT = 0
}
NNSG3dTexSRTElem;
/*---------------------------------------------------------------------------*
NNSG3dResDictTexSRTAnmData
<20>e<EFBFBD>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>r<EFBFBD>q<EFBFBD>s<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̏<EFBFBD><CC8F><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResDictTexSRTAnmData_
{
// word #0(NNSG3dTexSRTElem)
// 31 30 29 28 15 0
// frmStp isConst isFx16 iFrame_interp
// word #1
// 31 0
// offset/constantVal
u32 scaleS; // NNSG3dTexSRTElem
u32 scaleSEx; // NNS_G3D_TEXSRTANM_ELEM_CONST<53>̂Ƃ<CC82><C682>͒萔<CD92>l<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ȊO<C88A>̏ꍇ<CC8F>̓f<CD83>[<5B>^<5E><><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 scaleT; // NNSG3dTexSRTElem
u32 scaleTEx; // NNS_G3D_TEXSRTANM_ELEM_CONST<53>̂Ƃ<CC82><C682>͒萔<CD92>l<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ȊO<C88A>̏ꍇ<CC8F>̓f<CD83>[<5B>^<5E><><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 rot; // NNSG3dTexSRTElem
u32 rotEx; // NNS_G3D_TEXSRTANM_ELEM_CONST<53>̂Ƃ<CC82><C682>͒萔<CD92>l<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ȊO<C88A>̏ꍇ<CC8F>̓f<CD83>[<5B>^<5E><><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
//
// rot <20><> cos <20>l sin <20>l<EFBFBD><6C><EFBFBD>y<EFBFBD>A<EFBFBD>ƂȂ<C682><C882>Ċi<C48A>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
// 31 15 0
// cos in fx16 sin in fx16
u32 transS; // NNSG3dTexSRTElem
u32 transSEx; // NNS_G3D_TEXSRTANM_ELEM_CONST<53>̂Ƃ<CC82><C682>͒萔<CD92>l<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ȊO<C88A>̏ꍇ<CC8F>̓f<CD83>[<5B>^<5E><><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
u32 transT; // NNSG3dTexSRTElem
u32 transTEx; // NNS_G3D_TEXSRTANM_ELEM_CONST<53>̂Ƃ<CC82><C682>͒萔<CD92>l<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>ȊO<C88A>̏ꍇ<CC8F>̓f<CD83>[<5B>^<5E><><EFBFBD>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g
}
NNSG3dResDictTexSRTAnmData;
/*---------------------------------------------------------------------------*
NNSG3dTexSRTAnmOption
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>SRT<52>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>(<28><><EFBFBD>ԃt<D483>@<40>C<EFBFBD><43><EFBFBD>Ŏw<C58E><77>)
*---------------------------------------------------------------------------*/
typedef enum NNSG3dTexSRTAnmOption_
{
NNS_G3D_TEXSRTANM_OPTION_INTERPOLATION = 0x01, // <tex_srt_info>::interpolation<6F>ɑΉ<C991>
NNS_G3D_TEXSRTANM_OPTION_END_TO_START_INTERPOLATION = 0x02 // <tex_srt_info>::interp_end_to_start<72>ɑΉ<C991>
}
NNSG3dTexSRTAnmOption;
/*---------------------------------------------------------------------------*
NNSG3dResTexSRTAnm
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>SRT<52>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>1<EFBFBD>•<EFBFBD><C295>̃f<CC83>[<5B>^<5E>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResTexSRTAnm_
{
NNSG3dResAnmHeader anmHeader;
u16 numFrame;
u8 flag; // NNSG3dTexSRTAnmOption
u8 texMtxMode; // NNSG3dTexMtxMode
NNSG3dResDict dict; // <20>}<7D>e<EFBFBD><65><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>->NNSG3dResDictTexSRTAnmData<74>̎<EFBFBD><CC8E><EFBFBD>
}
NNSG3dResTexSRTAnm;
/*---------------------------------------------------------------------------*
NNSG3dResDictTexSRTAnmSetData
<20>X<C281>̃e<CC83>N<EFBFBD>X<EFBFBD>`<60><><EFBFBD>r<EFBFBD>q<EFBFBD>s<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃f<CC83>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
&NNSG3dResTexSRTAnmSet<65><74><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResDictAnmSetData NNSG3dResDictTexSRTAnmSetData;
/*---------------------------------------------------------------------------*
NNSG3dResTexSRTAnmSet
<20>e<EFBFBD>N<EFBFBD>X<EFBFBD>`<60><>SRT<52>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>b<EFBFBD>g<EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>NNSG3dResTexSRTAnm<6E><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NNSG3dResDictTexSRTAnmSetData<74>o<EFBFBD>R<EFBFBD><52>NNSG3dResTexSRTAnm<6E><6D><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><E98EAB>
kind == NNS_G3D_SIGNATURE_NSBTA<54>łȂ<C582><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD><C882>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResAnmSet NNSG3dResTexSRTAnmSet;
/////////////////////////////////////////////////////////////////////////////////
//
//
// <20>W<EFBFBD><57><EFBFBD>C<EFBFBD><43><EFBFBD>g<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>
//
//
/*---------------------------------------------------------------------------*
NNSG3dResJntAnmSRT<52>Ƃ<EFBFBD><C682>̒<EFBFBD><CC92>Ԃ<EFBFBD><D482><EFBFBD>
<20>W<EFBFBD><57><EFBFBD>C<EFBFBD><43><EFBFBD>g<EFBFBD>P<EFBFBD>‚<EFBFBD>SRT<52>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD>
info<66>̂ǂ̃r<CC83>b<EFBFBD>g<EFBFBD><67>ON<4F><4E><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ă<EFBFBD><C482>̌<EFBFBD><CC8C>̃<EFBFBD><CC83><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD>E<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E882B7><EFBFBD>B
<20><EFBFBD>f<EFBFBD>[<5B>^<5E><>TRS<52>̏<EFBFBD><CC8F>Ԃɕ<D482><C995><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
NNS_G3D_JNTANM_SRTINFO_IDENTITY
--> <20>ȍ~<7E>̃f<CC83>[<5B>^<5E>͑<EFBFBD><CD91>݂<EFBFBD><DD82>Ȃ<EFBFBD><C882>B
NNS_G3D_JNTANM_SRTINFO_IDENTITY_T -- Trans = (0, 0, 0)
NNS_G3D_JNTANM_SRTINFO_BASE_T -- <20><><EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD>Trans<6E><73><EFBFBD>Q<EFBFBD><51>
--> Translation<6F>̃f<CC83>[<5B>^<5E>͑<EFBFBD><CD91>݂<EFBFBD><DD82>Ȃ<EFBFBD><C882>B
NNS_G3D_JNTANM_SRTINFO_CONST_TX -- Trans<6E><73>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>const
--> 1wd<77><64><EFBFBD><EFBFBD>Tx<54>f<EFBFBD>[<5B>^<5E><><EFBFBD>擾 / otherwise NNSG3dJntAnmTInfo(2wd)
NNS_G3D_JNTANM_SRTINFO_CONST_TY -- Trans<6E><73>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>const
--> 1wd<77><64><EFBFBD><EFBFBD>Ty<54>f<EFBFBD>[<5B>^<5E><><EFBFBD>擾 / otherwise NNSG3dJntAnmTInfo(2wd)
NNS_G3D_JNTANM_SRTINFO_CONST_TZ -- Trans<6E><73>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>const
--> 1wd<77><64><EFBFBD><EFBFBD>Tz<54>f<EFBFBD>[<5B>^<5E><><EFBFBD>擾 / otherwise NNSG3dJntAnmTInfo(2wd)
NNS_G3D_JNTANM_SRTINFO_IDENTITY_R -- Rot = I
NNS_G3D_JNTANM_SRTINFO_BASE_R -- <20><><EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD>Rot<6F><74><EFBFBD>Q<EFBFBD><51>
--> Rotation<6F>̃f<CC83>[<5B>^<5E>͑<EFBFBD><CD91>݂<EFBFBD><DD82>Ȃ<EFBFBD>
NNS_G3D_JNTANM_SRTINFO_CONST_R -- Rot<6F><74>const
--> 1wd<77><64><EFBFBD><EFBFBD>RIdx<64>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>f<EFBFBD>[<5B>^ / otherwise NNSG3dJntAnmRInfo(2wd)
NNS_G3D_JNTANM_SRTINFO_IDENTITY_S -- Scale = (1, 1, 1)
NNS_G3D_JNTANM_SRTINFO_BASE_S -- <20><><EFBFBD>f<EFBFBD><66><EFBFBD><EFBFBD>Scale<6C><65><EFBFBD>Q<EFBFBD><51>
NNS_G3D_JNTANM_SRTINFO_CONST_SX -- Scale<6C><65>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>const
--> 2wd<77><64><EFBFBD><EFBFBD>Sx,InvSx<53>f<EFBFBD>[<5B>^<5E><><EFBFBD>擾 / otherwise NNSG3dJntAnmSInfo(2wd)
NNS_G3D_JNTANM_SRTINFO_CONST_SY -- Scale<6C><65>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>const
--> 2wd<77><64><EFBFBD><EFBFBD>Sy,InvSy<53>f<EFBFBD>[<5B>^<5E><><EFBFBD>擾 / otherwise NNSG3dJntAnmSInfo(2wd)
NNS_G3D_JNTANM_SRTINFO_CONST_SZ -- Scale<6C><65>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>const
--> 2wd<77><64><EFBFBD><EFBFBD>Sz,InvSz<53>f<EFBFBD>[<5B>^<5E><><EFBFBD>擾 / otherwise NNSG3dJntAnmSInfo(2wd)
<20>ȉ<EFBFBD><C889>ł̓I<CD83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>́ASRT<52>f<EFBFBD>[<5B>^<5E>̈悩<CC88><E682A9><EFBFBD>̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>ƂȂ<C682><C882>B
NNSG3dJntAnmTInfo
NNS_G3D_JNTANM_TINFO_FX16ARRAY<41>Ȃ<EFBFBD><C882>΁A
<20>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>ŎQ<C58E>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂<EFBFBD>fx16<31>^<5E>̔z<CC94><7A><EFBFBD>ł<EFBFBD><C582><EFBFBD>
NNSG3dJntAnmRInfo
<20>I<EFBFBD>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>ŎQ<C58E>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂<EFBFBD>RotIdx<64>z<EFBFBD><7A><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
RotIdx<64><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E>ɃA<C983>N<EFBFBD>Z<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>ƂɂȂ<C982><C882>B
NNSG3dJntAnmSInfo
RotIdx<64>z<EFBFBD><7A>
16bit<69>̒l<CC92>̕<EFBFBD><CC95>тŁA0x8000<30><30>ON<4F>Ȃ<EFBFBD><C882><EFBFBD>Rot3<74>z<EFBFBD><7A>(<28><><EFBFBD>k3x3<78>s<EFBFBD><73>)<29>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
OFF<46>Ȃ<EFBFBD><C882><EFBFBD>Rot9<74>z<EFBFBD><7A><EFBFBD>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
NNSG3dJntAnmSRTTag
SRT<52>f<EFBFBD>[<5B>^<5E>̐<EFBFBD><CC90><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_SRTINFO_IDENTITY = 0x00000001, // SRT<52>ɉ<EFBFBD><C989><EFBFBD><EFBFBD>ύX<CF8D><58><EFBFBD>Ȃ<EFBFBD><C882>Ƃ<EFBFBD>ON
NNS_G3D_JNTANM_SRTINFO_IDENTITY_T = 0x00000002, // Trans<6E><73>(0,0,0)<29>̂܂܂̂Ƃ<CC82>ON
NNS_G3D_JNTANM_SRTINFO_BASE_T = 0x00000004, // Trans<6E>Ƀ<EFBFBD><C983>f<EFBFBD><66><EFBFBD>̒l<CC92><6C><EFBFBD>g<EFBFBD><67><EFBFBD>Ƃ<EFBFBD>ON
NNS_G3D_JNTANM_SRTINFO_CONST_TX = 0x00000008, // Tx<54><78><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_CONST_TY = 0x00000010, // Ty<54><79><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_CONST_TZ = 0x00000020, // Tz<54><7A><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_IDENTITY_R = 0x00000040, // Rot<6F><74><EFBFBD>Ȃ<EFBFBD><C882>ꍇON
NNS_G3D_JNTANM_SRTINFO_BASE_R = 0x00000080, // Rot<6F>Ƀ<EFBFBD><C983>f<EFBFBD><66><EFBFBD>̒l<CC92><6C><EFBFBD>g<EFBFBD><67><EFBFBD>Ƃ<EFBFBD>ON
NNS_G3D_JNTANM_SRTINFO_CONST_R = 0x00000100, // Rot<6F><74><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_IDENTITY_S = 0x00000200, // Scale<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ꍇON
NNS_G3D_JNTANM_SRTINFO_BASE_S = 0x00000400, // Scale<6C>Ƀ<EFBFBD><C983>f<EFBFBD><66><EFBFBD>̒l<CC92><6C><EFBFBD>g<EFBFBD><67><EFBFBD>ꍇON
NNS_G3D_JNTANM_SRTINFO_CONST_SX = 0x00000800, // Sx<53><78><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_CONST_SY = 0x00001000, // Sy<53><79><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_CONST_SZ = 0x00002000, // Sz<53><7A><EFBFBD><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_SRTINFO_NODE_MASK = 0xff000000, // <20>m<EFBFBD>[<5B>hID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD>S<EFBFBD>Ẵm<CC83>[<5B>h<EFBFBD>Œ<EFBFBD><C592>`<60><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982>Ă<EFBFBD><C482><EFBFBD>
NNS_G3D_JNTANM_SRTINFO_NODE_SHIFT = 24
}
NNSG3dJntAnmSRTTag;
/*---------------------------------------------------------------------------*
NNSG3dJntAnmTInfo
Trans<6E>f<EFBFBD>[<5B>^<5E>ɂ‚<C982><C282>Ă̏<C482><CC8F><EFBFBD>
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_TINFO_STEP_1 = 0x00000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_TINFO_STEP_2 = 0x40000000, // <20>f<EFBFBD>[<5B>^<5E><>2<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_TINFO_STEP_4 = 0x80000000, // <20>f<EFBFBD>[<5B>^<5E><>4<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_TINFO_FX16ARRAY = 0x20000000, // <20>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E><>fx16<31>̔z<CC94><7A><EFBFBD>̏ꍇON
NNS_G3D_JNTANM_TINFO_LAST_INTERP_MASK = 0x1fff0000,
NNS_G3D_JNTANM_TINFO_STEP_MASK = 0xc0000000,
NNS_G3D_JNTANM_TINFO_LAST_INTERP_SHIFT = 16,
NNS_G3D_JNTANM_TINFO_STEP_SHIFT = 30
}
NNSG3dJntAnmTInfo;
/*---------------------------------------------------------------------------*
NNSG3dJntAnmRInfo
<20><><EFBFBD>]<5D>f<EFBFBD>[<5B>^<5E>ɂ‚<C982><C282>Ă̏<C482><CC8F><EFBFBD>
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_RINFO_STEP_1 = 0x00000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_RINFO_STEP_2 = 0x40000000, // <20>f<EFBFBD>[<5B>^<5E><>2<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_RINFO_STEP_4 = 0x80000000, // <20>f<EFBFBD>[<5B>^<5E><>4<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_RINFO_LAST_INTERP_MASK = 0x1fff0000,
NNS_G3D_JNTANM_RINFO_STEP_MASK = 0xc0000000,
NNS_G3D_JNTANM_RINFO_LAST_INTERP_SHIFT = 16,
NNS_G3D_JNTANM_RINFO_STEP_SHIFT = 30
}
NNSG3dJntAnmRInfo;
/*---------------------------------------------------------------------------*
NNSG3dJntAnmPivotInfo
<20><><EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD><EA82BD><EFBFBD>]<5D>s<EFBFBD><73><EFBFBD>ɂ‚<C982><C282>Ă̏<C482><CC8F><EFBFBD>
+1/-1<>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>v<EFBFBD>f<EFBFBD>̍s<CC8D>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E88F9C><EFBFBD>ƁA2x2<78>s<EFBFBD><73><EFBFBD>ɂȂ<C982><C882>āA<C481><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
A B
C D
<20>̂悤<CC82>ɖ<EFBFBD><C996>Â<EFBFBD><C382><EFBFBD><EFBFBD>BC=+B/-B D=+A/-A<>ƂȂ<C682><C882>̂ŁA
NNS_G3D_JNTANM_PIVOTINFO_SIGN_REVC
NNS_G3D_JNTANM_PIVOTINFO_SIGN_REVD
<20>ɕ<EFBFBD><C995><EFBFBD><EFBFBD>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_PIVOTINFO_IDXPIVOT_MASK = 0x000f, // +1/-1<>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>v<EFBFBD>f<EFBFBD>̏ꏊ
NNS_G3D_JNTANM_PIVOTINFO_MINUS = 0x0010, // ON<4F>Ȃ<EFBFBD>-1/ OFF<46>Ȃ<EFBFBD>+1
NNS_G3D_JNTANM_PIVOTINFO_SIGN_REVC = 0x0020, // C=-B<>Ȃ<EFBFBD>ON
NNS_G3D_JNTANM_PIVOTINFO_SIGN_REVD = 0x0040, // D=-A<>Ȃ<EFBFBD>ON
NNS_G3D_JNTANM_PIVOT_INFO_IDXPIVOT_SHIFT = 0
}
NNSG3dJntAnmPivotInfo;
/*---------------------------------------------------------------------------*
NNSG3dJntAnmRIdx
<20><><EFBFBD>]<5D>s<EFBFBD><73><EFBFBD>f<EFBFBD>[<5B>^<5E>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
NNS_G3D_JNTANM_RIDX_PIVOT<4F><54>ON<4F>̂Ƃ<CC82><C682>́Apivot<6F><74><EFBFBD>k<EFBFBD>s<EFBFBD><73><EFBFBD>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X
OFF<46>̏ꍇ<CC8F>́A<CD81>ʏ<EFBFBD><CA8F>̉<EFBFBD><CC89>]<5D>s<EFBFBD><73><EFBFBD>f<EFBFBD>[<5B>^<5E>ւ̃C<CC83><43><EFBFBD>f<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>ƂȂ<C682><C882>B
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_RIDX_PIVOT = 0x8000,
NNS_G3D_JNTANM_RIDX_IDXDATA_MASK = 0x7fff,
NNS_G3D_JNTANM_RIDX_IDXDATA_SHIFT = 0
}
NNSG3dJntAnmRIdx;
/*---------------------------------------------------------------------------*
NNSG3dJntAnmSInfo
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_SINFO_STEP_1 = 0x00000000, // <20>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_SINFO_STEP_2 = 0x40000000, // <20>f<EFBFBD>[<5B>^<5E><>2<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_SINFO_STEP_4 = 0x80000000, // <20>f<EFBFBD>[<5B>^<5E><>4<EFBFBD>t<EFBFBD><74><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ƃ<EFBFBD>
NNS_G3D_JNTANM_SINFO_FX16ARRAY = 0x20000000, // <20>f<EFBFBD>[<5B>^<5E>l<EFBFBD><6C>fx16<31>^<5E>̂Ƃ<CC82>
NNS_G3D_JNTANM_SINFO_LAST_INTERP_MASK = 0x1fff0000,
NNS_G3D_JNTANM_SINFO_STEP_MASK = 0xc0000000,
NNS_G3D_JNTANM_SINFO_LAST_INTERP_SHIFT = 16,
NNS_G3D_JNTANM_SINFO_STEP_SHIFT = 30
}
NNSG3dJntAnmSInfo;
/*---------------------------------------------------------------------------*
NNSG3dResJntAnmSRTInfo
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResJntAnmSRTInfo_
{
u32 info; // NNSG3dJntAnmTInfo <20><> NNSG3dJntAnmRInfo <20><> NNSG3dJntAnmSInfo
u32 offset;
}
NNSG3dResJntAnmSRTInfo;
/*---------------------------------------------------------------------------*
NNSG3dResJntAnmSRTTag
*---------------------------------------------------------------------------*/
typedef struct NNSG3dResJntAnmSRTTag_
{
u32 tag; // NNSG3dJntAnmSRTTag;
}
NNSG3dResJntAnmSRTTag;
/*---------------------------------------------------------------------------*
NNSG3dJntAnmOption
<20>W<EFBFBD><57><EFBFBD>C<EFBFBD><43><EFBFBD>g<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃I<CC83>v<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>(<28><><EFBFBD>ԃt<D483>@<40>C<EFBFBD><43><EFBFBD>Ŏw<C58E><77>)
*---------------------------------------------------------------------------*/
typedef enum
{
NNS_G3D_JNTANM_OPTION_INTERPOLATION = 0x01, // <node_anm_info>::interpolation
NNS_G3D_JNTANM_OPTION_END_TO_START_INTERPOLATION = 0x02 // <node_anm_info>::interp_end_to_start
}
NNSG3dJntAnmOption;
typedef struct NNSG3dResJntAnm_
{
NNSG3dResAnmHeader anmHeader;
u16 numFrame;
u16 numNode;
u32 flag;
u32 ofsRot3;
u32 ofsRot5;
// u16[numNode] ofsTag
// vector of NNSG3dResJntAnmSRTTag
}
NNSG3dResJntAnm;
/*---------------------------------------------------------------------------*
NNSG3dResDictJntAnmSetData
<20>X<C281>̃W<CC83><57><EFBFBD>C<EFBFBD><43><EFBFBD>g<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD>(NNSG3dResJntAnm)<29>̃f<CC83>[<5B>^<5E>ւ̃I<CC83>t<EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>i<EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
&NNSG3dResJntAnmSet<65><74><EFBFBD>N<EFBFBD>_<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResDictAnmSetData NNSG3dResDictJntAnmSetData;
/*---------------------------------------------------------------------------*
NNSG3dResJntAnmSet
<20>W<EFBFBD><57><EFBFBD>C<EFBFBD><43><EFBFBD>g<EFBFBD>A<EFBFBD>j<EFBFBD><6A><EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>̃Z<CC83>b<EFBFBD>g<EFBFBD>𑩂˂<F091A982><CB82>\<5C><><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>NNSG3dResJntAnm<6E><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD>B
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NNSG3dResDictJntAnmSetData<74>o<EFBFBD>R<EFBFBD><52>NNSG3dResJntAnm<6E><6D><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><E98EAB>
kind==NNS_G3D_SIGNATURE_NSBCA<43>łȂ<C582><C882>Ă͂Ȃ<CD82><C882>Ȃ<EFBFBD><C882>B
*---------------------------------------------------------------------------*/
typedef NNSG3dResAnmSet NNSG3dResJntAnmSet;
#ifdef __cplusplus
}/* extern "C" */
#endif
#endif // NNSG3D_BINRES_RES_STRUCT_H_