]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - menu.c
gave names to nearly all structs and enums which should make for better C++ error...
[xonotic/darkplaces.git] / menu.c
diff --git a/menu.c b/menu.c
index fadeafba0ef4539b64b416d1c823ffc2c1821f3f..55e7b4f17a1aebf13af86767351584c0929aaaa2 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -115,7 +115,7 @@ void M_Update_Return_Reason(char *s)
 
 // Nehahra
 #define NumberOfNehahraDemos 34
-typedef struct
+typedef struct nehahrademonames_s
 {
        char *name;
        char *desc;
@@ -196,7 +196,7 @@ void M_PrintRed (float cx, float cy, const char *str)
        DrawQ_String(menu_x + cx, menu_y + cy, str, 0, 8, 8, 1, 0, 0, 1, 0);
 }
 
-void M_ItemPrint(float cx, float cy, char *str, int unghosted)
+void M_ItemPrint(float cx, float cy, const char *str, int unghosted)
 {
        if (unghosted)
                DrawQ_String(menu_x + cx, menu_y + cy, str, 0, 8, 8, 1, 1, 1, 1, 0);
@@ -204,7 +204,7 @@ void M_ItemPrint(float cx, float cy, char *str, int unghosted)
                DrawQ_String(menu_x + cx, menu_y + cy, str, 0, 8, 8, 0.4, 0.4, 0.4, 1, 0);
 }
 
-void M_DrawPic (float cx, float cy, char *picname)
+void M_DrawPic (float cx, float cy, const char *picname)
 {
        DrawQ_Pic (menu_x + cx, menu_y + cy, picname, 0, 0, 1, 1, 1, 1, 0);
 }
@@ -830,7 +830,7 @@ void M_ScanSaves (void)
        {
                strcpy (m_filenames[i], "--- UNUSED SLOT ---");
                loadable[i] = false;
-               sprintf (name, "s%i.sav", i);
+               sprintf (name, "s%i.sav", (int)i);
                f = FS_Open (name, "rb", false, false);
                if (!f)
                        continue;
@@ -1330,8 +1330,8 @@ void M_Setup_Draw (void)
                        menuplyr_width = image_width;
                        menuplyr_height = image_height;
                        Mem_Free(f);
-                       menuplyr_pixels = Mem_Alloc(cl_mempool, menuplyr_width * menuplyr_height);
-                       menuplyr_translated = Mem_Alloc(cl_mempool, menuplyr_width * menuplyr_height * 4);
+                       menuplyr_pixels = (qbyte *)Mem_Alloc(cl_mempool, menuplyr_width * menuplyr_height);
+                       menuplyr_translated = (unsigned int *)Mem_Alloc(cl_mempool, menuplyr_width * menuplyr_height * 4);
                        memcpy(menuplyr_pixels, data, menuplyr_width * menuplyr_height);
                        Mem_Free(data);
                }
@@ -1449,7 +1449,7 @@ forward:
                        break;
                if (setup_cursor == 0)
                {
-                       l = strlen(setup_myname);
+                       l = (int)strlen(setup_myname);
                        if (l < 15)
                        {
                                setup_myname[l+1] = 0;
@@ -1500,7 +1500,7 @@ void M_DrawCheckbox (int x, int y, int on)
 }
 
 
-#define OPTIONS_ITEMS 40
+#define OPTIONS_ITEMS 39
 
 int options_cursor;
 
@@ -1546,8 +1546,6 @@ void M_Menu_Options_AdjustSliders (int dir)
                Cvar_SetValueQuick (&scr_screenshot_jpeg_quality, bound(0, scr_screenshot_jpeg_quality.value + dir * 0.1, 1));
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&r_sky, !r_sky.integer);
-       else if (options_cursor == optnum++)
-               Cvar_SetValueQuick (&gl_combine, !gl_combine.integer);
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&gl_dither, !gl_dither.integer);
        else if (options_cursor == optnum++)
