]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - menu.c
no more warping meshs of any kind
[xonotic/darkplaces.git] / menu.c
diff --git a/menu.c b/menu.c
index 103c3568196a7838724054f48f18f7d9dc677fde..7ae34c490be588759985a87168f8c3d8bdc0c97e 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -584,13 +584,13 @@ void M_SinglePlayer_Draw (void)
        M_DrawPic (16, 4, "gfx/qplaque.lmp");
        p = Draw_CachePic ("gfx/ttl_sgl.lmp");
 
-       // BloodBath doesn't have a single player mode
-       if (gamemode == GAME_BLOODBATH)
+       // Transfusion doesn't have a single player mode
+       if (gamemode == GAME_TRANSFUSION)
        {
                M_DrawPic ((320 - p->width) / 2, 4, "gfx/ttl_sgl.lmp");
 
                M_DrawTextBox (60, 8 * 8, 23, 4);
-               M_PrintWhite (102, 10 * 8, "BloodBath is for");
+               M_PrintWhite (95, 10 * 8, "Transfusion is for");
                M_PrintWhite (83, 11 * 8, "multiplayer play only");
        }
        else
@@ -609,7 +609,7 @@ void M_SinglePlayer_Draw (void)
 
 void M_SinglePlayer_Key (int key)
 {
-       if (gamemode == GAME_BLOODBATH)
+       if (gamemode == GAME_TRANSFUSION)
        {
                if (key == K_ESCAPE || key == K_ENTER)
                        m_state = m_main;
@@ -931,26 +931,52 @@ void M_Menu_Setup_f (void)
 }
 
 // LordHavoc: rewrote this code greatly
-void M_MenuPlayerTranslate (qbyte *translation)
+void M_MenuPlayerTranslate (qbyte *translation, int top, int bottom)
 {
-       int i, c;
+       int i;
        unsigned int trans[4096];
-       qpic_t *p;
+       qbyte *data, *f;
+       static qbyte pixels[4096];
+       static int menuplyr_width, menuplyr_height, menuplyr_top, menuplyr_bottom, menuplyr_load = true, menuplyr_failed = false;
 
-       p = W_GetLumpName ("gfx/menuplyr.lmp");
-       if (!p)
+       if (menuplyr_failed)
                return;
-       c = p->width * p->height;
-       if (c > 4096)
-       {
-               Con_Printf("M_MenuPlayerTranslate: image larger than 4096 pixel buffer\n");
+       if (menuplyr_top == top && menuplyr_bottom == bottom)
                return;
+
+       menuplyr_top = top;
+       menuplyr_bottom = bottom;
+
+       if (menuplyr_load)
+       {
+               menuplyr_load = false;
+               f = COM_LoadFile("gfx/menuplyr.lmp", true);
+               if (!f)
+               {
+                       menuplyr_failed = true;
+                       return;
+               }
+               data = LoadLMPAs8Bit (f, 0, 0);
+               Mem_Free(f);
+               if (image_width * image_height > 4096)
+               {
+                       Con_Printf("M_MenuPlayerTranslate: image larger than 4096 pixel buffer\n");
+                       Mem_Free(data);
+                       menuplyr_failed = true;
+                       return;
+               }
+               menuplyr_width = image_width;
+               menuplyr_height = image_height;
+               memcpy(pixels, data, menuplyr_width * menuplyr_height);
+               Mem_Free(data);
        }
 
-       for (i = 0;i < c;i++)
-               trans[i] = d_8to24table[translation[((qbyte *)p->data)[i]]];
+       M_BuildTranslationTable (menuplyr_top*16, menuplyr_bottom*16);
+
+       for (i = 0;i < menuplyr_width * menuplyr_height;i++)
+               trans[i] = d_8to24table[translation[pixels[i]]];
 
-       Draw_NewPic("gfx/menuplyr.lmp", p->width, p->height, true, (qbyte *)trans);
+       Draw_NewPic("gfx/menuplyr.lmp", menuplyr_width, menuplyr_height, true, (qbyte *)trans);
 }
 
 void M_Setup_Draw (void)
@@ -978,8 +1004,7 @@ void M_Setup_Draw (void)
        M_DrawPic (160, 64, "gfx/bigbox.lmp");
 
        // LordHavoc: rewrote this code greatly
-       M_BuildTranslationTable (setup_top*16, setup_bottom*16);
-       M_MenuPlayerTranslate (translationTable);
+       M_MenuPlayerTranslate (translationTable, setup_top, setup_bottom);
        M_DrawPic (172, 72, "gfx/menuplyr.lmp");
 
        M_DrawCharacter (56, setup_cursor_table [setup_cursor], 12+((int)(realtime*4)&1));
@@ -1091,14 +1116,14 @@ forward:
                }
        }
 
