Example #1
0
        public void save(FileOutput f)
        {
            f.writeHex(magic);

            f.writeByte(1);
            f.writeString(name.PadRight(0x38, (char)0));

            f.writeByte(1);
            f.writeString(subname.PadRight(0x40, (char)0));

            f.writeByte(1);
            for (int i = 0; i < 3; i++)
            {
                f.writeFloat(startPos[i]);
            }
            f.writeFlag(useStartPos);

            f.writeByte(1);
            f.writeInt(unk1);

            f.writeByte(1);
            foreach (float i in unk2)
            {
                f.writeFloat(i);
            }
            f.writeInt(unk3);

            f.writeByte(1);
            f.writeChars(boneName);
        }
Example #2
0
            public void Write(FileOutput o)
            {
                Console.WriteLine($"Properties {{ // offset=0x{o.size():X2}");
                Console.WriteLine($"\tunk0: 0x{unk0:X8}");
                Console.WriteLine($"\tunk1: 0x{unk1:X8}");
                Console.WriteLine($"\tunk2: 0x{unk2:X8}");
                Console.WriteLine($"\tmaxCharacterId: 0x{maxCharacterId:X8}");
                Console.WriteLine($"\tunk4: 0x{unk4:X8}");
                Console.WriteLine($"\tmaxCharacterId2: 0x{maxCharacterId2:X2}");
                Console.WriteLine($"\tmaxDepth: 0x{maxDepth:X4}");
                Console.WriteLine($"\tunk7: 0x{unk7:X4}");
                Console.WriteLine($"\tframerate: {framerate}");
                Console.WriteLine($"\tdimensions: {width}x{height}");
                Console.WriteLine($"\tunk8: 0x{unk8:X8}");
                Console.WriteLine($"\tunk9: 0x{unk9:X8}");
                Console.WriteLine("}\n");

                o.writeInt((int)TagType.Properties);
                o.writeInt(12);

                o.writeInt((int)unk0);
                o.writeInt((int)unk1);
                o.writeInt((int)unk2);
                o.writeInt((int)maxCharacterId);
                o.writeInt(unk4);
                o.writeInt((int)maxCharacterId2);
                o.writeShort((short)maxDepth);
                o.writeShort((short)unk7);
                o.writeFloat(framerate);
                o.writeFloat(width);
                o.writeFloat(height);
                o.writeInt((int)unk8);
                o.writeInt((int)unk9);
            }
Example #3
0
        public void save(FileOutput f)
        {
            base.save(f);

            f.writeByte(1);
            f.writeFloat(x);
            f.writeFloat(y);
        }
Example #4
0
        public void save(FileOutput f)
        {
            base.save(f);

            f.writeByte(1);
            f.writeFloat(left);
            f.writeFloat(right);
            f.writeFloat(top);
            f.writeFloat(bottom);
        }
Example #5
0
        public void save(FileOutput f)
        {
            base.save(f);

            f.writeByte(1);
            f.writeFloat(pos.x);
            f.writeFloat(pos.y);
            f.writeFloat(angle.x);
            f.writeFloat(angle.y);
        }
Example #6
0
        public override byte[] Rebuild()
        {
            FileOutput buf = new FileOutput();

            buf.Endian = Endianness.Little;

            var flagsOffset   = 0x10;
            var entriesOffset = flagsOffset + (atlases.Count * 4);
            var stringsOffset = entriesOffset + (textures.Count * 0x20);

            buf.writeInt(0x544C5354); // TLST
            buf.writeShort(0);        // idk
            buf.writeShort((short)atlases.Count);
            buf.writeShort((short)textures.Count);
            buf.writeShort((short)flagsOffset);
            buf.writeShort((short)entriesOffset);
            buf.writeShort((short)stringsOffset);

            // flags
            foreach (var flag in atlases)
            {
                buf.writeInt((int)flag);
            }

            // entries
            int namePtr = 0;

            foreach (var texture in textures)
            {
                buf.writeInt(namePtr);
                buf.writeInt(namePtr);
                namePtr += texture.name.Length + 1;

                buf.writeFloat(texture.topLeft.X);
                buf.writeFloat(texture.topLeft.Y);
                buf.writeFloat(texture.botRight.X);
                buf.writeFloat(texture.botRight.Y);

                buf.writeShort(texture.width);
                buf.writeShort(texture.height);
                buf.writeShort(texture.atlasId);
                buf.writeShort(0); // pad
            }

            //strings
            foreach (var texture in textures)
            {
                buf.writeString(texture.name);
                buf.writeByte(0);
            }

            buf.writeByte(0);

            return(buf.getBytes());
        }