@@ -1563,7 +1561,7 @@ void M_Menu_Options_AdjustSliders (int dir)
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&r_textshadow, !r_textshadow.integer);
        else if (options_cursor == optnum++)
-               Cvar_SetValueQuick (&crosshair, bound(0, crosshair.integer + dir, 5));
+               Cvar_SetValueQuick (&crosshair, bound(0, crosshair.integer + dir, 6));
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&crosshair_size, bound(1, crosshair_size.value + dir, 5));
        else if (options_cursor == optnum++)
@@ -1605,7 +1603,7 @@ int optnum;
 int opty;
 int optcursor;
 
-void M_Options_PrintCommand(char *s, int enabled)
+void M_Options_PrintCommand(const char *s, int enabled)
 {
        if (opty >= 32)
        {
@@ -1616,25 +1614,25 @@ void M_Options_PrintCommand(char *s, int enabled)
        optnum++;
 }
 
-void M_Options_PrintCheckbox(char *s, int enabled, int yes)
+void M_Options_PrintCheckbox(const char *s, int enabled, int yes)
 {
        if (opty >= 32)
        {
                DrawQ_Fill(menu_x, menu_y + opty, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
                M_ItemPrint(0, opty, s, enabled);
-               M_DrawCheckbox(0 + strlen(s) * 8 + 8, opty, yes);
+               M_DrawCheckbox(0 + (int)strlen(s) * 8 + 8, opty, yes);
        }
        opty += 8;
        optnum++;
 }
 
-void M_Options_PrintSlider(char *s, int enabled, float value, float minvalue, float maxvalue)
+void M_Options_PrintSlider(const char *s, int enabled, float value, float minvalue, float maxvalue)
 {
        if (opty >= 32)
        {
                DrawQ_Fill(menu_x, menu_y + opty, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
                M_ItemPrint(0, opty, s, enabled);
-               M_DrawSlider(0 + strlen(s) * 8 + 8, opty, value, minvalue, maxvalue);
+               M_DrawSlider(0 + (int)strlen(s) * 8 + 8, opty, value, minvalue, maxvalue);
        }
        opty += 8;
        optnum++;
@@ -1675,7 +1673,6 @@ void M_Options_Draw (void)
        M_Options_PrintCheckbox("  JPEG screenshots", jpeg_dll != NULL, scr_screenshot_jpeg.integer);
        M_Options_PrintSlider(  "      JPEG quality", jpeg_dll != NULL, scr_screenshot_jpeg_quality.value, 0, 1);
        M_Options_PrintCheckbox("               Sky", true, r_sky.integer);
-       M_Options_PrintCheckbox("   Texture Combine", true, gl_combine.integer);
        M_Options_PrintCheckbox("         Dithering", true, gl_dither.integer);
        M_Options_PrintSlider(  "Anisotropic Filter", gl_support_anisotropy, gl_texture_anisotropy.integer, 1, gl_max_anisotropy);
        M_Options_PrintSlider(  "        Game Speed", sv.active, slowmo.value, 0, 5);
@@ -1764,7 +1761,7 @@ void M_Options_Key (int k, char ascii)
        }
 }
 
-#define        OPTIONS_EFFECTS_ITEMS   37
+#define        OPTIONS_EFFECTS_ITEMS   34
 
 int options_effects_cursor;
 
@@ -1776,11 +1773,9 @@ void M_Menu_Options_Effects_f (void)
 }
 
 
-extern cvar_t r_detailtextures;
 extern cvar_t cl_stainmaps;
 extern cvar_t cl_stainmaps_clearonload;
 extern cvar_t r_explosionclip;
-extern cvar_t r_modellights;
 extern cvar_t r_coronas;
 extern cvar_t gl_flashblend;
 extern cvar_t cl_beams_polygon;
@@ -1800,8 +1795,7 @@ void M_Menu_Options_Effects_AdjustSliders (int dir)
        S_LocalSound ("sound/misc/menu3.wav");
 
        optnum = 0;
-            if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_modellights, bound(0, r_modellights.value + dir, 8));
-       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_coronas, bound(0, r_coronas.value + dir * 0.125, 4));
+            if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_coronas, bound(0, r_coronas.value + dir * 0.125, 4));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&gl_flashblend, !gl_flashblend.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles, !cl_particles.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_quality, bound(1, cl_particles_quality.value + dir * 0.5, 4));
@@ -1810,7 +1804,6 @@ void M_Menu_Options_Effects_AdjustSliders (int dir)
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_stainmaps, !cl_stainmaps.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_stainmaps_clearonload, !cl_stainmaps_clearonload.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_decals, !cl_decals.integer);
-       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_detailtextures, !r_detailtextures.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_bulletimpacts, !cl_particles_bulletimpacts.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_smoke, !cl_particles_smoke.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_sparks, !cl_particles_sparks.integer);
@@ -1836,7 +1829,6 @@ void M_Menu_Options_Effects_AdjustSliders (int dir)
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_waterwarp, bound(0, r_waterwarp.value + dir * 0.1, 1));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_wateralpha, bound(0, r_wateralpha.value + dir * 0.1, 1));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_waterscroll, bound(0, r_waterscroll.value + dir * 0.5, 10));
-       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_watershader, bound(0, r_watershader.value + dir * 0.25, 10));
 }
 
 void M_Options_Effects_Draw (void)
