Beispiel #1
0
 public void WriteChildIndices(BINAWriter writer, string prefix)
 {
     foreach (var node in Nodes)
     {
         node.WriteChildIndices(writer, prefix);
     }
 }
Beispiel #2
0
        public override void Save(Stream fileStream)
        {
            var writer = new BINAWriter(fileStream, Header);

            writer.AddOffset("VertexCountOffsetOffset");
            writer.Write(0); //PostFaceOffset (Not needed???)
            writer.FillInOffset("VertexCountOffsetOffset", false);
            writer.AddOffset("VertexCountOffset");
            writer.AddOffset("FaceCountOffset");

            writer.FillInOffset("VertexCountOffset", false);
            writer.Write(Vertices.Count);
            for (int i = 0; i < Vertices.Count; i++)
            {
                writer.Write(Vertices[i]);
            }

            writer.FillInOffset("FaceCountOffset", false);
            writer.Write(Faces.Count);
            for (int i = 0; i < Faces.Count; i++)
            {
                writer.Write(Faces[i].Vertex1);
                writer.Write(Faces[i].Vertex2);
                writer.Write(Faces[i].Vertex3);
                writer.WriteNulls(2);
                writer.Write(Faces[i].Flags);
            }

            writer.FinishWrite(Header);
        }
Beispiel #3
0
        public override void Save(Stream fileStream)
        {
            var writer = new BINAWriter(fileStream, Header);

            char[] WTXTMagic = { 'W', 'T', 'X', 'T' };
            writer.Write(WTXTMagic);
            writer.AddString($"mstName", $"{Name}");
            writer.Write(entries.Count);
            for (int i = 0; i < entries.Count; i++)
            {
                writer.AddString($"nameOffset{i}", $"{entries[i].Name}");
                writer.AddOffset($"textOffset{i}");
                writer.AddOffset($"placeholderOffset{i}");
            }
            for (int i = 0; i < entries.Count; i++)
            {
                writer.FillInOffset($"textOffset{i}", false);
                writer.WriteNullTerminatedStringUTF16(entries[i].Text);
            }
            for (int i = 0; i < entries.Count; i++)
            {
                writer.FillInOffset($"placeholderOffset{i}", false);
                writer.WriteNullTerminatedString(entries[i].Placeholder);
            }
            writer.FinishWrite(Header);
        }
Beispiel #4
0
        public override void Save(Stream fileStream)
        {
            // Header
            var header = new BINAv1Header();
            var writer = new BINAWriter(fileStream, header);

            writer.WriteSignature(Signature);

            // Texture
            writer.AddString("textureName", Texture);

            // Placeholders
            writer.Write((uint)Entries.Count);
            writer.AddOffset("placeholderEntriesPos");

            writer.FillInOffset("placeholderEntriesPos", false);
            for (int i = 0; i < Entries.Count; i++)
            {
                writer.AddString($"placeholderName{i}", Entries[i].Placeholder);
                writer.Write(Entries[i].X);
                writer.Write(Entries[i].Y);
                writer.Write(Entries[i].Width);
                writer.Write(Entries[i].Height);
            }

            writer.FinishWrite(header);
        }
Beispiel #5
0
        public override void Save(Stream fileStream)
        {
            // Header
            var writer = new BINAWriter(fileStream, Header);

            writer.AddString("gismOffset", Signature);
            writer.Write(UnknownBoolean1);
            writer.Write((uint)Gismos.Length);

            // Containers
            writer.AddOffset("containerOffset");
            writer.FillInOffset("containerOffset", false);

            // Container 1
            for (int i = 0; i < Gismos.Length; ++i)
            {
                var gismo = Gismos[i];
                writer.AddString($"fileNameOffset_{i}", gismo.FileName);
                writer.AddString($"fileNameOffset2_{i}", gismo.FileName);
                writer.AddString($"unknownOffset1_{i}", gismo.FileName); // TODO
                writer.Write(gismo.Unknown1);

                writer.Write(gismo.Unknown2);
                writer.Write(gismo.Unknown3);
                writer.Write((gismo.DoesAnimate) ? 1u : 0u);
                writer.AddOffset($"havokOffset_{i}");

                writer.Write((gismo.UnknownBoolean1) ? 1u : 0u);
                writer.AddOffset($"containerTwoOffset_{i}");
            }

            // Havok Array
            for (int i = 0; i < Gismos.Length; ++i)
            {
                writer.FillInOffset($"havokOffset_{i}", false);
                writer.WriteNulls(4); // TODO: Figure out what this is
                writer.AddString($"havokNameOffset_{i}", Gismos[i].HavokName);
            }

            // Container 2
            for (int i = 0; i < Gismos.Length; ++i)
            {
                var gismo = Gismos[i];
                writer.FillInOffset($"containerTwoOffset_{i}", false);

                writer.Write((gismo.UnknownBoolean2) ? 1u : 0u);
                writer.Write((gismo.UnknownBoolean3) ? 1u : 0u);

                writer.Write(gismo.Unknown5);
                writer.Write(gismo.Unknown6);
                writer.Write(gismo.Unknown7);

                writer.Write(gismo.Unknown8);
                writer.Write(gismo.RotationAmount);
                writer.Write(gismo.Unknown9);
            }

            writer.FinishWrite(Header);
        }
