X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=menu.c;h=e28b04c6fd8244885025eb5ef645ed4cbe4e7ea3;hb=7ef262a7368c32d0e0bf7eb8bf4bbf7c79338bff;hp=edb6aec99ec3eefad69b13013d6cd50d46a6227a;hpb=c8d0d28d9bd50783c125a44bbd44828963312f7a;p=xonotic%2Fdarkplaces.git diff --git a/menu.c b/menu.c index edb6aec9..e28b04c6 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; @@ -398,7 +400,7 @@ void M_Menu_Main_f (void) MAIN_ITEMS = 6; else if (gamemode == GAME_TRANSFUSION) { - s = "gfx/menu/mainmenu0"; + s = "gfx/menu/mainmenu1"; if (sv.active && !cl.intermission && cl.islocalgame) MAIN_ITEMS = 8; else @@ -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; @@ -880,7 +882,7 @@ static void M_ScanSaves (void) for (i=0 ; i> 4; setup_bottom = setup_oldbottom = cl_color.integer & 15; setup_rate = cl_rate.integer; @@ -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); } @@ -2647,7 +2655,7 @@ static void M_Keys_Draw (void) // LordHavoc: redesigned to print more than 2 keys, inspired by Tomaz's MiniRacer if (keys[0] == -1) - strcpy(keystring, "???"); + strlcpy(keystring, "???", sizeof(keystring)); else { keystring[0] = 0; @@ -2656,8 +2664,8 @@ static void M_Keys_Draw (void) if (keys[j] != -1) { if (j > 0) - strcat(keystring, " or "); - strcat(keystring, Key_KeynumToString (keys[j])); + strlcat(keystring, " or ", sizeof(keystring)); + strlcat(keystring, Key_KeynumToString (keys[j]), sizeof(keystring)); } } } @@ -3298,7 +3306,7 @@ void M_Menu_LanConfig_f (void) if (StartingGame) lanConfig_cursor = 1; lanConfig_port = 26000; - sprintf(lanConfig_portname, "%u", lanConfig_port); + sprintf(lanConfig_portname, "%u", (unsigned int) lanConfig_port); M_Update_Return_Reason(""); } @@ -3464,7 +3472,7 @@ static void M_LanConfig_Key (int key, char ascii) l = atoi(lanConfig_portname); if (l <= 65535) lanConfig_port = l; - sprintf(lanConfig_portname, "%u", lanConfig_port); + sprintf(lanConfig_portname, "%u", (unsigned int) lanConfig_port); } //============================================================================= @@ -3850,6 +3858,19 @@ static episode_t defeatindetail2episodes[] = {"ATAC Campaign", 0, 3}, }; +static level_t prydonlevels[] = +{ + {"curig2", "Capel Curig"}, // 0 + + {"tdastart", "Gateway"}, // 1 +}; + +static episode_t prydonepisodes[] = +{ + {"Prydon Gate", 0, 1}, + {"The Dark Age", 1, 1} +}; + static gamelevels_t sharewarequakegame = {"Shareware Quake", quakelevels, quakeepisodes, 2}; static gamelevels_t registeredquakegame = {"Quake", quakelevels, quakeepisodes, 7}; static gamelevels_t hipnoticgame = {"Scourge of Armagon", hipnoticlevels, hipnoticepisodes, 6}; @@ -3860,6 +3881,7 @@ static gamelevels_t goodvsbad2game = {"Good Vs. Bad 2", goodvsbad2levels, goodvs static gamelevels_t battlemechgame = {"Battlemech", battlemechlevels, battlemechepisodes, 1}; static gamelevels_t openquartzgame = {"OpenQuartz", openquartzlevels, openquartzepisodes, 3}; static gamelevels_t defeatindetail2game = {"Defeat In Detail 2", defeatindetail2levels, defeatindetail2episodes, 1}; +static gamelevels_t prydongame = {"Prydon Gate", prydonlevels, prydonepisodes, 2}; typedef struct gameinfo_s { @@ -3880,13 +3902,22 @@ static gameinfo_t gamelist[] = {GAME_BATTLEMECH, &battlemechgame, &battlemechgame}, {GAME_OPENQUARTZ, &openquartzgame, &openquartzgame}, {GAME_DEFEATINDETAIL2, &defeatindetail2game, &defeatindetail2game}, - {(gamemode_t)-1, &sharewarequakegame, ®isteredquakegame} // final fallback + {GAME_PRYDON, &prydongame, &prydongame}, + {GAME_NORMAL, NULL, NULL} // terminator }; static gamelevels_t *lookupgameinfo(void) { - int i; - for (i = 0;gamelist[i].gameid >= 0 && gamelist[i].gameid != gamemode;i++); + int i = 0; + while (gamelist[i].gameid != gamemode) + { + if (gamelist[i].notregistered == NULL) + { + i = 0; + break; + } + i++; + } if (registered.integer) return gamelist[i].registered; else @@ -4207,8 +4238,6 @@ static void M_NetStart_Change (int dir) case 8: Cvar_SetValueQuick (&sv_maxrate, sv_maxrate.integer + dir*500); - if (sv_maxrate.integer > NET_MAXRATE) - Cvar_SetValueQuick (&sv_maxrate, NET_MAXRATE); if (sv_maxrate.integer < NET_MINRATE) Cvar_SetValueQuick (&sv_maxrate, NET_MINRATE); break; @@ -4789,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 @@ -4813,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; @@ -4855,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; } @@ -4874,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; } @@ -4887,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; @@ -4908,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; @@ -4952,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; } @@ -4980,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);