Exemplo n.º 1
0
 public override bool OnInitialize()
 {
     _userEntries = new UserDataCollection();
     _version     = CommonHeader->_version;
     SetSizeInternal(CommonHeader->_size);
     return(false);
 }
Exemplo n.º 2
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _version = Header->_version;

            if (_version == 4)
            {
                VIS0v4* header = Header4;
                _numFrames = header->_numFrames;
                _loop = header->_loop;
                if ((_name == null) && (header->_stringOffset != 0))
                    _name = header->ResourceString;

                if (Header4->_origPathOffset > 0)
                    _originalPath = Header4->OrigPath;

                (_userEntries = new UserDataCollection()).Read(Header4->UserData);
            }
            else
            {
                VIS0v3* header = Header3;
                _numFrames = header->_numFrames;
                _loop = header->_loop;

                if ((_name == null) && (header->_stringOffset != 0))
                    _name = header->ResourceString;

                if (Header3->_origPathOffset > 0)
                    _originalPath = Header3->OrigPath;
            }

            return Header3->Group->_numEntries > 0;
        }
Exemplo n.º 3
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _strings.Clear();
            if (_version == 4)
            {
                SHP0v4 *header = Header4;

                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;

                bint *stringOffset = header->StringEntries;
                for (int i = 0; i < header->_numEntries; i++)
                {
                    _strings.Add(new String((sbyte *)stringOffset + stringOffset[i]));
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(header->UserData);

                return(header->Group->_numEntries > 0);
            }
            else
            {
                SHP0v3 *header = Header3;

                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;

                bint *stringOffset = header->StringEntries;
                for (int i = 0; i < header->_numEntries; i++)
                {
                    _strings.Add(new String((sbyte *)stringOffset + stringOffset[i]));
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                return(header->Group->_numEntries > 0);
            }
        }
        public override bool OnInitialize()
        {
            base.OnInitialize();
            if (_version == 5)
            {
                CHR0v5 *header = Header5;
                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;

                if (_name == null)
                {
                    if (header->ResourceString != null)
                    {
                        _name = header->ResourceString;
                    }
                    else
                    {
                        _name = "anim" + Index;
                    }
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(header->UserData);

                return(header->Group->_numEntries > 0);
            }
            else
            {
                CHR0v4_3 *header = Header4_3;
                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;

                if (_name == null)
                {
                    if (header->ResourceString != null)
                    {
                        _name = header->ResourceString;
                    }
                    else
                    {
                        _name = "anim" + Index;
                    }
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                return(header->Group->_numEntries > 0);
            }
        }
Exemplo n.º 5
0
        public override bool OnInitialize()
        {
            base.OnInitialize();
            if (_version == 5)
            {
                SCN0v5 *header = Header5;
                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                _numFrames  = header->_frameCount;
                _specLights = header->_specLightCount;
                _loop       = header->_loop != 0;
                _lightsets  = header->_lightSetCount;
                _amblights  = header->_ambientCount;
                _lights     = header->_lightCount;
                _fogs       = header->_fogCount;
                _cameras    = header->_cameraCount;

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(header->UserData);

                return(header->Group->_numEntries > 0);
            }
            else
            {
                SCN0v4 *header = Header4;
                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                _numFrames  = header->_frameCount;
                _specLights = header->_specLightCount;
                _loop       = header->_loop != 0;
                _lightsets  = header->_lightSetCount;
                _amblights  = header->_ambientCount;
                _lights     = header->_lightCount;
                _fogs       = header->_fogCount;
                _cameras    = header->_cameraCount;

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                return(header->Group->_numEntries > 0);
            }
        }
Exemplo n.º 6
0
        public override bool OnInitialize()
        {
            base.OnInitialize();
            //strings.Clear();
            _version = Header->_version;
            if (_version == 5)
            {
                if ((_name == null) && (Header5->_stringOffset != 0))
                {
                    _name = Header5->ResourceString;
                }

                _origPathOffset = Header5->_origPathOffset;
                _frameCount     = Header5->_frameCount;
                _specLights     = Header5->_specLightCount;
                _loop           = Header5->_loop;
                _lightset       = Header5->_lightSetCount;
                _amblights      = Header5->_ambientCount;
                _lights         = Header5->_lightCount;
                _fog            = Header5->_fogCount;
                _camera         = Header5->_cameraCount;

                (_userEntries = new UserDataCollection()).Read(Header5->UserData);

                return(Header5->Group->_numEntries > 0);
            }
            else
            {
                if ((_name == null) && (Header4->_stringOffset != 0))
                {
                    _name = Header4->ResourceString;
                }

                _origPathOffset = Header4->_origPathOffset;
                _frameCount     = Header4->_frameCount;
                _specLights     = Header4->_specLightCount;
                _loop           = Header4->_loop;
                _lightset       = Header4->_lightSetCount;
                _amblights      = Header4->_ambientCount;
                _lights         = Header4->_lightCount;
                _fog            = Header4->_fogCount;
                _camera         = Header4->_cameraCount;

                return(Header4->Group->_numEntries > 0);
            }
        }
Exemplo n.º 7
0
        public override bool OnInitialize()
        {
            base.OnInitialize();
            _headerLen = Header1->_headerLen;

            _sharesData = _headerLen > HeaderSize();
            if (_sharesData)
            {
                SetSizeInternal(ExclusiveEntrySize());
            }

            if (_version == 2)
            {
                if ((_name == null) && (Header2->_stringOffset != 0))
                {
                    _name = Header2->ResourceString;
                }

                _width      = Header2->_width;
                _height     = Header2->_height;
                _format     = Header2->PixelFormat;
                _lod        = Header2->_levelOfDetail;
                _hasPalette = Header2->HasPalette;
            }
            else
            {
                if ((_name == null) && (Header1->_stringOffset != 0))
                {
                    _name = Header1->ResourceString;
                }

                _width      = Header1->_width;
                _height     = Header1->_height;
                _format     = Header1->PixelFormat;
                _lod        = Header1->_levelOfDetail;
                _hasPalette = Header1->HasPalette;
            }

            if (_version == 3)
            {
                (_userEntries = new UserDataCollection()).Read(Header3->UserData);
            }

            return(false);
        }
Exemplo n.º 8
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _version = Header->_version;
            if (_version == 4)
            {
                _numFrames      = Header4->_frames;
                _origPathOffset = Header4->_origPathOffset;
                _loop           = Header4->_loop;

                if ((_name == null) && (Header4->_stringOffset != 0))
                {
                    _name = Header4->ResourceString;
                }

                if (Header4->_origPathOffset > 0)
                {
                    _originalPath = Header4->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(Header4->UserData);

                return(Header4->Group->_numEntries > 0);
            }
            else
            {
                _numFrames      = Header3->_frames;
                _origPathOffset = Header3->_origPathOffset;
                _loop           = Header3->_loop;

                if ((_name == null) && (Header3->_stringOffset != 0))
                {
                    _name = Header3->ResourceString;
                }

                if (Header3->_origPathOffset > 0)
                {
                    _originalPath = Header3->OrigPath;
                }

                return(Header3->Group->_numEntries > 0);
            }
        }
Exemplo n.º 9
0
        public override bool OnInitialize()
        {
            base.OnInitialize();
            if (_version == 4)
            {
                CLR0v4 *header = Header4;

                _numFrames = header->_frames;
                _loop      = header->_loop != 0;

                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(header->UserData);

                return(header->Group->_numEntries > 0);
            }
            else
            {
                CLR0v3 *header = Header3;

                _numFrames = header->_frames;
                _loop      = header->_loop != 0;

                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                return(header->Group->_numEntries > 0);
            }
        }
Exemplo n.º 10
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _palette = null;

            if ((_name == null) && (Header1->_stringOffset != 0))
            {
                _name = Header1->ResourceString;
            }

            _format = Header1->PaletteFormat;

            if (_version == 3)
            {
                (_userEntries = new UserDataCollection()).Read(Header3->UserData);
            }

            return(false);
        }
Exemplo n.º 11
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            startUpVersion = _version = Header->_version;

            if (_version == 5)
            {
                if ((_name == null) && (Header5->_stringOffset != 0))
                {
                    _name = Header5->ResourceString;
                }
                _loop       = Header5->_loop;
                _numFrames  = Header5->_numFrames;
                _matrixMode = Header5->_matrixMode;

                if (Header5->_origPathOffset > 0)
                {
                    _originalPath = Header5->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(Header5->UserData);
            }
            else
            {
                if ((_name == null) && (Header4->_stringOffset != 0))
                {
                    _name = Header4->ResourceString;
                }
                _loop       = Header4->_loop;
                _numFrames  = Header4->_numFrames;
                _matrixMode = Header5->_matrixMode;

                if (Header4->_origPathOffset > 0)
                {
                    _originalPath = Header4->OrigPath;
                }
            }

            return(Header4->Group->_numEntries > 0);
        }
Exemplo n.º 12
0
        public override bool OnInitialize()
        {
            //Read common header
            base.OnInitialize();

            if (_name == "<null>")
            {
                return(false);
            }

            //Read header data
            _flags1   = (SCN0CameraFlags)(ushort)Data->_flags1;
            _flags2   = Data->_flags2;
            _type     = (SCN0CameraType)((ushort)_flags2 & 1);
            _projType = (ProjectionType)(int)Data->_projectionType;

            //Read user data
            (_userEntries = new UserDataCollection()).Read(Data->UserData);

            return(false);
        }
Exemplo n.º 13
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _flags1   = (SCN0CameraFlags)(ushort)Data->_flags1;
            _flags2   = Data->_flags2;
            _type     = (SCN0CameraType)((ushort)_flags2 & 1);
            _projType = (ProjectionType)(int)Data->_projType;

            for (int x = 0; x < 15; x++)
            {
                SetKeys(x, new KeyframeArray(FrameCount + 1));
            }

            bint *values = (bint *)&Data->_position;

            if (Name != "<null>")
            {
                for (int i = 0; i < 15; i++)
                {
                    //if (((int)_flags1 & (int)Ordered[i]) == 0)
                    //    SCN0Node.strings[(int)((&values[i] - Parent.Parent.WorkingUncompressed.Address + values[i]))] = "Camera" + Index + " Keys " + Ordered[i].ToString();

                    DecodeFrames(GetKeys(i), &values[i], (int)_flags1, (int)Ordered[i]);
                }
            }

            _posX._linear = true;
            _posY._linear = true;
            _posZ._linear = true;

            _aimX._linear = true;
            _aimY._linear = true;
            _aimZ._linear = true;

            (_userEntries = new UserDataCollection()).Read(Data->UserData);

            return(false);
        }
Exemplo n.º 14
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            if ((_name == null) && (Header1->_stringOffset != 0))
            {
                _name = Header1->ResourceString;
            }

            _width      = Header1->_width;
            _height     = Header1->_height;
            _format     = Header1->PixelFormat;
            _lod        = Header1->_levelOfDetail;
            _hasPalette = Header1->HasPalette;
            _version    = Header1->_header._version;

            if (_version == 3)
            {
                (_userEntries = new UserDataCollection()).Read(Header3->UserData);
            }

            return(false);
        }
