Subversion Repositories eduke32

Rev

Rev 5023 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 Plagman 1
//-------------------------------------------------------------------------
2
/*
1652 terminx 3
Copyright (C) 2010 EDuke32 developers and contributors
5 Plagman 4
 
1652 terminx 5
This file is part of EDuke32.
5 Plagman 6
 
7
EDuke32 is free software; you can redistribute it and/or
8
modify it under the terms of the GNU General Public License version 2
9
as published by the Free Software Foundation.
10
 
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
 
15
See the GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
4541 hendricks2 19
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
5 Plagman 20
*/
21
//-------------------------------------------------------------------------
22
 
5000 terminx 23
#include "compat.h"
5 Plagman 24
#include "duke3d.h"
4818 hendricks2 25
#include "renderlayer.h"
2290 helixhorne 26
#include "net.h"
27
#include "player.h"
5 Plagman 28
#include "mouse.h"
2728 hendricks2 29
#include "joystick.h"
5 Plagman 30
#include "osd.h"
911 terminx 31
#include "osdcmds.h"
1215 terminx 32
#include "gamedef.h"
1677 terminx 33
#include "gameexec.h"
34
#include "savegame.h"
35
#include "premap.h"
1678 terminx 36
#include "demo.h"
4387 terminx 37
#include "xxhash.h"
2556 helixhorne 38
#include "common.h"
2726 hendricks2 39
#include "common_game.h"
2728 hendricks2 40
#include "input.h"
3084 terminx 41
#include "menus.h"
1707 terminx 42
 
5 Plagman 43
#include <sys/stat.h>
44
 
4993 terminx 45
#include "android/in_android.h"
46
#ifndef __ANDROID__
47
droidinput_t droidinput;
48
#endif
49
 
4686 hendricks2 50
// common positions
51
#define MENU_MARGIN_REGULAR 40
52
#define MENU_MARGIN_WIDE    32
53
#define MENU_MARGIN_CENTER  160
54
#define MENU_HEIGHT_CENTER  100
55
 
4449 helixhorne 56
int32_t g_skillSoundVoice = -1;
5 Plagman 57
 
1205 terminx 58
extern int32_t voting;
147 terminx 59
 
921 terminx 60
#define USERMAPENTRYLENGTH 25
61
 
4686 hendricks2 62
#define mgametext(x,y,t) G_ScreenText(STARTALPHANUM, x, y, 65536, 0, 0, t, 0, 0, 2|8|16|ROTATESPRITE_FULL16, 0, (5<<16), (8<<16), (-1<<16), 0, TEXT_GAMETEXTNUMHACK, 0, 0, xdim-1, ydim-1)
4914 hendricks2 63
#define mgametextcenter(x,y,t) G_ScreenText(STARTALPHANUM, (MENU_MARGIN_CENTER<<16) + (x), y, 65536, 0, 0, t, 0, 0, 2|8|16|ROTATESPRITE_FULL16, 0, (5<<16), (8<<16), (-1<<16), (1<<16), TEXT_GAMETEXTNUMHACK|TEXT_XCENTER, 0, 0, xdim-1, ydim-1)
4686 hendricks2 64
#define mminitext(x,y,t,p) minitext_(x, y, t, 0, p, 2|8|16|ROTATESPRITE_FULL16)
65
#define mmenutext(x,y,t) G_ScreenText(BIGALPHANUM, x, (y) - (12<<16), 65536L, 0, 0, (const char *)OSD_StripColors(menutextbuf,t), 0, 0, 2|8|16|ROTATESPRITE_FULL16, 0, 5<<16, 16<<16, 0, 0, TEXT_BIGALPHANUM|TEXT_UPPERCASE|TEXT_LITERALESCAPE, 0, 0, xdim-1, ydim-1)
66
#define mmenutextcenter(x,y,t) G_ScreenText(BIGALPHANUM, (MENU_MARGIN_CENTER<<16) + (x), (y) - (12<<16), 65536L, 0, 0, (const char *)OSD_StripColors(menutextbuf,t), 0, 0, 2|8|16|ROTATESPRITE_FULL16, 0, 5<<16, 16<<16, 0, 0, TEXT_BIGALPHANUM|TEXT_UPPERCASE|TEXT_LITERALESCAPE|TEXT_XCENTER, 0, 0, xdim-1, ydim-1)
1037 terminx 67
 
4686 hendricks2 68
static void shadowminitext(int32_t x, int32_t y, const char *t, int32_t p)
69
{
70
    int32_t f = 0;
4496 hendricks2 71
 
4686 hendricks2 72
    if (!minitext_lowercase)
73
        f |= TEXT_UPPERCASE;
4496 hendricks2 74
 
4686 hendricks2 75
    G_ScreenTextShadow(1, 1, MINIFONT, x, y, 65536, 0, 0, t, 0, p, 2|8|16|ROTATESPRITE_FULL16, 0, 4<<16, 8<<16, 1<<16, 0, f, 0, 0, xdim-1, ydim-1);
76
}
77
static void creditsminitext(int32_t x, int32_t y, const char *t, int32_t p)
5 Plagman 78
{
4686 hendricks2 79
    int32_t f = TEXT_XCENTER;
80
 
81
    if (!minitext_lowercase)
82
        f |= TEXT_UPPERCASE;
83
 
84
    G_ScreenTextShadow(1, 1, MINIFONT, x, y, 65536, 0, 0, t, 0, p, 2|8|16|ROTATESPRITE_FULL16, 0, 4<<16, 8<<16, 1<<16, 0, f, 0, 0, xdim-1, ydim-1);
85
}
86
 
87
int32_t menutext_(int32_t x, int32_t y, int32_t s, int32_t p, char *t, int32_t bits)
88
{
4496 hendricks2 89
    vec2_t dim;
90
    int32_t f = TEXT_BIGALPHANUM|TEXT_UPPERCASE|TEXT_LITERALESCAPE;
5 Plagman 91
 
4686 hendricks2 92
    if (!(bits & ROTATESPRITE_FULL16))
93
    {
94
        x<<=16;
95
        y<<=16;
96
    }
97
 
98
    if (x == (160<<16))
4496 hendricks2 99
        f |= TEXT_XCENTER;
3101 hendricks2 100
 
4686 hendricks2 101
    dim = G_ScreenText(BIGALPHANUM, x, y - (12<<16), 65536L, 0, 0, t, s, p, bits|ROTATESPRITE_FULL16, 0, 5<<16, 16<<16, 0, 0, f, 0, 0, xdim-1, ydim-1);
3101 hendricks2 102
 
4686 hendricks2 103
    if (!(bits & ROTATESPRITE_FULL16))
104
        x >>= 16;
105
 
4496 hendricks2 106
    return dim.x;
3101 hendricks2 107
}
3084 terminx 108
 
4496 hendricks2 109
#pragma pack(push,1)
110
static savehead_t savehead;
111
#pragma pack(pop)
112
 
4686 hendricks2 113
static void M_DrawBackground(const vec2_t origin)
3101 hendricks2 114
{
4686 hendricks2 115
    rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,MENUSCREEN,16,0,10+64);
4496 hendricks2 116
}
3101 hendricks2 117
 
4686 hendricks2 118
static void M_DrawTopBar(const vec2_t origin)
4549 hendricks2 119
{
4686 hendricks2 120
    rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (19<<16), 65536L,0,MENUBAR,16,0,10);
4549 hendricks2 121
}
3101 hendricks2 122
 
4686 hendricks2 123
static void M_DrawTopBarCaption(const char *caption, const vec2_t origin)
4496 hendricks2 124
{
4624 terminx 125
    char *s = Bstrdup(caption), p = Bstrlen(caption)-1;
126
    if (s[p] == ':') s[p] = 0;
4686 hendricks2 127
    mmenutextcenter(origin.x, origin.y + (24<<16), s);
4624 terminx 128
    Bfree(s);
5 Plagman 129
}
130
 
4496 hendricks2 131
extern int32_t g_quitDeadline;
5 Plagman 132
 
133
 
134
 
135
 
1631 terminx 136
 
2728 hendricks2 137
 
5 Plagman 138
 
2313 helixhorne 139
 
5 Plagman 140
 
2313 helixhorne 141
 
142
 
143
 
144
 
4496 hendricks2 145
/*
146
All MAKE_* macros are generally for the purpose of keeping state initialization
147
separate from actual data. Alternatively, they can serve to factor out repetitive
148
stuff and keep the important bits from getting lost to our eyes.
4506 hendricks2 149
 
150
They serve as a stand-in for C++ default value constructors, since we're using C89.
4778 hendricks2 151
 
152
Note that I prefer to include a space on the inside of the macro parentheses, since
153
they effectively stand in for curly braces as struct initializers.
4496 hendricks2 154
*/
2313 helixhorne 155
 
156
 
4496 hendricks2 157
// common font types
158
// tilenums are set after namesdyn runs
4778 hendricks2 159
static MenuFont_t MF_Null             = { -1, 10,  0,  0,     0,      0,      0,     0, 0 };
160
static MenuFont_t MF_Redfont          = { -1, 10,  0,  1, 5<<16, 15<<16,  0<<16, 0<<16, TEXT_BIGALPHANUM | TEXT_UPPERCASE };
161
static MenuFont_t MF_RedfontBlue      = { -1, 10,  1,  1, 5<<16, 15<<16,  0<<16, 0<<16, TEXT_BIGALPHANUM | TEXT_UPPERCASE };
162
static MenuFont_t MF_RedfontGreen     = { -1, 10,  8,  1, 5<<16, 15<<16,  0<<16, 0<<16, TEXT_BIGALPHANUM | TEXT_UPPERCASE };
163
static MenuFont_t MF_Bluefont         = { -1, 10,  0, 16, 5<<16,  7<<16, -1<<16, 0<<16, 0 };
164
static MenuFont_t MF_BluefontRed      = { -1, 10, 10, 16, 5<<16,  7<<16, -1<<16, 0<<16, 0 };
165
static MenuFont_t MF_Minifont         = { -1, 10,  0, 16, 4<<16,  5<<16,  1<<16, 1<<16, 0 };
166
static MenuFont_t MF_MinifontRed      = { -1, 16, 21, 16, 4<<16,  5<<16,  1<<16, 1<<16, 0 };
167
static MenuFont_t MF_MinifontDarkGray = { -1, 10, 13, 16, 4<<16,  5<<16,  1<<16, 1<<16, 0 };
2313 helixhorne 168
 
169
 
4778 hendricks2 170
static MenuMenuFormat_t MMF_Top_Main =             { {  MENU_MARGIN_CENTER<<16, 55<<16, }, -170<<16 };
171
static MenuMenuFormat_t MMF_Top_Episode =          { {  MENU_MARGIN_CENTER<<16, 48<<16, }, -190<<16 };
172
static MenuMenuFormat_t MMF_Top_Skill =            { {  MENU_MARGIN_CENTER<<16, 58<<16, }, -190<<16 };
173
static MenuMenuFormat_t MMF_Top_Options =          { {  MENU_MARGIN_CENTER<<16, 38<<16, }, -190<<16 };
174
static MenuMenuFormat_t MMF_Top_Joystick_Network = { {  MENU_MARGIN_CENTER<<16, 70<<16, }, -190<<16 };
175
static MenuMenuFormat_t MMF_BigOptions =           { {    MENU_MARGIN_WIDE<<16, 38<<16, }, -190<<16 };
176
static MenuMenuFormat_t MMF_SmallOptions =         { {    MENU_MARGIN_WIDE<<16, 37<<16, },  160<<16 };
177
static MenuMenuFormat_t MMF_Macros =               { {                  26<<16, 40<<16, },  160<<16 };
178
static MenuMenuFormat_t MMF_SmallOptionsNarrow  =  { { MENU_MARGIN_REGULAR<<16, 38<<16, }, -190<<16 };
179
static MenuMenuFormat_t MMF_KeyboardSetupFuncs =   { {                  70<<16, 34<<16, },  151<<16 };
180
static MenuMenuFormat_t MMF_MouseJoySetupBtns =    { {                  76<<16, 34<<16, },  143<<16 };
181
static MenuMenuFormat_t MMF_FuncList =             { {                 100<<16, 51<<16, },  152<<16 };
182
static MenuMenuFormat_t MMF_ColorCorrect =         { { MENU_MARGIN_REGULAR<<16, 86<<16, },  190<<16 };
183
static MenuMenuFormat_t MMF_BigSliders =           { {    MENU_MARGIN_WIDE<<16, 37<<16, },  190<<16 };
184
static MenuMenuFormat_t MMF_LoadSave =             { {                 223<<16, 48<<16, },  320<<16 };
185
static MenuMenuFormat_t MMF_NetSetup =             { {                  36<<16, 38<<16, },  190<<16 };
4851 hendricks2 186
static MenuMenuFormat_t MMF_FileSelectLeft =       { {                  40<<16, 45<<16, },  162<<16 };
187
static MenuMenuFormat_t MMF_FileSelectRight =      { {                 164<<16, 45<<16, },  162<<16 };
4778 hendricks2 188
 
189
static MenuEntryFormat_t MEF_Null =             {     0,      0,        0,  20<<16, 65536 };
190
static MenuEntryFormat_t MEF_MainMenu =         { 4<<16,      0,        0, 110<<16, 65536 };
191
static MenuEntryFormat_t MEF_CenterMenu =       { 7<<16,      0,        0, 110<<16, 65536 };
192
static MenuEntryFormat_t MEF_BigOptions =       { 4<<16,      0,  190<<16,  20<<16, 65536 };
193
static MenuEntryFormat_t MEF_BigOptions_Apply = { 4<<16, 16<<16,  190<<16,  20<<16, 65536 };
194
static MenuEntryFormat_t MEF_BigOptionsRt =     { 4<<16,      0, -260<<16,  20<<16, 65536 };
195
#if defined USE_OPENGL || !defined DROIDMENU
196
static MenuEntryFormat_t MEF_SmallOptions =     { 1<<16,      0,  216<<16,  10<<16, 32768 };
4647 hendricks2 197
#endif
4778 hendricks2 198
static MenuEntryFormat_t MEF_PlayerNarrow =     { 1<<16,      0,   90<<16,  10<<16, 32768 };
4856 hendricks2 199
static MenuEntryFormat_t MEF_Macros =           { 2<<16,     -1,  268<<16,  10<<16, 32768 };
4778 hendricks2 200
static MenuEntryFormat_t MEF_VideoSetup =       { 4<<16,      0,  168<<16,  20<<16, 65536 };
201
static MenuEntryFormat_t MEF_FuncList =         { 3<<16,      0,  100<<16,  10<<16, 32768 };
202
static MenuEntryFormat_t MEF_ColorCorrect =     { 2<<16,      0, -240<<16,  20<<16, 65536 };
203
static MenuEntryFormat_t MEF_BigSliders =       { 2<<16,      0,  170<<16,  20<<16, 65536 };
4856 hendricks2 204
static MenuEntryFormat_t MEF_LoadSave =         { 7<<16,     -1,   78<<16,  20<<16, 65536 };
4778 hendricks2 205
static MenuEntryFormat_t MEF_NetSetup =         { 4<<16,      0,    2<<16,  20<<16, 65536 };
2313 helixhorne 206
 
4496 hendricks2 207
// common menu option sets
4778 hendricks2 208
#define MAKE_MENUOPTIONSET(optionNames, optionValues, features) { optionNames, optionValues, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, ARRAY_SIZE(optionNames), -1, 0, features }
209
#define MAKE_MENUOPTIONSETDYN(optionNames, optionValues, numOptions, features) { optionNames, optionValues, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, numOptions, -1, 0, features }
2313 helixhorne 210
 
4496 hendricks2 211
static char *MEOSN_OffOn[] = { "Off", "On", };
4778 hendricks2 212
static MenuOptionSet_t MEOS_OffOn = MAKE_MENUOPTIONSET( MEOSN_OffOn, NULL, 0x3 );
4496 hendricks2 213
static char *MEOSN_OnOff[] = { "On", "Off", };
4778 hendricks2 214
static MenuOptionSet_t MEOS_OnOff = MAKE_MENUOPTIONSET( MEOSN_OnOff, NULL, 0x3 );
4496 hendricks2 215
static char *MEOSN_NoYes[] = { "No", "Yes", };
4778 hendricks2 216
static MenuOptionSet_t MEOS_NoYes = MAKE_MENUOPTIONSET( MEOSN_NoYes, NULL, 0x3 );
4496 hendricks2 217
static char *MEOSN_YesNo[] = { "Yes", "No", };
4778 hendricks2 218
static MenuOptionSet_t MEOS_YesNo = MAKE_MENUOPTIONSET( MEOSN_YesNo, NULL, 0x3 );
2313 helixhorne 219
 
5 Plagman 220
 
4496 hendricks2 221
static char MenuGameFuncs[NUMGAMEFUNCTIONS][MAXGAMEFUNCLEN];
222
static char *MenuGameFuncNone = "  -None-";
223
static char *MEOSN_Gamefuncs[NUMGAMEFUNCTIONS+1];
4778 hendricks2 224
static MenuOptionSet_t MEOS_Gamefuncs = MAKE_MENUOPTIONSET( MEOSN_Gamefuncs, NULL, 0x1 );
2313 helixhorne 225
 
5 Plagman 226
 
227
 
4496 hendricks2 228
/*
4778 hendricks2 229
MenuEntry_t is passed in arrays of pointers so that the callback function
4496 hendricks2 230
that is called when an entry is modified or activated can test equality of the current
4778 hendricks2 231
entry pointer directly against the known ones, instead of relying on an ID number.
5 Plagman 232
 
4778 hendricks2 233
That way, individual menu entries can be ifdef'd out painlessly.
4496 hendricks2 234
*/
2728 hendricks2 235
 
4688 hendricks2 236
static MenuLink_t MEO_NULL = { MENU_NULL, MA_None, };
4496 hendricks2 237
static const char* MenuCustom = "Custom";
2728 hendricks2 238
 
4778 hendricks2 239
#define MAKE_MENUSTRING(...) { NULL, __VA_ARGS__, }
4496 hendricks2 240
#define MAKE_MENUOPTION(...) { __VA_ARGS__, -1, }
241
#define MAKE_MENURANGE(...) { __VA_ARGS__, }
242
#define MAKE_MENUENTRY(...) { __VA_ARGS__, 0, 0, 0, }
2728 hendricks2 243
 
4778 hendricks2 244
 
245
#define MAKE_SPACER( EntryName, Height ) \
246
static MenuSpacer_t MEO_ ## EntryName = { Height };\
247
static MenuEntry_t ME_ ## EntryName = MAKE_MENUENTRY( NULL, &MF_Null, &MEF_Null, &MEO_ ## EntryName, Spacer )
248
 
249
MAKE_SPACER( Space2, 2<<16 ); // bigoptions
250
MAKE_SPACER( Space4, 4<<16 ); // usermap, smalloptions, anything else non-top
251
MAKE_SPACER( Space6, 6<<16 ); // videosetup
252
MAKE_SPACER( Space8, 8<<16 ); // colcorr, redslide
253
 
254
 
255
#define MAKE_MENU_TOP_ENTRYLINK( Title, Format, EntryName, LinkID ) \
4688 hendricks2 256
static MenuLink_t MEO_ ## EntryName = { LinkID, MA_Advance, };\
4778 hendricks2 257
static MenuEntry_t ME_ ## EntryName = MAKE_MENUENTRY( Title, &MF_Redfont, &Format, &MEO_ ## EntryName, Link )
2728 hendricks2 258
 
259
 
