/* ================= PlayerModel_SaveChanges ================= */ static void PlayerModel_SaveChanges( void ) { trap_Cvar_Set( Com_LocalClientCvarName(s_playermodel.localClient, "model"), s_playermodel.modelskin ); trap_Cvar_Set( Com_LocalClientCvarName(s_playermodel.localClient, "headmodel"), s_playermodel.modelskin ); trap_Cvar_Set( Com_LocalClientCvarName(s_playermodel.localClient, "team_model"), s_playermodel.modelskin ); trap_Cvar_Set( Com_LocalClientCvarName(s_playermodel.localClient, "team_headmodel"), s_playermodel.modelskin ); }
/* ================= PlayerModel_SetMenuItems ================= */ static void PlayerModel_SetMenuItems( void ) { int i; int maxlen; char modelskin[64]; char* buffptr; char* pdest; // name trap_Cvar_VariableStringBuffer( Com_LocalClientCvarName(s_playermodel.localClient, "name"), s_playermodel.playername.string, 16 ); Q_CleanStr( s_playermodel.playername.string ); // model trap_Cvar_VariableStringBuffer( Com_LocalClientCvarName(s_playermodel.localClient, "model"), s_playermodel.modelskin, 64 ); // use default skin if none is set if (!strchr(s_playermodel.modelskin, '/')) { Q_strcat(s_playermodel.modelskin, 64, "/default"); } // find model in our list for (i=0; i<s_playermodel.nummodels; i++) { // strip icon_ buffptr = s_playermodel.modelnames[i] + strlen("models/players/"); pdest = strstr(buffptr,"icon_"); if (pdest) { Q_strncpyz(modelskin,buffptr,pdest-buffptr+1); strcat(modelskin,pdest + 5); } else continue; if (!Q_stricmp( s_playermodel.modelskin, modelskin )) { // found pic, set selection here s_playermodel.selectedmodel = i; s_playermodel.modelpage = i/MAX_MODELSPERPAGE; // seperate the model name maxlen = pdest-buffptr; if (maxlen > 16) maxlen = 16; Q_strncpyz( s_playermodel.modelname.string, buffptr, maxlen ); Q_strupr( s_playermodel.modelname.string ); // seperate the skin name maxlen = strlen(pdest+5)+1; if (maxlen > 16) maxlen = 16; Q_strncpyz( s_playermodel.skinname.string, pdest+5, maxlen ); Q_strupr( s_playermodel.skinname.string ); break; } } }
/* ================= UI_TogglePlayerIngame ================= */ void UI_TogglePlayerIngame(int localClientNum) { uiClientState_t cs; trap_GetClientState( &cs ); if (cs.clientNums[localClientNum] == -1) { trap_Cmd_ExecuteText( EXEC_APPEND, va("%s\n", Com_LocalClientCvarName(localClientNum, "dropin")) ); } else { trap_Cmd_ExecuteText( EXEC_APPEND, va("%s\n", Com_LocalClientCvarName(localClientNum, "dropout")) ); } UI_ForceMenuOff (); }
/* =============== UI_JoystickMenu_Event =============== */ static void UI_JoystickMenu_Event( void *ptr, int event ) { if( event != QM_ACTIVATED ) { return; } if (((menucommon_s*)ptr)->id >= ID_JOYSTICK && ((menucommon_s*)ptr)->id < ID_JOYSTICK + MAX_JOYSTICKS) { int joystick = ((menucommon_s*)ptr)->id - ID_JOYSTICK; int i; if (joystick == 0) { // Disable joystick trap_Cvar_SetValue(Com_LocalClientCvarName(joystickMenu.localClient, "in_joystick"), 0); trap_Cvar_SetValue(Com_LocalClientCvarName(joystickMenu.localClient, "in_joystickNo"), 0); } else { // Enable joystick trap_Cvar_SetValue(Com_LocalClientCvarName(joystickMenu.localClient, "in_joystick"), 1); trap_Cvar_SetValue(Com_LocalClientCvarName(joystickMenu.localClient, "in_joystickNo"), joystick-1); } // Disable last selected joystick. for (i = 0; i < MAX_JOYSTICKS; i++) { joystickMenu.joysticks[i].generic.flags |= QMF_PULSEIFFOCUS; joystickMenu.joysticks[i].generic.flags &= ~(QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); } // Select joystick. ((menucommon_s*)ptr)->flags &= ~QMF_PULSEIFFOCUS; ((menucommon_s*)ptr)->flags |= (QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); joystickMenu.changed = (joystick != joystickMenu.originalJoystick); return; } switch( ((menucommon_s*)ptr)->id ) { case ID_BACK: if (joystickMenu.changed) { trap_Cmd_ExecuteText( EXEC_APPEND, "in_restart\n" ); } UI_PopMenu(); break; } }
/* =============== UI_Joystick_MenuInit =============== */ static void UI_Joystick_MenuInit( int localClient ) { int y; int i; int joystick; UI_Joystick_Cache(); memset( &joystickMenu, 0, sizeof(joystickMenu) ); UI_Joystick_GetNames(); joystickMenu.localClient = localClient; joystickMenu.menu.wrapAround = qtrue; joystickMenu.menu.fullscreen = qtrue; joystickMenu.banner.generic.type = MTYPE_BTEXT; joystickMenu.banner.generic.x = 320; joystickMenu.banner.generic.y = 16; joystickMenu.banner.string = "SELECT JOYSTICK"; joystickMenu.banner.color = color_white; joystickMenu.banner.style = UI_CENTER; joystickMenu.framel.generic.type = MTYPE_BITMAP; joystickMenu.framel.generic.name = ART_FRAMEL; joystickMenu.framel.generic.flags = QMF_INACTIVE; joystickMenu.framel.generic.x = 0; joystickMenu.framel.generic.y = 78; joystickMenu.framel.width = 256; joystickMenu.framel.height = 329; joystickMenu.framer.generic.type = MTYPE_BITMAP; joystickMenu.framer.generic.name = ART_FRAMER; joystickMenu.framer.generic.flags = QMF_INACTIVE; joystickMenu.framer.generic.x = 376; joystickMenu.framer.generic.y = 76; joystickMenu.framer.width = 256; joystickMenu.framer.height = 334; y = (SCREEN_HEIGHT - MAX_JOYSTICKS * JOY_MENU_VERTICAL_SPACING) / 2; for (i = 0; i < MAX_JOYSTICKS; i++) { joystickMenu.joysticks[i].generic.type = MTYPE_PTEXT; joystickMenu.joysticks[i].generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS|QMF_SMALLFONT; joystickMenu.joysticks[i].generic.x = 320; joystickMenu.joysticks[i].generic.y = y; joystickMenu.joysticks[i].generic.id = ID_JOYSTICK+i; joystickMenu.joysticks[i].generic.callback = UI_JoystickMenu_Event; joystickMenu.joysticks[i].string = joystickMenu.joystickNames[i]; joystickMenu.joysticks[i].color = color_red; joystickMenu.joysticks[i].style = UI_CENTER|UI_SMALLFONT; if (i >= joystickMenu.numJoysticks) { joystickMenu.joysticks[i].generic.flags |= QMF_GRAYED; } y += JOY_MENU_VERTICAL_SPACING; } joystickMenu.back.generic.type = MTYPE_BITMAP; joystickMenu.back.generic.name = ART_BACK0; joystickMenu.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; joystickMenu.back.generic.id = ID_BACK; joystickMenu.back.generic.callback = UI_JoystickMenu_Event; joystickMenu.back.generic.x = 0; joystickMenu.back.generic.y = 480-64; joystickMenu.back.width = 128; joystickMenu.back.height = 64; joystickMenu.back.focuspic = ART_BACK1; Menu_AddItem( &joystickMenu.menu, &joystickMenu.banner ); Menu_AddItem( &joystickMenu.menu, &joystickMenu.framel ); Menu_AddItem( &joystickMenu.menu, &joystickMenu.framer ); for (i = 0; i < MAX_JOYSTICKS; i++) { Menu_AddItem( &joystickMenu.menu, &joystickMenu.joysticks[i] ); } Menu_AddItem( &joystickMenu.menu, &joystickMenu.back ); // Store original joystick if (trap_Cvar_VariableValue(Com_LocalClientCvarName(joystickMenu.localClient, "in_joystick")) == 0) { joystick = 0; } else { joystick = 1 + (int)trap_Cvar_VariableValue(Com_LocalClientCvarName(joystickMenu.localClient, "in_joystickNo")); } if (joystick < 0 || joystick >= joystickMenu.numJoysticks) { joystick = 0; } joystickMenu.originalJoystick = joystick; // Select joystick joystickMenu.joysticks[joystick].generic.flags &= ~QMF_PULSEIFFOCUS; joystickMenu.joysticks[joystick].generic.flags |= (QMF_HIGHLIGHT|QMF_HIGHLIGHT_IF_FOCUS); }
/* ======================== BG_RegisterClientCvars Init client-side cvars in cgame and ui. ======================== */ void BG_RegisterClientCvars(int maxSplitview) { int i; const char *name; const int userInfo[MAX_SPLITVIEW] = { CVAR_USERINFO, CVAR_USERINFO2, CVAR_USERINFO3, CVAR_USERINFO4 }; const char *modelNames[MAX_SPLITVIEW] = { DEFAULT_MODEL, DEFAULT_MODEL2, DEFAULT_MODEL3, DEFAULT_MODEL4 }; const char *headModelNames[MAX_SPLITVIEW] = { DEFAULT_HEAD, DEFAULT_HEAD2, DEFAULT_HEAD3, DEFAULT_HEAD4 }; const char *teamModelNames[MAX_SPLITVIEW] = { DEFAULT_TEAM_MODEL, DEFAULT_TEAM_MODEL2, DEFAULT_TEAM_MODEL3, DEFAULT_TEAM_MODEL4 }; const char *teamHeadModelNames[MAX_SPLITVIEW] = { DEFAULT_TEAM_HEAD, DEFAULT_TEAM_HEAD2, DEFAULT_TEAM_HEAD3, DEFAULT_TEAM_HEAD4 }; for (i = 0; i < maxSplitview; i++) { if (i == 0) { name = DEFAULT_CLIENT_NAME; } else { name = va("%s%d", DEFAULT_CLIENT_NAME, i + 1); } trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "name"), name, userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "model"), modelNames[i], userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "headmodel"), headModelNames[i], userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "team_model"), teamModelNames[i], userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "team_headmodel"), teamHeadModelNames[i], userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "color1"), va("%d", DEFAULT_CLIENT_COLOR1), userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "color2"), va("%d", DEFAULT_CLIENT_COLOR2), userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "handicap"), "100", userInfo[i] | CVAR_ARCHIVE ); trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "teamtask"), "0", userInfo[i] ); // set to in ui before starting server trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "teampref"), "", userInfo[i] ); // clear team if was previously set (only want it used for one game) trap_Cvar_Set( Com_LocalClientCvarName(i, "teampref"), "" ); // init autoswitch so the ui will have it correctly even // if the cgame hasn't been started trap_Cvar_Register(NULL, Com_LocalClientCvarName(i, "cg_autoswitch"), "1", CVAR_ARCHIVE); } trap_Cvar_Register(NULL, "cg_predictItems", "1", CVAR_USERINFO_ALL | CVAR_ARCHIVE ); // cgame might not be initialized before menu is used trap_Cvar_Register(NULL, "cg_viewsize", "100", CVAR_ARCHIVE ); }