Exemple #1
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.collisionObject != -1)
                {
                    this.collisionObject = blockReferences[this.collisionObject];
                }
            }
            base.Write(header, writer);
            writer.Write(this.flags);
            if ((header.GetUserVersion() >= 11U) && (header.GetUserVersion2() >= 26U))
            {
                writer.Write(this.flags2);
            }
            Utils.WriteVector3(writer, this.translation);
            Utils.WriteMatrix33(writer, this.rotation);
            writer.Write(this.scale);
            if ((header.GetVersion() <= 335544325U) || (header.GetUserVersion() <= 11U))
            {
                writer.Write((uint)this.properties.Count);
                for (int index = 0; (long)index < this.properties.Count; ++index)
                {
                    if (blockReferences.Count > 0)
                    {
                        this.properties[index] = blockReferences[this.properties[index]];
                    }
                    writer.Write(this.properties[index]);
                }
            }
            writer.Write(this.collisionObject);
        }
Exemple #2
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            base.Write(header, writer);
            writer.Write(this.numChildren);
            for (int index = 0; (long)index < (long)this.numChildren; ++index)
            {
                if (blockReferences.Count > 0)
                {
                    if (this.children[index] != -1)
                    {
                        this.children[index] = blockReferences[this.children[index]];
                    }
                }
                writer.Write(this.children[index]);
            }
            if (header.GetUserVersion2() < 130)
            {
                writer.Write(this.numEffects);
                for (int index = 0; (long)index < (long)this.numEffects; ++index)
                {
                    if (blockReferences.Count > 0)
                    {
                        if (this.effects[index] != -1)
                        {
                            this.effects[index] = blockReferences[this.effects[index]];
                        }
                    }
                    writer.Write(this.effects[index]);
                }
            }
        }
Exemple #3
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.data != -1)
                {
                    this.data = blockReferences[this.data];
                }
                if (this.skinPartition != -1)
                {
                    this.skinPartition = blockReferences[this.skinPartition];
                }
                if (this.skeletonRoot != -1)
                {
                    this.skeletonRoot = blockReferences[this.skeletonRoot];
                }
            }
            base.Write(header, writer);
            writer.Write(this.data);
            writer.Write(this.skinPartition);
            writer.Write(this.skeletonRoot);
            writer.Write(this.numBones);
            for (int index = 0; index < this.numBones; index++)
            {
                if (this.bones[index] != -1)
                {
                    this.bones[index] = blockReferences[this.bones[index]];
                }
                writer.Write(this.bones[index]);
            }
        }
Exemple #4
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            base.Write(header, writer);
            writer.Write(this.numBones);
            for (int index = 0; (long)index < (long)this.numBones; ++index)
            {
                if (blockReferences.Count > 0)
                {
                    if (this.bones[index] != -1)
                    {
                        this.bones[index] = blockReferences[this.bones[index]];
                    }
                }
                writer.Write(this.bones[index]);
            }
            writer.Write(this.numBones2);
            for (int index = 0; (long)index < (long)this.numBones2; ++index)
            {
                if (blockReferences.Count > 0)
                {
                    if (this.bones2[index] != -1)
                    {
                        this.bones2[index] = blockReferences[this.bones2[index]];
                    }
                }
                writer.Write(this.bones2[index]);
            }
        }
Exemple #5
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.interpolator != -1)
                {
                    this.interpolator = blockReferences[this.interpolator];
                }
            }
            base.Write(header, writer);
            writer.Write(this.interpolator);
        }
Exemple #6
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.body != -1)
                {
                    this.body = blockReferences[this.body];
                }
            }
            base.Write(header, writer);
            writer.Write(this.flags);
            writer.Write(this.body);
        }
Exemple #7
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.data != 1)
                {
                    this.data = blockReferences[this.data];
                }
            }
            base.Write(header, writer);
            Utils.WriteVector3(writer, this.value);
            writer.Write(this.data);
        }
Exemple #8
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.shape != -1)
                {
                    this.shape = blockReferences[this.shape];
                }
            }
            base.Write(header, writer);
            writer.Write(this.shape);
            writer.Write(this.stuff);
        }