4778 hendricks2 260
MAKE_MENU_TOP_ENTRYLINK( "New Game", MEF_MainMenu, MAIN_NEWGAME, MENU_EPISODE );
5000 terminx 261
#ifdef DROIDMENU
262
MAKE_MENU_TOP_ENTRYLINK( "Resume Game", MEF_MainMenu, MAIN_RESUMEGAME, MENU_CLOSE );
263
#endif
4778 hendricks2 264
MAKE_MENU_TOP_ENTRYLINK( "New Game", MEF_MainMenu, MAIN_NEWGAME_INGAME, MENU_NEWVERIFY );
4688 hendricks2 265
static MenuLink_t MEO_MAIN_NEWGAME_NETWORK = { MENU_NETWORK, MA_Advance, };
4778 hendricks2 266
MAKE_MENU_TOP_ENTRYLINK( "Save Game", MEF_MainMenu, MAIN_SAVEGAME, MENU_SAVE );
267
MAKE_MENU_TOP_ENTRYLINK( "Load Game", MEF_MainMenu, MAIN_LOADGAME, MENU_LOAD );
268
MAKE_MENU_TOP_ENTRYLINK( "Options", MEF_MainMenu, MAIN_OPTIONS, MENU_OPTIONS );
4682 hendricks2 269
#ifndef DROIDMENU
4778 hendricks2 270
MAKE_MENU_TOP_ENTRYLINK( "Help", MEF_MainMenu, MAIN_HELP, MENU_STORY );
4682 hendricks2 271
#endif
4778 hendricks2 272
MAKE_MENU_TOP_ENTRYLINK( "Credits", MEF_MainMenu, MAIN_CREDITS, MENU_CREDITS );
273
MAKE_MENU_TOP_ENTRYLINK( "Quit To Title", MEF_MainMenu, MAIN_QUITTOTITLE, MENU_QUITTOTITLE );
274
MAKE_MENU_TOP_ENTRYLINK( "Quit", MEF_MainMenu, MAIN_QUIT, MENU_QUIT );
275
MAKE_MENU_TOP_ENTRYLINK( "Quit Game", MEF_MainMenu, MAIN_QUITGAME, MENU_QUIT );
2728 hendricks2 276
 
4496 hendricks2 277
static MenuEntry_t *MEL_MAIN[] = {
278
    &ME_MAIN_NEWGAME,
279
    &ME_MAIN_OPTIONS,
280
    &ME_MAIN_LOADGAME,
4609 terminx 281
#ifndef DROIDMENU
4496 hendricks2 282
    &ME_MAIN_HELP,
4609 terminx 283
#endif
4496 hendricks2 284
    &ME_MAIN_CREDITS,
285
    &ME_MAIN_QUIT,
286
};
4609 terminx 287
 
4496 hendricks2 288
static MenuEntry_t *MEL_MAIN_INGAME[] = {
5000 terminx 289
#ifdef DROIDMENU
290
    &ME_MAIN_RESUMEGAME,
291
#else
4496 hendricks2 292
    &ME_MAIN_NEWGAME_INGAME,
5000 terminx 293
#endif
4496 hendricks2 294
    &ME_MAIN_SAVEGAME,
295
    &ME_MAIN_LOADGAME,
296
    &ME_MAIN_OPTIONS,
4609 terminx 297
#ifndef DROIDMENU
4496 hendricks2 298
    &ME_MAIN_HELP,
299
    &ME_MAIN_QUITTOTITLE,
300
    &ME_MAIN_QUITGAME,
5000 terminx 301
#else
302
    &ME_MAIN_QUITTOTITLE,
303
#endif
4496 hendricks2 304
};
2728 hendricks2 305
 
4496 hendricks2 306
// Episode and Skill will be dynamically generated after CONs are parsed
4688 hendricks2 307
static MenuLink_t MEO_EPISODE = { MENU_SKILL, MA_Advance, };
308
static MenuLink_t MEO_EPISODE_SHAREWARE = { MENU_BUYDUKE, MA_Advance, };
4778 hendricks2 309
static MenuEntry_t ME_EPISODE_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_CenterMenu, &MEO_EPISODE, Link );
4496 hendricks2 310
static MenuEntry_t ME_EPISODE[MAXVOLUMES];
4688 hendricks2 311
static MenuLink_t MEO_EPISODE_USERMAP = { MENU_USERMAP, MA_Advance, };
4778 hendricks2 312
static MenuEntry_t ME_EPISODE_USERMAP = MAKE_MENUENTRY( "User Map", &MF_Redfont, &MEF_CenterMenu, &MEO_EPISODE_USERMAP, Link );
313
static MenuEntry_t *MEL_EPISODE[MAXVOLUMES+2]; // +2 for spacer and User Map
398 terminx 314
 
4778 hendricks2 315
static MenuEntry_t ME_SKILL_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_CenterMenu, &MEO_NULL, Link );
4496 hendricks2 316
static MenuEntry_t ME_SKILL[MAXSKILLS];
317
static MenuEntry_t *MEL_SKILL[MAXSKILLS];
5 Plagman 318
 