@@ -1855,7 +1847,6 @@ void M_Options_Effects_Draw (void)
        visible = (menu_height - 32) / 8;
        opty = 32 - bound(0, optcursor - (visible >> 1), max(0, OPTIONS_EFFECTS_ITEMS - visible)) * 8;
 
-       M_Options_PrintSlider(  "      Lights Per Model", true, r_modellights.value, 0, 8);
        M_Options_PrintSlider(  "      Corona Intensity", true, r_coronas.value, 0, 4);
        M_Options_PrintCheckbox("      Use Only Coronas", true, gl_flashblend.integer);
        M_Options_PrintCheckbox("             Particles", true, cl_particles.integer);
@@ -1865,7 +1856,6 @@ void M_Options_Effects_Draw (void)
        M_Options_PrintCheckbox("             Stainmaps", true, cl_stainmaps.integer);
        M_Options_PrintCheckbox("Onload Clear Stainmaps", true, cl_stainmaps_clearonload.integer);
        M_Options_PrintCheckbox("                Decals", true, cl_decals.integer);
-       M_Options_PrintCheckbox("      Detail Texturing", true, r_detailtextures.integer);
        M_Options_PrintCheckbox("        Bullet Impacts", true, cl_particles_bulletimpacts.integer);
        M_Options_PrintCheckbox("                 Smoke", true, cl_particles_smoke.integer);
        M_Options_PrintCheckbox("                Sparks", true, cl_particles_sparks.integer);
@@ -1891,7 +1881,6 @@ void M_Options_Effects_Draw (void)
        M_Options_PrintSlider(  "  Underwater View Warp", true, r_waterwarp.value, 0, 1);
        M_Options_PrintSlider(  " Water Alpha (opacity)", true, r_wateralpha.value, 0, 1);
        M_Options_PrintSlider(  "        Water Movement", true, r_waterscroll.value, 0, 10);
-       M_Options_PrintSlider(  " GeForce3 Water Shader", true, r_watershader.value, 0, 10);
 }
 
 
@@ -1932,7 +1921,7 @@ void M_Options_Effects_Key (int k, char ascii)
 }
 
 
-#define        OPTIONS_GRAPHICS_ITEMS  12
+#define        OPTIONS_GRAPHICS_ITEMS  14
 
 int options_graphics_cursor;
 
@@ -1955,6 +1944,7 @@ extern cvar_t r_bloom_intensity;
 extern cvar_t r_bloom_power;
 extern cvar_t r_bloom_blur;
 extern cvar_t r_bloom_resolution;
