X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=menu.c;h=66f228c8ba1df405eec5587528757a5c7f34582d;hb=2beb0bc7659665abb529707a9bb37ae81756bc93;hp=630d0c34970b01f12da7306dacf87c4de40a5c57;hpb=fef5ffefbcd0ecc4e5840e2f9d30139ecc131fa2;p=xonotic%2Fdarkplaces.git diff --git a/menu.c b/menu.c index 630d0c34..66f228c8 100644 --- a/menu.c +++ b/menu.c @@ -376,12 +376,15 @@ static void M_Demo_Key (int k, char ascii) /* MAIN MENU */ static int m_main_cursor; +static qboolean m_missingdata = false; static int MAIN_ITEMS = 4; // Nehahra: Menu Disable void M_Menu_Main_f (void) { + const char *s; + s = "gfx/mainmenu"; if (gamemode == GAME_NEHAHRA) { if (NehGameType == TYPE_DEMO) @@ -393,18 +396,22 @@ void M_Menu_Main_f (void) } else if (gamemode == GAME_NETHERWORLD)//VORTEX: menu restarting item MAIN_ITEMS = 6; - else if (gamemode == GAME_TRANSFUSION) { + else if (gamemode == GAME_TRANSFUSION) + { + s = "gfx/menu/mainmenu1"; if (sv.active && !cl.intermission && cl.islocalgame) MAIN_ITEMS = 8; else MAIN_ITEMS = 7; } - else if (gamemode == GAME_NEXUIZ) { - MAIN_ITEMS = 2; - } else MAIN_ITEMS = 5; + // check if the game data is missing and use a different main menu if so + m_missingdata = Draw_CachePic (s, true)->tex == r_texture_notexture; + if (m_missingdata) + MAIN_ITEMS = 2; + /* if (key_dest != key_menu) { @@ -423,6 +430,23 @@ static void M_Main_Draw (void) int f; cachepic_t *p; + if (m_missingdata) + { + float y; + const char *s; + M_Background(640, 480); //fall back is always to 640x480, this makes it most readable at that. + y = 480/3-16; + s = "You have reached this menu due to missing or unlocatable content/data";M_PrintRed ((640-strlen(s)*8)*0.5, (480/3)-16, s);y+=8; + y+=8; + s = "You may consider adding";M_Print ((640-strlen(s)*8)*0.5, y, s);y+=8; + s = "-basedir /path/to/game";M_Print ((640-strlen(s)*8)*0.5, y, s);y+=8; + s = "to your launch commandline";M_Print ((640-strlen(s)*8)*0.5, y, s);y+=8; + M_Print (640/2 - 48, 480/2, "Open Console"); //The console usually better shows errors (failures) + M_Print (640/2 - 48, 480/2 + 8, "Quit"); + M_DrawCharacter(640/2 - 56, 480/2 + (8 * m_main_cursor), 12+((int)(realtime*4)&1)); + return; + } + if (gamemode == GAME_TRANSFUSION) { int y1, y2, y3; M_Background(640, 480); @@ -444,18 +468,7 @@ static void M_Main_Draw (void) M_DrawPic (0, 120 + m_main_cursor * 40, va("gfx/menu/mainmenu%iselected", y3)); return; } - else if (gamemode == GAME_NEXUIZ) - { - M_Background(640, 480); //fall back is always to 640x480, this makes it most readable at that. - M_PrintRed (40, (480/3)-16, "You have reached this menu due to missing or unlocatable content/data"); - M_Print ((640/2)-92, (480/3), "You may consider adding"); - M_Print ((640/2)-136, (480/3)+8, "-basedir /path/to/nexuiz"); - M_Print ((640/2)-76, (480/3)+16, "to your launch commandline"); - M_Print (640/2 - 48, 480/2, "Open Console"); //The console usually better shows errors (failures) - M_Print (640/2 - 48, 480/2 + 8, "Quit"); - M_DrawCharacter(640/2 - 56, 480/2 + (8 * m_main_cursor), 12+((int)(realtime*4)&1)); - return; - } + M_Background(320, 200); M_DrawPic (16, 4, "gfx/qplaque"); p = Draw_CachePic ("gfx/ttl_main", true); @@ -506,7 +519,24 @@ static void M_Main_Key (int key, char ascii) case K_ENTER: m_entersound = true; - if (gamemode == GAME_NEHAHRA) + if (m_missingdata) + { + switch (m_main_cursor) + { + case 0: + if (cls.state == ca_connected) + { + m_state = m_none; + key_dest = key_game; + } + Con_ToggleConsole_f (); + break; + case 1: + M_Menu_Quit_f (); + break; + } + } + else if (gamemode == GAME_NEHAHRA) { switch (NehGameType) { @@ -693,22 +723,6 @@ static void M_Main_Key (int key, char ascii) } } } - else if (gamemode == GAME_NEXUIZ) { - switch (m_main_cursor) - { - case 0: - if (cls.state == ca_connected) - { - m_state = m_none; - key_dest = key_game; - } - Con_ToggleConsole_f (); - break; - case 1: - M_Menu_Quit_f (); - break; - } - } else { switch (m_main_cursor) @@ -877,10 +891,10 @@ static void M_ScanSaves (void) buf[sizeof(buf) - 1] = 0; t = buf; // version - COM_ParseToken(&t, false); + COM_ParseTokenConsole(&t); version = atoi(com_token); // description - COM_ParseToken(&t, false); + COM_ParseTokenConsole(&t); strlcpy (m_filenames[i], com_token, sizeof (m_filenames[i])); // change _ back to space @@ -1539,7 +1553,7 @@ static void M_DrawCheckbox (int x, int y, int on) } -#define OPTIONS_ITEMS 40 +#define OPTIONS_ITEMS 39 static int options_cursor; @@ -1603,8 +1617,6 @@ static void M_Menu_Options_AdjustSliders (int dir) Cvar_SetValueQuick (&crosshair, bound(0, crosshair.integer + dir, 6)); else if (options_cursor == optnum++) Cvar_SetValueQuick (&crosshair_size, bound(1, crosshair_size.value + dir, 5)); - else if (options_cursor == optnum++) - Cvar_SetValueQuick (&crosshair_static, !crosshair_static.integer); else if (options_cursor == optnum++) Cvar_SetValueQuick (&showfps, !showfps.integer); else if (options_cursor == optnum++) @@ -1721,7 +1733,6 @@ static void M_Options_Draw (void) M_Options_PrintCheckbox(" Text Shadow", true, r_textshadow.integer); M_Options_PrintSlider( " Crosshair", true, crosshair.value, 0, 5); M_Options_PrintSlider( " Crosshair Size", true, crosshair_size.value, 1, 5); - M_Options_PrintCheckbox(" Static Crosshair", true, crosshair_static.integer); M_Options_PrintCheckbox(" Show Framerate", true, showfps.integer); M_Options_PrintCheckbox(" Show Time", true, showtime.integer); M_Options_PrintCheckbox(" Show Date", true, showdate.integer); @@ -1965,7 +1976,7 @@ static void M_Options_Effects_Key (int k, char ascii) } -#define OPTIONS_GRAPHICS_ITEMS 14 +#define OPTIONS_GRAPHICS_ITEMS 18 static int options_graphics_cursor; @@ -1988,6 +1999,10 @@ extern cvar_t r_bloom_intensity; extern cvar_t r_bloom_power; extern cvar_t r_bloom_blur; extern cvar_t r_bloom_resolution; +extern cvar_t r_hdr; +extern cvar_t r_hdr_bloomintensity; +extern cvar_t r_hdr_scenebrightness; +extern cvar_t r_hdr_glowintensity; extern cvar_t gl_picmip; static void M_Menu_Options_Graphics_AdjustSliders (int dir) @@ -2005,10 +2020,14 @@ static void M_Menu_Options_Graphics_AdjustSliders (int dir) else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_shadow_realtime_world_lightmaps, bound(0, r_shadow_realtime_world_lightmaps.value + dir * 0.1, 1)); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_shadow_realtime_world_shadows, !r_shadow_realtime_world_shadows.integer); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom, !r_bloom.integer); - else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_intensity, bound(1, r_bloom_intensity.value + dir * 1, 16)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_hdr, !r_hdr.integer); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_hdr_bloomintensity, bound(0.125, r_hdr_bloomintensity.value + dir * 0.125, 4)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_hdr_glowintensity, bound(0, r_hdr_glowintensity.value + dir * 0.25, 4)); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_power, bound(1, r_bloom_power.value + dir * 1, 16)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_intensity, bound(1, r_bloom_intensity.value + dir * 0.25, 16)); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_blur, bound(1, r_bloom_blur.value + dir * 1, 16)); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_resolution, bound(64, r_bloom_resolution.value + dir * 64, 2048)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_hdr_scenebrightness, bound(0.25, r_hdr_scenebrightness.value + dir * 0.125, 4)); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&gl_picmip, bound(0, gl_picmip.value - dir, 3)); else if (options_graphics_cursor == optnum++) Cbuf_AddText ("r_restart\n"); } @@ -2037,11 +2056,15 @@ static void M_Options_Graphics_Draw (void) M_Options_PrintCheckbox("RT World DLight Shadows", true, r_shadow_realtime_world_dlightshadows.integer); M_Options_PrintSlider( " RT World Lightmaps", true, r_shadow_realtime_world_lightmaps.value, 0, 1); M_Options_PrintCheckbox(" RT World Shadow", true, r_shadow_realtime_world_shadows.integer); - M_Options_PrintCheckbox(" Bloom Effect", true, r_bloom.integer); - M_Options_PrintSlider( " Bloom Intensity", true, r_bloom_intensity.value, 1, 16); - M_Options_PrintSlider( " Bloom Power", true, r_bloom_power.value, 1, 16); - M_Options_PrintSlider( " Bloom Blur", true, r_bloom_blur.value, 1, 16); - M_Options_PrintSlider( " Bloom Resolution", true, r_bloom_resolution.value, 64, 2048); + M_Options_PrintCheckbox(" Bloom Effect", !r_hdr.integer, r_bloom.integer); + M_Options_PrintCheckbox(" HDR Bloom Effect", r_hdr.integer, r_hdr.integer); + M_Options_PrintSlider( " HDR Bloom Intensity", r_hdr.integer, r_hdr_bloomintensity.value, 0.125, 4); + M_Options_PrintSlider( " HDR Glow Intensity", r_hdr.integer, r_hdr_glowintensity.value, 0, 4); + M_Options_PrintSlider( "Non-HDR Bloom Darkening", !r_hdr.integer && r_bloom.integer, r_bloom_power.value, 1, 16); + M_Options_PrintSlider( " Bloom Intensity", r_hdr.integer || r_bloom.integer, r_bloom_intensity.value, 1, 16); + M_Options_PrintSlider( " Bloom Blur", r_hdr.integer || r_bloom.integer, r_bloom_blur.value, 1, 16); + M_Options_PrintSlider( " Bloom Resolution", r_hdr.integer || r_bloom.integer, r_bloom_resolution.value, 64, 2048); + M_Options_PrintSlider( " Scene Brightness", true, r_hdr_scenebrightness.value, 0.25, 4); M_Options_PrintSlider( " Texture Quality", true, gl_picmip.value, 3, 0); M_Options_PrintCommand( " Restart Renderer", true); } @@ -2730,7 +2753,7 @@ static void M_Reset_Key (int key, char ascii) { case 'Y': case 'y': - Cbuf_AddText ("exec default.cfg\n"); + Cbuf_AddText ("cvar_resettodefaults_all;exec default.cfg\n"); // no break here since we also exit the menu case K_ESCAPE: @@ -3121,6 +3144,12 @@ static int M_QuitMessage(char *line1, char *line2, char *line3, char *line4, cha static int M_ChooseQuitMessage(int request) { + if (m_missingdata) + { + // frag related quit messages are pointless for a fallback menu, so use something generic + if (request-- == 0) return M_QuitMessage("Are you sure you want to quit?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL); + return 0; + } switch (gamemode) { case GAME_NORMAL: @@ -3166,9 +3195,6 @@ static int M_ChooseQuitMessage(int request) if (request-- == 0) return M_QuitMessage("You prefer free beer over free speech?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL); if (request-- == 0) return M_QuitMessage("Is OpenQuartz Propaganda?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL); break; - case GAME_NEXUIZ: //frag related quit messages are pointless for a fallback menu! - if (request-- == 0) return M_QuitMessage("Are you sure you want to quit?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL); - break; default: if (request-- == 0) return M_QuitMessage("Tired of fragging already?",NULL,NULL,NULL,NULL,NULL,NULL,NULL); if (request-- == 0) return M_QuitMessage("Quit now and forfeit your bodycount?",NULL,NULL,NULL,NULL,NULL,NULL,NULL); @@ -3190,7 +3216,7 @@ void M_Menu_Quit_f (void) m_state = m_quit; m_entersound = true; // count how many there are - for (n = 0;M_ChooseQuitMessage(n);n++); + for (n = 1;M_ChooseQuitMessage(n);n++); // choose one M_ChooseQuitMessage(rand() % n); } @@ -3242,8 +3268,8 @@ static void M_Quit_Draw (void) } lines = (lastline - firstline) + 1; M_Background(linelength * 8 + 16, lines * 8 + 16); - if (gamemode != GAME_NEXUIZ) //since this is a fallback menu for Nexuiz (no graphics), it is very hard to read with the box - M_DrawTextBox(0, 0, linelength, lines); //this is less obtrusive than hacking up the M_DrawTextBox function for Nexuiz + if (!m_missingdata) //since this is a fallback menu for missing data, it is very hard to read with the box + M_DrawTextBox(0, 0, linelength, lines); //this is less obtrusive than hacking up the M_DrawTextBox function for (i = 0, l = firstline;i < lines;i++, l++) M_Print(8 + 4 * (linelength - strlen(m_quit_message[l])), 8 + 8 * i, m_quit_message[l]); } @@ -4609,7 +4635,7 @@ void M_Draw (void) break; } - if (gamemode == GAME_TRANSFUSION) { + if (gamemode == GAME_TRANSFUSION && !m_missingdata) { if (m_state != m_credits) { cachepic_t *p, *drop1, *drop2, *drop3; int g, scale_x, scale_y, scale_y_repeat, top_offset;