diff options
| author | Japa | 2010-04-28 08:57:43 +0000 |
|---|---|---|
| committer | Japa | 2010-04-28 08:57:43 +0000 |
| commit | 300e0483f79f0a7801993111477569cda5e9aca6 (patch) | |
| tree | d44610fe0848b32bea753882e2d02f6abb4c3f2b /CreatureConfiguration.cpp | |
| parent | 5b508fa36d03ee936a46020bb2f6572cf96ed445 (diff) | |
| download | stonesense-300e0483f79f0a7801993111477569cda5e9aca6.tar.gz stonesense-300e0483f79f0a7801993111477569cda5e9aca6.tar.bz2 stonesense-300e0483f79f0a7801993111477569cda5e9aca6.tar.xz | |
Added support for creature castes.
they basically act as extra genders.
Diffstat (limited to 'CreatureConfiguration.cpp')
| -rw-r--r-- | CreatureConfiguration.cpp | 264 |
1 files changed, 132 insertions, 132 deletions
diff --git a/CreatureConfiguration.cpp b/CreatureConfiguration.cpp index 0ab61f8..23f4556 100644 --- a/CreatureConfiguration.cpp +++ b/CreatureConfiguration.cpp @@ -9,22 +9,22 @@ #include "dfhack/depends/tinyxml/tinyxml.h"
-CreatureConfiguration::CreatureConfiguration(int professionID, const char* professionStr, enumCreatureSex sex, enumCreatureSpecialCases special, t_SpriteWithOffset &sprite, int shadow)
+CreatureConfiguration::CreatureConfiguration(int professionID, const char* professionStr, uint8_t sex, enumCreatureSpecialCases special, t_SpriteWithOffset &sprite, int shadow)
{
- memset(this, 0, sizeof(CreatureConfiguration) );
- this->sprite = sprite;
- this->professionID = professionID;
- this->sex = sex;
- this->shadow = shadow;
- this->special = special;
-
- if(professionStr){
- int len = (int) strlen(professionStr);
- if(len > CREATURESTRLENGTH) len = CREATURESTRLENGTH;
- memcpy(this->professionstr, professionStr, len);
- this->professionstr[CREATURESTRLENGTH-1]=0;
- }
- //WriteErr("CC %d %d %d %d %s\n",this->gameID,this->professionID,this->sprite.fileIndex,this->sprite.sheetIndex,(this->professionstr[0]?this->professionstr:"-"));
+ memset(this, 0, sizeof(CreatureConfiguration) );
+ this->sprite = sprite;
+ this->professionID = professionID;
+ this->sex = sex;
+ this->shadow = shadow;
+ this->special = special;
+
+ if(professionStr){
+ int len = (int) strlen(professionStr);
+ if(len > CREATURESTRLENGTH) len = CREATURESTRLENGTH;
+ memcpy(this->professionstr, professionStr, len);
+ this->professionstr[CREATURESTRLENGTH-1]=0;
+ }
+ //WriteErr("CC %d %d %d %d %s\n",this->gameID,this->professionID,this->sprite.fileIndex,this->sprite.sheetIndex,(this->professionstr[0]?this->professionstr:"-"));
}
CreatureConfiguration::~CreatureConfiguration(void)
@@ -32,21 +32,21 @@ CreatureConfiguration::~CreatureConfiguration(void) }
void DumpCreatureNamesToDisk(){
- /*FILE* fp = fopen("dump.txt", "w");
- if(!fp) return;
- for(uint32_t j=0; j < v_creatureNames.size(); j++){
- fprintf(fp, "%i:%s\n",j, v_creatureNames[j].id);
- }
- fclose(fp);*/
+ /*FILE* fp = fopen("dump.txt", "w");
+ if(!fp) return;
+ for(uint32_t j=0; j < v_creatureNames.size(); j++){
+ fprintf(fp, "%i:%s\n",j, v_creatureNames[j].id);
+ }
+ fclose(fp);*/
}
void DumpProfessionsToDisk(){
- FILE* fp = fopen("dump.txt", "w");
- if(!fp) return;
- string proffStr;
- for(int j=0; (proffStr = contentLoader.professionStrings[j]) != "" ; j++){
- fprintf(fp, "%i:%s\n",j, proffStr.c_str());
- }
- fclose(fp);
+ FILE* fp = fopen("dump.txt", "w");
+ if(!fp) return;
+ string proffStr;
+ for(int j=0; (proffStr = contentLoader.professionStrings[j]) != "" ; j++){
+ fprintf(fp, "%i:%s\n",j, proffStr.c_str());
+ }
+ fclose(fp);
}
int translateProfession(const char* currentProf)
@@ -56,7 +56,7 @@ int translateProfession(const char* currentProf) if (currentProf == NULL || currentProf[0]==0)
return INVALID_INDEX;
-
+
dfNumJobs = contentLoader.professionStrings.size();
for(j=0; j < dfNumJobs; j++)
{
@@ -94,116 +94,116 @@ void pushCreatureConfig( vector<vector<CreatureConfiguration>*>& knownCreatures, }
bool addSingleCreatureConfig( TiXmlElement* elemCreature, vector<vector<CreatureConfiguration>*>& knownCreatures, int basefile ){
- int gameID = lookupIndexedType(elemCreature->Attribute("gameID"),contentLoader.creatureMaterials);
- if (gameID == INVALID_INDEX)
- return false;
- const char* sheetIndexStr;
- t_SpriteWithOffset sprite;
- sprite.fileIndex=basefile;
- sprite.x=0;
- sprite.y=0;
- sprite.animFrames=ALL_FRAMES;
- int baseShadow = DEFAULT_SHADOW;
- const char* shadowStr = elemCreature->Attribute("shadow");
- if (shadowStr != NULL && shadowStr[0] != 0)
- {
- baseShadow = atoi( shadowStr );
- }
- if (baseShadow < 0 || baseShadow > MAX_SHADOW)
- baseShadow = DEFAULT_SHADOW;
- const char* filename = elemCreature->Attribute("file");
- if (filename != NULL && filename[0] != 0)
+ int gameID = lookupIndexedType(elemCreature->Attribute("gameID"),contentLoader.creatureMaterials);
+ if (gameID == INVALID_INDEX)
+ return false;
+ const char* sheetIndexStr;
+ t_SpriteWithOffset sprite;
+ sprite.fileIndex=basefile;
+ sprite.x=0;
+ sprite.y=0;
+ sprite.animFrames=ALL_FRAMES;
+ int baseShadow = DEFAULT_SHADOW;
+ const char* shadowStr = elemCreature->Attribute("shadow");
+ if (shadowStr != NULL && shadowStr[0] != 0)
{
- sprite.fileIndex = loadConfigImgFile((char*)filename,elemCreature);
+ baseShadow = atoi( shadowStr );
}
- TiXmlElement* elemVariant = elemCreature->FirstChildElement("variant");
- while( elemVariant ){
- int professionID = INVALID_INDEX;
- const char* profStr = elemVariant->Attribute("prof");
- if (profStr == NULL || profStr[0] == 0)
- {
- profStr = elemVariant->Attribute("profession");
- }
- professionID = translateProfession(profStr);
-
- const char* customStr = elemVariant->Attribute("custom");
- if (customStr != NULL && customStr[0] == 0)
- {
- customStr = NULL;
- }
-
- if (customStr != NULL)
+ if (baseShadow < 0 || baseShadow > MAX_SHADOW)
+ baseShadow = DEFAULT_SHADOW;
+ const char* filename = elemCreature->Attribute("file");
+ if (filename != NULL && filename[0] != 0)
{
- WriteErr("custom: %s\n",customStr);
+ sprite.fileIndex = loadConfigImgFile((char*)filename,elemCreature);
}
-
- const char* sexstr = elemVariant->Attribute("sex");
- sheetIndexStr = elemVariant->Attribute("sheetIndex");
- enumCreatureSex cresex = eCreatureSex_NA;
- if(sexstr){
- if(strcmp( sexstr, "M" ) == 0) cresex = eCreatureSex_Male;
- if(strcmp( sexstr, "F" ) == 0) cresex = eCreatureSex_Female;
- }
- const char* specstr = elemVariant->Attribute("special");
- enumCreatureSpecialCases crespec = eCSC_Any;
- if (specstr)
- {
- if(strcmp( specstr, "Normal" ) == 0) crespec = eCSC_Normal;
- if(strcmp( specstr, "Zombie" ) == 0) crespec = eCSC_Zombie;
- if(strcmp( specstr, "Skeleton" ) == 0) crespec = eCSC_Skeleton;
- }
- sprite.animFrames = getAnimFrames(elemVariant->Attribute("frames"));
- if (sprite.animFrames == 0)
- sprite.animFrames = ALL_FRAMES;
-
- int shadow = baseShadow;
- const char* shadowStr = elemVariant->Attribute("shadow");
- if (shadowStr != NULL && shadowStr[0] != 0)
+ TiXmlElement* elemVariant = elemCreature->FirstChildElement("variant");
+ while( elemVariant ){
+ int professionID = INVALID_INDEX;
+ const char* profStr = elemVariant->Attribute("prof");
+ if (profStr == NULL || profStr[0] == 0)
+ {
+ profStr = elemVariant->Attribute("profession");
+ }
+ professionID = translateProfession(profStr);
+
+ const char* customStr = elemVariant->Attribute("custom");
+ if (customStr != NULL && customStr[0] == 0)
+ {
+ customStr = NULL;
+ }
+
+ if (customStr != NULL)
+ {
+ WriteErr("custom: %s\n",customStr);
+ }
+
+ const char* sexstr = elemVariant->Attribute("sex");
+ sheetIndexStr = elemVariant->Attribute("sheetIndex");
+ uint8_t cresex = 0;
+ if(sexstr){
+ if(strcmp( sexstr, "M" ) == 0) cresex = 2;
+ if(strcmp( sexstr, "F" ) == 0) cresex = 1;
+ if(atoi(sexstr)) cresex = atoi(sexstr);
+ }
+ const char* specstr = elemVariant->Attribute("special");
+ enumCreatureSpecialCases crespec = eCSC_Any;
+ if (specstr)
+ {
+ if(strcmp( specstr, "Normal" ) == 0) crespec = eCSC_Normal;
+ if(strcmp( specstr, "Zombie" ) == 0) crespec = eCSC_Zombie;
+ if(strcmp( specstr, "Skeleton" ) == 0) crespec = eCSC_Skeleton;
+ }
+ sprite.animFrames = getAnimFrames(elemVariant->Attribute("frames"));
+ if (sprite.animFrames == 0)
+ sprite.animFrames = ALL_FRAMES;
+
+ int shadow = baseShadow;
+ const char* shadowStr = elemVariant->Attribute("shadow");
+ if (shadowStr != NULL && shadowStr[0] != 0)
+ {
+ shadow = atoi( shadowStr );
+ }
+ if (shadow < 0 || shadow > MAX_SHADOW)
+ shadow = baseShadow;
+
+ //create profession config
+ sprite.sheetIndex=atoi(sheetIndexStr);
+ CreatureConfiguration cre( professionID, customStr , cresex, crespec, sprite, shadow);
+ //add a copy to known creatures
+ pushCreatureConfig(knownCreatures, gameID, cre);
+ elemVariant = elemVariant->NextSiblingElement("variant");
+ }
+
+ //create default config
+ baseShadow;
+ sheetIndexStr = elemCreature->Attribute("sheetIndex");
+ sprite.animFrames = ALL_FRAMES;
+ if (sheetIndexStr)
{
- shadow = atoi( shadowStr );
+ sprite.sheetIndex = atoi( sheetIndexStr );
+ CreatureConfiguration cre( INVALID_INDEX, NULL, eCreatureSex_NA, eCSC_Any, sprite, baseShadow);
+ //add a copy to known creatures
+ pushCreatureConfig(knownCreatures, gameID, cre);
}
- if (shadow < 0 || shadow > MAX_SHADOW)
- shadow = baseShadow;
-
- //create profession config
- sprite.sheetIndex=atoi(sheetIndexStr);
- CreatureConfiguration cre( professionID, customStr , cresex, crespec, sprite, shadow);
- //add a copy to known creatures
- pushCreatureConfig(knownCreatures, gameID, cre);
- elemVariant = elemVariant->NextSiblingElement("variant");
- }
-
- //create default config
- baseShadow;
- sheetIndexStr = elemCreature->Attribute("sheetIndex");
- sprite.animFrames = ALL_FRAMES;
- if (sheetIndexStr)
- {
- sprite.sheetIndex = atoi( sheetIndexStr );
- CreatureConfiguration cre( INVALID_INDEX, NULL, eCreatureSex_NA, eCSC_Any, sprite, baseShadow);
- //add a copy to known creatures
- pushCreatureConfig(knownCreatures, gameID, cre);
- }
- return true;
+ return true;
}
bool addCreaturesConfig( TiXmlElement* elemRoot, vector<vector<CreatureConfiguration>*>& knownCreatures ){
- int basefile = -1;
- const char* filename = elemRoot->Attribute("file");
- if (filename != NULL && filename[0] != 0)
- {
- basefile = loadConfigImgFile((char*)filename,elemRoot);
- }
- TiXmlElement* elemCreature = elemRoot->FirstChildElement("creature");
- if (elemCreature == NULL)
- {
- contentError("No creatures found",elemRoot);
- return false;
- }
- while( elemCreature ){
- addSingleCreatureConfig(elemCreature,knownCreatures,basefile );
- elemCreature = elemCreature->NextSiblingElement("creature");
- }
- return true;
+ int basefile = -1;
+ const char* filename = elemRoot->Attribute("file");
+ if (filename != NULL && filename[0] != 0)
+ {
+ basefile = loadConfigImgFile((char*)filename,elemRoot);
+ }
+ TiXmlElement* elemCreature = elemRoot->FirstChildElement("creature");
+ if (elemCreature == NULL)
+ {
+ contentError("No creatures found",elemRoot);
+ return false;
+ }
+ while( elemCreature ){
+ addSingleCreatureConfig(elemCreature,knownCreatures,basefile );
+ elemCreature = elemCreature->NextSiblingElement("creature");
+ }
+ return true;
}
-
\ No newline at end of file |