-       if (setup_top > 13)
+       if (setup_top > 15)
                setup_top = 0;
        if (setup_top < 0)
-               setup_top = 13;
-       if (setup_bottom > 13)
+               setup_top = 15;
+       if (setup_bottom > 15)
                setup_bottom = 0;
        if (setup_bottom < 0)
-               setup_bottom = 13;
+               setup_bottom = 15;
 }
 
 //=============================================================================
@@ -1250,7 +1275,7 @@ void M_DrawCheckbox (int x, int y, int on)
 }
 
 
-#define        OPTIONS_ITEMS   28
+#define        OPTIONS_ITEMS   27
 
 int            options_cursor;
 
@@ -1275,52 +1300,49 @@ void M_Menu_Options_AdjustSliders (int dir)
                Cvar_SetValueQuick (&scr_viewsize, bound(30, scr_viewsize.value + dir * 10, 120));
                break;
        case 7:
-               Cvar_SetValueQuick (&r_skyquality, bound(0, r_skyquality.integer + dir, 2));
+               Cvar_SetValueQuick (&r_sky, !r_sky.integer);
                break;
        case 8:
-               Cvar_SetValueQuick (&r_ser, !r_ser.integer);
-               break;
-       case 9:
                Cvar_SetValueQuick (&v_overbrightbits, bound(0, v_overbrightbits.integer + dir, 4));
                break;
-       case 10:
+       case 9:
                Cvar_SetValueQuick (&gl_combine, !gl_combine.integer);
                break;
-       case 11:
+       case 10:
                Cvar_SetValueQuick (&gl_dither, !gl_dither.integer);
                break;
-       case 12:
+       case 11:
                Cvar_SetValueQuick (&v_hwgamma, !v_hwgamma.integer);
                break;
-       case 13:
+       case 12:
                Cvar_SetValueQuick (&v_gamma, bound(1, v_gamma.value + dir * 0.25, 5));
                break;
-       case 14:
+       case 13:
                Cvar_SetValueQuick (&v_contrast, bound(0.5, v_contrast.value + dir * 0.25, 5));
                break;
-       case 15:
+       case 14:
                Cvar_SetValueQuick (&v_brightness, bound(0, v_brightness.value + dir * 0.05, 0.8));
                break;
-       case 16: // music volume
+       case 15: // music volume
                #ifdef _WIN32
                Cvar_SetValueQuick (&bgmvolume, bound(0, bgmvolume.value + dir * 1.0, 1));
                #else
                Cvar_SetValueQuick (&bgmvolume, bound(0, bgmvolume.value + dir * 0.1, 1));
                #endif
                break;
-       case 17: // sfx volume
+       case 16: // sfx volume
                Cvar_SetValueQuick (&volume, bound(0, volume.value + dir * 0.1, 1));
                break;
-       case 18:
+       case 17:
                Cvar_SetValueQuick (&crosshair, bound(0, crosshair.integer + dir, 5));
                break;
-       case 19:
+       case 18:
                Cvar_SetValueQuick (&crosshair_size, bound(1, crosshair_size.value + dir, 5));
                break;
-       case 20: // show framerate
+       case 19: // show framerate
                Cvar_SetValueQuick (&showfps, !showfps.integer);
                break;
-       case 21: // always run
+       case 20: // always run
                if (cl_forwardspeed.value > 200)
                {
                        Cvar_SetValueQuick (&cl_forwardspeed, 200);
@@ -1332,22 +1354,22 @@ void M_Menu_Options_AdjustSliders (int dir)
                        Cvar_SetValueQuick (&cl_backspeed, 400);
                }
                break;
-       case 22: // lookspring
+       case 21: // lookspring
                Cvar_SetValueQuick (&lookspring, !lookspring.integer);
                break;
-       case 23: // lookstrafe
+       case 22: // lookstrafe
                Cvar_SetValueQuick (&lookstrafe, !lookstrafe.integer);
                break;
-       case 24: // mouse speed
+       case 23: // mouse speed
                Cvar_SetValueQuick (&sensitivity, bound(1, sensitivity.value + dir * 0.5, 50));
                break;
