]> 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 6f69c712661f3162b7a758e0c6edf3eee53eb6d7..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;
 }
 
 //=============================================================================
@@ -1275,7 +1300,7 @@ 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 (&v_overbrightbits, bound(0, v_overbrightbits.integer + dir, 4));
@@ -1367,7 +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, "                   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;
@@ -1467,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;
@@ -1483,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);
@@ -1528,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;
@@ -1550,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");
@@ -1606,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"},
@@ -1637,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"},
@@ -1657,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]))
@@ -2506,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"},
@@ -2545,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};
@@ -2559,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
 {
@@ -2577,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
 };
 
@@ -2630,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);
@@ -2666,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;
 
@@ -2765,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);