Exemple #9
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.controller != -1)
                {
                    this.controller = blockReferences[this.controller];
                }
            }
            base.Write(header, writer);
            if (header.GetVersion() <= 335544325U)
            {
                if (this.name != "")
                {
                    Utils.WriteSizedString(writer, this.name);
                }
                else if (this.nameIdx == -1)
                {
                    Utils.WriteSizedString(writer, "Scene Root");
                }
                else
                {
                    Utils.WriteSizedString(writer, header.GetString((uint)this.nameIdx));
                }
            }
            else
            {
                writer.Write(this.nameIdx);
            }
            writer.Write(this.extraData.Count);
            if (this.extraData.Count > 0)
            {
                for (int index = 0; index < this.extraData.Count; index++)
                {
                    if (blockReferences.Count > 0)
                    {
                        if (this.extraData[index] != -1)
                        {
                            this.extraData[index] = blockReferences[this.extraData[index]];
                        }
                    }
                    writer.Write(this.extraData[index]);
                }
            }
            writer.Write(controller);
        }
Exemple #10
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.multiBound != -1)
                {
                    this.multiBound = blockReferences[this.multiBound];
                }
            }
            base.Write(header, writer);
            writer.Write(this.multiBound);
            if (header.GetUserVersion() >= 12)
            {
                writer.Write(this.cullMode);
            }
        }
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.target != -1)
                {
                    this.target = blockReferences[this.target];
                }
                if (this.data != -1)
                {
                    this.data = blockReferences[this.data];
                }
            }
            base.Write(header, writer);
            writer.Write(this.target);
            writer.Write(this.stuff);
            writer.Write(this.data);
        }
Exemple #12
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.shape != -1)
                {
                    this.shape = blockReferences[this.shape];
                }
            }
            base.Write(header, writer);
            writer.Write(this.shape);
            writer.Write(this.stuff);
            writer.Write(this.moppSize);
            writer.Write(this.stuff2);
            for (int index = 0; index < this.moppSize; index++)
            {
                writer.Write(this.moppData[index]);
            }
        }
Exemple #13
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.nextController != -1)
                {
                    this.nextController = blockReferences[this.nextController];
                }
                if (this.target != -1)
                {
                    this.target = blockReferences[this.target];
                }
            }
            base.Write(header, writer);
            writer.Write(this.nextController);
            writer.Write(this.flags);
            writer.Write(this.frequency);
            writer.Write(this.phase);
            writer.Write(this.startTime);
            writer.Write(this.stopTime);
            writer.Write(this.target);
        }
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.textureSet != -1)
                {
                    this.textureSet = blockReferences[this.textureSet];
                }
            }
            base.Write(header, writer);
            writer.Write(this.Flags);
            writer.Write(this.shaderType);
            writer.Write(this.shaderFlags);
            writer.Write(this.unknownInt2);
            writer.Write(this.envmapScale);
            writer.Write(this.unknownInt3);
            writer.Write(this.textureSet);
            writer.Write(this.unknownFloat2);
            writer.Write(this.refractionPeriod);
            writer.Write(this.unknownFloat4);
            writer.Write(this.unknownFloat5);
        }
Exemple #15
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            base.Write(header, writer);
            writer.Write(this.stuff);
            writer.Write(this.numConstraints);
            for (int index = 0; index < numConstraints; index++)
            {
                if (blockReferences.Count > 0)
                {
                    this.constraints[index] = blockReferences[this.constraints[index]];
                }
                writer.Write(this.constraints[index]);
            }
            if (header.GetUserVersion() <= 11)
            {
                writer.Write(this.unknownInt9);
            }
            else
            {
                writer.Write(this.unknownInt91);
            }
        }
Exemple #16
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.skinInstance != -1)
                {
                    this.skinInstance = blockReferences[this.skinInstance];
                }
                if (this.bsProperties[0] != -1)
                {
                    this.bsProperties[0] = blockReferences[this.bsProperties[0]];
                }
                if (this.bsProperties[1] != -1)
                {
                    this.bsProperties[1] = blockReferences[this.bsProperties[1]];
                }
            }
            base.Write(header, writer);

            /*if (header.GetUserVersion2() == 100 || header.GetUserVersion2() == 130)
             * {
             *  Utils.WriteVector3(writer, this.center);
             *  writer.Write(this.radius);
             *  writer.Write(this.skinInstance);
             *  writer.Write(this.bsProperties[0]);
             *  writer.Write(this.bsProperties[1]);
             * }
             * else*/
            {
                writer.Write(this.data);
                writer.Write(this.skinInstance);
                if (header.GetVersion() > 335544325U)
                {
                    writer.Write(this.numMaterials);
                    for (int index = 0; (long)index < (long)this.numMaterials; ++index)
                    {
                        writer.Write(this.materialNames[index]);
                    }
                    for (int index = 0; (long)index < (long)this.numMaterials; ++index)
                    {
                        writer.Write(this.materialExtraData[index]);
                    }
                    writer.Write(this.activeMaterial);
                    Utils.WriteBool(writer, this.dirtyFlag);
                    if (header.GetUserVersion() == 12)
                    {
                        writer.Write(this.bsProperties[0]);
                        writer.Write(this.bsProperties[1]);
                    }
                }
                else
                {
                    Utils.WriteBool(writer, this.hasShader);
                    if (!this.hasShader)
                    {
                        return;
                    }
                    Utils.WriteSizedString(writer, this.shaderName);
                    writer.Write(this.unknownInt);
                }
            }
        }
