public MOPP(MOPPCode.CodeType type, MOPP old_codes) { Type = type; foreach (var code in old_codes.source_codes) { var new_code = code.Transform(Type); source_codes.Add(new_code); } }
static int Main() { bool write_testA = true; bool write_test_B = false; string test_a_output = "H3_chill.raw"; string test_a_file = "H3MP/H3_chill.raw"; string test_b_filea = "HO/HO_guardian.raw"; string test_b_fileb = "H3 MP/H3_guardian.raw"; if (write_testA) { MOPP original_mopp = new MOPP(MOPPCode.CodeType.Halo3, test_a_file); MOPP output_mopp = new MOPP(MOPPCode.CodeType.HaloOnline, original_mopp); output_mopp.Write(test_a_output); var odst_csv = new StringBuilder(); odst_csv.AppendLine( $"{csv_format("code")}," + $"{csv_format("position")}," + $"{csv_format("arg1")}," + $"{csv_format("arg2")}," + $"{csv_format("arg3")}," + $"{csv_format("arg4")}," + $"{csv_format("arg5")}," + $"{csv_format("arg6")}"); var offsets_dict = new Dictionary <string, bool>(); for (var i = 0; i < original_mopp.source_codes.Count; i++) { var odst_code = i < original_mopp.source_codes.Count ? original_mopp.source_codes[i] : null; if (odst_code != null) { var id = csv_format($"0x{odst_code.Code.ToString("X")}"); var pos = csv_format($"0x{odst_code.Position.ToString("X")}"); var str = $"{id},{pos}"; foreach (var arguement in odst_code.Arguments) { var inner_str = csv_format($"0x{arguement.ToString("X")}"); str += $",{inner_str}"; } odst_csv.AppendLine(str); } } File.WriteAllText("output.csv", odst_csv.ToString()); } if (write_test_B) { MOPP chill_ho = new MOPP(MOPPCode.CodeType.HaloOnline, test_b_filea); MOPP chill_h3 = new MOPP(MOPPCode.CodeType.Halo3, test_b_fileb); var offset_csv = new StringBuilder(); offset_csv.AppendLine( $"{csv_format("code_h3")}," + $"{csv_format("code_h0")}," + $"{csv_format("position")}," + $"{csv_format("offset1")}," + $"{csv_format("offset2")}," + $"{csv_format("offset3")}," + $"{csv_format("offset4")}," + $"{csv_format("offset5")}," + $"{csv_format("offset6")}"); var ho_csv = new StringBuilder(); ho_csv.AppendLine( $"{csv_format("code")}," + $"{csv_format("position")}," + $"{csv_format("arg1")}," + $"{csv_format("arg2")}," + $"{csv_format("arg3")}," + $"{csv_format("arg4")}," + $"{csv_format("arg5")}," + $"{csv_format("arg6")}"); var h3_csv = new StringBuilder(); h3_csv.AppendLine( $"{csv_format("code")}," + $"{csv_format("position")}," + $"{csv_format("arg1")}," + $"{csv_format("arg2")}," + $"{csv_format("arg3")}," + $"{csv_format("arg4")}," + $"{csv_format("arg5")}," + $"{csv_format("arg6")}"); var offsets_dict = new Dictionary <string, bool>(); bool no_longer_in_sync = false; for (var i = 0; i < chill_h3.source_codes.Count; i++) { var ho_code = i < chill_ho.source_codes.Count ? chill_ho.source_codes[i] : null; var h3_code = i < chill_h3.source_codes.Count ? chill_h3.source_codes[i] : null; no_longer_in_sync = false; if (ho_code == null || h3_code == null || ho_code.Code != h3_code.Code) { no_longer_in_sync = true; } if (!no_longer_in_sync && ho_code.Arguments.Count > 0) { var h3_id = csv_format($"0x{h3_code.Code.ToString("X")}"); var ho_id = csv_format($"0x{ho_code.Code.ToString("X")}"); var pos = csv_format($"0x{ho_code.Position.ToString("X")}"); var str = $"{h3_id},{ho_id},{pos}"; var str_cmp = $"{h3_id},{ho_id}"; for (var j = 0; j < ho_code.Arguments.Count; j++) { var ho_arguement = ho_code.Arguments[j]; var h3_arguement = h3_code.Arguments[j]; var offset = ho_arguement - h3_arguement; var offset_str = offset >= 0 ? $"0x{offset.ToString("X")}" : $"-0x{(-offset).ToString("X")}"; str += $",{csv_format(offset_str)}"; str_cmp += $",{csv_format(offset_str)}"; } if (!offsets_dict.ContainsKey(str_cmp)) { offsets_dict[str_cmp] = true; offset_csv.AppendLine(str); } } if (ho_code != null) { var id = csv_format($"0x{ho_code.Code.ToString("X")}"); var pos = csv_format($"0x{ho_code.Position.ToString("X")}"); var str = $"{id},{pos}"; foreach (var arguement in ho_code.Arguments) { var inner_str = csv_format($"0x{arguement.ToString("X")}"); str += $",{inner_str}"; } ho_csv.AppendLine(str); } if (h3_code != null) { var id = csv_format($"0x{h3_code.Code.ToString("X")}"); var pos = csv_format($"0x{h3_code.Position.ToString("X")}"); var str = $"{id},{pos}"; foreach (var arguement in h3_code.Arguments) { var inner_str = csv_format($"0x{arguement.ToString("X")}"); str += $",{inner_str}"; } h3_csv.AppendLine(str); } } File.WriteAllText("offsets.csv", offset_csv.ToString()); File.WriteAllText("halo3_mopp.csv", h3_csv.ToString()); File.WriteAllText("halo_online.csv", ho_csv.ToString()); } return(0); }