+extern cvar_t gl_picmip;
 
 void M_Menu_Options_Graphics_AdjustSliders (int dir)
 {
@@ -1975,6 +1965,8 @@ void M_Menu_Options_Graphics_AdjustSliders (int dir)
        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_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));
+       else if (options_graphics_cursor == optnum++) Cbuf_AddText ("r_restart\n");
 }
 
 
@@ -2006,6 +1998,8 @@ void M_Options_Graphics_Draw (void)
        M_Options_PrintSlider(  "            Bloom Power", true, r_bloom_power.value, 1, 16);
        M_Options_PrintSlider(  "             Bloom Blur", true, r_bloom_blur.value, 1, 16);
        M_Options_PrintSlider(  "       Bloom Resolution", true, r_bloom_resolution.value, 64, 2048);
+       M_Options_PrintSlider(  "        Texture Quality", true, gl_picmip.value, 3, 0);
+       M_Options_PrintCommand( "       Restart Renderer", true);
 }
 
 
@@ -2986,6 +2980,7 @@ int M_ChooseQuitMessage(int request)
        case GAME_HIPNOTIC:
        case GAME_ROGUE:
        case GAME_NEHAHRA:
+       case GAME_DEFEATINDETAIL2:
                if (request-- == 0) return M_QuitMessage("Are you gonna quit","this game just like","everything else?",NULL,NULL,NULL,NULL,NULL);
                if (request-- == 0) return M_QuitMessage("Milord, methinks that","thou art a lowly","quitter. Is this true?",NULL,NULL,NULL,NULL,NULL);
                if (request-- == 0) return M_QuitMessage("Do I need to bust your","face open for trying","to quit?",NULL,NULL,NULL,NULL,NULL);
@@ -3060,7 +3055,7 @@ void M_Quit_Key (int key, char ascii)
        case 'N':
                if (wasInMenus)
                {
-                       m_state = m_quit_prevstate;
+                       m_state = (enum m_state_e)m_quit_prevstate;
                        m_entersound = true;
                }
                else
