]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - menu.c
the record command now disconnects you if starting a new map, this fixes a crash...
[xonotic/darkplaces.git] / menu.c
diff --git a/menu.c b/menu.c
index 3a0f0d7cd803eb3e2419a13769a0bdef2e3154c1..e9597350fafabec523c47ea31fc3fb1a8e17a9a0 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -1553,7 +1553,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 +1976,7 @@ static void M_Options_Effects_Key (int k, char ascii)
 }
 
 
-#define        OPTIONS_GRAPHICS_ITEMS  16
+#define        OPTIONS_GRAPHICS_ITEMS  20
 
 static int options_graphics_cursor;
 
@@ -1999,10 +1999,12 @@ 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_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 +2021,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_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_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,16 +2060,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 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(  "      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_colorscale.value, 0.125, 4);
+       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);
 }
@@ -4811,22 +4816,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
@@ -4835,11 +4831,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;
@@ -4877,16 +4871,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;
 }
@@ -4896,10 +4887,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;
 }
@@ -4909,17 +4897,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;
@@ -4930,10 +4915,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;
@@ -4974,22 +4956,14 @@ 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);
-
-       // 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);
+       PRVM_LoadProgs(M_PROG_FILENAME, m_numrequiredfunc, m_required_func, 0, NULL, 0, NULL);
 
 #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;
 }