Example #7
0
        public void save(FileOutput f)
        {
            base.save(f);

            f.writeByte(1);
            f.writeInt(type);

            f.writeFloat(x);
            f.writeFloat(y);
            f.writeFloat(z);
            f.writeHex("00000000000000000000000000000000");
        }
Example #8
0
 public override void save(FileOutput f)
 {
     f.writeHex("010401017735BB750000000201");
     f.writeChars(name.PadRight(0x38).ToCharArray());
     f.writeByte(1);
     f.writeChars(subname.PadRight(0x40).ToCharArray());
     f.writeHex("0100000000000000000000000000010000000001000000000000000000000000FFFFFFFF010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001014C800203");
     f.writeInt(type);
     f.writeFloat(x);
     f.writeFloat(y);
     f.writeHex("0000000000000000010100000000");
 }
Example #9
0
        public void save(FileOutput f)
        {
            f.writeHex("0103");

            f.writeInt(type);
            f.writeFloat(x);
            f.writeFloat(y);
            f.writeFloat(z);
            f.writeFloat(unk);

            f.writeHex("0101");
            f.writeInt(0);
        }
Example #10
0
                public int Rebuild(FileOutput o)
                {
                    int size = o.size();

                    o.writeInt(hash);
                    o.writeInt(unk1);

                    o.writeByte(name.Length + 1);
                    o.writeString(name);
                    o.writeByte(0);
                    o.align(4);

                    o.writeInt(0);
                    o.writeInt(8);

                    o.writeInt(offset);
                    o.writeInt(this.size);

                    // write data
                    foreach (float f in param)
                    {
                        o.writeFloat(f);
                    }

                    o.writeInt(offsets.Length);
                    foreach (int f in offsets)
                    {
                        o.writeInt(f);
                    }

                    o.writeInt(unkvalues.Length);
                    int v = 0;

                    foreach (float f in unkvalues)
                    {
                        o.writeInt(v++);
                        o.writeFloat(f);
                    }

                    foreach (int f in unkending)
                    {
                        o.writeInt(f);
                    }

                    foreach (int f in end)
                    {
                        o.writeInt(f);
                    }

                    return(o.size() - size);
                }
Example #11
0
        public void save(FileOutput f)
        {
            f.writeByte(1);
            f.writeHex("03000000040000000000000000000000000000000001");

            f.writeByte(1);
            f.writeInt(points.Count);
            foreach (Vector2D v in points)
            {
                f.writeByte(1);
                f.writeFloat(v.x);
                f.writeFloat(v.y);
            }
        }
