nath9091
Recruit
This code should reverse engineer most parties.txt files. If you experience any problems do say. If you find it useful or used it in creating your mod then it'd be great if you could say so here or in your mod acknowledgements list. The code isn't perfect and doubtless to proper coders will show lots of inefficiency, but I find it works. The original purpose of this code was to get the co-ordinates of towns from the map editor into Python, but use it for anything you want. Issues at the moment are that it won't recognise many troop types. To use place parties.txt file in the same folder as your code and then run. A new txt file called ModuleParties.txt should then appear.
Took about a day, but I'm an awful coder.
Took about a day, but I'm an awful coder.
Code:
#include <iostream>
#include <fstream.h>
using namespace std;
int main()
{
string partiestexttake, partiestext, ptest, retriever1,retriever2,module;
char othernumbers;
int x,y,z,length,startnumber,othernumber;
y,z = 0;
ifstream ifs ( "parties.txt" , ifstream::in );
while (ifs.good())
{
partiestexttake= (char) ifs.get();
partiestext=partiestext+partiestexttake;
}
ifs.close();
length = partiestext.size();
cout << "Length of Parties Text is:" << length << "\n";
startnumber = 0;
module= "from header_common import *\nfrom header_parties import *\nfrom ID_troops import *\nfrom ID_factions import *\nfrom ID_party_templates import *\nfrom ID_map_icons import *\n\n####################################################################################################################\n";
module=module+"# Each party record contains the following fields:\n# 1) Party id: used for referencing parties in other files.\n# The prefix p_ is automatically added before each party id.\n";
module=module+"# 2) Party name.\n# 3) Party flags. See header_parties.py for a list of available flags\n# 4) Menu. ID of the menu to use when this party is met. The value 0 uses the default party encounter system.\n";
module=module+"# 5) Party-template. ID of the party template this party belongs to. Use pt_none as the default value.\n# 6) Faction.\n# 7) Personality. See header_parties.py for an explanation of personality flags.\n";
module=module+"# 8) Ai-behavior\n# 9) Ai-target party\n# 10) Initial coordinates.\n# 11) List of stacks. Each stack record is a triple that contains the following fields:\n";
module=module+"# 11.1) Troop-id.\n# 11.2) Number of troops in this stack. \n# 11.3) Member flags. Use pmf_is_prisoner to note that this member is a prisoner.\n# 12) Party direction in degrees [optional]\n";
module=module+"####################################################################################################################\n\n";
module=module+"no_menu = 0\n#pf_town = pf_is_static|pf_always_visible|pf_hide_defenders|pf_show_faction\npf_town = pf_is_static|pf_always_visible|pf_show_faction|pf_label_large\n";
module=module+"pf_castle = pf_is_static|pf_always_visible|pf_show_faction|pf_label_medium\npf_village = pf_is_static|pf_always_visible|pf_hide_defenders|pf_label_small\n\n#sample_party = [(trp_swadian_knight,1,0), (trp_swadian_peasant,10,0), (trp_swadian_crossbowman,1,0), (trp_swadian_man_at_arms, 1, 0), (trp_swadian_footman, 1, 0), (trp_swadian_militia,1,0)]\n\n";
module=module+"# NEW TOWNS:\n# NORMANDY: Rouen, Caen, Bayeux, Coutances, Evreux, Avranches\n# Brittany: Rennes, Nantes,\n# Maine: Le Mans\n# Anjou: Angers\nparties = [\n";
startnumber=0;
while(startnumber<length)
{
if(z==0)
{
for(startnumber=0; startnumber < length;)
{
ptest=partiestext.substr(startnumber,2);
if(ptest == "p_")
{
othernumber=startnumber;
break;
}
startnumber++;
}
z=1;
}
if(z==1)
{
for(startnumber=othernumber; startnumber < length;)
{
ptest=partiestext.substr(startnumber,2);
if(ptest == "p_")
{
module = module+" (\"";
othernumber=startnumber;
break;
}
startnumber++;
}
}
for(startnumber=othernumber+2; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
ptest=partiestext.substr(startnumber,1);
if(ptest == " ")
{
module=module+retriever2;
module=module+"\",\"";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
if(retriever1==" ")
{
module=module+retriever2;
module=module+"\", ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
if(retriever2=="256")
{
module=module+"pf_disabled, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4219916")
{
module=module+"icon_town|pf_town, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2114828")
{
module=module+"pf_disabled|icon_town|pf_is_static|pf_always_visible|pf_hide_defenders, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="1048576")
{
module=module+"icon_player|pf_limit_members, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4219928")
{
module=module+"icon_town_snow|pf_town, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4219917")
{
module=module+"icon_town_steppe|pf_town, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4215828")
{
module=module+"icon_castle_a|pf_castle, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4215829")
{
module=module+"icon_castle_b|pf_castle, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4215830")
{
module=module+"icon_castle_c|pf_castle, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4215831")
{
module=module+"icon_castle_d|pf_castle, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="4215836")
{
module=module+"icon_castle_snow_a|pf_castle, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2114574")
{
module=module+"icon_village_a|pf_village, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2114585")
{
module=module+"icon_village_snow_a|pf_village, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2114830")
{
module=module+"icon_village_a|pf_disabled|pf_is_static|pf_always_visible|pf_hide_defenders, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2639116")
{
module=module+"icon_town|pf_disabled|pf_is_static|pf_always_visible|pf_no_label|pf_hide_defenders, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2114848")
{
module=module+"pf_disabled|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="2118688")
{
module=module+"icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="541729")
{
module=module+"icon_bridge_a|pf_is_static|pf_always_visible|pf_no_label, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="541731")
{
module=module+"icon_bridge_snow_a|pf_is_static|pf_always_visible|pf_no_label, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="541730")
{
module=module+"icon_bridge_b|pf_is_static|pf_always_visible|pf_no_label, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever2=="1280")
{
module=module+"pf_disabled|pf_is_static, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
if(retriever1=="0")
{
module=module+"no_menu, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
if(retriever1=="0")
{
module=module+"pt_none, ";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,2);
if(retriever1=="1 ")
{
module=module+"fac_commoners,0,ai_bhvr_hold,0,(";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever1=="2 ")
{
module=module+"fac_outlaws,0,ai_bhvr_hold,0,(";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever1=="3 ")
{
module=module+"fac_neutral,0,ai_bhvr_hold,0,(";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever1=="12")
{
module=module+"fac_player_faction,0,ai_bhvr_hold,0,(";
othernumber=startnumber+1;
retriever1,retriever2="";
break;
}
startnumber++;
}
for(startnumber=othernumber+12; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
if(retriever1==" ")
{
module=module+retriever2+",";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,1);
if(retriever1==" ")
{
module=module+retriever2+"),[";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
retriever1 = partiestext.substr(startnumber,5);
if(retriever1=="0.0 1")
{
module=module+"(";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
if(retriever1=="0.0 0")
{
module=module+"]),\n";
y=1;
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+5; startnumber < length;)
{
if(y==1)
{
startnumber=startnumber-5;
break;
}
retriever1 = partiestext.substr(startnumber,3);
if(retriever1==" 0 ")
{
module=module+"trp_player,";
othernumber=startnumber+1;
retriever1,retriever2="";
break;
}
if(retriever1==" 3 ")
{
module=module+"trp_unarmed_troop,";
othernumber=startnumber+1;
retriever1,retriever2="";
break;
}
if(retriever1=="116")
{
module=module+"trp_looter,";
othernumber=startnumber+2;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+2; startnumber < length;)
{
if(y==1)
{
startnumber=startnumber-2;
break;
}
retriever1 = partiestext.substr(startnumber,1);
if(retriever1==" ")
{
module=module+retriever2+",";
othernumber=startnumber;
retriever1,retriever2="";
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
for(startnumber=othernumber+1; startnumber < length;)
{
if(y==1)
{
startnumber=startnumber-1;
y=0;
break;
}
retriever1 = partiestext.substr(startnumber,1);
if(retriever1==" ")
{
module=module+retriever2+")]),\n";
startnumber=startnumber+12;
othernumber=startnumber;
retriever1,retriever2="";
y=0;
break;
}
retriever2 = retriever2+retriever1;
startnumber++;
}
}
module=module+"]";
ofstream f("ModuleParties.txt");
length = module.size();
cout << "Length of Module Text is:" << length << "\n";
f << module;
f.close();
cout << "Done";
cin >> x;
}