Exemple #17
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.textureSet != -1)
                {
                    this.textureSet = blockReferences[this.textureSet];
                }
            }
            writer.Write(this.shaderType);
            base.Write(header, writer);
            writer.Write(this.shaderFlags1);
            writer.Write(this.shaderFlags2);
            Utils.WriteUVCoord(writer, this.uvOffset);
            Utils.WriteUVCoord(writer, this.uvScale);
            writer.Write(this.textureSet);
            Utils.WriteColor3(writer, this.emissiveColor);
            writer.Write(this.emissiveMultiple);
            if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
            {
                writer.Write(this.wetMaterialIdx);
            }
            writer.Write(this.textureClampMode);
            writer.Write(this.alpha);
            writer.Write(this.refractionStrength);
            writer.Write(this.glossiness);
            Utils.WriteColor3(writer, this.specularColor);
            writer.Write(this.specularStrength);
            if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
            {
                writer.Write(this.subsurfaceRolloff);
                writer.Write(this.unkownFloat1);
                writer.Write(this.backlightPower);
                writer.Write(this.grayscaleToPaletteScale);
                writer.Write(this.fresnelPower);
                writer.Write(this.wetnessSpecScale);
                writer.Write(this.wetnessSpecPower);
                writer.Write(this.wetnessMinVar);
                writer.Write(this.wetnessEnvMapScale);
                writer.Write(this.wetnessFresnelPower);
                writer.Write(this.wetnessMetalness);
            }
            else
            {
                writer.Write(this.lightingEffect1);
                writer.Write(this.lightingEffect2);
            }
            if ((int)this.shaderType == 1)
            {
                writer.Write(this.environmentMapScale);
            }
            else if ((int)this.shaderType == 5)
            {
                Utils.WriteColor3(writer, this.skinTintColor);
            }
            else if ((int)this.shaderType == 6)
            {
                Utils.WriteColor3(writer, this.hairTintColor);
            }
            else if ((int)this.shaderType == 7)
            {
                writer.Write(this.maxPasses);
                writer.Write(this.scale);
            }
            else if ((int)this.shaderType == 11)
            {
                writer.Write(this.parallaxInnerLayerThickness);
                writer.Write(this.parallaxRefractionScale);
                Utils.WriteUVCoord(writer, this.parallaxInnerLayerTextureScale);
                writer.Write(this.parallaxEnvmapStrength);
            }
            else if ((int)this.shaderType == 14)
            {
                Utils.WriteVector4(writer, this.sparkleParameters);
            }
            else
            {
                if ((int)this.shaderType != 16)
                {
                    return;
                }
                writer.Write(this.eyeCubemapScale);
                Utils.WriteVector3(writer, this.leftEyeReflectionCenter);
                Utils.WriteVector3(writer, this.rightEyeReflectionCenter);
            }
        }