4818 hendricks2 319
#if defined STARTUP_SETUP_WINDOW && !defined DROIDMENU
4778 hendricks2 320
static MenuOption_t MEO_GAMESETUP_STARTWIN = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.config.ForceSetup );
321
static MenuEntry_t ME_GAMESETUP_STARTWIN = MAKE_MENUENTRY( "Startup window:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_STARTWIN, Option );
4682 hendricks2 322
#endif
4609 terminx 323
 
4688 hendricks2 324
static char *MEOSN_GAMESETUP_AIM_AUTO[] = { "None", "Regular", "Bullets only",
4609 terminx 325
#ifdef DROIDMENU
4688 hendricks2 326
"Extra wide"
4609 terminx 327
#endif
328
};
329
static int32_t MEOSV_GAMESETUP_AIM_AUTO[] = { 0, 1, 2,
330
#ifdef DROIDMENU
331
3,
332
#endif
333
};
334
 
4778 hendricks2 335
static MenuOptionSet_t MEOS_GAMESETUP_AIM_AUTO = MAKE_MENUOPTIONSET( MEOSN_GAMESETUP_AIM_AUTO, MEOSV_GAMESETUP_AIM_AUTO, 0x2 );
336
static MenuOption_t MEO_GAMESETUP_AIM_AUTO = MAKE_MENUOPTION( &MF_Redfont, &MEOS_GAMESETUP_AIM_AUTO, &ud.config.AutoAim );
337
static MenuEntry_t ME_GAMESETUP_AIM_AUTO = MAKE_MENUENTRY( "Auto aim:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_AIM_AUTO, Option );
4609 terminx 338
 
339
static char *MEOSN_GAMESETUP_WEAPSWITCH_PICKUP[] = { "Never", "If new", "By rating", };
4778 hendricks2 340
static MenuOptionSet_t MEOS_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUOPTIONSET( MEOSN_GAMESETUP_WEAPSWITCH_PICKUP, NULL, 0x2 );
341
static MenuOption_t MEO_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUOPTION( &MF_Redfont, &MEOS_GAMESETUP_WEAPSWITCH_PICKUP, NULL );
342
static MenuEntry_t ME_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUENTRY( "Equip pickups:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_WEAPSWITCH_PICKUP, Option );
4609 terminx 343
 
4496 hendricks2 344
static char *MEOSN_DemoRec[] = { "Off", "Running", };
4778 hendricks2 345
static MenuOptionSet_t MEOS_DemoRec = MAKE_MENUOPTIONSET( MEOSN_DemoRec, NULL, 0x3 );
346
static MenuOption_t MEO_GAMESETUP_DEMOREC = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.m_recstat );
347
static MenuEntry_t ME_GAMESETUP_DEMOREC = MAKE_MENUENTRY( "Record demo:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_DEMOREC, Option );
4609 terminx 348
 
4496 hendricks2 349
#ifdef _WIN32
4778 hendricks2 350
static MenuOption_t MEO_GAMESETUP_UPDATES = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &ud.config.CheckForUpdates );
351
static MenuEntry_t ME_GAMESETUP_UPDATES = MAKE_MENUENTRY( "Online updates:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_UPDATES, Option );
4496 hendricks2 352
#endif
2728 hendricks2 353
 
4778 hendricks2 354
static MenuOption_t MEO_ADULTMODE = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.lockout);
355
static MenuEntry_t ME_ADULTMODE = MAKE_MENUENTRY( "Parental lock:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_ADULTMODE, Option );
4688 hendricks2 356
// static MenuLink_t MEO_ADULTMODE_PASSWORD = { MENU_ADULTPASSWORD, MA_None, };
4778 hendricks2 357
// static MenuEntry_t ME_ADULTMODE_PASSWORD = MAKE_MENUENTRY( "Enter Password", &MF_Redfont, &, &MEO_ADULTMODE_PASSWORD, Link );
4609 terminx 358
 
5025 helixhorne 359
#ifdef DROIDMENU
4993 terminx 360
static MenuOption_t MEO_GAMESETUP_CROUCHLOCK = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &droidinput.toggleCrouch);
361
static MenuEntry_t ME_GAMESETUP_CROUCHLOCK = MAKE_MENUENTRY("Crouch lock:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_CROUCHLOCK, Option);
362
 
363
static MenuOption_t MEO_GAMESETUP_QUICKSWITCH = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &droidinput.quickSelectWeapon);
364
static MenuEntry_t ME_GAMESETUP_QUICKSWITCH = MAKE_MENUENTRY("Quick weapon switch:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_QUICKSWITCH, Option);
5025 helixhorne 365
#endif
4993 terminx 366
 
4778 hendricks2 367
static MenuEntry_t *MEL_GAMESETUP[] = {
4850 hendricks2 368
    &ME_ADULTMODE,
4818 hendricks2 369
#if defined STARTUP_SETUP_WINDOW && !defined DROIDMENU
4496 hendricks2 370
    &ME_GAMESETUP_STARTWIN,
4609 terminx 371
#endif
4850 hendricks2 372
    &ME_GAMESETUP_AIM_AUTO,
373
    &ME_GAMESETUP_WEAPSWITCH_PICKUP,
5023 terminx 374
#ifdef DROIDMENU
4993 terminx 375
    &ME_GAMESETUP_QUICKSWITCH,
376
    &ME_GAMESETUP_CROUCHLOCK,
5023 terminx 377
#else
4496 hendricks2 378
    &ME_GAMESETUP_DEMOREC,
379
#ifdef _WIN32
4850 hendricks2 380
    &ME_GAMESETUP_UPDATES,
4609 terminx 381
#endif
382
#endif
4496 hendricks2 383
};
2728 hendricks2 384
 
4778 hendricks2 385
MAKE_MENU_TOP_ENTRYLINK( "Game Setup", MEF_CenterMenu, OPTIONS_GAMESETUP, MENU_GAMESETUP );
386
MAKE_MENU_TOP_ENTRYLINK( "Sound Setup", MEF_CenterMenu, OPTIONS_SOUNDSETUP, MENU_SOUND );
387
MAKE_MENU_TOP_ENTRYLINK( "Display Setup", MEF_CenterMenu, OPTIONS_DISPLAYSETUP, MENU_DISPLAYSETUP );
388
MAKE_MENU_TOP_ENTRYLINK( "Player Setup", MEF_CenterMenu, OPTIONS_PLAYERSETUP, MENU_PLAYER );
389
MAKE_MENU_TOP_ENTRYLINK( "Control Setup", MEF_CenterMenu, OPTIONS_CONTROLS, MENU_CONTROLS );
390
MAKE_MENU_TOP_ENTRYLINK( "Keyboard Setup", MEF_CenterMenu, OPTIONS_KEYBOARDSETUP, MENU_KEYBOARDSETUP );
391
MAKE_MENU_TOP_ENTRYLINK( "Mouse Setup", MEF_CenterMenu, OPTIONS_MOUSESETUP, MENU_MOUSESETUP );
392
MAKE_MENU_TOP_ENTRYLINK( "Joystick Setup", MEF_CenterMenu, OPTIONS_JOYSTICKSETUP, MENU_JOYSTICKSETUP );
4993 terminx 393
#ifdef DROIDMENU
394
MAKE_MENU_TOP_ENTRYLINK( "Touch Setup", MEF_CenterMenu, OPTIONS_TOUCHSETUP, MENU_TOUCHSETUP );
395
#endif
2728 hendricks2 396
 
4496 hendricks2 397
static int32_t newresolution, newrendermode, newfullscreen;
5 Plagman 398
 
4496 hendricks2 399
enum resflags_t {
400
    RES_FS  = 0x1,
401
    RES_WIN = 0x2,
402
};
5 Plagman 403
 
4496 hendricks2 404
#define MAXRESOLUTIONSTRINGLENGTH 16
5 Plagman 405
 
4496 hendricks2 406
typedef struct resolution_t {
407
    int32_t xdim, ydim;
408
    int32_t flags;
409
    int32_t bppmax;
410
    char name[MAXRESOLUTIONSTRINGLENGTH];
411
} resolution_t;
2358 helixhorne 412
 
4496 hendricks2 413
resolution_t resolution[MAXVALIDMODES];
5 Plagman 414
 
4496 hendricks2 415
static char *MEOSN_VIDEOSETUP_RESOLUTION[MAXVALIDMODES];
4778 hendricks2 416
static MenuOptionSet_t MEOS_VIDEOSETUP_RESOLUTION = MAKE_MENUOPTIONSETDYN( MEOSN_VIDEOSETUP_RESOLUTION, NULL, 0, 0x0 );
417
static MenuOption_t MEO_VIDEOSETUP_RESOLUTION = MAKE_MENUOPTION( &MF_Redfont, &MEOS_VIDEOSETUP_RESOLUTION, &newresolution );
418
static MenuEntry_t ME_VIDEOSETUP_RESOLUTION = MAKE_MENUENTRY( "Resolution:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_RESOLUTION, Option );
5 Plagman 419
 
4496 hendricks2 420
#ifdef USE_OPENGL
421
#ifdef POLYMER
4976 hendricks2 422
static char *MEOSN_VIDEOSETUP_RENDERER[] = { "Classic", "Polymost", "Polymer", };
4496 hendricks2 423
static int32_t MEOSV_VIDEOSETUP_RENDERER[] = { REND_CLASSIC, REND_POLYMOST, REND_POLYMER, };
424
#else
4609 terminx 425
static char *MEOSN_VIDEOSETUP_RENDERER[] = { "Classic", "OpenGL", };
4496 hendricks2 426
static int32_t MEOSV_VIDEOSETUP_RENDERER[] = { REND_CLASSIC, REND_POLYMOST, };
427
#endif
5 Plagman 428
 
4778 hendricks2 429
static MenuOptionSet_t MEOS_VIDEOSETUP_RENDERER = MAKE_MENUOPTIONSET( MEOSN_VIDEOSETUP_RENDERER, MEOSV_VIDEOSETUP_RENDERER, 0x2 );
5 Plagman 430
 
4778 hendricks2 431
static MenuOption_t MEO_VIDEOSETUP_RENDERER = MAKE_MENUOPTION( &MF_Redfont, &MEOS_VIDEOSETUP_RENDERER, &newrendermode );
432
static MenuEntry_t ME_VIDEOSETUP_RENDERER = MAKE_MENUENTRY( "Renderer:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_RENDERER, Option );
4823 hendricks2 433
#endif
434
 
4778 hendricks2 435
static MenuOption_t MEO_VIDEOSETUP_FULLSCREEN = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &newfullscreen );
436
static MenuEntry_t ME_VIDEOSETUP_FULLSCREEN = MAKE_MENUENTRY( "Fullscreen:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_FULLSCREEN, Option );
437
static MenuEntry_t ME_VIDEOSETUP_APPLY = MAKE_MENUENTRY( "Apply Changes", &MF_Redfont, &MEF_BigOptions_Apply, &MEO_NULL, Link );
4609 terminx 438
 
439
 
4823 hendricks2 440
static MenuLink_t MEO_DISPLAYSETUP_COLORCORR = { MENU_COLCORR, MA_Advance, };
4856 hendricks2 441
static MenuEntry_t ME_DISPLAYSETUP_COLORCORR = MAKE_MENUENTRY( "Color Correction", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_COLORCORR, Link );
4609 terminx 442
static MenuOption_t MEO_DISPLAYSETUP_PIXELDOUBLING = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OnOff, &ud.detail );
4823 hendricks2 443
static MenuEntry_t ME_DISPLAYSETUP_PIXELDOUBLING = MAKE_MENUENTRY( "Pixel Doubling:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_PIXELDOUBLING, Option );
4609 terminx 444
 
445
 
4496 hendricks2 446
#ifdef USE_OPENGL
4609 terminx 447
static MenuOption_t MEO_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, NULL);
448
#else
449
static MenuOption_t MEO_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &r_usenewaspect);
4496 hendricks2 450
#endif
4823 hendricks2 451
static MenuEntry_t ME_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUENTRY( "Widescreen:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ASPECTRATIO, Option );
4609 terminx 452
#ifdef POLYMER
453
static char *MEOSN_DISPLAYSETUP_ASPECTRATIO_POLYMER[] = { "Auto", "4:3", "16:10", "5:3", "16:9", "1.85:1", "2.39:1", };
454
static double MEOSV_DISPLAYSETUP_ASPECTRATIO_POLYMER[] = { 0., 1.33, 1.6, 1.66, 1.78, 1.85, 2.39, };
4778 hendricks2 455
static MenuOptionSet_t MEOS_DISPLAYSETUP_ASPECTRATIO_POLYMER = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_ASPECTRATIO_POLYMER, NULL, 0x1 );
4609 terminx 456
static MenuOption_t MEO_DISPLAYSETUP_ASPECTRATIO_POLYMER = MAKE_MENUOPTION(&MF_Redfont, &MEOS_DISPLAYSETUP_ASPECTRATIO_POLYMER, NULL);
4823 hendricks2 457
static MenuEntry_t ME_DISPLAYSETUP_ASPECTRATIO_POLYMER = MAKE_MENUENTRY( "Aspect ratio:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ASPECTRATIO_POLYMER, Option );
4609 terminx 458
#endif
5 Plagman 459
 
4609 terminx 460
 
461
#ifdef USE_OPENGL
462
static char *MEOSN_DISPLAYSETUP_TEXFILTER[] = { "Classic", "Filtered" };
4778 hendricks2 463
static MenuOptionSet_t MEOS_DISPLAYSETUP_TEXFILTER = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_TEXFILTER, NULL, 0x2 );
4609 terminx 464
int32_t menufiltermode;
465
static MenuOption_t MEO_DISPLAYSETUP_TEXFILTER = MAKE_MENUOPTION( &MF_Redfont, &MEOS_DISPLAYSETUP_TEXFILTER, &menufiltermode );
4823 hendricks2 466
static MenuEntry_t ME_DISPLAYSETUP_TEXFILTER = MAKE_MENUENTRY( "Texture Mode:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_TEXFILTER, Option );
4609 terminx 467
 
468
static char *MEOSN_DISPLAYSETUP_ANISOTROPY[] = { "None", "2x", "4x", "8x", "16x", };
4868 hendricks2 469
static int32_t MEOSV_DISPLAYSETUP_ANISOTROPY[] = { 1, 2, 4, 8, 16, };
4778 hendricks2 470
static MenuOptionSet_t MEOS_DISPLAYSETUP_ANISOTROPY = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_ANISOTROPY, MEOSV_DISPLAYSETUP_ANISOTROPY, 0x0 );
4609 terminx 471
static MenuOption_t MEO_DISPLAYSETUP_ANISOTROPY = MAKE_MENUOPTION(&MF_Redfont, &MEOS_DISPLAYSETUP_ANISOTROPY, &glanisotropy);
4823 hendricks2 472
static MenuEntry_t ME_DISPLAYSETUP_ANISOTROPY = MAKE_MENUENTRY( "Anisotropy:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ANISOTROPY, Option );
473
static char *MEOSN_DISPLAYSETUP_VSYNC[] = { "Adaptive", "Off", "On", };
4609 terminx 474
static int32_t MEOSV_DISPLAYSETUP_VSYNC[] = { -1, 0, 1, };
4778 hendricks2 475
static MenuOptionSet_t MEOS_DISPLAYSETUP_VSYNC = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_VSYNC, MEOSV_DISPLAYSETUP_VSYNC, 0x2 );
4609 terminx 476
static MenuOption_t MEO_DISPLAYSETUP_VSYNC = MAKE_MENUOPTION(&MF_Redfont, &MEOS_DISPLAYSETUP_VSYNC, &vsync);
4823 hendricks2 477
static MenuEntry_t ME_DISPLAYSETUP_VSYNC = MAKE_MENUENTRY( "VSync:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_VSYNC, Option );
4609 terminx 478
 
4993 terminx 479
#ifdef DROIDMENU
480
static MenuOption_t MEO_DISPLAYSETUP_HIDEDPAD = MAKE_MENUOPTION(&MF_Redfont, &MEOS_NoYes, &droidinput.hideStick);
481
static MenuEntry_t ME_DISPLAYSETUP_HIDEDPAD = MAKE_MENUENTRY("Hide touch d-pad:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_HIDEDPAD, Option);
482
 
483
static MenuRangeFloat_t MEO_DISPLAYSETUP_TOUCHALPHA = MAKE_MENURANGE(&droidinput.gameControlsAlpha, &MF_Redfont, 0, 1, 0, 16, 2);
484
static MenuEntry_t ME_DISPLAYSETUP_TOUCHALPHA = MAKE_MENUENTRY("UI opacity:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_TOUCHALPHA, RangeFloat);
4609 terminx 485
#endif
486
 
4993 terminx 487
#endif
488
 
4609 terminx 489
static MenuOption_t MEO_SCREENSETUP_CROSSHAIR = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.crosshair);
4778 hendricks2 490
static MenuEntry_t ME_SCREENSETUP_CROSSHAIR = MAKE_MENUENTRY( "Crosshair:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_CROSSHAIR, Option );
491
static MenuRangeInt32_t MEO_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENURANGE( &ud.crosshairscale, &MF_Redfont, 25, 100, 0, 16, 2 );
492
static MenuEntry_t ME_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENUENTRY( "Size:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_CROSSHAIRSIZE, RangeInt32 );
4609 terminx 493
 
494
static int32_t vpsize;
4866 hendricks2 495
static MenuRangeInt32_t MEO_SCREENSETUP_SCREENSIZE = MAKE_MENURANGE( &vpsize, &MF_Redfont, 12, 0, 0, 4, EnforceIntervals );
4778 hendricks2 496
static MenuEntry_t ME_SCREENSETUP_SCREENSIZE = MAKE_MENUENTRY( "Screen size:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_SCREENSIZE, RangeInt32 );
497
static MenuRangeInt32_t MEO_SCREENSETUP_TEXTSIZE = MAKE_MENURANGE( &ud.textscale, &MF_Redfont, 100, 400, 0, 7, 2 );
498
static MenuEntry_t ME_SCREENSETUP_TEXTSIZE = MAKE_MENUENTRY( "Size:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_TEXTSIZE, RangeInt32 );
4609 terminx 499
static MenuOption_t MEO_SCREENSETUP_LEVELSTATS = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.levelstats);
4778 hendricks2 500
static MenuEntry_t ME_SCREENSETUP_LEVELSTATS = MAKE_MENUENTRY( "Level stats:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_LEVELSTATS, Option );
4609 terminx 501
 
502
 
503
static MenuOption_t MEO_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.fta_on);
4778 hendricks2 504
static MenuEntry_t ME_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUENTRY( "Pickup messages:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_SHOWPICKUPMESSAGES, Option );
4609 terminx 505
 
4688 hendricks2 506
static char *MEOSN_SCREENSETUP_NEWSTATUSBAR[] = { "Classic", "New",
4609 terminx 507
#ifdef DROIDMENU
4688 hendricks2 508
"On top",
4609 terminx 509
#endif
510
};
511
 
512
static int32_t MEOSV_SCREENSETUP_NEWSTATUSBAR[] = { 0, 1,
513
#ifdef DROIDMENU
514
2,
515
#endif
516
};
517
 
4778 hendricks2 518
static MenuOptionSet_t MEOS_SCREENSETUP_NEWSTATUSBAR = MAKE_MENUOPTIONSET( MEOSN_SCREENSETUP_NEWSTATUSBAR, MEOSV_SCREENSETUP_NEWSTATUSBAR, 0x2 );
4609 terminx 519
static MenuOption_t MEO_SCREENSETUP_NEWSTATUSBAR = MAKE_MENUOPTION(&MF_Redfont, &MEOS_SCREENSETUP_NEWSTATUSBAR, &ud.althud);
4778 hendricks2 520
static MenuEntry_t ME_SCREENSETUP_NEWSTATUSBAR = MAKE_MENUENTRY( "Status bar:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_NEWSTATUSBAR, Option );
4609 terminx 521
 
522
 
523
 
4778 hendricks2 524
static MenuRangeInt32_t MEO_SCREENSETUP_SBARSIZE = MAKE_MENURANGE( &ud.statusbarscale, &MF_Redfont, 36, 100, 0, 17, 2 );
525
static MenuEntry_t ME_SCREENSETUP_SBARSIZE = MAKE_MENUENTRY( "Size:", &MF_Redfont, &MEF_BigOptions, &MEO_SCREENSETUP_SBARSIZE, RangeInt32 );
4609 terminx 526
 
527
 
4688 hendricks2 528
static MenuLink_t MEO_DISPLAYSETUP_SCREENSETUP = { MENU_SCREENSETUP, MA_Advance, };
4993 terminx 529
static MenuEntry_t ME_DISPLAYSETUP_SCREENSETUP = MAKE_MENUENTRY( "Status and crosshair", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_SCREENSETUP, Link );
4609 terminx 530
 
531
 
4682 hendricks2 532
#ifndef DROIDMENU
4823 hendricks2 533
#ifdef USE_OPENGL
534
static MenuLink_t MEO_DISPLAYSETUP_ADVANCED_GL = { MENU_RENDERERSETUP, MA_Advance, };
4856 hendricks2 535
static MenuEntry_t ME_DISPLAYSETUP_ADVANCED_GL = MAKE_MENUENTRY( "Advanced", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ADVANCED_GL, Link );
4823 hendricks2 536
#endif
4609 terminx 537
 
4688 hendricks2 538
static MenuLink_t MEO_DISPLAYSETUP_VIDEOSETUP = { MENU_VIDEOSETUP, MA_Advance, };
4856 hendricks2 539
static MenuEntry_t ME_DISPLAYSETUP_VIDEOSETUP = MAKE_MENUENTRY( "Video mode", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_VIDEOSETUP, Link );
4682 hendricks2 540
#endif
4609 terminx 541
 
4496 hendricks2 542
static MenuEntry_t *MEL_OPTIONS[] = {
543
    &ME_OPTIONS_GAMESETUP,
544
    &ME_OPTIONS_SOUNDSETUP,
4609 terminx 545
    &ME_OPTIONS_DISPLAYSETUP,
546
#ifndef DROIDMENU
4496 hendricks2 547
    &ME_OPTIONS_PLAYERSETUP,
4993 terminx 548
    &ME_OPTIONS_CONTROLS,
549
#else
550
    &ME_OPTIONS_TOUCHSETUP
4609 terminx 551
#endif
4496 hendricks2 552
};
5 Plagman 553
 
4609 terminx 554
static MenuEntry_t *MEL_CONTROLS[] = {
4993 terminx 555
#ifndef DROIDMENU
4850 hendricks2 556
    &ME_OPTIONS_KEYBOARDSETUP,
557
    &ME_OPTIONS_MOUSESETUP,
558
    &ME_OPTIONS_JOYSTICKSETUP,
4993 terminx 559
#else
560
    &ME_OPTIONS_TOUCHSETUP
561
#endif
4609 terminx 562
};
563
 
564
 
4778 hendricks2 565
static MenuEntry_t *MEL_VIDEOSETUP[] = {
4496 hendricks2 566
    &ME_VIDEOSETUP_RESOLUTION,
4823 hendricks2 567
#ifdef USE_OPENGL
4496 hendricks2 568
    &ME_VIDEOSETUP_RENDERER,
4823 hendricks2 569
#endif
4496 hendricks2 570
    &ME_VIDEOSETUP_FULLSCREEN,
4778 hendricks2 571
    &ME_Space6,
4496 hendricks2 572
    &ME_VIDEOSETUP_APPLY,
573
};
4609 terminx 574
static MenuEntry_t *MEL_DISPLAYSETUP[] = {
575
    &ME_DISPLAYSETUP_SCREENSETUP,
576
    &ME_DISPLAYSETUP_COLORCORR,
577
#ifndef DROIDMENU
4850 hendricks2 578
    &ME_DISPLAYSETUP_VIDEOSETUP,
4609 terminx 579
#endif
4850 hendricks2 580
    &ME_DISPLAYSETUP_ASPECTRATIO,
581
    &ME_DISPLAYSETUP_PIXELDOUBLING,
4496 hendricks2 582
};
4609 terminx 583
 
4496 hendricks2 584
#ifdef USE_OPENGL
4609 terminx 585
static MenuEntry_t *MEL_DISPLAYSETUP_GL[] = {
4850 hendricks2 586
    &ME_DISPLAYSETUP_SCREENSETUP,
4609 terminx 587
    &ME_DISPLAYSETUP_COLORCORR,
588
#ifndef DROIDMENU
4850 hendricks2 589
    &ME_DISPLAYSETUP_VIDEOSETUP,
4609 terminx 590
#endif
4850 hendricks2 591
    &ME_DISPLAYSETUP_ASPECTRATIO,
592
    &ME_DISPLAYSETUP_TEXFILTER,
5004 hendricks2 593
#ifdef DROIDMENU
4993 terminx 594
    &ME_DISPLAYSETUP_HIDEDPAD,
595
    &ME_DISPLAYSETUP_TOUCHALPHA,
5004 hendricks2 596
#endif
4609 terminx 597
#ifndef DROIDMENU
4850 hendricks2 598
    &ME_DISPLAYSETUP_ANISOTROPY,
599
    &ME_DISPLAYSETUP_VSYNC,
4823 hendricks2 600
    &ME_DISPLAYSETUP_ADVANCED_GL,
4609 terminx 601
#endif
4496 hendricks2 602
};
4609 terminx 603
 
604
#ifdef POLYMER
605
static MenuEntry_t *MEL_DISPLAYSETUP_GL_POLYMER[] = {
4850 hendricks2 606
    &ME_DISPLAYSETUP_SCREENSETUP,
607
    &ME_DISPLAYSETUP_COLORCORR,
4609 terminx 608
#ifndef DROIDMENU
4850 hendricks2 609
    &ME_DISPLAYSETUP_VIDEOSETUP,
4496 hendricks2 610
#endif
4850 hendricks2 611
    &ME_DISPLAYSETUP_ASPECTRATIO_POLYMER,
612
    &ME_DISPLAYSETUP_TEXFILTER,
4609 terminx 613
#ifndef DROIDMENU
4850 hendricks2 614
    &ME_DISPLAYSETUP_ANISOTROPY,
615
    &ME_DISPLAYSETUP_VSYNC,
616
    &ME_DISPLAYSETUP_ADVANCED_GL,
4609 terminx 617
#endif
618
};
5 Plagman 619
 
4609 terminx 620
#endif
621
#endif
622
 
623
 
624
 
4496 hendricks2 625
static char *MenuKeyNone = "  -";
626
static char *MEOSN_Keys[NUMKEYS];
5 Plagman 627
 
4778 hendricks2 628
static MenuCustom2Col_t MEO_KEYBOARDSETUPFUNCS_TEMPLATE = { { NULL, NULL, }, MEOSN_Keys, &MF_MinifontRed, NUMKEYS, 54<<16, 0 };
4496 hendricks2 629
static MenuCustom2Col_t MEO_KEYBOARDSETUPFUNCS[NUMGAMEFUNCTIONS];
4778 hendricks2 630
static MenuEntry_t ME_KEYBOARDSETUPFUNCS_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_FuncList, &MEO_KEYBOARDSETUPFUNCS_TEMPLATE, Custom2Col );
4496 hendricks2 631
static MenuEntry_t ME_KEYBOARDSETUPFUNCS[NUMGAMEFUNCTIONS];
632
static MenuEntry_t *MEL_KEYBOARDSETUPFUNCS[NUMGAMEFUNCTIONS];
5 Plagman 633
 
4823 hendricks2 634
static MenuLink_t MEO_KEYBOARDSETUP_KEYS = { MENU_KEYBOARDKEYS, MA_Advance, };
4778 hendricks2 635
static MenuEntry_t ME_KEYBOARDSETUP_KEYS = MAKE_MENUENTRY( "Configure Keys", &MF_Redfont, &MEF_CenterMenu, &MEO_KEYBOARDSETUP_KEYS, Link );
636
static MenuEntry_t ME_KEYBOARDSETUP_RESET = MAKE_MENUENTRY( "Reset To Defaults", &MF_Redfont, &MEF_CenterMenu, &MEO_NULL, Link );
637
static MenuEntry_t ME_KEYBOARDSETUP_RESETCLASSIC = MAKE_MENUENTRY( "Reset To Classic", &MF_Redfont, &MEF_CenterMenu, &MEO_NULL, Link );
5 Plagman 638
 
4496 hendricks2 639
static MenuEntry_t *MEL_KEYBOARDSETUP[] = {
640
    &ME_KEYBOARDSETUP_KEYS,
641
    &ME_KEYBOARDSETUP_RESET,
642
    &ME_KEYBOARDSETUP_RESETCLASSIC,
643
};
5 Plagman 644
 
645
 
4496 hendricks2 646
// There is no better way to do this than manually.
4399 hendricks2 647
 
4496 hendricks2 648
#define MENUMOUSEFUNCTIONS 12
78 terminx 649
 
4496 hendricks2 650
static char *MenuMouseNames[MENUMOUSEFUNCTIONS] = {
651
    "Button 1",
652
    "Double Button 1",
653
    "Button 2",
654
    "Double Button 2",
655
    "Button 3",
656
    "Double Button 3",
5 Plagman 657
 
4496 hendricks2 658
    "Wheel Up",
659
    "Wheel Down",
5 Plagman 660
 
4496 hendricks2 661
    "Button 4",
662
    "Double Button 4",
663
    "Button 5",
664
    "Double Button 5",
665
};
666
static int32_t MenuMouseDataIndex[MENUMOUSEFUNCTIONS][2] = {
667
    { 0, 0, },
668
    { 0, 1, },
669
    { 1, 0, },
670
    { 1, 1, },
671
    { 2, 0, },
672
    { 2, 1, },
1677 terminx 673
 
4496 hendricks2 674
    // note the mouse wheel
675
    { 4, 0, },
676
    { 5, 0, },
5 Plagman 677
 
4496 hendricks2 678
    { 3, 0, },
679
    { 3, 1, },
680
    { 6, 0, },
681
    { 6, 1, },
682
};
3084 terminx 683
 
4496 hendricks2 684
static MenuOption_t MEO_MOUSEJOYSETUPBTNS_TEMPLATE = MAKE_MENUOPTION( &MF_Minifont, &MEOS_Gamefuncs, NULL );
685
static MenuOption_t MEO_MOUSESETUPBTNS[MENUMOUSEFUNCTIONS];
4778 hendricks2 686
static MenuEntry_t ME_MOUSEJOYSETUPBTNS_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_FuncList, NULL, Option );
4496 hendricks2 687
static MenuEntry_t ME_MOUSESETUPBTNS[MENUMOUSEFUNCTIONS];
688
static MenuEntry_t *MEL_MOUSESETUPBTNS[MENUMOUSEFUNCTIONS];
3084 terminx 689
 
4823 hendricks2 690
static MenuLink_t MEO_MOUSESETUP_BTNS = { MENU_MOUSEBTNS, MA_Advance, };
4778 hendricks2 691
static MenuEntry_t ME_MOUSESETUP_BTNS = MAKE_MENUENTRY( "Button assignment", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_BTNS, Link );
692
static MenuRangeFloat_t MEO_MOUSESETUP_SENSITIVITY = MAKE_MENURANGE( &CONTROL_MouseSensitivity, &MF_Redfont, .5f, 16.f, 0.f, 32, 1 );
693
static MenuEntry_t ME_MOUSESETUP_SENSITIVITY = MAKE_MENUENTRY( "Sensitivity:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_SENSITIVITY, RangeFloat );
694
static MenuOption_t MEO_MOUSESETUP_MOUSEAIMING = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &g_myAimMode );
695
static MenuEntry_t ME_MOUSESETUP_MOUSEAIMING = MAKE_MENUENTRY( "Vertical aiming:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_MOUSEAIMING, Option );
696
static MenuOption_t MEO_MOUSESETUP_INVERT = MAKE_MENUOPTION( &MF_Redfont, &MEOS_YesNo, &ud.mouseflip );
697
static MenuEntry_t ME_MOUSESETUP_INVERT = MAKE_MENUENTRY( "Invert aiming:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_INVERT, Option );
698
static MenuOption_t MEO_MOUSESETUP_SMOOTH = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &ud.config.SmoothInput );
699
static MenuEntry_t ME_MOUSESETUP_SMOOTH = MAKE_MENUENTRY( "Filter input:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_SMOOTH, Option );
4823 hendricks2 700
static MenuLink_t MEO_MOUSESETUP_ADVANCED = { MENU_MOUSEADVANCED, MA_Advance, };
4778 hendricks2 701
static MenuEntry_t ME_MOUSESETUP_ADVANCED = MAKE_MENUENTRY( "Advanced setup", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_ADVANCED, Link );
3084 terminx 702
 
4778 hendricks2 703
static MenuEntry_t *MEL_MOUSESETUP[] = {
4496 hendricks2 704
    &ME_MOUSESETUP_SENSITIVITY,
4850 hendricks2 705
    &ME_MOUSESETUP_BTNS,
4778 hendricks2 706
    &ME_Space2,
4850 hendricks2 707
    &ME_MOUSESETUP_MOUSEAIMING,
708
    &ME_MOUSESETUP_INVERT,
709
    &ME_MOUSESETUP_SMOOTH,
710
    &ME_MOUSESETUP_ADVANCED,
4609 terminx 711
};
712
 
4993 terminx 713
#ifdef DROIDMENU
5023 terminx 714
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_MOVE = MAKE_MENURANGE(&droidinput.forward_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
4993 terminx 715
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_MOVE = MAKE_MENUENTRY("Run sens:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_MOVE, RangeFloat);
716
 
5023 terminx 717
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_STRAFE = MAKE_MENURANGE(&droidinput.strafe_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
4993 terminx 718
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_STRAFE = MAKE_MENUENTRY("Strafe sens:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_STRAFE, RangeFloat);
719
 
5023 terminx 720
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_LOOK = MAKE_MENURANGE(&droidinput.pitch_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
4993 terminx 721
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_LOOK = MAKE_MENUENTRY("Look sens:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_LOOK, RangeFloat);
722
 
5023 terminx 723
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_TURN = MAKE_MENURANGE(&droidinput.yaw_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
4993 terminx 724
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_TURN = MAKE_MENUENTRY("Turn sens:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_TURN, RangeFloat);
725
 
726
static MenuOption_t MEO_TOUCHSETUP_INVERT = MAKE_MENUOPTION(&MF_Redfont, &MEOS_NoYes, &droidinput.invertLook);
727
static MenuEntry_t ME_TOUCHSETUP_INVERT = MAKE_MENUENTRY("Invert look:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_INVERT, Option);
728
 
729
static MenuEntry_t *MEL_TOUCHSETUP [] ={
730
    &ME_TOUCHSETUP_SENSITIVITY_MOVE,
731
    &ME_TOUCHSETUP_SENSITIVITY_STRAFE,
732
    &ME_TOUCHSETUP_SENSITIVITY_LOOK,
733
    &ME_TOUCHSETUP_SENSITIVITY_TURN,
734
    &ME_Space2,
735
    &ME_TOUCHSETUP_INVERT,
736
};
737
#endif
738
 
4778 hendricks2 739
MAKE_MENU_TOP_ENTRYLINK( "Edit Buttons", MEF_CenterMenu, JOYSTICK_EDITBUTTONS, MENU_JOYSTICKBTNS );
740
MAKE_MENU_TOP_ENTRYLINK( "Edit Axes", MEF_CenterMenu, JOYSTICK_EDITAXES, MENU_JOYSTICKAXES );
5 Plagman 741
 
4496 hendricks2 742
static MenuEntry_t *MEL_JOYSTICKSETUP[] = {
743
    &ME_JOYSTICK_EDITBUTTONS,
744
    &ME_JOYSTICK_EDITAXES,
745
};
5 Plagman 746
 
4496 hendricks2 747
#define MAXJOYBUTTONSTRINGLENGTH 32
5 Plagman 748
 
4826 hendricks2 749
static char MenuJoystickNames[MAXJOYBUTTONSANDHATS*2][MAXJOYBUTTONSTRINGLENGTH];
5 Plagman 750
 
4826 hendricks2 751
static MenuOption_t MEO_JOYSTICKBTNS[MAXJOYBUTTONSANDHATS*2];
752
static MenuEntry_t ME_JOYSTICKBTNS[MAXJOYBUTTONSANDHATS*2];
753
static MenuEntry_t *MEL_JOYSTICKBTNS[MAXJOYBUTTONSANDHATS*2];
59 terminx 754
 
4688 hendricks2 755
static MenuLink_t MEO_JOYSTICKAXES = { MENU_JOYSTICKAXIS, MA_Advance, };
4778 hendricks2 756
static MenuEntry_t ME_JOYSTICKAXES_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXES, Link );
4496 hendricks2 757
static MenuEntry_t ME_JOYSTICKAXES[MAXJOYAXES];
758
static char MenuJoystickAxes[MAXJOYAXES][MAXJOYBUTTONSTRINGLENGTH];
59 terminx 759
 
4496 hendricks2 760
static MenuEntry_t *MEL_JOYSTICKAXES[MAXJOYAXES];
2188 helixhorne 761
 
4778 hendricks2 762
static MenuRangeInt32_t MEO_MOUSEADVANCED_SCALEX = MAKE_MENURANGE( &ud.config.MouseAnalogueScale[0], &MF_Bluefont, -262144, 262144, 65536, 65, 3 );
763
static MenuEntry_t ME_MOUSEADVANCED_SCALEX = MAKE_MENUENTRY( "X-Axis Scale", &MF_Redfont, &MEF_BigSliders, &MEO_MOUSEADVANCED_SCALEX, RangeInt32 );
764
static MenuRangeInt32_t MEO_MOUSEADVANCED_SCALEY = MAKE_MENURANGE( &ud.config.MouseAnalogueScale[1], &MF_Bluefont, -262144, 262144, 65536, 65, 3 );
765
static MenuEntry_t ME_MOUSEADVANCED_SCALEY = MAKE_MENUENTRY( "Y-Axis Scale", &MF_Redfont, &MEF_BigSliders, &MEO_MOUSEADVANCED_SCALEY, RangeInt32 );
2188 helixhorne 766
 
4609 terminx 767
static MenuOption_t MEO_MOUSEADVANCED_DAXES_UP = MAKE_MENUOPTION( &MF_BluefontRed, &MEOS_Gamefuncs, &ud.config.MouseDigitalFunctions[1][0] );
4778 hendricks2 768
static MenuEntry_t ME_MOUSEADVANCED_DAXES_UP = MAKE_MENUENTRY( "Digital Up", &MF_Redfont, &MEF_BigSliders, &MEO_MOUSEADVANCED_DAXES_UP, Option );
4609 terminx 769
static MenuOption_t MEO_MOUSEADVANCED_DAXES_DOWN = MAKE_MENUOPTION( &MF_BluefontRed, &MEOS_Gamefuncs, &ud.config.MouseDigitalFunctions[1][1] );
4778 hendricks2 770
static MenuEntry_t ME_MOUSEADVANCED_DAXES_DOWN = MAKE_MENUENTRY( "Digital Down", &MF_Redfont, &MEF_BigSliders, &MEO_MOUSEADVANCED_DAXES_DOWN, Option );
4609 terminx 771
static MenuOption_t MEO_MOUSEADVANCED_DAXES_LEFT = MAKE_MENUOPTION( &MF_BluefontRed, &MEOS_Gamefuncs, &ud.config.MouseDigitalFunctions[0][0] );
4778 hendricks2 772
static MenuEntry_t ME_MOUSEADVANCED_DAXES_LEFT = MAKE_MENUENTRY( "Digital Left", &MF_Redfont, &MEF_BigSliders, &MEO_MOUSEADVANCED_DAXES_LEFT, Option );
4609 terminx 773
static MenuOption_t MEO_MOUSEADVANCED_DAXES_RIGHT = MAKE_MENUOPTION( &MF_BluefontRed, &MEOS_Gamefuncs, &ud.config.MouseDigitalFunctions[0][1] );
4778 hendricks2 774
static MenuEntry_t ME_MOUSEADVANCED_DAXES_RIGHT = MAKE_MENUENTRY( "Digital Right", &MF_Redfont, &MEF_BigSliders, &MEO_MOUSEADVANCED_DAXES_RIGHT, Option );
2188 helixhorne 775
 
4778 hendricks2 776
static MenuEntry_t *MEL_MOUSEADVANCED[] = {
777
    &ME_MOUSEADVANCED_SCALEX,
778
    &ME_MOUSEADVANCED_SCALEY,
779
    &ME_Space8,
4496 hendricks2 780
    &ME_MOUSEADVANCED_DAXES_UP,
781
    &ME_MOUSEADVANCED_DAXES_DOWN,
782
    &ME_MOUSEADVANCED_DAXES_LEFT,
783
    &ME_MOUSEADVANCED_DAXES_RIGHT,
784
};
3084 terminx 785
 
4778 hendricks2 786
static MenuEntry_t *MEL_INTERNAL_MOUSEADVANCED_DAXES[] = {
787
    &ME_MOUSEADVANCED_DAXES_UP,
788
    &ME_MOUSEADVANCED_DAXES_DOWN,
789
    &ME_MOUSEADVANCED_DAXES_LEFT,
790
    &ME_MOUSEADVANCED_DAXES_RIGHT,
791
};
792
 
4496 hendricks2 793
static const char *MenuJoystickHatDirections[] = { "Up", "Right", "Down", "Left", };
3084 terminx 794
 
4609 terminx 795
static char *MEOSN_JOYSTICKAXIS_ANALOG[] = { "  -None-", "Turning", "Strafing", "Looking", "Moving", };
4496 hendricks2 796
static int32_t MEOSV_JOYSTICKAXIS_ANALOG[] = { -1, analog_turning, analog_strafing, analog_lookingupanddown, analog_moving, };
4778 hendricks2 797
static MenuOptionSet_t MEOS_JOYSTICKAXIS_ANALOG = MAKE_MENUOPTIONSET( MEOSN_JOYSTICKAXIS_ANALOG, MEOSV_JOYSTICKAXIS_ANALOG, 0x0 );
4496 hendricks2 798
static MenuOption_t MEO_JOYSTICKAXIS_ANALOG = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_JOYSTICKAXIS_ANALOG, NULL );
4778 hendricks2 799
static MenuEntry_t ME_JOYSTICKAXIS_ANALOG = MAKE_MENUENTRY( "Analog", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_ANALOG, Option );
800
static MenuRangeInt32_t MEO_JOYSTICKAXIS_SCALE = MAKE_MENURANGE( NULL, &MF_Bluefont, -262144, 262144, 65536, 65, 3 );
801
static MenuEntry_t ME_JOYSTICKAXIS_SCALE = MAKE_MENUENTRY( "Scale", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_SCALE, RangeInt32 );
802
static MenuRangeInt32_t MEO_JOYSTICKAXIS_DEAD = MAKE_MENURANGE( NULL, &MF_Bluefont, 0, 1000000, 0, 33, 2 );
803
static MenuEntry_t ME_JOYSTICKAXIS_DEAD = MAKE_MENUENTRY( "Dead Zone", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_DEAD, RangeInt32 );
804
static MenuRangeInt32_t MEO_JOYSTICKAXIS_SATU = MAKE_MENURANGE( NULL, &MF_Bluefont, 0, 1000000, 0, 33, 2 );
805
static MenuEntry_t ME_JOYSTICKAXIS_SATU = MAKE_MENUENTRY( "Saturation", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_SATU, RangeInt32 );
3084 terminx 806
 
4496 hendricks2 807
static MenuOption_t MEO_JOYSTICKAXIS_DIGITALNEGATIVE = MAKE_MENUOPTION( &MF_Minifont, &MEOS_Gamefuncs, NULL );
4778 hendricks2 808
static MenuEntry_t ME_JOYSTICKAXIS_DIGITALNEGATIVE = MAKE_MENUENTRY( "Digital -", &MF_BluefontRed, &MEF_BigSliders, &MEO_JOYSTICKAXIS_DIGITALNEGATIVE, Option );
4496 hendricks2 809
static MenuOption_t MEO_JOYSTICKAXIS_DIGITALPOSITIVE = MAKE_MENUOPTION( &MF_Minifont, &MEOS_Gamefuncs, NULL );
4778 hendricks2 810
static MenuEntry_t ME_JOYSTICKAXIS_DIGITALPOSITIVE = MAKE_MENUENTRY( "Digital +", &MF_BluefontRed, &MEF_BigSliders, &MEO_JOYSTICKAXIS_DIGITALPOSITIVE, Option );
3084 terminx 811
 
4496 hendricks2 812
static MenuEntry_t *MEL_JOYSTICKAXIS[] = {
813
    &ME_JOYSTICKAXIS_ANALOG,
814
    &ME_JOYSTICKAXIS_SCALE,
815
    &ME_JOYSTICKAXIS_DEAD,
816
    &ME_JOYSTICKAXIS_SATU,
4778 hendricks2 817
    &ME_Space8,
818
    &ME_JOYSTICKAXIS_DIGITALNEGATIVE,
819
    &ME_JOYSTICKAXIS_DIGITALPOSITIVE,
4496 hendricks2 820
};
3084 terminx 821
 
4778 hendricks2 822
static MenuEntry_t *MEL_INTERNAL_JOYSTICKAXIS_DIGITAL[] = {
4496 hendricks2 823
    &ME_JOYSTICKAXIS_DIGITALNEGATIVE,
824
    &ME_JOYSTICKAXIS_DIGITALPOSITIVE,
825
};
3084 terminx 826
 
4496 hendricks2 827
#ifdef USE_OPENGL
828
static MenuOption_t MEO_RENDERERSETUP_HIGHTILE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &usehightile );
4778 hendricks2 829
static MenuEntry_t ME_RENDERERSETUP_HIGHTILE = MAKE_MENUENTRY( "Hires textures:", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_HIGHTILE, Option );
830
static MenuRangeInt32_t MEO_RENDERERSETUP_TEXQUALITY = MAKE_MENURANGE( &r_downsize, &MF_Bluefont, 2, 0, 0, 3, 0 );
831
static MenuEntry_t ME_RENDERERSETUP_TEXQUALITY = MAKE_MENUENTRY( "Hires texture quality", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_TEXQUALITY, RangeInt32 );
4496 hendricks2 832
static MenuOption_t MEO_RENDERERSETUP_PRECACHE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OffOn, &ud.config.useprecache );
4778 hendricks2 833
static MenuEntry_t ME_RENDERERSETUP_PRECACHE = MAKE_MENUENTRY( "Pre-load map textures", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_PRECACHE, Option );
4496 hendricks2 834
static char *MEOSN_RENDERERSETUP_TEXCACHE[] = { "Off", "On", "Compress", };
4778 hendricks2 835
static MenuOptionSet_t MEOS_RENDERERSETUP_TEXCACHE = MAKE_MENUOPTIONSET( MEOSN_RENDERERSETUP_TEXCACHE, NULL, 0x2 );
4496 hendricks2 836
static MenuOption_t MEO_RENDERERSETUP_TEXCACHE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_RENDERERSETUP_TEXCACHE, &glusetexcache );
4778 hendricks2 837
static MenuEntry_t ME_RENDERERSETUP_TEXCACHE = MAKE_MENUENTRY( "On disk texture cache", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_TEXCACHE, Option );
4997 terminx 838
#ifndef EDUKE32_GLES
4496 hendricks2 839
static MenuOption_t MEO_RENDERERSETUP_DETAILTEX = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &r_detailmapping );
4778 hendricks2 840
static MenuEntry_t ME_RENDERERSETUP_DETAILTEX = MAKE_MENUENTRY( "Detail textures:", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_DETAILTEX, Option );
4997 terminx 841
#endif
4496 hendricks2 842
static MenuOption_t MEO_RENDERERSETUP_MODELS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &usemodels );
4778 hendricks2 843
static MenuEntry_t ME_RENDERERSETUP_MODELS = MAKE_MENUENTRY( "Models:", &MF_BluefontRed, &MEF_SmallOptions, &MEO_RENDERERSETUP_MODELS, Option );
4496 hendricks2 844
#endif
3084 terminx 845
 
4496 hendricks2 846
#ifdef USE_OPENGL
4778 hendricks2 847
static MenuEntry_t *MEL_RENDERERSETUP[] = {
4496 hendricks2 848
    &ME_RENDERERSETUP_HIGHTILE,
849
    &ME_RENDERERSETUP_TEXQUALITY,
850
    &ME_RENDERERSETUP_PRECACHE,
4997 terminx 851
#ifndef EDUKE32_GLES
4496 hendricks2 852
    &ME_RENDERERSETUP_TEXCACHE,
853
    &ME_RENDERERSETUP_DETAILTEX,
4997 terminx 854
#endif
4778 hendricks2 855
    &ME_Space4,
4496 hendricks2 856
    &ME_RENDERERSETUP_MODELS,
857
};
858
#endif
3084 terminx 859
 
4609 terminx 860
#ifdef DROIDMENU
4778 hendricks2 861
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &vid_gamma, &MF_Bluefont, 1.f, 2.5f, 0.f, 39, 1 );
4609 terminx 862
#else
4778 hendricks2 863
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &vid_gamma, &MF_Bluefont, 0.2f, 4.f, 0.f, 39, 1 );
4609 terminx 864
#endif
4778 hendricks2 865
static MenuEntry_t ME_COLCORR_GAMMA = MAKE_MENUENTRY( "Gamma:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_GAMMA, RangeFloat );
866
static MenuRangeFloat_t MEO_COLCORR_CONTRAST = MAKE_MENURANGE( &vid_contrast, &MF_Bluefont, 0.1f, 2.7f, 0.f, 53, 1 );
867
static MenuEntry_t ME_COLCORR_CONTRAST = MAKE_MENUENTRY( "Contrast:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_CONTRAST, RangeFloat );
868
static MenuRangeFloat_t MEO_COLCORR_BRIGHTNESS = MAKE_MENURANGE( &vid_brightness, &MF_Bluefont, -0.8f, 0.8f, 0.f, 33, 1 );
869
static MenuEntry_t ME_COLCORR_BRIGHTNESS = MAKE_MENUENTRY( "Brightness:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_BRIGHTNESS, RangeFloat );
870
static MenuEntry_t ME_COLCORR_RESET = MAKE_MENUENTRY( "Reset To Defaults", &MF_Redfont, &MEF_ColorCorrect, &MEO_NULL, Link );
4993 terminx 871
#ifdef DROIDMENU
872
#define MINVIS 1.f
873
#else
874
#define MINVIS 0.125f
875
#endif
876
static MenuRangeFloat_t MEO_COLCORR_AMBIENT = MAKE_MENURANGE( &r_ambientlight, &MF_Bluefont, MINVIS, 4.f, 0.f, 32, 1 );
4778 hendricks2 877
static MenuEntry_t ME_COLCORR_AMBIENT = MAKE_MENUENTRY( "Visibility:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_AMBIENT, RangeFloat );
3084 terminx 878
 
4496 hendricks2 879
static MenuEntry_t *MEL_COLCORR[] = {
880
    &ME_COLCORR_GAMMA,
4609 terminx 881
#ifndef DROIDMENU
4496 hendricks2 882
    &ME_COLCORR_CONTRAST,
883
    &ME_COLCORR_BRIGHTNESS,
4609 terminx 884
#endif
4850 hendricks2 885
    &ME_COLCORR_AMBIENT,
4778 hendricks2 886
    &ME_Space8,
4496 hendricks2 887
    &ME_COLCORR_RESET,
888
};
3084 terminx 889
 
4778 hendricks2 890
static MenuEntry_t *MEL_SCREENSETUP[] = {
4682 hendricks2 891
#ifndef DROIDMENU
4850 hendricks2 892
    &ME_SCREENSETUP_SCREENSIZE,
4682 hendricks2 893
#endif
4609 terminx 894
 
4850 hendricks2 895
    &ME_SCREENSETUP_NEWSTATUSBAR,
896
    &ME_SCREENSETUP_SBARSIZE,
4609 terminx 897
 
4850 hendricks2 898
    &ME_SCREENSETUP_CROSSHAIR,
899
    &ME_SCREENSETUP_CROSSHAIRSIZE,
4609 terminx 900
 
4850 hendricks2 901
    &ME_SCREENSETUP_LEVELSTATS,
902
    &ME_SCREENSETUP_TEXTSIZE,
4609 terminx 903
 
4850 hendricks2 904
    &ME_SCREENSETUP_SHOWPICKUPMESSAGES,
4609 terminx 905
};
906
 
4496 hendricks2 907
// Save and load will be filled in before every viewing of the save/load screen.
4688 hendricks2 908
static MenuLink_t MEO_LOAD = { MENU_NULL, MA_None, };
909
static MenuLink_t MEO_LOAD_VALID = { MENU_LOADVERIFY, MA_None, };
4778 hendricks2 910
static MenuEntry_t ME_LOAD_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_MinifontRed, &MEF_LoadSave, &MEO_LOAD, Link );
4496 hendricks2 911
static MenuEntry_t ME_LOAD[MAXSAVEGAMES];
912
static MenuEntry_t *MEL_LOAD[MAXSAVEGAMES];
3084 terminx 913
 
4778 hendricks2 914
static MenuString_t MEO_SAVE_TEMPLATE = MAKE_MENUSTRING( NULL, &MF_MinifontRed, MAXSAVEGAMENAME, 0 );
4496 hendricks2 915
static MenuString_t MEO_SAVE[MAXSAVEGAMES];
4778 hendricks2 916
static MenuEntry_t ME_SAVE_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_MinifontRed, &MEF_LoadSave, &MEO_SAVE_TEMPLATE, String );
4496 hendricks2 917
static MenuEntry_t ME_SAVE[MAXSAVEGAMES];
918
static MenuEntry_t *MEL_SAVE[MAXSAVEGAMES];
3084 terminx 919
 
4496 hendricks2 920
static int32_t soundrate, soundbits, soundvoices;
4778 hendricks2 921
static MenuOption_t MEO_SOUND = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.config.SoundToggle );
922
static MenuEntry_t ME_SOUND = MAKE_MENUENTRY( "Sound:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND, Option );
4609 terminx 923
 
4778 hendricks2 924
static MenuOption_t MEO_SOUND_MUSIC = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.config.MusicToggle );
925
static MenuEntry_t ME_SOUND_MUSIC = MAKE_MENUENTRY( "Music:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_MUSIC, Option );
4609 terminx 926
 
4778 hendricks2 927
static MenuRangeInt32_t MEO_SOUND_VOLUME_MASTER = MAKE_MENURANGE( &ud.config.MasterVolume, &MF_Redfont, 0, 255, 0, 33, 2 );
928
static MenuEntry_t ME_SOUND_VOLUME_MASTER = MAKE_MENUENTRY( "Volume:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_VOLUME_MASTER, RangeInt32 );
4609 terminx 929
 
4778 hendricks2 930
static MenuRangeInt32_t MEO_SOUND_VOLUME_EFFECTS = MAKE_MENURANGE( &ud.config.FXVolume, &MF_Redfont, 0, 255, 0, 33, 2 );
931
static MenuEntry_t ME_SOUND_VOLUME_EFFECTS = MAKE_MENUENTRY( "Effects:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_VOLUME_EFFECTS, RangeInt32 );
4609 terminx 932
 
4778 hendricks2 933
static MenuRangeInt32_t MEO_SOUND_VOLUME_MUSIC = MAKE_MENURANGE( &ud.config.MusicVolume, &MF_Redfont, 0, 255, 0, 33, 2 );
934
static MenuEntry_t ME_SOUND_VOLUME_MUSIC = MAKE_MENUENTRY( "Music:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_VOLUME_MUSIC, RangeInt32 );
4609 terminx 935
 
4778 hendricks2 936
static MenuOption_t MEO_SOUND_DUKETALK = MAKE_MENUOPTION(&MF_Redfont, &MEOS_NoYes, NULL);
937
static MenuEntry_t ME_SOUND_DUKETALK = MAKE_MENUENTRY( "Duke talk:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_DUKETALK, Option );
4609 terminx 938
 
939
static char *MEOSN_SOUND_SAMPLINGRATE[] = { "22050Hz", "44100Hz", "48000Hz", };
940
static int32_t MEOSV_SOUND_SAMPLINGRATE[] = { 22050, 44100, 48000, };
4778 hendricks2 941
static MenuOptionSet_t MEOS_SOUND_SAMPLINGRATE = MAKE_MENUOPTIONSET( MEOSN_SOUND_SAMPLINGRATE, MEOSV_SOUND_SAMPLINGRATE, 0x3 );
942
static MenuOption_t MEO_SOUND_SAMPLINGRATE = MAKE_MENUOPTION( &MF_Redfont, &MEOS_SOUND_SAMPLINGRATE, &soundrate );
943
static MenuEntry_t ME_SOUND_SAMPLINGRATE = MAKE_MENUENTRY( "Sample rate:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_SAMPLINGRATE, Option );
4609 terminx 944
 
4496 hendricks2 945
static char *MEOSN_SOUND_SAMPLESIZE[] = { "8-bit", "16-bit", };
946
static int32_t MEOSV_SOUND_SAMPLESIZE[] = { 8, 16, };
4778 hendricks2 947
static MenuOptionSet_t MEOS_SOUND_SAMPLESIZE = MAKE_MENUOPTIONSET( MEOSN_SOUND_SAMPLESIZE, MEOSV_SOUND_SAMPLESIZE, 0x3 );
948
static MenuOption_t MEO_SOUND_SAMPLESIZE = MAKE_MENUOPTION( &MF_Redfont, &MEOS_SOUND_SAMPLESIZE, &soundbits );
949
static MenuEntry_t ME_SOUND_SAMPLESIZE = MAKE_MENUENTRY( "Sample size:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_SAMPLESIZE, Option );
3084 terminx 950
 
4778 hendricks2 951
static MenuRangeInt32_t MEO_SOUND_NUMVOICES = MAKE_MENURANGE( &soundvoices, &MF_Redfont, 16, 256, 0, 16, 1 );
952
static MenuEntry_t ME_SOUND_NUMVOICES = MAKE_MENUENTRY( "Voices:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_NUMVOICES, RangeInt32 );
4609 terminx 953
 
4778 hendricks2 954
static MenuEntry_t ME_SOUND_RESTART = MAKE_MENUENTRY( "Restart sound system", &MF_Redfont, &MEF_BigOptionsRt, &MEO_NULL, Link );
4609 terminx 955
 
4682 hendricks2 956
#ifndef DROIDMENU
4688 hendricks2 957
static MenuLink_t MEO_ADVSOUND = { MENU_ADVSOUND, MA_Advance, };
4778 hendricks2 958
static MenuEntry_t ME_SOUND_ADVSOUND = MAKE_MENUENTRY( "Advanced", &MF_Redfont, &MEF_BigOptionsRt, &MEO_ADVSOUND, Link );
4645 hendricks2 959
#endif
4609 terminx 960
 
4778 hendricks2 961
static MenuEntry_t *MEL_SOUND[] = {
4496 hendricks2 962
    &ME_SOUND,
963
    &ME_SOUND_MUSIC,
4778 hendricks2 964
    &ME_Space2,
4850 hendricks2 965
    &ME_SOUND_VOLUME_MASTER,
966
    &ME_SOUND_VOLUME_EFFECTS,
967
    &ME_SOUND_VOLUME_MUSIC,
4778 hendricks2 968
    &ME_Space2,
4496 hendricks2 969
    &ME_SOUND_DUKETALK,
4609 terminx 970
#ifndef DROIDMENU
4850 hendricks2 971
    &ME_SOUND_ADVSOUND,
4609 terminx 972
#endif
4496 hendricks2 973
};
3084 terminx 974
 
4778 hendricks2 975
static MenuEntry_t *MEL_ADVSOUND[] = {
4850 hendricks2 976
    &ME_SOUND_SAMPLINGRATE,
977
    &ME_SOUND_SAMPLESIZE,
4778 hendricks2 978
    &ME_Space2,
4850 hendricks2 979
    &ME_SOUND_NUMVOICES,
4778 hendricks2 980
    &ME_Space2,
4850 hendricks2 981
    &ME_SOUND_RESTART,
4609 terminx 982
};
983
 
4778 hendricks2 984
MAKE_MENU_TOP_ENTRYLINK( "Player Setup", MEF_CenterMenu, NETWORK_PLAYERSETUP, MENU_PLAYER );
985
MAKE_MENU_TOP_ENTRYLINK( "Join Game", MEF_CenterMenu, NETWORK_JOINGAME, MENU_NETJOIN );
986
MAKE_MENU_TOP_ENTRYLINK( "Host Game", MEF_CenterMenu, NETWORK_HOSTGAME, MENU_NETHOST );
4399 hendricks2 987
 
4496 hendricks2 988
static MenuEntry_t *MEL_NETWORK[] = {
989
    &ME_NETWORK_PLAYERSETUP,
990
    &ME_NETWORK_JOINGAME,
991
    &ME_NETWORK_HOSTGAME,
992
};
4399 hendricks2 993
 
4778 hendricks2 994
static MenuString_t MEO_PLAYER_NAME = MAKE_MENUSTRING( szPlayerName, &MF_Bluefont, MAXPLAYERNAME, 0 );
995
static MenuEntry_t ME_PLAYER_NAME = MAKE_MENUENTRY( "Name", &MF_BluefontRed, &MEF_PlayerNarrow, &MEO_PLAYER_NAME, String );
4496 hendricks2 996
static char *MEOSN_PLAYER_COLOR[] = { "Auto", "Blue", "Red", "Green", "Gray", "Dark gray", "Dark green", "Brown", "Dark blue", "Bright red", "Yellow", };
4822 hendricks2 997
static int32_t MEOSV_PLAYER_COLOR[] = { 0, 9, 10, 11, 12, 13, 14, 15, 16, 21, 23, };
4778 hendricks2 998
static MenuOptionSet_t MEOS_PLAYER_COLOR = MAKE_MENUOPTIONSET( MEOSN_PLAYER_COLOR, MEOSV_PLAYER_COLOR, 0x2 );
4496 hendricks2 999
static MenuOption_t MEO_PLAYER_COLOR = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_PLAYER_COLOR, &ud.color );
4778 hendricks2 1000
static MenuEntry_t ME_PLAYER_COLOR = MAKE_MENUENTRY( "Color", &MF_BluefontRed, &MEF_PlayerNarrow, &MEO_PLAYER_COLOR, Option );
4496 hendricks2 1001
static char *MEOSN_PLAYER_TEAM[] = { "Blue", "Red", "Green", "Gray", };
4778 hendricks2 1002
static MenuOptionSet_t MEOS_PLAYER_TEAM = MAKE_MENUOPTIONSET( MEOSN_PLAYER_TEAM, NULL, 0x2 );
4496 hendricks2 1003
static MenuOption_t MEO_PLAYER_TEAM = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_PLAYER_TEAM, &ud.team );
4778 hendricks2 1004
static MenuEntry_t ME_PLAYER_TEAM = MAKE_MENUENTRY( "Team", &MF_BluefontRed, &MEF_PlayerNarrow, &MEO_PLAYER_TEAM, Option );
4682 hendricks2 1005
#ifndef DROIDMENU
4688 hendricks2 1006
static MenuLink_t MEO_PLAYER_MACROS = { MENU_MACROS, MA_Advance, };
4778 hendricks2 1007
static MenuEntry_t ME_PLAYER_MACROS = MAKE_MENUENTRY( "Multiplayer macros", &MF_BluefontRed, &MEF_SmallOptions, &MEO_PLAYER_MACROS, Link );
4682 hendricks2 1008
#endif
5 Plagman 1009
 
4778 hendricks2 1010
static MenuEntry_t *MEL_PLAYER[] = {
4496 hendricks2 1011
    &ME_PLAYER_NAME,
4778 hendricks2 1012
    &ME_Space4,
4496 hendricks2 1013
    &ME_PLAYER_COLOR,
4778 hendricks2 1014
    &ME_Space4,
4496 hendricks2 1015
    &ME_PLAYER_TEAM,
4682 hendricks2 1016
#ifndef DROIDMENU
4778 hendricks2 1017
    &ME_Space8,
4496 hendricks2 1018
    &ME_PLAYER_MACROS,
4778 hendricks2 1019
#endif
4496 hendricks2 1020
};
5 Plagman 1021
 
4778 hendricks2 1022
static MenuString_t MEO_MACROS_TEMPLATE = MAKE_MENUSTRING( NULL, &MF_Bluefont, MAXRIDECULELENGTH, 0 );
4496 hendricks2 1023
static MenuString_t MEO_MACROS[MAXSAVEGAMES];
4778 hendricks2 1024
static MenuEntry_t ME_MACROS_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Bluefont, &MEF_Macros, &MEO_MACROS_TEMPLATE, String );
4496 hendricks2 1025
static MenuEntry_t ME_MACROS[MAXRIDECULE];
1026
static MenuEntry_t *MEL_MACROS[MAXRIDECULE];
5 Plagman 1027
 
4496 hendricks2 1028
static char *MenuUserMap = "User Map";
1029
static char *MenuSkillNone = "None";
5 Plagman 1030
 
4496 hendricks2 1031
static char *MEOSN_NetGametypes[MAXGAMETYPES];
1032
static char *MEOSN_NetEpisodes[MAXVOLUMES+1];
1033
static char *MEOSN_NetLevels[MAXVOLUMES][MAXLEVELS];
1034
static char *MEOSN_NetSkills[MAXSKILLS+1];
5 Plagman 1035
 
4823 hendricks2 1036
static MenuLink_t MEO_NETHOST_OPTIONS = { MENU_NETOPTIONS, MA_Advance, };
4778 hendricks2 1037
static MenuEntry_t ME_NETHOST_OPTIONS = MAKE_MENUENTRY( "Game Options", &MF_Redfont, &MEF_VideoSetup, &MEO_NETHOST_OPTIONS, Link );
1038
static MenuEntry_t ME_NETHOST_LAUNCH = MAKE_MENUENTRY( "Launch Game", &MF_Redfont, &MEF_VideoSetup, &MEO_NULL, Link );
5 Plagman 1039
 
4496 hendricks2 1040
static MenuEntry_t *MEL_NETHOST[] = {
1041
    &ME_NETHOST_OPTIONS,
1042
    &ME_NETHOST_LAUNCH,
1043
};
471 terminx 1044
 
4778 hendricks2 1045
static MenuOptionSet_t MEOS_NETOPTIONS_GAMETYPE = MAKE_MENUOPTIONSET( MEOSN_NetGametypes, NULL, 0x0 );
4496 hendricks2 1046
static MenuOption_t MEO_NETOPTIONS_GAMETYPE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NETOPTIONS_GAMETYPE, &ud.m_coop );
4778 hendricks2 1047
static MenuEntry_t ME_NETOPTIONS_GAMETYPE = MAKE_MENUENTRY( "Game Type", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_GAMETYPE, Option );
1048
static MenuOptionSet_t MEOS_NETOPTIONS_EPISODE = MAKE_MENUOPTIONSET( MEOSN_NetEpisodes, NULL, 0x0 );
4496 hendricks2 1049
static MenuOption_t MEO_NETOPTIONS_EPISODE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NETOPTIONS_EPISODE, NULL );
4778 hendricks2 1050
static MenuEntry_t ME_NETOPTIONS_EPISODE = MAKE_MENUENTRY( "Episode", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_EPISODE, Option );
4496 hendricks2 1051
static MenuOptionSet_t MEOS_NETOPTIONS_LEVEL[MAXVOLUMES];
1052
static MenuOption_t MEO_NETOPTIONS_LEVEL = MAKE_MENUOPTION( &MF_Bluefont, NULL, &ud.m_level_number );
4778 hendricks2 1053
static MenuEntry_t ME_NETOPTIONS_LEVEL = MAKE_MENUENTRY( "Level", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_LEVEL, Option );
4823 hendricks2 1054
static MenuLink_t MEO_NETOPTIONS_USERMAP = { MENU_NETUSERMAP, MA_Advance, };
4778 hendricks2 1055
static MenuEntry_t ME_NETOPTIONS_USERMAP = MAKE_MENUENTRY( "User Map", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_USERMAP, Link );
1056
static MenuOptionSet_t MEOS_NETOPTIONS_MONSTERS = MAKE_MENUOPTIONSET( MEOSN_NetSkills, NULL, 0x0 );
4496 hendricks2 1057
static MenuOption_t MEO_NETOPTIONS_MONSTERS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NETOPTIONS_MONSTERS, NULL );
4778 hendricks2 1058
static MenuEntry_t ME_NETOPTIONS_MONSTERS = MAKE_MENUENTRY( "Monsters", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_MONSTERS, Option );
4496 hendricks2 1059
static MenuOption_t MEO_NETOPTIONS_MARKERS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OffOn, &ud.m_marker );
4778 hendricks2 1060
static MenuEntry_t ME_NETOPTIONS_MARKERS = MAKE_MENUENTRY( "Markers", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_MARKERS, Option );
1061
static MenuEntry_t ME_NETOPTIONS_MARKERS_DISABLED = MAKE_MENUENTRY( "Markers", &MF_RedfontBlue, &MEF_NetSetup, NULL, Dummy );
4496 hendricks2 1062
static MenuOption_t MEO_NETOPTIONS_MAPEXITS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OnOff, &ud.m_noexits );
4778 hendricks2 1063
static MenuEntry_t ME_NETOPTIONS_MAPEXITS = MAKE_MENUENTRY( "Map Exits", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_MAPEXITS, Option );
4496 hendricks2 1064
static MenuOption_t MEO_NETOPTIONS_FRFIRE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OffOn, &ud.m_ffire );
4778 hendricks2 1065
static MenuEntry_t ME_NETOPTIONS_FRFIRE = MAKE_MENUENTRY( "Fr. Fire", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_FRFIRE, Option );
1066
static MenuEntry_t ME_NETOPTIONS_ACCEPT = MAKE_MENUENTRY( "Accept", &MF_RedfontGreen, &MEF_NetSetup, &MEO_NULL, Link );
471 terminx 1067
 
4496 hendricks2 1068
static MenuEntry_t *MEL_NETOPTIONS[] = {
1069
    &ME_NETOPTIONS_GAMETYPE,
1070
    &ME_NETOPTIONS_EPISODE,
1071
    &ME_NETOPTIONS_LEVEL,
1072
    &ME_NETOPTIONS_MONSTERS,
1073
    &ME_NETOPTIONS_MARKERS,
1074
    &ME_NETOPTIONS_MAPEXITS,
1075
    &ME_NETOPTIONS_ACCEPT,
1076
};
5 Plagman 1077
 
4496 hendricks2 1078
static char MenuServer[BMAX_PATH] = "localhost";
4778 hendricks2 1079
static MenuString_t MEO_NETJOIN_SERVER = MAKE_MENUSTRING( MenuServer, &MF_Bluefont, BMAX_PATH, 0 );
1080
static MenuEntry_t ME_NETJOIN_SERVER = MAKE_MENUENTRY( "Server", &MF_Redfont, &MEF_VideoSetup, &MEO_NETJOIN_SERVER, String );
4496 hendricks2 1081
#define MAXPORTSTRINGLENGTH 6 // unsigned 16-bit integer
1082
static char MenuPort[MAXPORTSTRINGLENGTH] = "19014";
4778 hendricks2 1083
static MenuString_t MEO_NETJOIN_PORT = MAKE_MENUSTRING( MenuPort, &MF_Bluefont, MAXPORTSTRINGLENGTH, INPUT_NUMERIC );
1084
static MenuEntry_t ME_NETJOIN_PORT = MAKE_MENUENTRY( "Port", &MF_Redfont, &MEF_VideoSetup, &MEO_NETJOIN_PORT, String );
1085
static MenuEntry_t ME_NETJOIN_CONNECT = MAKE_MENUENTRY( "Connect", &MF_RedfontGreen, &MEF_VideoSetup, &MEO_NULL, Link );
471 terminx 1086
 
4496 hendricks2 1087
static MenuEntry_t *MEL_NETJOIN[] = {
1088
    &ME_NETJOIN_SERVER,
1089
    &ME_NETJOIN_PORT,
1090
    &ME_NETJOIN_CONNECT,
1091
};
5 Plagman 1092
 
1093
 
4496 hendricks2 1094
#define NoTitle NULL
91 terminx 1095
 
4778 hendricks2 1096
#define MAKE_MENUMENU(Title, Format, Entries) { Title, Format, Entries, ARRAY_SIZE(Entries), 0, 0, 0, 0 }
91 terminx 1097
 
4778 hendricks2 1098
static MenuMenu_t M_MAIN = MAKE_MENUMENU( NoTitle, &MMF_Top_Main, MEL_MAIN );
1099
static MenuMenu_t M_MAIN_INGAME = MAKE_MENUMENU( NoTitle, &MMF_Top_Main, MEL_MAIN_INGAME );
1100
static MenuMenu_t M_EPISODE = MAKE_MENUMENU( "Select An Episode", &MMF_Top_Episode, MEL_EPISODE );
1101
static MenuMenu_t M_SKILL = MAKE_MENUMENU( "Select Skill", &MMF_Top_Skill, MEL_SKILL );
1102
static MenuMenu_t M_GAMESETUP = MAKE_MENUMENU( "Game Setup", &MMF_BigOptions, MEL_GAMESETUP );
1103
static MenuMenu_t M_OPTIONS = MAKE_MENUMENU( "Options", &MMF_Top_Options, MEL_OPTIONS );
1104
static MenuMenu_t M_VIDEOSETUP = MAKE_MENUMENU( "Video Mode", &MMF_BigOptions, MEL_VIDEOSETUP );
1105
static MenuMenu_t M_KEYBOARDSETUP = MAKE_MENUMENU( "Keyboard Setup", &MMF_Top_Options, MEL_KEYBOARDSETUP );
1106
static MenuMenu_t M_CONTROLS = MAKE_MENUMENU( "Control Setup", &MMF_Top_Options, MEL_CONTROLS );
1107
static MenuMenu_t M_MOUSESETUP = MAKE_MENUMENU( "Mouse Setup", &MMF_BigOptions, MEL_MOUSESETUP );
4993 terminx 1108
#ifdef DROIDMENU
1109
static MenuMenu_t M_TOUCHSETUP = MAKE_MENUMENU( "Touch Setup", &MMF_BigOptions, MEL_TOUCHSETUP );
1110
#endif
4778 hendricks2 1111
static MenuMenu_t M_JOYSTICKSETUP = MAKE_MENUMENU( "Joystick Setup", &MMF_Top_Joystick_Network, MEL_JOYSTICKSETUP );
1112
static MenuMenu_t M_JOYSTICKBTNS = MAKE_MENUMENU( "Joystick Buttons", &MMF_MouseJoySetupBtns, MEL_JOYSTICKBTNS );
1113
static MenuMenu_t M_JOYSTICKAXES = MAKE_MENUMENU( "Joystick Axes", &MMF_BigSliders, MEL_JOYSTICKAXES );
1114
static MenuMenu_t M_KEYBOARDKEYS = MAKE_MENUMENU( "Keyboard Keys", &MMF_KeyboardSetupFuncs, MEL_KEYBOARDSETUPFUNCS );
1115
static MenuMenu_t M_MOUSEBTNS = MAKE_MENUMENU( "Mouse Buttons", &MMF_MouseJoySetupBtns, MEL_MOUSESETUPBTNS );
1116
static MenuMenu_t M_MOUSEADVANCED = MAKE_MENUMENU( "Advanced Mouse", &MMF_BigSliders, MEL_MOUSEADVANCED );
1117
static MenuMenu_t M_JOYSTICKAXIS = MAKE_MENUMENU( NULL, &MMF_BigSliders, MEL_JOYSTICKAXIS );
4609 terminx 1118
#ifdef USE_OPENGL
4778 hendricks2 1119
static MenuMenu_t M_RENDERERSETUP = MAKE_MENUMENU( "Advanced Video", &MMF_SmallOptions, MEL_RENDERERSETUP );
4609 terminx 1120
#endif
4778 hendricks2 1121
static MenuMenu_t M_COLCORR = MAKE_MENUMENU( "Color Correction", &MMF_ColorCorrect, MEL_COLCORR );
4993 terminx 1122
static MenuMenu_t M_SCREENSETUP = MAKE_MENUMENU( "Status and crosshair", &MMF_BigOptions, MEL_SCREENSETUP );
4778 hendricks2 1123
static MenuMenu_t M_DISPLAYSETUP = MAKE_MENUMENU( "Display Setup", &MMF_BigOptions, MEL_DISPLAYSETUP );
1124
static MenuMenu_t M_LOAD = MAKE_MENUMENU( "Load Game", &MMF_LoadSave, MEL_LOAD );
1125
static MenuMenu_t M_SAVE = MAKE_MENUMENU( "Save Game", &MMF_LoadSave, MEL_SAVE );
1126
static MenuMenu_t M_SOUND = MAKE_MENUMENU( "Sound Setup", &MMF_BigOptions, MEL_SOUND );
4823 hendricks2 1127
static MenuMenu_t M_ADVSOUND = MAKE_MENUMENU( "Advanced Sound", &MMF_BigOptions, MEL_ADVSOUND );
4778 hendricks2 1128
static MenuMenu_t M_NETWORK = MAKE_MENUMENU( "Network Game", &MMF_Top_Joystick_Network, MEL_NETWORK );
1129
static MenuMenu_t M_PLAYER = MAKE_MENUMENU( "Player Setup", &MMF_SmallOptions, MEL_PLAYER );
1130
static MenuMenu_t M_MACROS = MAKE_MENUMENU( "Multiplayer Macros", &MMF_Macros, MEL_MACROS );
1131
static MenuMenu_t M_NETHOST = MAKE_MENUMENU( "Host Network Game", &MMF_SmallOptionsNarrow, MEL_NETHOST );
1132
static MenuMenu_t M_NETOPTIONS = MAKE_MENUMENU( "Net Game Options", &MMF_NetSetup, MEL_NETOPTIONS );
1133
static MenuMenu_t M_NETJOIN = MAKE_MENUMENU( "Join Network Game", &MMF_SmallOptionsNarrow, MEL_NETJOIN );
88 terminx 1134
 
4609 terminx 1135
#ifdef DROIDMENU
4688 hendricks2 1136
static MenuPanel_t M_STORY = { NoTitle, MENU_STORY, MA_Return, MENU_STORY, MA_Advance, };
4609 terminx 1137
#else
4688 hendricks2 1138
static MenuPanel_t M_STORY = { NoTitle, MENU_F1HELP, MA_Return, MENU_F1HELP, MA_Advance, };
4609 terminx 1139
#endif
1140
 
4688 hendricks2 1141
static MenuPanel_t M_F1HELP = { NoTitle, MENU_STORY, MA_Return, MENU_STORY, MA_Advance, };
4496 hendricks2 1142
static const char* MenuCredits = "Credits";
4688 hendricks2 1143
static MenuPanel_t M_CREDITS = { NoTitle, MENU_CREDITS5, MA_Return, MENU_CREDITS2, MA_Advance, };
1144
static MenuPanel_t M_CREDITS2 = { NoTitle, MENU_CREDITS, MA_Return, MENU_CREDITS3, MA_Advance, };
1145
static MenuPanel_t M_CREDITS3 = { NoTitle, MENU_CREDITS2, MA_Return, MENU_CREDITS4, MA_Advance, };
4609 terminx 1146
#ifdef DROIDMENU
5023 terminx 1147
static MenuPanel_t M_CREDITS4 = { "Hail to the King", MENU_CREDITS3, MA_Return, MENU_CREDITS5, MA_Advance, };
4609 terminx 1148
#else
4688 hendricks2 1149
static MenuPanel_t M_CREDITS4 = { "About EDuke32", MENU_CREDITS3, MA_Return, MENU_CREDITS5, MA_Advance, };
4609 terminx 1150
#endif
4688 hendricks2 1151
static MenuPanel_t M_CREDITS5 = { "About EDuke32", MENU_CREDITS4, MA_Return, MENU_CREDITS, MA_Advance, };
5 Plagman 1152
 
4686 hendricks2 1153
#define CURSOR_CENTER_2LINE { MENU_MARGIN_CENTER<<16, 120<<16, }
1154
#define CURSOR_CENTER_3LINE { MENU_MARGIN_CENTER<<16, 129<<16, }
4496 hendricks2 1155
#define CURSOR_BOTTOMRIGHT { 304<<16, 186<<16, }
5 Plagman 1156
 
4688 hendricks2 1157
static MenuVerify_t M_QUIT = { CURSOR_CENTER_2LINE, MENU_CLOSE, MA_None, };
1158
static MenuVerify_t M_QUITTOTITLE = { CURSOR_CENTER_2LINE, MENU_CLOSE, MA_None, };
1159
static MenuVerify_t M_LOADVERIFY = { CURSOR_CENTER_3LINE, MENU_CLOSE, MA_None, };
1160
static MenuVerify_t M_NEWVERIFY = { CURSOR_CENTER_2LINE, MENU_EPISODE, MA_Advance, };
1161
static MenuVerify_t M_SAVEVERIFY = { CURSOR_CENTER_2LINE, MENU_SAVE, MA_None, };
1162
static MenuVerify_t M_RESETPLAYER = { CURSOR_CENTER_3LINE, MENU_CLOSE, MA_None, };
5 Plagman 1163
 
4688 hendricks2 1164
static MenuMessage_t M_NETWAITMASTER = { CURSOR_BOTTOMRIGHT, MENU_NULL, MA_None, };
1165
static MenuMessage_t M_NETWAITVOTES = { CURSOR_BOTTOMRIGHT, MENU_NULL, MA_None, };
1166
static MenuMessage_t M_BUYDUKE = { CURSOR_BOTTOMRIGHT, MENU_EPISODE, MA_Return, };
5 Plagman 1167
 
4778 hendricks2 1168
static MenuPassword_t M_ADULTPASSWORD = { NULL, MAXPWLOCKOUT };
5 Plagman 1169
 
4851 hendricks2 1170
#define MAKE_MENUFILESELECT(a, b, c) { a, { &MMF_FileSelectLeft, &MMF_FileSelectRight }, { &MF_Minifont, &MF_MinifontRed }, b, c, { NULL, NULL }, { 0, 0 }, { 3<<16, 3<<16 }, FNLIST_INITIALIZER, 0 }
337 terminx 1171
 
4851 hendricks2 1172
static MenuFileSelect_t M_USERMAP = MAKE_MENUFILESELECT( "Select A User Map", "*.map", boardfilename );
337 terminx 1173
 
4496 hendricks2 1174
// MUST be in ascending order of MenuID enum values due to binary search
1175
static Menu_t Menus[] = {
4778 hendricks2 1176
    { &M_MAIN, MENU_MAIN, MENU_CLOSE, MA_None, Menu },
1177
    { &M_MAIN_INGAME, MENU_MAIN_INGAME, MENU_CLOSE, MA_None, Menu },
1178
    { &M_EPISODE, MENU_EPISODE, MENU_MAIN, MA_Return, Menu },
1179
    { &M_USERMAP, MENU_USERMAP, MENU_EPISODE, MA_Return, FileSelect },
1180
    { &M_SKILL, MENU_SKILL, MENU_EPISODE, MA_Return, Menu },
1181
    { &M_GAMESETUP, MENU_GAMESETUP, MENU_OPTIONS, MA_Return, Menu },
1182
    { &M_OPTIONS, MENU_OPTIONS, MENU_MAIN, MA_Return, Menu },
1183
    { &M_VIDEOSETUP, MENU_VIDEOSETUP, MENU_DISPLAYSETUP, MA_Return, Menu },
1184
    { &M_KEYBOARDSETUP, MENU_KEYBOARDSETUP, MENU_CONTROLS, MA_Return, Menu },
1185
    { &M_MOUSESETUP, MENU_MOUSESETUP, MENU_CONTROLS, MA_Return, Menu },
1186
    { &M_JOYSTICKSETUP, MENU_JOYSTICKSETUP, MENU_CONTROLS, MA_Return, Menu },
1187
    { &M_JOYSTICKBTNS, MENU_JOYSTICKBTNS, MENU_JOYSTICKSETUP, MA_Return, Menu },
1188
    { &M_JOYSTICKAXES, MENU_JOYSTICKAXES, MENU_JOYSTICKSETUP, MA_Return, Menu },
1189
    { &M_KEYBOARDKEYS, MENU_KEYBOARDKEYS, MENU_KEYBOARDSETUP, MA_Return, Menu },
1190
    { &M_MOUSEBTNS, MENU_MOUSEBTNS, MENU_MOUSESETUP, MA_Return, Menu },
1191
    { &M_MOUSEADVANCED, MENU_MOUSEADVANCED, MENU_MOUSESETUP, MA_Return, Menu },
1192
    { &M_JOYSTICKAXIS, MENU_JOYSTICKAXIS, MENU_JOYSTICKAXES, MA_Return, Menu },
4993 terminx 1193
#ifdef DROIDMENU
1194
    { &M_TOUCHSETUP, MENU_TOUCHSETUP, MENU_OPTIONS, MA_Return, Menu },
1195
#endif
4778 hendricks2 1196
    { &M_CONTROLS, MENU_CONTROLS, MENU_OPTIONS, MA_Return, Menu },
4609 terminx 1197
#ifdef USE_OPENGL
4778 hendricks2 1198
    { &M_RENDERERSETUP, MENU_RENDERERSETUP, MENU_DISPLAYSETUP, MA_Return, Menu },
4609 terminx 1199
#endif
4778 hendricks2 1200
    { &M_COLCORR, MENU_COLCORR, MENU_DISPLAYSETUP, MA_Return, Menu },
1201
    { &M_COLCORR, MENU_COLCORR_INGAME, MENU_CLOSE, MA_Return, Menu },
1202
    { &M_SCREENSETUP, MENU_SCREENSETUP, MENU_DISPLAYSETUP, MA_Return, Menu },
1203
    { &M_DISPLAYSETUP, MENU_DISPLAYSETUP, MENU_OPTIONS, MA_Return, Menu },
1204
    { &M_LOAD, MENU_LOAD, MENU_MAIN, MA_Return, Menu },
1205
    { &M_SAVE, MENU_SAVE, MENU_MAIN, MA_Return, Menu },
1206
    { &M_STORY, MENU_STORY, MENU_MAIN, MA_Return, Panel },
1207
    { &M_F1HELP, MENU_F1HELP, MENU_MAIN, MA_Return, Panel },
1208
    { &M_QUIT, MENU_QUIT, MENU_PREVIOUS, MA_Return, Verify },
1209
    { &M_QUITTOTITLE, MENU_QUITTOTITLE, MENU_PREVIOUS, MA_Return, Verify },
1210
    { &M_QUIT, MENU_QUIT_INGAME, MENU_CLOSE, MA_None, Verify },
1211
    { &M_NETHOST, MENU_NETSETUP, MENU_MAIN, MA_Return, Menu },
1212
    { &M_NETWAITMASTER, MENU_NETWAITMASTER, MENU_MAIN, MA_Return, Message },
1213
    { &M_NETWAITVOTES, MENU_NETWAITVOTES, MENU_MAIN, MA_Return, Message },
1214
    { &M_SOUND, MENU_SOUND, MENU_OPTIONS, MA_Return, Menu },
1215
    { &M_SOUND, MENU_SOUND_INGAME, MENU_CLOSE, MA_Return, Menu },
1216
    { &M_ADVSOUND, MENU_ADVSOUND, MENU_SOUND, MA_Return, Menu },
1217
    { &M_CREDITS, MENU_CREDITS, MENU_MAIN, MA_Return, Panel },
1218
    { &M_CREDITS2, MENU_CREDITS2, MENU_MAIN, MA_Return, Panel },
1219
    { &M_CREDITS3, MENU_CREDITS3, MENU_MAIN, MA_Return, Panel },
1220
    { &M_CREDITS4, MENU_CREDITS4, MENU_MAIN, MA_Return, Panel },
1221
    { &M_CREDITS5, MENU_CREDITS5, MENU_MAIN, MA_Return, Panel },
1222
    { &M_LOADVERIFY, MENU_LOADVERIFY, MENU_LOAD, MA_None, Verify },
1223
    { &M_NEWVERIFY, MENU_NEWVERIFY, MENU_MAIN, MA_Return, Verify },
1224
    { &M_SAVEVERIFY, MENU_SAVEVERIFY, MENU_SAVE, MA_None, Verify },
1225
    { &M_ADULTPASSWORD, MENU_ADULTPASSWORD, MENU_GAMESETUP, MA_None, Password },
1226
    { &M_RESETPLAYER, MENU_RESETPLAYER, MENU_CLOSE, MA_None, Verify },
1227
    { &M_BUYDUKE, MENU_BUYDUKE, MENU_EPISODE, MA_Return, Message },
1228
    { &M_NETWORK, MENU_NETWORK, MENU_MAIN, MA_Return, Menu },
1229
    { &M_PLAYER, MENU_PLAYER, MENU_OPTIONS, MA_Return, Menu },
1230
    { &M_MACROS, MENU_MACROS, MENU_PLAYER, MA_Return, Menu },
1231
    { &M_NETHOST, MENU_NETHOST, MENU_NETWORK, MA_Return, Menu },
1232
    { &M_NETOPTIONS, MENU_NETOPTIONS, MENU_NETWORK, MA_Return, Menu },
1233
    { &M_USERMAP, MENU_NETUSERMAP, MENU_NETOPTIONS, MA_Return, FileSelect },
1234
    { &M_NETJOIN, MENU_NETJOIN, MENU_NETWORK, MA_Return, Menu },
4496 hendricks2 1235
};
337 terminx 1236
 
4496 hendricks2 1237
static const size_t numMenus = ARRAY_SIZE(Menus);
337 terminx 1238
 
4496 hendricks2 1239
Menu_t *m_currentMenu = &Menus[0];
1240
static Menu_t *m_previousMenu = &Menus[0];
5 Plagman 1241
 
4496 hendricks2 1242
MenuID_t g_currentMenu;
1243
static MenuID_t g_previousMenu;
337 terminx 1244
 
4778 hendricks2 1245
#define MenuMenu_ChangeEntryList(m, el)\
4496 hendricks2 1246
    do {\
4778 hendricks2 1247
        m.entrylist = el;\
1248
        m.numEntries = ARRAY_SIZE(el);\
4496 hendricks2 1249
    } while (0)
5 Plagman 1250
 
4855 hendricks2 1251
static void MenuEntry_DisableOnCondition(MenuEntry_t * const entry, const int32_t condition)
1252
{
1253
    if (condition)
1254
        entry->flags |= Disabled;
1255
    else
1256
        entry->flags &= ~Disabled;
1257
}
5 Plagman 1258
 
4496 hendricks2 1259
/*
1260
This function prepares data after ART and CON have been processed.
1261
It also initializes some data in loops rather than statically at compile time.
1262
*/
1263
void M_Init(void)
1264
{
1265
    int32_t i, j, k;
5 Plagman 1266
 
4496 hendricks2 1267
    // prepare menu fonts
4778 hendricks2 1268
    MF_Redfont.tilenum = MF_RedfontBlue.tilenum = MF_RedfontGreen.tilenum = BIGALPHANUM;
4496 hendricks2 1269
    MF_Bluefont.tilenum = MF_BluefontRed.tilenum = STARTALPHANUM;
1270
    MF_Minifont.tilenum = MF_MinifontRed.tilenum = MF_MinifontDarkGray.tilenum = MINIFONT;
1271
    if (!minitext_lowercase)
1272
    {
1273
        MF_Minifont.textflags |= TEXT_UPPERCASE;
1274
        MF_MinifontRed.textflags |= TEXT_UPPERCASE;
1275
        MF_MinifontDarkGray.textflags |= TEXT_UPPERCASE;
1276
    }
5 Plagman 1277
 
4496 hendricks2 1278
    // prepare gamefuncs and keys
1279
    for (i = 0; i < NUMGAMEFUNCTIONS; ++i)
1280
    {
1281
        Bstrcpy(MenuGameFuncs[i], gamefunctions[i]);
5 Plagman 1282
 
4496 hendricks2 1283
        for (j = 0; j < MAXGAMEFUNCLEN; ++j)
1284
            if (MenuGameFuncs[i][j] == '_')
1285
                MenuGameFuncs[i][j] = ' ';
5 Plagman 1286
 
4496 hendricks2 1287
        MEOSN_Gamefuncs[i] = MenuGameFuncs[i];
1288
    }
1289
    MEOSN_Gamefuncs[NUMGAMEFUNCTIONS] = MenuGameFuncNone;
1290
    for (i = 0; i < NUMKEYS; ++i)
1291
        MEOSN_Keys[i] = key_names[i];
1292
    MEOSN_Keys[NUMKEYS-1] = MenuKeyNone;
5 Plagman 1293
 
1294
 
4496 hendricks2 1295
    // prepare episodes
1296
    k = -1;
4778 hendricks2 1297
    for (i = 0; i < g_numVolumes; ++i)
4496 hendricks2 1298
    {
1299
        if (EpisodeNames[i][0])
337 terminx 1300
        {
4496 hendricks2 1301
            MEL_EPISODE[i] = &ME_EPISODE[i];
1302
            ME_EPISODE[i] = ME_EPISODE_TEMPLATE;
1303
            ME_EPISODE[i].name = EpisodeNames[i];
1304
 
1305
            MEOSN_NetEpisodes[i] = EpisodeNames[i];
1306
 
1307
            k = i;
337 terminx 1308
        }
5 Plagman 1309
 
4496 hendricks2 1310
        // prepare levels
1311
        for (j = 0; j < MAXLEVELS; ++j)
337 terminx 1312
        {
4496 hendricks2 1313
            MEOSN_NetLevels[i][j] = MapInfo[MAXLEVELS*i+j].name;
1314
            if (MapInfo[i*MAXLEVELS+j].filename != NULL)
1315
                MEOS_NETOPTIONS_LEVEL[i].numOptions = j+1;
337 terminx 1316
        }
4496 hendricks2 1317
        MEOS_NETOPTIONS_LEVEL[i].optionNames = MEOSN_NetLevels[i];
1318
    }
1319
    ++k;
4778 hendricks2 1320
    M_EPISODE.numEntries = g_numVolumes+2; // k;
1321
    MEL_EPISODE[g_numVolumes] = &ME_Space4;
1322
    MEL_EPISODE[g_numVolumes+1] = &ME_EPISODE_USERMAP;
4496 hendricks2 1323
    MEOS_NETOPTIONS_EPISODE.numOptions = g_numVolumes + 1; // k+1;
1324
    MEOSN_NetEpisodes[g_numVolumes] = MenuUserMap;
4778 hendricks2 1325
    MMF_Top_Episode.pos.y = (48-(g_numVolumes*2))<<16;
4977 hendricks2 1326
    if (g_numSkills == 0)
1327
        MEO_EPISODE.linkID = MENU_NULL;
5 Plagman 1328
 
4496 hendricks2 1329
    // prepare skills
1330
    k = -1;
1331
    for (i = 0; i < g_numSkills && SkillNames[i][0]; ++i)
1332
    {
1333
        MEL_SKILL[i] = &ME_SKILL[i];
1334
        ME_SKILL[i] = ME_SKILL_TEMPLATE;
1335
        ME_SKILL[i].name = SkillNames[i];
5 Plagman 1336
 
4496 hendricks2 1337
        MEOSN_NetSkills[i] = SkillNames[i];
5 Plagman 1338
 
4496 hendricks2 1339
        k = i;
1340
    }
1341
    ++k;
4778 hendricks2 1342
    M_SKILL.numEntries = g_numSkills; // k;
4496 hendricks2 1343
    MEOS_NETOPTIONS_MONSTERS.numOptions = g_numSkills + 1; // k+1;
1344
    MEOSN_NetSkills[g_numSkills] = MenuSkillNone;
4778 hendricks2 1345
    MMF_Top_Skill.pos.y = (58 + (4-g_numSkills)*6)<<16;
1346
    M_SKILL.currentEntry = 1;
5 Plagman 1347
 
4496 hendricks2 1348
    // prepare multiplayer gametypes
1349
    k = -1;
1350
    for (i = 0; i < MAXGAMETYPES; ++i)
1351
        if (GametypeNames[i][0])
1352
        {
1353
            MEOSN_NetGametypes[i] = GametypeNames[i];
1354
            k = i;
1355
        }
1356
    ++k;
1357
    MEOS_NETOPTIONS_GAMETYPE.numOptions = k;
5 Plagman 1358
 
4496 hendricks2 1359
    // prepare savegames
1360
    for (i = 0; i < MAXSAVEGAMES; ++i)
1361
    {
1362
        MEL_LOAD[i] = &ME_LOAD[i];
1363
        MEL_SAVE[i] = &ME_SAVE[i];
1364
        ME_LOAD[i] = ME_LOAD_TEMPLATE;
1365
        ME_SAVE[i] = ME_SAVE_TEMPLATE;
1366
        ME_SAVE[i].entry = &MEO_SAVE[i];
1367
        MEO_SAVE[i] = MEO_SAVE_TEMPLATE;
5 Plagman 1368
 
4496 hendricks2 1369
        ME_LOAD[i].name = ud.savegame[i];
1370
        MEO_SAVE[i].variable = ud.savegame[i];
1371
    }
5 Plagman 1372
 
4496 hendricks2 1373
    // prepare text chat macros
1374
    for (i = 0; i < MAXRIDECULE; ++i)
1375
    {
1376
        MEL_MACROS[i] = &ME_MACROS[i];
1377
        ME_MACROS[i] = ME_MACROS_TEMPLATE;
1378
        ME_MACROS[i].entry = &MEO_MACROS[i];
1379
        MEO_MACROS[i] = MEO_MACROS_TEMPLATE;
5 Plagman 1380
 
4496 hendricks2 1381
        MEO_MACROS[i].variable = ud.ridecule[i];
1382
    }
1383
 
1384
    // prepare input
1385
    for (i = 0; i < NUMGAMEFUNCTIONS; ++i)
1386
    {
1387
        MEL_KEYBOARDSETUPFUNCS[i] = &ME_KEYBOARDSETUPFUNCS[i];
1388
        ME_KEYBOARDSETUPFUNCS[i] = ME_KEYBOARDSETUPFUNCS_TEMPLATE;
1389
        ME_KEYBOARDSETUPFUNCS[i].name = MenuGameFuncs[i];
1390
        ME_KEYBOARDSETUPFUNCS[i].entry = &MEO_KEYBOARDSETUPFUNCS[i];
1391
        MEO_KEYBOARDSETUPFUNCS[i] = MEO_KEYBOARDSETUPFUNCS_TEMPLATE;
1392
        MEO_KEYBOARDSETUPFUNCS[i].column[0] = &ud.config.KeyboardKeys[i][0];
1393
        MEO_KEYBOARDSETUPFUNCS[i].column[1] = &ud.config.KeyboardKeys[i][1];
1394
    }
1395
    for (i = 0; i < MENUMOUSEFUNCTIONS; ++i)
1396
    {
1397
        MEL_MOUSESETUPBTNS[i] = &ME_MOUSESETUPBTNS[i];
1398
        ME_MOUSESETUPBTNS[i] = ME_MOUSEJOYSETUPBTNS_TEMPLATE;
1399
        ME_MOUSESETUPBTNS[i].name = MenuMouseNames[i];
1400
        ME_MOUSESETUPBTNS[i].entry = &MEO_MOUSESETUPBTNS[i];
1401
        MEO_MOUSESETUPBTNS[i] = MEO_MOUSEJOYSETUPBTNS_TEMPLATE;
1402
        MEO_MOUSESETUPBTNS[i].data = &ud.config.MouseFunctions[MenuMouseDataIndex[i][0]][MenuMouseDataIndex[i][1]];
1403
    }
4828 hendricks2 1404
    for (i = 0; i < 2*joynumbuttons + 8*joynumhats; ++i)
4496 hendricks2 1405
    {
1406
        if (i < 2*joynumbuttons)
337 terminx 1407
        {
4496 hendricks2 1408
            if (i & 1)
1409
                Bsnprintf(MenuJoystickNames[i], MAXJOYBUTTONSTRINGLENGTH, "Double %s", getjoyname(1, i>>1));
1410
            else
1411
                Bstrncpy(MenuJoystickNames[i], getjoyname(1, i>>1), MAXJOYBUTTONSTRINGLENGTH);
337 terminx 1412
        }
1413
        else
1414
        {
4496 hendricks2 1415
            Bsnprintf(MenuJoystickNames[i], MAXJOYBUTTONSTRINGLENGTH, (i & 1) ? "Double Hat %d %s" : "Hat %d %s", ((i - 2*joynumbuttons)>>3), MenuJoystickHatDirections[((i - 2*joynumbuttons)>>1) % 4]);
337 terminx 1416
        }
5 Plagman 1417
 
4496 hendricks2 1418
        MEL_JOYSTICKBTNS[i] = &ME_JOYSTICKBTNS[i];
1419
        ME_JOYSTICKBTNS[i] = ME_MOUSEJOYSETUPBTNS_TEMPLATE;
1420
        ME_JOYSTICKBTNS[i].name = MenuJoystickNames[i];
1421
        ME_JOYSTICKBTNS[i].entry = &MEO_JOYSTICKBTNS[i];
1422
        MEO_JOYSTICKBTNS[i] = MEO_MOUSEJOYSETUPBTNS_TEMPLATE;
1423
        MEO_JOYSTICKBTNS[i].data = &ud.config.JoystickFunctions[i>>1][i&1];
4399 hendricks2 1424
    }
4828 hendricks2 1425
    M_JOYSTICKBTNS.numEntries = 2*joynumbuttons + 8*joynumhats;
4496 hendricks2 1426
    for (i = 0; i < joynumaxes; ++i)
1427
    {
1428
        ME_JOYSTICKAXES[i] = ME_JOYSTICKAXES_TEMPLATE;
1429
        Bstrncpy(MenuJoystickAxes[i], getjoyname(0, i), MAXJOYBUTTONSTRINGLENGTH);
1430
        ME_JOYSTICKAXES[i].name = MenuJoystickAxes[i];
1431
        MEL_JOYSTICKAXES[i] = &ME_JOYSTICKAXES[i];
1432
    }
4778 hendricks2 1433
    M_JOYSTICKAXES.numEntries = joynumaxes;
5 Plagman 1434
 
4496 hendricks2 1435
    // prepare video setup
1436
    for (i = 0; i < validmodecnt; ++i)
1437
    {
1438
        int32_t *const r = &MEOS_VIDEOSETUP_RESOLUTION.numOptions;
5 Plagman 1439
 
4496 hendricks2 1440
        for (j = 0; j < *r; ++j)
337 terminx 1441
        {
4496 hendricks2 1442
            if (validmode[i].xdim == resolution[j].xdim && validmode[i].ydim == resolution[j].ydim)
335 terminx 1443
            {
4496 hendricks2 1444
                resolution[j].flags |= validmode[i].fs ? RES_FS : RES_WIN;
1445
                if (validmode[i].bpp > resolution[j].bppmax)
1446
                    resolution[j].bppmax = validmode[i].bpp;
1447
                break;
335 terminx 1448
            }
337 terminx 1449
        }
4496 hendricks2 1450
 
1451
        if (j == *r) // no match found
337 terminx 1452
        {
4496 hendricks2 1453
            resolution[j].xdim = validmode[i].xdim;
1454
            resolution[j].ydim = validmode[i].ydim;
1455
            resolution[j].bppmax = validmode[i].bpp;
1456
            resolution[j].flags = validmode[i].fs ? RES_FS : RES_WIN;
1457
            Bsnprintf(resolution[j].name, MAXRESOLUTIONSTRINGLENGTH, "%d x %d", resolution[j].xdim, resolution[j].ydim);
1458
            MEOSN_VIDEOSETUP_RESOLUTION[j] = resolution[j].name;
1459
            ++*r;
1460
        }
1461
    }
337 terminx 1462
 
4496 hendricks2 1463
    // prepare shareware
1464
    if (VOLUMEONE)
1465
    {
1466
        // blue out episodes beyond the first
4778 hendricks2 1467
        for (i = 1; i < g_numVolumes; ++i)
337 terminx 1468
        {
4496 hendricks2 1469
            if (MEL_EPISODE[i])
335 terminx 1470
            {
4496 hendricks2 1471
                ME_EPISODE[i].font = &MF_RedfontBlue;
1472
                ME_EPISODE[i].entry = &MEO_EPISODE_SHAREWARE;
5 Plagman 1473
            }
337 terminx 1474
        }
4778 hendricks2 1475
        M_EPISODE.numEntries = g_numVolumes; // remove User Map (and spacer)
4496 hendricks2 1476
        MEOS_NETOPTIONS_EPISODE.numOptions = 1;
4855 hendricks2 1477
        MenuEntry_DisableOnCondition(&ME_NETOPTIONS_EPISODE, 1);
4496 hendricks2 1478
    }
5 Plagman 1479
 
4496 hendricks2 1480
    // prepare pre-Atomic
1481
    if (!VOLUMEALL || !PLUTOPAK)
1482
    {
1483
        // prepare credits
1484
        M_CREDITS.title = M_CREDITS2.title = M_CREDITS3.title = MenuCredits;
1485
    }
1486
}
5 Plagman 1487
 
4686 hendricks2 1488
static void M_RunMenu(Menu_t *cm, vec2_t origin);
5 Plagman 1489
 
1490
 
1491
 
4496 hendricks2 1492
/*
1493
At present, no true difference is planned between M_PreMenu() and M_PreMenuDraw().
1494
They are separate for purposes of organization.
1495
*/
5 Plagman 1496
 
4496 hendricks2 1497
static void M_PreMenu(MenuID_t cm)
1498
{
1499
    int32_t i;
1500
    DukePlayer_t *ps = g_player[myconnectindex].ps;
5 Plagman 1501
 
4496 hendricks2 1502
    switch (cm)
1503
    {
1504
    case MENU_MAIN_INGAME:
4855 hendricks2 1505
        MenuEntry_DisableOnCondition(&ME_MAIN_SAVEGAME, ud.recstat == 2);
1506
        MenuEntry_DisableOnCondition(&ME_MAIN_QUITTOTITLE, g_netServer || numplayers > 1);
4496 hendricks2 1507
    case MENU_MAIN:
1508
        if ((g_netServer || ud.multimode > 1) && ud.recstat != 2)
1509
        {
1510
            ME_MAIN_NEWGAME.entry = &MEO_MAIN_NEWGAME_NETWORK;
1511
            ME_MAIN_NEWGAME_INGAME.entry = &MEO_MAIN_NEWGAME_NETWORK;
1512
        }
1513
        else
1514
        {
1515
            ME_MAIN_NEWGAME.entry = &MEO_MAIN_NEWGAME;
1516
            ME_MAIN_NEWGAME_INGAME.entry = &MEO_MAIN_NEWGAME_INGAME;
1517
        }
1518
        break;
4399 hendricks2 1519
 
4496 hendricks2 1520
    case MENU_GAMESETUP:
1521
        MEO_GAMESETUP_DEMOREC.options = (ps->gm&MODE_GAME) ? &MEOS_DemoRec : &MEOS_OffOn;
4855 hendricks2 1522
        MenuEntry_DisableOnCondition(&ME_GAMESETUP_DEMOREC, (ps->gm&MODE_GAME) && ud.m_recstat != 1);
4496 hendricks2 1523
        break;
5 Plagman 1524
 
4496 hendricks2 1525
#ifdef USE_OPENGL
4850 hendricks2 1526
    case MENU_DISPLAYSETUP:
4496 hendricks2 1527
        if (getrendermode() == REND_CLASSIC)
4778 hendricks2 1528
            MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP);
4496 hendricks2 1529
#ifdef POLYMER
1530
        else if (getrendermode() == REND_POLYMER)
4778 hendricks2 1531
            MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP_GL_POLYMER);
4496 hendricks2 1532
#endif
1533
        else
4778 hendricks2 1534
            MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP_GL);
5 Plagman 1535
 
4976 hendricks2 1536
        vpsize = ud.screen_size + 4*(ud.screen_size>=8 && ud.statusbarmode==0);
1537
 
4496 hendricks2 1538
        if (getrendermode() != REND_CLASSIC)
4869 hendricks2 1539
        {
4609 terminx 1540
            for (i = (int32_t) ARRAY_SIZE(MEOSV_DISPLAYSETUP_ANISOTROPY) - 1; i >= 0; --i)
5 Plagman 1541
            {
4609 terminx 1542
                if (MEOSV_DISPLAYSETUP_ANISOTROPY[i] <= glinfo.maxanisotropy)
4496 hendricks2 1543
                {
4609 terminx 1544
                    MEOS_DISPLAYSETUP_ANISOTROPY.numOptions = i + 1;
4496 hendricks2 1545
                    break;
1546
                }
337 terminx 1547
            }
4869 hendricks2 1548
        }
4850 hendricks2 1549
        break;
5 Plagman 1550
 
4850 hendricks2 1551
    case MENU_RENDERERSETUP:
4855 hendricks2 1552
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_TEXQUALITY, !usehightile);
1553
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_PRECACHE, !usehightile);
4997 terminx 1554
#ifndef EDUKE32_GLES
4855 hendricks2 1555
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_TEXCACHE, !(glusetexcompr && usehightile));
1556
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_DETAILTEX, !usehightile);
4997 terminx 1557
#endif
4496 hendricks2 1558
        break;
1559
#endif
5 Plagman 1560
 
4496 hendricks2 1561
    case MENU_VIDEOSETUP:
4836 helixhorne 1562
    {
1563
        const int32_t nr = newresolution;
1564
 
4855 hendricks2 1565
        MenuEntry_DisableOnCondition(&ME_VIDEOSETUP_APPLY,
1566
             (xdim == resolution[nr].xdim && ydim == resolution[nr].ydim &&
4836 helixhorne 1567
              getrendermode() == newrendermode && fullscreen == newfullscreen)
1568
             || (newfullscreen ? !(resolution[nr].flags & RES_FS) : !(resolution[nr].flags & RES_WIN))
1569
             || (newrendermode != REND_CLASSIC && resolution[nr].bppmax <= 8));
4496 hendricks2 1570
        break;
4836 helixhorne 1571
    }
5 Plagman 1572
 
4496 hendricks2 1573
    case MENU_SOUND:
4676 terminx 1574
    case MENU_SOUND_INGAME:
4850 hendricks2 1575
    case MENU_ADVSOUND:
4986 terminx 1576
        MenuEntry_DisableOnCondition(&ME_SOUND_VOLUME_MASTER, !ud.config.SoundToggle && !ud.config.MusicToggle);
1577
        MenuEntry_DisableOnCondition(&ME_SOUND_VOLUME_EFFECTS, !ud.config.SoundToggle);
1578
        MenuEntry_DisableOnCondition(&ME_SOUND_VOLUME_MUSIC, !ud.config.MusicToggle);
1579
        MenuEntry_DisableOnCondition(&ME_SOUND_DUKETALK, !ud.config.SoundToggle);
1580
        MenuEntry_DisableOnCondition(&ME_SOUND_SAMPLINGRATE, !ud.config.SoundToggle && !ud.config.MusicToggle);
1581
        MenuEntry_DisableOnCondition(&ME_SOUND_SAMPLESIZE, !ud.config.SoundToggle && !ud.config.MusicToggle);
1582
        MenuEntry_DisableOnCondition(&ME_SOUND_NUMVOICES, !ud.config.SoundToggle);
1583
        MenuEntry_DisableOnCondition(&ME_SOUND_RESTART, soundrate == ud.config.MixRate &&
1584
                                                        soundvoices == ud.config.NumVoices &&
1585
                                                        soundbits == ud.config.NumBits);
4496 hendricks2 1586
        break;
1587
 
1588
    case MENU_MOUSESETUP:
4855 hendricks2 1589
        MenuEntry_DisableOnCondition(&ME_MOUSESETUP_MOUSEAIMING, ud.mouseaiming);
4496 hendricks2 1590
        break;
1591
 
1592
    case MENU_NETOPTIONS:
1593
        if (MEO_NETOPTIONS_EPISODE.currentOption == MEOS_NETOPTIONS_EPISODE.numOptions-1)
1594
            MEL_NETOPTIONS[2] = &ME_NETOPTIONS_USERMAP;
1595
        else
337 terminx 1596
        {
4496 hendricks2 1597
            MEL_NETOPTIONS[2] = &ME_NETOPTIONS_LEVEL;
1598
            MEO_NETOPTIONS_LEVEL.options = &MEOS_NETOPTIONS_LEVEL[MEO_NETOPTIONS_EPISODE.currentOption];
1599
        }
1600
        MEL_NETOPTIONS[4] = (GametypeFlags[ud.m_coop] & GAMETYPE_MARKEROPTION) ? &ME_NETOPTIONS_MARKERS : &ME_NETOPTIONS_MARKERS_DISABLED;
1601
        MEL_NETOPTIONS[5] = (GametypeFlags[ud.m_coop] & (GAMETYPE_PLAYERSFRIENDLY|GAMETYPE_TDM)) ? &ME_NETOPTIONS_FRFIRE : &ME_NETOPTIONS_MAPEXITS;
1602
        break;
2728 hendricks2 1603
 
4496 hendricks2 1604
    case MENU_OPTIONS:
4855 hendricks2 1605
        MenuEntry_DisableOnCondition(&ME_OPTIONS_PLAYERSETUP, ud.recstat == 1);
1606
        MenuEntry_DisableOnCondition(&ME_OPTIONS_JOYSTICKSETUP, CONTROL_JoyPresent == 0);
4496 hendricks2 1607
        break;
337 terminx 1608
 
4496 hendricks2 1609
    case MENU_LOAD:
1610
        for (i = 0; i < MAXSAVEGAMES; ++i)
1611
        {
4609 terminx 1612
            ME_LOAD[i].entry = (ud.savegame[i][0] /*&& !g_oldverSavegame[i]*/) ? &MEO_LOAD_VALID : &MEO_LOAD;
4496 hendricks2 1613
            ME_LOAD[i].font = g_oldverSavegame[i] ? &MF_MinifontDarkGray : &MF_MinifontRed;
337 terminx 1614
        }
4496 hendricks2 1615
        break;
5 Plagman 1616
 
4496 hendricks2 1617
    case MENU_SAVE:
1618
        for (i = 0; i < MAXSAVEGAMES; ++i)
1619
            MEO_SAVE[i].font = (g_oldverSavegame[i] && MEO_SAVE[i].editfield == NULL) ? &MF_MinifontDarkGray : &MF_MinifontRed;
337 terminx 1620
        break;
1621
 
4496 hendricks2 1622
    default:
1623
        break;
1624
    }
1625
}
337 terminx 1626
 
4549 hendricks2 1627
 
4686 hendricks2 1628
static void M_PreMenuDrawBackground(MenuID_t cm, const vec2_t origin)
4549 hendricks2 1629
{
1630
    switch (cm)
1631
    {
1632
    case MENU_CREDITS:
1633
    case MENU_CREDITS2:
1634
    case MENU_CREDITS3:
1635
        if (!VOLUMEALL || !PLUTOPAK)
4686 hendricks2 1636
            M_DrawBackground(origin);
4549 hendricks2 1637
        else
4688 hendricks2 1638
            rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,2504+cm-MENU_CREDITS,0,0,10+64);
4549 hendricks2 1639
        break;
1640
 
1641
    case MENU_LOAD:
1642
    case MENU_SAVE:
1643
    case MENU_CREDITS4:
1644
    case MENU_CREDITS5:
4686 hendricks2 1645
        M_DrawBackground(origin);
4549 hendricks2 1646
        break;
1647
 
1648
    case MENU_STORY:
4686 hendricks2 1649
        rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,TEXTSTORY,0,0,10+64);
4549 hendricks2 1650
        break;
1651
 
1652
    case MENU_F1HELP:
4686 hendricks2 1653
        rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,F1HELP,0,0,10+64);
4549 hendricks2 1654
        break;
1655
    }
1656
}
1657
 