Beispiel #6
0
 public void WriteDataEntries(BINAWriter writer,
                              string prefix, string extension, uint id)
 {
     foreach (var node in Nodes)
     {
         node.WriteDataEntries(writer, prefix, extension, id);
     }
 }
Beispiel #7
0
 public override void Write(BINAWriter writer)
 {
     for (uint i = 0; i < CaptionCount; ++i)
     {
         writer.FixPadding(8);
         Captions[i].Write(writer, i);
     }
 }
Beispiel #8
0
 public void WriteData(BINAWriter writer, string extension)
 {
     // Write File Data
     if (Data != null && Data is DataEntry dataEntry)
     {
         dataEntry.WriteData(writer, extension, DataIndex);
     }
 }
Beispiel #9
0
 public void WriteData(BINAWriter writer,
                       string prefix, string extension)
 {
     foreach (var node in Nodes)
     {
         node.WriteData(writer, extension);
     }
 }
Beispiel #10
0
        public override sealed void Save(Stream fileStream)
        {
            // BINA Header
            var writer = new BINAWriter(fileStream, Header);

            // Data
            Write(writer);
            writer.FinishWrite(Header);
        }
        public override void Save(Stream fileStream)
        {
            // Header
            var writer = new BINAWriter(fileStream, Header);

            // SOBJ Data
            SOBJ.Write(writer, Objects, SOBJ.SOBJType.Colors);
            writer.FinishWrite(Header);
        }
Beispiel #12
0
            public void Write(BINAWriter writer, uint index)
            {
                for (uint i = 0; i < LineCount; ++i)
                {
                    Lines[i].Write(writer, index, i);
                }

                writer.Write(Unknown1);
            }
Beispiel #13
0
            public void WriteDataIndices(BINAWriter writer, string prefix)
            {
                writer.FillInOffsetLong($"{prefix}dataNodeIndicesOffset", true, false);
                for (int i = 0; i < DataNodeIndices.Count; ++i)
                {
                    writer.Write(DataNodeIndices[i]);
                }

                writer.FixPadding(8);
            }
Beispiel #14
0
        public override void Write(BINAWriter writer)
        {
            i = 0;

            // Stage Entries
            foreach (var entry in StageEntries)
            {
                entry.Write(writer);
            }
        }
Beispiel #15
0
        public static void ExportScfnt(Stream stream, string name, byte[] data)
        {
            var writer = new BINAWriter(stream, Header);

            writer.WriteSignature("KFCS1000");      // "KFC" signature
            writer.AddString("FontName", name, 8);  // Pointer to file name
            writer.WriteNulls(0x10);                // Unknown
            writer.Write((long)data.Length);        // Font size
            writer.Write(data);                     // Font data
            writer.FinishWrite(Header);             // Finalise writing
        }
Beispiel #16
0
            public void WriteDataEntries(BINAWriter writer,
                                         string prefix, string extension, uint id)
            {
                if (Data != null && Data is DataEntry dataEntry)
                {
                    writer.FillInOffsetLong(
                        $"{prefix}nodeDataOffset{Index}", true, false);

                    dataEntry.Write(writer, extension, id, DataIndex);
                }
            }
        protected bool WriteExtraParamLength(BINAWriter writer,
                                             KeyValuePair <string, SetObjectParam> customData)
        {
            switch (customData.Key)
            {
            case "RangeIn":
                writer.Write(8UL);
                return(true);
            }

            return(false);
        }
        protected void WriteTreeDataIndices(
            BINAWriter writer, NodeTree tree, string prefix)
        {
            // Data Node Indices
            writer.FillInOffsetLong($"{prefix}dataNodeIndicesOffset", true, false);
            for (int i = 0; i < tree.DataNodeIndices.Count; ++i)
            {
                writer.Write(tree.DataNodeIndices[i]);
            }

            writer.FixPadding(8);
        }
Beispiel #19
0
            public void WriteData(BINAWriter writer, string extension, int index)
            {
                if (DataType == DataEntryTypes.NotHere)
                {
                    return;
                }

                writer.FixPadding(16);
                writer.FillInOffsetLong(
                    $"{extension}fileDataOffset{index}", true, false);

                writer.Write(Data);
            }
