private void Menu_ExportVAG() { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "VAG|*.vag"; var id_str = Data.ID.ToString(); sfd.FileName = id_str; if (sfd.ShowDialog() == DialogResult.OK) { FileStream file = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write); BinaryWriter writer = new BinaryWriter(file); writer.Write("VAGp".ToCharArray()); writer.Write(20); writer.Write(0); writer.Write(RawData.Length); writer.Write(BitConv.FlipBytes(Data.Freq)); writer.Write(0); writer.Write(0); writer.Write(0); char[] name = new char[16] { (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0 }; Array.Copy(id_str.ToCharArray(), name, Math.Min(id_str.Length, 16)); writer.Write(name); //writer.Write(0); writer.Write(0); writer.Write(0); writer.Write(0); writer.Write(RawData); writer.Close(); } }
internal byte[] GetData() { List <byte> xArray = new List <byte>(); xArray.Add(xNLen); xArray.Add((byte)((IsFolder ? 1 : 0) << 4)); xArray.AddRange(Encoding.ASCII.GetBytes(xName)); xArray.AddRange(new byte[0x2A - xName.Length]); xArray.AddRange(BitConv.GetBytes(xStartBlock, true)); xArray.AddRange(BitConv.GetBytes(xSize, true)); xArray.AddRange(BitConv.GetBytes(xT1, true)); xArray.AddRange(BitConv.GetBytes(xT2, true)); xArray.AddRange(BitConv.GetBytes(xT3, true)); return(xArray.ToArray()); }
uint GetNextBlock(uint xBlock) { if (PartitionType == FATXType.None) { return(Constants.FATX32End); } xAllocTable.Position = (xBlock * (byte)PartitionType); List <byte> xList = xAllocTable.ReadBytes((byte)PartitionType).ToList(); for (int i = (int)PartitionType; i < 4; i++) { xList.Insert(0, 0); } return(BitConv.ToUInt32(xList.ToArray(), true)); }
private void RenderEntry(EntityEntry entry) { int xoffset = BitConv.FromInt32(entry.Unknown2, 0); int yoffset = BitConv.FromInt32(entry.Unknown2, 4); int zoffset = BitConv.FromInt32(entry.Unknown2, 8); GL.PushMatrix(); GL.Translate(xoffset, yoffset, zoffset); GL.Scale(4, 4, 4); foreach (Entity entity in entry.Entities) { if (entity.Name != null) { RenderEntity(entity); } } GL.PopMatrix(); }
protected override Control CreateEditor() { int linkedsceneryentrycount = BitConv.FromInt32(entityentry.Unknown1, 0); SceneryEntry[] linkedsceneryentries = new SceneryEntry [linkedsceneryentrycount]; for (int i = 0; i < linkedsceneryentrycount; i++) { linkedsceneryentries[i] = FindEID <SceneryEntry>(BitConv.FromInt32(entityentry.Unknown1, 4 + i * 48)); } int linkedentityentrycount = BitConv.FromInt32(entityentry.Unknown1, 400); EntityEntry[] linkedentityentries = new EntityEntry [linkedentityentrycount]; for (int i = 0; i < linkedentityentrycount; i++) { linkedentityentries[i] = FindEID <EntityEntry>(BitConv.FromInt32(entityentry.Unknown1, 404 + i * 4)); } return(new UndockableControl(new EntityEntryViewer(entityentry, linkedsceneryentries, linkedentityentries))); }
/// <summary> /// Returns the STFS Descriptor /// </summary> /// <returns></returns> internal byte[] GetData() { byte idx = 1; if (ThisType == STFSType.Type1) { idx = (byte)(TopRecord.Index << 1); } // Returns the Descriptor in a data fashion List <byte> xReturn = new List <byte>(); xReturn.AddRange(new byte[] { 0x24, 0 }); xReturn.Add(idx); xReturn.AddRange(xStruct); xReturn.AddRange(new byte[20]); xReturn.AddRange(BitConv.GetBytes(xBlockCount, true)); xReturn.AddRange(BitConv.GetBytes(TopRecord.BlocksFree, true)); return(xReturn.ToArray()); }
public TextureChunkBox(TextureChunk chunk) { tbcTabs = new TabControl(); tbcTabs.Dock = DockStyle.Fill; { MysteryBox mystery = new MysteryBox(chunk.Data); mystery.Dock = DockStyle.Fill; TabPage page = new TabPage("Hex"); page.Controls.Add(mystery); tbcTabs.TabPages.Add(page); } { Bitmap bitmap = new Bitmap(512, 128, PixelFormat.Format16bppArgb1555); Rectangle brect = new Rectangle(Point.Empty, bitmap.Size); BitmapData bdata = bitmap.LockBits(brect, ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555); try { for (int y = 0; y < 128; y++) { for (int x = 0; x < 512; x++) { byte color = chunk.Data[x + y * 512]; color >>= 3; short color16 = PixelConv.Pack1555(1, color, color, color); System.Runtime.InteropServices.Marshal.WriteInt16(bdata.Scan0, x * 2 + y * bdata.Stride, color16); } } } finally { bitmap.UnlockBits(bdata); } PictureBox picture = new PictureBox(); picture.Dock = DockStyle.Fill; picture.Image = bitmap; TabPage page = new TabPage("Monochrome 8"); page.Controls.Add(picture); tbcTabs.TabPages.Add(page); tbcTabs.SelectedTab = page; } { Bitmap bitmap = new Bitmap(256, 128, PixelFormat.Format16bppArgb1555); Rectangle brect = new Rectangle(Point.Empty, bitmap.Size); BitmapData bdata = bitmap.LockBits(brect, ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555); try { for (int y = 0; y < 128; y++) { for (int x = 0; x < 256; x++) { short color = BitConv.FromInt16(chunk.Data, x * 2 + y * 512); byte alpha; byte red; byte green; byte blue; PixelConv.Unpack1555(color, out alpha, out blue, out green, out red); color = PixelConv.Pack1555(1, red, green, blue); System.Runtime.InteropServices.Marshal.WriteInt16(bdata.Scan0, x * 2 + y * bdata.Stride, color); } } } finally { bitmap.UnlockBits(bdata); } PictureBox picture = new PictureBox(); picture.Dock = DockStyle.Fill; picture.Image = bitmap; TabPage page = new TabPage("BGR555"); page.Controls.Add(picture); tbcTabs.TabPages.Add(page); } Controls.Add(tbcTabs); }
private void PopulateList() { listBox1.Items.Clear(); tracks.Clear(); BinaryReader mh = new BinaryReader(new FileStream(fileName, FileMode.Open)); int count = mh.ReadInt32(); interleave = mh.ReadInt32(); while (count-- > 0) { tracks.Add(new Track() { Type = mh.ReadInt32(), Size = mh.ReadInt32(), Offset = mh.ReadUInt32(), SampleRate = mh.ReadInt32(), Unknown = mh.ReadInt32() }); } mh.Close(); mb_name = fileName.Substring(0, fileName.LastIndexOf('.') + 1) + "MB"; BinaryReader mb = new BinaryReader(new FileStream(mb_name, FileMode.Open)); for (int i = 0; i < tracks.Count; ++i) { mb.BaseStream.Position = tracks[i].Offset; if (tracks[i].Type == 0) { byte[] header = mb.ReadBytes(0x30); if (BitConverter.ToUInt32(header, 0) != msvp_key || BitConverter.ToUInt32(header, 4) != 0x20000000 || BitConverter.ToUInt32(header, 8) != 0 || BitConv.FlipBytes(BitConverter.ToUInt32(header, 12)) != tracks[i].Size - 0x30) { throw new Exception("Type 0 audio stream is in invalid format."); } else if (BitConv.FlipBytes(BitConverter.ToInt32(header, 16)) != tracks[i].SampleRate) { tracks[i].SampleRate = BitConv.FlipBytes(BitConverter.ToInt32(header, 16)); } char[] name = new char[0x10]; Array.Copy(header, 0x20, name, 0, 0x10); tracks[i].Name = new string(name); if (tracks[i].Name.IndexOf('\0') > 0) { tracks[i].Name = tracks[i].Name.Substring(0, tracks[i].Name.IndexOf('\0')); listBox1.Items.Add($"{tracks[i].Name} (Track {i})"); } else { tracks[i].Name = string.Empty; listBox1.Items.Add($"Track {i}"); } } else if (tracks[i].Type == 2) { listBox1.Items.Add($"Track {i} (null track)"); } else { listBox1.Items.Add($"Track {i}"); } } mb.Close(); label1.Text = $"Track count: {tracks.Count}"; label10.Text = $"Interleave: {interleave} bytes"; }
private void addTrackToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "WAV files|*.wav"; if (ofd.ShowDialog() == DialogResult.OK) { BinaryReader reader = new BinaryReader(new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read)); if (new string(reader.ReadChars(4)) != "RIFF" || reader.ReadInt32() != reader.BaseStream.Length - 8 || new string(reader.ReadChars(4)) != "WAVE" || new string(reader.ReadChars(4)) != "fmt " || reader.ReadInt32() != 16 || reader.ReadInt16() != 1) { return; } ushort channels = reader.ReadUInt16(); int samplerate = reader.ReadInt32(); if (channels > 2 || reader.ReadInt32() != samplerate * channels * 2 || reader.ReadInt16() != channels * 2 || reader.ReadInt16() != 16 || new string(reader.ReadChars(4)) != "data") { return; } BinaryWriter mb = new BinaryWriter(new FileStream(mb_name, FileMode.Append, FileAccess.Write)); long mb_start_seek = mb.BaseStream.Position; if (mb_start_seek > uint.MaxValue) { return; } int readsize = reader.ReadInt32(); byte[] vag_data; if (channels == 1) { vag_data = ADPCM.FromPCMMono(reader.ReadBytes(readsize)); mb.Write("MSVp".ToCharArray()); mb.Write(0x20000000); mb.Write(0); mb.Write(BitConv.FlipBytes(vag_data.Length)); mb.Write(BitConv.FlipBytes(samplerate)); mb.Write(0); mb.Write(0); mb.Write(0); string fname_no_ext = ofd.SafeFileName.Substring(0, ofd.SafeFileName.LastIndexOf('.')); for (int i = 0; i < 16; ++i) { if (i < fname_no_ext.Length) { mb.Write(fname_no_ext[i]); } else { mb.Write(0); } } mb.Write(vag_data); } else if (channels == 2) { vag_data = ADPCM.FromPCMStereo(reader.ReadBytes(readsize), interleave); mb.Write(vag_data); } } }
/// <summary> /// Grabs the STFS name of the package /// </summary> /// <returns></returns> public string GetSTFSName() { if (xDrive.ActiveCheck()) { return(null); } string xReturn = null; try { if (xSize < 0x500) { throw new Exception(); } xDrive.GetIO(); uint[] blocks = Partition.xTable.GetBlocks(xStartBlock); if (blocks.Length == 0) { throw new Exception(); } xDrive.xActive = false; FATXStreamIO io = new FATXStreamIO(this, ref blocks, true); uint xBuff = io.ReadUInt32(); if (xBuff != (uint)STFS.PackageMagic.CON && xBuff != (uint)STFS.PackageMagic.LIVE && xBuff != (uint)STFS.PackageMagic.PIRS) { throw new Exception(); } io.Position = 0x411; xReturn = io.ReadString(StringForm.Unicode, 0x80); io.Position = 0x340; byte xbase = (byte)(((io.ReadUInt32() + 0xFFF) & 0xF000) >> 0xC); if (io.ReadUInt32() != (uint)STFS.PackageType.Profile) { throw new Exception(); } io.Position = 0x379; if (io.ReadByte() != 0x24 || io.ReadByte() != 0) { throw new Exception(); } byte idx = (byte)(io.ReadByte() & 3); byte[] Desc = io.ReadBytes(5); if (idx == 0 || idx == 2) { if (xbase != 0xA) { throw new Exception(); } } else if (idx == 1) { if (xbase != 0xB) { throw new Exception(); } } else { throw new Exception(); } io.Position = 0x395; STFS.STFSDescriptor xDesc = new X360.STFS.STFSDescriptor(Desc, io.ReadUInt32(), io.ReadUInt32(), idx); int pos = (int)xDesc.GenerateDataOffset(xDesc.DirectoryBlock); uint block = xDesc.DirectoryBlock; while (pos != -1) { for (int i = 0; i < 0x40; i++) { if (pos == -1) { break; } io.Position = pos + 0x28 + (0x40 * i); byte nlen = (byte)(io.ReadByte() & 0x3F); if (nlen > 0x28) { nlen = 0x28; } io.Position = pos + (0x40 * i); if (io.ReadString(StringForm.ASCII, nlen) == "Account") { io.Position = pos + (0x40 * i) + 0x2F; List <byte> buff = new List <byte>(io.ReadBytes(3)); buff.Add(0); block = BitConv.ToUInt32(buff.ToArray(), false); pos = -1; } } if (pos != -1) { byte shift = xDesc.TopRecord.Index; if (xDesc.BlockCount >= Constants.BlockLevel[1]) { io.Position = (int)xDesc.GenerateHashOffset(block, X360.STFS.TreeLevel.L2) + 0x14 + (shift << 0xC); shift = (byte)((io.ReadByte() >> 6) & 1); } if (xDesc.BlockCount >= Constants.BlockLevel[0]) { io.Position = (int)xDesc.GenerateHashOffset(block, X360.STFS.TreeLevel.L1) + 0x14 + (xDesc.ThisType == STFS.STFSType.Type0 ? 0 : (shift << 0xC)); shift = (byte)((io.ReadByte() >> 6) & 1); } io.Position = (int)xDesc.GenerateHashOffset(block, X360.STFS.TreeLevel.L0) + 0x15 + (xDesc.ThisType == STFS.STFSType.Type0 ? 0 : (shift << 0xC)); List <byte> xbuff = new List <byte>(io.ReadBytes(3)); xbuff.Reverse(); xbuff.Insert(0, 3); block = BitConv.ToUInt32(xbuff.ToArray(), true); if (block == Constants.STFSEnd) { pos = -1; } } } if (block == 0xFFFFFF) { throw new Exception(); } io.Position = (int)xDesc.GenerateDataOffset(block); byte[] databuff = io.ReadBytes(404); Profile.UserAccount ua = new X360.Profile.UserAccount(new DJsIO(databuff, true), X360.Profile.AccountType.Stock, false); if (!ua.Success) { ua = new X360.Profile.UserAccount(new DJsIO(databuff, true), X360.Profile.AccountType.Kits, false); if (!ua.Success) { throw new Exception(); } } xReturn = ua.GetGamertag(); io.Close(); xDrive.xActive = false; return(xReturn); } catch { xDrive.xActive = false; return(xReturn); } }
private void Menu_Duplicate() { if (!entity.ID.HasValue) { throw new GUIException("Only entities with ID's can be duplicated."); } int maxid = 1; List <EntityPropertyRow <int> > drawlists = new List <EntityPropertyRow <int> >(); foreach (Chunk chunk in entityentrycontroller.EntryChunkController.NSFController.NSF.Chunks) { if (chunk is EntryChunk) { foreach (Entry entry in ((EntryChunk)chunk).Entries) { if (entry is EntityEntry) { foreach (Entity otherentity in ((EntityEntry)entry).Entities) { if (otherentity.ID.HasValue) { if (otherentity.ID.Value > maxid) { maxid = otherentity.ID.Value; } if (otherentity.AlternateID.HasValue && otherentity.AlternateID.Value > maxid) { maxid = otherentity.AlternateID.Value; } } if (otherentity.DrawListA != null) { drawlists.AddRange(otherentity.DrawListA.Rows); } if (otherentity.DrawListB != null) { drawlists.AddRange(otherentity.DrawListB.Rows); } } } } } } maxid++; int newindex = entityentrycontroller.EntityEntry.Entities.Count; newindex -= BitConv.FromInt32(entityentrycontroller.EntityEntry.Unknown1, 0x188); int entitycount = BitConv.FromInt32(entityentrycontroller.EntityEntry.Unknown1, 0x18C); BitConv.ToInt32(entityentrycontroller.EntityEntry.Unknown1, 0x18C, entitycount + 1); Entity newentity = Entity.Load(entity.Save()); newentity.ID = maxid; newentity.AlternateID = null; entityentrycontroller.EntityEntry.Entities.Add(newentity); entityentrycontroller.AddNode(new EntityController(entityentrycontroller, newentity)); foreach (EntityPropertyRow <int> drawlist in drawlists) { foreach (int value in drawlist.Values) { if ((value & 0xFFFF00) >> 8 == entity.ID.Value) { unchecked { drawlist.Values.Add((value & 0xFF) | (maxid << 8) | (newindex << 24)); } break; } } if (drawlist.Values.Contains(entity.ID.Value)) { drawlist.Values.Add(maxid); } } }
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Brush borderbrush = Brushes.Black; Brush brush = Brushes.Navy; Brush backbrush = Brushes.White; Brush hibackbrush = Brushes.LightGreen; Brush bithibackbrush = Brushes.LightCoral; Brush selbrush = Brushes.White; Brush selbackbrush = Brushes.Navy; Brush deadselbackbrush = Brushes.DarkGray; Brush inputselbackbrush = Brushes.Red; Brush eidbackbrush = Brushes.Chocolate; Brush voidbrush = Brushes.DarkMagenta; Font font = new Font(FontFamily.GenericMonospace, 8); Font selfont = new Font(FontFamily.GenericMonospace, 10); StringFormat format = new StringFormat(); StringFormat selformat = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; selformat.Alignment = StringAlignment.Center; selformat.LineAlignment = StringAlignment.Center; int hstep = (Width - 1) / 16; int vstep = (Height - 1) / 16; int width = hstep * 16; int height = vstep * 16; int xsel = position % 16; int ysel = position / 16; e.Graphics.FillRectangle(borderbrush, 0, 0, width + 1, height + 1); for (int y = 0; y < 16; y++) { for (int x = 0; x < 16; x++) { int i = x + (offset + y) * 16; Font curfont; Brush curbrush; Brush curbackbrush; StringFormat curformat; Rectangle rect = new Rectangle(); rect.X = hstep * x + 1; rect.Y = vstep * y + 1; rect.Width = hstep - 1; rect.Height = vstep - 1; string text; if (eidview && x % 4 == 0 && i + 3 < data.Length && (data[i] & 1) != 0 && (data[i + 3] & 128) == 0) { curfont = font; curbrush = selbrush; curbackbrush = eidbackbrush; curformat = format; rect.Width = hstep * 4 - 1; int eid = BitConv.FromInt32(data, i); e.Graphics.FillRectangle(curbackbrush, rect); e.Graphics.DrawString(Entry.EIDToString(eid), curfont, curbrush, rect, curformat); x += 3; continue; } if (x == xsel && y + offset == ysel && x + y * 16 < data.Length) { curfont = selfont; curbrush = selbrush; curformat = selformat; if (input == null) { curbackbrush = Focused ? selbackbrush : deadselbackbrush; text = data[x + (offset + y) * 16].ToString("X2"); } else { curbackbrush = Focused ? inputselbackbrush : deadselbackbrush; text = ((int)input).ToString("X"); } } else if (x + (offset + y) * 16 < data.Length) { curfont = font; curbrush = brush; if (viewbit != 8) { curbackbrush = ((data[x + (offset + y) * 16] & 1 << viewbit) != 0) ? bithibackbrush : backbrush; } else { curbackbrush = (data[x + (offset + y) * 16] != 0) ? hibackbrush : backbrush; } curformat = format; text = data[x + (offset + y) * 16].ToString("X2"); } else { curfont = null; curbrush = null; curbackbrush = voidbrush; curformat = null; text = ""; } e.Graphics.FillRectangle(curbackbrush, rect); if (x + (offset + y) * 16 < data.Length) { e.Graphics.DrawString(text, curfont, curbrush, rect, curformat); } } } /*for (int i = 0;i < 17;i += eidview ? 4 : 1) * { * e.Graphics.DrawLine(borderpen,hstep * i,0,hstep * i,height); * } * for (int i = 0;i < 17;i++) * { * e.Graphics.DrawLine(borderpen,0,vstep * i,width,vstep * i); * }*/ }