Пример #1
0
        public static void Decompile()
        {
            var fIcons  = new Text(Path.Combine(Common.InputPath, "map_icons.txt"));
            var fSource = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_map_icons.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Icons);
            fIcons.GetString();
            int iMapIcons = fIcons.GetInt();

            for (int iMIcon = 0; iMIcon < iMapIcons; iMIcon++)
            {
                var strName = fIcons.GetWord();
                fSource.Write("  (\"{0}\",", strName);

                DWORD dwFlags = fIcons.GetDWord();
                fSource.Write(" {0},", dwFlags == 1 ? "mcn_no_shadow" : "0");

                var strMeshName = fIcons.GetWord();
                fSource.Write(" \"{0}\",", strMeshName);

                var    dScale = fIcons.GetDouble();
                int    iSound = fIcons.GetInt();
                double dX = fIcons.GetDouble(), dY = fIcons.GetDouble(), dZ = fIcons.GetDouble();

                fSource.Write(" {0}, {1}, {2}, {3}, {4}", dScale.ToString(CultureInfo.GetCultureInfo("en-US")), iSound != 0 ? iSound < Common.Sounds.Count ? "snd_" + Common.Sounds[iSound] : iSound.ToString(CultureInfo.GetCultureInfo("en-US")) : "0",
                              dX.ToString(CultureInfo.GetCultureInfo("en-US")), dY.ToString(CultureInfo.GetCultureInfo("en-US")), dZ.ToString(CultureInfo.GetCultureInfo("en-US")));

                int iTriggers = fIcons.GetInt();
                if (iTriggers > 0)
                {
                    fSource.Write(",\r\n  [\r\n");
                    for (int t = 0; t < iTriggers; t++)
                    {
                        double dInterval = fIcons.GetDouble();
                        fSource.WriteLine("    ({0},[", Common.GetTriggerParam(dInterval));

                        int iRecords = fIcons.GetInt();
                        Common.PrintStatement(ref fIcons, ref fSource, iRecords, "      ");

                        fSource.WriteLine("    ]),");
                    }
                    fSource.Write("  ]");
                }
                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fIcons.Close();

            Common.GenerateId("ID_map_icons.py", Common.MapIcons, "icon");
        }
Пример #2
0
        public static void Decompile()
        {
            var fActions = new Text(Path.Combine(Common.InputPath, "actions.txt"));
            var fSource  = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_animations.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Animations);
            var iActions = fActions.GetInt();

            for (int a = 0; a < iActions; a++)
            {
                var strAnimId         = fActions.GetWord();
                var dwAnimFlags       = fActions.GetDWord();
                var dwMasterAnimFlags = fActions.GetDWord();
                fSource.WriteLine("  [\"{0}\", {1}, {2},", strAnimId, DecompileFlags(dwAnimFlags), DecompileMasterFlags(dwMasterAnimFlags));
                var iAnimSequences = fActions.GetInt();
                for (int s = 0; s < iAnimSequences; s++)
                {
                    var dDuration = fActions.GetDouble();
                    var strName   = fActions.GetWord();
                    fSource.Write("    [{0}, \"{1}\",", dDuration.ToString(CultureInfo.GetCultureInfo("en-US")), strName);
                    int iBeginFrame = fActions.GetInt(), iEndingFrame = fActions.GetInt();
                    var dwSequenceFlags = fActions.GetDWord();

                    var dd      = new string[5]; //NOTE: Type string for non-english version of windows
                    var bZeroes = true;
                    for (int d = 0; d < 5; d++)
                    {
                        dd[d] = fActions.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US"));
                        if (dd[d] != "0")
                        {
                            bZeroes = false;
                        }
                    }
                    if (bZeroes)
                    {
                        fSource.Write(" {0}, {1}, {2}],\r\n", iBeginFrame, iEndingFrame, DecompileSequenceFlags(dwSequenceFlags));
                    }
                    else
                    {
                        fSource.Write(" {0}, {1}, {2}, {3}, ({4}, {5}, {6}), {7}],\r\n", iBeginFrame, iEndingFrame,
                                      DecompileSequenceFlags(dwSequenceFlags), DecompilePack((DWORD)Convert.ToDouble(dd[0], CultureInfo.GetCultureInfo("en-US"))), dd[1], dd[2], dd[3], dd[4]);
                    }
                }
                fSource.WriteLine("  ],");
            }
            fSource.Write("]");
            fSource.Close();
            fActions.Close();

            Common.GenerateId("ID_animations.py", Common.Animations, "anim");
        }