1658
 
4778 hendricks2 1659
static void M_PreMenuDraw(MenuID_t cm, MenuEntry_t *entry, const vec2_t origin)
4496 hendricks2 1660
{
1661
    int32_t i, j, l = 0, m;
5 Plagman 1662
 
4496 hendricks2 1663
    switch (cm)
1664
    {
1665
    case MENU_MAIN_INGAME:
1666
        l += 4;
1667
    case MENU_MAIN:
4686 hendricks2 1668
        rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + ((28+l)<<16), 65536L,0,INGAMEDUKETHREEDEE,0,0,10);
4496 hendricks2 1669
        if (PLUTOPAK)   // JBF 20030804
4686 hendricks2 1670
            rotatesprite_fs(origin.x + ((MENU_MARGIN_CENTER+100)<<16), origin.y + (36<<16), 65536L,0,PLUTOPAKSPRITE+2,(sintable[(totalclock<<4)&2047]>>11),0,2+8);
4496 hendricks2 1671
        break;
5 Plagman 1672
 
4496 hendricks2 1673
    case MENU_PLAYER:
4686 hendricks2 1674
        rotatesprite_fs(origin.x + (260<<16), origin.y + ((24+(tilesiz[APLAYER].y>>1))<<16), 49152L,0,1441-((((4-(totalclock>>4)))&3)*5),0,entry == &ME_PLAYER_TEAM ? G_GetTeamPalette(ud.team) : ud.color,10);
4496 hendricks2 1675
        break;
1676
 
1677
    case MENU_MACROS:
4686 hendricks2 1678
        mgametextcenter(origin.x, origin.y + (144<<16), "Activate in-game with Shift-F#");
4496 hendricks2 1679
        break;
1680
 
1681
    case MENU_COLCORR:
1682
    case MENU_COLCORR_INGAME:
4686 hendricks2 1683
        // center panel
1684
        rotatesprite_fs(origin.x + (120<<16), origin.y + (32<<16), 16384, 0, 3290, 0, 0, 2|8|16);
1685
        rotatesprite_fs(origin.x + (160<<16) - (tilesiz[BOTTOMSTATUSBAR].x<<13), origin.y + (82<<16) - (tilesiz[BOTTOMSTATUSBAR].y<<14), 16384, 0, BOTTOMSTATUSBAR, 0, 0, 2|8|16);
1686
 
1687
        // left panel
1688
        rotatesprite_fs(origin.x + (40<<16), origin.y + (32<<16), 16384, 0, BONUSSCREEN, 0, 0, 2|8|16);
1689
 
1690
        // right panel
1691
        rotatesprite_fs(origin.x + (200<<16), origin.y + (32<<16), 16384, 0, LOADSCREEN, 0, 0, 2|8|16);
4496 hendricks2 1692
        break;
1693
 
1694
    case MENU_NETSETUP:
1695
    case MENU_NETHOST:
4686 hendricks2 1696
        mminitext(origin.x + (90<<16), origin.y + (90<<16), "Game Type", 2);
1697
        mminitext(origin.x + (90<<16), origin.y + ((90+8)<<16), "Episode", 2);
1698
        mminitext(origin.x + (90<<16), origin.y + ((90+8+8)<<16), "Level", 2);
1699
        mminitext(origin.x + (90<<16), origin.y + ((90+8+8+8)<<16), "Monsters", 2);
4496 hendricks2 1700
        if (ud.m_coop == 0)
4686 hendricks2 1701
            mminitext(origin.x + (90<<16), origin.y + ((90+8+8+8+8)<<16), "Markers", 2);
4496 hendricks2 1702
        else if (ud.m_coop == 1)
4686 hendricks2 1703
            mminitext(origin.x + (90<<16), origin.y + ((90+8+8+8+8)<<16), "Friendly Fire", 2);
1704
        mminitext(origin.x + (90<<16), origin.y + ((90+8+8+8+8+8)<<16), "User Map", 2);
4496 hendricks2 1705
 
4686 hendricks2 1706
        mminitext(origin.x + ((90+60)<<16), origin.y + (90<<16), GametypeNames[ud.m_coop], 0);
4496 hendricks2 1707
 
4686 hendricks2 1708
        mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8)<<16), EpisodeNames[ud.m_volume_number], 0);
