1
0
Fork 0
forked from fte/fteqw

Make sure the menus for quake2 and hexen2 have a splitscreen option.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5490 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2019-07-07 04:20:09 +00:00
parent 145c99e802
commit f75beaff81
2 changed files with 39 additions and 28 deletions

View file

@ -330,6 +330,25 @@ void M_Menu_SinglePlayer_f (void)
static menuresel_t resel; static menuresel_t resel;
#endif #endif
#if MAX_SPLITS > 1
static const char *splitopts[] =
{
"Single",
"Dual",
"Tripple",
"QUAD",
NULL
};
static const char *splitvals[] =
{
"0",
"1",
"2",
"3",
NULL
};
#endif
Key_Dest_Add(kdm_emenu); Key_Dest_Add(kdm_emenu);
#ifdef CLIENTONLY #ifdef CLIENTONLY
@ -351,13 +370,18 @@ void M_Menu_SinglePlayer_f (void)
//quake2 uses the 'newgame' alias, which controls the intro video and then start map. //quake2 uses the 'newgame' alias, which controls the intro video and then start map.
menu->selecteditem = (menuoption_t*) menu->selecteditem = (menuoption_t*)
MC_AddConsoleCommand (menu, 64, 170, 40, "Easy", va("closemenu; skill 0;deathmatch 0; coop %i;newgame\n", cl_splitscreen.ival>0)); MC_AddConsoleCommand (menu, 64, 170, 40, "Easy", va("closemenu; skill 0;deathmatch 0; set_calc coop ($cl_splitscreen>0);newgame\n"));
MC_AddConsoleCommand (menu, 64, 170, 48, "Medium", va("closemenu; skill 1;deathmatch 0; coop %i;newgame\n", cl_splitscreen.ival>0)); MC_AddConsoleCommand (menu, 64, 170, 48, "Medium", va("closemenu; skill 1;deathmatch 0; set_calc coop ($cl_splitscreen>0);newgame\n"));
MC_AddConsoleCommand (menu, 64, 170, 56, "Hard", va("closemenu; skill 2;deathmatch 0; coop %i;newgame\n", cl_splitscreen.ival>0)); MC_AddConsoleCommand (menu, 64, 170, 56, "Hard", va("closemenu; skill 2;deathmatch 0; set_calc coop ($cl_splitscreen>0);newgame\n"));
#ifdef SAVEDGAMES #ifdef SAVEDGAMES
MC_AddConsoleCommand (menu, 64, 170, 72, "Load Game", "menu_load\n"); MC_AddConsoleCommand (menu, 64, 170, 72, "Load Game", "menu_load\n");
MC_AddConsoleCommand (menu, 64, 170, 80, "Save Game", "menu_save\n"); MC_AddConsoleCommand (menu, 64, 170, 80, "Save Game", "menu_save\n");
#endif #endif
#if MAX_SPLITS > 1
b = (menubutton_t*)MC_AddCvarCombo(menu, 72, 170, 96, "Splitscreen", &cl_splitscreen, splitopts, splitvals);
#endif
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 48, 0, 40, NULL, false); menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 48, 0, 40, NULL, false);
return; return;
#endif #endif
@ -483,6 +507,8 @@ void M_Menu_SinglePlayer_f (void)
MC_AddConsoleCommandHexen2BigFont(menu, 80, y+=20, "Save Game", "menu_save\n"); MC_AddConsoleCommandHexen2BigFont(menu, 80, y+=20, "Save Game", "menu_save\n");
MC_AddConsoleCommandHexen2BigFont(menu, 80, y+=20, "Load Game", "menu_load\n"); MC_AddConsoleCommandHexen2BigFont(menu, 80, y+=20, "Load Game", "menu_load\n");
#endif #endif
MC_AddCvarCombo(menu, 72, 170, y+=20, "Splitscreen", &cl_splitscreen, splitopts, splitvals);
} }
menu->cursoritem = (menuoption_t *)MC_AddCursor(menu, &resel, 56, menu->selecteditem?menu->selecteditem->common.posy:0); menu->cursoritem = (menuoption_t *)MC_AddCursor(menu, &resel, 56, menu->selecteditem?menu->selecteditem->common.posy:0);
@ -527,24 +553,6 @@ void M_Menu_SinglePlayer_f (void)
} }
else else
{ {
#if MAX_SPLITS > 1
const char *opts[] =
{
"Single",
"Dual",
"Tripple",
"QUAD",
NULL
};
const char *vals[] =
{
"0",
"1",
"2",
"3",
NULL
};
#endif
int width; int width;
if (R_GetShaderSizes(p, &width, NULL, true) <= 0) if (R_GetShaderSizes(p, &width, NULL, true) <= 0)
width = 232; width = 232;
@ -565,7 +573,7 @@ void M_Menu_SinglePlayer_f (void)
#endif #endif
#if MAX_SPLITS > 1 #if MAX_SPLITS > 1
b = (menubutton_t*)MC_AddCvarCombo(menu, 72, 72+width/2, 92, "", &cl_splitscreen, opts, vals); b = (menubutton_t*)MC_AddCvarCombo(menu, 72, 72+width/2, 92, "", &cl_splitscreen, splitopts, splitvals);
MC_AddWhiteText(menu, 72, 0, 92, "^aSplitscreen", false); MC_AddWhiteText(menu, 72, 0, 92, "^aSplitscreen", false);
b->common.height = 20; b->common.height = 20;
b->common.width = width; b->common.width = width;

View file

@ -908,15 +908,18 @@ qboolean SVQ2_InitGameProgs(void)
return false; return false;
} }
//stop q2 from crashing. //Q2 gamecode depends upon maxclients being set+locked in order to know how many player slots there actually are. It crashes when its wrong.
if (!deathmatch.value && !coop.value) if (!deathmatch.value && !coop.value)
maxclients.value = 1; svq2_maxclients = 1;
else else
maxclients.value = maxclients.ival; svq2_maxclients = maxclients.ival;
if (maxclients.value > MAX_CLIENTS) if (Cvar_VariableValue("cl_splitscreen"))
Cvar_SetValue(&maxclients, MAX_CLIENTS); svq2_maxclients = max(svq2_maxclients, MAX_SPLITS);
if (svq2_maxclients > MAX_CLIENTS)
svq2_maxclients = MAX_CLIENTS;
if (svq2_maxclients != maxclients.value)
Cvar_SetValue(&maxclients, svq2_maxclients);
svq2_maxclients = maxclients.value;
maxclients.flags |= CVAR_LATCH; maxclients.flags |= CVAR_LATCH;
deathmatch.flags |= CVAR_LATCH; deathmatch.flags |= CVAR_LATCH;
coop.flags |= CVAR_LATCH; coop.flags |= CVAR_LATCH;