X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=menu.c;h=6749f6daa4d715cc5990ca4fba1744f6c9eb0028;hb=6d7ce4397972f050c17b11de2f75209bdd562b80;hp=0480198c9ff0f94d80f94ffef3ed838f967ad440;hpb=aadd101471d0227217f84d3dc6ed03fec4aacd4c;p=xonotic%2Fdarkplaces.git diff --git a/menu.c b/menu.c index 0480198c..6749f6da 100644 --- a/menu.c +++ b/menu.c @@ -34,7 +34,6 @@ static cvar_t menu_progs = {CF_CLIENT, "menu_progs", "menu.dat", "name of quakec static int NehGameType; enum m_state_e m_state; -char m_return_reason[128]; void M_Menu_Main_f(cmd_state_t *cmd); void M_Menu_SinglePlayer_f(cmd_state_t *cmd); @@ -108,13 +107,6 @@ static void M_ModList_Key(cmd_state_t *cmd, int key, int ascii); static qbool m_entersound; ///< play after drawing a frame, so caching won't disrupt the sound -void M_Update_Return_Reason(const char *s) -{ - strlcpy(m_return_reason, s, sizeof(m_return_reason)); - if (s) - Con_DPrintf("%s\n", s); -} - #define StartingGame (m_multiplayer_cursor == 1) #define JoiningGame (m_multiplayer_cursor == 0) @@ -282,7 +274,7 @@ static void M_ToggleMenu(int mode) { if(mode == 0) return; // the menu is off, and we want it off - M_Menu_Main_f (&cmd_local); + M_Menu_Main_f (cmd_local); } else { @@ -2643,7 +2635,7 @@ static void M_Keys_Draw (void) strlcpy(keystring, "???", sizeof(keystring)); else { - char tinystr[2]; + char tinystr[TINYSTR_LEN]; keystring[0] = 0; for (j = 0;j < NUMKEYS;j++) { @@ -2651,7 +2643,7 @@ static void M_Keys_Draw (void) { if (j > 0) strlcat(keystring, " or ", sizeof(keystring)); - strlcat(keystring, Key_KeynumToString (keys[j], tinystr, sizeof(tinystr)), sizeof(keystring)); + strlcat(keystring, Key_KeynumToString (keys[j], tinystr, TINYSTR_LEN), sizeof(keystring)); } } } @@ -2669,7 +2661,7 @@ static void M_Keys_Key(cmd_state_t *cmd, int k, int ascii) { char line[80]; int keys[NUMKEYS]; - char tinystr[2]; + char tinystr[TINYSTR_LEN]; if (bind_grab) { // defining a key @@ -2680,7 +2672,7 @@ static void M_Keys_Key(cmd_state_t *cmd, int k, int ascii) } else //if (k != '`') { - dpsnprintf(line, sizeof(line), "bind \"%s\" \"%s\"\n", Key_KeynumToString(k, tinystr, sizeof(tinystr)), bindnames[keys_cursor][0]); + dpsnprintf(line, sizeof(line), "bind \"%s\" \"%s\"\n", Key_KeynumToString(k, tinystr, TINYSTR_LEN), bindnames[keys_cursor][0]); Cbuf_InsertText (cmd, line); } @@ -3344,7 +3336,7 @@ void M_Menu_LanConfig_f(cmd_state_t *cmd) lanConfig_port = 26000; dpsnprintf(lanConfig_portname, sizeof(lanConfig_portname), "%u", (unsigned int) lanConfig_port); - M_Update_Return_Reason(""); + cl_connect_status[0] = '\0'; } @@ -3397,8 +3389,8 @@ static void M_LanConfig_Draw (void) if (lanConfig_cursor == 3) M_DrawCharacter (basex+16 + 8*strlen(lanConfig_joinname), lanConfig_cursor_table [lanConfig_cursor], 10+((int)(host.realtime*4)&1)); - if (*m_return_reason) - M_Print(basex, 168, m_return_reason); + if (*cl_connect_status) + M_Print(basex, 168, cl_connect_status); } @@ -4385,7 +4377,8 @@ static void M_GameOptions_Key(cmd_state_t *cmd, int key, int ascii) //============================================================================= /* SLIST MENU */ -static int slist_cursor; +static unsigned slist_cursor; +static unsigned slist_visible; void M_Menu_ServerList_f(cmd_state_t *cmd) { @@ -4393,7 +4386,7 @@ void M_Menu_ServerList_f(cmd_state_t *cmd) m_state = m_slist; m_entersound = true; slist_cursor = 0; - M_Update_Return_Reason(""); + cl_connect_status[0] = '\0'; if (lanConfig_cursor == 2) Net_SlistQW_f(cmd); else @@ -4403,7 +4396,7 @@ void M_Menu_ServerList_f(cmd_state_t *cmd) static void M_ServerList_Draw (void) { - int n, y, visible, start, end, statnumplayers, statmaxplayers; + unsigned n, y, start, end, statnumplayers, statmaxplayers; cachepic_t *p; const char *s; char vabuf[1024]; @@ -4415,14 +4408,14 @@ static void M_ServerList_Draw (void) M_Background(640, vid_conheight.integer); // scroll the list as the cursor moves ServerList_GetPlayerStatistics(&statnumplayers, &statmaxplayers); - s = va(vabuf, sizeof(vabuf), "%i/%i masters %i/%i servers %i/%i players", masterreplycount, masterquerycount, serverreplycount, serverquerycount, statnumplayers, statmaxplayers); + s = va(vabuf, sizeof(vabuf), "%u/%u masters %u/%u servers %u/%u players", masterreplycount, masterquerycount, serverreplycount, serverquerycount, statnumplayers, statmaxplayers); M_PrintRed((640 - strlen(s) * 8) / 2, 32, s); - if (*m_return_reason) - M_Print(16, menu_height - 8, m_return_reason); + if (*cl_connect_status) + M_Print(16, menu_height - 8, cl_connect_status); y = 48; - visible = (int)((menu_height - 16 - y) / 8 / 2); - start = bound(0, slist_cursor - (visible >> 1), serverlist_viewcount - visible); - end = min(start + visible, serverlist_viewcount); + slist_visible = (menu_height - 16 - y) / 8 / 2; + start = min(slist_cursor - min(slist_cursor, slist_visible >> 1), serverlist_viewcount - min(serverlist_viewcount, slist_visible)); + end = min(start + slist_visible, serverlist_viewcount); p = Draw_CachePic ("gfx/p_multi"); M_DrawPic((640 - Draw_GetPicWidth(p)) / 2, 4, "gfx/p_multi"); @@ -4469,14 +4462,18 @@ static void M_ServerList_Key(cmd_state_t *cmd, int k, int ascii) Net_Slist_f(cmd); break; + case K_PGUP: + slist_cursor -= slist_visible - 2; case K_UPARROW: case K_LEFTARROW: S_LocalSound ("sound/misc/menu1.wav"); slist_cursor--; - if (slist_cursor < 0) + if (slist_cursor >= serverlist_viewcount) slist_cursor = serverlist_viewcount - 1; break; + case K_PGDN: + slist_cursor += slist_visible - 2; case K_DOWNARROW: case K_RIGHTARROW: S_LocalSound ("sound/misc/menu1.wav"); @@ -4485,6 +4482,16 @@ static void M_ServerList_Key(cmd_state_t *cmd, int k, int ascii) slist_cursor = 0; break; + case K_HOME: + S_LocalSound ("sound/misc/menu1.wav"); + slist_cursor = 0; + break; + + case K_END: + S_LocalSound ("sound/misc/menu1.wav"); + slist_cursor = serverlist_viewcount - 1; + break; + case K_ENTER: S_LocalSound ("sound/misc/menu2.wav"); if (serverlist_viewcount) @@ -4602,7 +4609,7 @@ void M_Menu_ModList_f(cmd_state_t *cmd) m_state = m_modlist; m_entersound = true; modlist_cursor = 0; - M_Update_Return_Reason(""); + cl_connect_status[0] = '\0'; ModList_RebuildList(); } @@ -4652,8 +4659,8 @@ static void M_ModList_Draw (void) for (y = 0; y < modlist_numenabled; y++) M_PrintRed(432, 48 + y * 8, modlist[modlist_enabled[y]].dir); - if (*m_return_reason) - M_Print(16, menu_height - 8, m_return_reason); + if (*cl_connect_status) + M_Print(16, menu_height - 8, cl_connect_status); // scroll the list as the cursor moves y = 48; visible = (int)((menu_height - 16 - y) / 8 / 2); @@ -4910,7 +4917,7 @@ void M_Draw (void) void M_KeyEvent (int key, int ascii, qbool downevent) { - cmd_state_t *cmd = &cmd_local; + cmd_state_t *cmd = cmd_local; if (!downevent) return; switch (m_state) @@ -5269,7 +5276,7 @@ static void MVM_count_edicts(prvm_prog_t *prog) for (i=0 ; inum_edicts ; i++) { ent = PRVM_EDICT_NUM(i); - if (ent->priv.required->free) + if (ent->free) continue; active++; } @@ -5378,7 +5385,7 @@ static void MP_Shutdown (void) static void MP_Init (void) { prvm_prog_t *prog = MVM_prog; - PRVM_Prog_Init(prog, &cmd_local); + PRVM_Prog_Init(prog, cmd_local); prog->edictprivate_size = 0; // no private struct used prog->name = "menu";