1709
        mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8)<<16), MapInfo[MAXLEVELS*ud.m_volume_number+ud.m_level_number].name, 0);
4496 hendricks2 1710
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
4686 hendricks2 1711
            mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8+8)<<16), SkillNames[ud.m_player_skill], 0);
1712
        else mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8+8)<<16), "None", 0);
4496 hendricks2 1713
        if (ud.m_coop == 0)
337 terminx 1714
        {
4686 hendricks2 1715
            if (ud.m_marker) mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8+8+8)<<16), "On", 0);
1716
            else mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8+8+8)<<16), "Off", 0);
337 terminx 1717
        }
4496 hendricks2 1718
        else if (ud.m_coop == 1)
337 terminx 1719
        {
4686 hendricks2 1720
            if (ud.m_ffire) mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8+8+8)<<16), "On", 0);
1721
            else mminitext(origin.x + ((90+60)<<16), origin.y + ((90+8+8+8+8)<<16), "Off", 0);
4496 hendricks2 1722
        }
1723
        break;
4467 hendricks2 1724
 
4496 hendricks2 1725
    case MENU_KEYBOARDKEYS:
4914 hendricks2 1726
        mgametextcenter(origin.x, origin.y + (156<<16), "Up/Down = Select Action\n"
1727
                                                        "Left/Right = Select List\n"
1728
                                                        "Enter = Modify   Delete = Clear");