@@ -3085,7 +3080,7 @@ void M_Quit_Draw (void)
        int i, l, linelength, firstline, lastline, lines;
        for (i = 0, linelength = 0, firstline = 9999, lastline = -1;m_quit_message[i];i++)
        {
-               if ((l = strlen(m_quit_message[i])))
+               if ((l = (int)strlen(m_quit_message[i])))
                {
                        if (firstline > i)
                                firstline = i;
@@ -3253,7 +3248,7 @@ void M_LanConfig_Key (int key, char ascii)
 
                if (lanConfig_cursor == 2)
                {
-                       l = strlen(lanConfig_joinname);
+                       l = (int)strlen(lanConfig_joinname);
                        if (l < 21)
                        {
                                lanConfig_joinname[l+1] = 0;
@@ -3265,7 +3260,7 @@ void M_LanConfig_Key (int key, char ascii)
                        break;
                if (lanConfig_cursor == 0)
                {
-                       l = strlen(lanConfig_portname);
+                       l = (int)strlen(lanConfig_portname);
                        if (l < 5)
                        {
                                lanConfig_portname[l+1] = 0;
@@ -3291,20 +3286,20 @@ void M_LanConfig_Key (int key, char ascii)
 //=============================================================================
 /* GAME OPTIONS MENU */
 
-typedef struct
+typedef struct level_s
 {
        char    *name;
        char    *description;
 } level_t;
 
-typedef struct
+typedef struct episode_s
 {
        char    *description;
        int             firstLevel;
        int             levels;
 } episode_t;
 
-typedef struct
+typedef struct gamelevels_s
 {
        char *gamename;
        level_t *levels;
@@ -3659,6 +3654,18 @@ episode_t openquartzepisodes[] =
        {"Contrib", 7, 6},
 };
 
+level_t defeatindetail2levels[] =
+{
+       {"atac3",       "River Crossing"},
+       {"atac4",       "Canyon Chaos"},
+       {"atac7",       "Desert Stormer"},
+};
+
+episode_t defeatindetail2episodes[] =
+{
+       {"ATAC Campaign", 0, 3},
+};
+
 gamelevels_t sharewarequakegame = {"Shareware Quake", quakelevels, quakeepisodes, 2};
 gamelevels_t registeredquakegame = {"Quake", quakelevels, quakeepisodes, 7};
 gamelevels_t hipnoticgame = {"Scourge of Armagon", hipnoticlevels, hipnoticepisodes, 6};
@@ -3668,10 +3675,11 @@ gamelevels_t transfusiongame = {"Transfusion", transfusionlevels, transfusionepi
 gamelevels_t goodvsbad2game = {"Good Vs. Bad 2", goodvsbad2levels, goodvsbad2episodes, 1};
 gamelevels_t battlemechgame = {"Battlemech", battlemechlevels, battlemechepisodes, 1};
 gamelevels_t openquartzgame = {"OpenQuartz", openquartzlevels, openquartzepisodes, 3};
+gamelevels_t defeatindetail2game = {"Defeat In Detail 2", defeatindetail2levels, defeatindetail2episodes, 1};
 
-typedef struct
+typedef struct gameinfo_s
 {
-       int gameid;
+       gamemode_t gameid;
        gamelevels_t *notregistered;
        gamelevels_t *registered;
 }
@@ -3687,7 +3695,8 @@ gameinfo_t gamelist[] =
        {GAME_GOODVSBAD2, &goodvsbad2game, &goodvsbad2game},
        {GAME_BATTLEMECH, &battlemechgame, &battlemechgame},
        {GAME_OPENQUARTZ, &openquartzgame, &openquartzgame},
-       {-1, &sharewarequakegame, &registeredquakegame} // final fallback
+       {GAME_DEFEATINDETAIL2, &defeatindetail2game, &defeatindetail2game},
+       {(gamemode_t)-1, &sharewarequakegame, &registeredquakegame} // final fallback
 };
 
 gamelevels_t *lookupgameinfo(void)
@@ -4110,7 +4119,7 @@ void M_GameOptions_Key (int key, char ascii)
        case K_BACKSPACE:
                if (gameoptions_cursor == 9)
                {
-                       l = strlen(hostname.string);
+                       l = (int)strlen(hostname.string);
                        if (l)
                        {
                                l = min(l - 1, 37);
@@ -4126,7 +4135,7 @@ void M_GameOptions_Key (int key, char ascii)
                        break;
                if (gameoptions_cursor == 9)
                {
-                       l = strlen(hostname.string);
+                       l = (int)strlen(hostname.string);
                        if (l < 37)
                        {
                                memcpy(hostnamebuf, hostname.string, l);
@@ -4607,6 +4616,7 @@ void MR_SetRouting (qboolean forceold);
 
 void MP_Error(const char *format, ...)
 {
+       static qboolean processingError = false;
        char errorstring[4096];
        va_list argptr;
 
@@ -4615,7 +4625,13 @@ void MP_Error(const char *format, ...)
        va_end (argptr);
        Con_Printf( "Menu_Error: %s\n", errorstring );
 
-       PRVM_Crash();
+       if( !processingError ) {
+               processingError = true;
+               PRVM_Crash();
+               processingError = false;
+       } else {
+               Con_Printf( "Menu_Error: Recursive call to MP_Error (from PRVM_Crash)!\n" );
+       }
 
        // fall back to the normal menu
 
@@ -4758,6 +4774,11 @@ void MP_Restart(void)
 
 static cvar_t forceqmenu = { 0, "forceqmenu", "0" };
 
+void (*MR_Keydown) (int key, char ascii);
+void (*MR_Draw) (void);
+void (*MR_ToggleMenu_f) (void);
+void (*MR_Shutdown) (void);
+
 void MR_SetRouting(qboolean forceold)
 {
        static qboolean m_init = FALSE, mp_init = FALSE;