#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;
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;
//============================================================================
// 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");
}