Exemplo n.º 15
0
        //Initialize should only be called from parent group during parse.
        //Bones need not be imported/exported anyways
        public override bool OnInitialize()
        {
            MDL0Bone *header = Header;

            SetSizeInternal(header->_headerLen);

            //Conditional name assignment
            if (_name == null && header->_stringOffset != 0)
            {
                _name = header->ResourceString;
            }

            //Assign fields
            _boneFlags      = (BoneFlags)(uint)header->_flags;
            _billboardFlags = (BillboardFlags)(uint)header->_bbFlags;
            _nodeIndex      = header->_nodeId;
            _entryIndex     = header->_index;

            _bbRefNode = !_replaced && _boneFlags.HasFlag(BoneFlags.HasBillboardParent) ?
                         Model._linker.NodeCache[header->_bbNodeId] as MDL0BoneNode : null;

            if (_billboardFlags != BillboardFlags.Off)
            {
                Model._billboardBones.Add(this); //Update mesh in T-Pose
            }
            _bindState         = _frameState = new FrameState(header->_scale, (Vector3)header->_rotation, header->_translation);
            _bindMatrix        = _frameMatrix = header->_transform;
            _inverseBindMatrix = _inverseFrameMatrix = header->_transformInv;

            _extents = header->_extents;

            (_userEntries = new UserDataCollection()).Read(header->UserDataAddress);

            //We don't want to process children because not all have been parsed yet.
            //Child assignments will be handled by the parent group.
            return(false);
        }
