private void SaveMaterialToFile(string fileName) { FileOutput m = new FileOutput(); FileOutput s = new FileOutput(); int[] c = NUD.WriteMaterial(m, currentMaterialList, s); FileOutput fin = new FileOutput(); fin.writeInt(0); fin.writeInt(20 + c[0]); for (int i = 1; i < 4; i++) { fin.writeInt(c[i] == c[i - 1] ? 0 : 20 + c[i]); } for (int i = 0; i < 4 - c.Length; i++) { fin.writeInt(0); } fin.writeOutput(m); fin.align(32, 0xFF); fin.writeIntAt(fin.size(), 0); fin.writeOutput(s); fin.save(fileName); }
public void Write(FileOutput o) { o.writeInt((int)TagType.DoAction); o.writeInt(2); o.writeInt(ActionId); o.writeInt(Unk1); }
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 Write(FileOutput o) { o.writeInt((int)TagType.PlaceObject); o.writeInt(12); o.writeInt(CharacterId); o.writeInt(PlacementId); o.writeInt(Unk1); o.writeInt(NameId); o.writeShort((short)Flags); o.writeShort((short)BlendMode); o.writeShort(Depth); o.writeShort(Unk4); o.writeShort(Unk5); o.writeShort(Unk6); o.writeShort((short)PositionFlags); o.writeShort(PositionId); o.writeInt(ColorMultId); o.writeInt(ColorAddId); o.writeInt((ColorMatrix != null) ? 1 : 0); o.writeInt((UnkF014 != null) ? 1 : 0); if (ColorMatrix != null) { ColorMatrix.Write(o); } if (UnkF014 != null) { UnkF014.Write(o); } }
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 int Rebuild(FileOutput o) { o.writeString("DTON"); int sizeoff = o.size(); o.writeInt(0); int size = o.size(); o.writeInt(destone.Count); FileOutput dat = new FileOutput(); dat.Endian = Endianness.Little; int start = destone.Count * 8 + 4; for (int i = 0; i < destone.Count; i++) { o.writeInt(start + dat.size()); o.writeInt(destone[i].Rebuild(dat) + 4); if (i != destone.Count - 1) { dat.writeInt(0); } } o.writeInt(0); o.writeOutput(dat); size = o.size() - size; o.writeIntAt(size, sizeoff); return(size); }
public void ExportTEX(string filename) { FileOutput o = new FileOutput(); o.Endian = Endianness.Little; o.writeInt(pictureBox1.Image.Width); o.writeInt(pictureBox1.Image.Height); o.writeByte(formatSelector.SelectedIndex); o.writeByte(1); o.writeShort(0); o.writeString(nameBox.Text); for (int i = 0; i < 0x74 - nameBox.Text.Length; i++) { o.writeByte(0); } pictureBox1.Image.RotateFlip(RotateFlipType.RotateNoneFlipY); o.writeBytes(_3DS.EncodeImage(new Bitmap(pictureBox1.Image), (_3DS.Tex_Formats)formatSelector.SelectedIndex)); pictureBox1.Image.RotateFlip(RotateFlipType.RotateNoneFlipY); o.save(filename); }
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"); }
} // Read() #region serialization void writeSymbols(FileOutput o) { FileOutput tag = new FileOutput(); tag.writeInt(Strings.Count); Console.WriteLine($"Strings = [ // offset=0x{o.size():X2}"); for (int i = 0; i < Strings.Count; i++) { var str = Strings[i]; Console.WriteLine($"\t0x{i:X3}: \"{str}\""); var strBytes = Encoding.UTF8.GetBytes(str); tag.writeInt(strBytes.Length); tag.writeBytes(strBytes); int padSize = 4 - (tag.size() % 4); for (int j = 0; j < padSize; j++) { tag.writeByte(0); } } Console.WriteLine("]\n"); o.writeInt((int)TagType.Symbols); o.writeInt(tag.size() / 4); o.writeOutput(tag); }
public int Rebuild(FileOutput o) { o.writeString("TONE"); int sizeoff = o.size(); o.writeInt(0); int size = o.size(); o.writeInt(tones.Count); FileOutput dat = new FileOutput(); dat.Endian = Endianness.Little; int start = tones.Count * 8 + 4; for (int i = 0; i < tones.Count; i++) { o.writeInt(start + dat.size()); o.writeInt(tones[i].Rebuild(dat)); } o.writeInt(0); o.writeOutput(dat); size = o.size() - size - 4; o.writeIntAt(size, sizeoff); return(size); }
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) { o.writeInt((int)TagType.RemoveObject); o.writeInt(2); o.writeInt(Unk1); o.writeShort(Depth); o.writeShort(Unk2); }
public void Write(FileOutput o) { Console.WriteLine($"unk_{(int)Type:X4} (size=0x{Size * 4:X4}) // offset=0x{o.size():X2}\n"); o.writeInt((int)Type); o.writeInt(Size); o.writeBytes(Data); }
public void Write(FileOutput o) { o.writeInt((int)TagType.FrameLabel); o.writeInt(3); o.writeInt(NameId); o.writeInt(StartFrame); o.writeInt(Unk1); }
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()); }
private void injectRom(object sender, EventArgs e) { using (OpenFileDialog ofd = new OpenFileDialog()) { ofd.Title = "Select NES ROM"; if (ofd.ShowDialog() == DialogResult.OK) { using (SaveFileDialog sfd = new SaveFileDialog()) { sfd.Title = "Select Save Location"; if (sfd.ShowDialog() == DialogResult.OK) { byte[] rom = File.ReadAllBytes(ofd.FileName); FileOutput f = new FileOutput(); f.Endian = Endianness.Little; f.writeInt(0); f.writeInt(0x30 + rom.Length); f.writeInt(0x30); f.writeInt(0x20 + rom.Length); f.writeInt(0x30 + rom.Length); f.writeInt(0); f.writeInt(0x1B + rom.Length); f.writeInt(0x1B + rom.Length); f.writeString("JAM WAS HERE"); f.writeInt(0); f.writeBytes(rom); f.save(sfd.FileName); } } } } }
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]); } }
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 override byte[] Rebuild() { FileOutput o = new FileOutput(); o.Endian = Endianness.Little; FileOutput d = new FileOutput(); d.Endian = Endianness.Little; o.writeString("NUS3"); o.writeInt(0); o.writeString("BANKTOC "); o.writeInt(0x3C); o.writeInt(0x07); // write each section o.writeString("PROP"); o.writeInt(prop.Rebuild(d)); o.writeString("BINF"); o.writeInt(binf.Rebuild(d)); o.writeString("GRP "); o.writeInt(grp.Rebuild(d)); o.writeString("DTON"); o.writeInt(dton.Rebuild(d)); o.writeString("TONE"); o.writeInt(tone.Rebuild(d)); o.writeString("JUNK"); o.writeInt(4); //d.writeString("JUNK"); d.writeInt(4); d.writeInt(0); o.writeString("PACK"); o.writeInt(0); o.writeOutput(d); o.writeIntAt(o.size(), 4); // something extra with bgm?? return(o.getBytes()); }
public static byte[] FromIDSP(byte[] idsp) { File.WriteAllBytes("temp.idsp", idsp); IntPtr vgm = VGMStreamNative.InitVGMStream("temp.idsp"); if (vgm == IntPtr.Zero) { throw new Exception("Error loading idsp"); } int channelCount = VGMStreamNative.GetVGMStreamChannelCount(vgm); int bitsPerFrame = VGMStreamNative.GetVGMStreamFrameSize(vgm); int size = VGMStreamNative.GetVGMStreamTotalSamples(vgm); int samplerate = VGMStreamNative.GetVGMStreamSampleRate(vgm); int total = (int)((samplerate * bitsPerFrame * channelCount * (size / 24576000f)) / 8 * 1024); short[] buffer = new short[total]; VGMStreamNative.RenderVGMStream(buffer, buffer.Length / 2, vgm); FileOutput o = new FileOutput(); o.Endian = Endianness.Little; o.writeString("RIFF"); o.writeInt(0); o.writeString("WAVEfmt "); o.writeInt(0x10); o.writeShort(1); o.writeShort(channelCount); o.writeInt(samplerate); o.writeInt(size); o.writeShort(2); o.writeShort(0x10); o.writeString("data"); o.writeInt(buffer.Length); for (int i = 0; i < buffer.Length / 2; i++) { o.writeShort(buffer[i]); } o.writeIntAt(o.size() - 8, 4); VGMStreamNative.CloseVGMStream(vgm); File.Delete("temp.idsp"); return(o.getBytes()); }
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 void save(FileOutput f) { base.save(f); f.writeByte(1); f.writeInt(0); }
public void save(FileOutput f) { base.save(f); f.writeByte(1); f.writeInt(type); f.writeFloat(x); f.writeFloat(y); f.writeFloat(z); if (type == 2) { f.writeFloat(radius); f.writeFloat(dx); f.writeFloat(dy); f.writeFloat(dz); } else if (type == 3) { f.writeFloat(dx); f.writeFloat(dy); f.writeFloat(dz); f.writeFloat(radius); } f.writeFloat(unk); f.writeHex("00"); }
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 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); } }
public int Rebuild(FileOutput o) { o.writeString("GRP "); int sizeoff = o.size(); o.writeInt(0); int size = o.size(); o.writeInt(names.Count); int start = names.Count * 8 + 4; FileOutput name = new FileOutput(); name.Endian = Endianness.Little; int c = 0; foreach (string na in names) { o.writeInt(start + name.size()); int ns = name.pos(); name.writeInt(1); name.writeByte(na.Length == 0 ? 0xFF : na.Length + 1); name.writeString(na); name.writeByte(0); name.align(4); if (c != names.Count - 1) { name.writeInt(0); // padding } else { ns -= 4; } c++; o.writeInt(name.pos() - ns); } o.writeInt(0); o.writeOutput(name); size = o.size() - size; o.writeIntAt(size, sizeoff); return(size); }
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)); } } //------ }
//Saving Mat private void savePresetButton_Click(object sender, EventArgs e) { using (var sfd = new SaveFileDialog()) { sfd.Filter = "Namco Material (NMT)|*.nmt|" + "All files(*.*)|*.*"; sfd.InitialDirectory = Path.Combine(MainForm.executableDir, "materials\\"); Console.WriteLine(sfd.InitialDirectory); if (sfd.ShowDialog() == DialogResult.OK) { sfd.FileName = sfd.FileName; sfd.RestoreDirectory = true; if (sfd.FileName.EndsWith(".nmt")) { FileOutput m = new FileOutput(); FileOutput s = new FileOutput(); int[] c = NUD.WriteMaterial(m, currentMaterialList, s); FileOutput fin = new FileOutput(); fin.writeInt(0); fin.writeInt(20 + c[0]); for (int i = 1; i < 4; i++) { fin.writeInt(c[i] == c[i - 1] ? 0 : 20 + c[i]); } for (int i = 0; i < 4 - c.Length; i++) { fin.writeInt(0); } fin.writeOutput(m); fin.align(32, 0xFF); fin.writeIntAt(fin.size(), 0); fin.writeOutput(s); fin.save(sfd.FileName); } } } }
void writeColors(FileOutput o) { Console.WriteLine($"Colors = [ // offset=0x{o.size():X2}"); o.writeInt((int)TagType.Colors); o.writeInt(Colors.Count * 2 + 1); o.writeInt(Colors.Count); for (int i = 0; i < Colors.Count; i++) { var color = Colors[i]; Console.WriteLine($"\t0x{i:X3}: #{(byte)(color.X * 255):X2}{(byte)(color.Z * 255):X2}{(byte)(color.Y * 255):X2}, {(byte)(color.W * 255):X2} // offset=0x{o.size():X2}"); o.writeShort((short)(color.X * 256)); o.writeShort((short)(color.Y * 256)); o.writeShort((short)(color.Z * 256)); o.writeShort((short)(color.W * 256)); } Console.WriteLine("]\n"); }
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); }