Exemple #18
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.skinInstance != -1)
                {
                    this.skinInstance = blockReferences[this.skinInstance];
                }
                if (this.bsProperties[0] != -1)
                {
                    this.bsProperties[0] = blockReferences[this.bsProperties[0]];
                }
                if (this.bsProperties[1] != -1)
                {
                    this.bsProperties[1] = blockReferences[this.bsProperties[1]];
                }
            }
            base.Write(header, writer);
            Utils.WriteVector3(writer, this.center);
            writer.Write(this.radius);
            writer.Write(this.skinInstance);
            writer.Write(this.bsProperties[0]);
            writer.Write(this.bsProperties[1]);
            this.vertexSize  = 0;
            this.vertexFlags = 0;
            // 16 = vertex
            // 32 = uv
            // 128 = normals
            // 256 = tangents
            // 512 = vertex colors
            // 1024 = skinned
            // 4096 = male eyes
            // 16384 = full precision
            if (this.vertices.Count > 0)
            {
                this.vertexFlags |= 16;
                this.vertexSize  += 2;
            }
            if (this.uvCoords.Count >= 0)
            {
                this.vertexFlags |= 32;
                this.vertexSize++;
            }
            if (this.normals.Count > 0)
            {
                this.vertexFlags |= 128;
                this.vertexSize  += 2;
            }
            if (this.tangents.Count > 0)
            {
                this.vertexFlags |= 256;
                this.vertexSize  += 2;
            }
            if (this.vertexColors.Count > 0)
            {
                this.vertexFlags |= 512;
                this.vertexSize++;
                this.vertexFlag4 = 7;
            }
            writer.Write(this.vertexSize);
            if (((this.vertexFlags & 16384) == 16384) || (header.GetUserVersion2() == 100))
            {
                this.floatSize = 4;
            }
            writer.Write(this.floatSize);
            writer.Write(this.vertexFlag3);
            writer.Write(this.vertexFlag4);
            writer.Write(this.vertexFlag5);
            writer.Write(this.vertexFlags);
            writer.Write(this.vertexFlag8);
            if (header.GetUserVersion2() == 100)
            {
                writer.Write((ushort)this.numTriangles);
            }
            else
            {
                writer.Write(this.numTriangles);
            }
            writer.Write(this.numVertices);
            writer.Write(GetDataSize(header));

            if (this.dataSize > 0)
            {
                for (int index = 0; index < this.numVertices; index++)
                {
                    if ((this.vertexFlags & 16) == 16)
                    {
                        if (header.GetUserVersion2() == 100 || (this.vertexFlags & 16384) == 16384)
                        {
                            writer.Write(this.vertices[index][0]);
                            writer.Write(this.vertices[index][1]);
                            writer.Write(this.vertices[index][2]);
                            if (this.bitangents.Count > 0)
                            {
                                writer.Write(this.bitangents[index][0]);
                            }
                            else
                            {
                                writer.Write((uint)0);
                            }
                        }
                        else
                        {
                            writer.Write(Utils.FloatToShort(this.vertices[index][0]));
                            writer.Write(Utils.FloatToShort(this.vertices[index][1]));
                            writer.Write(Utils.FloatToShort(this.vertices[index][2]));
                            if (this.bitangents.Count > 0)
                            {
                                writer.Write(Utils.FloatToShort(this.bitangents[index][0]));
                            }
                            else
                            {
                                writer.Write((ushort)0);
                            }
                        }
                    }
                    if ((this.vertexFlags & 32) == 32)
                    {
                        writer.Write(Utils.FloatToShort(this.uvCoords[index][0]));
                        writer.Write(Utils.FloatToShort(this.uvCoords[index][1]));
                    }
                    if ((this.vertexFlags & 128) == 128)
                    {
                        writer.Write(Utils.FloatToByte(this.normals[index][0]));
                        writer.Write(Utils.FloatToByte(this.normals[index][1]));
                        writer.Write(Utils.FloatToByte(this.normals[index][2]));
                        if (this.bitangents.Count > 0)
                        {
                            writer.Write(Utils.FloatToByte(this.bitangents[index][1]));
                        }
                        else
                        {
                            writer.Write((byte)0);
                        }
                    }
                    if ((this.vertexFlags & 256) == 256)
                    {
                        writer.Write(Utils.FloatToByte(this.tangents[index][0]));
                        writer.Write(Utils.FloatToByte(this.tangents[index][1]));
                        writer.Write(Utils.FloatToByte(this.tangents[index][2]));
                        if (this.bitangents.Count > 0)
                        {
                            writer.Write(Utils.FloatToByte(this.bitangents[index][2]));
                        }
                        else
                        {
                            writer.Write((byte)0);
                        }
                    }
                    if ((this.vertexFlags & 512) == 512)
                    {
                        writer.Write((byte)(this.vertexColors[index][0] * 255));
                        writer.Write((byte)(this.vertexColors[index][1] * 255));
                        writer.Write((byte)(this.vertexColors[index][2] * 255));
                        writer.Write((byte)(this.vertexColors[index][3] * 255));
                    }
                    if ((this.vertexFlags & 1024) == 1024)
                    {
                        Console.WriteLine("boneweight not supported yet");
                        System.Environment.Exit(667);
                    }
                    if ((this.vertexFlags & 4096) == 4096)
                    {
                        writer.Write((uint)0);
                    }
                }
            }
            for (int index = 0; index < this.triangles.Count; ++index)
            {
                Utils.WriteTriangle(writer, this.triangles[index]);
            }
            if (header.GetUserVersion2() == 100)
            {
                writer.Write(particleDataSize);
            }
        }