Exemplo n.º 16
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _startUpVersion = _version = Header->_version;

            if (_version == 5)
            {
                CHR0v5* header = Header5;
                _numFrames = header->_numFrames;
                _loop = header->_loop;

                _dataoffset = header->_dataOffset;
                _stringoffset = header->_stringOffset;

                if (_name == null)
                    if (Header5->ResourceString != null)
                        _name = Header5->ResourceString;
                    else
                        _name = "anim" + Index;

                if (Header5->_origPathOffset > 0)
                    _originalPath = Header5->OrigPath;

                (_userEntries = new UserDataCollection()).Read(Header5->UserData);

                return Header5->Group->_numEntries > 0;
            }
            else
            {
                CHR0v4_3* header = Header4_3;
                _numFrames = header->_numFrames;
                _loop = header->_loop;
                _dataoffset = header->_dataOffset;
                _stringoffset = header->_stringOffset;

                if (_name == null)
                    if (Header4_3->ResourceString != null)
                        _name = Header4_3->ResourceString;
                    else
                        _name = "anim" + Index;

                if (Header4_3->_origPathOffset > 0)
                    _originalPath = Header4_3->OrigPath;

                return Header4_3->Group->_numEntries > 0;
            }
        }
Exemplo n.º 17
0
        //Initialize should only be called from parent group during parse.
        //Bones need not be imported/exported anyways
        public override bool OnInitialize()
        {
            MDL0Bone* header = Header;

            SetSizeInternal(header->_headerLen);

            //Assign true parent using parent header offset
            int offset = header->_parentOffset;
            //Offsets are always < 0, because parent entries are listed before children
            if (offset < 0)
            {
                //Get address of parent header
                MDL0Bone* pHeader = (MDL0Bone*)((byte*)header + offset);
                //Search bone list for matching header
                foreach (MDL0BoneNode bone in Parent._children)
                    if (pHeader == bone.Header)
                    {
                        _parent = bone;
                        break;
                    }
            }

            //Conditional name assignment
            if ((_name == null) && (header->_stringOffset != 0))
                _name = header->ResourceString;

            //Assign fields
            _flags1 = (BoneFlags)(uint)header->_flags;
            _flags2 = (BillboardFlags)(uint)header->_bbFlags;
            _bbNodeId = header->_bbNodeId;
            _nodeIndex = header->_nodeId;
            _boneIndex = header->_index;
            _headerLen = header->_headerLen;
            _mdl0Offset = header->_mdl0Offset;
            _stringOffset = header->_stringOffset;
            _parentOffset = header->_parentOffset;
            _firstChildOffset = header->_firstChildOffset;
            _nextOffset = header->_nextOffset;
            _prevOffset = header->_prevOffset;
            _userDataOffset = header->_userDataOffset;

            if (_flags2 != 0 && _flags1.HasFlag(BoneFlags.HasGeometry))
                Model._billboardBones.Add(this); //Update mesh in T-Pose

            _bindState = _frameState = new FrameState(header->_scale, (Vector3)header->_rotation, header->_translation);
            _bindMatrix = _frameMatrix = header->_transform;
            _inverseBindMatrix = _inverseFrameMatrix = header->_transformInv;

            _bMin = header->_boxMin;
            _bMax = header->_boxMax;

            (_userEntries = new UserDataCollection()).Read(header->UserDataAddress);

            //We don't want to process children because not all have been parsed yet.
            //Child assigning will be handled by the parent group.
            return false;
        }