Example #12
0
 public void save(FileOutput f)
 {
     f.writeHex("030401017735BB750000000201");
     f.writeString(name.PadRight(0x38, (char)0));
     f.writeByte(1);
     f.writeString(subname.PadRight(0x40, (char)0));
     f.writeByte(1);
     foreach (float i in startPos)
     {
         f.writeFloat(i);
     }
     f.writeFlag(useStartPos);
     f.writeByte(1);
     f.writeInt(unk2);
     f.writeByte(1);
     f.writeBytes(unk3);
     f.writeHex("FFFFFFFF01");
     f.writeChars(unk4);
     f.writeFlag(flag1);
     f.writeFlag(flag2);
     f.writeFlag(flag3);
     f.writeFlag(flag4);
     f.writeByte(1);
     f.writeInt(verts.Count);
     foreach (Vector2D v in verts)
     {
         f.writeByte(1);
         f.writeFloat(v.x);
         f.writeFloat(v.y);
     }
     f.writeByte(1);
     f.writeInt(normals.Count);
     foreach (Vector2D n in normals)
     {
         f.writeByte(1);
         f.writeFloat(n.x);
         f.writeFloat(n.y);
     }
     f.writeByte(1);
     f.writeInt(0);
     f.writeByte(1);
     f.writeInt(materials.Count);
     foreach (CollisionMat m in materials)
     {
         f.writeByte(1);
         f.writeBytes(m.material);
     }
 }
Example #13
0
        public override byte[] Rebuild()
        {
            FileOutput file = new FileOutput();
            if (file != null)
            {
                
                if (Endian == Endianness.Little) {
                    file.Endian = Endianness.Little;
                    file.writeString(" NBV");
                }
                if (Endian == Endianness.Big) {
                    file.Endian = Endianness.Big;
                    file.writeString("VBN ");
                }

                file.writeShort(0x01);
                file.writeShort(0x02);
                file.writeInt(bones.Count);
                if (boneCountPerType[0] == 0)
                    boneCountPerType[0] = (uint)bones.Count;
                for (int i = 0; i < 4; i++)
                    file.writeInt((int)boneCountPerType[i]);

                for (int i = 0; i < bones.Count; i++)
                {
                    file.writeString(new string(bones[i].boneName));
                    for (int j = 0; j < 64 - bones[i].boneName.Length; j++)
                        file.writeByte(0);
                    file.writeInt((int)bones[i].boneType);
                    if(bones[i].parentIndex == -1)
                        file.writeInt(0x0FFFFFFF);
                    else
                        file.writeInt(bones[i].parentIndex);
                    file.writeInt((int)bones[i].boneId);
                }

                for (int i = 0; i < bones.Count; i++)
                {
                    file.writeFloat(bones[i].position[0]);
                    file.writeFloat(bones[i].position[1]);
                    file.writeFloat(bones[i].position[2]);
                    file.writeFloat(bones[i].rotation[0]);
                    file.writeFloat(bones[i].rotation[1]);
                    file.writeFloat(bones[i].rotation[2]);
                    file.writeFloat(bones[i].scale[0]);
                    file.writeFloat(bones[i].scale[1]);
                    file.writeFloat(bones[i].scale[2]);
                }
            }
            return file.getBytes();
        }
Example #14
0
 public override void save(FileOutput f)
 {
     f.writeHex("010401017735BB750000000201");
     f.writeChars(name.PadRight(0x38).ToCharArray());
     f.writeByte(1);
     f.writeChars(subname.PadRight(0x40).ToCharArray());
     f.writeHex("0100000000000000000000000000010000000001000000000000000000000000FFFFFFFF010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001014C800203");
     f.writeInt(type);
     f.writeHex("000000000000000000000000000000000101");
     f.writeInt(points.Count);
     foreach (Vector2D point in points)
     {
         f.writeByte(1);
         f.writeFloat(point.x);
         f.writeFloat(point.y);
     }
 }
Example #15
0
        void writePositions(FileOutput o)
        {
            Console.WriteLine($"Positions = [ // offset=0x{o.size():X2}");

            o.writeInt((int)TagType.Positions);
            o.writeInt(Positions.Count * 2 + 1);
            o.writeInt(Positions.Count);

            for (int i = 0; i < Positions.Count; i++)
            {
                var position = Positions[i];
                Console.WriteLine($"\t0x{i:X4}: [{position.X}, {position.Y}] // offset=0x{o.size():X2}");
                o.writeFloat(position.X);
                o.writeFloat(position.Y);
            }
            Console.WriteLine("]\n");
        }