Beispiel #20
0
            public void Write(BINAWriter writer, string prefix)
            {
                writer.Write(Nodes.Count);
                writer.Write(DataNodeIndices.Count);
                writer.AddOffset($"{prefix}nodesOffset", 8);
                writer.AddOffset($"{prefix}dataNodeIndicesOffset", 8);

                // Nodes
                writer.FillInOffsetLong($"{prefix}nodesOffset", true, false);
                foreach (var node in Nodes)
                {
                    node.Write(writer, this, prefix);
                }
            }
Beispiel #21
0
        public override void Write(BINAWriter writer)
        {
            // Slots
            WriteSlot(Unknown1);
            WriteSlot(CustomizeBody);
            WriteSlot(CustomizeHead);
            WriteSlot(CustomizeGlass);
            WriteSlot(Unknown2);
            WriteSlot(CustomizeGlove);
            WriteSlot(CustomizeShoes);
            WriteSlot(CustomizePattern);
            WriteSlot(EventMovie);
            WriteSlot(GameScore);
            WriteSlot(StageScore);
            WriteSlot(Unknown3);

            // Paths
            uint i = 0;

            WritePath(MiscPAC);
            WritePath(UnknownPath1);
            WritePath(StgMissionLUA);
            WritePath(UnknownPath2);

            writer.FinishWrite(Header);

            // Sub-Methods
            void WriteSlot(Slot slot)
            {
                if (slot == null)
                {
                    writer.Write((ushort)0);
                }
                else
                {
                    slot.Write(writer);
                }
            }

            void WritePath(string path)
            {
                if (string.IsNullOrEmpty(path))
                {
                    writer.Write(0UL);
                    return;
                }

                writer.AddString($"path{++i}", path, 8);
            }
        }
Beispiel #22
0
        public override void Save(Stream fileStream)
        {
            var writer = new BINAWriter(fileStream, Header);

            writer.Write(RangeIn);
            writer.Write(RangeDistance);

            writer.AddString("modelName", ModelName, 8);
            writer.WriteNulls(8);

            writer.AddString("skeletonName", SkeletonName, 8);
            writer.WriteNulls(8);

            writer.Write((uint)BoundingShape);
            writer.Write(BoundingSize);

            writer.AddString("meshName", MeshName, 8);
            writer.WriteNulls(16);

            writer.Write(ShapeOffset);
            writer.WriteNulls(4);
            writer.Write(ShapeSizeOffset);

            writer.Write((byte)RigidBodyType);
            writer.Write((byte)RigidBodyMaterial);
            writer.WriteNulls(2);

            writer.Write(_PhysicsParam.Mass);
            writer.Write(_PhysicsParam.Friction);
            writer.Write(_PhysicsParam.GravityFactor);
            writer.Write(_PhysicsParam.Restitution);
            writer.Write(_PhysicsParam.LinearDamping);
            writer.Write(_PhysicsParam.AngularDamping);
            writer.Write(_PhysicsParam.MaxLinearVelocity);

            writer.Write((byte)ContactDamageType);
            writer.Write(RideOnDamage);
            writer.Write(AerialBounce);
            writer.WriteNulls(9);

            // ReactionData
            for (int i = 0; i < ReactionDataCount; i++)
            {
                _ReactionData[i].Write(writer, i);
            }

            writer.FinishWrite(Header);
        }
        protected bool WriteExtraParamData(
            BINAWriter writer, SetObject obj,
            KeyValuePair <string, SetObjectParam> customData)
        {
            var param = customData.Value;

            switch (customData.Key)
            {
            case "RangeIn":
                writer.Write((float)param.Data);
                writer.Write(obj.GetCustomDataValue <float>("RangeOut"));
                return(true);
            }

            return(false);
        }
Beispiel #24
0
        public override void Save(Stream fileStream)
        {
            // Header
            var header = new BINAv1Header();
            var writer = new BINAWriter(fileStream, header);

            uint filesCount = 0;

            for (int i = 0; i < Types.Count; i++)
            {
                for (int c = 0; c < Types[i].Files.Count; c++)
                {
                    filesCount++;
                }
            }

            writer.Write(filesCount);
            writer.AddOffset("fileEntriesPos");
            writer.Write(Types.Count);
            writer.AddOffset("typeEntriesPos");

            writer.FillInOffset("typeEntriesPos", false);
            for (int i = 0; i < Types.Count; i++)
            {
                writer.AddString($"typeName{i}", Types[i].TypeName);
                writer.Write(Types[i].Files.Count);
                writer.AddOffset($"typeFilesOffset{i}");
            }

            writer.FillInOffset("fileEntriesPos", false);
            int objectNum = 0;

            for (int i = 0; i < Types.Count; i++)
            {
                writer.FillInOffset($"typeFilesOffset{i}", false);
                for (int f = 0; f < Types[i].Files.Count; f++)
                {
                    writer.AddString($"friendlyName{objectNum}", Types[i].Files[f].FriendlyName);
                    writer.AddString($"filePath{objectNum}", Types[i].Files[f].FilePath);
                    objectNum++;
                }
            }

            writer.FinishWrite(header);
        }