4496 hendricks2 1729
        break;
335 terminx 1730
 
4496 hendricks2 1731
    case MENU_MOUSESETUP:
1732
        if (entry == &ME_MOUSESETUP_MOUSEAIMING)
1733
        {
4855 hendricks2 1734
            if (entry->flags & Disabled)
337 terminx 1735
            {
4914 hendricks2 1736
                mgametextcenter(origin.x, origin.y + (167<<16), "Set mouse aim type to toggle on/off\n"
1737
                                                                "in the Player Setup menu to enable");
337 terminx 1738
            }
1739
        }
4496 hendricks2 1740
        break;
5 Plagman 1741
 
4496 hendricks2 1742
    case MENU_MOUSEBTNS:
4914 hendricks2 1743
        mgametextcenter(origin.x, origin.y + (169<<16), "Up/Down = Select Button\n"
1744
                                                        "Enter = Modify");
337 terminx 1745
        break;
5 Plagman 1746
 
4496 hendricks2 1747
    case MENU_MOUSEADVANCED:
4778 hendricks2 1748
    {
1749
        size_t i;
1750
        for (i = 0; i < ARRAY_SIZE(MEL_INTERNAL_MOUSEADVANCED_DAXES); i++)
1751
            if (entry == MEL_INTERNAL_MOUSEADVANCED_DAXES[i])
1752
            {
4914 hendricks2 1753
                mgametextcenter(origin.x, origin.y + (162<<16), "Digital axes are not for mouse look\n"
1754
                                                                "or for aiming up and down");
4778 hendricks2 1755
            }
1756
    }