Example #16
0
        public override byte[] Rebuild()
        {
            FileOutput f = new FileOutput();

            f.Endian = Endian;
            f.writeUInt(0x0000FEFF);
            f.Endian = Endianness.Big;
            f.writeUInt(Magic);

            f.Endian = Endian;
            f.writeInt(0); // Always 0
            f.writeInt(Frames.Count);
            for (int i = 0; i < Frames.Count; i++)
            {
                f.writeFloat(Frames[i].qx);
                f.writeFloat(Frames[i].qy);
                f.writeFloat(Frames[i].qz);
                f.writeFloat(Frames[i].qw);
                f.writeFloat(Frames[i].x);
                f.writeFloat(Frames[i].y);
                f.writeFloat(Frames[i].z);
            }

            return(f.getBytes());
        }
Example #17
0
        public void save(FileOutput f)
        {
            base.save(f);

            f.writeFlag(flag1);
            f.writeFlag(flag2);
            f.writeFlag(flag3);
            f.writeFlag(flag4);

            f.writeByte(1);
            f.writeInt(verts.Count);
            foreach (Vector2D v in verts)
            {
                f.writeByte(1);
                f.writeFloat(v.x);
                f.writeFloat(v.y);
            }

            f.writeByte(1);
            f.writeInt(normals.Count);
            foreach (Vector2D n in normals)
            {
                f.writeByte(1);
                f.writeFloat(n.x);
                f.writeFloat(n.y);
            }

            f.writeByte(1);
            f.writeInt(cliffs.Count);
            foreach (CollisionCliff c in cliffs)
            {
                c.save(f);
            }

            f.writeByte(1);
            f.writeInt(materials.Count);
            foreach (CollisionMat m in materials)
            {
                f.writeByte(1);
                f.writeBytes(m.material);
            }
        }
Example #18
0
 public void save(FileOutput f)
 {
     f.writeHex("010401017735BB750000000201");
     f.writeChars(name.PadRight(0x38, (char)0).ToCharArray());
     f.writeByte(1);
     f.writeChars(subname.PadRight(0x40, (char)0).ToCharArray());
     f.writeHex("0100000000000000000000000000010000000001000000000000000000000000FFFFFFFF010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001098400010101");
     f.writeInt(sections.Count);
     foreach (Section s in sections)
     {
         f.writeHex("010300000004000000000000000000000000000000000101");
         f.writeInt(s.points.Count);
         foreach (Vector2D p in s.points)
         {
             f.writeByte(1);
             f.writeFloat(p.x);
             f.writeFloat(p.y);
         }
     }
 }
Example #19
0
            public void WriteDescription(FileOutput f)
            {
                // TODO: Calculate Length
                f.writeInt(type.Length);

                for (int i = 0; i < type.Length; i++)
                {
                    f.writeInt(type[i]);
                    f.writeInt(format[i]);
                    f.writeFloat(scale[i]);
                }
            }
Example #20
0
        void writeBounds(FileOutput o)
        {
            Console.WriteLine($"Bounds = [ // offset=0x{o.size():X2}");

            o.writeInt((int)TagType.Bounds);
            o.writeInt(Bounds.Count * 4 + 1);
            o.writeInt(Bounds.Count);

            for (int i = 0; i < Bounds.Count; i++)
            {
                var bb = Bounds[i];
                Console.WriteLine($"\t0x{i:X2}: {bb} // offset=0x{o.size():X2}");

                o.writeFloat(bb.TopLeft.X);
                o.writeFloat(bb.TopLeft.Y);
                o.writeFloat(bb.BottomRight.X);
                o.writeFloat(bb.BottomRight.Y);
            }

            Console.WriteLine("]\n");
        }