Beispiel #25
0
            public void WriteChildIndices(BINAWriter writer, string prefix)
            {
                if (ChildIndices.Count < 1)
                {
                    return;
                }

                writer.FillInOffsetLong(
                    $"{prefix}nodeChildIDTableOffset{Index}",
                    true, false);

                for (int i = 0; i < ChildIndices.Count; ++i)
                {
                    writer.Write(ChildIndices[i]);
                }

                writer.FixPadding(8);
            }
Beispiel #26
0
            public void Write(BINAWriter writer, string extension, uint id, int index)
            {
                writer.Write(id);
                writer.Write((ulong)Data.Length);
                writer.Write(0U);

                if (DataType == DataEntryTypes.NotHere)
                {
                    writer.Write(0UL);
                }
                else
                {
                    writer.AddOffset($"{extension}fileDataOffset{index}", 8);
                }

                writer.Write(0UL);
                writer.AddString($"{extension}extDataOffset{index}", extension, 8);
                writer.Write((ulong)DataType);
            }
        public override void Save(Stream fileStream)
        {
            // Header
            var writer = new BINAWriter(fileStream, Header);

            writer.WriteSignature(Signature);
            writer.Write(1u); // TODO: Figure out what this value is.
            writer.Write(SoundEntries.Length);
            writer.AddOffset("soundEntriesOffset");

            // Data
            writer.FillInOffset("soundEntriesOffset", false);

            for (uint i = 0; i < SoundEntries.Length; ++i)
            {
                writer.Write(i);
                writer.AddString($"soundEntry_{i}", SoundEntries[i]);
            }

            writer.FinishWrite(Header);
        }
Beispiel #28
0
        public override void Save(Stream fileStream)
        {
            // Header
            var header = new BINAv1Header();
            var writer = new BINAWriter(fileStream, header);

            writer.Write((uint)Files.Count);
            writer.AddOffset("fileEntriesPos");
            writer.Write((uint)Types.Count);
            writer.AddOffset("typeEntriesPos");

            // Types
            writer.FillInOffset("typeEntriesPos", false);
            for (int i = 0; i < Types.Count; i++)
            {
                writer.AddString($"typeName{i}", Types[i].TypeName);
                writer.Write(Types[i].FileCount);
                writer.AddOffset($"typeFilesOffset{i}");
            }

            // Files
            uint fileEntriesPos = (uint)writer.BaseStream.Position;

            writer.FillInOffset("fileEntriesPos", false);
            for (int i = 0; i < Files.Count; i++)
            {
                writer.AddString($"friendlyName{i}", Files[i].FriendlyName);
                writer.AddString($"filePath{i}", Files[i].FilePath);
            }

            // Fill-in type file offsets
            for (int i = 0; i < Types.Count; i++)
            {
                writer.FillInOffset($"typeFilesOffset{i}",
                                    (fileEntriesPos + (Types[i].FileStartIndex * 8U)),
                                    false, false);
            }

            writer.FinishWrite(header);
        }
Beispiel #29
0
            public void Write(BINAWriter writer, uint captionIndex, uint index)
            {
                writer.Write((uint)LineType);
                writer.Write(0);

                if (string.IsNullOrEmpty(Name))
                {
                    writer.Write(0UL);
                }
                else
                {
                    writer.AddString($"Caption{captionIndex}Line{index}Name", Name, 8);
                }

                writer.Write(0UL);
                writer.Write(UnknownFloat1);
                writer.Write((byte)FirstCharacter);
                writer.Write((byte)FirstCharAnimation);
                writer.Write((byte)SecondCharacter);
                writer.Write((byte)SecondCharAnimation);
                writer.Write(TalkingCharacter);
            }
Beispiel #30
0
            public void Write(BINAWriter writer)
            {
                // Stage Index
                writer.Write(StageIndex);
                writer.WriteNulls(3);

                // Time Bonus
                writer.Write(TimeBasis);
                writer.Write(TimeDown);

                // Miss Bonuses
                writer.Write(NoMissBonus);
                writer.Write(OneMissBonus);
                writer.Write(TwoMissBonus);
                writer.Write(ThreeMissBonus);
                writer.Write(FourMissBonus);
                writer.Write(FivePlusMissBonus);

                // Rank Scores
                writer.Write(SRankScore);
                writer.Write(ARankScore);
                writer.Write(BRankScore);
                writer.Write(0); // C Rank (not really used)
                writer.Write(0); // D Rank (unused)

                // Stage ID
                if (!string.IsNullOrEmpty(StageID))
                {
                    writer.AddString($"stageID{++i}", StageID, 8);
                }
                else
                {
                    writer.Write(0UL);
                }

                writer.Write(0UL);
            }