Exemplo n.º 18
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _billboardBones = new List<MDL0BoneNode>();
            _errors = new List<string>();
            _influences = new InfluenceManager();

            MDL0Header* header = Header;

            if (_name == null && header->StringOffset != 0)
                _name = header->ResourceString;

            MDL0Props* props = header->Properties;

            _version = header->_header._version;
            _scalingRule = props->_scalingRule;
            _texMtxMode = props->_texMatrixMode;
            _numFacepoints = props->_numVertices;
            _numFaces = props->_numFaces;
            _origPathOffset = props->_origPathOffset;
            _numNodes = props->_numNodes;
            _needsNrmMtxArray = props->_needNrmMtxArray != 0;
            _needsTexMtxArray = props->_needTexMtxArray != 0;
            _min = props->_minExtents;
            _max = props->_maxExtents;
            _enableExtents = props->_enableExtents != 0;
            _envMtxMode = props->_envMtxMode;

            if (props->_origPathOffset > 0 && props->_origPathOffset < header->_header._size)
                _originalPath = props->OrigPath;

            (_userEntries = new UserDataCollection()).Read(header->UserData);

            return true;
        }
Exemplo n.º 19
0
 public UserDataCollectionPropertyDescriptor(UserDataCollection coll, int idx)
     : base("#" + idx.ToString(), null)
 {
     this.collection = coll;
     this.index = idx;
 }