-       case 25: // mouse look
+       case 24: // mouse look
                Cvar_SetValueQuick (&freelook, !freelook.integer);
                break;
-       case 26: // invert mouse
+       case 25: // invert mouse
                Cvar_SetValueQuick (&m_pitch, -m_pitch.value);
                break;
-       case 27: // windowed mouse
+       case 26: // windowed mouse
                Cvar_SetValueQuick (&vid_mouse, !vid_mouse.integer);
                break;
        }
@@ -1370,8 +1392,7 @@ void M_Options_Draw (void)
        M_Print(16, y, "       Effects Options");y += 8;
        M_Print(16, y, "         2D Resolution");M_DrawSlider(220, y, scr_2dresolution.value);y += 8;
        M_Print(16, y, "           Screen size");M_DrawSlider(220, y, (scr_viewsize.value - 30) /(120 - 30));y += 8;
-       M_Print(16, y, "           Sky Quality");M_DrawSlider(220, y, r_skyquality.value / 2);y += 8;
-       M_Print(16, y, "Hidden Surface Removal");M_DrawCheckbox(220, y, r_ser.integer);y += 8;
+       M_Print(16, y, "                   Sky");M_DrawCheckbox(220, y, r_sky.integer);y += 8;
        M_Print(16, y, "       Overbright Bits");M_DrawSlider(220, y, (v_overbrightbits.value) / 4);y += 8;
        M_Print(16, y, "       Texture Combine");M_DrawCheckbox(220, y, gl_combine.integer);y += 8;
        M_Print(16, y, "             Dithering");M_DrawCheckbox(220, y, gl_dither.integer);y += 8;
@@ -1471,7 +1492,7 @@ void M_Menu_Options_Effects_f (void)
 extern cvar_t cl_particles;
 extern cvar_t cl_explosions;
 extern cvar_t cl_stainmaps;
-extern cvar_t r_lightmodels;
+extern cvar_t r_modellights;
 extern cvar_t cl_particles_bulletimpacts;
 extern cvar_t cl_particles_smoke;
 extern cvar_t cl_particles_sparks;
