36 for (
int i = 0;
i <
ccs.numRanks;
i++) {
77 const char* errhead =
"CL_ParseRanks: unexpected end of file (medal/rank ";
83 if (!*text || *token !=
'{') {
84 cgi->Com_Printf(
"CL_ParseRanks: rank/medal \"%s\" without body ignored\n",
name);
88 for (
int i = 0;
i <
ccs.numRanks;
i++) {
90 cgi->Com_Printf(
"CL_ParseRanks: Rank with same name '%s' already loaded.\n",
name);
96 cgi->Com_Printf(
"CL_ParseRanks: Too many rank descriptions, '%s' ignored.\n",
name);
101 rank = &
ccs.ranks[
ccs.numRanks++];
108 token =
cgi->Com_EParse(text, errhead,
name);
116 }
else if (
Q_streq(token,
"type")) {
118 token =
cgi->Com_EParse(text, errhead,
name);
124 cgi->Com_Printf(
"CL_ParseRanks: unknown token \"%s\" ignored (medal/rank %s)\n", token,
name);
127 if (rank->
image ==
nullptr || !strlen(rank->
image))
128 cgi->Com_Error(
ERR_DROP,
"CL_ParseRanks: image is missing for rank %s", rank->
id);
130 if (rank->
name ==
nullptr || !strlen(rank->
name))
131 cgi->Com_Error(
ERR_DROP,
"CL_ParseRanks: name is missing for rank %s", rank->
id);
136 if (rank->
level == -1)
137 cgi->Com_Error(
ERR_DROP,
"CL_ParseRanks: level is missing for rank %s", rank->
id);
Share stuff between the different cgame implementations.
memPool_t * cp_campaignPool
Header file for single player campaign control.
const cgame_import_t * cgi
employeeType_t E_GetEmployeeType(const char *type)
Convert string to employeeType_t.
rank_t * CL_GetRankByIdx(const int index)
Returns a rank at an index.
int CL_GetRankIdx(const char *rankID)
Get the index of the given rankID in ccs.ranks array.
void CL_ParseRanks(const char *name, const char **text)
Parse medals and ranks defined in the medals.ufo file.
static const value_t rankValues[]
const char * Com_Parse(const char *data_p[], char *target, size_t size, bool replaceWhitespaces)
Parse a token out of a string.
Shared parsing functions.
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
#define MEMBER_SIZEOF(TYPE, MEMBER)
Describes a rank that a recruit can gain.