Example #21
0
        void writeTransforms(FileOutput o)
        {
            Console.WriteLine($"Transforms = [ // offset=0x{o.size():X2}");

            o.writeInt((int)TagType.Transforms);
            o.writeInt(Transforms.Count * 6 + 1);
            o.writeInt(Transforms.Count);

            for (int i = 0; i < Transforms.Count; i++)
            {
                var transform = Transforms[i];

                Console.WriteLine($"\t[{transform.M11:f2}, {transform.M21:f2}] // offset=0x{o.size():X2}");
                Console.WriteLine($"\t[{transform.M12:f2}, {transform.M22:f2}]");
                Console.WriteLine($"\t[{transform.M41:f2}, {transform.M42:f2}]\n");
                o.writeFloat(transform.M11);
                o.writeFloat(transform.M21);
                o.writeFloat(transform.M12);
                o.writeFloat(transform.M22);
                o.writeFloat(transform.M41);
                o.writeFloat(transform.M42);
            }

            Console.WriteLine("]\n");
        }
Example #22
0
        public void Save(string filename)
        {
            FileOutput f = new FileOutput();

            f.Endian = System.IO.Endianness.Big;
            f.writeChars("ATKD".ToCharArray());
            f.writeInt(entries.Count);
            f.writeUInt(commonSubactions);
            f.writeUInt(uniqueSubactions);
            foreach (Entry e in entries)
            {
                f.writeUShort(e.subaction);
                f.writeUShort(0);
                f.writeUShort(e.startFrame);
                f.writeUShort(e.lastFrame);
                f.writeFloat(e.xmin);
                f.writeFloat(e.xmax);
                f.writeFloat(e.ymin);
                f.writeFloat(e.ymax);
            }
            f.save(filename);
        }
Example #23
0
        void writeAtlases(FileOutput o)
        {
            Console.WriteLine($"TextureAtlases = [ // offset=0x{o.size():X2}");

            o.writeInt((int)TagType.TextureAtlases);
            o.writeInt(Atlases.Count * 4 + 1);
            o.writeInt(Atlases.Count);

            for (int i = 0; i < Atlases.Count; i++)
            {
                var atlas = Atlases[i];
                Console.WriteLine($"\tatlas 0x{atlas.id:X2} {{  // offset=0x{o.size():X2}");
                Console.WriteLine($"\t\t\"name\": \"{Strings[atlas.nameId]}\"");
                Console.WriteLine($"\t\tdimensions: {atlas.width}x{atlas.height}");
                Console.WriteLine("\t}\n");

                o.writeInt(atlas.id);
                o.writeInt(atlas.nameId);
                o.writeFloat(atlas.width);
                o.writeFloat(atlas.height);
            }
            Console.WriteLine("]\n");
        }
Example #24
0
        public static void WriteKeyData(Animation.KeyGroup group, FileOutput boneHeader, FileOutput keyData, FileOutput d_Main3, int start, ref int track)
        {
            if (group.Keys.Count == 1)
            {
                boneHeader.writeFloat(group.Keys[0].Value);
            }
            else
            if (group.Keys.Count == 0)
            {
                boneHeader.writeInt(0);
            }
            else
            {
                int off = (group.Keys.Count * 4);
                boneHeader.WriteOffset(start + keyData.size(), d_Main3); // bone offset

                keyData.writeFloat(0);
                keyData.writeFloat(group.FrameCount);
                keyData.writeInt(track++ << 16);                     // track
                keyData.writeInt((group.Keys.Count << 16) | 0x0701); // 7 is quantinization and 1 is linear interpolation

                float minv = 999, maxv = -999;
                float minf = 999, maxf = -999;
                foreach (Animation.KeyFrame key in group.Keys)
                {
                    minv = Math.Min(key.Value, minv);
                    maxv = Math.Max(key.Value, maxv);
                    minf = Math.Min(key.Frame, minf);
                    maxf = Math.Max(key.Frame, maxf);
                }
                maxv -= minv;
                keyData.writeFloat(maxv / 0xFFFFF);                       // value scale
                keyData.writeFloat(minv);                                 // value offset
                keyData.writeFloat(1f);                                   // frame scale
                keyData.writeFloat(minf);                                 // frame offset

                keyData.WriteOffset(start + keyData.size() + 4, d_Main3); // useless flags

                foreach (Animation.KeyFrame key in group.Keys)
                {
                    keyData.writeInt((((int)(((key.Value - minv) / (maxv)) * 0xFFFFF)) << 12) | (((int)(key.Frame - minf)) & 0xFFF));
                }
            }
            //------
        }
