Example #1
0
File: MOPP.cs Project: num0005/MOPP
        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);
            }
        }
Example #2
0
File: MOPP.cs Project: num0005/MOPP
        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);
        }