mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-27 06:02:16 +00:00
9b6ea1c114
Fixed a couple of warnings. Added voip options to menus. GL+D3D merged builds compile, but d3d is probably broken still. Added vid_gl_context_es2 cvar to attempt to init a gles context. Note that you also need to set the requested gl version correctly. Changed qtv's webpage view slightly, for slightly updated npfte usage. git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3714 fc73d0e0-1445-4013-8a0c-d673dee63da5
2273 lines
76 KiB
C
2273 lines
76 KiB
C
//read menu.h
|
||
|
||
#include "quakedef.h"
|
||
#include "winquake.h"
|
||
|
||
menu_t *M_Options_Title(int *y, int infosize)
|
||
{
|
||
struct menu_s *menu;
|
||
*y = 32;
|
||
|
||
key_dest = key_menu;
|
||
m_state = m_complex;
|
||
|
||
menu = M_CreateMenu(infosize);
|
||
|
||
switch(M_GameType())
|
||
{
|
||
case MGT_QUAKE2: //q2...
|
||
MC_AddCenterPicture(menu, 4, 24, "pics/m_banner_options");
|
||
*y += 32;
|
||
break;
|
||
case MGT_HEXEN2://h2
|
||
MC_AddPicture(menu, 16, 0, 35, 176, "gfx/menu/hplaque.lmp");
|
||
MC_AddCenterPicture(menu, 0, 60, "gfx/menu/title3.lmp");
|
||
*y += 32;
|
||
break;
|
||
default: //q1
|
||
MC_AddPicture(menu, 16, 4, 32, 144, "gfx/qplaque.lmp");
|
||
MC_AddCenterPicture(menu, 4, 24, "gfx/p_option.lmp");
|
||
break;
|
||
}
|
||
return menu;
|
||
}
|
||
|
||
//these are awkward/strange
|
||
qboolean M_Options_AlwaysRun (menucheck_t *option, struct menu_s *menu, chk_set_t set)
|
||
{
|
||
if (set == CHK_CHECKED)
|
||
return cl_forwardspeed.value > 200;
|
||
else if (cl_forwardspeed.value > 200)
|
||
{
|
||
Cvar_SetValue (&cl_forwardspeed, 200);
|
||
Cvar_SetValue (&cl_backspeed, 200);
|
||
return false;
|
||
}
|
||
else
|
||
{
|
||
Cvar_SetValue (&cl_forwardspeed, 400);
|
||
Cvar_SetValue (&cl_backspeed, 400);
|
||
return true;
|
||
}
|
||
}
|
||
qboolean M_Options_InvertMouse (menucheck_t *option, struct menu_s *menu, chk_set_t set)
|
||
{
|
||
if (set == CHK_CHECKED)
|
||
return m_pitch.value < 0;
|
||
else
|
||
{
|
||
Cvar_SetValue (&m_pitch, -m_pitch.value);
|
||
return m_pitch.value < 0;
|
||
}
|
||
}
|
||
|
||
//options menu.
|
||
void M_Menu_Options_f (void)
|
||
{
|
||
extern cvar_t cl_standardchat, cl_splitscreen;
|
||
extern cvar_t cl_standardmsg, crosshair;
|
||
#ifdef _WIN32
|
||
extern qboolean vid_isfullscreen;
|
||
#endif
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, 0);
|
||
int mgt = M_GameType();
|
||
|
||
menu->selecteditem = (union menuoption_s *)
|
||
MC_AddConsoleCommand(menu, 16, y, " Customize controls", "menu_keys\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Go to console", "toggleconsole\nplay misc/menu2.wav\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Reset to defaults", "exec default.cfg\nplay misc/menu2.wav\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Save all settings", "cfg_save\n"); y+=8;
|
||
|
||
MC_AddSlider(menu, 16, y, " Mouse Speed", &sensitivity, 1, 10, 0.5); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Crosshair", &crosshair, 0, 22, 1); y+=8;
|
||
|
||
MC_AddCheckBox(menu, 16, y, " Always Run", NULL,0)->func = M_Options_AlwaysRun; y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Invert Mouse", NULL,0)->func = M_Options_InvertMouse; y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Lookspring", &lookspring,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Lookstrafe", &lookstrafe,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Splitscreen", &cl_splitscreen,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Use old status bar", &cl_sbar,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " HUD on left side", &cl_hudswap,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Old-style chatting", &cl_standardchat,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Old-style messages", &cl_standardmsg,0);y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Imitate FPS", "cl_netfps"); y+=8+4;
|
||
|
||
MC_AddConsoleCommand(menu, 16, y, " Video Options", "menu_video\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Shadow & Lighting Options", "menu_shadow_lighting\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " 3D Rendering Options", "menu_3d\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Texture Options", "menu_textures\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Particle Options", "menu_particles\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " FPS Options", "menu_fps\n"); y+=8;
|
||
|
||
if ((mgt != MGT_QUAKE2) && (mgt != MGT_HEXEN2))
|
||
{
|
||
MC_AddConsoleCommand(menu, 16, y, " Teamplay Options", "menu_teamplay\n"); y+=8;
|
||
}
|
||
|
||
if (mgt == MGT_QUAKE2)
|
||
{
|
||
MC_AddConsoleCommand(menu, 16, y, "Singleplayer Cheat Options", "menu_quake2_spcheats\n"); y+=8;
|
||
}
|
||
else if (mgt == MGT_HEXEN2)
|
||
{
|
||
MC_AddConsoleCommand(menu, 16, y, "Singleplayer Cheat Options", "menu_hexen2_spcheats\n"); y+=8;
|
||
}
|
||
else
|
||
{
|
||
MC_AddConsoleCommand(menu, 16, y, "Singleplayer Cheat Options", "menu_spcheats\n"); y+=8;
|
||
}
|
||
|
||
MC_AddConsoleCommand(menu, 16, y, " Audio Options", "menu_audio\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Downloads", "menu_download\n"); y+=8;
|
||
|
||
#ifdef _WIN32
|
||
if (!vid_isfullscreen)
|
||
#endif
|
||
{
|
||
MC_AddCheckBox(menu, 16, y, " Use Mouse", &_windowed_mouse,0); y+=8;
|
||
}
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 225, menu->selecteditem->common.posy, NULL, false);
|
||
}
|
||
|
||
#ifndef __CYGWIN__
|
||
typedef struct {
|
||
int cursorpos;
|
||
menuoption_t *cursoritem;
|
||
|
||
menutext_t *speaker[6];
|
||
menutext_t *testsoundsource;
|
||
|
||
soundcardinfo_t *card;
|
||
} audiomenuinfo_t;
|
||
|
||
qboolean M_Audio_Key (int key, struct menu_s *menu)
|
||
{
|
||
int i, x, y;
|
||
audiomenuinfo_t *info = menu->data;
|
||
soundcardinfo_t *sc;
|
||
for (sc = sndcardinfo; sc; sc = sc->next)
|
||
{
|
||
if (sc == info->card)
|
||
break;
|
||
}
|
||
if (!sc)
|
||
{
|
||
M_RemoveMenu(menu);
|
||
return true;
|
||
}
|
||
|
||
|
||
if (key == K_DOWNARROW)
|
||
{
|
||
info->testsoundsource->common.posy+=10;
|
||
}
|
||
if (key == K_UPARROW)
|
||
{
|
||
info->testsoundsource->common.posy-=10;
|
||
}
|
||
if (key == K_RIGHTARROW)
|
||
{
|
||
info->testsoundsource->common.posx+=10;
|
||
}
|
||
if (key == K_LEFTARROW)
|
||
{
|
||
info->testsoundsource->common.posx-=10;
|
||
}
|
||
if (key >= '0' && key <= '5')
|
||
{
|
||
i = key - '0';
|
||
x = info->testsoundsource->common.posx - 320/2;
|
||
y = info->testsoundsource->common.posy - 200/2;
|
||
// sc->yaw[i] = (-atan2 (y,x)*180/M_PI) - 90;
|
||
|
||
sc->dist[i] = 50/sqrt(x*x+y*y);
|
||
}
|
||
|
||
menu->selecteditem = NULL;
|
||
|
||
return false;
|
||
}
|
||
|
||
void M_Audio_StartSound (struct menu_s *menu)
|
||
{
|
||
int i;
|
||
vec3_t org;
|
||
audiomenuinfo_t *info = menu->data;
|
||
soundcardinfo_t *sc;
|
||
vec3_t mat[4];
|
||
|
||
static float lasttime;
|
||
|
||
for (sc = sndcardinfo; sc; sc = sc->next)
|
||
{
|
||
if (sc == info->card)
|
||
break;
|
||
}
|
||
if (!sc)
|
||
{
|
||
M_RemoveMenu(menu);
|
||
return;
|
||
}
|
||
|
||
for (i = 0; i < sc->sn.numchannels; i++)
|
||
{
|
||
// info->speaker[i]->common.posx = 320/2 - sin(sc->yaw[i]*M_PI/180) * 50/sc->dist[i];
|
||
// info->speaker[i]->common.posy = 200/2 - cos(sc->yaw[i]*M_PI/180) * 50/sc->dist[i];
|
||
}
|
||
for (; i < 6; i++)
|
||
info->speaker[i]->common.posy = -100;
|
||
|
||
if (lasttime+0.5 < Sys_DoubleTime())
|
||
{
|
||
S_GetListenerInfo(mat[0], mat[1], mat[2], mat[3]);
|
||
|
||
lasttime = Sys_DoubleTime();
|
||
org[0] = mat[0][0] + 2*(mat[1][0]*(info->testsoundsource->common.posx-320/2) + mat[1][0]*(info->testsoundsource->common.posy-200/2));
|
||
org[1] = mat[0][1] + 2*(mat[1][1]*(info->testsoundsource->common.posx-320/2) + mat[1][1]*(info->testsoundsource->common.posy-200/2));
|
||
org[2] = mat[0][2] + 2*(mat[1][2]*(info->testsoundsource->common.posx-320/2) + mat[1][2]*(info->testsoundsource->common.posy-200/2));
|
||
S_StartSound(-2, 0, S_PrecacheSound("player/pain3.wav"), org, 1, 4, 0);
|
||
}
|
||
}
|
||
|
||
void M_Menu_Audio_Speakers_f (void)
|
||
{
|
||
int i;
|
||
audiomenuinfo_t *info;
|
||
menu_t *menu;
|
||
|
||
key_dest = key_menu;
|
||
m_state = m_complex;
|
||
|
||
menu = M_CreateMenu(sizeof(audiomenuinfo_t));
|
||
info = menu->data;
|
||
menu->key = M_Audio_Key;
|
||
menu->event = M_Audio_StartSound;
|
||
|
||
for (i = 0; i < 6; i++)
|
||
info->speaker[i] = MC_AddBufferedText(menu, 0, 0, va("%i", i), false, true);
|
||
|
||
info->testsoundsource = MC_AddBufferedText(menu, 0, 0, "X", false, true);
|
||
|
||
info->card = sndcardinfo;
|
||
|
||
menu->selecteditem = NULL;
|
||
}
|
||
|
||
menucombo_t *MC_AddCvarCombo(menu_t *menu, int x, int y, const char *caption, cvar_t *cvar, const char **ops, const char **values);
|
||
void M_Menu_Audio_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
extern cvar_t nosound, precache, snd_leftisright, snd_khz, snd_eax, snd_speakers, ambient_level, bgmvolume, snd_playersoundvolume, ambient_fade, cl_staticsounds, snd_inactive, _snd_mixahead, snd_usemultipledevices, snd_noextraupdate, snd_show, bgmbuffer;
|
||
extern cvar_t cl_voip_play, cl_voip_send;
|
||
|
||
static const char *soundqualityoptions[] = {
|
||
"11025 Hz",
|
||
"22050 Hz",
|
||
"44100 Hz",
|
||
NULL
|
||
};
|
||
|
||
static const char *soundqualityvalues[] = {
|
||
"11.025",
|
||
"22.050",
|
||
"44.100",
|
||
NULL
|
||
};
|
||
|
||
static const char *speakeroptions[] = {
|
||
"Mono",
|
||
"Stereo",
|
||
"Quad",
|
||
"5.1 surround",
|
||
NULL
|
||
};
|
||
|
||
static const char *speakervalues[] = {
|
||
"1",
|
||
"2",
|
||
"4",
|
||
"6",
|
||
NULL
|
||
};
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Sound Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
#ifdef VOICECHAT
|
||
MC_AddCheckBox(menu, 16, y, " Voice Chat", &cl_voip_play,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " VOIP Voice Activation", &cl_voip_send,0);y+=8;
|
||
#endif
|
||
MC_AddSlider(menu, 16, y, " CD Music Volume", &bgmvolume, 0, 1, 0.1);y+=8;
|
||
MC_AddSlider(menu, 16, y, " CD Music Buffer", &bgmbuffer, 0, 10240, 1024);y+=8;
|
||
MC_AddSlider(menu, 16, y, " Sound Volume", &volume, 0, 1, 0.1);y+=8;
|
||
MC_AddSlider(menu, 16, y, " Player Sound Volume", &snd_playersoundvolume,0,1,0.1);y+=8;
|
||
MC_AddSlider(menu, 16, y, " Ambient Volume", &ambient_level, 0, 1, 0.1);y+=8;
|
||
MC_AddSlider(menu, 16, y, " Ambient Fade", &ambient_fade, 0, 1000, 1);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " No Sound", &nosound,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Static Sounds", &cl_staticsounds,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Precache", &precache,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Experimental EAX 2", &snd_eax,0);y+=8;
|
||
MC_AddCvarCombo(menu, 16, y, " Speaker Setup", &snd_speakers, speakeroptions, speakervalues);y+=8;
|
||
MC_AddCvarCombo(menu, 16, y, " Sound Speed", &snd_khz, soundqualityoptions, soundqualityvalues);y+=8;
|
||
MC_AddSlider(menu, 16, y, " Sound Mixahead", &_snd_mixahead,0,1,0.05);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Multiple Devices", &snd_usemultipledevices,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " No Extra Sound Update", &snd_noextraupdate,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Low Quality Sound (8bit)", &loadas8bit,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Flip Sound", &snd_leftisright,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, "Play Sound While Inactive", &snd_inactive,0);y+=8;
|
||
//MC_AddCombo(menu, 16, y, " Show Sounds Playing", &snd_show,0);y+=8;
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " = Restart Sound =", "snd_restart\n");y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 225, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
#else
|
||
void M_Menu_Audio_f (void)
|
||
{
|
||
Con_Printf("No sound in cygwin\n");
|
||
}
|
||
#endif
|
||
|
||
|
||
|
||
void M_Menu_Particles_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
extern cvar_t r_bouncysparks, r_part_rain, gl_part_flame, r_particlesystem, r_grenadetrail, r_rockettrail, r_part_sparks_textured, r_part_sparks_trifan, r_part_rain_quantity, r_part_beams, r_particle_tracelimit;
|
||
|
||
char *psystemopts[] =
|
||
{
|
||
"fixed/classic(faster)",
|
||
"scripted",
|
||
NULL
|
||
};
|
||
char *psystemvals[] =
|
||
{
|
||
"classic",
|
||
"script",
|
||
NULL
|
||
};
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Particle Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
MC_AddCvarCombo(menu, 16, y, " particle system", &r_particlesystem, psystemopts, psystemvals);y+=8;
|
||
//fixme: hide the rest of the options if r_particlesystem==classic
|
||
MC_AddConsoleCommand(menu, 16, y, " Choose particle set", "menu_particlesets");y+=8;
|
||
// MC_AddSlider(menu, 16, y, " exp spark count", &r_particles_in_explosion, 16, 1024);y+=8;
|
||
|
||
MC_AddSlider(menu, 16, y, " Grenade Trail", &r_grenadetrail,0,10,1); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Rocket Trail", &r_rockettrail,0,10,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Bouncy Sparks", &r_bouncysparks,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Textured Sparks", &r_part_sparks_textured,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Trifan Sparks", &r_part_sparks_trifan,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Rain", &r_part_rain,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Rain Quantity", &r_part_rain_quantity,0,10,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Torch Flame", &gl_part_flame,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Particle Tracelimit", &r_particle_tracelimit,0,2000,50); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Particle Beams", &r_part_beams,0); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
enum {
|
||
PRESET_286,
|
||
PRESET_FAST,
|
||
PRESET_DEFAULT,
|
||
PRESET_NICE,
|
||
PRESET_REALTIME,
|
||
PRESET_MAX
|
||
};
|
||
typedef struct {
|
||
char *cvarname;
|
||
char *value[PRESET_MAX];
|
||
} presetinfo_t;
|
||
presetinfo_t preset[] =
|
||
{
|
||
//default is a reasonable nice look for single player
|
||
//fast is for competetive deathmatch games (equivelent to the default settings of other quakrworld engines)
|
||
//286 is an attempt to get the very vest fps possible, if you're crazy
|
||
{"r_presetname", {"286", "fast", "default", "nice", "realtime"}},
|
||
{"gl_texturemode", {"nn", "ln", "ln", "ll", "ll"}},
|
||
{"r_particlesdesc", {"none", "highfps", "spikeset tsshaft", "spikeset tsshaft", "spikeset tsshaft"}},
|
||
{"r_particlesystem", {"none", "classic", "script", "script", "script"}},
|
||
{"r_stains", {"0", "0", "0.75", "0.75", "0.75"}},
|
||
{"r_drawflat", {"1", "0", "0", "0", "0"}},
|
||
{"r_nolerp", {"1", "0", "0", "0", "0"}},
|
||
{"r_nolightdir", {"1", "1", "0", "0", "0"}},
|
||
{"r_dynamic", {"0", "0", "1", "1", "1"}},
|
||
{"r_bloom", {"0", "0", "0", "0", "1"}},
|
||
{"gl_flashblend", {"0", "1", "0", "1", "2"}},
|
||
{"gl_bump", {"0", "0", "0", "1", "1"}},
|
||
{"gl_specular", {"0", "0", "0", "1", "1"}},
|
||
{"r_loadlit", {"0", "1", "1", "2", "2"}},
|
||
{"r_fastsky", {"1", "0", "0", "-1", "-1"}},
|
||
{"r_shadow_realtime_dlight",{"0", "0", "0", "1", "1"}},
|
||
{"r_shadow_realtime_world", {"0", "0", "0", "0", "1"}},
|
||
{"gl_detail", {"0", "0", "0", "1", "1"}},
|
||
{"gl_load24bit", {"0", "0", "1", "1", "1"}},
|
||
{"r_replacemodels", {"", "", "md3 md2", "md3 md2", "md3 md2"}},
|
||
{"r_waterwarp", {"0", "-1", "1", "1", "1"}},
|
||
{"r_lightstylesmooth", {"0", "0", "0", "1", "1"}},
|
||
{NULL}
|
||
};
|
||
static void ApplyPreset (int presetnum)
|
||
{
|
||
int i;
|
||
for (i = 1; preset[i].cvarname; i++)
|
||
{
|
||
Cbuf_AddText(preset[i].cvarname, Cmd_ExecLevel);
|
||
Cbuf_AddText(" ", Cmd_ExecLevel);
|
||
Cbuf_AddText(preset[i].value[presetnum], Cmd_ExecLevel);
|
||
Cbuf_AddText("\n", Cmd_ExecLevel);
|
||
}
|
||
}
|
||
|
||
void FPS_Preset_f (void)
|
||
{
|
||
char *arg = Cmd_Argv(1);
|
||
int i;
|
||
for (i = 0; i < PRESET_MAX; i++)
|
||
{
|
||
if (!strcmp(preset[0].value[i], arg))
|
||
{
|
||
ApplyPreset(i);
|
||
return;
|
||
}
|
||
}
|
||
|
||
Con_Printf("Preset %s not recognised\n", arg);
|
||
Con_Printf("Valid presests:\n");
|
||
for (i = 0; i < PRESET_MAX; i++)
|
||
Con_Printf("%s\n", preset[0].value[i]);
|
||
}
|
||
|
||
|
||
void M_Menu_FPS_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
int i, len;
|
||
|
||
extern cvar_t v_contentblend, show_fps, cl_r2g, cl_gibfilter, cl_expsprite, cl_deadbodyfilter;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " FPS Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
for (i = 0; i < PRESET_MAX; i++)
|
||
{
|
||
len = strlen(preset[0].value[i]);
|
||
MC_AddConsoleCommand(menu, 116, y, va("(preset) %s", preset[0].value[i]), va("fps_preset %s\n", preset[0].value[i])); y+=8;
|
||
}
|
||
MC_AddCheckBox(menu, 16, y, " Show FPS", &show_fps,0);y+=8;
|
||
|
||
MC_AddCheckBox(menu, 16, y, " Content blend", &v_contentblend,0);y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Gib Filter", &cl_gibfilter,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Dead Body Filter", &cl_deadbodyfilter,0,2,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Explosion Sprite", &cl_expsprite,0); y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Skybox", "r_skybox");y+=8;y+=4;
|
||
MC_AddCheckBox(menu, 16, y, " Rockets to Grenades", &cl_r2g,0); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 188, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
//copy and pasted from renderer.c
|
||
qboolean M_VideoApply2 (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
// r_shadows too
|
||
|
||
|
||
Cbuf_AddText("vid_restart\n", RESTRICT_LOCAL);
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_options\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
typedef struct {
|
||
menucombo_t *multisamplingcombo;
|
||
} threeDmenuinfo_t;
|
||
|
||
qboolean M_VideoApply3D (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
threeDmenuinfo_t *info = menu->data;
|
||
int currentmsaalevel;
|
||
extern cvar_t vid_multisample;
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
if (vid_multisample.value == 8)
|
||
currentmsaalevel = 4;
|
||
else if (vid_multisample.value == 6)
|
||
currentmsaalevel = 3;
|
||
else if (vid_multisample.value == 4)
|
||
currentmsaalevel = 2;
|
||
else if (vid_multisample.value == 2)
|
||
currentmsaalevel = 1;
|
||
else if (vid_multisample.value <= 1)
|
||
currentmsaalevel = 0;
|
||
else
|
||
currentmsaalevel = 0;
|
||
|
||
if (info->multisamplingcombo->selectedoption != currentmsaalevel) // if MSAA doesn't change, don't bother applying it when the video system is restarted
|
||
{
|
||
switch(info->multisamplingcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("vid_multisample 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("vid_multisample 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("vid_multisample 4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("vid_multisample 6\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 4:
|
||
Cbuf_AddText("vid_multisample 8\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
}
|
||
#ifdef _DEBUG
|
||
else
|
||
{
|
||
Con_Printf("MSAA: Selected option matches current CVAR value (%d & %d), no change made.\n",info->multisamplingcombo->selectedoption, currentmsaalevel);
|
||
}
|
||
#endif
|
||
|
||
Cbuf_AddText("vid_restart\n", RESTRICT_LOCAL);
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_3d\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
void M_Menu_3D_f (void)
|
||
{
|
||
static const char *msaalevels[] =
|
||
{
|
||
"Off",
|
||
"2x",
|
||
"4x",
|
||
"6x",
|
||
"8x",
|
||
NULL
|
||
};
|
||
|
||
threeDmenuinfo_t *info;
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
int currentmsaalevel;
|
||
#ifndef MINIMAL
|
||
extern cvar_t r_xflip;
|
||
#endif
|
||
extern cvar_t r_novis, gl_dither, cl_item_bobbing, r_waterwarp, r_nolerp, r_fastsky, gl_nocolors, gl_lerpimages, gl_lateswap, r_mirroralpha, r_wateralpha, r_drawviewmodel, gl_motionblur, gl_motionblurscale, gl_blend2d, gl_blendsprites, r_flashblend, gl_cshiftenabled, vid_multisample;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, sizeof(threeDmenuinfo_t));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
if (vid_multisample.value == 8)
|
||
currentmsaalevel = 4;
|
||
else if (vid_multisample.value == 6)
|
||
currentmsaalevel = 3;
|
||
else if (vid_multisample.value == 4)
|
||
currentmsaalevel = 2;
|
||
else if (vid_multisample.value == 2)
|
||
currentmsaalevel = 1;
|
||
else if (vid_multisample.value <= 1)
|
||
currentmsaalevel = 0;
|
||
else
|
||
currentmsaalevel = 0;
|
||
|
||
menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " 3D Renderering Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
MC_AddCheckBox(menu, 16, y, " Calculate VIS", &r_novis,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Water Warp", &r_waterwarp,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Model Interpollation", &r_nolerp,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Toggle Sky", &r_fastsky,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Lerp Images", &gl_lerpimages,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Maximum Distance", &gl_maxdist,1,8192,128); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " GL Swapbuffer Delay", &gl_lateswap,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Mirror Reflections", &r_mirroralpha,0); y+=8;
|
||
#if !defined(MINIMAL) && defined(GLQUAKE)
|
||
MC_AddCheckBox(menu, 16, y, " Flip Horizontal View", &r_xflip,0); y+=8;
|
||
#endif
|
||
MC_AddCheckBox(menu, 16, y, " Water Transparency", &r_wateralpha,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " View Model Transparency", &r_drawviewmodel,0,1,0.1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, "Ignore Player Model Colors", &gl_nocolors,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Motion Blur", &gl_motionblur,0,1,0.5); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Motion Blur Scale", &gl_motionblurscale,0,1,0.5); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " 2D Blending", &gl_blend2d,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Sprite Blending", &gl_blendsprites,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Flash Blending", &r_flashblend,0,2,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Poly Blending", &gl_cshiftenabled,0); y+=8;
|
||
#ifdef GLQUAKE
|
||
MC_AddCheckBox(menu, 16, y, " 16bit Color Dithering", &gl_dither,0); y+=8;
|
||
#endif
|
||
MC_AddCheckBox(menu, 16, y, " Model Bobbing", &cl_item_bobbing,0); y+=8;
|
||
info->multisamplingcombo = MC_AddCombo(menu, 16, y, " Multisample Anti-Aliasing", msaalevels, currentmsaalevel); y+=8;
|
||
y+=8;
|
||
MC_AddCommand(menu, 16, y, " Apply", M_VideoApply3D); y+=8;
|
||
|
||
//menu->selecteditem = (union menuoption_s *)info->multisamplingcombo;
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 225, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
typedef struct {
|
||
menucombo_t *texturefiltercombo;
|
||
menucombo_t *anisotropycombo;
|
||
menucombo_t *maxtexturesizecombo;
|
||
menucombo_t *bloomsamplesizecombo;
|
||
menucombo_t *bloomdiamondcombo;
|
||
} texturemenuinfo_t;
|
||
|
||
qboolean M_VideoApplyTextures (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
texturemenuinfo_t *info = menu->data;
|
||
#if !defined(MINIMAL) && defined(GLQUAKE)
|
||
int currentbloomdiamond;
|
||
int currentbloomsamplesize;
|
||
|
||
extern cvar_t r_bloom_sample_size, r_bloom_diamond_size;
|
||
#endif
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
switch(info->texturefiltercombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("gl_texturemode gl_nearest_mipmap_nearest\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("gl_texturemode gl_linear_mipmap_nearest\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("gl_texturemode gl_linear_mipmap_linear\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
switch(info->anisotropycombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("gl_texture_anisotropic_filtering 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("gl_texture_anisotropic_filtering 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("gl_texture_anisotropic_filtering 4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("gl_texture_anisotropic_filtering 8\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 4:
|
||
Cbuf_AddText("gl_texture_anisotropic_filtering 16\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
switch(info->maxtexturesizecombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("gl_max_size 128\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("gl_max_size 196\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("gl_max_size 256\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("gl_max_size 384\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 4:
|
||
Cbuf_AddText("gl_max_size 512\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 5:
|
||
Cbuf_AddText("gl_max_size 768\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 6:
|
||
Cbuf_AddText("gl_max_size 1024\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 7:
|
||
Cbuf_AddText("gl_max_size 2048\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 8:
|
||
Cbuf_AddText("gl_max_size 4096\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 9:
|
||
Cbuf_AddText("gl_max_size 8192\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
#if !defined(MINIMAL) && defined(GLQUAKE)
|
||
if (r_bloom_sample_size.value >= 512)
|
||
currentbloomsamplesize = 7;
|
||
else if (r_bloom_sample_size.value == 384)
|
||
currentbloomsamplesize = 6;
|
||
else if (r_bloom_sample_size.value == 256)
|
||
currentbloomsamplesize = 5;
|
||
else if (r_bloom_sample_size.value == 192)
|
||
currentbloomsamplesize = 4;
|
||
else if (r_bloom_sample_size.value == 128)
|
||
currentbloomsamplesize = 3;
|
||
else if (r_bloom_sample_size.value == 96)
|
||
currentbloomsamplesize = 2;
|
||
else if (r_bloom_sample_size.value == 64)
|
||
currentbloomsamplesize = 1;
|
||
else if (r_bloom_sample_size.value <= 32)
|
||
currentbloomsamplesize = 0;
|
||
else
|
||
currentbloomsamplesize = 0;
|
||
|
||
if (info->bloomsamplesizecombo->selectedoption != currentbloomsamplesize)
|
||
{
|
||
switch(info->bloomsamplesizecombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("r_bloom_sample_size 32\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("r_bloom_sample_size 64\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("r_bloom_sample_size 96\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("r_bloom_sample_size 128\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 4:
|
||
Cbuf_AddText("r_bloom_sample_size 192\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 5:
|
||
Cbuf_AddText("r_bloom_sample_size 256\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 6:
|
||
Cbuf_AddText("r_bloom_sample_size 384\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 7:
|
||
Cbuf_AddText("r_bloom_sample_size 512\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
}
|
||
#ifdef _DEBUG
|
||
else
|
||
{
|
||
Con_Printf("Bloom Sample Size: Selected option matches current CVAR value (%d & %d), no change made.\n",info->bloomsamplesizecombo->selectedoption, currentbloomsamplesize);
|
||
}
|
||
#endif
|
||
|
||
if (r_bloom_diamond_size.value >= 10)
|
||
currentbloomdiamond = 4;
|
||
else if (r_bloom_diamond_size.value >= 8)
|
||
currentbloomdiamond = 3;
|
||
else if (r_bloom_diamond_size.value >= 6)
|
||
currentbloomdiamond = 2;
|
||
else if (r_bloom_diamond_size.value >= 4)
|
||
currentbloomdiamond = 1;
|
||
else if (r_bloom_diamond_size.value <= 2)
|
||
currentbloomdiamond = 0;
|
||
else
|
||
currentbloomdiamond = 0;
|
||
|
||
if (info->bloomdiamondcombo->selectedoption != currentbloomdiamond)
|
||
{
|
||
switch(info->bloomdiamondcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("r_bloom_diamond_size 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("r_bloom_diamond_size 4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("r_bloom_diamond_size 6\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("r_bloom_diamond_size 8\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 4:
|
||
Cbuf_AddText("r_bloom_diamond_size 10\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
}
|
||
#ifdef _DEBUG
|
||
else
|
||
{
|
||
Con_Printf("Bloom Diamond Size: Selected option matches current CVAR value (%d & %d), no change made.\n",info->bloomdiamondcombo->selectedoption, currentbloomdiamond);
|
||
}
|
||
#endif
|
||
#endif
|
||
|
||
Cbuf_AddText("vid_restart\n", RESTRICT_LOCAL);
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_textures\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
void M_Menu_Textures_f (void)
|
||
{
|
||
static const char *texturefilternames[] =
|
||
{
|
||
"Nearest",
|
||
"Bilinear",
|
||
"Trilinear",
|
||
NULL
|
||
};
|
||
|
||
static const char *anisotropylevels[] =
|
||
{
|
||
"Off",
|
||
"2x",
|
||
"4x",
|
||
"8x",
|
||
"16x",
|
||
NULL
|
||
};
|
||
|
||
static const char *texturesizeoptions[] =
|
||
{
|
||
// uncommented out the unreadable console text ones
|
||
//"1x1",
|
||
//"2x2",
|
||
//"4x4",
|
||
//"8x8",
|
||
//"16x16",
|
||
//"32x32",
|
||
//"64x64",
|
||
"128x128",
|
||
"196x196",
|
||
"256x256",
|
||
"384x384",
|
||
"512x512",
|
||
"768x768",
|
||
"1024x1024",
|
||
"2048x2048",
|
||
"4096x4096",
|
||
"8192x8192",
|
||
NULL
|
||
};
|
||
|
||
#ifndef MINIMAL
|
||
static const char *bloomsamplesizeoptions[] =
|
||
{
|
||
"32x32",
|
||
"64x64",
|
||
"96x96",
|
||
"128x128",
|
||
"192x192",
|
||
"256x256",
|
||
"384x384",
|
||
"512x512",
|
||
NULL
|
||
};
|
||
|
||
static const char *bloomdiamondoptions[] =
|
||
{
|
||
"2x",
|
||
"4x",
|
||
"6x",
|
||
"8x",
|
||
"10x",
|
||
NULL
|
||
};
|
||
#endif
|
||
|
||
texturemenuinfo_t *info;
|
||
int cursorpositionY;
|
||
int currenttexturefilter;
|
||
int currentanisotropylevel;
|
||
int currentmaxtexturesize;
|
||
#if !defined(MINIMAL) && defined(GLQUAKE)
|
||
int currentbloomsamplesize;
|
||
int currentbloomdiamond;
|
||
|
||
extern cvar_t r_bloom, r_bloom_sample_size, r_bloom_darken, r_bloom_intensity, r_bloom_diamond_size, r_bloom_alpha, r_bloom_fast_sample;
|
||
#endif
|
||
extern cvar_t gl_load24bit, gl_specular, gl_bump, gl_detail, gl_detailscale, gl_compress, gl_savecompressedtex, gl_triplebuffer, gl_picmip, gl_picmip2d, gl_max_size, r_stains, r_bloodstains, r_stainfadetime, r_stainfadeammount, gl_skyboxdist, r_drawflat, gl_schematics;
|
||
#if defined(GLQUAKE)
|
||
extern cvar_t gl_texture_anisotropic_filtering, gl_texturemode, gl_playermip;
|
||
#endif
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, sizeof(*info));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
#if !defined(MINIMAL) && defined(GLQUAKE)
|
||
|
||
if (r_bloom_sample_size.value >= 512)
|
||
currentbloomsamplesize = 7;
|
||
else if (r_bloom_sample_size.value == 384)
|
||
currentbloomsamplesize = 6;
|
||
else if (r_bloom_sample_size.value == 256)
|
||
currentbloomsamplesize = 5;
|
||
else if (r_bloom_sample_size.value == 192)
|
||
currentbloomsamplesize = 4;
|
||
else if (r_bloom_sample_size.value == 128)
|
||
currentbloomsamplesize = 3;
|
||
else if (r_bloom_sample_size.value == 96)
|
||
currentbloomsamplesize = 2;
|
||
else if (r_bloom_sample_size.value == 64)
|
||
currentbloomsamplesize = 1;
|
||
else if (r_bloom_sample_size.value <= 32)
|
||
currentbloomsamplesize = 0;
|
||
else
|
||
currentbloomsamplesize = 0;
|
||
|
||
if (r_bloom_diamond_size.value >= 10)
|
||
currentbloomdiamond = 4;
|
||
else if (r_bloom_diamond_size.value >= 8)
|
||
currentbloomdiamond = 3;
|
||
else if (r_bloom_diamond_size.value >= 6)
|
||
currentbloomdiamond = 2;
|
||
else if (r_bloom_diamond_size.value >= 4)
|
||
currentbloomdiamond = 1;
|
||
else if (r_bloom_diamond_size.value <= 2)
|
||
currentbloomdiamond = 0;
|
||
else
|
||
currentbloomdiamond = 0;
|
||
#endif
|
||
|
||
#if defined(GLQUAKE)
|
||
if (!Q_strcasecmp(gl_texturemode.string, "gl_nearest_mipmap_nearest"))
|
||
currenttexturefilter = 0;
|
||
else if (!Q_strcasecmp(gl_texturemode.string, "gl_linear_mipmap_linear"))
|
||
currenttexturefilter = 2;
|
||
else if (!Q_strcasecmp(gl_texturemode.string, "gl_linear_mipmap_nearest"))
|
||
currenttexturefilter = 1;
|
||
else
|
||
currenttexturefilter = 1;
|
||
|
||
if (gl_texture_anisotropic_filtering.value >= 16)
|
||
currentanisotropylevel = 4;
|
||
else if (gl_texture_anisotropic_filtering.value == 8)
|
||
currentanisotropylevel = 3;
|
||
else if (gl_texture_anisotropic_filtering.value == 4)
|
||
currentanisotropylevel = 2;
|
||
else if (gl_texture_anisotropic_filtering.value == 2)
|
||
currentanisotropylevel = 1;
|
||
else if (gl_texture_anisotropic_filtering.value <= 1)
|
||
currentanisotropylevel = 0;
|
||
else
|
||
currentanisotropylevel = 0;
|
||
#else
|
||
currenttexturefilter = 0;
|
||
currentanisotropylevel = 0;
|
||
#endif
|
||
|
||
if (gl_max_size.value >= 8192)
|
||
currentmaxtexturesize = 9;
|
||
else if (gl_max_size.value == 4096)
|
||
currentmaxtexturesize = 8;
|
||
else if (gl_max_size.value == 2048)
|
||
currentmaxtexturesize = 7;
|
||
else if (gl_max_size.value == 1024)
|
||
currentmaxtexturesize = 6;
|
||
else if (gl_max_size.value == 768)
|
||
currentmaxtexturesize = 5;
|
||
else if (gl_max_size.value == 512)
|
||
currentmaxtexturesize = 4;
|
||
else if (gl_max_size.value == 384)
|
||
currentmaxtexturesize = 3;
|
||
else if (gl_max_size.value == 256)
|
||
currentmaxtexturesize = 2;
|
||
else if (gl_max_size.value == 196)
|
||
currentmaxtexturesize = 1;
|
||
else if (gl_max_size.value <= 128)
|
||
currentmaxtexturesize = 0;
|
||
else
|
||
currentmaxtexturesize = 0;
|
||
|
||
MC_AddRedText(menu, 16, y, " Texturing Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
info->texturefiltercombo = MC_AddCombo(menu, 16, y, " Texture Filter", texturefilternames, currenttexturefilter); y+=8;
|
||
info->anisotropycombo = MC_AddCombo(menu, 16, y, " Anisotropy Level", anisotropylevels, currentanisotropylevel); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " 32bit Textures", &gl_load24bit,0); y+=8;
|
||
#if !defined(MINIMAL) && defined(GLQUAKE)
|
||
MC_AddCheckBox(menu, 16, y, " Bloom", &r_bloom,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Bloom Fast Sample", &r_bloom_fast_sample,0); y+=8;
|
||
info->bloomsamplesizecombo = MC_AddCombo(menu,16, y," Bloom Sample Size", bloomsamplesizeoptions, currentbloomsamplesize); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Bloom Darken", &r_bloom_darken,0,5,0.25); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Bloom Intensity", &r_bloom_intensity,0,20,1); y+=8;
|
||
info->bloomdiamondcombo = MC_AddCombo(menu,16, y, " Bloom Diamond Size", bloomdiamondoptions, currentbloomdiamond); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Bloom Alpha", &r_bloom_alpha,0,1,0.1); y+=8;
|
||
#endif
|
||
MC_AddCheckBox(menu, 16, y, " Bumpmapping", &gl_bump,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Specular Highlights", &gl_specular,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Texture Detail", &gl_detail,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Texture Detail Scale", &gl_detailscale,0,10,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Texture Compression", &gl_compress,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, "Save Compressed Textures", &gl_savecompressedtex,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Triple Buffering", &gl_triplebuffer,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " 3D Texture Picmip", &gl_picmip,0,16,1); y+=8;
|
||
MC_AddSlider(menu, 16, y, " 2D Texture Picmip", &gl_picmip2d,0,16,1); y+=8;
|
||
#ifdef GLQUAKE
|
||
MC_AddSlider(menu, 16, y, " Model Texture Picmip", &gl_playermip,0,16,1); y+=8;
|
||
#endif
|
||
info->maxtexturesizecombo = MC_AddCombo(menu,16, y, " Maximum Texture Size", texturesizeoptions, currentmaxtexturesize); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Stain Maps", &r_stains,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Blood Stains", &r_bloodstains,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Stain Fade Time (secs)", &r_stainfadetime,0,30,0.5); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Stain Fade Ammount", &r_stainfadeammount,0,30,1); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Skybox Distance", &gl_skyboxdist,0,10000,100); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Draw Flat Surfaces", &r_drawflat,0,2,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Map Schematics", &gl_schematics,0); y+=8;
|
||
y+=8;
|
||
MC_AddCommand(menu, 16, y, " Apply", M_VideoApplyTextures); y+=8;
|
||
|
||
menu->selecteditem = (union menuoption_s *)info->texturefiltercombo;
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 220, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
typedef struct {
|
||
menucombo_t *loadlitcombo;
|
||
} shadowlightingmenuinfo_t;
|
||
|
||
qboolean M_VideoApplyShadowLighting (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
shadowlightingmenuinfo_t *info = menu->data;
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
switch(info->loadlitcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("r_loadlit 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("r_loadlit 1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("r_loadlit 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
Cbuf_AddText("vid_restart\n", RESTRICT_LOCAL);
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_shadow_lighting\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
void M_Menu_Shadow_Lighting_f (void)
|
||
{
|
||
shadowlightingmenuinfo_t *info;
|
||
int cursorpositionY;
|
||
int currentloadlit;
|
||
#ifndef MINIMAL
|
||
extern cvar_t r_vertexlight;
|
||
#endif
|
||
extern cvar_t r_noaliasshadows, r_shadows, r_shadow_realtime_world, r_loadlits, gl_maxshadowlights, r_lightmap_saturation, r_dynamic, r_vertexdlights, r_lightstylesmooth, r_lightstylespeed, r_nolightdir, r_shadow_realtime_world_lightmaps, r_glsl_offsetmapping, r_glsl_offsetmapping_scale, r_shadow_bumpscale_basetexture, r_shadow_bumpscale_bumpmap, r_fb_bmodels, r_fb_models, gl_overbright, r_rocketlight, r_powerupglow, v_powerupshell, r_lightflicker, r_explosionlight;
|
||
|
||
static const char *loadlitoptions[] =
|
||
{
|
||
"Off",
|
||
"On",
|
||
"On (Regenerate Lighting)",
|
||
NULL
|
||
};
|
||
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, sizeof(*info));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
currentloadlit = r_loadlits.value;
|
||
|
||
menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Shadow & Lighting Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
//MC_AddSlider(menu, 16, y, " Light Map Mode", &gl_lightmapmode,0,2,1); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Light Map Saturation", &r_lightmap_saturation,0,1,0.1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Dynamic Lighting", &r_dynamic,0); y+=8;
|
||
#ifndef MINIMAL
|
||
MC_AddCheckBox(menu, 16, y, " Vertex Lighting", &r_vertexlight,0); y+=8;
|
||
#endif
|
||
MC_AddCheckBox(menu, 16, y, " Dynamic Vertex Lights", &r_vertexdlights,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Lightstyle Smoothing", &r_lightstylesmooth,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Lightstyle Animation Speed", &r_lightstylespeed,0,50,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Fullbright BSP Models", &r_fb_bmodels,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Fullbright Alias Models", &r_fb_models,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Overbright Bits", &gl_overbright,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Rocket Dynamic Lighting", &r_rocketlight,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Powerup Glow", &r_powerupglow,0,2,1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Powerup Shell", &v_powerupshell,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Light Flickering", &r_lightflicker,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Explosion Light", &r_explosionlight,0,1,0.1); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Surface Direction Model Lighting", &r_nolightdir,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Alias Model Shadows", &r_noaliasshadows,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Realtime World Lighting", &r_shadow_realtime_world,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Realtime World Shadows", &r_shadow_realtime_world_shadows,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Realtime World Lightmaps", &r_shadow_realtime_world_lightmaps,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Realtime Dynamic Lights", &r_shadow_realtime_dlight,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Realtime Dynamic Light Shadows", &r_shadow_realtime_dlight_shadows,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " GLSL Offsetmapping", &r_glsl_offsetmapping,0); y+=8;
|
||
MC_AddSlider(menu, 16, y, " GLSL Offsetmapping Scale", &r_glsl_offsetmapping_scale,0,-1,0.01); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Shadow Bumpscale Basetexture", &r_shadow_bumpscale_basetexture,0,10,1); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Shadow Bumpscale Bumpmap", &r_shadow_bumpscale_bumpmap,0,50,1); y+=8;
|
||
info->loadlitcombo = MC_AddCombo(menu,16, y, " LIT Loading", loadlitoptions, currentloadlit); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Maximum Shadow Lights", &gl_maxshadowlights,0,1000,2); y+=8;
|
||
y+=8;
|
||
MC_AddCommand(menu, 16, y, " Apply", M_VideoApplyShadowLighting); y+=8;
|
||
|
||
menu->selecteditem = (union menuoption_s *)info->loadlitcombo;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 285, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
typedef struct {
|
||
menucombo_t *noskinscombo;
|
||
} teamplaymenuinfo_t;
|
||
|
||
qboolean M_Apply_Teamplay (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
teamplaymenuinfo_t *info = menu->data;
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
switch(info->noskinscombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("noskins 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("noskins 1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("noskins 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_teamplay\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
void M_Menu_Teamplay_f (void)
|
||
{
|
||
static const char *noskinsoptions[] =
|
||
{
|
||
"Enable Skins (Download)",
|
||
"Disable Skins",
|
||
"Enable Skins (No Download))",
|
||
NULL
|
||
};
|
||
|
||
teamplaymenuinfo_t *info;
|
||
int cursorpositionY;
|
||
int currentnoskins;
|
||
extern cvar_t cl_parseSay, cl_triggers, tp_forceTriggers, tp_loadlocs, cl_parseFunChars, cl_noblink, noskins;
|
||
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, sizeof(*info));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
currentnoskins = noskins.value;
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Options", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
|
||
info->noskinscombo = MC_AddCombo(menu, 16, y, " Skins", noskinsoptions, currentnoskins); y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Enemy Skin", "cl_enemyskin"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Team Skin", "cl_teamskin"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Base Skin", "baseskin"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Fake Name", "cl_fakename"); y+=8+4;
|
||
MC_AddCheckBox(menu, 16, y, " Parse Fun Chars", &cl_parseFunChars,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Parse Macros", &cl_parseSay,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Load Locs", &tp_loadlocs,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " No Blink", &cl_noblink,0); y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Sound Trigger", "tp_soundtrigger"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Fake Name", "cl_fakename"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Weapon Order", "tp_weapon_order"); y+=8+4;
|
||
MC_AddCheckBox(menu, 16, y, " Teamplay Triggers", &cl_triggers,0); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, "Force Teamplay Triggers", &tp_forceTriggers,0); y+=8;
|
||
|
||
MC_AddCommand(menu, 16, y, " Apply", M_Apply_Teamplay); y+=8;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "Teamplay Location Names", "menu_teamplay_locations\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Teamplay Item Needs", "menu_teamplay_needs\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->selecteditem = (union menuoption_s *)info->noskinscombo;
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Locations_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Location Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Green Armor ", "loc_name_ga"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Grenade Launcher", "loc_name_gl"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Lightning Gun", "loc_name_lg"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Nailgun", "loc_name_ng"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Pentagram", "loc_name_pent"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Quad", "loc_name_quad"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Red Armor", "loc_name_ra"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Ring", "loc_name_ring"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Rocket Launcher", "loc_name_rl"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Seperator", "loc_name_seperator"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Super Nailgun", "loc_name_sng"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Super Shotgun", "loc_name_ssg"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Suit", "loc_name_suit"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Yellow Armor", "loc_name_ya"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Options", "menu_teamplay\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 232, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Needs_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Needed Items", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Cells", "tp_need_cells"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Green Armor", "tp_need_ga"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Health", "tp_need_health"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Nails", "tp_need_nails"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Red Armor", "tp_need_ra"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Rocket Launcher", "tp_need_rl"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Rockets", "tp_need_rockets"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Shells", "tp_need_shells"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Weapon", "tp_need_weapon"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Yellow Armor", "tp_need_ya"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Options", "menu_teamplay\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Item Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " -> Teamplay Armor Names", "menu_teamplay_armor\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " -> Teamplay Weapon Names", "menu_teamplay_weapons\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " -> Teamplay Powerup Names", "menu_teamplay_powerups\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " -> Teamplay Ammo & Health Names", "menu_teamplay_ammo_health\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " -> Teamplay Team Fortress Item Names", "menu_teamplay_team_fortress\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " -> Teamplay Status, Location & Misc Names", "menu_teamplay_status_location_misc\n"); y+=8;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " <- Teamplay Options", "menu_teamplay\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 64, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_Armor_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Armor Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Armor", "tp_name_armor"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Armor Type - Green", "tp_name_armortype_ga"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Armor Type - Red", "tp_name_armortype_ra"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Armor Type - Yellow", "tp_name_armortype_ya"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Green Armor", "tp_name_ga"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Red Armor", "tp_name_ra"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Yellow Armor", "tp_name_ya"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 232, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_Weapons_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Weapon Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Axe", "tp_name_axe"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Grenade Launcher", "tp_name_gl"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Lightning Gun", "tp_name_lg"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Nailgun", "tp_name_ng"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Rocket Launcher", "tp_name_rl"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Shotgun", "tp_name_sg"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Super Nailgun", "tp_name_sng"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Super Shotgun", "tp_name_ssg"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Weapon", "tp_name_weapon"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_Powerups_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Powerup Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Pentagram", "tp_name_pent"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Pented", "tp_name_pented"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Quad", "tp_name_quad"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Quaded", "tp_name_quaded"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Ring", "tp_name_ring"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Eyes (Ring)", "tp_name_eyes"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Resistance Rune", "tp_name_rune_1"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Strength Rune", "tp_name_rune_2"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Haste Rune", "tp_name_rune_3"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Regeneration Rune", "tp_name_rune_4"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Suit", "tp_name_suit"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_Ammo_Health_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Ammo & Health Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Backpack", "tp_name_backpack"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Cells", "tp_name_cells"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Nails", "tp_name_nails"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Rockets", "tp_name_rockets"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Shells", "tp_name_shells"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Health", "tp_name_health"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Mega Health", "tp_name_mh"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_Team_Fortress_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Team Fortress Item Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Sentry Gun", "tp_name_sentry"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Dispenser", "tp_name_disp"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Flag", "tp_name_flag"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
void M_Menu_Teamplay_Items_Status_Location_Misc_f (void)
|
||
{
|
||
menu_t *menu;
|
||
int cursorpositionY;
|
||
|
||
int y;
|
||
menu = M_Options_Title(&y, 0);
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
//menu->selecteditem = (union menuoption_s *)
|
||
|
||
MC_AddRedText(menu, 16, y, " Teamplay Status, Location & Misc. Names", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " At (Location)", "tp_name_at"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Enemy", "tp_name_enemy"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " None", "tp_name_none"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Nothing", "tp_name_nothing"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Seperator", "tp_name_seperator"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Someplace", "tp_name_someplace"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Status Blue", "tp_name_status_blue"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Status Green", "tp_name_status_green"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Status Red", "tp_name_status_red"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Status Yellow", "tp_name_status_yellow"); y+=8+4;
|
||
y+=4;MC_AddEditCvar(menu, 16, y, " Teammate", "tp_name_teammate"); y+=8+4;
|
||
|
||
y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "<- Teamplay Item Names", "menu_teamplay_items\n"); y+=8;
|
||
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 200, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
typedef struct {
|
||
menucombo_t *skillcombo;
|
||
menucombo_t *mapcombo;
|
||
} singleplayerinfo_t;
|
||
|
||
static const char *maplist_q1[] =
|
||
{
|
||
"start",
|
||
"e1m1",
|
||
"e1m2",
|
||
"e1m3",
|
||
"e1m4",
|
||
"e1m5",
|
||
"e1m6",
|
||
"e1m7",
|
||
"e1m8",
|
||
"e2m1",
|
||
"e2m2",
|
||
"e2m3",
|
||
"e2m4",
|
||
"e2m5",
|
||
"e2m6",
|
||
"e2m7",
|
||
"e3m1",
|
||
"e3m2",
|
||
"e3m3",
|
||
"e3m4",
|
||
"e3m5",
|
||
"e3m6",
|
||
"e3m7",
|
||
"e4m1",
|
||
"e4m2",
|
||
"e4m3",
|
||
"e4m4",
|
||
"e4m5",
|
||
"e4m6",
|
||
"e4m7",
|
||
"e4m8",
|
||
"end"
|
||
};
|
||
static const char *mapoptions_q1[] =
|
||
{
|
||
"Start (Introduction)",
|
||
"E1M1 (The Slipgate Complex)",
|
||
"E1M2 (Castle Of The Damned)",
|
||
"E1M3 (The Necropolis)",
|
||
"E1M4 (The Grisly Grotto)",
|
||
"E1M5 (Gloom Keep)",
|
||
"E1M6 (The Door To Chthon)",
|
||
"E1M7 (The House Of Chthon)",
|
||
"E1M8 (Ziggarat Vertigo)",
|
||
"E2M1 (The Installation)",
|
||
"E2M2 (The Ogre Citadel)",
|
||
"E2M3 (The Crypt Of Decay)",
|
||
"E2M4 (The Ebon Fortress)",
|
||
"E2M5 (The Wizard's Manse)",
|
||
"E2M6 (The Dismal Oubliette",
|
||
"E2M7 (The Underearth)",
|
||
"E3M1 (Termination Central)",
|
||
"E3M2 (The Vaults Of Zin)",
|
||
"E3M3 (The Tomb Of Terror)",
|
||
"E3M4 (Satan's Dark Delight)",
|
||
"E3M5 (The Wind Tunnels)",
|
||
"E3M6 (Chambers Of Torment)",
|
||
"E3M7 (Tha Haunted Halls)",
|
||
"E4M1 (The Sewage System)",
|
||
"E4M2 (The Tower Of Despair)",
|
||
"E4M3 (The Elder God Shrine)",
|
||
"E4M4 (The Palace Of Hate)",
|
||
"E4M5 (Hell's Atrium)",
|
||
"E4M6 (The Pain Maze)",
|
||
"E4M7 (Azure Agony)",
|
||
"E4M8 (The Nameless City)",
|
||
"End (Shub-Niggurath's Pit)",
|
||
NULL
|
||
};
|
||
|
||
|
||
static const char *maplist_q2[] =
|
||
{
|
||
"base1",
|
||
"base2",
|
||
"base3",
|
||
"train",
|
||
"bunk1",
|
||
"ware1",
|
||
"ware2",
|
||
"jail1",
|
||
"jail2",
|
||
"jail3",
|
||
"jail4",
|
||
"jail5",
|
||
"security",
|
||
"mintro",
|
||
"mine1",
|
||
"mine2",
|
||
"mine3",
|
||
"mine4",
|
||
"fact1",
|
||
"fact3",
|
||
"fact2",
|
||
"power1",
|
||
"power2",
|
||
"cool1",
|
||
"waste1",
|
||
"waste2",
|
||
"waste3",
|
||
"biggun",
|
||
"hangar1",
|
||
"space",
|
||
"lab",
|
||
"hangar2",
|
||
"command",
|
||
"strike",
|
||
"city1",
|
||
"city2",
|
||
"city3",
|
||
"boss1",
|
||
"boss2"
|
||
};
|
||
static const char *mapoptions_q2[] =
|
||
{
|
||
"base1 (Unit 1 Base Unit: Outer Base)",
|
||
"base2 (Unit 1 Base Unit: Installation)",
|
||
"base3 (Unit 1 Base Unit: Comm Center)",
|
||
"train (Unit 1 Base Unit: Lost Station)",
|
||
"bunk1 (Unit 2 Warehouse Unit: Ammo Depot)",
|
||
"ware1 (Unit 2 Warehouse Unit: Supply Station)",
|
||
"ware2 (Unit 2 Warehouse Unit: Warehouse)",
|
||
"jail1 (Unit 3 Jail Unit: Main Gate)",
|
||
"jail2 (Unit 3 Jail Unit: Destination Center)",
|
||
"jail3 (Unit 3 Jail Unit: Security Compex)",
|
||
"jail4 (Unit 3 Jail Unit: Torture Chambers)",
|
||
"jail5 (Unit 3 Jail Unit: Guard House)",
|
||
"security (Unit 3 Jail Unit: Grid Control)",
|
||
"mintro (Unit 4 Mine Unit: Mine Entrance)",
|
||
"mine1 (Unit 4 Mine Unit: Upper Mines)",
|
||
"mine2 (Unit 4 Mine Unit: Borehole)",
|
||
"mine3 (Unit 4 Mine Unit: Drilling Area)",
|
||
"mine4 (Unit 4 Mine Unit: Lower Mines)",
|
||
"fact1 (Unit 5 Factory Unit: Receiving Center)",
|
||
"fact3 (Unit 5 Factory Unit: Sudden Death)",
|
||
"fact2 (Unit 5 Factory Unit: Processing Plant)",
|
||
"power1 (Unit 6 Power Unit/Big Gun: Power Plant)",
|
||
"power2 (Unit 6 Power Unit/Big Gun: The Reactor)",
|
||
"cool1 (Unit 6 Power Unit/Big Gun: Cooling Facility)",
|
||
"waste1 (Unit 6 Power Unit/Big Gun: Toxic Waste Dump)",
|
||
"waste2 (Unit 6 Power Unit/Big Gun: Pumping Station 1)",
|
||
"waste3 (Unit 6 Power Unit/Big Gun: Pumping Station 2)",
|
||
"biggun (Unit 6 Power Unit/Big Gun: Big Gun)",
|
||
"hangar1 (Unit 7 Hangar Unit: Outer Hangar)",
|
||
"space (Unit 7 Hangar Unit: Comm Satelite)",
|
||
"lab (Unit 7 Hangar Unit: Research Lab)",
|
||
"hangar2 (Unit 7 Hangar Unit: Inner Hangar)",
|
||
"command (Unit 7 Hangar Unit: Launch Command)",
|
||
"strike (Unit 7 Hangar Unit: Outlands)",
|
||
"city1 (Unit 8 City Unit: Outer Courts)",
|
||
"city2 (Unit 8 City Unit: Lower Palace)",
|
||
"city3 (Unit 8 City Unit: Upper Palace)",
|
||
"boss1 (Unit 9 Boss Levels: Inner Chamber)",
|
||
"boss2 (Unit 9 Boss Levels: Final Showdown)",
|
||
NULL
|
||
};
|
||
|
||
qboolean M_Apply_SP_Cheats (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
singleplayerinfo_t *info = menu->data;
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
switch(info->skillcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("skill 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("skill 1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("skill 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("skill 3\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
if ((unsigned int)info->mapcombo->selectedoption >= sizeof(maplist_q1)/sizeof(maplist_q1[0]))
|
||
Cbuf_AddText(va("map %s\n", maplist_q1[info->mapcombo->selectedoption]), RESTRICT_LOCAL);
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_spcheats\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
|
||
void M_Menu_Singleplayer_Cheats_f (void)
|
||
{
|
||
static const char *skilloptions[] =
|
||
{
|
||
"Easy",
|
||
"Normal",
|
||
"Hard",
|
||
"Nightmare",
|
||
"None Set",
|
||
NULL
|
||
};
|
||
|
||
singleplayerinfo_t *info;
|
||
int cursorpositionY;
|
||
#ifndef CLIENTONLY
|
||
int currentskill;
|
||
int currentmap;
|
||
extern cvar_t sv_gravity, sv_cheats, sv_maxspeed, skill;
|
||
extern cvar_t host_mapname;
|
||
#endif
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, sizeof(*info));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
#ifndef CLIENTONLY
|
||
currentskill = skill.value;
|
||
if ( !currentskill )
|
||
currentskill = 4; // no skill selected
|
||
|
||
for (currentmap = sizeof(maplist_q1)/sizeof(maplist_q1[0]) - 1; currentmap > 0; currentmap--)
|
||
if (!strcmp(host_mapname.string, maplist_q1[currentmap]))
|
||
break;
|
||
/*anything that doesn't match will end up with 0*/
|
||
#endif
|
||
|
||
MC_AddRedText(menu, 16, y, " Quake Singleplayer Cheats", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
#ifndef CLIENTONLY
|
||
info->skillcombo = MC_AddCombo(menu,16, y, " Difficulty", skilloptions, currentskill); y+=8;
|
||
info->mapcombo = MC_AddCombo(menu,16, y, " Map", mapoptions_q1, currentmap); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Cheats", &sv_cheats,0); y+=8;
|
||
#endif
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Godmode", "god\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Flymode", "fly\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Noclip", "noclip\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Quad Damage", "impulse 255\n"); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddSlider(menu, 16, y, " Gravity", &sv_gravity,0,800,25); y+=8;
|
||
#endif
|
||
MC_AddSlider(menu, 16, y, " Forward Speed", &cl_forwardspeed,0,1000,50); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Side Speed", &cl_sidespeed,0,1000,50); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Back Speed", &cl_backspeed,0,1000,50); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddSlider(menu, 16, y, " Max Movement Speed", &sv_maxspeed,0,1000,50); y+=8;
|
||
#endif
|
||
MC_AddConsoleCommand(menu, 16, y, " Silver & Gold Keys", "impulse 13\nimpulse 14\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "All Weapons & Items", "impulse 9\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "No Enemy Targetting", "notarget\n"); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddConsoleCommand(menu, 16, y, " Restart Map", "restart\n"); y+=8;
|
||
#else
|
||
MC_AddConsoleCommand(menu, 16, y, " Suicide", "kill\n"); y+=8;
|
||
#endif
|
||
|
||
y+=8;
|
||
MC_AddCommand(menu, 16, y, " Apply Changes", M_Apply_SP_Cheats); y+=8;
|
||
|
||
menu->selecteditem = (union menuoption_s *)info->skillcombo;
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 170, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
// Quake 2
|
||
|
||
typedef struct {
|
||
menucombo_t *skillcombo;
|
||
menucombo_t *mapcombo;
|
||
} singleplayerq2info_t;
|
||
|
||
qboolean M_Apply_SP_Cheats_Q2 (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
singleplayerq2info_t *info = menu->data;
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
switch(info->skillcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("skill 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("skill 1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("skill 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
if ((unsigned int)info->mapcombo->selectedoption >= sizeof(maplist_q2)/sizeof(maplist_q2[0]))
|
||
Cbuf_AddText(va("map %s\n", maplist_q2[info->mapcombo->selectedoption]), RESTRICT_LOCAL);
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_quake2_spcheats\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
|
||
void M_Menu_Singleplayer_Cheats_Quake2_f (void)
|
||
{
|
||
|
||
static const char *skilloptions[] =
|
||
{
|
||
"Easy",
|
||
"Normal",
|
||
"Hard",
|
||
"None Set",
|
||
NULL
|
||
};
|
||
|
||
singleplayerq2info_t *info;
|
||
int cursorpositionY;
|
||
#ifndef CLIENTONLY
|
||
int currentskill;
|
||
int currentmap;
|
||
extern cvar_t sv_gravity, sv_cheats, sv_maxspeed, skill;
|
||
extern cvar_t host_mapname;
|
||
#endif
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, sizeof(*info));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
#ifndef CLIENTONLY
|
||
currentskill = skill.value;
|
||
|
||
if ( !currentskill )
|
||
currentskill = 4; // no skill selected
|
||
|
||
for (currentmap = sizeof(maplist_q2)/sizeof(maplist_q2[0]) - 1; currentmap > 0; currentmap--)
|
||
if (!strcmp(host_mapname.string, maplist_q2[currentmap]))
|
||
break;
|
||
/*anything that doesn't match will end up with 0*/
|
||
#endif
|
||
|
||
MC_AddRedText(menu, 16, y, " Quake2 Singleplayer Cheats", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
#ifndef CLIENTONLY
|
||
info->skillcombo = MC_AddCombo(menu,16, y, " Difficulty", skilloptions, currentskill); y+=8;
|
||
info->mapcombo = MC_AddCombo(menu,16, y, " Map", mapoptions_q2, currentmap); y+=8;
|
||
MC_AddCheckBox(menu, 16, y, " Cheats", &sv_cheats,0); y+=8;
|
||
#endif
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Godmode", "god\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Noclip", "noclip\n"); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddSlider(menu, 16, y, " Gravity", &sv_gravity,0,850,25); y+=8;
|
||
#endif
|
||
MC_AddSlider(menu, 16, y, " Forward Speed", &cl_forwardspeed,0,1000,50); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Side Speed", &cl_sidespeed,0,1000,50); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Back Speed", &cl_backspeed,0,1000,50); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddSlider(menu, 16, y, " Max Movement Speed", &sv_maxspeed,0,1000,50); y+=8;
|
||
#endif
|
||
MC_AddConsoleCommand(menu, 16, y, " Unlimited Ammo", "dmflags 8192\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Quad Damage", "give quad damage\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Blue & Red Key", "give blue key\ngive red key\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Pyramid Key", "give pyramid key\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "All Weapons & Items", "give all\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Data Spinner", "give data spinner\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Power Cube", "give power cube\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Data CD", "give data cd\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Ammo Pack", "give ammo pack\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Bandolier", "give bandolier\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Adrenaline", "give adrenaline\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Ancient Head", "give ancient head\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Environment Suit", "give environment suit\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Rebreather", "give rebreather\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Invulnerability", "give invulnerability\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Silencer", "give silencer\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Power Shield", "give power shield\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Commander's Head", "give commander's head\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Security Pass", "give security pass\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Airstrike Marker", "give airstrike marker\n"); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddConsoleCommand(menu, 16, y, " Restart Map", va("restart\n")); y+=8;
|
||
#endif
|
||
|
||
y+=8;
|
||
MC_AddCommand(menu, 16, y, " Apply Changes", M_Apply_SP_Cheats_Q2); y+=8;
|
||
|
||
menu->selecteditem = (union menuoption_s *)info->skillcombo;
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 170, cursorpositionY, NULL, false);
|
||
}
|
||
|
||
// Hexen 2
|
||
|
||
// Quake 2
|
||
|
||
typedef struct {
|
||
menucombo_t *skillcombo;
|
||
menucombo_t *mapcombo;
|
||
} singleplayerh2info_t;
|
||
|
||
qboolean M_Apply_SP_Cheats_H2 (union menuoption_s *op,struct menu_s *menu,int key)
|
||
{
|
||
singleplayerh2info_t *info = menu->data;
|
||
|
||
if (key != K_ENTER)
|
||
return false;
|
||
|
||
switch(info->skillcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("skill 0\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("skill 1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("skill 2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("skill 3\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
switch(info->mapcombo->selectedoption)
|
||
{
|
||
case 0:
|
||
Cbuf_AddText("map demo1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 1:
|
||
Cbuf_AddText("map demo2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 2:
|
||
Cbuf_AddText("map demo3\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 3:
|
||
Cbuf_AddText("map village1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 4:
|
||
Cbuf_AddText("map village2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 5:
|
||
Cbuf_AddText("map village3\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 6:
|
||
Cbuf_AddText("map village4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 7:
|
||
Cbuf_AddText("map village5\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 8:
|
||
Cbuf_AddText("map rider1a\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 9:
|
||
Cbuf_AddText("map meso1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 10:
|
||
Cbuf_AddText("map meso2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 11:
|
||
Cbuf_AddText("map meso3\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 12:
|
||
Cbuf_AddText("map meso4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 13:
|
||
Cbuf_AddText("map meso5\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 14:
|
||
Cbuf_AddText("map meso6\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 15:
|
||
Cbuf_AddText("map meso8\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 16:
|
||
Cbuf_AddText("map meso9\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 17:
|
||
Cbuf_AddText("map egypt1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 18:
|
||
Cbuf_AddText("map egypt2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 19:
|
||
Cbuf_AddText("map egypt3\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 20:
|
||
Cbuf_AddText("map egypt4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 21:
|
||
Cbuf_AddText("map egypt5\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 22:
|
||
Cbuf_AddText("map egypt6\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 23:
|
||
Cbuf_AddText("map egypt7\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 24:
|
||
Cbuf_AddText("map rider2c\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 25:
|
||
Cbuf_AddText("map romeric1\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 26:
|
||
Cbuf_AddText("map romeric2\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 27:
|
||
Cbuf_AddText("map romeric3\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 28:
|
||
Cbuf_AddText("map romeric4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 29:
|
||
Cbuf_AddText("map romeric5\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 30:
|
||
Cbuf_AddText("map romeric6\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 31:
|
||
Cbuf_AddText("map romeric7\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 32:
|
||
Cbuf_AddText("map castle4\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 33:
|
||
Cbuf_AddText("map castle5\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 34:
|
||
Cbuf_AddText("map cath\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 35:
|
||
Cbuf_AddText("map tower\n", RESTRICT_LOCAL);
|
||
break;
|
||
case 36:
|
||
Cbuf_AddText("map eidolon\n", RESTRICT_LOCAL);
|
||
break;
|
||
}
|
||
|
||
M_RemoveMenu(menu);
|
||
Cbuf_AddText("menu_hexen2_spcheats\n", RESTRICT_LOCAL);
|
||
return true;
|
||
}
|
||
|
||
|
||
void M_Menu_Singleplayer_Cheats_Hexen2_f (void)
|
||
{
|
||
|
||
static const char *skilloptions[] =
|
||
{
|
||
"Easy",
|
||
"Normal",
|
||
"Hard",
|
||
"Nightmare",
|
||
"None Set",
|
||
NULL
|
||
};
|
||
|
||
static const char *mapoptions[] =
|
||
{
|
||
"demo1 (Blackmarsh: Hub 1 Blackmarsh)",
|
||
"demo2 (Barbican: Hub 1 Blackmarsh)",
|
||
"demo3 (The Mill: Hub 1 Blackmarsh)",
|
||
"village1 (King's Court: Hub 1 Blackmarsh)",
|
||
"village3 (Stables: Hub 1 Blackmarsh)",
|
||
"village2 (Inner Courtyard: Hub 1 Blackmarsh)",
|
||
"village4 (Palance Entrance: Hub 1 Blackmarsh)",
|
||
"village5 (The Forgotten Chapel: Hub 1 Blackmarsh)",
|
||
"rider1a (Famine's Domain: Hub 1 Blackmarsh)",
|
||
"meso1 (Palance of Columns: Hub 2 Mazaera)",
|
||
"meso2 (Plaza of the Sun: Hub 2 Mazaera)",
|
||
"meso3 (Square of the Stream: Hub 2 Mazaera)",
|
||
"meso4 (Tomb of the High Priest: Hub 2 Mazaera)",
|
||
"meso5 (Obelisk of the Moon: Hub 2 Mazaera)",
|
||
"meso6 (Court of 1000 Warriors: Hub 2 Mazaera)",
|
||
"meso8 (Bridge of Stars: Hub 2 Mazaera)",
|
||
"meso9 (Well of Souls: Hub 2 Mazaera)",
|
||
"egypt1 (Temple of Horus: Hub 3 Thysis)",
|
||
"egypt2 (Ancient Tempor of Nefertum: Hub 3 Thysis)",
|
||
"egypt3 (Tempor of Nefertum: Hub 3 Thysis)",
|
||
"egypt4 (Palace of the Pharaoh: Hub 3 Thysis",
|
||
"egypt5 (Pyramid of Anubus: Hub 3 Thysis)",
|
||
"egypt6 (Temple of Light: Hub 3 Thysis)",
|
||
"egypt7 (Shrine of Naos: Hub 3 Thysis)",
|
||
"rider2c (Pestilence's Lair: Hub 3 Thysis)",
|
||
"romeric1 (The Hall of Heroes: Hub 4 Septimus)",
|
||
"romeric2 (Gardens of Athena: Hub 4 Septimus)",
|
||
"romeric3 (Forum of Zeus: Hub 4 Septimus)",
|
||
"romeric4 (Baths of Demetrius: Hub 4 Septimus)",
|
||
"romeric5 (Temple of Mars: Hub 4 Septimus)",
|
||
"romeric6 (Coliseum of War: Hub 4 Septimus)",
|
||
"romeric7 (Reflecting Pool: Hub 4 Septimus)",
|
||
"castle4 (The Underhalls: Hub 5 Return to Blackmarsh)",
|
||
"castle5 (Eidolon's Ordeal: Hub 5 Return to Blackmarsh)",
|
||
"cath (Cathedral: Hub 5 Return to Blackmarsh)",
|
||
"tower (Tower of the Dark Mage: Hub 5 Return to Blackmarsh)",
|
||
"eidolon (Eidolon's Lair: Hub 5 Return to Blackmarsh)",
|
||
NULL
|
||
};
|
||
|
||
singleplayerh2info_t *info;
|
||
int cursorpositionY;
|
||
int currentmap;
|
||
#ifndef CLIENTONLY
|
||
int currentskill;
|
||
extern cvar_t sv_gravity, sv_cheats, sv_maxspeed, skill;
|
||
#endif
|
||
extern cvar_t host_mapname;
|
||
int y;
|
||
menu_t *menu = M_Options_Title(&y, sizeof(*info));
|
||
info = menu->data;
|
||
|
||
cursorpositionY = (y + 24);
|
||
|
||
#ifndef CLIENTONLY
|
||
currentskill = skill.value;
|
||
|
||
if ( !currentskill )
|
||
currentskill = 4; // no skill selected
|
||
#endif
|
||
|
||
if ( strcmp ( host_mapname.string, "" ) == 0)
|
||
currentmap = 0;
|
||
else if ( stricmp ( host_mapname.string, "demo1" ) == 0 )
|
||
currentmap = 0;
|
||
else if ( stricmp ( host_mapname.string, "demo2" ) == 0 )
|
||
currentmap = 1;
|
||
else if ( stricmp ( host_mapname.string, "demo3" ) == 0 )
|
||
currentmap = 2;
|
||
else if ( stricmp ( host_mapname.string, "village1" ) == 0 )
|
||
currentmap = 3;
|
||
else if ( stricmp ( host_mapname.string, "village2" ) == 0 )
|
||
currentmap = 4;
|
||
else if ( stricmp ( host_mapname.string, "village3" ) == 0 )
|
||
currentmap = 5;
|
||
else if ( stricmp ( host_mapname.string, "village4" ) == 0 )
|
||
currentmap = 6;
|
||
else if ( stricmp ( host_mapname.string, "village5" ) == 0 )
|
||
currentmap = 7;
|
||
else if ( stricmp ( host_mapname.string, "rider1a" ) == 0 )
|
||
currentmap = 8;
|
||
else if ( stricmp ( host_mapname.string, "meso1" ) == 0 )
|
||
currentmap = 9;
|
||
else if ( stricmp ( host_mapname.string, "meso2" ) == 0 )
|
||
currentmap = 10;
|
||
else if ( stricmp ( host_mapname.string, "meso3" ) == 0 )
|
||
currentmap = 11;
|
||
else if ( stricmp ( host_mapname.string, "meso4" ) == 0 )
|
||
currentmap = 12;
|
||
else if ( stricmp ( host_mapname.string, "meso5" ) == 0 )
|
||
currentmap = 13;
|
||
else if ( stricmp ( host_mapname.string, "meso6" ) == 0 )
|
||
currentmap = 14;
|
||
else if ( stricmp ( host_mapname.string, "meso8" ) == 0 )
|
||
currentmap = 15;
|
||
else if ( stricmp ( host_mapname.string, "meso9" ) == 0 )
|
||
currentmap = 16;
|
||
else if ( stricmp ( host_mapname.string, "egypt1" ) == 0 )
|
||
currentmap = 17;
|
||
else if ( stricmp ( host_mapname.string, "egypt2" ) == 0 )
|
||
currentmap = 18;
|
||
else if ( stricmp ( host_mapname.string, "egypt3" ) == 0 )
|
||
currentmap = 19;
|
||
else if ( stricmp ( host_mapname.string, "egypt4" ) == 0 )
|
||
currentmap = 20;
|
||
else if ( stricmp ( host_mapname.string, "egypt5" ) == 0 )
|
||
currentmap = 21;
|
||
else if ( stricmp ( host_mapname.string, "egypt6" ) == 0 )
|
||
currentmap = 22;
|
||
else if ( stricmp ( host_mapname.string, "egypt7" ) == 0 )
|
||
currentmap = 23;
|
||
else if ( stricmp ( host_mapname.string, "rider2c" ) == 0 )
|
||
currentmap = 24;
|
||
else if ( stricmp ( host_mapname.string, "romeric1" ) == 0 )
|
||
currentmap = 25;
|
||
else if ( stricmp ( host_mapname.string, "romeric2" ) == 0 )
|
||
currentmap = 26;
|
||
else if ( stricmp ( host_mapname.string, "romeric3" ) == 0 )
|
||
currentmap = 27;
|
||
else if ( stricmp ( host_mapname.string, "romeric4" ) == 0 )
|
||
currentmap = 28;
|
||
else if ( stricmp ( host_mapname.string, "romeric5" ) == 0 )
|
||
currentmap = 29;
|
||
else if ( stricmp ( host_mapname.string, "romeric6" ) == 0 )
|
||
currentmap = 30;
|
||
else if ( stricmp ( host_mapname.string, "romeric7" ) == 0 )
|
||
currentmap = 31;
|
||
else if ( stricmp ( host_mapname.string, "castle4" ) == 0 )
|
||
currentmap = 32;
|
||
else if ( stricmp ( host_mapname.string, "castle5" ) == 0 )
|
||
currentmap = 33;
|
||
else if ( stricmp ( host_mapname.string, "cath" ) == 0 )
|
||
currentmap = 34;
|
||
else if ( stricmp ( host_mapname.string, "tower" ) == 0 )
|
||
currentmap = 35;
|
||
else if ( stricmp ( host_mapname.string, "eidolon" ) == 0 )
|
||
currentmap = 36;
|
||
else
|
||
currentmap = 0;
|
||
|
||
MC_AddRedText(menu, 16, y, " Hexen2 Singleplayer Cheats", false); y+=8;
|
||
MC_AddWhiteText(menu, 16, y, " <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ", false); y+=8;
|
||
y+=8;
|
||
#ifndef CLIENTONLY
|
||
info->skillcombo = MC_AddCombo(menu,16, y, " Difficulty", skilloptions, currentskill); y+=8;
|
||
#endif
|
||
info->mapcombo = MC_AddCombo(menu,16, y, " Map", mapoptions, currentmap); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddCheckBox(menu, 16, y, " Cheats", &sv_cheats,0); y+=8;
|
||
#endif
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Godmode", "god\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Flymode", "fly\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Toggle Noclip", "noclip\n"); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddSlider(menu, 16, y, " Gravity", &sv_gravity,0,800,25); y+=8;
|
||
#endif
|
||
MC_AddSlider(menu, 16, y, " Forward Speed", &cl_forwardspeed,0,1000,50); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Side Speed", &cl_sidespeed,0,1000,50); y+=8;
|
||
MC_AddSlider(menu, 16, y, " Back Speed", &cl_backspeed,0,1000,50); y+=8;
|
||
#ifndef CLIENTONLY
|
||
MC_AddSlider(menu, 16, y, " Max Movement Speed", &sv_maxspeed,0,1000,50); y+=8;
|
||
#endif
|
||
MC_AddConsoleCommand(menu, 16, y, " Sheep Transformation", "impulse 14\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Change To Paladin (lvl3+)", "impulse 171\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Change To Crusader (lvl3+)", "impulse 172\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, "Change to Necromancer (lvl3+)", "impulse 173\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Change to Assassin (lvl3+)", "impulse 174\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Remove Monsters", "impulse 35\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Freeze Monsters", "impulse 36\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Unfreeze Monsters", "impulse 37\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Increase Level By 1", "impulse 40\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Increase Experience", "impulse 41\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Display Co-ordinates", "impulse 42\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " All Weapons & Mana", "impulse 9\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " All Weapons & Mana & Items", "impulse 43\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " No Enemy Targetting", "notarget\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Enable Crosshair", "crosshair 1\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " 20 Of Each Artifact", "impulse 299\n"); y+=8;
|
||
MC_AddConsoleCommand(menu, 16, y, " Restart Map", "impulse 99\n"); y+=8;
|
||
|
||
y+=8;
|
||
MC_AddCommand(menu, 16, y, " Apply Changes", M_Apply_SP_Cheats_H2); y+=8;
|
||
|
||
menu->selecteditem = (union menuoption_s *)info->skillcombo;
|
||
menu->cursoritem = (menuoption_t*)MC_AddWhiteText(menu, 250, cursorpositionY, NULL, false);
|
||
}
|