diff --git a/src/faction.c b/src/faction.c index 952d5b6..2677f93 100644 --- a/src/faction.c +++ b/src/faction.c @@ -15,7 +15,8 @@ #define PLAYER_ALLY 70 /* Above this, player is considered ally. */ typedef struct Faction_ { - char* name; + char* name; /* Normal name. */ + char* longname; /* Long name. */ /* Enemies. */ int* enemies; @@ -58,6 +59,13 @@ char* faction_name(int f) { return faction_stack[f].name; } +/* Return the faction's long name (formal). */ +char* faction_longname(int f) { + if(faction_stack[f].longname != NULL) + return faction_stack[f].longname; + return faction_stack[f].name; +} + /* Modify the player's standing with a faction. */ void faction_modPlayer(int f, int mod) { if(faction_isFaction(f)) { @@ -247,7 +255,9 @@ static Faction* faction_parse(xmlNodePtr parent) { if(xml_isNode(node, "player")) { tmp->player = xml_getInt(node); player = 1; + continue; } + xmlr_strd(node, "longname", tmp->longname); } while(xml_nextNode(node)); if(player == 0) DEBUG("Faction '%s' missing player tag", tmp->name); @@ -319,6 +329,7 @@ int factions_load(void) { /* Player faction is hardcoded. */ faction_stack = malloc(sizeof(Faction)); faction_stack[0].name = strdup("Player"); + faction_stack[0].longname = NULL; faction_stack[0].nallies = 0; faction_stack[0].nenemies = 0; faction_nstack++; @@ -356,8 +367,9 @@ void factions_free(void) { /* Free factions. */ for(i = 0; i < faction_nstack; i++) { free(faction_stack[i].name); - if(faction_stack[i].nallies > 0) free(faction_stack[i].allies); - if(faction_stack[i].nenemies > 0) free(faction_stack[i].enemies); + if(faction_stack[i].longname != NULL) free(faction_stack[i].longname); + if(faction_stack[i].nallies > 0) free(faction_stack[i].allies); + if(faction_stack[i].nenemies > 0) free(faction_stack[i].enemies); } free(faction_stack); faction_stack = NULL; diff --git a/src/faction.h b/src/faction.h index 7241350..cebee13 100644 --- a/src/faction.h +++ b/src/faction.h @@ -5,6 +5,7 @@ /* Get stuff. */ int faction_get(const char* name); char* faction_name(int f); +char* faction_longname(int f); /* Player stuff. */ void faction_modPlayer(int f, int mod);