Exemplo n.º 20
0
 public UserDataCollectionPropertyDescriptor(UserDataCollection coll, int idx) : base("#" + idx.ToString(), null)
 {
     this.collection = coll;
     this.index      = idx;
 }
Exemplo n.º 21
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            startUpVersion = _version = Header->_version;

            if (_version == 5)
            {
                if ((_name == null) && (Header5->_stringOffset != 0))
                    _name = Header5->ResourceString;
                _loop = Header5->_loop;
                _numFrames = Header5->_numFrames;
                _matrixMode = Header5->_matrixMode;

                if (Header5->_origPathOffset > 0)
                    _originalPath = Header5->OrigPath;

                (_userEntries = new UserDataCollection()).Read(Header5->UserData);
            }
            else
            {
                if ((_name == null) && (Header4->_stringOffset != 0))
                    _name = Header4->ResourceString;
                _loop = Header4->_loop;
                _numFrames = Header4->_numFrames;
                _matrixMode = Header5->_matrixMode;

                if (Header4->_origPathOffset > 0)
                    _originalPath = Header4->OrigPath;
            }

            return Header4->Group->_numEntries > 0;
        }
        public override bool OnInitialize()
        {
            MDL0Material* header = Header;

            _initVersion = header->_pad != 0 && _replaced ? header->_pad : Model._version;

            if ((_name == null) && (header->_stringOffset != 0))
                _name = header->ResourceString;

            XFCmds.Clear();

            //Get XF Commands
            byte* pData = (byte*)header->DisplayLists(Model._version) + 0xE0;
            Top:
            if (*pData++ == 0x10)
            {
                XFData dat = new XFData();
                int count = (ushort)*(bushort*)pData; pData += 2;
                dat.addr = (XFMemoryAddr)(ushort)*(bushort*)pData; pData += 2;
                dat.values = new List<uint>();
                for (int i = 0; i < count + 1; i++)
                {
                    dat.values.Add(*(buint*)pData);
                    pData += 4;
                }
                XFCmds.Add(dat);
                goto Top;
            }

            _mdl0Offset = header->_mdl0Offset;
            _stringOffset = header->_stringOffset;
            _userDataOffset = header->UserDataOffset(_initVersion);
            _shaderOffset = header->_shaderOffset;
            _dlOffset = header->DisplayListOffset(_initVersion);
            _furDataOffset = header->FurDataOffset(_initVersion);
            _matRefOffset = header->_matRefOffset;
            _pad = header->_pad;

            _dataLen = header->_dataLen;
            _numTextures = header->_numTexGens;
            _numLights = header->_numLightChans;
            _usageFlags = new Bin32(header->_usageFlags);

            _indirectMethod1 = header->_indirectMethod1;
            _indirectMethod2 = header->_indirectMethod2;
            _indirectMethod3 = header->_indirectMethod3;
            _indirectMethod4 = header->_indirectMethod4;

            _normMapRefLight1 = header->_normMapRefLight1;
            _normMapRefLight2 = header->_normMapRefLight2;
            _normMapRefLight3 = header->_normMapRefLight3;
            _normMapRefLight4 = header->_normMapRefLight4;

            _ssc = header->_activeTEVStages;
            _clip = header->_numIndTexStages;
            _transp = header->_enableAlphaTest;

            _lSet = header->_lightSet;
            _fSet = header->_fogSet;

            _cull = (CullMode)(int)header->_cull;

            if ((-header->_mdl0Offset + (int)header->DisplayListOffset(_initVersion)) % 0x20 != 0)
            {
                Model._errors.Add("Material " + Index + " has an improper align offset.");
                SignalPropertyChange();
            }

            mode = header->DisplayLists(_initVersion);
            _alphaFunc = mode->AlphaFunction;
            _zMode = mode->ZMode;
            _blendMode = mode->BlendMode;
            _constantAlpha = mode->ConstantAlpha;

            _tevColorBlock = *header->TevColorBlock(_initVersion);
            _tevKonstBlock = *header->TevKonstBlock(_initVersion);
            _indMtx = *header->IndMtxBlock(_initVersion);

            MDL0TexSRTData* TexMatrices = header->TexMatrices(_initVersion);

            _layerFlags = TexMatrices->_layerFlags;
            _texMtxFlags = TexMatrices->_mtxFlags;

            MDL0MaterialLighting* Light = header->Light(_initVersion);

            (_chan1 = Light->Channel1)._parent = this;
            (_chan2 = Light->Channel2)._parent = this;

            c1 = CReg2Color;
            c2 = CReg2Color;
            c3 = CReg2Color;

            k1 = KReg0Color;
            k2 = KReg1Color;
            k3 = KReg2Color;
            k3 = KReg3Color;

            clr1 = C1MaterialColor;
            clr2 = C2MaterialColor;

            amb1 = C1AmbientColor;
            amb2 = C2AmbientColor;

            (_userEntries = new UserDataCollection()).Read(header->UserData(_initVersion));

            return true;
        }
