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"); }
public static void Decompile() { var fTemplates = new Text(Path.Combine(Common.InputPath, "party_templates.txt")); var fSource = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_party_templates.py")); fSource.WriteLine(Header.Standard); fSource.WriteLine(Header.PartyTemplates); fTemplates.GetString(); var iTemplates = fTemplates.GetInt(); for (int i = 0; i < iTemplates; i++) { fSource.Write(" (\"{0}\", \"{1}\"", fTemplates.GetWord().Remove(0, 3), fTemplates.GetWord()); var dwFlag = fTemplates.GetUInt64(); fSource.Write(", {0}, {1}", DecompileFlags(dwFlag), fTemplates.GetInt()); var iFaction = fTemplates.GetInt(); if (iFaction >= 0 && iFaction < Common.Factions.Count) { fSource.Write(", fac_{0}", Common.Factions[iFaction]); } else { fSource.Write(", {0}", iFaction); } var dwPersonality = fTemplates.GetUInt(); fSource.Write(", {0}, [", DecompilePersonality(dwPersonality)); var sbTroopList = new StringBuilder(1024); for (int iStack = 0; iStack < 6; iStack++) { var iTroop = fTemplates.GetInt(); if (-1 == iTroop) { continue; } var iMinTroops = fTemplates.GetInt(); var iMaxTroops = fTemplates.GetInt(); var dwMemberFlag = fTemplates.GetDWord(); sbTroopList.Append($"({(iTroop < Common.Troops.Count ? "trp_" + Common.Troops[iTroop] : iTroop.ToString(CultureInfo.GetCultureInfo("en-US")))}, {iMinTroops}, {iMaxTroops}{(dwMemberFlag == 1 ? ", pmf_is_prisoner" : "")}),"); } if (sbTroopList.Length != 0) { sbTroopList.Length--; } fSource.WriteLine("{0}]),", sbTroopList); } fSource.Write("]"); fSource.Close(); fTemplates.Close(); Common.GenerateId("ID_party_templates.py", Common.PTemps, "pt"); }
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"); }
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(); }
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"); }
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"); }
public static void Decompile() { var fSkills = new Text(Path.Combine(Common.InputPath, "skills.txt")); var fSource = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_skills.py")); fSource.WriteLine(Header.Standard); fSource.WriteLine(Header.Skills); int iSkills = fSkills.GetInt(); for (int s = 0; s < iSkills; s++) { fSource.WriteLine(" (\"{0}\", \"{1}\", {2}, {3}, \"{4}\"),", fSkills.GetWord().Remove(0, 4), fSkills.GetWord().Replace('_', ' '), DecompileFlags(fSkills.GetDWord()), fSkills.GetInt(), fSkills.GetWord().Replace('_', ' ')); } fSource.Write("]"); fSource.Close(); fSkills.Close(); Common.GenerateId("ID_skills.py", Common.Skills, "skl"); }
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"); }
public static void Decompile() { var fSounds = new Text(Path.Combine(Common.InputPath, "sounds.txt")); var fSource = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_sounds.py")); fSource.WriteLine(Header.Standard); fSource.WriteLine(Header.Sounds); fSounds.GetString(); int iSamples = fSounds.GetInt(); var aSamples = new string[iSamples]; for (int s = 0; s < iSamples; s++) { aSamples[s] = fSounds.GetWord(); fSounds.GetString(); } int iSounds = fSounds.GetInt(); for (int s = 0; s < iSounds; s++) { fSource.Write(" (\"{0}\", {1},", fSounds.GetWord().Remove(0, 4), DecompileFlags(fSounds.GetDWord())); int iListCount = fSounds.GetInt(); fSource.Write(" ["); for (int l = 0; l < iListCount; l++) { int iSample = fSounds.GetInt(); fSounds.GetInt(); fSource.Write("{0}{1}", iSample < aSamples.Length ? '"' + aSamples[iSample] + '"' : iSample.ToString(CultureInfo.GetCultureInfo("en-US")), l == iListCount - 1 ? "" : ", "); } fSource.WriteLine("]),"); } fSource.Write("]"); fSource.Close(); fSounds.Close(); Common.GenerateId("ID_sounds.py", Common.Sounds, "snd"); }
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(); }
public static void Decompile() { var fTableaus = new Text(Path.Combine(Common.InputPath, "tableau_materials.txt")); var fSource = new Win32FileWriter(Path.Combine(Common.OutputPath, "module_tableau_materials.py")); fSource.WriteLine(Header.Standard); fSource.WriteLine(Header.TableauMaterials); int iCount = fTableaus.GetInt(); for (int i = 0; i < iCount; i++) { fSource.Write(" (\"{0}\", {1}, \"{2}\", ", fTableaus.GetWord().Remove(0, 4), fTableaus.GetDWord(), fTableaus.GetWord()); for (int j = 0; j < 6; j++) { fSource.Write(" {0},", fTableaus.GetInt()); } fSource.WriteLine("\r\n ["); Common.PrintStatement(ref fTableaus, ref fSource, fTableaus.GetInt(), " "); fSource.WriteLine(" ]),\r\n"); } fSource.Write("]"); fSource.Close(); fTableaus.Close(); Common.GenerateId("ID_tableau_materials.py", Common.Tableaus, "tableau"); }
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"); }
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"); }
public static void Decompile() { var fSounds = new Text(Common.InputPath + "/sounds.txt"); var fSource = new Win32FileWriter(Common.OutputPath + "/module_sounds.py"); fSource.WriteLine(Header.Standard); fSource.WriteLine(Header.Sounds); fSounds.GetString(); int iSamples = fSounds.GetInt(); var aSamples = new List <string>(); for (int s = 0; s < iSamples; s++) { aSamples.Add(fSounds.GetWord()); fSounds.GetString(); } int iSounds = fSounds.GetInt(); for (int s = 0; s < iSounds; s++) { fSource.Write(" (\"{0}\", {1},", fSounds.GetWord().Remove(0, 4), DecompileFlags(fSounds.GetDWord())); int iListCount = fSounds.GetInt(); fSource.Write(" ["); for (int l = 0; l < iListCount; l++) { int iSample = fSounds.GetInt(); fSounds.GetInt(); fSource.Write("\"{0}\"{1}", aSamples[iSample], l == iListCount - 1 ? "" : ", "); } fSource.WriteLine("]),"); } fSource.Write("]"); fSource.Close(); fSounds.Close(); Common.GenerateId("ID_sounds.py", Common.Sounds, "snd"); }
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"); }
public static void Decompile() { var fTroops = new Text(Common.InputPath + "/troops.txt"); var fSource = new Win32FileWriter(Common.OutputPath + "/module_troops.py"); fSource.WriteLine(Header.Standard); fSource.WriteLine(Header.Troops); for (int s = 0; s < Common.Skins.Length; s++) { fSource.WriteLine("tf_" + Common.Skins[s] + " = " + s); } fSource.WriteLine("\r\ntroops = ["); fTroops.GetString(); int iTroops = fTroops.GetInt(); var aUpList = new List <object>(); for (int t = 0; t < iTroops; t++) { fSource.Write(" [\"{0}\", \"{1}\", \"{2}\",", fTroops.GetWord().Remove(0, 4), fTroops.GetWord().Replace('_', ' '), fTroops.GetWord().Replace('_', ' ')); fTroops.GetWord(); DWORD dwFlag = fTroops.GetDWord(); fSource.Write(" {0},", DecompileFlags(dwFlag)); DWORD dwScene = fTroops.GetDWord(); fSource.Write(" {0},", dwScene == 0 ? "0" : GetScene(dwScene)); fSource.Write(" {0},", fTroops.GetWord()); // reserved "0" int iFaction = fTroops.GetInt(); if (iFaction > 0 && iFaction < Common.Factions.Length) { fSource.WriteLine(" fac_{0},", Common.Factions[iFaction]); } else { fSource.WriteLine(" {0},", iFaction); } int iUp1 = fTroops.GetInt(); int iUp2 = fTroops.GetInt(); /*if (iUp1 != 0 && iUp2 != 0) * strUpList.Add( * $"upgrade2(troops,\"{Common.Troops[t]}\",\"{Common.Troops[iUp1]}\",\"{Common.Troops[iUp2]}\")"); * else if (iUp1 != 0 && iUp2 == 0) * strUpList.Add($"upgrade(troops,\"{Common.Troops[t]}\",\"{Common.Troops[iUp1]}\")"); */ if (iUp1 != 0 && iUp2 != 0) { aUpList.Add(new Upgrade2(t, iUp1, iUp2)); } else if (iUp1 != 0 && iUp2 == 0) { aUpList.Add(new Upgrade(t, iUp1)); } string strItemList = ""; for (int i = 0; i < 64; i++) { int iItem = fTroops.GetInt(); fTroops.GetInt(); //skip 0 if (-1 == iItem) { continue; } strItemList += iItem < Common.Items.Length ? $"itm_{Common.Items[iItem]}," : $"{iItem},"; } if (strItemList.Length > 0) { strItemList = strItemList.Remove(strItemList.Length - 1, 1); } fSource.WriteLine(" [{0}],", strItemList); int iStregth = fTroops.GetInt(), iAgility = fTroops.GetInt(), iIntelligence = fTroops.GetInt(), iCharisma = fTroops.GetInt(), iLevel = fTroops.GetInt(); fSource.Write(" strength({0})|agility({1})|intellect({2})|charisma({3})|level({4}), ", iStregth, iAgility, iIntelligence, iCharisma, iLevel); var iWP = new int[7]; for (int i = 0; i < 7; i++) { iWP[i] = fTroops.GetInt(); } if (iWP[0] == iWP[1] && iWP[1] == iWP[2] && iWP[2] == iWP[3] && iWP[3] == iWP[4] && iWP[4] == iWP[5]) { fSource.Write("wp({0}){1},", iWP[0], iWP[6] == 0 ? "" : "|wp_firearm(" + iWP[6] + ")"); } else if (iWP[0] == iWP[1] && iWP[1] == iWP[2]) { fSource.Write("wpe({0},{1},{2},{3}){4},", iWP[0], iWP[3], iWP[4], iWP[5], iWP[6] == 0 ? "" : "|wp_firearm(" + iWP[6] + ")"); } else { fSource.Write("wpex({0},{1},{2},{3},{4},{5}){6},", iWP[0], iWP[1], iWP[2], iWP[3], iWP[4], iWP[5], iWP[6] == 0 ? "" : "|wp_firearm(" + iWP[6] + ")"); } var strKnow = new StringBuilder(""); for (int x = 0; x < 6; x++) { DWORD dword = fTroops.GetDWord(); if (dword == 0) { continue; } for (int q = 0; q < 8; q++) { DWORD dwKnow = 0xF & (dword >> (q * 4)); /*if (dwKnow != 0 && dwKnow <= 8) * strKnow = strKnow + String.Format("knows_{0}_{1}|", Common.Skills[x * 8 + q], dwKnow); * else*/ if (dwKnow != 0 && (x << 3) + q < Common.Skills.Length) { strKnow.Append($"knows_{Common.Skills[(x << 3) + q]}_{dwKnow}|"); } } } if (strKnow.Length == 0) { strKnow.Append('0'); } else { strKnow.Length--; } //strKnow = strKnow.Length == 0 ? "0" : strKnow.Remove(strKnow.Length - 1, 1); fSource.Write(" {0},", strKnow); string strFase = $"0x{fTroops.GetUInt64():x16}{fTroops.GetUInt64():x16}{fTroops.GetUInt64():x16}{fTroops.GetUInt64():x16}, 0x{fTroops.GetUInt64():x16}{fTroops.GetUInt64():x16}{fTroops.GetUInt64():x16}{fTroops.GetUInt64():x16}"; if (Common.SelectedMode == Mode.Caribbean) { fTroops.GetWord(); } fSource.WriteLine("{0}],", strFase); } fSource.WriteLine("]"); foreach (var t in aUpList.Select(up => up.ToString()).Where(t => !String.IsNullOrEmpty(t))) { fSource.WriteLine(t); } fSource.Close(); fTroops.Close(); Common.GenerateId("ID_troops.py", Common.Troops, "trp"); }