Пример #3
0
        public static void Decompile()
        {
            var fSkyboxes = new Text(Common.InputPath + "/skyboxes.txt");
            var fSource   = new Win32FileWriter(Common.OutputPath + "/module_skyboxes.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Skyboxes);

            int iSkyboxes = fSkyboxes.GetInt();

            for (int i = 0; i < iSkyboxes; i++)
            {
                string strID   = fSkyboxes.GetWord();
                DWORD  dwFlags = fSkyboxes.GetDWord();
                fSource.Write("  (\"{0}\", {1},", strID, DecompileFlags(dwFlags));

                for (int j = 0; j < 3; j++)
                {
                    fSource.Write(" {0},", fSkyboxes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")));
                }

                fSource.Write(" \"{0}\",", fSkyboxes.GetWord());

                for (int j = 0; j < 3; j++)
                {
                    fSource.Write(" ({0}, {1}, {2}),", fSkyboxes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")),
                                  fSkyboxes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")),
                                  fSkyboxes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")));
                }

                fSource.WriteLine(" ({0}, 0x{1:X8})),", fSkyboxes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")), fSkyboxes.GetDWord());
            }
            fSource.Write(@"]
def save_skyboxes():
  file = open(export_dir + ""Data/skyboxes.txt"",""w"")
  file.write(""d\n""%len(skyboxes))
  for skybox in  skyboxes:
    file.write(""%s %d %f %f %f %s\n""%(skybox[0],skybox[1],skybox[2],skybox[3],skybox[4],skybox[5]))
    file.write("" %f %f %f ""%skybox[6])
    file.write("" %f %f %f ""%skybox[7])
    file.write("" %f %f %f ""%skybox[8])
    file.write("" %f %d\n""%skybox[9])
  file.close()

print ""Exporting skyboxes...""
save_skyboxes()");
            fSource.Close();
            fSkyboxes.Close();
        }
Пример #4
0
        public static void Decompile()
        {
            var fTriggers = new Text(Path.Combine(Common.InputPath, "simple_triggers.txt"));
            var fSource   = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_simple_triggers.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.SimpleTriggers);
            fTriggers.GetString();
            int iSimpleTriggers = fTriggers.GetInt();

            for (int t = 0; t < iSimpleTriggers; t++)
            {
                fSource.Write("  ({0},\r\n  [", Common.GetTriggerParam(fTriggers.GetDouble()));
                int iRecords = fTriggers.GetInt();
                if (iRecords != 0)
                {
                    fSource.WriteLine();
                    Common.PrintStatement(ref fTriggers, ref fSource, iRecords, "    ");
                    fSource.Write("  ");
                }
                fSource.Write("]),\r\n\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fTriggers.Close();
        }
Пример #5
0
        public static string[] Initialize()
        {
            var fID = new Text(Common.InputPath + "/factions.txt");

            fID.GetString();
            int n         = Convert.ToInt32(fID.GetString());
            var aFactions = new string[n];

            for (int i = 0; i < n; i++)
            {
                string strFacID = fID.GetWord();
                if (strFacID == "0")
                {
                    strFacID = fID.GetWord();
                }
                aFactions[i] = strFacID.Remove(0, 4);

                fID.GetWord();
                fID.GetWord();
                fID.GetWord();

                for (int r = 0; r < n; r++)
                {
                    fID.GetDouble();
                }
            }
            fID.Close();

            return(aFactions);
        }
Пример #6
0
        public static string[] Initialize()
        {
            if (!File.Exists(Path.Combine(Common.InputPath, "factions.txt")))
            {
                return(Array.Empty <string>());
            }

            var fId = new Text(Path.Combine(Common.InputPath, "factions.txt"));

            fId.GetString();
            var n         = Convert.ToInt32(fId.GetString(), CultureInfo.GetCultureInfo("en-US"));
            var aFactions = new string[n];

            for (int i = 0; i < n; i++)
            {
                var strFacId = fId.GetWord();
                if (strFacId == "0")
                {
                    strFacId = fId.GetWord();
                }
                aFactions[i] = strFacId.Remove(0, 4);

                fId.GetWord();
                fId.GetWord();
                fId.GetWord();

                for (int r = 0; r < n; r++)
                {
                    fId.GetDouble();
                }
            }
            fId.Close();

            return(aFactions);
        }
Пример #7
0
        public static void Decompile()
        {
            var fPostfx = new Text(Path.Combine(Common.InputPath, "postfx.txt"));
            var fSource = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_postfx.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Postfx);
            fPostfx.GetString();
            int iPostFXs   = fPostfx.GetInt();
            var postfxList = new string[iPostFXs];

            for (int i = 0; i < iPostFXs; i++)
            {
                postfxList[i] = fPostfx.GetWord().Remove(0, 4);
                fSource.Write("  (\"{0}\"", postfxList[i]);

                var dwFlag = fPostfx.GetDWord();
                if (dwFlag == 1)
                {
                    fSource.Write(", fxf_highhdr");
                }
                else
                {
                    fSource.Write(", {0}", dwFlag);
                }

                var iOpType = fPostfx.GetInt();
                fSource.Write(", {0},", iOpType);
                for (int p = 0; p < 3; p++)
                {
                    double d1 = fPostfx.GetDouble(), d2 = fPostfx.GetDouble(), d3 = fPostfx.GetDouble(), d4 = fPostfx.GetDouble();
                    fSource.Write(" [{0}, {1}, {2}, {3}]{4}", d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")),
                                  d3.ToString(CultureInfo.GetCultureInfo("en-US")), d4.ToString(CultureInfo.GetCultureInfo("en-US")), p < 2 ? "," : "");
                }
                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fPostfx.Close();

            Common.GenerateId("ID_postfx_params.py", postfxList, "pfx");
        }
Пример #8
0
        public static void Decompile()
        {
            var fPresentations = new Text(Common.InputPath + "/presentations.txt");
            var fSource        = new Win32FileWriter(Common.OutputPath + "/module_presentations.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Presentations);
            fPresentations.GetString();
            int iPresentations = fPresentations.GetInt();

            for (int i = 0; i < iPresentations; i++)
            {
                fSource.Write("  (\"{0}\"", fPresentations.GetWord().Remove(0, 6));

                int iFlag = fPresentations.GetInt();
                fSource.Write(", {0}", DecompileFlags(iFlag));

                int iMesh = fPresentations.GetInt();
                if (iMesh >= 0 && iMesh < Common.Meshes.Length)
                {
                    fSource.Write(", mesh_{0}", Common.Meshes[iMesh]);
                }
                else
                {
                    fSource.Write(", {0}", iMesh);
                }
                fSource.Write(",\r\n  [\r\n");

                int iTriggers = fPresentations.GetInt();
                for (int t = 0; t < iTriggers; t++)
                {
                    double dInterval = fPresentations.GetDouble();
                    fSource.Write("    ({0},\r\n    [\r\n", Common.GetTriggerParam(dInterval));
                    int iRecords = fPresentations.GetInt();
                    if (iRecords != 0)
                    {
                        //memcpy(indention, "      ", 7);
                        Common.PrintStatement(ref fPresentations, ref fSource, iRecords, "      ");
                    }
                    fSource.Write("    ]),\r\n");
                }
                fSource.Write("  ]),\r\n\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fPresentations.Close();

            Common.GenerateId("ID_presentations.py", Common.Presentations, "prsnt");
        }
Пример #9
0
        public static void Decompile()
        {
            var fTriggers = new Text(Path.Combine(Common.InputPath, "triggers.txt"));
            var fSource   = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_triggers.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Triggers);
            fTriggers.GetString();
            int iTriggers = fTriggers.GetInt();

            for (int t = 0; t < iTriggers; t++)
            {
                double dCheckInterval = fTriggers.GetDouble(), dDelayInterval = fTriggers.GetDouble(), dReArmInterval = fTriggers.GetDouble();
                fSource.Write("  ({0}, {1}, {2},[", GetTriggerParam(dCheckInterval), GetTriggerParam(dDelayInterval), GetTriggerParam(dReArmInterval));
                int iConditionRecords = fTriggers.GetInt();
                if (iConditionRecords != 0)
                {
                    fSource.WriteLine();
                    Common.PrintStatement(ref fTriggers, ref fSource, iConditionRecords, "    ");
                    fSource.Write("  ");
                }
                fSource.Write("],\r\n  [");
                iConditionRecords = fTriggers.GetInt();
                if (iConditionRecords != 0)
                {
                    fSource.WriteLine();
                    Common.PrintStatement(ref fTriggers, ref fSource, iConditionRecords, "    ");
                    fSource.Write("  ");
                }

                fSource.WriteLine("]),\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fTriggers.Close();
        }
Пример #10
0
        public static void Decompile()
        {
            var fSceneProps = new Text(Path.Combine(Common.InputPath, "scene_props.txt"));
            var fSource     = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_scene_props.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.SceneProps);
            fSceneProps.GetString();
            var iSceneProps = fSceneProps.GetInt();

            for (int i = 0; i < iSceneProps; i++)
            {
                var strId  = fSceneProps.GetWord();
                var dwFlag = fSceneProps.GetUInt();
                fSceneProps.GetInt();
                fSource.Write("  (\"{0}\", {1}, \"{2}\", \"{3}\", [", strId.Remove(0, 4), DecompileFlags(dwFlag), fSceneProps.GetWord(), fSceneProps.GetWord());

                var iTriggers = fSceneProps.GetInt();

                for (int t = 0; t < iTriggers; t++)
                {
                    var dInterval = fSceneProps.GetDouble();
                    fSource.Write("\r\n    ({0},[\r\n", Common.GetTriggerParam(dInterval));

                    var iRecords = fSceneProps.GetInt();
                    if (iRecords != 0)
                    {
                        Common.PrintStatement(ref fSceneProps, ref fSource, iRecords, "      ");
                    }
                    fSource.WriteLine("    ]),");
                }
                fSource.WriteLine(iTriggers > 0 ? "  ]),\r\n" : "]),\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fSceneProps.Close();

            Common.GenerateId("ID_scene_props.py", Common.SceneProps, "spr");
        }
Пример #11
0
        public static void Decompile()
        {
            var fMeshes = new Text(Common.InputPath + "/meshes.txt");
            var fSource = new Win32FileWriter(Common.OutputPath + "/module_meshes.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Meshes);
            int iMeshes = fMeshes.GetInt();

            for (int m = 0; m < iMeshes; m++)
            {
                fSource.Write("  (\"{0}\", ", fMeshes.GetWord().Remove(0, 5));

                int iFlag = fMeshes.GetInt();
                if (iFlag == 1)
                {
                    fSource.Write("render_order_plus_1,");
                }
                else
                {
                    fSource.Write("{0},", iFlag);
                }

                fSource.Write(" \"{0}\"", fMeshes.GetWord());

                for (int i = 0; i < 9; i++)
                {
                    fSource.Write(", {0}", fMeshes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")));
                }
                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fMeshes.Close();

            Common.GenerateId("ID_meshes.py", Common.Meshes, "mesh");
        }
Пример #12
0
        public static void Decompile()
        {
            var fParticles = new Text(Path.Combine(Common.InputPath, "particle_systems.txt"));
            var fSource    = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_particle_systems.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.ParticleSystems);
            fParticles.GetString();
            int iParticles = fParticles.GetInt();

            for (int i = 0; i < iParticles; i++)
            {
                fSource.Write("  (\"{0}\", ", fParticles.GetWord().Remove(0, 5));

                DWORD dwFlag = fParticles.GetDWord();
                fSource.Write("{0}, \"{1}\",\r\n   ", DecompileFlags(dwFlag), fParticles.GetWord());
                for (int j = 0; j < 6; j++)
                {
                    fSource.Write(" {0},", fParticles.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")));
                }
                fSource.WriteLine();

                double d0, d1;
                for (int j = 0; j < 5; j++)
                {
                    d0 = fParticles.GetDouble(); d1 = fParticles.GetDouble();
                    fSource.Write("    ({0}, {1}),", d0.ToString(CultureInfo.GetCultureInfo("en-US")), d1.ToString(CultureInfo.GetCultureInfo("en-US")));
                    d0 = fParticles.GetDouble(); d1 = fParticles.GetDouble();
                    fSource.WriteLine(" ({0}, {1}),", d0.ToString(CultureInfo.GetCultureInfo("en-US")), d1.ToString(CultureInfo.GetCultureInfo("en-US")));
                }

                d0 = fParticles.GetDouble(); d1 = fParticles.GetDouble(); var d2 = fParticles.GetDouble();
                fSource.WriteLine("    ({0}, {1}, {2}),", d0.ToString(CultureInfo.GetCultureInfo("en-US")), d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")));

                d0 = fParticles.GetDouble(); d1 = fParticles.GetDouble(); d2 = fParticles.GetDouble();
                fSource.WriteLine("    ({0}, {1}, {2}),", d0.ToString(CultureInfo.GetCultureInfo("en-US")), d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")));

                d0 = fParticles.GetDouble(); d1 = fParticles.GetDouble(); d2 = fParticles.GetDouble();
                fSource.WriteLine("    {0},\r\n    {1}, {2}\r\n  ),\r\n", d0.ToString(CultureInfo.GetCultureInfo("en-US")), d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")));
            }
            fSource.Write("]");
            fSource.Close();
            fParticles.Close();

            Common.GenerateId("ID_particle_systems.py", Common.ParticleSystems, "psys");
        }
Пример #13
0
        public static void Decompile()
        {
            var fItems  = new Text(Common.InputPath + "/item_kinds1.txt");
            var fSource = new Win32FileWriter(Common.OutputPath + "/module_items.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Items);
            fItems.GetString();
            int iItems = fItems.GetInt();

            for (int i = 0; i < iItems; i++)
            {
                string strItemID = fItems.GetWord().Remove(0, 4);
                fSource.Write("  [\"{0}\"", strItemID);
                fItems.GetWord(); // skip second name

                string strItemName = fItems.GetWord();
                fSource.Write(",\"{0}\", [", strItemName);

                int iMeshes = fItems.GetInt();
                //if (iMeshes != 0)
                //    source.Write(", [");

                string strMeshes = "";
                for (int m = 0; m < iMeshes; m++)
                {
                    string  strMeshName = fItems.GetWord();
                    DWORD64 dwMeshBits  = fItems.GetUInt64();
                    strMeshes = strMeshes + $"(\"{strMeshName}\", {DecompileMeshesImodBits(dwMeshBits)}),";
                }
                if (strMeshes.Length > 0)
                {
                    strMeshes = strMeshes.Remove(strMeshes.Length - 1, 1);
                }

                fSource.Write("{0}]", strMeshes);

                DWORD64 dwItemFlags = fItems.GetUInt64();
                ulong   lItemCaps   = fItems.GetUInt64();

                BYTE bType;

                fSource.Write(", {0}, {1},", DecompileFlags(dwItemFlags, out bType), DecompileCapabilities(lItemCaps));
                int iCost = fItems.GetInt();

                //items.GetWord();
                DWORD64 dwImodBits = fItems.GetUInt64();

                string   strItemStats = "weight(" + fItems.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")) + ")";
                string[] strStats     = { "abundance", "head_armor",  "body_armor",    "leg_armor", "difficulty",    "hit_points",
                                          "spd_rtng",      "shoot_speed", "weapon_length", "max_ammo",  "thrust_damage", "swing_damage" };
                for (int v = 0; v < 12; v++)
                {
                    int iValue = fItems.GetInt();

                    string strState = strStats[v];

                    if (bType == HORSE_TYPE && strState == "shoot_speed")
                    {
                        strState = "horse_speed";
                    }
                    else if (bType == HORSE_TYPE && strState == "spd_rtng")
                    {
                        strState = "horse_maneuver";
                    }
                    else if (bType == GOODS_TYPE && strState == "head_armor")
                    {
                        strState = "food_quality";
                    }
                    else if ((bType == BOW_TYPE || bType == CROSSBOW_TYPE || bType == MUSKET_TYPE || bType == PISTOL_TYPE) && strState == "leg_armor")
                    {
                        strState = "accuracy";
                    }
                    else if (bType == SHIELD_TYPE && strState == "weapon_length")
                    {
                        strState = "shield_width";
                    }
                    else if (bType == SHIELD_TYPE && strState == "shoot_speed")
                    {
                        strState = "shield_height";
                    }

                    if (iValue != 0)
                    {
                        if (v >= 10)
                        {
                            int    iDamage       = iValue & 0xFF;
                            int    iDamageType   = (iValue - iDamage) >> 8;
                            string strDamageType = "";
                            switch (iDamageType)
                            {
                            case 0:
                                strDamageType = "cut";
                                break;

                            case 1:
                                strDamageType = "pierce";
                                break;

                            case 2:
                                strDamageType = "blunt";
                                break;
                            }
                            if (bType == HORSE_TYPE && strState == "thrust_damage" && iDamageType == 0)
                            {
                                strItemStats = strItemStats + $"|horse_charge({iDamage})";
                            }
                            else
                            {
                                strItemStats = strItemStats + $"|{strState}({iDamage}, {strDamageType})";
                            }
                        }
                        else
                        {
                            strItemStats = strItemStats + $"|{strState}({iValue})";
                        }
                    }
                }
                fSource.Write("{0}, {1}, {2}", iCost, strItemStats, DecompileImodBits(dwImodBits));

                int    iFactions      = fItems.GetInt();
                string strFactionList = "";
                for (int f = 0; f < iFactions; f++)
                {
                    int iFaction = fItems.GetInt();
                    strFactionList += "fac_" + Common.Factions[iFaction] + ",";
                }
                if (strFactionList != "")
                {
                    strFactionList = strFactionList.Remove(strFactionList.Length - 1, 1);
                }

                int iTriggers = fItems.GetInt();
                if (iTriggers != 0)
                {
                    fSource.Write(", [\r\n    ");
                    for (int t = 0; t < iTriggers; t++)
                    {
                        double dInterval = fItems.GetDouble();
                        fSource.WriteLine("({0}, [", Common.GetTriggerParam(dInterval));

                        int iRecords = fItems.GetInt();
                        //memcpy(indention, "      ", 7);
                        Common.PrintStatement(ref fItems, ref fSource, iRecords, "      ");

                        fSource.Write("    ]),\r\n   ");
                    }
                    fSource.Write("]");
                }
                else
                {
                    fSource.Write(", []");
                }

                if (iFactions != 0)
                {
                    fSource.WriteLine(", [{0}]],", strFactionList);
                }
                else
                {
                    fSource.WriteLine("],");
                }
            }
            fSource.Write("]");
            fSource.Close();
            fItems.Close();

            Common.GenerateId("ID_items.py", Common.Items, "itm");
        }
Пример #14
0
        public static void Decompile()
        {
            var fParties = new Text(Common.InputPath + "/parties.txt");
            var fSource  = new Win32FileWriter(Common.OutputPath + "/module_parties.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Parties);
            fParties.GetString();
            int iParties = fParties.GetInt();

            fParties.GetInt();
            for (int i = 0; i < iParties; i++)
            {
                fParties.GetInt(); fParties.GetInt(); fParties.GetInt();
                fSource.Write(" (\"{0}\", \"{1}\", {2}", fParties.GetWord().Remove(0, 2), fParties.GetWord().Replace('_', ' '), DecompileFlags(fParties.GetDWord()));

                int iMenu = fParties.GetInt();
                fSource.Write(", {0}", iMenu == 0 ? "no_menu" : "mnu_" + Common.Menus[iMenu]);

                int iParty = fParties.GetInt();
                fSource.Write(", {0}", iParty == 0 ? "pt_none" : "pt_" + Common.PTemps[iParty]);

                int iFaction = fParties.GetInt();
                fSource.Write(", {0}", "fac_" + Common.Factions[iFaction]);

                int iPersonality = fParties.GetInt(); fParties.GetInt();
                fSource.Write(", {0}", iPersonality);

                int      iAIbehaviour    = fParties.GetInt(); fParties.GetInt();
                string[] strAIbehaviours = { "ai_bhvr_hold",           "ai_bhvr_travel_to_party", "ai_bhvr_patrol_location", "ai_bhvr_patrol_party",
                                             "ai_bhvr_attack_party",   "ai_bhvr_avoid_party",     "ai_bhvr_travel_to_point", "ai_bhvr_negotiate_party","ai_bhvr_in_town",
                                             "ai_bhvr_travel_to_ship", "ai_bhvr_escort_party",    "ai_bhvr_driven_by_party" };
                fSource.Write(", {0}", iAIbehaviour <= 11 ? strAIbehaviours[iAIbehaviour] : iAIbehaviour.ToString(CultureInfo.GetCultureInfo("en-US")));

                int iAITargetParty = fParties.GetInt();
                fSource.Write(", {0}", iAITargetParty);

                double dX = fParties.GetDouble(), dY = fParties.GetDouble();
                fSource.Write(", ({0}, {1}), [", dX.ToString(CultureInfo.GetCultureInfo("en-US")), dY.ToString(CultureInfo.GetCultureInfo("en-US")));
                fParties.GetDouble(); fParties.GetDouble(); fParties.GetDouble(); fParties.GetDouble(); fParties.GetDouble();

                int iRecords = fParties.GetInt();
                for (int j = 0; j < iRecords; j++)
                {
                    int iTroop     = fParties.GetInt();
                    int iNumTroops = fParties.GetInt(); fParties.GetInt();
                    int iFlag      = fParties.GetInt();
                    fSource.Write("(trp_{0}, {1}, {2}){3}", Common.Troops[iTroop], iNumTroops, iFlag == 1 ? "pmf_is_prisoner" : "0", j == (iRecords - 1) ? "" : ",");
                }
                fSource.Write("]");
                double dAngle = fParties.GetDouble();
                if (Math.Abs(dAngle) > 0.0000001)
                {
                    fSource.Write(", {0}", (Math.Round(dAngle * (180 / Math.PI))).ToString(CultureInfo.GetCultureInfo("en-US")));
                }

                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fParties.Close();

            Common.GenerateId("ID_parties.py", Common.Parties, "p");
        }
Пример #15
0
        public static void Decompile()
        {
            var fMissionTemplates = new Text(Path.Combine(Common.InputPath, "mission_templates.txt"));
            var fSource           = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_mission_templates.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.MissionTemplates);
            fMissionTemplates.GetString();
            int iMissionTemplates = fMissionTemplates.GetInt();

            for (int m = 0; m < iMissionTemplates; m++)
            {
                fMissionTemplates.GetWord();
                fSource.Write("  (\"{0}\",", fMissionTemplates.GetWord());

                var      dwFlag   = fMissionTemplates.GetDWord();
                var      sbFlag   = new StringBuilder(256);
                string[] strFlags = { "mtf_arena_fight", "mtf_battle_mode", "mtf_commit_casualties", "mtf_no_blood", "mtf_synch_inventory" };
                DWORD[]  dwFlags  = { 0x00000001, 0x00000002, 0x00000010, 0x00000100, 0x00010000 };
                for (int i = 0; i < dwFlags.Length; i++)
                {
                    if ((dwFlag & dwFlags[i]) == 0)
                    {
                        continue;
                    }
                    dwFlag ^= dwFlags[i];
                    sbFlag.Append(strFlags[i]);
                    sbFlag.Append('|');
                }

                if (sbFlag.Length == 0)
                {
                    sbFlag.Append('0');
                }
                else
                {
                    sbFlag.Length--;
                }

                fSource.Write(" {0},", sbFlag.ToString());

                var iType   = fMissionTemplates.GetInt();
                var strType = "";
                if (iType == 8)
                {
                    strType = "charge";
                }
                else if (iType == 10)
                {
                    strType = "charge_with_ally";
                }

                if (strType.Length > 0)
                {
                    fSource.WriteLine(" {0},", strType);
                }
                else
                {
                    fSource.WriteLine(" {0},", iType);
                }

                fSource.WriteLine("  \"{0}\",\r\n  [", fMissionTemplates.GetWord().Replace('_', ' '));
                var iSpawnRecords = fMissionTemplates.GetInt();
                for (int i = 0; i < iSpawnRecords; i++)
                {
                    var iNum        = fMissionTemplates.GetInt();
                    var dwSpawnFlag = fMissionTemplates.GetDWord();
                    var dwAlterFlag = fMissionTemplates.GetDWord();
                    var dwAIFlag    = fMissionTemplates.GetDWord();
                    var iTroops     = fMissionTemplates.GetInt();
                    var iItems      = fMissionTemplates.GetInt();
                    fSource.Write("    ({0}, {1}, {2}", iNum, DecompileSpawnFlags(dwSpawnFlag), DecompileAlterFlags(dwAlterFlag));

                    if (dwAIFlag == 0x00000010)
                    {
                        fSource.Write(", aif_start_alarmed");
                    }
                    else
                    {
                        fSource.Write(", {0}", dwAIFlag);
                    }

                    fSource.Write(", {0}, [", iTroops);

                    var itemsList = new int[iItems];
                    for (int j = 0; j < iItems; j++)
                    {
                        itemsList[j] = fMissionTemplates.GetInt();
                    }
                    fSource.WriteLine("{0}]),", String.Join(",", itemsList.Select(t => t <Common.Items.Count && t> -1 ? $"itm_{Common.Items[t]}" : t.ToString(CultureInfo.GetCultureInfo("en-US")))));
                }
                fSource.WriteLine("  ],\r\n  [");

                int iTriggers = fMissionTemplates.GetInt();
                for (int i = 0; i < iTriggers; i++)
                {
                    fSource.Write("    (");
                    for (int j = 0; j < 3; j++)
                    {
                        double dInterval = fMissionTemplates.GetDouble();
                        fSource.Write("{0}, ", Common.GetTriggerParam(dInterval));
                    }
                    fSource.Write("\r\n    [");

                    int iConditionRecords = fMissionTemplates.GetInt();
                    if (iConditionRecords != 0)
                    {
                        fSource.WriteLine();
                        Common.PrintStatement(ref fMissionTemplates, ref fSource, iConditionRecords, "      ");
                        fSource.Write("    ");
                    }
                    fSource.Write("],\r\n    [");
                    iConditionRecords = fMissionTemplates.GetInt();
                    if (iConditionRecords != 0)
                    {
                        fSource.WriteLine();
                        Common.PrintStatement(ref fMissionTemplates, ref fSource, iConditionRecords, "      ");
                        fSource.Write("    ");
                    }

                    fSource.Write("]),\r\n\r\n");
                }
                fSource.Write("  ]),\r\n\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fMissionTemplates.Close();

            Common.GenerateId("ID_mission_templates.py", Common.MissionTemplates, "mst");
        }
Пример #16
0
        public static void Decompile()
        {
            var fFactions = new Text(Common.InputPath + "/factions.txt");
            var fSource   = new Win32FileWriter(Common.OutputPath + "/module_factions.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Factions);
            fFactions.GetString();
            int iFactions = fFactions.GetInt();

            for (int f = 0; f < iFactions; f++)
            {
                string strFacID = fFactions.GetWord();
                if (strFacID == "0")
                {
                    strFacID = fFactions.GetWord();
                }
                string strFacName = fFactions.GetWord();
                fSource.Write("  (\"{0}\", \"{1}\",", strFacID.Remove(0, 4), strFacName);

                string strFlags = "";
                DWORD  dwFlags  = fFactions.GetUInt();
                int    iRating  = ((int)(dwFlags & 0xFF00)) >> 8;
                if (iRating != 0)
                {
                    strFlags = $"max_player_rating({100 - iRating})";
                }

                if ((dwFlags & 1) != 0)
                {
                    if (strFlags != "")
                    {
                        strFlags = strFlags + "|";
                    }
                    strFlags += "ff_always_hide_label";
                }
                if (strFlags == "")
                {
                    strFlags = "0";
                }

                fSource.Write(" {0}, 0.0, [", strFlags);

                DWORD dwColor = fFactions.GetUInt();

                string strRelations = "";
                for (int r = 0; r < iFactions; r++)
                {
                    double rRelation = fFactions.GetDouble();
                    if (Math.Abs(rRelation) > 0.000001)
                    {
                        strRelations +=
                            $"(\"{Common.Factions[r]}\", {rRelation.ToString(CultureInfo.GetCultureInfo("en-US"))}),";
                    }
                }
                if (strRelations != "")
                {
                    strRelations = strRelations.Remove(strRelations.Length - 1, 1);
                }

                fSource.Write("{0}], []", strRelations);

                if (dwColor != 0xAAAAAA)
                {
                    fSource.Write(", 0x{0:X}", dwColor);
                }

                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fFactions.Close();

            Common.GenerateId("ID_factions.py", Common.Factions, "fac");
        }
Пример #17
0
        public static void Decompile()
        {
            var fGroundSpecs = new Text(Path.Combine(Common.InputPath, "ground_specs.txt"));
            var fSource      = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_ground_specs.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.GroundSpecs);

            int n = GetLexemsInFile(Path.Combine(Common.InputPath, "ground_specs.txt")) >> 3;  // / 8;

            for (int i = 0; i < n; i++)
            {
                var    strId                   = fGroundSpecs.GetWord();
                var    dwFlag                  = fGroundSpecs.GetUInt();
                var    strMaterial             = fGroundSpecs.GetWord();
                var    dblUVScale              = fGroundSpecs.GetDouble();
                var    strMultitexMaterialName = fGroundSpecs.GetWord();
                double dColor1                 = fGroundSpecs.GetDouble(),
                       dColor2                 = fGroundSpecs.GetDouble(),
                       dColor3                 = fGroundSpecs.GetDouble();

                var      sbFlag   = new StringBuilder(64);
                string[] strFlags = { "gtf_overlay", "gtf_dusty", "gtf_has_color" };
                DWORD[]  dwFlags  = { 1, 2, 4 };

                for (int j = 0; j < dwFlags.Length; j++)
                {
                    if ((dwFlag & dwFlags[j]) == 0)
                    {
                        continue;
                    }
                    dwFlag ^= dwFlags[j];
                    sbFlag.Append(strFlags[j]);
                    sbFlag.Append('|');
                }

                if (sbFlag.Length == 0)
                {
                    sbFlag.Append('0');
                }
                else
                {
                    sbFlag.Length--;
                }

                fSource.WriteLine("  (\"{0}\", {1}, \"{2}\", {3}, \"{4}\", ({5}, {6}, {7})),", strId, sbFlag, strMaterial,
                                  dblUVScale.ToString(CultureInfo.GetCultureInfo("en-US")), strMultitexMaterialName,
                                  dColor1.ToString(CultureInfo.GetCultureInfo("en-US")), dColor2.ToString(CultureInfo.GetCultureInfo("en-US")),
                                  dColor3.ToString(CultureInfo.GetCultureInfo("en-US")));
            }
            fSource.WriteLine(@"]

def write_vec(file,vec):
  file.write("" %f %f %f ""%vec)
  
def save_ground_specs():
  file = open(export_dir + ""Data/ground_specs.txt"",""w"")
  for ground_spec in ground_specs:
    file.write("" %s %d %s %f %s""%(ground_spec[0],ground_spec[1],ground_spec[2],ground_spec[3],ground_spec[4]))
    if (ground_spec[1] & gtf_has_color):
      file.write("" %f %f %f""%ground_spec[5])
    file.write(""\n"")
  file.close()

def save_c_header():
  file = open(export_dir + ""ground_spec_codes.h"",""w"")
  file.write(""#ifndef _GROUND_SPEC_CODES_H\n"")
  file.write(""#define _GROUND_SPEC_CODES_H\n\n"")
  file.write(""typedef enum {\n"")
  for ground_spec in ground_specs:
    file.write(""  ground_%s,\n""%ground_spec[0])
  file.write(""}Ground_spec_codes;\n"")
  file.write(""const int num_ground_specs = %d;\n""%(len(ground_specs)))
  file.write(""\n\n"")
  file.write(""\n#endif\n"")
  file.close()
  
def save_python_header():
  file = open(""./header_ground_types.py"",""w"")
  for ig in xrange(len(ground_specs)):
    ground_spec = ground_specs[ig]
    file.write(""ground_%s = %d\n""%(ground_spec[0], ig))
  file.write(""\n\n"")
  file.close()

print ""Exporting ground_spec data...""
save_ground_specs()
save_c_header()
save_python_header()");
            fSource.Close();
            fGroundSpecs.Close();
        }
Пример #18
0
        public static void Decompile()
        {
            var fSkins  = new Text(Common.InputPath + "/skins.txt");
            var fSource = new Win32FileWriter(Common.OutputPath + "/module_skins.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Skins);
            fSkins.GetString();
            int iSkins = fSkins.GetInt();

            for (int s = 0; s < iSkins; s++)
            {
                fSource.WriteLine("  (\r\n    \"{0}\", {1},", fSkins.GetWord(), fSkins.GetInt());
                fSource.WriteLine("    \"{0}\", \"{1}\", \"{2}\",", fSkins.GetWord(), fSkins.GetWord(), fSkins.GetWord());
                fSource.WriteLine("    \"{0}\",\r\n    [", fSkins.GetWord());

                int iFaceKeys = fSkins.GetInt();
                for (int i = 0; i < iFaceKeys; i++)
                {
                    fSkins.GetWord();
                    double d1 = fSkins.GetDouble(), d2 = fSkins.GetDouble(), d3 = fSkins.GetDouble(), d4 = fSkins.GetDouble();
                    string strText = fSkins.GetWord();
                    fSource.WriteLine("      ({0}, {1}, {2}, {3}, \"{4}\"),", d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")),
                                      d3.ToString(CultureInfo.GetCultureInfo("en-US")), d4.ToString(CultureInfo.GetCultureInfo("en-US")), strText.Replace('_', ' '));
                }
                fSource.WriteLine("    ],");

                int iMeshesHair = fSkins.GetInt();
                fSource.Write("    [");
                for (int i = 0; i < iMeshesHair; i++)
                {
                    fSource.Write("\"{0}\"{1}", fSkins.GetWord(), i != iMeshesHair - 1 ? ", " : "");
                }
                fSource.WriteLine("],");

                int iMeshesBeard = fSkins.GetInt();
                fSource.Write("    [");
                for (int i = 0; i < iMeshesBeard; i++)
                {
                    fSource.Write("\"{0}\"{1}", fSkins.GetWord(), i != iMeshesBeard - 1 ? ", " : "");
                }
                fSource.WriteLine("],");

                for (int i = 0; i < 2; i++)
                {
                    int iTextures = fSkins.GetInt();
                    fSource.Write("    [");
                    for (int t = 0; t < iTextures; t++)
                    {
                        fSource.Write("\"{0}\"{1}", fSkins.GetWord(), t != iTextures - 1 ? ", " : "");
                    }
                    fSource.WriteLine("],");
                }

                int iTexturesFace = fSkins.GetInt();
                fSource.WriteLine("    [");
                for (int i = 0; i < iTexturesFace; i++)
                {
                    fSource.Write("      (\"{0}\", 0x{1:X}, ", fSkins.GetWord(), fSkins.GetDWord());
                    int iHairMats   = fSkins.GetInt();
                    int iHairColors = fSkins.GetInt();
                    for (int m = 0; m < iHairMats; m++)
                    {
                        fSource.Write("[\"{0}\"], ", fSkins.GetWord());
                    }
                    fSource.Write("[");
                    for (int c = 0; c < iHairColors; c++)
                    {
                        //fprintf( g_fOutput, " 0x%X,", GetDWord() );
                        fSource.Write("0x{0:x}{1}", fSkins.GetUInt64(), c != iHairColors - 1 ? ", " : "");
                    }
                    fSource.WriteLine("]),");
                }
                fSource.WriteLine("    ],");

                int iVoices = fSkins.GetInt();
                fSource.Write("    [");
                for (int v = 0; v < iVoices; v++)
                {
                    DWORD    dwFlag   = fSkins.GetDWord();
                    string[] strFlags = { "voice_die", "voice_hit", "voice_grunt", "voice_grunt_long", "voice_yell", "voice_warcry", "voice_victory", "voice_stun" };
                    if (dwFlag <= 7)
                    {
                        fSource.Write("({0},", strFlags[dwFlag]);
                    }
                    else
                    {
                        fSource.Write("({0},", dwFlag);
                    }

                    string strSound = fSkins.GetWord();
                    fSource.Write(" \"{0}\"){1}", strSound, v != iVoices - 1 ? "," : "");
                }
                fSource.WriteLine("],");

                string strSkeleton = fSkins.GetWord();
                fSource.WriteLine("    \"{0}\", {1},", strSkeleton, fSkins.GetWord());

                int ixParticleSystem1 = fSkins.GetInt(),
                    ixParticleSystem2 = fSkins.GetInt();
                fSource.WriteLine("    psys_{0}, psys_{1},", Common.ParticleSystems[ixParticleSystem1], Common.ParticleSystems[ixParticleSystem2]);

                int iConstraints = fSkins.GetInt();
                fSource.Write("    [");
                for (int i = 0; i < iConstraints; i++)
                {
                    double d1 = fSkins.GetDouble();
                    fSource.Write("\r\n      [{0},", d1.ToString(CultureInfo.GetCultureInfo("en-US")));

                    int    i1 = fSkins.GetInt();
                    string c1 = i1 == 1 ? "comp_greater_than" : i1 == -1 ? "comp_less_than" : "0";
                    if (c1 != "0")
                    {
                        fSource.Write(" {0}, ", c1);
                    }
                    else
                    {
                        fSource.Write(" {0}, ", i1);
                    }

                    int count = fSkins.GetInt();
                    for (int c = 0; c < count; c++)
                    {
                        double dc1 = fSkins.GetDouble();
                        int    ic1 = fSkins.GetInt();

                        fSource.Write("({0}, {1}){2}", dc1.ToString(CultureInfo.GetCultureInfo("en-US")), ic1, c != count - 1 ? "," : "");
                    }
                    fSource.Write("],");
                }
                fSource.WriteLine("\r\n  ]),\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fSkins.Close();
        }
Пример #19
0
        public static void Decompile()
        {
            var fMissionTemplates = new Text(Common.InputPath + "/mission_templates.txt");
            var fSource           = new Win32FileWriter(Common.OutputPath + "/module_mission_templates.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.MissionTemplates);
            fMissionTemplates.GetString();
            int iMissionTemplates = fMissionTemplates.GetInt();

            for (int m = 0; m < iMissionTemplates; m++)
            {
                fMissionTemplates.GetWord();
                fSource.Write("  (\"{0}\",", fMissionTemplates.GetWord());

                DWORD    dwFlag   = fMissionTemplates.GetDWord();
                string   strFlag  = "";
                string[] strFlags = { "mtf_arena_fight", "mtf_battle_mode", "mtf_commit_casualties", "mtf_no_blood", "mtf_synch_inventory" };
                DWORD[]  dwFlags  = { 0x00000001, 0x00000002, 0x00000010, 0x00000100, 0x00010000 };
                for (int i = 0; i < dwFlags.Length; i++)
                {
                    if ((dwFlag & dwFlags[i]) != 0)
                    {
                        dwFlag  ^= dwFlags[i];
                        strFlag += strFlags[i] + "|";
                    }
                }

                /*for (int i = dwFlags.Length - 1; i >= 0; i--)
                 * {
                 *  if (dwFlag >= dwFlags[i])
                 *  {
                 *      strFlag = strFlag + strFlags[i] + "|";
                 *  }
                 * }*/

                strFlag = strFlag == "" ? "0" : strFlag.Remove(strFlag.Length - 1, 1);

                /*var sbFlag = new StringBuilder(256);
                 * string[] strFlags = { "mtf_arena_fight", "mtf_battle_mode", "mtf_commit_casualties", "mtf_no_blood", "mtf_synch_inventory" };
                 * DWORD[] dwFlags = { 0x00000001, 0x00000002, 0x00000010, 0x00000100, 0x00010000 };
                 * for (int i = 0; i < dwFlags.Length; i++)
                 * {
                 *  if ((dwFlag & dwFlags[i]) != 0)
                 *  {
                 *      dwFlag ^= dwFlags[i];
                 *      sbFlag.Append(strFlags[i]);
                 *      sbFlag.Append('|');
                 *  }
                 * }
                 * if (sbFlag.Length == 0)
                 *  sbFlag.Append('0');
                 * else
                 *  sbFlag.Length--;*/

                fSource.Write(" {0},", strFlag);

                int    iType   = fMissionTemplates.GetInt();
                string strType = "";
                if (iType == 8)
                {
                    strType = "charge";
                }
                else if (iType == 10)
                {
                    strType = "charge_with_ally";
                }
                if (strType != "")
                {
                    fSource.WriteLine(" {0},", strType);
                }
                else
                {
                    fSource.WriteLine(" {0},", iType);
                }

                fSource.WriteLine("  \"{0}\",\r\n  [", fMissionTemplates.GetWord().Replace('_', ' '));
                int iSpawnRecords = fMissionTemplates.GetInt();
                for (int i = 0; i < iSpawnRecords; i++)
                {
                    int   iNum        = fMissionTemplates.GetInt();
                    DWORD dwSpawnFlag = fMissionTemplates.GetDWord();
                    DWORD dwAlterFlag = fMissionTemplates.GetDWord();
                    DWORD dwAIFlag    = fMissionTemplates.GetDWord();
                    int   iTroops     = fMissionTemplates.GetInt();
                    int   iItems      = fMissionTemplates.GetInt();
                    fSource.Write("    ({0}, {1}, {2}", iNum, DecompileSpawnFlags(dwSpawnFlag), DecompileAlterFlags(dwAlterFlag));

                    if (dwAIFlag == 0x00000010)
                    {
                        fSource.Write(", aif_start_alarmed");
                    }
                    else
                    {
                        fSource.Write(", {0}", dwAIFlag);
                    }

                    fSource.Write(", {0}, [", iTroops);

                    string strItemList = "";
                    for (int j = 0; j < iItems; j++)
                    {
                        //fSource.Write("{0},", Common.Items[fMissionTemplates.GetInt()]);
                        strItemList = strItemList + $"itm_{Common.Items[fMissionTemplates.GetInt()]},";
                    }
                    if (strItemList.Length > 0)
                    {
                        strItemList = strItemList.Remove(strItemList.Length - 1, 1);
                    }
                    fSource.WriteLine("{0}]),", strItemList);
                }
                fSource.WriteLine("  ],\r\n  [");

                int iTriggers = fMissionTemplates.GetInt();
                for (int i = 0; i < iTriggers; i++)
                {
                    fSource.Write("    (");
                    for (int j = 0; j < 3; j++)
                    {
                        double dInterval = fMissionTemplates.GetDouble();
                        fSource.Write("{0}, ", Common.GetTriggerParam(dInterval));
                    }
                    fSource.Write("\r\n    [");

                    int iConditionRecords = fMissionTemplates.GetInt();
                    if (iConditionRecords != 0)
                    {
                        fSource.WriteLine();
                        Common.PrintStatement(ref fMissionTemplates, ref fSource, iConditionRecords, "      ");
                        fSource.Write("    ");
                    }
                    fSource.Write("],\r\n    [");
                    iConditionRecords = fMissionTemplates.GetInt();
                    if (iConditionRecords != 0)
                    {
                        fSource.WriteLine();
                        Common.PrintStatement(ref fMissionTemplates, ref fSource, iConditionRecords, "      ");
                        fSource.Write("    ");
                    }

                    fSource.Write("]),\r\n\r\n");
                }
                fSource.Write("  ]),\r\n\r\n");
            }
            fSource.Write("]");
            fSource.Close();
            fMissionTemplates.Close();

            Common.GenerateId("ID_mission_templates.py", Common.MissionTemplates, "mst");
        }
Пример #20
0
        public static void Decompile()
        {
            var fScenes = new Text(Common.InputPath + "/scenes.txt");
            var fSource = new Win32FileWriter(Common.OutputPath + "/module_scenes.py");

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Scenes);
            fScenes.GetString();
            int iScenes = fScenes.GetInt();

            for (int iS = 0; iS < iScenes; iS++)
            {
                fScenes.GetWord();
                fSource.Write(" (\"{0}\"", fScenes.GetWord());

                DWORD dwFlag = fScenes.GetDWord();
                fSource.Write(", {0}, \"{1}\", \"{2}\"", DecompileFlags(dwFlag), fScenes.GetWord(), fScenes.GetWord());

                double d1 = fScenes.GetDouble(), d2 = fScenes.GetDouble();
                fSource.Write(", ({0}, {1})", d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")));
                d1 = fScenes.GetDouble(); d2 = fScenes.GetDouble();
                fSource.Write(", ({0}, {1})", d1.ToString(CultureInfo.GetCultureInfo("en-US")), d2.ToString(CultureInfo.GetCultureInfo("en-US")));

                fSource.Write(", {0}, \"{1}\",[", fScenes.GetDouble().ToString(CultureInfo.GetCultureInfo("en-US")), fScenes.GetWord());

                int iPassages = fScenes.GetInt();
                for (int i = 0; i < iPassages; i++)
                {
                    int iScene = fScenes.GetInt();
                    if (iScene == 100000)
                    {
                        fSource.Write("\"exit\"");
                    }
                    //else if (iScene == 0)
                    //    fprintf(g_fOutput, "\"\"");
                    else
                    {
                        fSource.Write("\"{0}\"", Common.Scenes[iScene]);
                    }
                    if (i < (iPassages - 1))
                    {
                        fSource.Write(", ");
                    }
                }
                fSource.Write("], [");

                int iChestTroops = fScenes.GetInt();

                for (int i = 0; i < iChestTroops; i++)
                {
                    int iTroop = fScenes.GetInt();
                    if (iTroop < Common.Troops.Length)
                    {
                        fSource.Write("\"{0}\"", Common.Troops[iTroop]);
                    }
                    else
                    {
                        fSource.Write("{0}", iTroop);
                    }
                    if (i < (iChestTroops - 1))
                    {
                        fSource.Write(", ");
                    }
                }
                fSource.Write("]");

                string strTerrain = fScenes.GetWord();
                if (strTerrain != "0")
                {
                    fSource.Write(", \"{0}\"", strTerrain);
                }

                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fScenes.Close();

            Common.GenerateId("ID_scenes.py", Common.Scenes, "scn");
        }
Пример #21
0
        public static void Decompile()
        {
            var fFactions = new Text(Path.Combine(Common.InputPath, "factions.txt"));
            var fSource   = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_factions.py"));

            fSource.WriteLine(Header.Standard);
            fSource.WriteLine(Header.Factions);
            fFactions.GetString();
            var iFactions = fFactions.GetInt();

            for (int f = 0; f < iFactions; f++)
            {
                var strFacId = fFactions.GetWord();
                if (strFacId == "0")
                {
                    strFacId = fFactions.GetWord();
                }
                var strFacName = fFactions.GetWord();
                fSource.Write("  (\"{0}\", \"{1}\",", strFacId.Remove(0, 4), strFacName);

                var sbFlags = new StringBuilder(64);
                var dwFlags = fFactions.GetUInt();
                var iRating = (int)(dwFlags & 0xFF00) >> 8;
                if (iRating != 0)
                {
                    sbFlags.Append($"max_player_rating({100 - iRating})");
                }

                if ((dwFlags & 1) != 0)
                {
                    if (sbFlags.Length > 0)
                    {
                        sbFlags.Append('|');
                    }
                    sbFlags.Append("ff_always_hide_label");
                }
                if (sbFlags.Length == 0)
                {
                    sbFlags.Append('0');
                }

                fSource.Write(" {0}, 0.0, [", sbFlags);

                var dwColor = fFactions.GetUInt();

                var sbRelations = new StringBuilder(1024);
                for (int r = 0; r < iFactions; r++)
                {
                    var rRelation = fFactions.GetDouble();
                    if (Math.Abs(rRelation) > 0.000001)
                    {
                        sbRelations.Append($"(\"{Common.Factions[r]}\", {rRelation.ToString(CultureInfo.GetCultureInfo("en-US"))}),");
                    }
                }
                if (sbRelations.Length != 0)
                {
                    sbRelations.Length--;
                }

                fSource.Write("{0}], []", sbRelations);

                if (dwColor != 0xAAAAAA)
                {
                    fSource.Write(", 0x{0:X}", dwColor);
                }

                fSource.WriteLine("),");
            }
            fSource.Write("]");
            fSource.Close();
            fFactions.Close();

            Common.GenerateId("ID_factions.py", Common.Factions, "fac");
        }