@@ -1487,7 +1508,7 @@ void M_Menu_Options_Effects_AdjustSliders (int dir)
        switch (options_effects_cursor)
        {
        case 0:
-               Cvar_SetValueQuick (&r_lightmodels, !r_lightmodels.integer);
+               Cvar_SetValueQuick (&r_modellights, bound(0, r_modellights.value + dir, 8));
                break;
        case 1:
                Cvar_SetValueQuick (&cl_particles, !cl_particles.integer);
@@ -1532,7 +1553,7 @@ void M_Options_Effects_Draw (void)
        M_DrawPic((320-p->width)/2, 4, "gfx/p_option.lmp");
 
        y = 32;
-       M_Print(16, y, "        Model Lighting");M_DrawCheckbox(220, y, r_lightmodels.integer);y += 8;
+       M_Print(16, y, "      Lights Per Model");M_DrawSlider(220, y, r_modellights.value / 8);y += 8;
        M_Print(16, y, "             Particles");M_DrawCheckbox(220, y, cl_particles.integer);y += 8;
        M_Print(16, y, "            Explosions");M_DrawCheckbox(220, y, cl_explosions.integer);y += 8;
        M_Print(16, y, "             Stainmaps");M_DrawCheckbox(220, y, cl_stainmaps.integer);y += 8;
@@ -1554,32 +1575,12 @@ void M_Options_Effects_Key (int k)
        switch (k)
        {
        case K_ESCAPE:
-               M_Menu_Main_f ();
+               M_Menu_Options_f ();
                break;
 
        case K_ENTER:
-               m_entersound = true;
-               switch (options_effects_cursor)
-               {
-               case 0:
-                       M_Menu_Keys_f ();
-                       break;
-               case 1:
-                       m_state = m_none;
-                       Con_ToggleConsole_f ();
-                       break;
-               case 2:
-                       Cbuf_AddText ("exec default.cfg\n");
-                       break;
-               case 3:
-                       if (vid_menudrawfn)
-                               M_Menu_Video_f ();
-                       break;
-               default:
-                       M_Menu_Options_Effects_AdjustSliders (1);
-                       break;
-               }
-               return;
+               M_Menu_Options_Effects_AdjustSliders (1);
+               break;
 
        case K_UPARROW:
                S_LocalSound ("misc/menu1.wav");
@@ -1610,7 +1611,7 @@ void M_Options_Effects_Key (int k)
 
 char *bindnames[][2] =
 {
-#ifdef BLOODBATH
+#ifdef TRANSFUSION
 {"+forward",           "walk forward"},
 {"+back",                      "backpedal"},
 {"+moveleft",          "step left"},
@@ -1641,7 +1642,7 @@ char *bindnames[][2] =
 {"impulse 141",                "identify player"},
 {"impulse 16",         "next armor type"},
 {"impulse 20",         "observer mode"}
-#else  // not BLOODBATH
+#else  // not TRANSFUSION
 {"+attack",            "attack"},
 {"impulse 10",                 "next weapon"},
 {"impulse 12",                 "previous weapon"},
@@ -1661,7 +1662,7 @@ char *bindnames[][2] =
 {"+klook",                     "keyboard look"},
 {"+moveup",                    "swim up"},
 {"+movedown",          "swim down"}
-#endif  // not BLOODBATH
+#endif  // not TRANSFUSION
 };
 
 #define        NUMCOMMANDS     (sizeof(bindnames)/sizeof(bindnames[0]))
@@ -2510,8 +2511,8 @@ episode_t nehahraepisodes[] =
        {"Dimension of the Lost", 17, 2}
 };
 
-// Map list for BloodBath
-level_t                bloodbathlevels[] =
+// Map list for Transfusion
+level_t                transfusionlevels[] =
 {
        {"bb1",                 "The Stronghold"},
        {"bb2",                 "Winter Wonderland"},
@@ -2549,13 +2550,13 @@ level_t         bloodbathlevels[] =
        {"qe1m7",               "The House of Chthon"}
 };
 
-episode_t      bloodbathepisodes[] =
+episode_t      transfusionepisodes[] =
 {
        {"Blood", 0, 10},
        {"Plasma Pack", 10, 4},
        {"Cryptic Passage", 14, 4},
        {"Blood 2", 18, 5},
-       {"BloodBath", 23, 7}
+       {"Custom", 23, 7}
 };
 
 gamelevels_t sharewarequakegame = {"Shareware Quake", quakelevels, quakeepisodes, 2};
@@ -2563,7 +2564,7 @@ gamelevels_t registeredquakegame = {"Quake", quakelevels, quakeepisodes, 7};
 gamelevels_t hipnoticgame = {"Scourge of Armagon", hipnoticlevels, hipnoticepisodes, 6};
 gamelevels_t roguegame = {"Dissolution of Eternity", roguelevels, rogueepisodes, 4};
 gamelevels_t nehahragame = {"Nehahra", nehahralevels, nehahraepisodes, 4};
-gamelevels_t bloodbathgame = {"BloodBath", bloodbathlevels, bloodbathepisodes, 5};
+gamelevels_t transfusiongame = {"Transfusion", transfusionlevels, transfusionepisodes, 5};
 
 typedef struct
 {
@@ -2581,7 +2582,7 @@ gameinfo_t gamelist[] =
        {GAME_NEHAHRA, &nehahragame, &nehahragame},
        {GAME_FIENDARENA, &sharewarequakegame, &registeredquakegame},
        {GAME_ZYMOTIC, &sharewarequakegame, &registeredquakegame},
-       {GAME_BLOODBATH, &bloodbathgame, &bloodbathgame},
+       {GAME_TRANSFUSION, &transfusiongame, &transfusiongame},
        {-1, &sharewarequakegame, &registeredquakegame} // final fallback
 };
 
@@ -2634,7 +2635,7 @@ void M_GameOptions_Draw (void)
        M_Print (160, 56, va("%i", maxplayers) );
 
        M_Print (0, 64, "        Game Type");
-       if (gamemode == GAME_BLOODBATH)
+       if (gamemode == GAME_TRANSFUSION)
        {
                if (!deathmatch.integer)
                        Cvar_SetValue("deathmatch", 1);
@@ -2670,7 +2671,7 @@ void M_GameOptions_Draw (void)
                }
                M_Print (160, 72, msg);
        }
-       else if (gamemode == GAME_BLOODBATH)
+       else if (gamemode == GAME_TRANSFUSION)
        {
                char *msg;
 
@@ -2769,7 +2770,7 @@ void M_NetStart_Change (int dir)
                break;
 
        case 2:
-               if (gamemode == GAME_BLOODBATH)
+               if (gamemode == GAME_TRANSFUSION)
                {
                        if (deathmatch.integer == 2) // changing from CTF to BloodBath
                                Cvar_SetValueQuick (&deathmatch, 0);