[Add] Factions are now able to have long names.

This commit is contained in:
Allanis 2013-08-03 18:38:23 +01:00
parent 9d43435d4a
commit a9c57f2cab
2 changed files with 16 additions and 3 deletions

View File

@ -15,7 +15,8 @@
#define PLAYER_ALLY 70 /* Above this, player is considered ally. */ #define PLAYER_ALLY 70 /* Above this, player is considered ally. */
typedef struct Faction_ { typedef struct Faction_ {
char* name; char* name; /* Normal name. */
char* longname; /* Long name. */
/* Enemies. */ /* Enemies. */
int* enemies; int* enemies;
@ -58,6 +59,13 @@ char* faction_name(int f) {
return faction_stack[f].name; 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. */ /* Modify the player's standing with a faction. */
void faction_modPlayer(int f, int mod) { void faction_modPlayer(int f, int mod) {
if(faction_isFaction(f)) { if(faction_isFaction(f)) {
@ -247,7 +255,9 @@ static Faction* faction_parse(xmlNodePtr parent) {
if(xml_isNode(node, "player")) { if(xml_isNode(node, "player")) {
tmp->player = xml_getInt(node); tmp->player = xml_getInt(node);
player = 1; player = 1;
continue;
} }
xmlr_strd(node, "longname", tmp->longname);
} while(xml_nextNode(node)); } while(xml_nextNode(node));
if(player == 0) DEBUG("Faction '%s' missing player tag", tmp->name); if(player == 0) DEBUG("Faction '%s' missing player tag", tmp->name);
@ -319,6 +329,7 @@ int factions_load(void) {
/* Player faction is hardcoded. */ /* Player faction is hardcoded. */
faction_stack = malloc(sizeof(Faction)); faction_stack = malloc(sizeof(Faction));
faction_stack[0].name = strdup("Player"); faction_stack[0].name = strdup("Player");
faction_stack[0].longname = NULL;
faction_stack[0].nallies = 0; faction_stack[0].nallies = 0;
faction_stack[0].nenemies = 0; faction_stack[0].nenemies = 0;
faction_nstack++; faction_nstack++;
@ -356,6 +367,7 @@ void factions_free(void) {
/* Free factions. */ /* Free factions. */
for(i = 0; i < faction_nstack; i++) { for(i = 0; i < faction_nstack; i++) {
free(faction_stack[i].name); free(faction_stack[i].name);
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].nallies > 0) free(faction_stack[i].allies);
if(faction_stack[i].nenemies > 0) free(faction_stack[i].enemies); if(faction_stack[i].nenemies > 0) free(faction_stack[i].enemies);
} }

View File

@ -5,6 +5,7 @@
/* Get stuff. */ /* Get stuff. */
int faction_get(const char* name); int faction_get(const char* name);
char* faction_name(int f); char* faction_name(int f);
char* faction_longname(int f);
/* Player stuff. */ /* Player stuff. */
void faction_modPlayer(int f, int mod); void faction_modPlayer(int f, int mod);