Example #25
0
                public int Rebuild(FileOutput o)
                {
                    int size = o.size();

                    o.writeInt(hash);
                    o.writeInt(unk1);
                    o.writeByte(name.Length + 1);
                    o.writeString(name);
                    o.writeByte(0);
                    o.align(4);

                    // write data
                    foreach (float f in data)
                    {
                        o.writeFloat(f);
                    }

                    return(o.size() - size);
                }
Example #26
0
        private static void writeType(FileOutput d, float value, int format, float scale)
        {
            switch (format)
            {
            case 0:
                d.writeFloat(value / scale);
                break;

            case 1:
                d.writeByte((byte)(value / scale));
                break;

            case 2:
                d.writeByte((byte)(value / scale));
                break;

            case 3:
                d.writeShort((short)(value / scale));
                break;
            }
        }
Example #27
0
            private void WriteType(FileOutput d, float data)
            {
                switch (format)
                {
                case 0:
                    d.writeFloat(data / scale);
                    break;

                case 1:
                    d.writeByte((byte)(data / scale));
                    break;

                case 2:
                    d.writeByte((sbyte)(data / scale));
                    break;

                case 3:
                    d.writeShort((int)(data / scale));
                    break;
                }
            }
Example #28
0
        public byte[] Rebuild(int pos)
        {
            FileOutput f = new FileOutput();

            f.Endian = Endianness.Big;

            f.writeInt(pos + f.pos() + 0x20);
            f.writeInt(unknown);
            f.writeInt(valueCount);
            f.writeInt(frames.Count);
            f.writeShort(unknown2);
            f.writeShort(unknown3);
            int position = pos + f.pos() + 0xC + name.Length + 1;

            while (position % 0x10 != 0)
            {
                position++;
            }

            f.writeInt(position);
            f.writeBytes(new byte[8]);
            f.writeString(name);
            f.writeByte(0);
            while ((pos + f.pos()) % 0x10 != 0)
            {
                f.writeByte(0);
            }

            foreach (frame fr in frames)
            {
                for (int i = 0; i < valueCount; i++)
                {
                    f.writeFloat(fr.values[i]);
                }
            }
            f.writeBytes(new byte[0x10]);

            return(f.getBytes());
        }
Example #29
0
            public void Write(FileOutput o)
            {
                o.writeInt((int)TagType.DynamicText);
                o.writeInt(16);

                o.writeInt(CharacterId);
                o.writeInt(unk1);
                o.writeInt(placeholderTextId);
                o.writeInt(unk2);
                o.writeInt(strokeColorId);
                o.writeInt(unk3);
                o.writeInt(unk4);
                o.writeInt(unk5);
                o.writeShort((short)alignment);
                o.writeShort(unk6);
                o.writeInt(unk7);
                o.writeInt(unk8);
                o.writeFloat(size);
                o.writeInt(unk9);
                o.writeInt(unk10);
                o.writeInt(unk11);
                o.writeInt(unk12);
            }
Example #30
0
        public void save(FileOutput f)
        {
            base.save(f);

            f.writeByte(0x3);
            f.writeInt(type);

            f.writeFloat(x1);
            f.writeFloat(y1);
            f.writeFloat(x2);
            f.writeFloat(y2);

            f.writeByte(1);
            f.writeByte(1);
            f.writeInt(points.Count);
            foreach (Vector2D point in points)
            {
                f.writeByte(1);
                f.writeFloat(point.x);
                f.writeFloat(point.y);
            }
        }