public static void InsertObj(byte[] obj, int replace) { int f = GetFileIndexForWriting(ObjTable); int basea = ObjTable - MMFileList[f].Addr; uint replaceaddr = Arr_ReadU32(MMFileList[f].Data, basea + (replace * 8)); int objf = MMFileList.FindIndex(u => u.Addr == replaceaddr); if (objf == -1) { return; } ; if (obj.Length > (MMFileList[objf].End - MMFileList[objf].Addr)) { MMFile newfile = new MMFile(); newfile.Addr = MMFileList[MMFileList.Count - 1].End; newfile.End = newfile.Addr + obj.Length; newfile.IsCompressed = true; newfile.WasEdited = true; newfile.Data = obj; MMFileList[objf].Cmp_Addr = -1; MMFileList[objf].Cmp_End = -1; MMFileList[objf].Data = null; MMFileList[objf].IsCompressed = false; MMFileList.Add(newfile); Arr_WriteU32(MMFileList[f].Data, basea + (replace * 8), (uint)newfile.Addr); Arr_WriteU32(MMFileList[f].Data, basea + (replace * 8) + 4, (uint)newfile.End); } else { MMFileList[objf].Data = obj; MMFileList[objf].WasEdited = true; }; }
private static int AddNewFile(string filename) { MMFile newfile = new MMFile(); newfile.Addr = MMFileList[MMFileList.Count - 1].End; newfile.IsCompressed = false; BinaryReader data = new BinaryReader(File.Open(filename, FileMode.Open)); int len = (int)data.BaseStream.Length; newfile.Data = new byte[len]; data.Read(newfile.Data, 0, len); data.Close(); newfile.End = newfile.Addr + len; MMFileList.Add(newfile); return(newfile.Addr); }
private static int AddNewFile(string filename) { byte[] buffer; using (BinaryReader data = new BinaryReader(File.Open(filename, FileMode.Open))) { int len = (int)data.BaseStream.Length; buffer = new byte[len]; data.Read(buffer, 0, len); } int start = MMFileList[MMFileList.Count - 1].End; MMFile newfile = new MMFile { Addr = start, IsCompressed = false, Data = buffer, End = start + buffer.Length }; MMFileList.Add(newfile); return(newfile.Addr); }
//todo - rewrite this public static void RebuildAudioSeq(List <mmrMain.SeqInfo> SeqList) { List <MMSeq> OldSeq = new List <MMSeq>(); int f = AddrToFile((uint)SeqTable); CheckCompressed(f); int basea = MMFileList[f].Addr; for (int i = 0; i < 128; i++) { MMSeq entry = new MMSeq(); if (i == 0x1E) { entry.Addr = 2; entry.Size = 0; OldSeq.Add(entry); continue; } ; int entryaddr = SeqTable + (i * 16); entry.Addr = (int)Arr_ReadU32(MMFileList[f].Data, entryaddr - basea); entry.Size = (int)Arr_ReadU32(MMFileList[f].Data, (entryaddr - basea) + 4); if (entry.Size > 0) { entry.Data = new byte[entry.Size]; Array.Copy(MMFileList[4].Data, entry.Addr, entry.Data, 0, entry.Size); } else { int j = SeqList.FindIndex(u => u.Replaces == i); if (j != -1) { if ((entry.Addr > 0) && (entry.Addr < 128)) { if (SeqList[j].Replaces != 0x28) { SeqList[j].Replaces = entry.Addr; } else { entry.Data = OldSeq[0x18].Data; entry.Size = OldSeq[0x18].Size; }; } ; } ; }; OldSeq.Add(entry); } ; List <MMSeq> NewSeq = new List <MMSeq>(); int addr = 0; byte[] NewAudioSeq = new byte[0]; for (int i = 0; i < 128; i++) { MMSeq newentry = new MMSeq(); if (OldSeq[i].Size == 0) { newentry.Addr = OldSeq[i].Addr; } else { newentry.Addr = addr; }; int j = SeqList.FindIndex(u => u.Replaces == i); if (j != -1) { if (SeqList[j].MM_seq != -1) { newentry.Size = OldSeq[SeqList[j].MM_seq].Size; newentry.Data = OldSeq[SeqList[j].MM_seq].Data; } else { BinaryReader seq = new BinaryReader(File.Open(SeqList[j].Name, FileMode.Open)); int len = (int)seq.BaseStream.Length; byte[] data = new byte[len]; seq.Read(data, 0, len); seq.Close(); if (data[1] != 0x20) { data[1] = 0x20; } ; newentry.Size = len; newentry.Data = data; }; } else { newentry.Size = OldSeq[i].Size; newentry.Data = OldSeq[i].Data; }; NewSeq.Add(newentry); if (newentry.Data != null) { NewAudioSeq = NewAudioSeq.Concat(newentry.Data).ToArray(); } ; addr += newentry.Size; } ; if (addr > (MMFileList[4].End - MMFileList[4].Addr)) { MMFile newa = new MMFile(); newa.Addr = MMFileList[MMFileList.Count - 1].End; newa.End = newa.Addr + addr; newa.IsCompressed = false; newa.Data = NewAudioSeq; MMFileList.Add(newa); ApplyHack(mmrMain.ModsDir + "reloc-audio"); MMFileList[4].Data = new byte[0]; MMFileList[4].Cmp_Addr = -1; MMFileList[4].Cmp_End = -1; } else { MMFileList[4].Data = NewAudioSeq; }; //update pointer table f = AddrToFile((uint)SeqTable); for (int i = 0; i < 128; i++) { Arr_WriteU32(MMFileList[f].Data, (SeqTable + (i * 16)) - basea, (uint)NewSeq[i].Addr); Arr_WriteU32(MMFileList[f].Data, 4 + (SeqTable + (i * 16)) - basea, (uint)NewSeq[i].Size); } ; //update inst sets f = AddrToFile((uint)InstSetMap); CheckCompressed(f); basea = MMFileList[f].Addr; for (int i = 0; i < 128; i++) { int paddr = (InstSetMap - basea) + (i * 2) + 2; int j = -1; if (NewSeq[i].Size == 0) { j = SeqList.FindIndex(u => u.Replaces == NewSeq[i].Addr); } else { j = SeqList.FindIndex(u => u.Replaces == i); }; if (j != -1) { MMFileList[f].Data[paddr] = (byte)SeqList[j].Inst; } ; } ; }