Exemplo n.º 23
0
        //Initialize should only be called from parent group during parse.
        //Bones need not be imported/exported anyways
        public override bool OnInitialize()
        {
            MDL0Bone *header = Header;

            SetSizeInternal(header->_headerLen);

            //Assign true parent using parent header offset
            int offset = header->_parentOffset;

            //Offsets are always < 0, because parent entries are listed before children
            if (offset < 0)
            {
                //Get address of parent header
                MDL0Bone *pHeader = (MDL0Bone *)((byte *)header + offset);
                //Search bone list for matching header
                foreach (MDL0BoneNode bone in Parent._children)
                {
                    if (pHeader == bone.Header)
                    {
                        _parent = bone;
                        break;
                    }
                }
            }

            //Conditional name assignment
            if ((_name == null) && (header->_stringOffset != 0))
            {
                _name = header->ResourceString;
            }

            //Assign fields
            _flags1           = (BoneFlags)(uint)header->_flags;
            _flags2           = (BillboardFlags)(uint)header->_bbFlags;
            _bbNodeId         = header->_bbNodeId;
            _nodeIndex        = header->_nodeId;
            _boneIndex        = header->_index;
            _headerLen        = header->_headerLen;
            _mdl0Offset       = header->_mdl0Offset;
            _stringOffset     = header->_stringOffset;
            _parentOffset     = header->_parentOffset;
            _firstChildOffset = header->_firstChildOffset;
            _nextOffset       = header->_nextOffset;
            _prevOffset       = header->_prevOffset;
            _userDataOffset   = header->_userDataOffset;

            if (_flags2 != 0 && _flags1.HasFlag(BoneFlags.HasGeometry))
            {
                Model._billboardBones.Add(this); //Update mesh in T-Pose
            }
            _bindState         = _frameState = new FrameState(header->_scale, (Vector3)header->_rotation, header->_translation);
            _bindMatrix        = _frameMatrix = header->_transform;
            _inverseBindMatrix = _inverseFrameMatrix = header->_transformInv;

            _bMin = header->_boxMin;
            _bMax = header->_boxMax;

            (_userEntries = new UserDataCollection()).Read(header->UserDataAddress);

            //We don't want to process children because not all have been parsed yet.
            //Child assigning will be handled by the parent group.
            return(false);
        }
Exemplo n.º 24
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _palette = null;

            if ((_name == null) && (Header1->_stringOffset != 0))
                _name = Header1->ResourceString;

            _version = Header1->_bresEntry._version;
            //_numColors = Header->_numEntries;
            _format = Header1->PaletteFormat;

            if (_version == 3)
                (_userEntries = new UserDataCollection()).Read(Header3->UserData);

            return false;
        }
