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); }
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); }
public void save(FileOutput f) { base.save(f); f.writeByte(1); f.writeFloat(x); f.writeFloat(y); }
public void save(FileOutput f) { base.save(f); f.writeByte(1); f.writeFloat(left); f.writeFloat(right); f.writeFloat(top); f.writeFloat(bottom); }
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); }
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()); }
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"); }
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"); }
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); }
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); }
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); } }
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); } }
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(); }
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); } }
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"); }
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()); }
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); } }
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); } } }
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]); } }
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"); }
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"); }
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); }
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"); }
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)); } } //------ }
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); }
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; } }
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; } }
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()); }
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); }
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); } }