diff --git a/code/cgame/cg_event.c b/code/cgame/cg_event.c index 012b9f920..d675704ce 100644 --- a/code/cgame/cg_event.c +++ b/code/cgame/cg_event.c @@ -156,34 +156,28 @@ static void CG_Obituary(entityState_t *ent) { gender = ci->gender; switch (mod) { case MOD_BALLOONY_SPLASH: - if (gender == GENDER_MALE) - message = "tripped on his own water bomb"; - else if (gender == GENDER_FEMALE) + if (gender == GENDER_FEMALE) message = "tripped on her own water bomb"; else if (gender == GENDER_NEUTER) message = "tripped on its own water bomb"; else - message = "tripped on their own water bomb"; + message = "tripped on his own water bomb"; break; case MOD_BETTY_SPLASH: - if (gender == GENDER_MALE) - message = "blew himself up"; - else if (gender == GENDER_FEMALE) + if (gender == GENDER_FEMALE) message = "blew herself up"; else if (gender == GENDER_NEUTER) message = "blew itself up"; else - message = "blew themselves up"; + message = "blew himself up"; break; case MOD_BUBBLEG_SPLASH: - if (gender == GENDER_MALE) - message = "melted himself"; - else if (gender == GENDER_FEMALE) + if (gender == GENDER_FEMALE) message = "melted herself"; else if (gender == GENDER_NEUTER) message = "melted itself"; else - message = "melted themselves"; + message = "melted himself"; break; case MOD_IMPERIUS_SPLASH: message = "should have used a smaller gun"; @@ -205,19 +199,19 @@ static void CG_Obituary(entityState_t *ent) { if (cgs.gametype < GT_TEAM) { if (cgs.gametype == GT_LPS) { - const char *gender_strings[] = {"they have", "he has", "she has", "it has", NULL}; + const char *gender_strings[] = {"he", "she", "it", NULL}; CASSERT(ARRAY_LEN(gender_strings) == GENDER_MAX + 1); gender = ci->gender; - if (gender >= GENDER_MAX || gender < GENDER_NONE) - gender = GENDER_NONE; + if (gender >= GENDER_MAX || gender < GENDER_MALE) + gender = GENDER_NEUTER; if (ent->generic1 == 0) - s = va("You fragged %s,\n%s no lives left.", targetName, gender_strings[gender]); + s = va("You fragged %s\n%s has no lives left.", targetName, gender_strings[gender]); else if (ent->generic1 == 1) - s = va("You fragged %s,\n%s 1 life left.", targetName, gender_strings[gender]); + s = va("You fragged %s\n%s has 1 life left.", targetName, gender_strings[gender]); else - s = va("You fragged %s,\n%s %i lives left.", targetName, gender_strings[gender], ent->generic1); + s = va("You fragged %s\n%s has %i lives left.", targetName, gender_strings[gender], ent->generic1); } else s = va("You fragged %s\n%s place with %i", targetName, CG_PlaceString(cg.snap->ps.persistant[PERS_RANK] + 1), cg.snap->ps.persistant[PERS_SCORE]); diff --git a/code/cgame/cg_local.h b/code/cgame/cg_local.h index 03a55a6dc..2de98c851 100644 --- a/code/cgame/cg_local.h +++ b/code/cgame/cg_local.h @@ -371,8 +371,7 @@ typedef struct { float headScale; footstep_t footsteps; - gender_t gender; // user settings (can also be from model) - gender_t genderModel; // cached value from model (animation.cfg) + gender_t gender; // from model qhandle_t legsModel; qhandle_t legsSkin; diff --git a/code/cgame/cg_players.c b/code/cgame/cg_players.c index e935019e1..9b68b6d5c 100644 --- a/code/cgame/cg_players.c +++ b/code/cgame/cg_players.c @@ -108,6 +108,7 @@ static qboolean CG_ParseAnimationFile(const char *filename, clientInfo_t *ci) { ci->footsteps = FOOTSTEP_NORMAL; VectorClear(ci->headOffset); ci->headScale = 1.0f; + ci->gender = GENDER_MALE; ci->fixedlegs = qfalse; ci->fixedtorso = qfalse; @@ -166,15 +167,14 @@ static qboolean CG_ParseAnimationFile(const char *filename, clientInfo_t *ci) { } else if (!Q_stricmp(token, "sex")) { token = COM_Parse(&text_p); if (!token[0]) { - ci->genderModel = GENDER_NONE; break; } - if (token[0] == 'm' || token[0] == 'M') { - ci->genderModel = GENDER_MALE; - } else if (token[0] == 'f' || token[0] == 'F') { - ci->genderModel = GENDER_FEMALE; + if (token[0] == 'f' || token[0] == 'F') { + ci->gender = GENDER_FEMALE; } else if (token[0] == 'n' || token[0] == 'N') { - ci->genderModel = GENDER_NEUTER; + ci->gender = GENDER_NEUTER; + } else { + ci->gender = GENDER_MALE; } continue; } else if (!Q_stricmp(token, "fixedlegs")) { @@ -195,6 +195,7 @@ static qboolean CG_ParseAnimationFile(const char *filename, clientInfo_t *ci) { // read information for each frame for (i = 0; i < MAX_ANIMATIONS; i++) { + token = COM_Parse(&text_p); if (!token[0]) { if (i >= TORSO_GETFLAG && i <= TORSO_NEGATIVE) { @@ -667,21 +668,18 @@ static void CG_LoadClientInfo(int clientNum, clientInfo_t *ci) { CG_ResetPlayerEntity(&cg_entities[i]); } } - - if (ci->gender == GENDER_MAX) { - ci->gender = ci->genderModel; - } } -/** - * @brief Copies the attributes of a model from its @c animation.cfg properties to the new @c clientInfo_t - * @sa CG_ParseAnimationFile() - */ +/* +====================== +CG_CopyClientInfoModel +====================== +*/ static void CG_CopyClientInfoModel(const clientInfo_t *from, clientInfo_t *to) { VectorCopy(from->headOffset, to->headOffset); to->headScale = from->headScale; to->footsteps = from->footsteps; - to->genderModel = from->genderModel; + to->gender = from->gender; to->legsModel = from->legsModel; to->legsSkin = from->legsSkin; @@ -801,9 +799,11 @@ static void CG_SetDeferredClientInfo(int clientNum, clientInfo_t *ci) { CG_LoadClientInfo(clientNum, ci); } -/** - * @sa ClientUserinfoChanged() - */ +/* +====================== +CG_NewClientInfo +====================== +*/ void CG_NewClientInfo(int clientNum) { clientInfo_t *ci; clientInfo_t newInfo; @@ -883,17 +883,6 @@ void CG_NewClientInfo(int clientNum) { // team leader v = Info_ValueForKey(configstring, "tl"); newInfo.teamLeader = atoi(v); - - // sex - // if a sex option is set in the userinfo string we take this, - // otherwise we check for GENDER_MAX in CG_ParseAnimationFile() to use the - // setting from animation.cfg - newInfo.gender = GENDER_MAX; - v = Info_ValueForKey(configstring, "s"); - if (v[0] != '\0') { - newInfo.gender = atoi(v); - } - oldTeam = ci->team; // this may be run before the first snapshot arrives @@ -1002,7 +991,6 @@ void CG_NewClientInfo(int clientNum) { // replace whatever was there with the new one newInfo.infoValid = qtrue; - *ci = newInfo; // if the local client changed teams in a team gametype, adjust team- and enemymodels diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 89beaf80f..04cd1faab 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -3400,7 +3400,7 @@ void CL_Init(void) { Cvar_Get("spraycolor", "2", CVAR_USERINFO | CVAR_ARCHIVE); Cvar_Get("randomcolor", "0", CVAR_USERINFO | CVAR_ARCHIVE); Cvar_Get("handicap", "100", CVAR_USERINFO | CVAR_ARCHIVE); - Cvar_Get("sex", "model", CVAR_USERINFO | CVAR_ARCHIVE); + Cvar_Get("sex", "male", CVAR_USERINFO | CVAR_ARCHIVE); Cvar_Get("password", "", CVAR_USERINFO); Cvar_Get("cg_predictItems", "1", CVAR_USERINFO | CVAR_ARCHIVE); diff --git a/code/game/bg_public.h b/code/game/bg_public.h index e231b31fc..3f0f818e7 100644 --- a/code/game/bg_public.h +++ b/code/game/bg_public.h @@ -160,7 +160,7 @@ typedef enum { int convertGTStringToGTNumber(const char *argStr); -typedef enum { GENDER_NONE, GENDER_MALE, GENDER_FEMALE, GENDER_NEUTER, GENDER_MAX } gender_t; +typedef enum { GENDER_MALE, GENDER_FEMALE, GENDER_NEUTER, GENDER_MAX } gender_t; /* =================================================================================== diff --git a/code/game/g_client.c b/code/game/g_client.c index 10a8fcd56..3d0762bd2 100644 --- a/code/game/g_client.c +++ b/code/game/g_client.c @@ -741,15 +741,17 @@ static void ClientCleanName(const char *in, char *out, int outSize) { Q_strncpyz(out, "UnnamedPlayer", outSize); } -/** - * Called from ClientConnect when the player first connects and - * directly by the server system when the player updates a userinfo variable. - * - * The game can override any of the settings and call trap_SetUserinfo - * if desired. - * - * @see CG_NewClientInfo() - */ +/* +=========== +ClientUserInfoChanged + +Called from ClientConnect when the player first connects and +directly by the server system when the player updates a userinfo variable. + +The game can override any of the settings and call trap_SetUserinfo +if desired. +============ +*/ void ClientUserinfoChanged(int clientNum) { gentity_t *ent; int teamLeader, team, health, randomColor; @@ -760,7 +762,6 @@ void ClientUserinfoChanged(int clientNum) { gclient_t *client; char sprayColor[MAX_INFO_STRING]; char userinfo[MAX_INFO_STRING]; - gender_t gender; ent = g_entities + clientNum; client = ent->client; @@ -813,20 +814,6 @@ void ClientUserinfoChanged(int clientNum) { } client->ps.stats[STAT_MAX_HEALTH] = client->pers.maxHealth; - // set gender - s = Info_ValueForKey(userinfo, "sex"); - if (!Q_stricmp(s, "neuter")) { - gender = GENDER_NEUTER; - } else if (!Q_stricmp(s, "female")) { - gender = GENDER_FEMALE; - } else if (!Q_stricmp(s, "male")) { - gender = GENDER_MALE; - } else if (!Q_stricmp(s, "none")) { - gender = GENDER_NONE; - } else { - gender = GENDER_MAX; - } - // set model if (g_gametype.integer >= GT_TEAM) { Q_strncpyz(model, Info_ValueForKey(userinfo, "team_model"), sizeof(model)); @@ -858,19 +845,16 @@ void ClientUserinfoChanged(int clientNum) { // send over a subset of the userinfo keys so other clients can // print scoreboards, display models, and play custom sounds if (ent->r.svFlags & SVF_BOT) { - // cyr{ const char *rndSprayColor; int rnd = randomindex(NUM_COLORS); rndSprayColor = va("%d", rnd); - s = va("n\\%s\\t\\%i\\model\\%s\\hmodel\\%s\\sc\\%s\\hc\\%i\\w\\%i\\l\\%i\\skill\\%s\\tl\\%d" - "\\sl\\%s", + s = va("n\\%s\\t\\%i\\model\\%s\\hmodel\\%s\\sc\\%s\\hc\\%i\\w\\%i\\l\\%i\\skill\\%s\\tl\\%d\\sl\\%s", client->pers.netname, team, model, headModel, rndSprayColor, client->pers.maxHealth, client->sess.wins, client->sess.losses, Info_ValueForKey(userinfo, "skill"), teamLeader, client->sess.selectedlogo); - // cyr} } else { - s = va("n\\%s\\t\\%i\\model\\%s\\hmodel\\%s\\sc\\%s\\rc\\%i\\hc\\%i\\w\\%i\\l\\%i\\tl\\%d\\sl\\%s\\s\\%i", - client->pers.netname, client->sess.sessionTeam, model, headModel, sprayColor, randomColor, client->pers.maxHealth, - client->sess.wins, client->sess.losses, teamLeader, client->sess.selectedlogo, (int)gender); + s = va("n\\%s\\t\\%i\\model\\%s\\hmodel\\%s\\sc\\%s\\rc\\%i\\hc\\%i\\w\\%i\\l\\%i\\tl\\%d\\sl\\%s", + client->pers.netname, client->sess.sessionTeam, model, headModel, sprayColor, randomColor, + client->pers.maxHealth, client->sess.wins, client->sess.losses, teamLeader, client->sess.selectedlogo); } trap_SetConfigstring(CS_PLAYERS + clientNum, s); diff --git a/code/ui/ui_playersettings.c b/code/ui/ui_playersettings.c index da7c9f32f..3a2cbf80c 100644 --- a/code/ui/ui_playersettings.c +++ b/code/ui/ui_playersettings.c @@ -38,18 +38,17 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define ID_NAME 20 #define ID_HANDICAP 21 -#define ID_GENDER 22 -#define ID_PREVMODEL 23 -#define ID_NEXTMODEL 24 -#define ID_PREVSKIN 25 -#define ID_NEXTSKIN 26 -#define ID_MICON 27 //+5 -#define ID_SICON 33 //+11 -#define ID_PLAYERMODEL 45 -#define ID_PREVLOGO 46 -#define ID_NEXTLOGO 47 -#define ID_RANDOMCOLOR 48 -#define ID_SPRAYCOLOR 49 +#define ID_PREVMODEL 22 +#define ID_NEXTMODEL 23 +#define ID_PREVSKIN 24 +#define ID_NEXTSKIN 25 +#define ID_MICON 26 //+5 +#define ID_SICON 32 //+11 +#define ID_PLAYERMODEL 44 +#define ID_PREVLOGO 45 +#define ID_NEXTLOGO 46 +#define ID_RANDOMCOLOR 47 +#define ID_SPRAYCOLOR 48 #define MAX_NAMELENGTH 20 @@ -77,7 +76,6 @@ typedef struct { menutext_s nameheader; menufield_s name; menulist_s handicap; - menulist_s gender; menutext_s logoheader; menutext_s logoname; @@ -115,8 +113,6 @@ typedef struct { static playersettings_t s_playersettings; -static const char *gender_items[] = {S_COLOR_WHITE "Model", S_COLOR_WHITE "Male", S_COLOR_WHITE "Female", S_COLOR_WHITE "Neuter", S_COLOR_WHITE "None", NULL}; - static const char *handicap_items[] = {S_COLOR_WHITE "None", S_COLOR_WHITE "90", S_COLOR_WHITE "80", S_COLOR_WHITE "70", S_COLOR_WHITE "60", S_COLOR_WHITE "50", S_COLOR_WHITE "40", S_COLOR_WHITE "30", S_COLOR_WHITE "20", S_COLOR_WHITE "10", NULL}; @@ -254,7 +250,6 @@ UI_PlayerSettings_SaveChanges ================= */ static void UI_PlayerSettings_SaveChanges(void) { - int g; // name trap_Cvar_Set("name", s_playersettings.name.field.buffer); @@ -262,20 +257,6 @@ static void UI_PlayerSettings_SaveChanges(void) { // handicap trap_Cvar_SetValue("handicap", 100 - s_playersettings.handicap.curvalue * 10); - // gender - g = s_playersettings.gender.curvalue; - if (g > 3) { - trap_Cvar_Set("sex", "none"); - } else if (g == 1) { - trap_Cvar_Set("sex", "male"); - } else if (g == 2) { - trap_Cvar_Set("sex", "female"); - } else if (g == 3) { - trap_Cvar_Set("sex", "neuter"); - } else { - trap_Cvar_Set("sex", "model"); - } - // spray logo trap_Cvar_Set("syc_logo", uis.spraylogoNames[s_playersettings.slogo_num]); @@ -327,7 +308,6 @@ UI_PlayerSettings_SetMenuItems static void UI_PlayerSettings_SetMenuItems(void) { int c; int h; - char gStr[32]; char modelname[32]; // name @@ -371,20 +351,6 @@ static void UI_PlayerSettings_SetMenuItems(void) { h = Com_Clamp(10, 100, trap_Cvar_VariableValue("handicap")); s_playersettings.handicap.curvalue = 10 - h / 10; - // gender - trap_Cvar_VariableStringBuffer("sex", gStr, sizeof(gStr)); - if (!Q_stricmp(gStr, "none")) { - s_playersettings.gender.curvalue = 4; - } else if (!Q_stricmp(gStr, "neuter")) { - s_playersettings.gender.curvalue = 3; - } else if (!Q_stricmp(gStr, "female")) { - s_playersettings.gender.curvalue = 2; - } else if (!Q_stricmp(gStr, "male")) { - s_playersettings.gender.curvalue = 1; - } else { - s_playersettings.gender.curvalue = 0; - } - // random spray color s_playersettings.randomcolor.curvalue = Com_Clamp(0, 1, trap_Cvar_VariableValue("randomcolor")); } @@ -621,7 +587,7 @@ static void UI_PlayerSettings_Draw(void) { i = Com_Clamp(0, (NUM_COLORS - 1), i); x = 92; - y = 284; + y = 284 - 9; UI_SetColor(g_color_table[i]); UI_DrawHandlePic(x, y, 64, 64, uis.spraylogoShaders[s_playersettings.slogo_num]); Q_strncpyz(logoName, SkipLogoNumber(uis.spraylogoNames[s_playersettings.slogo_num]), sizeof(logoName)); @@ -635,7 +601,7 @@ static void UI_PlayerSettings_Draw(void) { } x = 52; - y = 302; + y = 302 - 9; UI_SetColor(g_color_table[i]); UI_DrawHandlePic(x, y, 32, 32, uis.spraylogoShaders[prevlogo]); if (uis.cursorx >= x && uis.cursorx <= (x + 32) && uis.cursory >= y && uis.cursory <= (y + 32)) { @@ -816,7 +782,6 @@ static void UI_PlayerSettings_MenuEvent(void *ptr, int event) { switch (tmpid) { case ID_HANDICAP: - case ID_GENDER: break; case ID_BACK: @@ -1124,20 +1089,6 @@ static void UI_PlayerSettings_MenuInit(void) { s_playersettings.handicap.generic.y = y; s_playersettings.handicap.itemnames = handicap_items; - y += BIGCHAR_HEIGHT + 2; - s_playersettings.gender.generic.type = MTYPE_SPINCONTROL; - s_playersettings.gender.generic.name = "Gender:"; - s_playersettings.gender.generic.flags = QMF_SMALLFONT; - s_playersettings.gender.generic.id = ID_GENDER; - s_playersettings.gender.generic.callback = UI_PlayerSettings_MenuEvent; - s_playersettings.gender.generic.x = XPOSITION; - s_playersettings.gender.generic.y = y; - s_playersettings.gender.itemnames = gender_items; - s_playersettings.gender.generic.toolTip = - "Choose a desired gender, which is normally determined by the chosen player model, or choose " - "none to deactivate the gender. Default is model. NOTE: None forces the game to use they/them " - "instead of he/his, she/her, or it/its for your character."; - y += BIGCHAR_HEIGHT + 2; s_playersettings.logoheader.generic.type = MTYPE_TEXT; s_playersettings.logoheader.generic.x = XPOSITION - 96; @@ -1153,7 +1104,7 @@ static void UI_PlayerSettings_MenuInit(void) { s_playersettings.logoname.style = UI_LEFT | UI_SMALLFONT; s_playersettings.logoname.color = color_white; - y += 5 * (BIGCHAR_HEIGHT + 2); + y += 6 * (BIGCHAR_HEIGHT + 2); s_playersettings.randomcolor.generic.type = MTYPE_RADIOBUTTON; s_playersettings.randomcolor.generic.name = "Random Color:"; s_playersettings.randomcolor.generic.flags = QMF_SMALLFONT; @@ -1188,7 +1139,6 @@ static void UI_PlayerSettings_MenuInit(void) { Menu_AddItem(&s_playersettings.menu, &s_playersettings.nameheader); Menu_AddItem(&s_playersettings.menu, &s_playersettings.name); Menu_AddItem(&s_playersettings.menu, &s_playersettings.handicap); - Menu_AddItem(&s_playersettings.menu, &s_playersettings.gender); Menu_AddItem(&s_playersettings.menu, &s_playersettings.logoheader); Menu_AddItem(&s_playersettings.menu, &s_playersettings.logoname); Menu_AddItem(&s_playersettings.menu, &s_playersettings.logoleft);