#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;
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;
}
-#define OPTIONS_GRAPHICS_ITEMS 19
+#define OPTIONS_GRAPHICS_ITEMS 20
static int options_graphics_cursor;
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;
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_bloom, !r_bloom.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 (&gl_picmip, bound(0, gl_picmip.value - dir, 3));
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( " Texture Quality", true, gl_picmip.value, 3, 0);
//============================================================================
// 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
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);
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;
}
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;
}
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;
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;
// 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;
}
//============================================================================
// 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);
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");
}