From 61218a893b68bcc232fcad74b9d396c2f51b1511 Mon Sep 17 00:00:00 2001 From: Kai-Li Date: Sun, 30 Jun 2024 21:10:50 +0200 Subject: [PATCH] Revert "GENDER: Enable the user to select the gender (#199)" This reverses the gender PR and issues that came with it, since we lack the time to fix them. But we keep some fixes that came with the PR. This also fixes then #222. --- code/cgame/cg_event.c | 30 ++++++-------- code/cgame/cg_local.h | 3 +- code/cgame/cg_players.c | 48 +++++++++-------------- code/client/cl_main.c | 2 +- code/game/bg_public.h | 2 +- code/game/g_client.c | 46 +++++++--------------- code/ui/ui_playersettings.c | 78 +++++++------------------------------ 7 files changed, 62 insertions(+), 147 deletions(-) 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);