Exemplo n.º 25
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _version = Header->_version;
            if (_version == 4)
            {
                _numFrames = Header4->_frames;
                _origPathOffset = Header4->_origPathOffset;
                _loop = Header4->_loop;

                if ((_name == null) && (Header4->_stringOffset != 0))
                    _name = Header4->ResourceString;

                if (Header4->_origPathOffset > 0)
                    _originalPath = Header4->OrigPath;

                (_userEntries = new UserDataCollection()).Read(Header4->UserData);

                return Header4->Group->_numEntries > 0;
            }
            else
            {
                _numFrames = Header3->_frames;
                _origPathOffset = Header3->_origPathOffset;
                _loop = Header3->_loop;

                if ((_name == null) && (Header3->_stringOffset != 0))
                    _name = Header3->ResourceString;

                if (Header3->_origPathOffset > 0)
                    _originalPath = Header3->OrigPath;

                return Header3->Group->_numEntries > 0;
            }
        }
Exemplo n.º 26
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _textureFiles.Clear();
            _paletteFiles.Clear();

            _version = Header->_version;

            int texPtr, pltPtr;
            if (_version == 4)
            {
                PAT0v4* header = Header4;
                _frameCount = header->_numFrames;
                _loop = header->_loop;
                texPtr = header->_numTexPtr;
                pltPtr = header->_numPltPtr;
                if ((_name == null) && (header->_stringOffset != 0))
                    _name = header->ResourceString;

                if (Header4->_origPathOffset > 0)
                    _originalPath = Header4->OrigPath;

                (_userEntries = new UserDataCollection()).Read(Header4->UserData);
            }
            else
            {
                PAT0v3* header = Header3;
                _frameCount = header->_numFrames;
                _loop = header->_loop;
                texPtr = header->_numTexPtr;
                pltPtr = header->_numPltPtr;

                if ((_name == null) && (header->_stringOffset != 0))
                    _name = header->ResourceString;

                if (Header3->_origPathOffset > 0)
                    _originalPath = Header3->OrigPath;
            }

            //Get texture strings
            for (int i = 0; i < texPtr; i++)
                _textureFiles.Add(Header3->GetTexStringEntry(i));

            //Get palette strings
            for (int i = 0; i < pltPtr; i++)
                _paletteFiles.Add(Header3->GetPltStringEntry(i));

            //Link all entries
            Populate();

            return Header3->Group->_numEntries > 0;
        }
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _flags1 = (SCN0CameraFlags)(ushort)Data->_flags1;
            _flags2 = Data->_flags2;
            _type = (SCN0CameraType)((ushort)_flags2 & 1);
            _projType = (ProjectionType)(int)Data->_projType;

            for (int x = 0; x < 15; x++)
                SetKeys(x, new KeyframeArray(FrameCount + 1));

            bint* values = (bint*)&Data->_position;

            if (Name != "<null>")
                for (int i = 0; i < 15; i++)
                {
                    //if (((int)_flags1 & (int)Ordered[i]) == 0)
                    //    SCN0Node.strings[(int)((&values[i] - Parent.Parent.WorkingUncompressed.Address + values[i]))] = "Camera" + Index + " Keys " + Ordered[i].ToString();

                    DecodeFrames(GetKeys(i), &values[i], (int)_flags1, (int)Ordered[i]);
                }

            _posX._linear = true;
            _posY._linear = true;
            _posZ._linear = true;

            _aimX._linear = true;
            _aimY._linear = true;
            _aimZ._linear = true;

            (_userEntries = new UserDataCollection()).Read(Data->UserData);

            return false;
        }
