X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=menu.c;h=f6acea74b6efeeac5cb66f9eb952c924e39c4b94;hp=7e0b1b22ee2a27ad6225450452ef0df565065c65;hb=695c0dbca4dd38ec56fb369dc886151de2001d0b;hpb=f17546e879108a9fdf28db0f8db30710977a2c91 diff --git a/menu.c b/menu.c index 7e0b1b22..f6acea74 100644 --- a/menu.c +++ b/menu.c @@ -28,6 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define TYPE_GAME 2 #define TYPE_BOTH 3 +static cvar_t forceqmenu = { 0, "forceqmenu", "0", "enables the quake menu instead of the quakec menu.dat (if present)" }; + static int NehGameType; enum m_state_e m_state; @@ -408,7 +410,7 @@ void M_Menu_Main_f (void) 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; + m_missingdata = !forceqmenu.integer && Draw_CachePic (s, true)->tex == r_texture_notexture; if (m_missingdata) MAIN_ITEMS = 2; @@ -1553,7 +1555,7 @@ static void M_DrawCheckbox (int x, int y, int on) } -#define OPTIONS_ITEMS 39 +#define OPTIONS_ITEMS 38 static int options_cursor; @@ -1976,7 +1978,7 @@ static void M_Options_Effects_Key (int k, char ascii) } -#define OPTIONS_GRAPHICS_ITEMS 18 +#define OPTIONS_GRAPHICS_ITEMS 20 static int options_graphics_cursor; @@ -1995,14 +1997,16 @@ extern cvar_t r_shadow_realtime_world_dlightshadows; extern cvar_t r_shadow_realtime_world_lightmaps; extern cvar_t r_shadow_realtime_world_shadows; extern cvar_t r_bloom; -extern cvar_t r_bloom_intensity; -extern cvar_t r_bloom_power; +extern cvar_t r_bloom_colorscale; +extern cvar_t r_bloom_colorsubtract; +extern cvar_t r_bloom_colorexponent; extern cvar_t r_bloom_blur; +extern cvar_t r_bloom_brighten; 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 r_hdr_range; extern cvar_t gl_picmip; static void M_Menu_Options_Graphics_AdjustSliders (int dir) @@ -2019,15 +2023,17 @@ static void M_Menu_Options_Graphics_AdjustSliders (int dir) else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_shadow_realtime_world_dlightshadows, !r_shadow_realtime_world_dlightshadows.integer); 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_hdr_scenebrightness, bound(0.25, r_hdr_scenebrightness.value + dir * 0.125, 4)); else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom, !r_bloom.integer); 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_range, bound(1, r_hdr_range.value + dir * 0.25, 16)); 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_colorscale, bound(0.0625, r_bloom_colorscale.value + dir * 0.0625, 1)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_colorsubtract, bound(0, r_bloom_colorsubtract.value + dir * 0.0625, 1-0.0625)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_colorexponent, bound(1, r_bloom_colorexponent.value *= (dir > 0 ? 2 : 0.5), 8)); + else if (options_graphics_cursor == optnum++) Cvar_SetValueQuick (&r_bloom_brighten, bound(1, r_bloom_brighten.value + dir * 0.0625, 4)); 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"); } @@ -2056,15 +2062,17 @@ 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_PrintSlider( " Scene Brightness", true, r_hdr_scenebrightness.value, 0.25, 4); 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 Dynamic Range", true, r_hdr_range.value, 1, 16); 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 Color Scale", r_hdr.integer || r_bloom.integer, r_bloom_colorscale.value, 0.0625, 1); + M_Options_PrintSlider( " Bloom Color Subtract", r_hdr.integer || r_bloom.integer, r_bloom_colorsubtract.value, 0, 1-0.0625); + M_Options_PrintSlider( " Bloom Color Exponent", r_hdr.integer || r_bloom.integer, r_bloom_colorexponent.value, 1, 8); + M_Options_PrintSlider( " Bloom Intensity", r_hdr.integer || r_bloom.integer, r_bloom_brighten.value, 1, 4); 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); } @@ -4810,22 +4818,13 @@ void M_Restart(void) //============================================================================ // Menu prog handling -mfunction_t *PRVM_ED_FindFunction(const char *); - -#define M_F_INIT "m_init" -#define M_F_KEYDOWN "m_keydown" -#define M_F_KEYUP "m_keyup" -#define M_F_DRAW "m_draw" -// normal menu names (rest) -#define M_F_TOGGLE "m_toggle" -#define M_F_SHUTDOWN "m_shutdown" static char *m_required_func[] = { -M_F_INIT, -M_F_KEYDOWN, -M_F_DRAW, -M_F_TOGGLE, -M_F_SHUTDOWN, +"m_init", +"m_keydown", +"m_draw", +"m_toggle", +"m_shutdown", }; #ifdef NG_MENU @@ -4834,11 +4833,9 @@ static qboolean m_displayed; static int m_numrequiredfunc = sizeof(m_required_func) / sizeof(char*); -static func_t m_draw, m_keydown; -static mfunction_t *m_keyup; - void MR_SetRouting (qboolean forceold); +void MP_Error(const char *format, ...) DP_FUNC_PRINTF(1); void MP_Error(const char *format, ...) { static qboolean processingError = false; @@ -4876,16 +4873,13 @@ void MP_KeyEvent (int key, char ascii, qboolean downevent) PRVM_Begin; PRVM_SetProg(PRVM_MENUPROG); - // set time - *prog->time = realtime; - // pass key prog->globals.generic[OFS_PARM0] = (float) key; prog->globals.generic[OFS_PARM1] = (float) ascii; if (downevent) - PRVM_ExecuteProgram(m_keydown, M_F_KEYDOWN"(float key, float ascii) required\n"); - else if (m_keyup) - PRVM_ExecuteProgram((func_t)(m_keyup - prog->functions), M_F_KEYUP"(float key, float ascii) required\n"); + PRVM_ExecuteProgram(prog->funcoffsets.m_keydown,"m_keydown(float key, float ascii) required"); + else if (prog->funcoffsets.m_keyup) + PRVM_ExecuteProgram(prog->funcoffsets.m_keyup,"m_keyup(float key, float ascii) required"); PRVM_End; } @@ -4895,10 +4889,7 @@ void MP_Draw (void) PRVM_Begin; PRVM_SetProg(PRVM_MENUPROG); - // set time - *prog->time = realtime; - - PRVM_ExecuteProgram(m_draw,""); + PRVM_ExecuteProgram(prog->funcoffsets.m_draw,"m_draw() required"); PRVM_End; } @@ -4908,17 +4899,14 @@ void MP_ToggleMenu_f (void) PRVM_Begin; PRVM_SetProg(PRVM_MENUPROG); - // set time - *prog->time = realtime; - #ifdef NG_MENU m_displayed = !m_displayed; if( m_displayed ) - PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_DISPLAY) - prog->functions),""); + PRVM_ExecuteProgram(prog->funcoffsets.m_display,"m_display() required"); else - PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_HIDE) - prog->functions),""); + PRVM_ExecuteProgram(prog->funcoffsets.m_hide,"m_hide() required"); #else - PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_TOGGLE) - prog->functions),""); + PRVM_ExecuteProgram(prog->funcoffsets.m_toggle,"m_toggle() required"); #endif PRVM_End; @@ -4929,10 +4917,7 @@ void MP_Shutdown (void) PRVM_Begin; PRVM_SetProg(PRVM_MENUPROG); - // set time - *prog->time = realtime; - - PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_SHUTDOWN) - prog->functions),""); + PRVM_ExecuteProgram(prog->funcoffsets.m_shutdown,"m_shutdown() required"); // reset key_dest key_dest = key_game; @@ -4973,22 +4958,17 @@ void MP_Init (void) // allocate the mempools prog->progs_mempool = Mem_AllocPool(M_PROG_FILENAME, 0, NULL); - PRVM_LoadProgs(M_PROG_FILENAME, m_numrequiredfunc, m_required_func, 0, NULL); + PRVM_LoadProgs(M_PROG_FILENAME, m_numrequiredfunc, m_required_func, 0, NULL, 0, NULL); - // set m_draw and m_keydown - m_draw = (func_t) (PRVM_ED_FindFunction(M_F_DRAW) - prog->functions); - m_keydown = (func_t) (PRVM_ED_FindFunction(M_F_KEYDOWN) - prog->functions); - m_keyup = PRVM_ED_FindFunction(M_F_KEYUP); + // note: OP_STATE is not supported by menu qc, we don't even try to detect + // it here #ifdef NG_MENU m_displayed = false; #endif - // set time - *prog->time = realtime; - // call the prog init - PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_INIT) - prog->functions),""); + PRVM_ExecuteProgram(prog->funcoffsets.m_init,"m_init() required"); PRVM_End; } @@ -5001,8 +4981,6 @@ void MP_Restart(void) //============================================================================ // Menu router -static cvar_t forceqmenu = { 0, "forceqmenu", "0", "enables the quake menu instead of the quakec menu.dat (if present)" }; - void (*MR_KeyEvent) (int key, char ascii, qboolean downevent); void (*MR_Draw) (void); void (*MR_ToggleMenu_f) (void); @@ -5067,7 +5045,7 @@ void MR_Init_Commands(void) Cvar_RegisterVariable (&forceqmenu); Cvar_RegisterVariable (&menu_options_colorcontrol_correctionvalue); if (gamemode == GAME_NETHERWORLD) - Cmd_AddCommand ("menu_fallback", MP_Fallback, "switch to engine menu (unload menu.dat)"); //Force to old-style menu + Cmd_AddCommand ("menu_fallback", MP_Fallback, "switch to engine menu (unload menu.dat)"); Cmd_AddCommand ("menu_restart",MR_Restart, "restart menu system (reloads menu.dat"); Cmd_AddCommand ("togglemenu", Call_MR_ToggleMenu_f, "opens or closes menu"); }