Further cleanup for name stuff; fixing examples that I broke and handling settlements. Also added mood, so that it can be determined whether or not the dwarf's artifact was created.

develop
Zhentar 2010-03-07 20:01:30 -06:00
parent 65bf8f69fd
commit 052dd53c03
7 changed files with 1759 additions and 1735 deletions

@ -168,9 +168,10 @@ int main (void)
cerr << "Can't get the creature types." << endl; cerr << "Can't get the creature types." << endl;
return 1; return 1;
} }
map<string, vector<string> > names; vector< vector<string> > englishWords;
if(!DF.InitReadNameTables(names)) vector< vector<string> > foreignWords;
if(!DF.InitReadNameTables(englishWords,foreignWords))
{ {
cerr << "Can't get name tables" << endl; cerr << "Can't get name tables" << endl;
return 1; return 1;
@ -189,17 +190,17 @@ int main (void)
{ {
cout << "address: " << temp.origin << " creature type: " << creaturestypes[temp.type].id << ", position: " << temp.x << "x " << temp.y << "y "<< temp.z << "z" << endl; cout << "address: " << temp.origin << " creature type: " << creaturestypes[temp.type].id << ", position: " << temp.x << "x " << temp.y << "y "<< temp.z << "z" << endl;
bool addendl = false; bool addendl = false;
if(temp.first_name[0]) if(temp.name.first_name[0])
{ {
cout << "first name: " << temp.first_name; cout << "first name: " << temp.name.first_name;
addendl = true; addendl = true;
} }
if(temp.nick_name[0]) if(temp.name.nickname[0])
{ {
cout << ", nick name: " << temp.nick_name; cout << ", nick name: " << temp.name.nickname;
addendl = true; addendl = true;
} }
string transName = DF.TranslateName(temp.last_name,names,creaturestypes[temp.type].id); string transName = DF.TranslateName(temp.name,englishWords,foreignWords,false);
if(!transName.empty()) if(!transName.empty())
{ {
cout << ", trans name: " << transName; cout << ", trans name: " << transName;

@ -50,8 +50,9 @@ int main (void)
cerr << "DF not found" << endl; cerr << "DF not found" << endl;
return 1; return 1;
} }
map< string, vector<string> > names; vector< vector<string> > englishWords;
if(!DF.InitReadNameTables(names)) vector< vector<string> > foreignWords;
if(!DF.InitReadNameTables(englishWords,foreignWords))
{ {
cerr << "Could not get Names" << endl; cerr << "Could not get Names" << endl;
return 1; return 1;
@ -61,7 +62,7 @@ int main (void)
cout << "\nSelect Name to search or q to Quit" << endl; cout << "\nSelect Name to search or q to Quit" << endl;
getline (cin, input); getline (cin, input);
while(input != "q"){ while(input != "q"){
for( map< string, vector<string> >::iterator it = names.begin();it != names.end(); it++){ /*for( map< string, vector<string> >::iterator it = names.begin();it != names.end(); it++){
for(uint32_t i = 0; i < it->second.size(); i++){ for(uint32_t i = 0; i < it->second.size(); i++){
uint32_t found = tolower(input).find(tolower(it->second[i])); uint32_t found = tolower(input).find(tolower(it->second[i]));
if(found != string::npos){ if(found != string::npos){
@ -70,7 +71,7 @@ int main (void)
cout << it->first << " " << it->second[i] << " " << groupBy2(value.str()) << endl; cout << it->first << " " << it->second[i] << " " << groupBy2(value.str()) << endl;
} }
} }
} }*/
DF.Resume(); DF.Resume();
getline(cin,input); getline(cin,input);
} }

@ -23,7 +23,8 @@ void print_bits ( T val, std::ostream& out )
val >>= 1; val >>= 1;
} }
} }
map<string, vector<string> > names; vector< vector<string> > englishWords;
vector< vector<string> > foreignWords;
uint32_t numCreatures; uint32_t numCreatures;
vector<DFHack::t_matgloss> creaturestypes; vector<DFHack::t_matgloss> creaturestypes;
void printDwarves(DFHack::API & DF) void printDwarves(DFHack::API & DF)
@ -37,15 +38,15 @@ void printDwarves(DFHack::API & DF)
if (type == "DWARF" && !temp.flags1.bits.dead && !temp.flags2.bits.killed) if (type == "DWARF" && !temp.flags1.bits.dead && !temp.flags2.bits.killed)
{ {
cout << i << ":"; cout << i << ":";
if (temp.nick_name[0]) if (temp.name.nickname[0])
{ {
cout << temp.nick_name; cout << temp.name.nickname;
} }
else else
{ {
cout << temp.first_name; cout << temp.name.first_name;
} }
string transName = DF.TranslateName(temp.last_name,names,creaturestypes[temp.type].id); string transName = DF.TranslateName(temp.name,englishWords,foreignWords, false);
cout << " " << temp.custom_profession; //transName; cout << " " << temp.custom_profession; //transName;
if (dwarfCounter%3 != 2) if (dwarfCounter%3 != 2)
{ {
@ -109,7 +110,7 @@ bool getDwarfSelection(DFHack::API & DF, DFHack::t_creature & toChange,string &
if (input == "n") if (input == "n")
{ {
commandString = "pzyn"; commandString = "pzyn";
eraseAmount = string(toChange.nick_name).length(); eraseAmount = string(toChange.name.nickname).length();
changeType = true; changeType = true;
isName = true; isName = true;
} }
@ -153,7 +154,7 @@ bool waitTillChanged(DFHack::API &DF, int creatureToCheck, string changeValue, b
int tryCount = 0; int tryCount = 0;
if (isName) if (isName)
{ {
while (testCre.nick_name != changeValue && tryCount <50) while (testCre.name.nickname != changeValue && tryCount <50)
{ {
DF.Resume(); DF.Resume();
w->TypeSpecial(DFHack::WAIT,1,100); w->TypeSpecial(DFHack::WAIT,1,100);
@ -324,7 +325,7 @@ int main (void)
return 1; return 1;
} }
DF.InitReadNameTables(names); DF.InitReadNameTables(englishWords,foreignWords);
DF.InitReadCreatures(numCreatures); DF.InitReadCreatures(numCreatures);
DF.InitViewAndCursor(); DF.InitViewAndCursor();
DFHack::Process * p = DF.getProcess(); DFHack::Process * p = DF.getProcess();

@ -9,10 +9,11 @@ using namespace std;
#include <DFTypes.h> #include <DFTypes.h>
#include <DFHackAPI.h> #include <DFHackAPI.h>
void printSettlement(DFHack::API & DF, const DFHack::t_settlement & settlement, const map<string, vector<string> > &names)
void printSettlement(DFHack::API & DF, const DFHack::t_settlement & settlement, const vector< vector<string> > &englishWords, const vector< vector<string> > &foreignWords)
{ {
string genericName = DF.TranslateName(settlement.name,2,names,"GENERIC"); string genericName = DF.TranslateName(settlement.name,englishWords,foreignWords,true);
string dwarfName = DF.TranslateName(settlement.name,2,names,"DWARF"); string dwarfName = DF.TranslateName(settlement.name,englishWords,foreignWords,false);
cout << dwarfName << " " << genericName << " " << "world x: " << settlement.world_x << " world y: " << settlement.world_y cout << dwarfName << " " << genericName << " " << "world x: " << settlement.world_x << " world y: " << settlement.world_y
<< " local_x: " << settlement.local_x1 << " local_y: " << settlement.local_y1 << " size: " << settlement.local_x2 - settlement.local_x1 << " by " << settlement.local_y2 - settlement.local_y1 << "\n"; << " local_x: " << settlement.local_x1 << " local_y: " << settlement.local_y1 << " size: " << settlement.local_x2 - settlement.local_x1 << " by " << settlement.local_y2 - settlement.local_y1 << "\n";
} }
@ -32,22 +33,23 @@ int main (int argc,const char* argv[])
cerr << "Could not read Settlements" << endl; cerr << "Could not read Settlements" << endl;
return 1; return 1;
} }
map<string, vector<string> > names; vector< vector<string> > englishWords;
if(!DF.InitReadNameTables(names)) vector< vector<string> > foreignWords;
if(!DF.InitReadNameTables(englishWords,foreignWords))
{ {
cerr << "Can't get name tables" << endl; cerr << "Can't get name tables" << endl;
return 1; return 1;
} }
cout << "Settlements\n"; cout << "Settlements\n";
for(uint32_t i =0;i<numSettlements;i++){ /*for(uint32_t i =0;i<numSettlements;i++){
DFHack::t_settlement temp; DFHack::t_settlement temp;
DF.ReadSettlement(i,temp); DF.ReadSettlement(i,temp);
printSettlement(DF,temp,names); printSettlement(DF,temp,englishWords,foreignWords);
} }*/
// MSVC claims this is causing the heap to be corrupted, I think it is because the currentSettlement vector only has 1 item in it // MSVC claims this is causing the heap to be corrupted, I think it is because the currentSettlement vector only has 1 item in it
cout << "Current Settlement\n"; cout << "Current Settlement\n";
DF.ReadCurrentSettlement(current); if(DF.ReadCurrentSettlement(current))
printSettlement(DF,current,names); printSettlement(DF,current,englishWords,foreignWords);
DF.FinishReadNameTables(); DF.FinishReadNameTables();
DF.FinishReadSettlements(); DF.FinishReadSettlements();

File diff suppressed because it is too large Load Diff

@ -543,6 +543,7 @@ struct t_creature
uint8_t numLikes; uint8_t numLikes;
t_like likes[32]; t_like likes[32];
t_job current_job; t_job current_job;
uint16_t mood;
uint32_t happiness; uint32_t happiness;
uint32_t id; uint32_t id;
uint32_t agility; uint32_t agility;
@ -797,7 +798,7 @@ struct t_hotkey
struct t_settlement struct t_settlement
{ {
uint32_t origin; uint32_t origin;
int32_t name[2]; t_name name;
int16_t world_x; int16_t world_x;
int16_t world_y; int16_t world_y;
int16_t local_x1; int16_t local_x1;

@ -730,12 +730,18 @@
<Address name="language_vector">0x01534240</Address> <Address name="language_vector">0x01534240</Address>
<Offset name="word_table">0x54</Offset> <Offset name="word_table">0x54</Offset>
<!-- name struct -->
<Offset name="name_firstname">0x0</Offset>
<Offset name="name_nickname">0x1C</Offset>
<Offset name="name_words">0x38</Offset>
<!-- creature offsets --> <!-- creature offsets -->
<Offset name="creature_flags1">0xFC</Offset> <Offset name="creature_flags1">0xFC</Offset>
<Offset name="creature_flags2">0x100</Offset> <Offset name="creature_flags2">0x100</Offset>
<Offset name="creature_sex">0x10A</Offset> <Offset name="creature_sex">0x10A</Offset>
<Offset name="creature_id">0x10C</Offset> <Offset name="creature_id">0x10C</Offset>
<Offset name="creature_squad_name">0x198</Offset> <Offset name="creature_squad_name">0x198</Offset>
<Offset name="creature_mood">0x238</Offset>
<Offset name="creature_squad_leader_id">0x268</Offset> <Offset name="creature_squad_leader_id">0x268</Offset>
<Offset name="creature_money">0x2F8</Offset> <Offset name="creature_money">0x2F8</Offset>
<Offset name="creature_current_job">0x314</Offset> <Offset name="creature_current_job">0x314</Offset>
@ -821,7 +827,7 @@
<Address name="settlement_current">0x01533CC0</Address> <Address name="settlement_current">0x01533CC0</Address>
<Address name="settlements">0x01533BF4</Address> <Address name="settlements">0x01533BF4</Address>
<Offset name="settlement_name">0x38</Offset> <Offset name="settlement_name">0x0</Offset>
<Offset name="settlement_world_xy">0x7a</Offset> <Offset name="settlement_world_xy">0x7a</Offset>
<Offset name="settlement_local_xy">0x100</Offset> <Offset name="settlement_local_xy">0x100</Offset>