Exemplo n.º 28
0
        public override bool OnInitialize()
        {
            //Read common header
            base.OnInitialize();

            //Initialize defaults
            _numEntries  = new int[] { 0, 0 };
            _solidColors = new RGBAPixel[2];
            _constants   = new bool[] { true, true };

            //Read header values
            _nonSpecLightId = Data->_nonSpecLightId;
            _fixedFlags     = (FixedFlags)(ushort)Data->_fixedFlags;
            _typeUsageFlags = (ushort)Data->_usageFlags;
            _distFunc       = Data->_distFunc;
            _spotFunc       = Data->_spotFunc;

            //Read user data
            (_userEntries = new UserDataCollection()).Read(Data->UserData);

            //Don't bother reading data if the entry is null
            if (Name == "<null>")
            {
                return(false);
            }

            //Read light visibility array
            if (!_fixedFlags.HasFlag(FixedFlags.EnabledConstant) && !_replaced)
            {
                _entryCount = Scene.FrameCount;
                int numBytes = _entryCount.Align(32) / 8;

                _data = new byte[numBytes];
                Marshal.Copy((IntPtr)Data->VisBitEntries, _data, 0, numBytes);
            }
            else
            {
                _entryCount = 0;
                _data       = new byte[0];
            }

            //Read light color
            ReadColors(
                (uint)_fixedFlags,
                (uint)FixedFlags.ColorConstant,
                ref _solidColors[0],
                ref _lightColor,
                Scene.FrameCount,
                Data->_lightColor.Address,
                ref _constants[0],
                ref _numEntries[0]);

            if (!SpecularEnabled)
            {
                _constants[1] = (_fixedFlags & FixedFlags.SpecColorConstant) != 0;
                return(false);
            }

            //Read light specular color
            ReadColors(
                (uint)_fixedFlags,
                (uint)FixedFlags.SpecColorConstant,
                ref _solidColors[1],
                ref _specColor,
                Scene.FrameCount,
                Data->_specularColor.Address,
                ref _constants[1],
                ref _numEntries[1]);

            return(false);
        }
Exemplo n.º 29
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            _textureFiles.Clear();
            _paletteFiles.Clear();

            int texPtr, pltPtr;

            if (_version == 4)
            {
                PAT0v4 *header = Header4;
                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;
                texPtr     = header->_numTexPtr;
                pltPtr     = header->_numPltPtr;
                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(header->UserData);

                //Get texture strings
                for (int i = 0; i < texPtr; i++)
                {
                    _textureFiles.Add(header->GetTexStringEntry(i));
                }

                //Get palette strings
                for (int i = 0; i < pltPtr; i++)
                {
                    _paletteFiles.Add(header->GetPltStringEntry(i));
                }

                return(header->Group->_numEntries > 0);
            }
            else
            {
                PAT0v3 *header = Header3;
                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;
                texPtr     = header->_numTexPtr;
                pltPtr     = header->_numPltPtr;

                if ((_name == null) && (header->_stringOffset != 0))
                {
                    _name = header->ResourceString;
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                //Get texture strings
                for (int i = 0; i < texPtr; i++)
                {
                    _textureFiles.Add(header->GetTexStringEntry(i));
                }

                //Get palette strings
                for (int i = 0; i < pltPtr; i++)
                {
                    _paletteFiles.Add(header->GetPltStringEntry(i));
                }

                return(header->Group->_numEntries > 0);
            }
        }
Exemplo n.º 30
0
        public override bool OnInitialize()
        {
            base.OnInitialize();

            startUpVersion = _version = Header->_version;
            _strings.Clear();

            if (_version == 4)
            {
                if ((_name == null) && (Header4->_stringOffset != 0))
                    _name = Header4->ResourceString;

                _numFrames = Header4->_numFrames;
                _loop = Header4->_loop;

                bint* stringOffset = Header4->StringEntries;
                for (int i = 0; i < Header4->_numEntries; i++)
                    _strings.Add(new String((sbyte*)stringOffset + stringOffset[i]));

                if (Header4->_origPathOffset > 0)
                    _originalPath = Header4->OrigPath;

                (_userEntries = new UserDataCollection()).Read(Header4->UserData);

                return Header4->Group->_numEntries > 0;
            }
            else
            {
                if ((_name == null) && (Header3->_stringOffset != 0))
                    _name = Header3->ResourceString;

                _numFrames = Header3->_numFrames;
                _loop = Header3->_loop;

                bint* stringOffset = Header3->StringEntries;
                for (int i = 0; i < Header3->_numEntries; i++)
                    _strings.Add(new String((sbyte*)stringOffset + stringOffset[i]));

                if (Header3->_origPathOffset > 0)
                    _originalPath = Header3->OrigPath;

                return Header3->Group->_numEntries > 0;
            }
        }