4496 hendricks2 1757
        break;
5 Plagman 1758
 
4496 hendricks2 1759
    case MENU_JOYSTICKBTNS:
4914 hendricks2 1760
        mgametextcenter(origin.x, origin.y + (149<<16), "Up/Down = Select Button\n"
1761
                                                        "Enter = Modify");
4496 hendricks2 1762
        break;
5 Plagman 1763
 
4496 hendricks2 1764
    case MENU_RESETPLAYER:
4850 hendricks2 1765
        fade_screen_black(1);
4686 hendricks2 1766
        mgametextcenter(origin.x, origin.y + (90<<16), "Load last game:");
5 Plagman 1767
 
4496 hendricks2 1768
        Bsprintf(tempbuf,"\"%s\"",ud.savegame[g_lastSaveSlot]);
4686 hendricks2 1769
        mgametextcenter(origin.x, origin.y + (99<<16), tempbuf);
5 Plagman 1770
 
4609 terminx 1771
#ifndef DROIDMENU
4686 hendricks2 1772
        mgametextcenter(origin.x, origin.y + ((99+9)<<16), "(Y/N)");
4609 terminx 1773
#endif
4496 hendricks2 1774
        break;
5 Plagman 1775
 
4496 hendricks2 1776
    case MENU_LOAD:
1777
        for (i = 0; i <= 108; i += 12)
4686 hendricks2 1778
            rotatesprite_fs(origin.x + ((160+64+91-64)<<16), origin.y + ((i+56)<<16), 65536L,0,TEXTBOX,24,0,10);
337 terminx 1779
 
4686 hendricks2 1780
        rotatesprite_fs(origin.x + (22<<16), origin.y + (97<<16), 65536L,0,WINDOWBORDER2,24,0,10);
1781
        rotatesprite_fs(origin.x + (180<<16), origin.y + (97<<16), 65536L,1024,WINDOWBORDER2,24,0,10);
1782
        rotatesprite_fs(origin.x + (99<<16), origin.y + (50<<16), 65536L,512,WINDOWBORDER1,24,0,10);
1783
        rotatesprite_fs(origin.x + (103<<16), origin.y + (144<<16), 65536L,1024+512,WINDOWBORDER1,24,0,10);
2728 hendricks2 1784
 
4778 hendricks2 1785
        if (ud.savegame[M_LOAD.currentEntry][0])
337 terminx 1786
        {
4686 hendricks2 1787
            rotatesprite_fs(origin.x + (101<<16), origin.y + (97<<16), 65536>>1,512,TILE_LOADSHOT,-32,0,4+10+64);
2728 hendricks2 1788
 
4778 hendricks2 1789
            if (g_oldverSavegame[M_LOAD.currentEntry])
4496 hendricks2 1790
            {
4686 hendricks2 1791
                mmenutext(origin.x + (53<<16), origin.y + (70<<16), "Previous");
1792
                mmenutext(origin.x + (58<<16), origin.y + (90<<16), "Version");
337 terminx 1793
 
4609 terminx 1794
#ifndef DROIDMENU
4496 hendricks2 1795
                Bsprintf(tempbuf,"Saved: %d.%d.%d %d-bit", savehead.majorver, savehead.minorver,
1796
                         savehead.bytever, 8*savehead.ptrsize);
4686 hendricks2 1797
                mgametext(origin.x + (31<<16), origin.y + (104<<16), tempbuf);
4496 hendricks2 1798
                Bsprintf(tempbuf,"Our: %d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION,
1799
                         (int32_t)(8*sizeof(intptr_t)));
4686 hendricks2 1800
                mgametext(origin.x + ((31+16)<<16), origin.y + (114<<16), tempbuf);
4609 terminx 1801
#endif
337 terminx 1802
            }
5 Plagman 1803
 
4850 hendricks2 1804
            if (savehead.numplayers > 1)
1805
            {
1806
                Bsprintf(tempbuf, "Players: %-2d                      ", savehead.numplayers);
1807
                mgametextcenter(origin.x, origin.y + (156<<16), tempbuf);
1808
            }
4609 terminx 1809
 
4712 helixhorne 1810
            {
1811
                const char *name = MapInfo[(savehead.volnum*MAXLEVELS) + savehead.levnum].name;
1812
                Bsprintf(tempbuf, "%s / %s", name ? name : "^10unnamed^0", SkillNames[savehead.skill-1]);
1813
            }
1814
 
4686 hendricks2 1815
            mgametextcenter(origin.x, origin.y + (168<<16), tempbuf);
4496 hendricks2 1816
            if (savehead.volnum == 0 && savehead.levnum == 7)
4686 hendricks2 1817
                mgametextcenter(origin.x, origin.y + (180<<16), savehead.boardfn);
337 terminx 1818
        }
4496 hendricks2 1819
        else
4686 hendricks2 1820
            mmenutext(origin.x + (69<<16), origin.y + (70<<16), "Empty");
4496 hendricks2 1821
        break;
410 terminx 1822
 
4496 hendricks2 1823
    case MENU_SAVE:
1824
        for (i = 0; i <= 108; i += 12)
4686 hendricks2 1825
            rotatesprite_fs(origin.x + ((160+64+91-64)<<16), origin.y + ((i+56)<<16), 65536L,0,TEXTBOX,24,0,10);
337 terminx 1826
 
4686 hendricks2 1827
        rotatesprite_fs(origin.x + (22<<16), origin.y + (97<<16), 65536L,0,WINDOWBORDER2,24,0,10);
1828
        rotatesprite_fs(origin.x + (180<<16), origin.y + (97<<16), 65536L,1024,WINDOWBORDER2,24,0,10);
1829
        rotatesprite_fs(origin.x + (99<<16), origin.y + (50<<16), 65536L,512,WINDOWBORDER1,24,0,10);
1830
        rotatesprite_fs(origin.x + (103<<16), origin.y + (144<<16), 65536L,1024+512,WINDOWBORDER1,24,0,10);
337 terminx 1831
 
4780 hendricks2 1832
        j = 0;
1833
        for (i = 0; i < 10; ++i)
1834
            if (((MenuString_t*)M_SAVE.entrylist[i]->entry)->editfield)
1835
                j |= 1;
2728 hendricks2 1836
 
4780 hendricks2 1837
        if (j)
1838
            rotatesprite_fs(origin.x + (101<<16), origin.y + (97<<16), 65536L>>1,512,TILE_SAVESHOT,-32,0,4+10+64);
1839
        else if (ud.savegame[M_SAVE.currentEntry][0])
1840
            rotatesprite_fs(origin.x + (101<<16), origin.y + (97<<16), 65536L>>1,512,TILE_LOADSHOT,-32,0,4+10+64);
1841
        else
1842
            mmenutext(origin.x + (69<<16), origin.y + (70<<16), "Empty");
4496 hendricks2 1843
 
4780 hendricks2 1844
        if (ud.savegame[M_SAVE.currentEntry][0] && g_oldverSavegame[M_SAVE.currentEntry])
1845
        {
1846
            mmenutext(origin.x + (53<<16), origin.y + (70<<16), "Previous");
1847
            mmenutext(origin.x + (58<<16), origin.y + (90<<16), "Version");
4496 hendricks2 1848
 
4609 terminx 1849
#ifndef DROIDMENU
4780 hendricks2 1850
            Bsprintf(tempbuf,"Saved: %d.%d.%d %d-bit", savehead.majorver, savehead.minorver,
1851
                     savehead.bytever, 8*savehead.ptrsize);
1852
            mgametext(origin.x + (31<<16), origin.y + (104<<16), tempbuf);
1853
            Bsprintf(tempbuf,"Our: %d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION,
1854
                     (int32_t)(8*sizeof(intptr_t)));
1855
            mgametext(origin.x + ((31+16)<<16), origin.y + (114<<16), tempbuf);
4609 terminx 1856
#endif
337 terminx 1857
        }
5 Plagman 1858
 
4850 hendricks2 1859
        if (ud.multimode > 1)
1860
        {
1861
            Bsprintf(tempbuf, "Players: %-2d                      ", ud.multimode);
1862
            mgametextcenter(origin.x, origin.y + (156<<16), tempbuf);
1863
        }
4609 terminx 1864
 
1865
        Bsprintf(tempbuf,"%s / %s",MapInfo[(ud.volume_number*MAXLEVELS) + ud.level_number].name, SkillNames[ud.player_skill-1]);
4686 hendricks2 1866
        mgametextcenter(origin.x, origin.y + (168<<16), tempbuf);
337 terminx 1867
        if (ud.volume_number == 0 && ud.level_number == 7)
4686 hendricks2 1868
            mgametextcenter(origin.x, origin.y + (180<<16), currentboardfilename);
4496 hendricks2 1869
        break;
5 Plagman 1870
 
4609 terminx 1871
#ifdef DROIDMENU
1872
    case MENU_SKILL:
1873
    {
4778 hendricks2 1874
        static const char *s[] = { "EASY - Few enemies, and lots of stuff.", "MEDIUM - Normal difficulty.", "HARD - For experienced players.", "EXPERTS - Lots of enemies, plus they respawn!" };
1875
        if ((size_t)M_SKILL.currentEntry < ARRAY_SIZE(s))
1876
            mgametextcenter(origin.x, origin.y + (168<<16), s[M_SKILL.currentEntry]);
4609 terminx 1877
    }
1878
        break;
1879
#endif
1880
 
4496 hendricks2 1881
    case MENU_LOADVERIFY:
4850 hendricks2 1882
        fade_screen_black(1);
1883
        if (g_oldverSavegame[M_LOAD.currentEntry])
1884
        {
1885
            mgametextcenter(origin.x, origin.y + (90<<16), "Start new game:");
1886
            Bsprintf(tempbuf,"%s / %s",MapInfo[(ud.volume_number*MAXLEVELS) + ud.level_number].name, SkillNames[ud.player_skill-1]);
1887
            mgametextcenter(origin.x, origin.y + (99<<16), tempbuf);
1888
        }
1889
        else
1890
        {
1891
            mgametextcenter(origin.x, origin.y + (90<<16), "Load game:");
1892
            Bsprintf(tempbuf, "\"%s\"", ud.savegame[M_LOAD.currentEntry]);
1893
            mgametextcenter(origin.x, origin.y + (99<<16), tempbuf);
1894
        }
4609 terminx 1895
#ifndef DROIDMENU
4686 hendricks2 1896
        mgametextcenter(origin.x, origin.y + ((99+9)<<16), "(Y/N)");
4609 terminx 1897
#endif
4496 hendricks2 1898
        break;
5 Plagman 1899
 
4496 hendricks2 1900
    case MENU_SAVEVERIFY:
4850 hendricks2 1901
        fade_screen_black(1);
4686 hendricks2 1902
        mgametextcenter(origin.x, origin.y + (90<<16), "Overwrite previous saved game?");
4609 terminx 1903
#ifndef DROIDMENU
4686 hendricks2 1904
        mgametextcenter(origin.x, origin.y + ((90+9)<<16), "(Y/N)");
4609 terminx 1905
#endif