Subversion Repositories eduke32

Rev

Rev 8501 | Rev 8538 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 Plagman 1
//-------------------------------------------------------------------------
2
/*
5611 terminx 3
Copyright (C) 2016 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
 
7186 terminx 23
#include "cheats.h"
8114 terminx 24
#include "communityapi.h"
6074 hendricks2 25
#include "compat.h"
7186 terminx 26
#include "demo.h"
5 Plagman 27
#include "duke3d.h"
7186 terminx 28
#include "input.h"
29
#include "in_android.h"
30
#include "menus.h"
911 terminx 31
#include "osdcmds.h"
1677 terminx 32
#include "savegame.h"
4387 terminx 33
#include "xxhash.h"
1707 terminx 34
 
4993 terminx 35
#ifndef __ANDROID__
36
droidinput_t droidinput;
37
#endif
38
 
4686 hendricks2 39
// common positions
40
#define MENU_MARGIN_REGULAR 40
41
#define MENU_MARGIN_WIDE    32
42
#define MENU_MARGIN_CENTER  160
43
#define MENU_HEIGHT_CENTER  100
44
 
921 terminx 45
#define USERMAPENTRYLENGTH 25
46
 
6665 hendricks2 47
static FORCE_INLINE void Menu_StartTextInput()
5325 helixhorne 48
{
6665 hendricks2 49
    KB_FlushKeyboardQueue();
50
    KB_ClearKeysDown();
5331 hendricks2 51
#if defined EDUKE32_TOUCH_DEVICES && defined SDL_MAJOR_VERSION && SDL_MAJOR_VERSION > 1
5634 hendricks2 52
# if defined __ANDROID__
5625 terminx 53
    AndroidShowKeyboard(1);
5634 hendricks2 54
# else
55
    SDL_StartTextInput();
56
# endif
5325 helixhorne 57
#endif
58
}
59
 
6665 hendricks2 60
static FORCE_INLINE void Menu_StopTextInput()
5325 helixhorne 61
{
5331 hendricks2 62
#if defined EDUKE32_TOUCH_DEVICES && defined SDL_MAJOR_VERSION && SDL_MAJOR_VERSION > 1
5634 hendricks2 63
# if defined __ANDROID__
5625 terminx 64
    AndroidShowKeyboard(0);
5634 hendricks2 65
# else
66
    SDL_StopTextInput();
67
# endif
5325 helixhorne 68
#endif
69
}
70
 
6463 hendricks2 71
static FORCE_INLINE void rotatesprite_ybounds(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, int8_t dashade, char dapalnum, int32_t dastat, int32_t ydim_upper, int32_t ydim_lower)
72
{
73
    rotatesprite_(sx, sy, z, a, picnum, dashade, dapalnum, dastat, 0, 0, 0, ydim_upper, xdim-1, ydim_lower);
74
}
75
 
6212 hendricks2 76
static void mgametext(int32_t x, int32_t y, char const * t)
77
{
78
    G_ScreenText(MF_Bluefont.tilenum, x, y, MF_Bluefont.zoom, 0, 0, t, 0, MF_Bluefont.pal, 2|8|16|ROTATESPRITE_FULL16, 0, MF_Bluefont.emptychar.x, MF_Bluefont.emptychar.y, MF_Bluefont.between.x, MF_Bluefont.between.y, MF_Bluefont.textflags, 0, 0, xdim-1, ydim-1);
79
}
6613 hendricks2 80
 
7901 hendricks2 81
static vec2_t mgametextcenterat(int32_t x, int32_t y, char const * t, int32_t f = 0)
82
{
83
    return G_ScreenText(MF_Bluefont.tilenum, x, y, MF_Bluefont.zoom, 0, 0, t, 0, MF_Bluefont.pal, 2|8|16|ROTATESPRITE_FULL16, 0, MF_Bluefont.emptychar.x, MF_Bluefont.emptychar.y, MF_Bluefont.between.x, MF_Bluefont.between.y, MF_Bluefont.textflags|f|TEXT_XCENTER, 0, 0, xdim-1, ydim-1);
84
}
6212 hendricks2 85
static vec2_t mgametextcenter(int32_t x, int32_t y, char const * t, int32_t f = 0)
86
{
7901 hendricks2 87
    return mgametextcenterat((MENU_MARGIN_CENTER<<16) + x, y, t, f);
6212 hendricks2 88
}
5452 hendricks2 89
 
4686 hendricks2 90
#define mminitext(x,y,t,p) minitext_(x, y, t, 0, p, 2|8|16|ROTATESPRITE_FULL16)
6208 hendricks2 91
#define mmenutext menutext
1037 terminx 92
 
6190 hendricks2 93
#ifndef EDUKE32_STANDALONE
4686 hendricks2 94
static void shadowminitext(int32_t x, int32_t y, const char *t, int32_t p)
95
{
96
    int32_t f = 0;
4496 hendricks2 97
 
4686 hendricks2 98
    if (!minitext_lowercase)
99
        f |= TEXT_UPPERCASE;
4496 hendricks2 100
 
4686 hendricks2 101
    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);
102
}
6190 hendricks2 103
#endif
4686 hendricks2 104
static void creditsminitext(int32_t x, int32_t y, const char *t, int32_t p)
5 Plagman 105
{
4686 hendricks2 106
    int32_t f = TEXT_XCENTER;
107
 
108
    if (!minitext_lowercase)
109
        f |= TEXT_UPPERCASE;
110
 
111
    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);
112
}
113
 
4496 hendricks2 114
#pragma pack(push,1)
115
static savehead_t savehead;
116
#pragma pack(pop)
117
 
5923 terminx 118
static void Menu_DrawBackground(const vec2_t origin)
3101 hendricks2 119
{
4686 hendricks2 120
    rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (100<<16), 65536L,0,MENUSCREEN,16,0,10+64);
4496 hendricks2 121
}
3101 hendricks2 122
 
5923 terminx 123
static void Menu_DrawTopBar(const vec2_t origin)
4549 hendricks2 124
{
6555 hendricks2 125
    if ((G_GetLogoFlags() & LOGO_NOTITLEBAR) == 0)
126
        rotatesprite_fs(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (19<<16), MF_Redfont.cursorScale, 0,MENUBAR,16,0,10);
4549 hendricks2 127
}
3101 hendricks2 128
 
5923 terminx 129
static void Menu_DrawTopBarCaption(const char *caption, const vec2_t origin)
4496 hendricks2 130
{
6613 hendricks2 131
    static char t[64];
132
    size_t const srclen = strlen(caption);
133
    size_t const dstlen = min(srclen, ARRAY_SIZE(t)-1);
134
    memcpy(t, caption, dstlen);
135
    t[dstlen] = '\0';
136
    char *p = &t[dstlen-1];
137
    if (*p == ':')
138
        *p = '\0';
7322 terminx 139
    captionmenutext(origin.x + (MENU_MARGIN_CENTER<<16), origin.y + (24<<16) + ((15>>1)<<16), t);
5 Plagman 140
}
141
 
6463 hendricks2 142
static FORCE_INLINE int32_t Menu_CursorShade(void)
143
{
8050 pogokeen 144
    return VM_OnEventWithReturn(EVENT_MENUCURSORSHADE, -1, myconnectindex, 4-(sintable[((int32_t) totalclock<<4)&2047]>>11));
6463 hendricks2 145
}
146
static void Menu_DrawCursorCommon(int32_t x, int32_t y, int32_t z, int32_t picnum, int32_t ydim_upper = 0, int32_t ydim_lower = ydim-1)
147
{
148
    rotatesprite_(x, y, z, 0, picnum, Menu_CursorShade(), 0, 2|8, 0, 0, 0, ydim_upper, xdim-1, ydim_lower);
149
}
150
static void Menu_DrawCursorLeft(int32_t x, int32_t y, int32_t z)
151
{
7808 terminx 152
    if (FURY) return;
8050 pogokeen 153
    Menu_DrawCursorCommon(x, y, z, VM_OnEventWithReturn(EVENT_MENUCURSORLEFT, -1, myconnectindex, SPINNINGNUKEICON+(((int32_t) totalclock>>3)%7)));
6463 hendricks2 154
}
155
static void Menu_DrawCursorRight(int32_t x, int32_t y, int32_t z)
156
{
7808 terminx 157
    if (FURY) return;
8050 pogokeen 158
    Menu_DrawCursorCommon(x, y, z, VM_OnEventWithReturn(EVENT_MENUCURSORRIGHT, -1, myconnectindex, SPINNINGNUKEICON+6-((6+((int32_t) totalclock>>3))%7)));
6463 hendricks2 159
}
7694 terminx 160
static void Menu_DrawCursorTextTile(int32_t x, int32_t y, int32_t h, int32_t picnum, vec2_16_t const & siz, int32_t ydim_upper = 0, int32_t ydim_lower = ydim-1)
6464 hendricks2 161
{
7322 terminx 162
    vec2_t const adjsiz = { (siz.x>>1)<<16, siz.y<<16 };
6464 hendricks2 163
    Menu_DrawCursorCommon(x + scale(adjsiz.x, h, adjsiz.y), y, divscale16(h, adjsiz.y), picnum, ydim_upper, ydim_lower);
164
}
6463 hendricks2 165
static void Menu_DrawCursorText(int32_t x, int32_t y, int32_t h, int32_t ydim_upper = 0, int32_t ydim_lower = ydim-1)
166
{
7694 terminx 167
    vec2_16_t const & siz = tilesiz[SPINNINGNUKEICON];
6464 hendricks2 168
 
7808 terminx 169
    if (FURY || siz.x == 0)
6464 hendricks2 170
    {
171
        Menu_DrawCursorTextTile(x, y, h, SMALLFNTCURSOR, tilesiz[SMALLFNTCURSOR], ydim_upper, ydim_lower);
172
        return;
173
    }
174
 
8050 pogokeen 175
    Menu_DrawCursorTextTile(x, y, h, SPINNINGNUKEICON+(((int32_t) totalclock>>3)%7), siz, ydim_upper, ydim_lower);
6463 hendricks2 176
}
177
 
7070 terminx 178
 
7114 terminx 179
static uint16_t g_oldSaveCnt;
5 Plagman 180
 
181
 
182
 
183
 
4496 hendricks2 184
/*
185
All MAKE_* macros are generally for the purpose of keeping state initialization
186
separate from actual data. Alternatively, they can serve to factor out repetitive
187
stuff and keep the important bits from getting lost to our eyes.
4506 hendricks2 188
 
7930 hendricks2 189
They serve as a stand-in for C++ default value constructors, since this was written
190
when the codebase still used C89.
4778 hendricks2 191
 
192
Note that I prefer to include a space on the inside of the macro parentheses, since
193
they effectively stand in for curly braces as struct initializers.
4496 hendricks2 194
*/
2313 helixhorne 195
 
196
 
7930 hendricks2 197
MenuGameplayStemEntry g_MenuGameplayEntries[MAXMENUGAMEPLAYENTRIES];
198
 
4496 hendricks2 199
// common font types
200
// tilenums are set after namesdyn runs
2313 helixhorne 201
 
6613 hendricks2 202
//                                      emptychar x,y       between x,y         zoom                cursorLeft          cursorCenter        cursorScale         textflags
203
//                                      tilenum             shade_deselected    shade_disabled      pal                 pal_selected        pal_deselected      pal_disabled
204
MenuFont_t MF_Redfont =               { { 5<<16, 15<<16 },  { 0, 0 },           65536,              20<<16,             110<<16,            65536,              TEXT_BIGALPHANUM | TEXT_UPPERCASE,
205
                                        -1,                 10,                 0,                  0,                  0,                  0,                  1,
206
                                        0,                  0,                  1 };
207
MenuFont_t MF_Bluefont =              { { 5<<16, 7<<16 },   { 0, 0 },           65536,              10<<16,             110<<16,            32768,              0,
208
                                        -1,                 10,                 0,                  0,                  10,                 10,                 16,
209
                                        0,                  0,                  16 };
210
MenuFont_t MF_Minifont =              { { 4<<16, 5<<16 },   { 1<<16, 1<<16 },   65536,              10<<16,             110<<16,            32768,              0,
211
                                        -1,                 10,                 0,                  0,                  2,                  2,                  0,
212
                                        0,                  0,                  16 };
2313 helixhorne 213
 
6613 hendricks2 214
 
5478 terminx 215
static MenuMenuFormat_t MMF_Top_Main =             { {  MENU_MARGIN_CENTER<<16, 55<<16, }, -(170<<16) };
216
static MenuMenuFormat_t MMF_Top_Episode =          { {  MENU_MARGIN_CENTER<<16, 48<<16, }, -(190<<16) };
7930 hendricks2 217
static MenuMenuFormat_t MMF_Top_NewGameCustom =    { {  MENU_MARGIN_CENTER<<16, 48<<16, }, -(190<<16) };
218
static MenuMenuFormat_t MMF_Top_NewGameCustomSub = { {  MENU_MARGIN_CENTER<<16, 48<<16, }, -(190<<16) };
5478 terminx 219
static MenuMenuFormat_t MMF_Top_Skill =            { {  MENU_MARGIN_CENTER<<16, 58<<16, }, -(190<<16) };
220
static MenuMenuFormat_t MMF_Top_Options =          { {  MENU_MARGIN_CENTER<<16, 38<<16, }, -(190<<16) };
221
static MenuMenuFormat_t MMF_Top_Joystick_Network = { {  MENU_MARGIN_CENTER<<16, 70<<16, }, -(190<<16) };
222
static MenuMenuFormat_t MMF_BigOptions =           { {    MENU_MARGIN_WIDE<<16, 38<<16, }, -(190<<16) };
223
static MenuMenuFormat_t MMF_SmallOptions =         { {    MENU_MARGIN_WIDE<<16, 37<<16, },    170<<16 };
224
static MenuMenuFormat_t MMF_Macros =               { {                  26<<16, 40<<16, },    160<<16 };
225
static MenuMenuFormat_t MMF_SmallOptionsNarrow  =  { { MENU_MARGIN_REGULAR<<16, 38<<16, }, -(190<<16) };
6680 hendricks2 226
static MenuMenuFormat_t MMF_KeyboardSetupFuncs =   { {                  50<<16, 34<<16, },    151<<16 };
5478 terminx 227
static MenuMenuFormat_t MMF_MouseJoySetupBtns =    { {                  76<<16, 34<<16, },    143<<16 };
228
static MenuMenuFormat_t MMF_FuncList =             { {                 100<<16, 51<<16, },    152<<16 };
229
static MenuMenuFormat_t MMF_ColorCorrect =         { { MENU_MARGIN_REGULAR<<16, 86<<16, },    190<<16 };
230
static MenuMenuFormat_t MMF_BigSliders =           { {    MENU_MARGIN_WIDE<<16, 37<<16, },    190<<16 };
6569 hendricks2 231
static MenuMenuFormat_t MMF_LoadSave =             { {                 200<<16, 49<<16, },    145<<16 };
5478 terminx 232
static MenuMenuFormat_t MMF_NetSetup =             { {                  36<<16, 38<<16, },    190<<16 };
233
static MenuMenuFormat_t MMF_FileSelectLeft =       { {                  40<<16, 45<<16, },    162<<16 };
234
static MenuMenuFormat_t MMF_FileSelectRight =      { {                 164<<16, 45<<16, },    162<<16 };
4778 hendricks2 235
 
6203 hendricks2 236
static MenuEntryFormat_t MEF_Null =             {     0,      0,          0 };
237
static MenuEntryFormat_t MEF_MainMenu =         { 4<<16,      0,          0 };
6289 hendricks2 238
static MenuEntryFormat_t MEF_OptionsMenu =      { 7<<16,      0,          0 };
8017 terminx 239
static MenuEntryFormat_t MEF_LeftMenu =         { 7<<16,      0,    120<<16 };
6203 hendricks2 240
static MenuEntryFormat_t MEF_CenterMenu =       { 7<<16,      0,          0 };
6650 hendricks2 241
static MenuEntryFormat_t MEF_BigOptions_Apply = { 4<<16, 16<<16, -(260<<16) };
6203 hendricks2 242
static MenuEntryFormat_t MEF_BigOptionsRt =     { 4<<16,      0, -(260<<16) };
7968 hendricks2 243
static MenuEntryFormat_t MEF_BigOptionsRtSections = { 3<<16,      0, -(260<<16) };
6013 terminx 244
#if defined USE_OPENGL || !defined EDUKE32_ANDROID_MENU
6680 hendricks2 245
static MenuEntryFormat_t MEF_SmallOptions =     { 1<<16,      0, -(260<<16) };
4647 hendricks2 246
#endif
6203 hendricks2 247
static MenuEntryFormat_t MEF_BigCheats =        { 3<<16,      0, -(260<<16) };
248
static MenuEntryFormat_t MEF_Cheats =           { 2<<16,      0, -(260<<16) };
249
static MenuEntryFormat_t MEF_PlayerNarrow =     { 1<<16,      0,     90<<16 };
250
static MenuEntryFormat_t MEF_Macros =           { 2<<16,     -1,    268<<16 };
251
static MenuEntryFormat_t MEF_VideoSetup =       { 4<<16,      0,    168<<16 };
6207 hendricks2 252
static MenuEntryFormat_t MEF_VideoSetup_Apply = { 4<<16, 16<<16,    168<<16 };
6680 hendricks2 253
static MenuEntryFormat_t MEF_KBFuncList =       { 3<<16,      0, -(225<<16) };
254
static MenuEntryFormat_t MEF_FuncList =         { 3<<16,      0, -(170<<16) };
6203 hendricks2 255
static MenuEntryFormat_t MEF_ColorCorrect =     { 2<<16,      0, -(240<<16) };
6680 hendricks2 256
static MenuEntryFormat_t MEF_BigSliders =       { 2<<16,      0, -(260<<16) };
6569 hendricks2 257
static MenuEntryFormat_t MEF_LoadSave =         { 2<<16,     -1,     78<<16 };
6203 hendricks2 258
static MenuEntryFormat_t MEF_NetSetup =         { 4<<16,      0,    112<<16 };
6207 hendricks2 259
static MenuEntryFormat_t MEF_NetSetup_Confirm = { 4<<16, 16<<16,    112<<16 };
2313 helixhorne 260
 
4496 hendricks2 261
// common menu option sets
4778 hendricks2 262
#define MAKE_MENUOPTIONSET(optionNames, optionValues, features) { optionNames, optionValues, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, ARRAY_SIZE(optionNames), -1, 0, features }
263
#define MAKE_MENUOPTIONSETDYN(optionNames, optionValues, numOptions, features) { optionNames, optionValues, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, numOptions, -1, 0, features }
5034 hendricks2 264
#define MAKE_MENUOPTIONSETNULL { NULL, NULL, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, 0, -1, 0, 0 }
2313 helixhorne 265
 
5547 terminx 266
static char const *MEOSN_OffOn[] = { "Off", "On", };
4778 hendricks2 267
static MenuOptionSet_t MEOS_OffOn = MAKE_MENUOPTIONSET( MEOSN_OffOn, NULL, 0x3 );
5547 terminx 268
static char const *MEOSN_OnOff[] = { "On", "Off", };
4778 hendricks2 269
static MenuOptionSet_t MEOS_OnOff = MAKE_MENUOPTIONSET( MEOSN_OnOff, NULL, 0x3 );
5547 terminx 270
static char const *MEOSN_NoYes[] = { "No", "Yes", };
4778 hendricks2 271
static MenuOptionSet_t MEOS_NoYes = MAKE_MENUOPTIONSET( MEOSN_NoYes, NULL, 0x3 );
5547 terminx 272
static char const *MEOSN_YesNo[] = { "Yes", "No", };
4778 hendricks2 273
static MenuOptionSet_t MEOS_YesNo = MAKE_MENUOPTIONSET( MEOSN_YesNo, NULL, 0x3 );
2313 helixhorne 274
 
5 Plagman 275
 
4496 hendricks2 276
static char MenuGameFuncs[NUMGAMEFUNCTIONS][MAXGAMEFUNCLEN];
5547 terminx 277
static char const *MenuGameFuncNone = "  -None-";
278
static char const *MEOSN_Gamefuncs[NUMGAMEFUNCTIONS+1];
6185 hendricks2 279
static int32_t MEOSV_Gamefuncs[NUMGAMEFUNCTIONS+1];
280
static MenuOptionSet_t MEOS_Gamefuncs = MAKE_MENUOPTIONSET( MEOSN_Gamefuncs, MEOSV_Gamefuncs, 0x1 );
2313 helixhorne 281
 
5 Plagman 282
 
283
 
4496 hendricks2 284
/*
4778 hendricks2 285
MenuEntry_t is passed in arrays of pointers so that the callback function
4496 hendricks2 286
that is called when an entry is modified or activated can test equality of the current
4778 hendricks2 287
entry pointer directly against the known ones, instead of relying on an ID number.
5 Plagman 288
 
4778 hendricks2 289
That way, individual menu entries can be ifdef'd out painlessly.
4496 hendricks2 290
*/
2728 hendricks2 291
 
4688 hendricks2 292
static MenuLink_t MEO_NULL = { MENU_NULL, MA_None, };
4496 hendricks2 293
static const char* MenuCustom = "Custom";
2728 hendricks2 294
 
4778 hendricks2 295
#define MAKE_MENUSTRING(...) { NULL, __VA_ARGS__, }
4496 hendricks2 296
#define MAKE_MENUOPTION(...) { __VA_ARGS__, -1, }
297
#define MAKE_MENURANGE(...) { __VA_ARGS__, }
298
#define MAKE_MENUENTRY(...) { __VA_ARGS__, 0, 0, 0, }
2728 hendricks2 299
 
4778 hendricks2 300
 
301
#define MAKE_SPACER( EntryName, Height ) \
6198 hendricks2 302
static MenuSpacer_t MEO_ ## EntryName = { Height };
4778 hendricks2 303
 
304
MAKE_SPACER( Space2, 2<<16 ); // bigoptions
305
MAKE_SPACER( Space4, 4<<16 ); // usermap, smalloptions, anything else non-top
306
MAKE_SPACER( Space6, 6<<16 ); // videosetup
307
MAKE_SPACER( Space8, 8<<16 ); // colcorr, redslide
308
 
6198 hendricks2 309
static MenuEntry_t ME_Space2_Redfont = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_Null, &MEO_Space2, Spacer );
310
static MenuEntry_t ME_Space4_Bluefont = MAKE_MENUENTRY( NULL, &MF_Bluefont, &MEF_Null, &MEO_Space4, Spacer );
8027 hendricks2 311
static MenuEntry_t ME_Space4_Redfont = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_Null, &MEO_Space4, Spacer );
6415 terminx 312
#ifndef EDUKE32_SIMPLE_MENU
6198 hendricks2 313
static MenuEntry_t ME_Space8_Bluefont = MAKE_MENUENTRY( NULL, &MF_Bluefont, &MEF_Null, &MEO_Space8, Spacer );
314
#endif
6415 terminx 315
static MenuEntry_t ME_Space6_Redfont = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_Null, &MEO_Space6, Spacer );
6198 hendricks2 316
static MenuEntry_t ME_Space8_Redfont = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_Null, &MEO_Space8, Spacer );
4778 hendricks2 317
 
318
#define MAKE_MENU_TOP_ENTRYLINK( Title, Format, EntryName, LinkID ) \
4688 hendricks2 319
static MenuLink_t MEO_ ## EntryName = { LinkID, MA_Advance, };\
4778 hendricks2 320
static MenuEntry_t ME_ ## EntryName = MAKE_MENUENTRY( Title, &MF_Redfont, &Format, &MEO_ ## EntryName, Link )
2728 hendricks2 321
 
6329 hendricks2 322
static char const s_NewGame[] = "New Game";
323
static char const s_SaveGame[] = "Save Game";
324
static char const s_LoadGame[] = "Load Game";
325
static char const s_Continue[] = "Continue";
326
static char const s_Options[] = "Options";
327
static char const s_Credits[] = "Credits";
2728 hendricks2 328
 
6329 hendricks2 329
MAKE_MENU_TOP_ENTRYLINK( s_NewGame, MEF_MainMenu, MAIN_NEWGAME, MENU_EPISODE );
6013 terminx 330
#ifdef EDUKE32_SIMPLE_MENU
5000 terminx 331
MAKE_MENU_TOP_ENTRYLINK( "Resume Game", MEF_MainMenu, MAIN_RESUMEGAME, MENU_CLOSE );
332
#endif
6329 hendricks2 333
MAKE_MENU_TOP_ENTRYLINK( s_NewGame, MEF_MainMenu, MAIN_NEWGAME_INGAME, MENU_NEWVERIFY );
4688 hendricks2 334
static MenuLink_t MEO_MAIN_NEWGAME_NETWORK = { MENU_NETWORK, MA_Advance, };
6329 hendricks2 335
MAKE_MENU_TOP_ENTRYLINK( s_SaveGame, MEF_MainMenu, MAIN_SAVEGAME, MENU_SAVE );
336
MAKE_MENU_TOP_ENTRYLINK( s_LoadGame, MEF_MainMenu, MAIN_LOADGAME, MENU_LOAD );
337
MAKE_MENU_TOP_ENTRYLINK( s_Options, MEF_MainMenu, MAIN_OPTIONS, MENU_OPTIONS );
6754 terminx 338
#ifdef EDUKE32_STANDALONE
339
MAKE_MENU_TOP_ENTRYLINK( "Read me!", MEF_MainMenu, MAIN_HELP, MENU_STORY );
340
#else
341
MAKE_MENU_TOP_ENTRYLINK("Help", MEF_MainMenu, MAIN_HELP, MENU_STORY);
342
#endif
6013 terminx 343
#ifndef EDUKE32_SIMPLE_MENU
6329 hendricks2 344
MAKE_MENU_TOP_ENTRYLINK( s_Credits, MEF_MainMenu, MAIN_CREDITS, MENU_CREDITS );
4682 hendricks2 345
#endif
5663 terminx 346
MAKE_MENU_TOP_ENTRYLINK( "End Game", MEF_MainMenu, MAIN_QUITTOTITLE, MENU_QUITTOTITLE );
4778 hendricks2 347
MAKE_MENU_TOP_ENTRYLINK( "Quit", MEF_MainMenu, MAIN_QUIT, MENU_QUIT );
6013 terminx 348
#ifndef EDUKE32_SIMPLE_MENU
4778 hendricks2 349
MAKE_MENU_TOP_ENTRYLINK( "Quit Game", MEF_MainMenu, MAIN_QUITGAME, MENU_QUIT );
5462 hendricks2 350
#endif
2728 hendricks2 351
 
4496 hendricks2 352
static MenuEntry_t *MEL_MAIN[] = {
353
    &ME_MAIN_NEWGAME,
5068 terminx 354
    &ME_MAIN_LOADGAME,
4496 hendricks2 355
    &ME_MAIN_OPTIONS,
6466 hendricks2 356
    &ME_MAIN_HELP,
6013 terminx 357
#ifndef EDUKE32_SIMPLE_MENU
5663 terminx 358
    &ME_MAIN_CREDITS,
4609 terminx 359
#endif
4496 hendricks2 360
    &ME_MAIN_QUIT,
361
};
4609 terminx 362
 
4496 hendricks2 363
static MenuEntry_t *MEL_MAIN_INGAME[] = {
6013 terminx 364
#ifdef EDUKE32_SIMPLE_MENU
5000 terminx 365
    &ME_MAIN_RESUMEGAME,
366
#else
4496 hendricks2 367
    &ME_MAIN_NEWGAME_INGAME,
5000 terminx 368
#endif
4496 hendricks2 369
    &ME_MAIN_SAVEGAME,
370
    &ME_MAIN_LOADGAME,
371
    &ME_MAIN_OPTIONS,
372
    &ME_MAIN_HELP,
373
    &ME_MAIN_QUITTOTITLE,
6466 hendricks2 374
#ifndef EDUKE32_SIMPLE_MENU
4496 hendricks2 375
    &ME_MAIN_QUITGAME,
5000 terminx 376
#endif
4496 hendricks2 377
};
2728 hendricks2 378
 
4496 hendricks2 379
// Episode and Skill will be dynamically generated after CONs are parsed
4688 hendricks2 380
static MenuLink_t MEO_EPISODE = { MENU_SKILL, MA_Advance, };
381
static MenuLink_t MEO_EPISODE_SHAREWARE = { MENU_BUYDUKE, MA_Advance, };
4778 hendricks2 382
static MenuEntry_t ME_EPISODE_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_CenterMenu, &MEO_EPISODE, Link );
4496 hendricks2 383
static MenuEntry_t ME_EPISODE[MAXVOLUMES];
4688 hendricks2 384
static MenuLink_t MEO_EPISODE_USERMAP = { MENU_USERMAP, MA_Advance, };
4778 hendricks2 385
static MenuEntry_t ME_EPISODE_USERMAP = MAKE_MENUENTRY( "User Map", &MF_Redfont, &MEF_CenterMenu, &MEO_EPISODE_USERMAP, Link );
386
static MenuEntry_t *MEL_EPISODE[MAXVOLUMES+2]; // +2 for spacer and User Map
398 terminx 387
 
7930 hendricks2 388
static MenuLink_t MEO_NEWGAMECUSTOM_TEMPLATE = { MENU_NEWGAMECUSTOMSUB, MA_Advance, };
389
static MenuLink_t MEO_NEWGAMECUSTOM[MAXMENUGAMEPLAYENTRIES];
390
static MenuLink_t MEO_NEWGAMECUSTOMSUB_TEMPLATE = { MENU_SKILL, MA_Advance, };
391
static MenuLink_t MEO_NEWGAMECUSTOMSUB[MAXMENUGAMEPLAYENTRIES][MAXMENUGAMEPLAYENTRIES];
392
MenuEntry_t ME_NEWGAMECUSTOMENTRIES[MAXMENUGAMEPLAYENTRIES];
393
MenuEntry_t ME_NEWGAMECUSTOMSUBENTRIES[MAXMENUGAMEPLAYENTRIES][MAXMENUGAMEPLAYENTRIES];
394
static MenuEntry_t *MEL_NEWGAMECUSTOM[MAXMENUGAMEPLAYENTRIES];
395
static MenuEntry_t *MEL_NEWGAMECUSTOMSUB[MAXMENUGAMEPLAYENTRIES];
396
 
4778 hendricks2 397
static MenuEntry_t ME_SKILL_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_CenterMenu, &MEO_NULL, Link );
4496 hendricks2 398
static MenuEntry_t ME_SKILL[MAXSKILLS];
399
static MenuEntry_t *MEL_SKILL[MAXSKILLS];
5 Plagman 400
 
6742 hendricks2 401
#ifdef EDUKE32_SIMPLE_MENU
402
static MenuLink_t MEO_GAMESETUP_SAVESETUP = { MENU_SAVESETUP, MA_Advance, };
403
static MenuEntry_t ME_GAMESETUP_SAVESETUP = MAKE_MENUENTRY( "Save setup", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_SAVESETUP, Link );
404
#endif
405
 
6013 terminx 406
#if defined STARTUP_SETUP_WINDOW && !defined EDUKE32_SIMPLE_MENU
7219 terminx 407
static MenuOption_t MEO_GAMESETUP_STARTWIN = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.setup.forcesetup );
4778 hendricks2 408
static MenuEntry_t ME_GAMESETUP_STARTWIN = MAKE_MENUENTRY( "Startup window:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_STARTWIN, Option );
4682 hendricks2 409
#endif
4609 terminx 410
 
6409 terminx 411
static char const *MEOSN_GAMESETUP_AIM_AUTO[] = { "Never", "Always", "Hitscan only",
6013 terminx 412
#ifdef EDUKE32_ANDROID_MENU
4688 hendricks2 413
"Extra wide"
4609 terminx 414
#endif
415
};
416
static int32_t MEOSV_GAMESETUP_AIM_AUTO[] = { 0, 1, 2,
6013 terminx 417
#ifdef EDUKE32_ANDROID_MENU
4609 terminx 418
3,
419
#endif
420
};
421
 
4778 hendricks2 422
static MenuOptionSet_t MEOS_GAMESETUP_AIM_AUTO = MAKE_MENUOPTIONSET( MEOSN_GAMESETUP_AIM_AUTO, MEOSV_GAMESETUP_AIM_AUTO, 0x2 );
423
static MenuOption_t MEO_GAMESETUP_AIM_AUTO = MAKE_MENUOPTION( &MF_Redfont, &MEOS_GAMESETUP_AIM_AUTO, &ud.config.AutoAim );
424
static MenuEntry_t ME_GAMESETUP_AIM_AUTO = MAKE_MENUENTRY( "Auto aim:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_AIM_AUTO, Option );
4609 terminx 425
 
8021 terminx 426
static MenuOption_t MEO_GAMESETUP_ALWAYS_RUN = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &ud.auto_run);
427
static MenuEntry_t ME_GAMESETUP_ALWAYS_RUN = MAKE_MENUENTRY( "Always run:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_ALWAYS_RUN, Option );
428
 
8038 hendricks2 429
static char const *MEOSN_GAMESETUP_WEAPSWITCH_PICKUP[] = { "Never", "If new", /*"If favored",*/ };
4778 hendricks2 430
static MenuOptionSet_t MEOS_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUOPTIONSET( MEOSN_GAMESETUP_WEAPSWITCH_PICKUP, NULL, 0x2 );
431
static MenuOption_t MEO_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUOPTION( &MF_Redfont, &MEOS_GAMESETUP_WEAPSWITCH_PICKUP, NULL );
432
static MenuEntry_t ME_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUENTRY( "Equip pickups:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_WEAPSWITCH_PICKUP, Option );
4609 terminx 433
 
5547 terminx 434
static char const *MEOSN_DemoRec[] = { "Off", "Running", };
4778 hendricks2 435
static MenuOptionSet_t MEOS_DemoRec = MAKE_MENUOPTIONSET( MEOSN_DemoRec, NULL, 0x3 );
436
static MenuOption_t MEO_GAMESETUP_DEMOREC = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.m_recstat );
437
static MenuEntry_t ME_GAMESETUP_DEMOREC = MAKE_MENUENTRY( "Record demo:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_DEMOREC, Option );
4609 terminx 438
 
4496 hendricks2 439
#ifdef _WIN32
4778 hendricks2 440
static MenuOption_t MEO_GAMESETUP_UPDATES = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &ud.config.CheckForUpdates );
441
static MenuEntry_t ME_GAMESETUP_UPDATES = MAKE_MENUENTRY( "Online updates:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_UPDATES, Option );
4496 hendricks2 442
#endif
2728 hendricks2 443
 
4778 hendricks2 444
static MenuOption_t MEO_ADULTMODE = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.lockout);
445
static MenuEntry_t ME_ADULTMODE = MAKE_MENUENTRY( "Parental lock:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_ADULTMODE, Option );
4688 hendricks2 446
// static MenuLink_t MEO_ADULTMODE_PASSWORD = { MENU_ADULTPASSWORD, MA_None, };
4778 hendricks2 447
// static MenuEntry_t ME_ADULTMODE_PASSWORD = MAKE_MENUENTRY( "Enter Password", &MF_Redfont, &, &MEO_ADULTMODE_PASSWORD, Link );
4609 terminx 448
 
6013 terminx 449
#ifdef EDUKE32_ANDROID_MENU
4993 terminx 450
static MenuOption_t MEO_GAMESETUP_CROUCHLOCK = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &droidinput.toggleCrouch);
451
static MenuEntry_t ME_GAMESETUP_CROUCHLOCK = MAKE_MENUENTRY("Crouch lock:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_CROUCHLOCK, Option);
452
 
453
static MenuOption_t MEO_GAMESETUP_QUICKSWITCH = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &droidinput.quickSelectWeapon);
454
static MenuEntry_t ME_GAMESETUP_QUICKSWITCH = MAKE_MENUENTRY("Quick weapon switch:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_QUICKSWITCH, Option);
5025 helixhorne 455
#endif
4993 terminx 456
 
6411 terminx 457
#if defined(EDUKE32_ANDROID_MENU) || !defined(EDUKE32_SIMPLE_MENU)
5517 hendricks2 458
static MenuLink_t MEO_GAMESETUP_CHEATS = { MENU_CHEATS, MA_Advance, };
459
static MenuEntry_t ME_GAMESETUP_CHEATS = MAKE_MENUENTRY( "Cheats", &MF_Redfont, &MEF_BigOptionsRt, &MEO_GAMESETUP_CHEATS, Link );
460
 
4778 hendricks2 461
static MenuEntry_t *MEL_GAMESETUP[] = {
4850 hendricks2 462
    &ME_ADULTMODE,
6013 terminx 463
#if defined STARTUP_SETUP_WINDOW && !defined EDUKE32_SIMPLE_MENU
4496 hendricks2 464
    &ME_GAMESETUP_STARTWIN,
4609 terminx 465
#endif
8023 hendricks2 466
#ifndef EDUKE32_ANDROID_MENU
4496 hendricks2 467
    &ME_GAMESETUP_DEMOREC,
468
#ifdef _WIN32
4850 hendricks2 469
    &ME_GAMESETUP_UPDATES,
4609 terminx 470
#endif
471
#endif
5517 hendricks2 472
    &ME_GAMESETUP_CHEATS,
4496 hendricks2 473
};
6411 terminx 474
#endif
2728 hendricks2 475
 
6409 terminx 476
#ifndef EDUKE32_SIMPLE_MENU
6289 hendricks2 477
MAKE_MENU_TOP_ENTRYLINK( "Game Setup", MEF_OptionsMenu, OPTIONS_GAMESETUP, MENU_GAMESETUP );
6409 terminx 478
#endif
6289 hendricks2 479
MAKE_MENU_TOP_ENTRYLINK( "Sound Setup", MEF_OptionsMenu, OPTIONS_SOUNDSETUP, MENU_SOUND );
480
MAKE_MENU_TOP_ENTRYLINK( "Display Setup", MEF_OptionsMenu, OPTIONS_DISPLAYSETUP, MENU_DISPLAYSETUP );
481
MAKE_MENU_TOP_ENTRYLINK( "Player Setup", MEF_OptionsMenu, OPTIONS_PLAYERSETUP, MENU_PLAYER );
6013 terminx 482
#ifndef EDUKE32_ANDROID_MENU
6289 hendricks2 483
MAKE_MENU_TOP_ENTRYLINK( "Control Setup", MEF_OptionsMenu, OPTIONS_CONTROLS, MENU_CONTROLS );
484
 
7968 hendricks2 485
MAKE_MENU_TOP_ENTRYLINK( "Keyboard Setup", MEF_BigOptionsRtSections, OPTIONS_KEYBOARDSETUP, MENU_KEYBOARDSETUP );
486
MAKE_MENU_TOP_ENTRYLINK( "Mouse Setup", MEF_BigOptionsRtSections, OPTIONS_MOUSESETUP, MENU_MOUSESETUP );
5462 hendricks2 487
#endif
7972 hendricks2 488
MAKE_MENU_TOP_ENTRYLINK( "Gamepad Setup", MEF_BigOptionsRtSections, OPTIONS_JOYSTICKSETUP, MENU_JOYSTICKSETUP );
6013 terminx 489
#ifdef EDUKE32_ANDROID_MENU
7968 hendricks2 490
MAKE_MENU_TOP_ENTRYLINK( "Touch Setup", MEF_BigOptionsRtSections, OPTIONS_TOUCHSETUP, MENU_TOUCHSETUP );
4993 terminx 491
#endif
6411 terminx 492
#ifdef EDUKE32_SIMPLE_MENU
493
MAKE_MENU_TOP_ENTRYLINK("Cheats", MEF_OptionsMenu, OPTIONS_CHEATS, MENU_CHEATS);
494
#endif
2728 hendricks2 495
 
8084 terminx 496
static int32_t newresolution, newrendermode, newfullscreen, newvsync, newborderless;
5 Plagman 497
 
4496 hendricks2 498
enum resflags_t {
499
    RES_FS  = 0x1,
500
    RES_WIN = 0x2,
501
};
5 Plagman 502
 
6697 pogokeen 503
#define MAXRESOLUTIONSTRINGLENGTH 19
5 Plagman 504
 
4496 hendricks2 505
typedef struct resolution_t {
506
    int32_t xdim, ydim;
507
    int32_t flags;
508
    int32_t bppmax;
509
    char name[MAXRESOLUTIONSTRINGLENGTH];
510
} resolution_t;
2358 helixhorne 511
 
4496 hendricks2 512
resolution_t resolution[MAXVALIDMODES];
5 Plagman 513
 
5547 terminx 514
static char const *MEOSN_VIDEOSETUP_RESOLUTION[MAXVALIDMODES];
4778 hendricks2 515
static MenuOptionSet_t MEOS_VIDEOSETUP_RESOLUTION = MAKE_MENUOPTIONSETDYN( MEOSN_VIDEOSETUP_RESOLUTION, NULL, 0, 0x0 );
516
static MenuOption_t MEO_VIDEOSETUP_RESOLUTION = MAKE_MENUOPTION( &MF_Redfont, &MEOS_VIDEOSETUP_RESOLUTION, &newresolution );
517
static MenuEntry_t ME_VIDEOSETUP_RESOLUTION = MAKE_MENUENTRY( "Resolution:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_RESOLUTION, Option );
5 Plagman 518
 
4496 hendricks2 519
#ifdef USE_OPENGL
520
#ifdef POLYMER
5547 terminx 521
static char const *MEOSN_VIDEOSETUP_RENDERER[] = { "Classic", "Polymost", "Polymer", };
4496 hendricks2 522
static int32_t MEOSV_VIDEOSETUP_RENDERER[] = { REND_CLASSIC, REND_POLYMOST, REND_POLYMER, };
523
#else
5547 terminx 524
static char const *MEOSN_VIDEOSETUP_RENDERER[] = { "Classic", "OpenGL", };
4496 hendricks2 525
static int32_t MEOSV_VIDEOSETUP_RENDERER[] = { REND_CLASSIC, REND_POLYMOST, };
526
#endif
5 Plagman 527
 
4778 hendricks2 528
static MenuOptionSet_t MEOS_VIDEOSETUP_RENDERER = MAKE_MENUOPTIONSET( MEOSN_VIDEOSETUP_RENDERER, MEOSV_VIDEOSETUP_RENDERER, 0x2 );
5 Plagman 529
 
4778 hendricks2 530
static MenuOption_t MEO_VIDEOSETUP_RENDERER = MAKE_MENUOPTION( &MF_Redfont, &MEOS_VIDEOSETUP_RENDERER, &newrendermode );
531
static MenuEntry_t ME_VIDEOSETUP_RENDERER = MAKE_MENUENTRY( "Renderer:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_RENDERER, Option );
4823 hendricks2 532
#endif
533
 
8084 terminx 534
static MenuOption_t MEO_VIDEOSETUP_FULLSCREEN = MAKE_MENUOPTION( &MF_Redfont, &MEOS_YesNo, &newfullscreen );
535
static MenuEntry_t ME_VIDEOSETUP_FULLSCREEN = MAKE_MENUENTRY( "Windowed:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_FULLSCREEN, Option );
5475 terminx 536
 
8084 terminx 537
static char const *MEOSN_VIDEOSETUP_BORDERLESS [] = { "No", "Yes", "Auto", };
538
static int32_t MEOSV_VIDEOSETUP_BORDERLESS [] = { 0, 1, 2, };
539
static MenuOptionSet_t MEOS_VIDEOSETUP_BORDERLESS = MAKE_MENUOPTIONSET(MEOSN_VIDEOSETUP_BORDERLESS, MEOSV_VIDEOSETUP_BORDERLESS, 0x2);
540
static MenuOption_t MEO_VIDEOSETUP_BORDERLESS = MAKE_MENUOPTION(&MF_Redfont, &MEOS_VIDEOSETUP_BORDERLESS, &newborderless);
541
static MenuEntry_t ME_VIDEOSETUP_BORDERLESS = MAKE_MENUENTRY("Borderless:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_BORDERLESS, Option);
5475 terminx 542
 
6061 hendricks2 543
static char const *MEOSN_VIDEOSETUP_VSYNC [] = { "Adaptive", "Off", "On", };
544
static int32_t MEOSV_VIDEOSETUP_VSYNC [] = { -1, 0, 1, };
5475 terminx 545
static MenuOptionSet_t MEOS_VIDEOSETUP_VSYNC = MAKE_MENUOPTIONSET(MEOSN_VIDEOSETUP_VSYNC, MEOSV_VIDEOSETUP_VSYNC, 0x2);
546
static MenuOption_t MEO_VIDEOSETUP_VSYNC = MAKE_MENUOPTION(&MF_Redfont, &MEOS_VIDEOSETUP_VSYNC, &newvsync);
547
static MenuEntry_t ME_VIDEOSETUP_VSYNC = MAKE_MENUENTRY("VSync:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_VSYNC, Option);
548
 
8084 terminx 549
 
550
 
8022 terminx 551
static char const *MEOSN_VIDEOSETUP_FRAMELIMIT [] = { "None", "30 fps", "60 fps", "75 fps", "100 fps", "120 fps", "144 fps", "165 fps", "240 fps" };
552
static int32_t MEOSV_VIDEOSETUP_FRAMELIMIT [] = { 0, 30, 60, 75, 100, 120, 144, 165, 240 };
7287 terminx 553
static MenuOptionSet_t MEOS_VIDEOSETUP_FRAMELIMIT = MAKE_MENUOPTIONSET(MEOSN_VIDEOSETUP_FRAMELIMIT, MEOSV_VIDEOSETUP_FRAMELIMIT, 0x0);
5922 terminx 554
static MenuOption_t MEO_VIDEOSETUP_FRAMELIMIT= MAKE_MENUOPTION(&MF_Redfont, &MEOS_VIDEOSETUP_FRAMELIMIT, &r_maxfps);
555
static MenuEntry_t ME_VIDEOSETUP_FRAMELIMIT = MAKE_MENUENTRY("Framerate limit:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_FRAMELIMIT, Option);
556
 
7287 terminx 557
static MenuRangeInt32_t MEO_VIDEOSETUP_FRAMELIMITOFFSET = MAKE_MENURANGE( &r_maxfpsoffset, &MF_Redfont, -10, 10, 0, 21, 1 );
558
static MenuEntry_t ME_VIDEOSETUP_FRAMELIMITOFFSET = MAKE_MENUENTRY( "FPS offset:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_VIDEOSETUP_FRAMELIMITOFFSET, RangeInt32 );
5922 terminx 559
 
4778 hendricks2 560
static MenuEntry_t ME_VIDEOSETUP_APPLY = MAKE_MENUENTRY( "Apply Changes", &MF_Redfont, &MEF_BigOptions_Apply, &MEO_NULL, Link );
4609 terminx 561
 
562
 
4823 hendricks2 563
static MenuLink_t MEO_DISPLAYSETUP_COLORCORR = { MENU_COLCORR, MA_Advance, };
4856 hendricks2 564
static MenuEntry_t ME_DISPLAYSETUP_COLORCORR = MAKE_MENUENTRY( "Color Correction", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_COLORCORR, Link );
5884 terminx 565
 
566
 
7287 terminx 567
static char const *MEOSN_DISPLAYSETUP_UPSCALING[] = { "None", "2x" };
568
static int32_t MEOSV_DISPLAYSETUP_UPSCALING[] = { 1, 2 };
6939 pogokeen 569
static MenuOptionSet_t MEOS_DISPLAYSETUP_UPSCALING = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_UPSCALING, MEOSV_DISPLAYSETUP_UPSCALING, 0x0 );
570
static MenuOption_t MEO_DISPLAYSETUP_UPSCALING = MAKE_MENUOPTION( &MF_Redfont, &MEOS_DISPLAYSETUP_UPSCALING, &ud.detail );
571
static MenuEntry_t ME_DISPLAYSETUP_UPSCALING = MAKE_MENUENTRY( "Upscaling:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_UPSCALING, Option );
4609 terminx 572
 
573
 
6013 terminx 574
#ifndef EDUKE32_ANDROID_MENU
4609 terminx 575
static MenuOption_t MEO_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &r_usenewaspect);
4823 hendricks2 576
static MenuEntry_t ME_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUENTRY( "Widescreen:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ASPECTRATIO, Option );
5652 terminx 577
#endif
5 Plagman 578
 
7961 hendricks2 579
static MenuOption_t MEO_DISPLAYSETUP_VOXELS = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &usevoxels);
580
static MenuEntry_t ME_DISPLAYSETUP_VOXELS = MAKE_MENUENTRY( "Voxels:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_VOXELS, Option );
581
 
7348 terminx 582
static MenuRangeInt32_t MEO_DISPLAYSETUP_FOV = MAKE_MENURANGE( &ud.fov, &MF_Redfont, 70, 120, 0, 11, 1 );
7329 terminx 583
static MenuEntry_t ME_DISPLAYSETUP_FOV = MAKE_MENUENTRY( "FOV:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_FOV, RangeInt32 );
584
 
585
 
4609 terminx 586
#ifdef USE_OPENGL
6940 pogokeen 587
# if !(defined EDUKE32_STANDALONE) || defined POLYMER
6822 pogokeen 588
//POGOTODO: allow filtering again in standalone once indexed colour textures support filtering
7420 terminx 589
#ifdef TEXFILTER_MENU_OPTIONS
5547 terminx 590
static char const *MEOSN_DISPLAYSETUP_TEXFILTER[] = { "Classic", "Filtered" };
5878 hendricks2 591
static int32_t MEOSV_DISPLAYSETUP_TEXFILTER[] = { TEXFILTER_OFF, TEXFILTER_ON };
592
static MenuOptionSet_t MEOS_DISPLAYSETUP_TEXFILTER = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_TEXFILTER, MEOSV_DISPLAYSETUP_TEXFILTER, 0x2 );
593
static MenuOption_t MEO_DISPLAYSETUP_TEXFILTER = MAKE_MENUOPTION( &MF_Redfont, &MEOS_DISPLAYSETUP_TEXFILTER, &gltexfiltermode );
4823 hendricks2 594
static MenuEntry_t ME_DISPLAYSETUP_TEXFILTER = MAKE_MENUENTRY( "Texture Mode:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_TEXFILTER, Option );
4609 terminx 595
 
6194 hendricks2 596
static char const *MEOSN_DISPLAYSETUP_ANISOTROPY[] = { "Max", "None", "2x", "4x", "8x", "16x", };
597
static int32_t MEOSV_DISPLAYSETUP_ANISOTROPY[] = { 0, 1, 2, 4, 8, 16, };
4778 hendricks2 598
static MenuOptionSet_t MEOS_DISPLAYSETUP_ANISOTROPY = MAKE_MENUOPTIONSET( MEOSN_DISPLAYSETUP_ANISOTROPY, MEOSV_DISPLAYSETUP_ANISOTROPY, 0x0 );
4609 terminx 599
static MenuOption_t MEO_DISPLAYSETUP_ANISOTROPY = MAKE_MENUOPTION(&MF_Redfont, &MEOS_DISPLAYSETUP_ANISOTROPY, &glanisotropy);
4823 hendricks2 600
static MenuEntry_t ME_DISPLAYSETUP_ANISOTROPY = MAKE_MENUENTRY( "Anisotropy:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ANISOTROPY, Option );
7420 terminx 601
#endif
6940 pogokeen 602
# endif
4609 terminx 603
 
6940 pogokeen 604
# ifdef EDUKE32_ANDROID_MENU
4993 terminx 605
static MenuOption_t MEO_DISPLAYSETUP_HIDEDPAD = MAKE_MENUOPTION(&MF_Redfont, &MEOS_NoYes, &droidinput.hideStick);
6194 hendricks2 606
static MenuEntry_t ME_DISPLAYSETUP_HIDEDPAD = MAKE_MENUENTRY("Hide touch D-pad:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_HIDEDPAD, Option);
4993 terminx 607
 
608
static MenuRangeFloat_t MEO_DISPLAYSETUP_TOUCHALPHA = MAKE_MENURANGE(&droidinput.gameControlsAlpha, &MF_Redfont, 0, 1, 0, 16, 2);
609
static MenuEntry_t ME_DISPLAYSETUP_TOUCHALPHA = MAKE_MENUENTRY("UI opacity:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_TOUCHALPHA, RangeFloat);
6940 pogokeen 610
# endif
4609 terminx 611
 
4993 terminx 612
#endif
613
 
6522 hendricks2 614
static char const s_Scale[] = "Scale:";
615
 
4609 terminx 616
static MenuOption_t MEO_SCREENSETUP_CROSSHAIR = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.crosshair);
6289 hendricks2 617
static MenuEntry_t ME_SCREENSETUP_CROSSHAIR = MAKE_MENUENTRY( "Crosshair:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_CROSSHAIR, Option );
4778 hendricks2 618
static MenuRangeInt32_t MEO_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENURANGE( &ud.crosshairscale, &MF_Redfont, 25, 100, 0, 16, 2 );
6522 hendricks2 619
static MenuEntry_t ME_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENUENTRY( s_Scale, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SCREENSETUP_CROSSHAIRSIZE, RangeInt32 );
4609 terminx 620
 
621
static int32_t vpsize;
6587 hendricks2 622
static MenuRangeInt32_t MEO_SCREENSETUP_SCREENSIZE = MAKE_MENURANGE( &vpsize, &MF_Redfont, 0, 0, 0, 1, EnforceIntervals );
7984 hendricks2 623
static MenuOption_t MEO_SCREENSETUP_SCREENSIZE_TWO = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &vpsize );
6650 hendricks2 624
static MenuEntry_t ME_SCREENSETUP_SCREENSIZE = MAKE_MENUENTRY( "Status bar:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_SCREENSIZE, RangeInt32 );
5054 hendricks2 625
static MenuRangeInt32_t MEO_SCREENSETUP_TEXTSIZE = MAKE_MENURANGE( &ud.textscale, &MF_Redfont, 100, 400, 0, 16, 2 );
6522 hendricks2 626
static MenuEntry_t ME_SCREENSETUP_TEXTSIZE = MAKE_MENUENTRY( s_Scale, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SCREENSETUP_TEXTSIZE, RangeInt32 );
4609 terminx 627
static MenuOption_t MEO_SCREENSETUP_LEVELSTATS = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.levelstats);
6289 hendricks2 628
static MenuEntry_t ME_SCREENSETUP_LEVELSTATS = MAKE_MENUENTRY( "Level stats:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_LEVELSTATS, Option );
4609 terminx 629
 
630
 
631
static MenuOption_t MEO_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUOPTION(&MF_Redfont, &MEOS_OffOn, &ud.fta_on);
6289 hendricks2 632
static MenuEntry_t ME_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUENTRY( "Game messages:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_SHOWPICKUPMESSAGES, Option );
4609 terminx 633
 
634
 
635
 
6588 hendricks2 636
#ifdef EDUKE32_ANDROID_MENU
637
static char const *MEOSN_SCREENSETUP_STATUSBARONTOP[] = { "Bottom", "Top" };
6680 hendricks2 638
static int32_t MEOSV_SCREENSETUP_STATUSBARONTOP[] = { 0, 1 };
6588 hendricks2 639
static MenuOptionSet_t MEOS_SCREENSETUP_STATUSBARONTOP = MAKE_MENUOPTIONSET( MEOSN_SCREENSETUP_STATUSBARONTOP, MEOSV_SCREENSETUP_STATUSBARONTOP, 0x2 );
640
static MenuOption_t MEO_SCREENSETUP_STATUSBARONTOP = MAKE_MENUOPTION(&MF_Redfont, &MEOS_SCREENSETUP_STATUSBARONTOP, &ud.hudontop);
641
static MenuEntry_t ME_SCREENSETUP_STATUSBARONTOP = MAKE_MENUENTRY( "Status bar:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_STATUSBARONTOP, Option );
642
#endif
643
 
8071 terminx 644
static MenuRangeInt32_t MEO_SCREENSETUP_SBARSIZE = MAKE_MENURANGE( &ud.statusbarscale, &MF_Redfont, 50, 100, 0, 10, 2 );
6522 hendricks2 645
static MenuEntry_t ME_SCREENSETUP_SBARSIZE = MAKE_MENUENTRY( s_Scale, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SCREENSETUP_SBARSIZE, RangeInt32 );
4609 terminx 646
 
647
 
4688 hendricks2 648
static MenuLink_t MEO_DISPLAYSETUP_SCREENSETUP = { MENU_SCREENSETUP, MA_Advance, };
6289 hendricks2 649
static MenuEntry_t ME_DISPLAYSETUP_SCREENSETUP = MAKE_MENUENTRY( "HUD setup", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_SCREENSETUP, Link );
4609 terminx 650
 
651
 
6013 terminx 652
#ifndef EDUKE32_SIMPLE_MENU
4823 hendricks2 653
#ifdef USE_OPENGL
5408 terminx 654
static MenuLink_t MEO_DISPLAYSETUP_ADVANCED_GL_POLYMOST = { MENU_POLYMOST, MA_Advance, };
655
static MenuEntry_t ME_DISPLAYSETUP_ADVANCED_GL_POLYMOST = MAKE_MENUENTRY( "Polymost setup", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ADVANCED_GL_POLYMOST, Link );
656
 
657
#ifdef POLYMER
6061 hendricks2 658
static MenuLink_t MEO_DISPLAYSETUP_ADVANCED_GL_POLYMER = { MENU_POLYMER, MA_Advance, };
5408 terminx 659
static MenuEntry_t ME_DISPLAYSETUP_ADVANCED_GL_POLYMER = MAKE_MENUENTRY("Polymer setup", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_ADVANCED_GL_POLYMER, Link);
4823 hendricks2 660
#endif
5408 terminx 661
#endif
6013 terminx 662
#endif
4609 terminx 663
 
6013 terminx 664
#ifndef EDUKE32_ANDROID_MENU
4688 hendricks2 665
static MenuLink_t MEO_DISPLAYSETUP_VIDEOSETUP = { MENU_VIDEOSETUP, MA_Advance, };
4856 hendricks2 666
static MenuEntry_t ME_DISPLAYSETUP_VIDEOSETUP = MAKE_MENUENTRY( "Video mode", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_VIDEOSETUP, Link );
4682 hendricks2 667
#endif
4609 terminx 668
 
5084 hendricks2 669
 
670
static MenuLink_t MEO_ENTERCHEAT = { MENU_CHEATENTRY, MA_None, };
671
static MenuEntry_t ME_ENTERCHEAT = MAKE_MENUENTRY( "Enter Cheat Code", &MF_Redfont, &MEF_BigCheats, &MEO_ENTERCHEAT, Link );
672
 
673
static MenuLink_t MEO_CHEAT_WARP = { MENU_CHEAT_WARP, MA_None, };
674
static MenuLink_t MEO_CHEAT_SKILL = { MENU_CHEAT_SKILL, MA_None, };
7895 hendricks2 675
// KEEPINSYNC cheats.h: enum CheatCodeFunctions
676
// KEEPINSYNC cheats.cpp: uint8_t CheatFunctionIDs[]
5084 hendricks2 677
#define MAKE_MENUCHEAT( Name ) MAKE_MENUENTRY( Name, &MF_Bluefont, &MEF_Cheats, &MEO_NULL, Link )
678
static MenuEntry_t ME_CheatCodes[] = {
7895 hendricks2 679
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_CASHMAN] ),
680
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_CORNHOLIO] ),
681
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_STUFF] ),
682
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_WEAPONS] ),
683
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_ITEMS] ),
684
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_INVENTORY] ),
685
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_KEYS] ),
686
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_HYPER] ),
687
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_VIEW] ),
688
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_SHOWMAP] ),
689
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_UNLOCK] ),
690
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_CLIP] ),
691
    MAKE_MENUENTRY( CheatDescriptions[CHEAT_SCOTTY], &MF_Bluefont, &MEF_Cheats, &MEO_CHEAT_WARP, Link ),
692
    MAKE_MENUENTRY( CheatDescriptions[CHEAT_SKILL], &MF_Bluefont, &MEF_Cheats, &MEO_CHEAT_SKILL, Link ),
693
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_MONSTERS] ),
694
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_RATE] ),
695
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_BETA] ),
696
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_TODD] ),
697
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_ALLEN] ),
698
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_COORDS] ),
699
    MAKE_MENUCHEAT( CheatDescriptions[CHEAT_DEBUG] ),
5084 hendricks2 700
};
701
 
4496 hendricks2 702
static MenuEntry_t *MEL_OPTIONS[] = {
6409 terminx 703
#ifndef EDUKE32_SIMPLE_MENU
4496 hendricks2 704
    &ME_OPTIONS_GAMESETUP,
6409 terminx 705
#endif
6411 terminx 706
    &ME_OPTIONS_DISPLAYSETUP,
4496 hendricks2 707
    &ME_OPTIONS_SOUNDSETUP,
6013 terminx 708
#ifndef EDUKE32_ANDROID_MENU
709
#ifndef EDUKE32_SIMPLE_MENU
4496 hendricks2 710
    &ME_OPTIONS_PLAYERSETUP,
6013 terminx 711
#endif
4993 terminx 712
    &ME_OPTIONS_CONTROLS,
713
#else
5084 hendricks2 714
    &ME_OPTIONS_TOUCHSETUP,
4609 terminx 715
#endif
6409 terminx 716
#ifdef EDUKE32_SIMPLE_MENU
6742 hendricks2 717
    &ME_GAMESETUP_SAVESETUP,
6411 terminx 718
    &ME_OPTIONS_CHEATS
6409 terminx 719
#endif
4496 hendricks2 720
};
5 Plagman 721
 
4609 terminx 722
static MenuEntry_t *MEL_CONTROLS[] = {
6013 terminx 723
#ifndef EDUKE32_ANDROID_MENU
4850 hendricks2 724
    &ME_OPTIONS_KEYBOARDSETUP,
725
    &ME_OPTIONS_MOUSESETUP,
726
    &ME_OPTIONS_JOYSTICKSETUP,
4993 terminx 727
#else
7968 hendricks2 728
    &ME_OPTIONS_TOUCHSETUP,
4993 terminx 729
#endif
7968 hendricks2 730
    &ME_Space6_Redfont,
7959 hendricks2 731
    &ME_GAMESETUP_AIM_AUTO,
8021 terminx 732
    &ME_GAMESETUP_ALWAYS_RUN,
8023 hendricks2 733
    &ME_GAMESETUP_WEAPSWITCH_PICKUP,
734
#ifdef EDUKE32_ANDROID_MENU
735
    &ME_GAMESETUP_QUICKSWITCH,
736
    &ME_GAMESETUP_CROUCHLOCK,
737
#endif
4609 terminx 738
};
739
 
5084 hendricks2 740
static MenuEntry_t *MEL_CHEATS[ARRAY_SIZE(ME_CheatCodes)+1] = {
741
    &ME_ENTERCHEAT,
742
};
4609 terminx 743
 
4778 hendricks2 744
static MenuEntry_t *MEL_VIDEOSETUP[] = {
4496 hendricks2 745
    &ME_VIDEOSETUP_RESOLUTION,
4823 hendricks2 746
#ifdef USE_OPENGL
4496 hendricks2 747
    &ME_VIDEOSETUP_RENDERER,
4823 hendricks2 748
#endif
4496 hendricks2 749
    &ME_VIDEOSETUP_FULLSCREEN,
8084 terminx 750
    &ME_VIDEOSETUP_BORDERLESS,
5475 terminx 751
    &ME_VIDEOSETUP_VSYNC,
5922 terminx 752
    &ME_VIDEOSETUP_FRAMELIMIT,
7287 terminx 753
    &ME_VIDEOSETUP_FRAMELIMITOFFSET,
8027 hendricks2 754
    &ME_Space4_Redfont,
4496 hendricks2 755
    &ME_VIDEOSETUP_APPLY,
756
};
4609 terminx 757
static MenuEntry_t *MEL_DISPLAYSETUP[] = {
758
    &ME_DISPLAYSETUP_SCREENSETUP,
759
    &ME_DISPLAYSETUP_COLORCORR,
6013 terminx 760
#ifndef EDUKE32_ANDROID_MENU
4850 hendricks2 761
    &ME_DISPLAYSETUP_VIDEOSETUP,
5652 terminx 762
    &ME_DISPLAYSETUP_ASPECTRATIO,
7961 hendricks2 763
    &ME_DISPLAYSETUP_VOXELS,
7329 terminx 764
    &ME_DISPLAYSETUP_FOV,
4609 terminx 765
#endif
6939 pogokeen 766
    &ME_DISPLAYSETUP_UPSCALING,
4496 hendricks2 767
};
4609 terminx 768
 
4496 hendricks2 769
#ifdef USE_OPENGL
4609 terminx 770
static MenuEntry_t *MEL_DISPLAYSETUP_GL[] = {
4850 hendricks2 771
    &ME_DISPLAYSETUP_SCREENSETUP,
4609 terminx 772
    &ME_DISPLAYSETUP_COLORCORR,
6013 terminx 773
#ifndef EDUKE32_ANDROID_MENU
4850 hendricks2 774
    &ME_DISPLAYSETUP_VIDEOSETUP,
5652 terminx 775
    &ME_DISPLAYSETUP_ASPECTRATIO,
7961 hendricks2 776
    &ME_DISPLAYSETUP_VOXELS,
7329 terminx 777
    &ME_DISPLAYSETUP_FOV,
4609 terminx 778
#endif
6940 pogokeen 779
#ifndef EDUKE32_STANDALONE
7420 terminx 780
# ifdef TEXFILTER_MENU_OPTIONS
4850 hendricks2 781
    &ME_DISPLAYSETUP_TEXFILTER,
7420 terminx 782
# endif
6940 pogokeen 783
#endif
6013 terminx 784
#ifdef EDUKE32_ANDROID_MENU
4993 terminx 785
    &ME_DISPLAYSETUP_HIDEDPAD,
786
    &ME_DISPLAYSETUP_TOUCHALPHA,
6013 terminx 787
#else
6940 pogokeen 788
# ifndef EDUKE32_STANDALONE
7420 terminx 789
#  ifdef TEXFILTER_MENU_OPTIONS
6013 terminx 790
    &ME_DISPLAYSETUP_ANISOTROPY,
7420 terminx 791
#  endif
6940 pogokeen 792
# endif
7420 terminx 793
# ifndef EDUKE32_SIMPLE_MENU
5408 terminx 794
    &ME_DISPLAYSETUP_ADVANCED_GL_POLYMOST,
6940 pogokeen 795
# endif
4609 terminx 796
#endif
4496 hendricks2 797
};
4609 terminx 798
 
799
#ifdef POLYMER
800
static MenuEntry_t *MEL_DISPLAYSETUP_GL_POLYMER[] = {
4850 hendricks2 801
    &ME_DISPLAYSETUP_SCREENSETUP,
802
    &ME_DISPLAYSETUP_COLORCORR,
6013 terminx 803
#ifndef EDUKE32_ANDROID_MENU
4850 hendricks2 804
    &ME_DISPLAYSETUP_VIDEOSETUP,
7329 terminx 805
    &ME_DISPLAYSETUP_FOV,
7961 hendricks2 806
    &ME_DISPLAYSETUP_VOXELS,
4496 hendricks2 807
#endif
7420 terminx 808
#ifdef TEXFILTER_MENU_OPTIONS
4850 hendricks2 809
    &ME_DISPLAYSETUP_TEXFILTER,
810
    &ME_DISPLAYSETUP_ANISOTROPY,
7420 terminx 811
#endif
6013 terminx 812
#ifndef EDUKE32_SIMPLE_MENU
5408 terminx 813
    &ME_DISPLAYSETUP_ADVANCED_GL_POLYMER,
4609 terminx 814
#endif
815
};
5 Plagman 816
 
4609 terminx 817
#endif
818
#endif
819
 
820
 
821
 
8303 hendricks2 822
static char const MenuKeyNone[] = "  -";
5547 terminx 823
static char const *MEOSN_Keys[NUMKEYS];
5 Plagman 824
 
6613 hendricks2 825
static MenuCustom2Col_t MEO_KEYBOARDSETUPFUNCS_TEMPLATE = { { NULL, NULL, }, MEOSN_Keys, &MF_Minifont, NUMKEYS, 54<<16, 0 };
4496 hendricks2 826
static MenuCustom2Col_t MEO_KEYBOARDSETUPFUNCS[NUMGAMEFUNCTIONS];
6680 hendricks2 827
static MenuEntry_t ME_KEYBOARDSETUPFUNCS_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_KBFuncList, &MEO_KEYBOARDSETUPFUNCS_TEMPLATE, Custom2Col );
4496 hendricks2 828
static MenuEntry_t ME_KEYBOARDSETUPFUNCS[NUMGAMEFUNCTIONS];
829
static MenuEntry_t *MEL_KEYBOARDSETUPFUNCS[NUMGAMEFUNCTIONS];
5 Plagman 830
 
4823 hendricks2 831
static MenuLink_t MEO_KEYBOARDSETUP_KEYS = { MENU_KEYBOARDKEYS, MA_Advance, };
4778 hendricks2 832
static MenuEntry_t ME_KEYBOARDSETUP_KEYS = MAKE_MENUENTRY( "Configure Keys", &MF_Redfont, &MEF_CenterMenu, &MEO_KEYBOARDSETUP_KEYS, Link );
7971 hendricks2 833
static MenuLink_t MEO_KEYBOARDSETUP_RESET = { MENU_KEYSRESETVERIFY, MA_None, };
834
static MenuEntry_t ME_KEYBOARDSETUP_RESET = MAKE_MENUENTRY( "Reset To Defaults", &MF_Redfont, &MEF_CenterMenu, &MEO_KEYBOARDSETUP_RESET, Link );
835
static MenuLink_t MEO_KEYBOARDSETUP_RESETCLASSIC = { MENU_KEYSCLASSICVERIFY, MA_None, };
836
static MenuEntry_t ME_KEYBOARDSETUP_RESETCLASSIC = MAKE_MENUENTRY( "Reset To Classic", &MF_Redfont, &MEF_CenterMenu, &MEO_KEYBOARDSETUP_RESETCLASSIC, Link );
5 Plagman 837
 
4496 hendricks2 838
static MenuEntry_t *MEL_KEYBOARDSETUP[] = {
839
    &ME_KEYBOARDSETUP_KEYS,
840
    &ME_KEYBOARDSETUP_RESET,
841
    &ME_KEYBOARDSETUP_RESETCLASSIC,
842
};
5 Plagman 843
 
844
 
4496 hendricks2 845
// There is no better way to do this than manually.
4399 hendricks2 846
 
4496 hendricks2 847
#define MENUMOUSEFUNCTIONS 12
78 terminx 848
 
5547 terminx 849
static char const *MenuMouseNames[MENUMOUSEFUNCTIONS] = {
4496 hendricks2 850
    "Button 1",
851
    "Double Button 1",
852
    "Button 2",
853
    "Double Button 2",
854
    "Button 3",
855
    "Double Button 3",
5 Plagman 856
 
4496 hendricks2 857
    "Wheel Up",
858
    "Wheel Down",
5 Plagman 859
 
4496 hendricks2 860
    "Button 4",
861
    "Double Button 4",
862
    "Button 5",
863
    "Double Button 5",
864
};
865
static int32_t MenuMouseDataIndex[MENUMOUSEFUNCTIONS][2] = {
866
    { 0, 0, },
867
    { 0, 1, },
868
    { 1, 0, },
869
    { 1, 1, },
870
    { 2, 0, },
871
    { 2, 1, },
1677 terminx 872
 
4496 hendricks2 873
    // note the mouse wheel
874
    { 4, 0, },
875
    { 5, 0, },
5 Plagman 876
 
4496 hendricks2 877
    { 3, 0, },
878
    { 3, 1, },
879
    { 6, 0, },
880
    { 6, 1, },
881
};
3084 terminx 882
 
4496 hendricks2 883
static MenuOption_t MEO_MOUSEJOYSETUPBTNS_TEMPLATE = MAKE_MENUOPTION( &MF_Minifont, &MEOS_Gamefuncs, NULL );
884
static MenuOption_t MEO_MOUSESETUPBTNS[MENUMOUSEFUNCTIONS];
4778 hendricks2 885
static MenuEntry_t ME_MOUSEJOYSETUPBTNS_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_FuncList, NULL, Option );
4496 hendricks2 886
static MenuEntry_t ME_MOUSESETUPBTNS[MENUMOUSEFUNCTIONS];
887
static MenuEntry_t *MEL_MOUSESETUPBTNS[MENUMOUSEFUNCTIONS];
3084 terminx 888
 
4823 hendricks2 889
static MenuLink_t MEO_MOUSESETUP_BTNS = { MENU_MOUSEBTNS, MA_Advance, };
4778 hendricks2 890
static MenuEntry_t ME_MOUSESETUP_BTNS = MAKE_MENUENTRY( "Button assignment", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_BTNS, Link );
891
static MenuRangeFloat_t MEO_MOUSESETUP_SENSITIVITY = MAKE_MENURANGE( &CONTROL_MouseSensitivity, &MF_Redfont, .5f, 16.f, 0.f, 32, 1 );
892
static MenuEntry_t ME_MOUSESETUP_SENSITIVITY = MAKE_MENUENTRY( "Sensitivity:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_SENSITIVITY, RangeFloat );
6022 terminx 893
 
6409 terminx 894
#ifndef EDUKE32_SIMPLE_MENU
6061 hendricks2 895
static char const *MEOSN_MOUSESETUP_AIM_TYPE [] = { "Toggle", "Hold" };
6022 terminx 896
static MenuOptionSet_t MEOS_MOUSESETUP_AIM_TYPE = MAKE_MENUOPTIONSET(MEOSN_MOUSESETUP_AIM_TYPE, NULL, 0x2);
897
static MenuOption_t MEO_MOUSESETUP_MOUSEAIMINGTYPE = MAKE_MENUOPTION(&MF_Redfont, &MEOS_MOUSESETUP_AIM_TYPE, &ud.mouseaiming);
898
static MenuEntry_t ME_MOUSESETUP_MOUSEAIMINGTYPE = MAKE_MENUENTRY("Aiming type:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_MOUSEAIMINGTYPE, Option);
4778 hendricks2 899
static MenuOption_t MEO_MOUSESETUP_MOUSEAIMING = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &g_myAimMode );
900
static MenuEntry_t ME_MOUSESETUP_MOUSEAIMING = MAKE_MENUENTRY( "Vertical aiming:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_MOUSEAIMING, Option );
6409 terminx 901
#endif
4778 hendricks2 902
static MenuOption_t MEO_MOUSESETUP_INVERT = MAKE_MENUOPTION( &MF_Redfont, &MEOS_YesNo, &ud.mouseflip );
903
static MenuEntry_t ME_MOUSESETUP_INVERT = MAKE_MENUENTRY( "Invert aiming:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_INVERT, Option );
8536 terminx 904
 
6409 terminx 905
#ifndef EDUKE32_SIMPLE_MENU
4823 hendricks2 906
static MenuLink_t MEO_MOUSESETUP_ADVANCED = { MENU_MOUSEADVANCED, MA_Advance, };
4778 hendricks2 907
static MenuEntry_t ME_MOUSESETUP_ADVANCED = MAKE_MENUENTRY( "Advanced setup", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSESETUP_ADVANCED, Link );
6409 terminx 908
#endif
7945 hendricks2 909
static MenuRangeInt32_t MEO_MOUSEADVANCED_SCALEX = MAKE_MENURANGE(&ud.config.MouseAnalogueScale[0], &MF_Redfont, -262144, 262144, 65536, 161, 3);
6680 hendricks2 910
static MenuEntry_t ME_MOUSEADVANCED_SCALEX = MAKE_MENUENTRY("X-Scale:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSEADVANCED_SCALEX, RangeInt32);
7945 hendricks2 911
static MenuRangeInt32_t MEO_MOUSEADVANCED_SCALEY = MAKE_MENURANGE(&ud.config.MouseAnalogueScale[1], &MF_Redfont, -262144, 262144, 65536, 161, 3);
6680 hendricks2 912
static MenuEntry_t ME_MOUSEADVANCED_SCALEY = MAKE_MENUENTRY("Y-Scale:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_MOUSEADVANCED_SCALEY, RangeInt32);
3084 terminx 913
 
4778 hendricks2 914
static MenuEntry_t *MEL_MOUSESETUP[] = {
6409 terminx 915
    &ME_MOUSESETUP_BTNS,
4496 hendricks2 916
    &ME_MOUSESETUP_SENSITIVITY,
6409 terminx 917
#ifdef EDUKE32_SIMPLE_MENU
918
    &ME_MOUSEADVANCED_SCALEX,
919
    &ME_MOUSEADVANCED_SCALEY,
920
#endif
6198 hendricks2 921
    &ME_Space2_Redfont,
6409 terminx 922
    &ME_MOUSESETUP_INVERT,
923
#ifndef EDUKE32_SIMPLE_MENU
6022 terminx 924
    &ME_MOUSESETUP_MOUSEAIMINGTYPE,
4850 hendricks2 925
    &ME_MOUSESETUP_MOUSEAIMING,
926
    &ME_MOUSESETUP_ADVANCED,
6409 terminx 927
#endif
4609 terminx 928
};
929
 
6013 terminx 930
#ifdef EDUKE32_ANDROID_MENU
5023 terminx 931
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_MOVE = MAKE_MENURANGE(&droidinput.forward_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
5652 terminx 932
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_MOVE = MAKE_MENUENTRY("Running:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_MOVE, RangeFloat);
4993 terminx 933
 
5023 terminx 934
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_STRAFE = MAKE_MENURANGE(&droidinput.strafe_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
5652 terminx 935
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_STRAFE = MAKE_MENUENTRY("Strafing:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_STRAFE, RangeFloat);
4993 terminx 936
 
5023 terminx 937
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_LOOK = MAKE_MENURANGE(&droidinput.pitch_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
5652 terminx 938
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_LOOK = MAKE_MENUENTRY("Looking:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_LOOK, RangeFloat);
4993 terminx 939
 
5023 terminx 940
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_TURN = MAKE_MENURANGE(&droidinput.yaw_sens, &MF_Redfont, 1.f, 9.f, 0.f, 17, 1 + EnforceIntervals);
5652 terminx 941
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_TURN = MAKE_MENUENTRY("Turning:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_SENSITIVITY_TURN, RangeFloat);
4993 terminx 942
 
943
static MenuOption_t MEO_TOUCHSETUP_INVERT = MAKE_MENUOPTION(&MF_Redfont, &MEOS_NoYes, &droidinput.invertLook);
944
static MenuEntry_t ME_TOUCHSETUP_INVERT = MAKE_MENUENTRY("Invert look:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_TOUCHSETUP_INVERT, Option);
945
 
5652 terminx 946
MAKE_MENU_TOP_ENTRYLINK("Sensitivity", MEF_CenterMenu, TOUCHSENS, MENU_TOUCHSENS);
947
MAKE_MENU_TOP_ENTRYLINK("Button Setup", MEF_CenterMenu, TOUCHBUTTONS, MENU_TOUCHBUTTONS);
948
 
6061 hendricks2 949
static MenuEntry_t *MEL_TOUCHSETUP [] = {
5652 terminx 950
    &ME_TOUCHSENS,
951
    &ME_TOUCHBUTTONS,
952
};
953
 
6061 hendricks2 954
static MenuEntry_t *MEL_TOUCHSENS [] = {
4993 terminx 955
    &ME_TOUCHSETUP_SENSITIVITY_MOVE,
956
    &ME_TOUCHSETUP_SENSITIVITY_STRAFE,
957
    &ME_TOUCHSETUP_SENSITIVITY_LOOK,
958
    &ME_TOUCHSETUP_SENSITIVITY_TURN,
6198 hendricks2 959
    &ME_Space2_Redfont,
4993 terminx 960
    &ME_TOUCHSETUP_INVERT,
961
};
962
#endif
963
 
7982 hendricks2 964
static MenuOption_t MEO_JOYSTICK_ENABLE = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.setup.usejoystick );
965
static MenuEntry_t ME_JOYSTICK_ENABLE = MAKE_MENUENTRY( "Enable Gamepad:", &MF_Redfont, &MEF_BigOptionsRtSections, &MEO_JOYSTICK_ENABLE, Option );
966
 
7968 hendricks2 967
MAKE_MENU_TOP_ENTRYLINK( "Edit Buttons", MEF_BigOptionsRtSections, JOYSTICK_EDITBUTTONS, MENU_JOYSTICKBTNS );
968
MAKE_MENU_TOP_ENTRYLINK( "Edit Axes", MEF_BigOptionsRtSections, JOYSTICK_EDITAXES, MENU_JOYSTICKAXES );
5 Plagman 969
 
7971 hendricks2 970
static MenuLink_t MEO_JOYSTICK_DEFAULTS_STANDARD = { MENU_JOYSTANDARDVERIFY, MA_None, };
971
static MenuEntry_t ME_JOYSTICK_DEFAULTS_STANDARD = MAKE_MENUENTRY( "Use Standard Layout", &MF_Redfont, &MEF_BigOptionsRtSections, &MEO_JOYSTICK_DEFAULTS_STANDARD, Link );
972
static MenuLink_t MEO_JOYSTICK_DEFAULTS_PRO = { MENU_JOYPROVERIFY, MA_None, };
973
static MenuEntry_t ME_JOYSTICK_DEFAULTS_PRO = MAKE_MENUENTRY( "Use Pro Layout", &MF_Redfont, &MEF_BigOptionsRtSections, &MEO_JOYSTICK_DEFAULTS_PRO, Link );
974
static MenuLink_t MEO_JOYSTICK_DEFAULTS_CLEAR = { MENU_JOYCLEARVERIFY, MA_None, };
975
static MenuEntry_t ME_JOYSTICK_DEFAULTS_CLEAR = MAKE_MENUENTRY( "Clear All Settings", &MF_Redfont, &MEF_BigOptionsRtSections, &MEO_JOYSTICK_DEFAULTS_CLEAR, Link );
7968 hendricks2 976
 
4496 hendricks2 977
static MenuEntry_t *MEL_JOYSTICKSETUP[] = {
7982 hendricks2 978
    &ME_JOYSTICK_ENABLE,
979
    &ME_Space6_Redfont,
4496 hendricks2 980
    &ME_JOYSTICK_EDITBUTTONS,
981
    &ME_JOYSTICK_EDITAXES,
7968 hendricks2 982
    &ME_Space6_Redfont,
983
    &ME_JOYSTICK_DEFAULTS_STANDARD,
984
    &ME_JOYSTICK_DEFAULTS_PRO,
985
    &ME_JOYSTICK_DEFAULTS_CLEAR,
4496 hendricks2 986
};
5 Plagman 987
 
4496 hendricks2 988
#define MAXJOYBUTTONSTRINGLENGTH 32
5 Plagman 989
 
4826 hendricks2 990
static char MenuJoystickNames[MAXJOYBUTTONSANDHATS*2][MAXJOYBUTTONSTRINGLENGTH];
5 Plagman 991
 
4826 hendricks2 992
static MenuOption_t MEO_JOYSTICKBTNS[MAXJOYBUTTONSANDHATS*2];
993
static MenuEntry_t ME_JOYSTICKBTNS[MAXJOYBUTTONSANDHATS*2];
994
static MenuEntry_t *MEL_JOYSTICKBTNS[MAXJOYBUTTONSANDHATS*2];
59 terminx 995
 
4688 hendricks2 996
static MenuLink_t MEO_JOYSTICKAXES = { MENU_JOYSTICKAXIS, MA_Advance, };
4778 hendricks2 997
static MenuEntry_t ME_JOYSTICKAXES_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXES, Link );
4496 hendricks2 998
static MenuEntry_t ME_JOYSTICKAXES[MAXJOYAXES];
999
static char MenuJoystickAxes[MAXJOYAXES][MAXJOYBUTTONSTRINGLENGTH];
59 terminx 1000
 
4496 hendricks2 1001
static MenuEntry_t *MEL_JOYSTICKAXES[MAXJOYAXES];
2188 helixhorne 1002
 
4778 hendricks2 1003
static MenuEntry_t *MEL_MOUSEADVANCED[] = {
1004
    &ME_MOUSEADVANCED_SCALEX,
1005
    &ME_MOUSEADVANCED_SCALEY,
4496 hendricks2 1006
};
3084 terminx 1007
 
4496 hendricks2 1008
static const char *MenuJoystickHatDirections[] = { "Up", "Right", "Down", "Left", };
3084 terminx 1009
 
5547 terminx 1010
static char const *MEOSN_JOYSTICKAXIS_ANALOG[] = { "  -None-", "Turning", "Strafing", "Looking", "Moving", };
4496 hendricks2 1011
static int32_t MEOSV_JOYSTICKAXIS_ANALOG[] = { -1, analog_turning, analog_strafing, analog_lookingupanddown, analog_moving, };
4778 hendricks2 1012
static MenuOptionSet_t MEOS_JOYSTICKAXIS_ANALOG = MAKE_MENUOPTIONSET( MEOSN_JOYSTICKAXIS_ANALOG, MEOSV_JOYSTICKAXIS_ANALOG, 0x0 );
4496 hendricks2 1013
static MenuOption_t MEO_JOYSTICKAXIS_ANALOG = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_JOYSTICKAXIS_ANALOG, NULL );
4778 hendricks2 1014
static MenuEntry_t ME_JOYSTICKAXIS_ANALOG = MAKE_MENUENTRY( "Analog", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_ANALOG, Option );
7945 hendricks2 1015
static MenuRangeInt32_t MEO_JOYSTICKAXIS_SCALE = MAKE_MENURANGE( NULL, &MF_Bluefont, -262144, 262144, 65536, 161, 3 );
4778 hendricks2 1016
static MenuEntry_t ME_JOYSTICKAXIS_SCALE = MAKE_MENUENTRY( "Scale", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_SCALE, RangeInt32 );
7986 hendricks2 1017
static MenuOption_t MEO_JOYSTICKAXIS_INVERT = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, NULL );
1018
static MenuEntry_t ME_JOYSTICKAXIS_INVERT = MAKE_MENUENTRY( "Invert", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_INVERT, Option );
7945 hendricks2 1019
static MenuRangeInt32_t MEO_JOYSTICKAXIS_DEAD = MAKE_MENURANGE( NULL, &MF_Bluefont, 0, 10000, 0, 101, 2 );
4778 hendricks2 1020
static MenuEntry_t ME_JOYSTICKAXIS_DEAD = MAKE_MENUENTRY( "Dead Zone", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_DEAD, RangeInt32 );
7945 hendricks2 1021
static MenuRangeInt32_t MEO_JOYSTICKAXIS_SATU = MAKE_MENURANGE( NULL, &MF_Bluefont, 0, 10000, 0, 101, 2 );
4778 hendricks2 1022
static MenuEntry_t ME_JOYSTICKAXIS_SATU = MAKE_MENUENTRY( "Saturation", &MF_Redfont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_SATU, RangeInt32 );
3084 terminx 1023
 
4496 hendricks2 1024
static MenuOption_t MEO_JOYSTICKAXIS_DIGITALNEGATIVE = MAKE_MENUOPTION( &MF_Minifont, &MEOS_Gamefuncs, NULL );
6613 hendricks2 1025
static MenuEntry_t ME_JOYSTICKAXIS_DIGITALNEGATIVE = MAKE_MENUENTRY( "Digital -", &MF_Bluefont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_DIGITALNEGATIVE, Option );
4496 hendricks2 1026
static MenuOption_t MEO_JOYSTICKAXIS_DIGITALPOSITIVE = MAKE_MENUOPTION( &MF_Minifont, &MEOS_Gamefuncs, NULL );
6613 hendricks2 1027
static MenuEntry_t ME_JOYSTICKAXIS_DIGITALPOSITIVE = MAKE_MENUENTRY( "Digital +", &MF_Bluefont, &MEF_BigSliders, &MEO_JOYSTICKAXIS_DIGITALPOSITIVE, Option );
3084 terminx 1028
 
4496 hendricks2 1029
static MenuEntry_t *MEL_JOYSTICKAXIS[] = {
1030
    &ME_JOYSTICKAXIS_ANALOG,
1031
    &ME_JOYSTICKAXIS_SCALE,
7986 hendricks2 1032
    &ME_JOYSTICKAXIS_INVERT,
4496 hendricks2 1033
    &ME_JOYSTICKAXIS_DEAD,
1034
    &ME_JOYSTICKAXIS_SATU,
6198 hendricks2 1035
    &ME_Space8_Redfont,
4778 hendricks2 1036
    &ME_JOYSTICKAXIS_DIGITALNEGATIVE,
1037
    &ME_JOYSTICKAXIS_DIGITALPOSITIVE,
4496 hendricks2 1038
};
3084 terminx 1039
 
4778 hendricks2 1040
static MenuEntry_t *MEL_INTERNAL_JOYSTICKAXIS_DIGITAL[] = {
4496 hendricks2 1041
    &ME_JOYSTICKAXIS_DIGITALNEGATIVE,
1042
    &ME_JOYSTICKAXIS_DIGITALPOSITIVE,
1043
};
3084 terminx 1044
 
4496 hendricks2 1045
#ifdef USE_OPENGL
1046
static MenuOption_t MEO_RENDERERSETUP_HIGHTILE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &usehightile );
6613 hendricks2 1047
static MenuEntry_t ME_RENDERERSETUP_HIGHTILE = MAKE_MENUENTRY( "True color textures:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_HIGHTILE, Option );
5408 terminx 1048
 
6061 hendricks2 1049
static char const *MEOSN_RENDERERSETUP_TEXQUALITY [] = { "Full", "Half", "Barf", };
5408 terminx 1050
static MenuOptionSet_t MEOS_RENDERERSETUP_TEXQUALITY = MAKE_MENUOPTIONSET(MEOSN_RENDERERSETUP_TEXQUALITY, NULL, 0x2);
1051
static MenuOption_t MEO_RENDERERSETUP_TEXQUALITY = MAKE_MENUOPTION(&MF_Bluefont, &MEOS_RENDERERSETUP_TEXQUALITY, &r_downsize);
6613 hendricks2 1052
static MenuEntry_t ME_RENDERERSETUP_TEXQUALITY = MAKE_MENUENTRY("GL texture quality:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_TEXQUALITY, Option);
5408 terminx 1053
 
1054
 
4496 hendricks2 1055
static MenuOption_t MEO_RENDERERSETUP_PRECACHE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OffOn, &ud.config.useprecache );
6613 hendricks2 1056
static MenuEntry_t ME_RENDERERSETUP_PRECACHE = MAKE_MENUENTRY( "Pre-load map textures:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_PRECACHE, Option );
5526 hendricks2 1057
# ifndef EDUKE32_GLES
5547 terminx 1058
static char const *MEOSN_RENDERERSETUP_TEXCACHE[] = { "Off", "On", "Compr.", };
4778 hendricks2 1059
static MenuOptionSet_t MEOS_RENDERERSETUP_TEXCACHE = MAKE_MENUOPTIONSET( MEOSN_RENDERERSETUP_TEXCACHE, NULL, 0x2 );
4496 hendricks2 1060
static MenuOption_t MEO_RENDERERSETUP_TEXCACHE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_RENDERERSETUP_TEXCACHE, &glusetexcache );
6613 hendricks2 1061
static MenuEntry_t ME_RENDERERSETUP_TEXCACHE = MAKE_MENUENTRY( "On-disk texture cache:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_TEXCACHE, Option );
5526 hendricks2 1062
# endif
1063
# ifdef USE_GLEXT
4496 hendricks2 1064
static MenuOption_t MEO_RENDERERSETUP_DETAILTEX = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &r_detailmapping );
6613 hendricks2 1065
static MenuEntry_t ME_RENDERERSETUP_DETAILTEX = MAKE_MENUENTRY( "Detail textures:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_DETAILTEX, Option );
5408 terminx 1066
static MenuOption_t MEO_RENDERERSETUP_GLOWTEX = MAKE_MENUOPTION(&MF_Bluefont, &MEOS_NoYes, &r_glowmapping);
6613 hendricks2 1067
static MenuEntry_t ME_RENDERERSETUP_GLOWTEX = MAKE_MENUENTRY("Glow textures:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_GLOWTEX, Option);
5526 hendricks2 1068
# endif
4496 hendricks2 1069
static MenuOption_t MEO_RENDERERSETUP_MODELS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NoYes, &usemodels );
6613 hendricks2 1070
static MenuEntry_t ME_RENDERERSETUP_MODELS = MAKE_MENUENTRY( "3D models:", &MF_Bluefont, &MEF_SmallOptions, &MEO_RENDERERSETUP_MODELS, Option );
4496 hendricks2 1071
#endif
5408 terminx 1072
 
5406 terminx 1073
#ifdef POLYMER
6061 hendricks2 1074
static char const *MEOSN_POLYMER_LIGHTS [] = { "Off", "Full", "Map only", };
5408 terminx 1075
static MenuOptionSet_t MEOS_POLYMER_LIGHTS = MAKE_MENUOPTIONSET(MEOSN_POLYMER_LIGHTS, NULL, 0x2);
1076
static MenuOption_t MEO_POLYMER_LIGHTS = MAKE_MENUOPTION(&MF_Bluefont, &MEOS_POLYMER_LIGHTS, &pr_lighting);
6613 hendricks2 1077
static MenuEntry_t ME_POLYMER_LIGHTS = MAKE_MENUENTRY("Dynamic lights:", &MF_Bluefont, &MEF_SmallOptions, &MEO_POLYMER_LIGHTS, Option);
5408 terminx 1078
 
1079
static MenuRangeInt32_t MEO_POLYMER_LIGHTPASSES = MAKE_MENURANGE(&r_pr_maxlightpasses, &MF_Bluefont, 1, 10, 1, 10, 1);
6613 hendricks2 1080
static MenuEntry_t ME_POLYMER_LIGHTPASSES = MAKE_MENUENTRY("Lights per surface:", &MF_Bluefont, &MEF_SmallOptions, &MEO_POLYMER_LIGHTPASSES, RangeInt32);
5408 terminx 1081
 
1082
static MenuOption_t MEO_POLYMER_SHADOWS = MAKE_MENUOPTION(&MF_Bluefont, &MEOS_OffOn, &pr_shadows);
6613 hendricks2 1083
static MenuEntry_t ME_POLYMER_SHADOWS = MAKE_MENUENTRY("Dynamic shadows:", &MF_Bluefont, &MEF_SmallOptions, &MEO_POLYMER_SHADOWS, Option);
5408 terminx 1084
 
1085
static MenuRangeInt32_t MEO_POLYMER_SHADOWCOUNT = MAKE_MENURANGE(&pr_shadowcount, &MF_Bluefont, 1, 10, 1, 10, 1);
6613 hendricks2 1086
static MenuEntry_t ME_POLYMER_SHADOWCOUNT = MAKE_MENUENTRY("Shadows per surface:", &MF_Bluefont, &MEF_SmallOptions, &MEO_POLYMER_SHADOWCOUNT, RangeInt32);
5408 terminx 1087
 
5406 terminx 1088
#endif
3084 terminx 1089
 
4496 hendricks2 1090
#ifdef USE_OPENGL
5408 terminx 1091
static MenuEntry_t *MEL_RENDERERSETUP_POLYMOST[] = {
4496 hendricks2 1092
    &ME_RENDERERSETUP_HIGHTILE,
1093
    &ME_RENDERERSETUP_TEXQUALITY,
1094
    &ME_RENDERERSETUP_PRECACHE,
5526 hendricks2 1095
# ifndef EDUKE32_GLES
4496 hendricks2 1096
    &ME_RENDERERSETUP_TEXCACHE,
5526 hendricks2 1097
# endif
1098
# ifdef USE_GLEXT
4496 hendricks2 1099
    &ME_RENDERERSETUP_DETAILTEX,
5408 terminx 1100
    &ME_RENDERERSETUP_GLOWTEX,
5526 hendricks2 1101
# endif
6198 hendricks2 1102
    &ME_Space4_Bluefont,
4496 hendricks2 1103
    &ME_RENDERERSETUP_MODELS,
5408 terminx 1104
};
1105
 
5406 terminx 1106
#ifdef POLYMER
6061 hendricks2 1107
static MenuEntry_t *MEL_RENDERERSETUP_POLYMER [] = {
5408 terminx 1108
    &ME_RENDERERSETUP_HIGHTILE,
1109
    &ME_RENDERERSETUP_TEXQUALITY,
1110
    &ME_RENDERERSETUP_PRECACHE,
5526 hendricks2 1111
# ifndef EDUKE32_GLES
5408 terminx 1112
    &ME_RENDERERSETUP_TEXCACHE,
5526 hendricks2 1113
# endif
1114
# ifdef USE_GLEXT
5408 terminx 1115
    &ME_RENDERERSETUP_DETAILTEX,
1116
    &ME_RENDERERSETUP_GLOWTEX,
5526 hendricks2 1117
# endif
6198 hendricks2 1118
    &ME_Space4_Bluefont,
5408 terminx 1119
    &ME_RENDERERSETUP_MODELS,
6198 hendricks2 1120
    &ME_Space4_Bluefont,
5408 terminx 1121
    &ME_POLYMER_LIGHTS,
1122
    &ME_POLYMER_LIGHTPASSES,
1123
    &ME_POLYMER_SHADOWS,
1124
    &ME_POLYMER_SHADOWCOUNT,
4496 hendricks2 1125
};
1126
#endif
5408 terminx 1127
#endif
3084 terminx 1128
 
6013 terminx 1129
#ifdef EDUKE32_ANDROID_MENU
6828 terminx 1130
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &g_videoGamma, &MF_Bluefont, 1.f, 2.5f, 0.f, 39, 1 );
4609 terminx 1131
#else
7312 hendricks2 1132
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &g_videoGamma, &MF_Bluefont, 0.3f, 4.f, 0.f, 75, 1 );
4609 terminx 1133
#endif
4778 hendricks2 1134
static MenuEntry_t ME_COLCORR_GAMMA = MAKE_MENUENTRY( "Gamma:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_GAMMA, RangeFloat );
6828 terminx 1135
static MenuRangeFloat_t MEO_COLCORR_CONTRAST = MAKE_MENURANGE( &g_videoContrast, &MF_Bluefont, 0.1f, 2.7f, 0.f, 53, 1 );
4778 hendricks2 1136
static MenuEntry_t ME_COLCORR_CONTRAST = MAKE_MENUENTRY( "Contrast:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_CONTRAST, RangeFloat );
6828 terminx 1137
static MenuRangeFloat_t MEO_COLCORR_BRIGHTNESS = MAKE_MENURANGE( &g_videoBrightness, &MF_Bluefont, -0.8f, 0.8f, 0.f, 33, 1 );
4778 hendricks2 1138
static MenuEntry_t ME_COLCORR_BRIGHTNESS = MAKE_MENUENTRY( "Brightness:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_BRIGHTNESS, RangeFloat );
7971 hendricks2 1139
static MenuLink_t MEO_COLCORR_RESET = { MENU_COLCORRRESETVERIFY, MA_None, };
1140
static MenuEntry_t ME_COLCORR_RESET = MAKE_MENUENTRY( "Reset To Defaults", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_RESET, Link );
6013 terminx 1141
#ifdef EDUKE32_ANDROID_MENU
4993 terminx 1142
#define MINVIS 1.f
1143
#else
1144
#define MINVIS 0.125f
1145
#endif
6335 terminx 1146
#ifndef EDUKE32_SIMPLE_MENU
4993 terminx 1147
static MenuRangeFloat_t MEO_COLCORR_AMBIENT = MAKE_MENURANGE( &r_ambientlight, &MF_Bluefont, MINVIS, 4.f, 0.f, 32, 1 );
4778 hendricks2 1148
static MenuEntry_t ME_COLCORR_AMBIENT = MAKE_MENUENTRY( "Visibility:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_AMBIENT, RangeFloat );
6335 terminx 1149
#endif
4496 hendricks2 1150
static MenuEntry_t *MEL_COLCORR[] = {
1151
    &ME_COLCORR_GAMMA,
6013 terminx 1152
#ifndef EDUKE32_ANDROID_MENU
4496 hendricks2 1153
    &ME_COLCORR_CONTRAST,
1154
    &ME_COLCORR_BRIGHTNESS,
4609 terminx 1155
#endif
6335 terminx 1156
#ifndef EDUKE32_SIMPLE_MENU
4850 hendricks2 1157
    &ME_COLCORR_AMBIENT,
6335 terminx 1158
#endif
6198 hendricks2 1159
    &ME_Space8_Redfont,
4496 hendricks2 1160
    &ME_COLCORR_RESET,
1161
};
3084 terminx 1162
 
4778 hendricks2 1163
static MenuEntry_t *MEL_SCREENSETUP[] = {
6588 hendricks2 1164
#ifdef EDUKE32_ANDROID_MENU
1165
    &ME_SCREENSETUP_STATUSBARONTOP,
1166
#endif
6650 hendricks2 1167
    &ME_SCREENSETUP_SCREENSIZE,
4850 hendricks2 1168
    &ME_SCREENSETUP_SBARSIZE,
4609 terminx 1169
 
4850 hendricks2 1170
    &ME_SCREENSETUP_CROSSHAIR,
1171
    &ME_SCREENSETUP_CROSSHAIRSIZE,
4609 terminx 1172
 
4850 hendricks2 1173
    &ME_SCREENSETUP_LEVELSTATS,
1174
    &ME_SCREENSETUP_TEXTSIZE,
4609 terminx 1175
 
4850 hendricks2 1176
    &ME_SCREENSETUP_SHOWPICKUPMESSAGES,
4609 terminx 1177
};
1178
 
4496 hendricks2 1179
// Save and load will be filled in before every viewing of the save/load screen.
6329 hendricks2 1180
static MenuLink_t MEO_LOAD = { MENU_LOADVERIFY, MA_None, };
6613 hendricks2 1181
static MenuEntry_t ME_LOAD_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_LoadSave, &MEO_LOAD, Link );
1182
static MenuEntry_t ME_LOAD_EMPTY = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_LoadSave, nullptr, Dummy );
6569 hendricks2 1183
static MenuEntry_t *ME_LOAD;
1184
static MenuEntry_t **MEL_LOAD;
3084 terminx 1185
 
6569 hendricks2 1186
static char const s_NewSaveGame[] = "(New Save Game)";
6613 hendricks2 1187
static MenuString_t MEO_SAVE_TEMPLATE = MAKE_MENUSTRING( NULL, &MF_Minifont, MAXSAVEGAMENAME, 0 );
1188
static MenuString_t MEO_SAVE_NEW = MAKE_MENUSTRING( NULL, &MF_Minifont, MAXSAVEGAMENAME, 0 );
6569 hendricks2 1189
static MenuString_t *MEO_SAVE;
6613 hendricks2 1190
static MenuEntry_t ME_SAVE_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Minifont, &MEF_LoadSave, &MEO_SAVE_TEMPLATE, String );
1191
static MenuEntry_t ME_SAVE_NEW = MAKE_MENUENTRY( s_NewSaveGame, &MF_Minifont, &MEF_LoadSave, &MEO_SAVE_NEW, String );
6569 hendricks2 1192
static MenuEntry_t *ME_SAVE;
1193
static MenuEntry_t **MEL_SAVE;
3084 terminx 1194
 
8218 terminx 1195
static int32_t soundrate, soundvoices, musicdevice;
4778 hendricks2 1196
static MenuOption_t MEO_SOUND = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.config.SoundToggle );
1197
static MenuEntry_t ME_SOUND = MAKE_MENUENTRY( "Sound:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND, Option );
4609 terminx 1198
 
4778 hendricks2 1199
static MenuOption_t MEO_SOUND_MUSIC = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.config.MusicToggle );
1200
static MenuEntry_t ME_SOUND_MUSIC = MAKE_MENUENTRY( "Music:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_MUSIC, Option );
4609 terminx 1201
 
8013 hendricks2 1202
static char const s_Volume[] = "Volume:";
1203
 
7122 terminx 1204
static MenuRangeInt32_t MEO_SOUND_VOLUME_FX = MAKE_MENURANGE( &ud.config.FXVolume, &MF_Redfont, 0, 255, 0, 33, 2 );
8013 hendricks2 1205
static MenuEntry_t ME_SOUND_VOLUME_FX = MAKE_MENUENTRY( s_Volume, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SOUND_VOLUME_FX, RangeInt32 );
4609 terminx 1206
 
4778 hendricks2 1207
static MenuRangeInt32_t MEO_SOUND_VOLUME_MUSIC = MAKE_MENURANGE( &ud.config.MusicVolume, &MF_Redfont, 0, 255, 0, 33, 2 );
8013 hendricks2 1208
static MenuEntry_t ME_SOUND_VOLUME_MUSIC = MAKE_MENUENTRY( s_Volume, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SOUND_VOLUME_MUSIC, RangeInt32 );
4609 terminx 1209
 
7402 terminx 1210
#ifndef EDUKE32_STANDALONE
4778 hendricks2 1211
static MenuOption_t MEO_SOUND_DUKETALK = MAKE_MENUOPTION(&MF_Redfont, &MEOS_NoYes, NULL);
1212
static MenuEntry_t ME_SOUND_DUKETALK = MAKE_MENUENTRY( "Duke talk:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_DUKETALK, Option );
6013 terminx 1213
#else
8026 hendricks2 1214
static MenuOption_t MEO_SOUND_DUKETALK = MAKE_MENUOPTION(&MF_Redfont, &MEOS_YesNo, NULL);
1215
static MenuEntry_t ME_SOUND_DUKETALK = MAKE_MENUENTRY("Silent protagonist:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_DUKETALK, Option);
6013 terminx 1216
#endif
4609 terminx 1217
 
5547 terminx 1218
static char const *MEOSN_SOUND_SAMPLINGRATE[] = { "22050Hz", "44100Hz", "48000Hz", };
4609 terminx 1219
static int32_t MEOSV_SOUND_SAMPLINGRATE[] = { 22050, 44100, 48000, };
4778 hendricks2 1220
static MenuOptionSet_t MEOS_SOUND_SAMPLINGRATE = MAKE_MENUOPTIONSET( MEOSN_SOUND_SAMPLINGRATE, MEOSV_SOUND_SAMPLINGRATE, 0x3 );
1221
static MenuOption_t MEO_SOUND_SAMPLINGRATE = MAKE_MENUOPTION( &MF_Redfont, &MEOS_SOUND_SAMPLINGRATE, &soundrate );
1222
static MenuEntry_t ME_SOUND_SAMPLINGRATE = MAKE_MENUENTRY( "Sample rate:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_SAMPLINGRATE, Option );
4609 terminx 1223
 
6389 terminx 1224
#ifndef EDUKE32_SIMPLE_MENU
8234 terminx 1225
static MenuRangeInt32_t MEO_SOUND_NUMVOICES = MAKE_MENURANGE( &soundvoices, &MF_Redfont, 16, 128, 0, 8, 1 );
4778 hendricks2 1226
static MenuEntry_t ME_SOUND_NUMVOICES = MAKE_MENUENTRY( "Voices:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_NUMVOICES, RangeInt32 );
6380 terminx 1227
#endif
4609 terminx 1228
 
8258 hendricks2 1229
static char const *MEOSN_SOUND_MIDIDRIVER[] = {
8381 terminx 1230
    "OPL3 emu.",
8218 terminx 1231
#ifdef _WIN32
8381 terminx 1232
    "Windows MME",
8218 terminx 1233
#endif
1234
};
8258 hendricks2 1235
static int32_t MEOSV_SOUND_MIDIDRIVER[] = {
8219 terminx 1236
    ASS_OPL3,
8218 terminx 1237
#ifdef _WIN32
1238
    ASS_WinMM,
1239
#endif
1240
};
1241
 
8258 hendricks2 1242
static MenuOptionSet_t MEOS_SOUND_MIDIDRIVER = MAKE_MENUOPTIONSET( MEOSN_SOUND_MIDIDRIVER, MEOSV_SOUND_MIDIDRIVER, 0x2 );
1243
static MenuOption_t MEO_SOUND_MIDIDRIVER = MAKE_MENUOPTION( &MF_Redfont, &MEOS_SOUND_MIDIDRIVER, &musicdevice );
1244
static MenuEntry_t ME_SOUND_MIDIDRIVER = MAKE_MENUENTRY( "MIDI driver:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SOUND_MIDIDRIVER, Option );
8218 terminx 1245
 
6380 terminx 1246
static MenuEntry_t ME_SOUND_RESTART = MAKE_MENUENTRY( "Apply Changes", &MF_Redfont, &MEF_BigOptions_Apply, &MEO_NULL, Link );
4609 terminx 1247
 
6013 terminx 1248
#ifndef EDUKE32_SIMPLE_MENU
4688 hendricks2 1249
static MenuLink_t MEO_ADVSOUND = { MENU_ADVSOUND, MA_Advance, };
4778 hendricks2 1250
static MenuEntry_t ME_SOUND_ADVSOUND = MAKE_MENUENTRY( "Advanced", &MF_Redfont, &MEF_BigOptionsRt, &MEO_ADVSOUND, Link );
4645 hendricks2 1251
#endif
4609 terminx 1252
 
4778 hendricks2 1253
static MenuEntry_t *MEL_SOUND[] = {
4496 hendricks2 1254
    &ME_SOUND,
8013 hendricks2 1255
    &ME_SOUND_VOLUME_FX,
4496 hendricks2 1256
    &ME_SOUND_MUSIC,
4850 hendricks2 1257
    &ME_SOUND_VOLUME_MUSIC,
4496 hendricks2 1258
    &ME_SOUND_DUKETALK,
6013 terminx 1259
#ifndef EDUKE32_SIMPLE_MENU
4850 hendricks2 1260
    &ME_SOUND_ADVSOUND,
4609 terminx 1261
#endif
4496 hendricks2 1262
};
3084 terminx 1263
 
4778 hendricks2 1264
static MenuEntry_t *MEL_ADVSOUND[] = {
4850 hendricks2 1265
    &ME_SOUND_SAMPLINGRATE,
6198 hendricks2 1266
    &ME_Space2_Redfont,
6389 terminx 1267
#ifndef EDUKE32_SIMPLE_MENU
4850 hendricks2 1268
    &ME_SOUND_NUMVOICES,
6198 hendricks2 1269
    &ME_Space2_Redfont,
6380 terminx 1270
#endif
8258 hendricks2 1271
    &ME_SOUND_MIDIDRIVER,
4850 hendricks2 1272
    &ME_SOUND_RESTART,
4609 terminx 1273
};
1274
 
6742 hendricks2 1275
 
1276
static MenuOption_t MEO_SAVESETUP_AUTOSAVE = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OffOn, &ud.autosave );
7790 terminx 1277
static MenuEntry_t ME_SAVESETUP_AUTOSAVE = MAKE_MENUENTRY( "Checkpoints:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SAVESETUP_AUTOSAVE, Option );
6742 hendricks2 1278
 
6748 hendricks2 1279
static MenuOption_t MEO_SAVESETUP_AUTOSAVEDELETION = MAKE_MENUOPTION( &MF_Redfont, &MEOS_NoYes, &ud.autosavedeletion );
1280
static MenuEntry_t ME_SAVESETUP_AUTOSAVEDELETION = MAKE_MENUENTRY( "Auto-Delete:", &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SAVESETUP_AUTOSAVEDELETION, Option );
1281
static MenuRangeInt32_t MEO_SAVESETUP_MAXAUTOSAVES = MAKE_MENURANGE( &ud.maxautosaves, &MF_Redfont, 1, 10, 0, 10, 1 );
1282
static MenuEntry_t ME_SAVESETUP_MAXAUTOSAVES = MAKE_MENUENTRY( "Limit:", &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SAVESETUP_MAXAUTOSAVES, RangeInt32 );
1283
 
6749 hendricks2 1284
static MenuEntry_t ME_SAVESETUP_CLEANUP = MAKE_MENUENTRY( "Clean Up Saves", &MF_Redfont, &MEF_BigOptionsRt, &MEO_NULL, Link );
1285
 
8114 terminx 1286
#ifdef EDUKE32_STANDALONE
1287
static MenuEntry_t ME_SAVESETUP_RESETSTATS = MAKE_MENUENTRY( "Reset Stats/Achievements", &MF_Redfont, &MEF_BigOptionsRt, &MEO_NULL, Link );
1288
#endif
1289
 
6742 hendricks2 1290
static MenuEntry_t *MEL_SAVESETUP[] = {
1291
    &ME_SAVESETUP_AUTOSAVE,
6748 hendricks2 1292
    &ME_SAVESETUP_AUTOSAVEDELETION,
1293
    &ME_SAVESETUP_MAXAUTOSAVES,
6749 hendricks2 1294
    &ME_SAVESETUP_CLEANUP,
8114 terminx 1295
#ifdef EDUKE32_STANDALONE
1296
    &ME_SAVESETUP_RESETSTATS,
1297
#endif
6742 hendricks2 1298
};
1299
 
1300
 
4778 hendricks2 1301
MAKE_MENU_TOP_ENTRYLINK( "Player Setup", MEF_CenterMenu, NETWORK_PLAYERSETUP, MENU_PLAYER );
1302
MAKE_MENU_TOP_ENTRYLINK( "Join Game", MEF_CenterMenu, NETWORK_JOINGAME, MENU_NETJOIN );
1303
MAKE_MENU_TOP_ENTRYLINK( "Host Game", MEF_CenterMenu, NETWORK_HOSTGAME, MENU_NETHOST );
4399 hendricks2 1304
 
4496 hendricks2 1305
static MenuEntry_t *MEL_NETWORK[] = {
1306
    &ME_NETWORK_PLAYERSETUP,
1307
    &ME_NETWORK_JOINGAME,
1308
    &ME_NETWORK_HOSTGAME,
1309
};
4399 hendricks2 1310
 
4778 hendricks2 1311
static MenuString_t MEO_PLAYER_NAME = MAKE_MENUSTRING( szPlayerName, &MF_Bluefont, MAXPLAYERNAME, 0 );
6613 hendricks2 1312
static MenuEntry_t ME_PLAYER_NAME = MAKE_MENUENTRY( "Name", &MF_Bluefont, &MEF_PlayerNarrow, &MEO_PLAYER_NAME, String );
5547 terminx 1313
static char const *MEOSN_PLAYER_COLOR[] = { "Auto", "Blue", "Red", "Green", "Gray", "Dark gray", "Dark green", "Brown", "Dark blue", "Bright red", "Yellow", };
4822 hendricks2 1314
static int32_t MEOSV_PLAYER_COLOR[] = { 0, 9, 10, 11, 12, 13, 14, 15, 16, 21, 23, };
4778 hendricks2 1315
static MenuOptionSet_t MEOS_PLAYER_COLOR = MAKE_MENUOPTIONSET( MEOSN_PLAYER_COLOR, MEOSV_PLAYER_COLOR, 0x2 );
4496 hendricks2 1316
static MenuOption_t MEO_PLAYER_COLOR = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_PLAYER_COLOR, &ud.color );
6613 hendricks2 1317
static MenuEntry_t ME_PLAYER_COLOR = MAKE_MENUENTRY( "Color", &MF_Bluefont, &MEF_PlayerNarrow, &MEO_PLAYER_COLOR, Option );
5547 terminx 1318
static char const *MEOSN_PLAYER_TEAM[] = { "Blue", "Red", "Green", "Gray", };
4778 hendricks2 1319
static MenuOptionSet_t MEOS_PLAYER_TEAM = MAKE_MENUOPTIONSET( MEOSN_PLAYER_TEAM, NULL, 0x2 );
4496 hendricks2 1320
static MenuOption_t MEO_PLAYER_TEAM = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_PLAYER_TEAM, &ud.team );
6613 hendricks2 1321
static MenuEntry_t ME_PLAYER_TEAM = MAKE_MENUENTRY( "Team", &MF_Bluefont, &MEF_PlayerNarrow, &MEO_PLAYER_TEAM, Option );
6013 terminx 1322
#ifndef EDUKE32_SIMPLE_MENU
4688 hendricks2 1323
static MenuLink_t MEO_PLAYER_MACROS = { MENU_MACROS, MA_Advance, };
6613 hendricks2 1324
static MenuEntry_t ME_PLAYER_MACROS = MAKE_MENUENTRY( "Multiplayer macros", &MF_Bluefont, &MEF_SmallOptions, &MEO_PLAYER_MACROS, Link );
4682 hendricks2 1325
#endif
5 Plagman 1326
 
4778 hendricks2 1327
static MenuEntry_t *MEL_PLAYER[] = {
4496 hendricks2 1328
    &ME_PLAYER_NAME,
6198 hendricks2 1329
    &ME_Space4_Bluefont,
4496 hendricks2 1330
    &ME_PLAYER_COLOR,
6198 hendricks2 1331
    &ME_Space4_Bluefont,
4496 hendricks2 1332
    &ME_PLAYER_TEAM,
6013 terminx 1333
#ifndef EDUKE32_SIMPLE_MENU
6198 hendricks2 1334
    &ME_Space8_Bluefont,
4496 hendricks2 1335
    &ME_PLAYER_MACROS,
4778 hendricks2 1336
#endif
4496 hendricks2 1337
};
5 Plagman 1338
 
4778 hendricks2 1339
static MenuString_t MEO_MACROS_TEMPLATE = MAKE_MENUSTRING( NULL, &MF_Bluefont, MAXRIDECULELENGTH, 0 );
6569 hendricks2 1340
static MenuString_t MEO_MACROS[10];
4778 hendricks2 1341
static MenuEntry_t ME_MACROS_TEMPLATE = MAKE_MENUENTRY( NULL, &MF_Bluefont, &MEF_Macros, &MEO_MACROS_TEMPLATE, String );
4496 hendricks2 1342
static MenuEntry_t ME_MACROS[MAXRIDECULE];
1343
static MenuEntry_t *MEL_MACROS[MAXRIDECULE];
5 Plagman 1344
 
6415 terminx 1345
#ifndef EDUKE32_SIMPLE_MENU
5547 terminx 1346
static char const *MenuUserMap = "User Map";
6415 terminx 1347
#endif
5547 terminx 1348
static char const *MenuSkillNone = "None";
5 Plagman 1349
 
5547 terminx 1350
static char const *MEOSN_NetGametypes[MAXGAMETYPES];
1351
static char const *MEOSN_NetEpisodes[MAXVOLUMES+1];
5033 hendricks2 1352
static int32_t MEOSV_NetEpisodes[MAXVOLUMES+1];
5547 terminx 1353
static char const *MEOSN_NetLevels[MAXVOLUMES][MAXLEVELS];
1354
static char const *MEOSN_NetSkills[MAXSKILLS+1];
5 Plagman 1355
 
4823 hendricks2 1356
static MenuLink_t MEO_NETHOST_OPTIONS = { MENU_NETOPTIONS, MA_Advance, };
4778 hendricks2 1357
static MenuEntry_t ME_NETHOST_OPTIONS = MAKE_MENUENTRY( "Game Options", &MF_Redfont, &MEF_VideoSetup, &MEO_NETHOST_OPTIONS, Link );
1358
static MenuEntry_t ME_NETHOST_LAUNCH = MAKE_MENUENTRY( "Launch Game", &MF_Redfont, &MEF_VideoSetup, &MEO_NULL, Link );
5 Plagman 1359
 
4496 hendricks2 1360
static MenuEntry_t *MEL_NETHOST[] = {
1361
    &ME_NETHOST_OPTIONS,
1362
    &ME_NETHOST_LAUNCH,
1363
};
471 terminx 1364
 
4778 hendricks2 1365
static MenuOptionSet_t MEOS_NETOPTIONS_GAMETYPE = MAKE_MENUOPTIONSET( MEOSN_NetGametypes, NULL, 0x0 );
4496 hendricks2 1366
static MenuOption_t MEO_NETOPTIONS_GAMETYPE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NETOPTIONS_GAMETYPE, &ud.m_coop );
4778 hendricks2 1367
static MenuEntry_t ME_NETOPTIONS_GAMETYPE = MAKE_MENUENTRY( "Game Type", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_GAMETYPE, Option );
5033 hendricks2 1368
static MenuOptionSet_t MEOS_NETOPTIONS_EPISODE = MAKE_MENUOPTIONSET( MEOSN_NetEpisodes, MEOSV_NetEpisodes, 0x0 );
1369
static int32_t NetEpisode;
1370
static MenuOption_t MEO_NETOPTIONS_EPISODE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NETOPTIONS_EPISODE, &NetEpisode );
4778 hendricks2 1371
static MenuEntry_t ME_NETOPTIONS_EPISODE = MAKE_MENUENTRY( "Episode", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_EPISODE, Option );
5034 hendricks2 1372
static MenuOptionSet_t MEOS_NETOPTIONS_LEVEL_TEMPLATE = MAKE_MENUOPTIONSETNULL;
4496 hendricks2 1373
static MenuOptionSet_t MEOS_NETOPTIONS_LEVEL[MAXVOLUMES];
1374
static MenuOption_t MEO_NETOPTIONS_LEVEL = MAKE_MENUOPTION( &MF_Bluefont, NULL, &ud.m_level_number );
4778 hendricks2 1375
static MenuEntry_t ME_NETOPTIONS_LEVEL = MAKE_MENUENTRY( "Level", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_LEVEL, Option );
4823 hendricks2 1376
static MenuLink_t MEO_NETOPTIONS_USERMAP = { MENU_NETUSERMAP, MA_Advance, };
4778 hendricks2 1377
static MenuEntry_t ME_NETOPTIONS_USERMAP = MAKE_MENUENTRY( "User Map", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_USERMAP, Link );
1378
static MenuOptionSet_t MEOS_NETOPTIONS_MONSTERS = MAKE_MENUOPTIONSET( MEOSN_NetSkills, NULL, 0x0 );
4496 hendricks2 1379
static MenuOption_t MEO_NETOPTIONS_MONSTERS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_NETOPTIONS_MONSTERS, NULL );
4778 hendricks2 1380
static MenuEntry_t ME_NETOPTIONS_MONSTERS = MAKE_MENUENTRY( "Monsters", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_MONSTERS, Option );
4496 hendricks2 1381
static MenuOption_t MEO_NETOPTIONS_MARKERS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OffOn, &ud.m_marker );
4778 hendricks2 1382
static MenuEntry_t ME_NETOPTIONS_MARKERS = MAKE_MENUENTRY( "Markers", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_MARKERS, Option );
4496 hendricks2 1383
static MenuOption_t MEO_NETOPTIONS_MAPEXITS = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OnOff, &ud.m_noexits );
4778 hendricks2 1384
static MenuEntry_t ME_NETOPTIONS_MAPEXITS = MAKE_MENUENTRY( "Map Exits", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_MAPEXITS, Option );
4496 hendricks2 1385
static MenuOption_t MEO_NETOPTIONS_FRFIRE = MAKE_MENUOPTION( &MF_Bluefont, &MEOS_OffOn, &ud.m_ffire );
4778 hendricks2 1386
static MenuEntry_t ME_NETOPTIONS_FRFIRE = MAKE_MENUENTRY( "Fr. Fire", &MF_Redfont, &MEF_NetSetup, &MEO_NETOPTIONS_FRFIRE, Option );
7242 seventyfiv 1387
static MenuEntry_t ME_NETOPTIONS_ACCEPT = MAKE_MENUENTRY( "Accept", &MF_Redfont, &MEF_NetSetup_Confirm, &MEO_NETWORK_HOSTGAME, Link );
471 terminx 1388
 
4496 hendricks2 1389
static MenuEntry_t *MEL_NETOPTIONS[] = {
1390
    &ME_NETOPTIONS_GAMETYPE,
1391
    &ME_NETOPTIONS_EPISODE,
1392
    &ME_NETOPTIONS_LEVEL,
1393
    &ME_NETOPTIONS_MONSTERS,
1394
    &ME_NETOPTIONS_MARKERS,
1395
    &ME_NETOPTIONS_MAPEXITS,
1396
    &ME_NETOPTIONS_ACCEPT,
1397
};
5 Plagman 1398
 
4496 hendricks2 1399
static char MenuServer[BMAX_PATH] = "localhost";
4778 hendricks2 1400
static MenuString_t MEO_NETJOIN_SERVER = MAKE_MENUSTRING( MenuServer, &MF_Bluefont, BMAX_PATH, 0 );
1401
static MenuEntry_t ME_NETJOIN_SERVER = MAKE_MENUENTRY( "Server", &MF_Redfont, &MEF_VideoSetup, &MEO_NETJOIN_SERVER, String );
4496 hendricks2 1402
#define MAXPORTSTRINGLENGTH 6 // unsigned 16-bit integer
1403
static char MenuPort[MAXPORTSTRINGLENGTH] = "19014";
4778 hendricks2 1404
static MenuString_t MEO_NETJOIN_PORT = MAKE_MENUSTRING( MenuPort, &MF_Bluefont, MAXPORTSTRINGLENGTH, INPUT_NUMERIC );
1405
static MenuEntry_t ME_NETJOIN_PORT = MAKE_MENUENTRY( "Port", &MF_Redfont, &MEF_VideoSetup, &MEO_NETJOIN_PORT, String );
6207 hendricks2 1406
static MenuEntry_t ME_NETJOIN_CONNECT = MAKE_MENUENTRY( "Connect", &MF_Redfont, &MEF_VideoSetup_Apply, &MEO_NULL, Link );
471 terminx 1407
 
4496 hendricks2 1408
static MenuEntry_t *MEL_NETJOIN[] = {
1409
    &ME_NETJOIN_SERVER,
1410
    &ME_NETJOIN_PORT,
1411
    &ME_NETJOIN_CONNECT,
1412
};
5 Plagman 1413
 
1414
 
4496 hendricks2 1415
#define NoTitle NULL
91 terminx 1416
 
5693 hendricks2 1417
#define MAKE_MENUMENU(Title, Format, Entries) { Title, Format, Entries, ARRAY_SIZE(Entries), 0, 0, 0 }
6569 hendricks2 1418
#define MAKE_MENUMENU_CUSTOMSIZE(Title, Format, Entries) { Title, Format, Entries, 0, 0, 0, 0 }
91 terminx 1419
 
4778 hendricks2 1420
static MenuMenu_t M_MAIN = MAKE_MENUMENU( NoTitle, &MMF_Top_Main, MEL_MAIN );
1421
static MenuMenu_t M_MAIN_INGAME = MAKE_MENUMENU( NoTitle, &MMF_Top_Main, MEL_MAIN_INGAME );
1422
static MenuMenu_t M_EPISODE = MAKE_MENUMENU( "Select An Episode", &MMF_Top_Episode, MEL_EPISODE );
1423
static MenuMenu_t M_SKILL = MAKE_MENUMENU( "Select Skill", &MMF_Top_Skill, MEL_SKILL );
7930 hendricks2 1424
static MenuMenu_t M_NEWGAMECUSTOM = MAKE_MENUMENU( s_NewGame, &MMF_Top_NewGameCustom, MEL_NEWGAMECUSTOM );
1425
static MenuMenu_t M_NEWGAMECUSTOMSUB = MAKE_MENUMENU( s_NewGame, &MMF_Top_NewGameCustomSub, MEL_NEWGAMECUSTOMSUB );
6411 terminx 1426
#ifndef EDUKE32_SIMPLE_MENU
4778 hendricks2 1427
static MenuMenu_t M_GAMESETUP = MAKE_MENUMENU( "Game Setup", &MMF_BigOptions, MEL_GAMESETUP );
6411 terminx 1428
#endif
6329 hendricks2 1429
static MenuMenu_t M_OPTIONS = MAKE_MENUMENU( s_Options, &MMF_Top_Options, MEL_OPTIONS );
4778 hendricks2 1430
static MenuMenu_t M_VIDEOSETUP = MAKE_MENUMENU( "Video Mode", &MMF_BigOptions, MEL_VIDEOSETUP );
1431
static MenuMenu_t M_KEYBOARDSETUP = MAKE_MENUMENU( "Keyboard Setup", &MMF_Top_Options, MEL_KEYBOARDSETUP );
7959 hendricks2 1432
static MenuMenu_t M_CONTROLS = MAKE_MENUMENU( "Control Setup", &MMF_BigOptions, MEL_CONTROLS );
5084 hendricks2 1433
static MenuMenu_t M_CHEATS = MAKE_MENUMENU( "Cheats", &MMF_SmallOptions, MEL_CHEATS );
4778 hendricks2 1434
static MenuMenu_t M_MOUSESETUP = MAKE_MENUMENU( "Mouse Setup", &MMF_BigOptions, MEL_MOUSESETUP );
6013 terminx 1435
#ifdef EDUKE32_ANDROID_MENU
5652 terminx 1436
static MenuMenu_t M_TOUCHSETUP = MAKE_MENUMENU( "Touch Setup", &MMF_Top_Options, MEL_TOUCHSETUP );
1437
static MenuMenu_t M_TOUCHSENS = MAKE_MENUMENU( "Sensitivity", &MMF_BigOptions, MEL_TOUCHSENS);
6061 hendricks2 1438
static MenuPanel_t M_TOUCHBUTTONS = { "Button Setup", MENU_TOUCHSETUP, MA_Return, MENU_TOUCHSETUP, MA_Advance, };
4993 terminx 1439
#endif
7972 hendricks2 1440
static MenuMenu_t M_JOYSTICKSETUP = MAKE_MENUMENU( "Gamepad Setup", &MMF_BigOptions, MEL_JOYSTICKSETUP );
1441
static MenuMenu_t M_JOYSTICKBTNS = MAKE_MENUMENU( "Gamepad Buttons", &MMF_MouseJoySetupBtns, MEL_JOYSTICKBTNS );
1442
static MenuMenu_t M_JOYSTICKAXES = MAKE_MENUMENU( "Gamepad Axes", &MMF_BigSliders, MEL_JOYSTICKAXES );
6324 terminx 1443
static MenuMenu_t M_KEYBOARDKEYS = MAKE_MENUMENU( "Key Configuration", &MMF_KeyboardSetupFuncs, MEL_KEYBOARDSETUPFUNCS );
4778 hendricks2 1444
static MenuMenu_t M_MOUSEBTNS = MAKE_MENUMENU( "Mouse Buttons", &MMF_MouseJoySetupBtns, MEL_MOUSESETUPBTNS );
1445
static MenuMenu_t M_MOUSEADVANCED = MAKE_MENUMENU( "Advanced Mouse", &MMF_BigSliders, MEL_MOUSEADVANCED );
1446
static MenuMenu_t M_JOYSTICKAXIS = MAKE_MENUMENU( NULL, &MMF_BigSliders, MEL_JOYSTICKAXIS );
4609 terminx 1447
#ifdef USE_OPENGL
5408 terminx 1448
static MenuMenu_t M_RENDERERSETUP_POLYMOST = MAKE_MENUMENU( "Polymost Setup", &MMF_SmallOptions, MEL_RENDERERSETUP_POLYMOST );
5424 helixhorne 1449
# ifdef POLYMER
5408 terminx 1450
static MenuMenu_t M_RENDERERSETUP_POLYMER = MAKE_MENUMENU("Polymer Setup", &MMF_SmallOptions, MEL_RENDERERSETUP_POLYMER );
5424 helixhorne 1451
# endif
4609 terminx 1452
#endif
4778 hendricks2 1453
static MenuMenu_t M_COLCORR = MAKE_MENUMENU( "Color Correction", &MMF_ColorCorrect, MEL_COLCORR );
6289 hendricks2 1454
static MenuMenu_t M_SCREENSETUP = MAKE_MENUMENU( "HUD Setup", &MMF_BigOptions, MEL_SCREENSETUP );
4778 hendricks2 1455
static MenuMenu_t M_DISPLAYSETUP = MAKE_MENUMENU( "Display Setup", &MMF_BigOptions, MEL_DISPLAYSETUP );
6569 hendricks2 1456
static MenuMenu_t M_LOAD = MAKE_MENUMENU_CUSTOMSIZE( s_LoadGame, &MMF_LoadSave, MEL_LOAD );
1457
static MenuMenu_t M_SAVE = MAKE_MENUMENU_CUSTOMSIZE( s_SaveGame, &MMF_LoadSave, MEL_SAVE );
4778 hendricks2 1458
static MenuMenu_t M_SOUND = MAKE_MENUMENU( "Sound Setup", &MMF_BigOptions, MEL_SOUND );
4823 hendricks2 1459
static MenuMenu_t M_ADVSOUND = MAKE_MENUMENU( "Advanced Sound", &MMF_BigOptions, MEL_ADVSOUND );
6742 hendricks2 1460
static MenuMenu_t M_SAVESETUP = MAKE_MENUMENU( "Save Setup", &MMF_BigOptions, MEL_SAVESETUP );
4778 hendricks2 1461
static MenuMenu_t M_NETWORK = MAKE_MENUMENU( "Network Game", &MMF_Top_Joystick_Network, MEL_NETWORK );
1462
static MenuMenu_t M_PLAYER = MAKE_MENUMENU( "Player Setup", &MMF_SmallOptions, MEL_PLAYER );
1463
static MenuMenu_t M_MACROS = MAKE_MENUMENU( "Multiplayer Macros", &MMF_Macros, MEL_MACROS );
1464
static MenuMenu_t M_NETHOST = MAKE_MENUMENU( "Host Network Game", &MMF_SmallOptionsNarrow, MEL_NETHOST );
1465
static MenuMenu_t M_NETOPTIONS = MAKE_MENUMENU( "Net Game Options", &MMF_NetSetup, MEL_NETOPTIONS );
1466
static MenuMenu_t M_NETJOIN = MAKE_MENUMENU( "Join Network Game", &MMF_SmallOptionsNarrow, MEL_NETJOIN );
88 terminx 1467
 
6013 terminx 1468
#ifdef EDUKE32_SIMPLE_MENU
4688 hendricks2 1469
static MenuPanel_t M_STORY = { NoTitle, MENU_STORY, MA_Return, MENU_STORY, MA_Advance, };
4609 terminx 1470
#else
4688 hendricks2 1471
static MenuPanel_t M_STORY = { NoTitle, MENU_F1HELP, MA_Return, MENU_F1HELP, MA_Advance, };
4609 terminx 1472
#endif
1473
 
4688 hendricks2 1474
static MenuPanel_t M_F1HELP = { NoTitle, MENU_STORY, MA_Return, MENU_STORY, MA_Advance, };
1475
static MenuPanel_t M_CREDITS = { NoTitle, MENU_CREDITS5, MA_Return, MENU_CREDITS2, MA_Advance, };
1476
static MenuPanel_t M_CREDITS2 = { NoTitle, MENU_CREDITS, MA_Return, MENU_CREDITS3, MA_Advance, };
1477
static MenuPanel_t M_CREDITS3 = { NoTitle, MENU_CREDITS2, MA_Return, MENU_CREDITS4, MA_Advance, };
6013 terminx 1478
static MenuPanel_t M_CREDITS4 = { "About " APPNAME, MENU_CREDITS3, MA_Return, MENU_CREDITS5, MA_Advance, };
1479
static MenuPanel_t M_CREDITS5 = { "About " APPNAME, MENU_CREDITS4, MA_Return, MENU_CREDITS, MA_Advance, };
5 Plagman 1480
 
4686 hendricks2 1481
#define CURSOR_CENTER_2LINE { MENU_MARGIN_CENTER<<16, 120<<16, }
1482
#define CURSOR_CENTER_3LINE { MENU_MARGIN_CENTER<<16, 129<<16, }
4496 hendricks2 1483
#define CURSOR_BOTTOMRIGHT { 304<<16, 186<<16, }
5 Plagman 1484
 
6756 hendricks2 1485
static MenuVerify_t M_SAVECLEANVERIFY = { CURSOR_CENTER_3LINE, MENU_SAVESETUP, MA_None, };
8114 terminx 1486
static MenuVerify_t M_RESETSTATSVERIFY = { CURSOR_CENTER_3LINE, MENU_SAVESETUP, MA_None, };
4688 hendricks2 1487
static MenuVerify_t M_QUIT = { CURSOR_CENTER_2LINE, MENU_CLOSE, MA_None, };
1488
static MenuVerify_t M_QUITTOTITLE = { CURSOR_CENTER_2LINE, MENU_CLOSE, MA_None, };
1489
static MenuVerify_t M_LOADVERIFY = { CURSOR_CENTER_3LINE, MENU_CLOSE, MA_None, };
6756 hendricks2 1490
static MenuVerify_t M_LOADDELVERIFY = { CURSOR_CENTER_3LINE, MENU_LOAD, MA_None, };
4688 hendricks2 1491
static MenuVerify_t M_NEWVERIFY = { CURSOR_CENTER_2LINE, MENU_EPISODE, MA_Advance, };
1492
static MenuVerify_t M_SAVEVERIFY = { CURSOR_CENTER_2LINE, MENU_SAVE, MA_None, };
6750 hendricks2 1493
static MenuVerify_t M_SAVEDELVERIFY = { CURSOR_CENTER_3LINE, MENU_SAVE, MA_None, };
4688 hendricks2 1494
static MenuVerify_t M_RESETPLAYER = { CURSOR_CENTER_3LINE, MENU_CLOSE, MA_None, };
5 Plagman 1495
 
7971 hendricks2 1496
static MenuVerify_t M_COLCORRRESETVERIFY = { CURSOR_CENTER_2LINE, MENU_COLCORR, MA_None, };
1497
static MenuVerify_t M_KEYSRESETVERIFY = { CURSOR_CENTER_2LINE, MENU_KEYBOARDSETUP, MA_None, };
1498
static MenuVerify_t M_KEYSCLASSICVERIFY = { CURSOR_CENTER_2LINE, MENU_KEYBOARDSETUP, MA_None, };
1499
static MenuVerify_t M_JOYSTANDARDVERIFY = { CURSOR_CENTER_2LINE, MENU_JOYSTICKSETUP, MA_None, };
1500
static MenuVerify_t M_JOYPROVERIFY = { CURSOR_CENTER_2LINE, MENU_JOYSTICKSETUP, MA_None, };
1501
static MenuVerify_t M_JOYCLEARVERIFY = { CURSOR_CENTER_2LINE, MENU_JOYSTICKSETUP, MA_None, };
1502
 
4688 hendricks2 1503
static MenuMessage_t M_NETWAITMASTER = { CURSOR_BOTTOMRIGHT, MENU_NULL, MA_None, };
1504
static MenuMessage_t M_NETWAITVOTES = { CURSOR_BOTTOMRIGHT, MENU_NULL, MA_None, };
1505
static MenuMessage_t M_BUYDUKE = { CURSOR_BOTTOMRIGHT, MENU_EPISODE, MA_Return, };
5 Plagman 1506
 
5083 hendricks2 1507
static MenuTextForm_t M_ADULTPASSWORD = { NULL, "Enter Password:", MAXPWLOCKOUT, MTF_Password };
5084 hendricks2 1508
static MenuTextForm_t M_CHEATENTRY = { NULL, "Enter Cheat Code:", MAXCHEATLEN, 0 };
1509
static MenuTextForm_t M_CHEAT_WARP = { NULL, "Enter Warp #:", 3, 0 };
1510
static MenuTextForm_t M_CHEAT_SKILL = { NULL, "Enter Skill #:", 1, 0 };
5 Plagman 1511
 
7999 hendricks2 1512
#define MAKE_MENUFILESELECT(a, dir, b, c) { a, { &MMF_FileSelectLeft, &MMF_FileSelectRight }, { &MF_Minifont, &MF_Minifont }, dir, b, c, { NULL, NULL }, { 0, 0 }, { 3<<16, 3<<16 }, FNLIST_INITIALIZER, 0 }
337 terminx 1513
 
7999 hendricks2 1514
static MenuFileSelect_t M_USERMAP = MAKE_MENUFILESELECT( "Select A User Map", "./usermaps/", "*.map", boardfilename );
337 terminx 1515
 
4496 hendricks2 1516
// MUST be in ascending order of MenuID enum values due to binary search
1517
static Menu_t Menus[] = {
4778 hendricks2 1518
    { &M_MAIN, MENU_MAIN, MENU_CLOSE, MA_None, Menu },
1519
    { &M_MAIN_INGAME, MENU_MAIN_INGAME, MENU_CLOSE, MA_None, Menu },
1520
    { &M_EPISODE, MENU_EPISODE, MENU_MAIN, MA_Return, Menu },
8501 hendricks2 1521
    { &M_USERMAP, MENU_USERMAP, MENU_EPISODE, MA_Return, FileSelect },
7930 hendricks2 1522
    { &M_NEWGAMECUSTOM, MENU_NEWGAMECUSTOM, MENU_MAIN, MA_Return, Menu },
1523
    { &M_NEWGAMECUSTOMSUB, MENU_NEWGAMECUSTOMSUB, MENU_NEWGAMECUSTOM, MA_Return, Menu },
1524
    { &M_SKILL, MENU_SKILL, MENU_PREVIOUS, MA_Return, Menu },
6411 terminx 1525
#ifndef EDUKE32_SIMPLE_MENU
4778 hendricks2 1526
    { &M_GAMESETUP, MENU_GAMESETUP, MENU_OPTIONS, MA_Return, Menu },
6411 terminx 1527
#endif
4778 hendricks2 1528
    { &M_OPTIONS, MENU_OPTIONS, MENU_MAIN, MA_Return, Menu },
1529
    { &M_VIDEOSETUP, MENU_VIDEOSETUP, MENU_DISPLAYSETUP, MA_Return, Menu },
1530
    { &M_KEYBOARDSETUP, MENU_KEYBOARDSETUP, MENU_CONTROLS, MA_Return, Menu },
1531
    { &M_MOUSESETUP, MENU_MOUSESETUP, MENU_CONTROLS, MA_Return, Menu },
1532
    { &M_JOYSTICKSETUP, MENU_JOYSTICKSETUP, MENU_CONTROLS, MA_Return, Menu },
1533
    { &M_JOYSTICKBTNS, MENU_JOYSTICKBTNS, MENU_JOYSTICKSETUP, MA_Return, Menu },
1534
    { &M_JOYSTICKAXES, MENU_JOYSTICKAXES, MENU_JOYSTICKSETUP, MA_Return, Menu },
1535
    { &M_KEYBOARDKEYS, MENU_KEYBOARDKEYS, MENU_KEYBOARDSETUP, MA_Return, Menu },
1536
    { &M_MOUSEBTNS, MENU_MOUSEBTNS, MENU_MOUSESETUP, MA_Return, Menu },
1537
    { &M_MOUSEADVANCED, MENU_MOUSEADVANCED, MENU_MOUSESETUP, MA_Return, Menu },
1538
    { &M_JOYSTICKAXIS, MENU_JOYSTICKAXIS, MENU_JOYSTICKAXES, MA_Return, Menu },
6013 terminx 1539
#ifdef EDUKE32_ANDROID_MENU
4993 terminx 1540
    { &M_TOUCHSETUP, MENU_TOUCHSETUP, MENU_OPTIONS, MA_Return, Menu },
5652 terminx 1541
    { &M_TOUCHSENS, MENU_TOUCHSENS, MENU_TOUCHSETUP, MA_Return, Menu },
5661 terminx 1542
    { &M_TOUCHBUTTONS, MENU_TOUCHBUTTONS, MENU_TOUCHSETUP, MA_Return, Panel },
4993 terminx 1543
#endif
4778 hendricks2 1544
    { &M_CONTROLS, MENU_CONTROLS, MENU_OPTIONS, MA_Return, Menu },
4609 terminx 1545
#ifdef USE_OPENGL
5408 terminx 1546
    { &M_RENDERERSETUP_POLYMOST, MENU_POLYMOST, MENU_DISPLAYSETUP, MA_Return, Menu },
4609 terminx 1547
#endif
4778 hendricks2 1548
    { &M_COLCORR, MENU_COLCORR, MENU_DISPLAYSETUP, MA_Return, Menu },
1549
    { &M_COLCORR, MENU_COLCORR_INGAME, MENU_CLOSE, MA_Return, Menu },
1550
    { &M_SCREENSETUP, MENU_SCREENSETUP, MENU_DISPLAYSETUP, MA_Return, Menu },
1551
    { &M_DISPLAYSETUP, MENU_DISPLAYSETUP, MENU_OPTIONS, MA_Return, Menu },
5408 terminx 1552
#ifdef POLYMER
5424 helixhorne 1553
    { &M_RENDERERSETUP_POLYMER, MENU_POLYMER, MENU_DISPLAYSETUP, MA_Return, Menu },
5408 terminx 1554
#endif
4778 hendricks2 1555
    { &M_LOAD, MENU_LOAD, MENU_MAIN, MA_Return, Menu },
1556
    { &M_SAVE, MENU_SAVE, MENU_MAIN, MA_Return, Menu },
1557
    { &M_STORY, MENU_STORY, MENU_MAIN, MA_Return, Panel },
1558
    { &M_F1HELP, MENU_F1HELP, MENU_MAIN, MA_Return, Panel },
1559
    { &M_QUIT, MENU_QUIT, MENU_PREVIOUS, MA_Return, Verify },
1560
    { &M_QUITTOTITLE, MENU_QUITTOTITLE, MENU_PREVIOUS, MA_Return, Verify },
1561
    { &M_QUIT, MENU_QUIT_INGAME, MENU_CLOSE, MA_None, Verify },
1562
    { &M_NETHOST, MENU_NETSETUP, MENU_MAIN, MA_Return, Menu },
1563
    { &M_NETWAITMASTER, MENU_NETWAITMASTER, MENU_MAIN, MA_Return, Message },
1564
    { &M_NETWAITVOTES, MENU_NETWAITVOTES, MENU_MAIN, MA_Return, Message },
1565
    { &M_SOUND, MENU_SOUND, MENU_OPTIONS, MA_Return, Menu },
1566
    { &M_SOUND, MENU_SOUND_INGAME, MENU_CLOSE, MA_Return, Menu },
1567
    { &M_ADVSOUND, MENU_ADVSOUND, MENU_SOUND, MA_Return, Menu },
6742 hendricks2 1568
    { &M_SAVESETUP, MENU_SAVESETUP, MENU_OPTIONS, MA_Return, Menu },
6750 hendricks2 1569
    { &M_SAVECLEANVERIFY, MENU_SAVECLEANVERIFY, MENU_SAVESETUP, MA_None, Verify },
8114 terminx 1570
    { &M_RESETSTATSVERIFY, MENU_RESETSTATSVERIFY, MENU_SAVESETUP, MA_None, Verify },
6409 terminx 1571
#ifdef EDUKE32_SIMPLE_MENU
1572
    { &M_CHEATS, MENU_CHEATS, MENU_OPTIONS, MA_Return, Menu },
1573
#else
5517 hendricks2 1574
    { &M_CHEATS, MENU_CHEATS, MENU_GAMESETUP, MA_Return, Menu },
6409 terminx 1575
#endif
5084 hendricks2 1576
    { &M_CHEATENTRY, MENU_CHEATENTRY, MENU_CHEATS, MA_None, TextForm },
1577
    { &M_CHEAT_WARP, MENU_CHEAT_WARP, MENU_CHEATS, MA_None, TextForm },
1578
    { &M_CHEAT_SKILL, MENU_CHEAT_SKILL, MENU_CHEATS, MA_None, TextForm },
4778 hendricks2 1579
    { &M_CREDITS, MENU_CREDITS, MENU_MAIN, MA_Return, Panel },
1580
    { &M_CREDITS2, MENU_CREDITS2, MENU_MAIN, MA_Return, Panel },
1581
    { &M_CREDITS3, MENU_CREDITS3, MENU_MAIN, MA_Return, Panel },
1582
    { &M_CREDITS4, MENU_CREDITS4, MENU_MAIN, MA_Return, Panel },
1583
    { &M_CREDITS5, MENU_CREDITS5, MENU_MAIN, MA_Return, Panel },
1584
    { &M_LOADVERIFY, MENU_LOADVERIFY, MENU_LOAD, MA_None, Verify },
6750 hendricks2 1585
    { &M_LOADDELVERIFY, MENU_LOADDELVERIFY, MENU_LOAD, MA_None, Verify },
1586
    { &M_NEWVERIFY, MENU_NEWVERIFY, MENU_PREVIOUS, MA_Return, Verify },
4778 hendricks2 1587
    { &M_SAVEVERIFY, MENU_SAVEVERIFY, MENU_SAVE, MA_None, Verify },
6750 hendricks2 1588
    { &M_SAVEDELVERIFY, MENU_SAVEDELVERIFY, MENU_SAVE, MA_None, Verify },
7971 hendricks2 1589
    { &M_COLCORRRESETVERIFY, MENU_COLCORRRESETVERIFY, MENU_COLCORR, MA_None, Verify },
1590
    { &M_KEYSRESETVERIFY, MENU_KEYSRESETVERIFY, MENU_KEYBOARDSETUP, MA_None, Verify },
1591
    { &M_KEYSCLASSICVERIFY, MENU_KEYSCLASSICVERIFY, MENU_KEYBOARDSETUP, MA_None, Verify },
1592
    { &M_JOYSTANDARDVERIFY, MENU_JOYSTANDARDVERIFY, MENU_JOYSTICKSETUP, MA_None, Verify },
1593
    { &M_JOYPROVERIFY, MENU_JOYPROVERIFY, MENU_JOYSTICKSETUP, MA_None, Verify },
1594
    { &M_JOYCLEARVERIFY, MENU_JOYCLEARVERIFY, MENU_JOYSTICKSETUP, MA_None, Verify },
5083 hendricks2 1595
    { &M_ADULTPASSWORD, MENU_ADULTPASSWORD, MENU_GAMESETUP, MA_None, TextForm },
4778 hendricks2 1596
    { &M_RESETPLAYER, MENU_RESETPLAYER, MENU_CLOSE, MA_None, Verify },
1597
    { &M_BUYDUKE, MENU_BUYDUKE, MENU_EPISODE, MA_Return, Message },
1598
    { &M_NETWORK, MENU_NETWORK, MENU_MAIN, MA_Return, Menu },
1599
    { &M_PLAYER, MENU_PLAYER, MENU_OPTIONS, MA_Return, Menu },
1600
    { &M_MACROS, MENU_MACROS, MENU_PLAYER, MA_Return, Menu },
1601
    { &M_NETHOST, MENU_NETHOST, MENU_NETWORK, MA_Return, Menu },
1602
    { &M_NETOPTIONS, MENU_NETOPTIONS, MENU_NETWORK, MA_Return, Menu },
1603
    { &M_USERMAP, MENU_NETUSERMAP, MENU_NETOPTIONS, MA_Return, FileSelect },
1604
    { &M_NETJOIN, MENU_NETJOIN, MENU_NETWORK, MA_Return, Menu },
4496 hendricks2 1605
};
337 terminx 1606
 
7114 terminx 1607
static CONSTEXPR const uint16_t numMenus = ARRAY_SIZE(Menus);
337 terminx 1608
 
4496 hendricks2 1609
Menu_t *m_currentMenu = &Menus[0];
1610
static Menu_t *m_previousMenu = &Menus[0];
6289 hendricks2 1611
static Menu_t * m_parentMenu;
5 Plagman 1612
 
4496 hendricks2 1613
MenuID_t g_currentMenu;
1614
static MenuID_t g_previousMenu;
337 terminx 1615
 
4778 hendricks2 1616
#define MenuMenu_ChangeEntryList(m, el)\
4496 hendricks2 1617
    do {\
4778 hendricks2 1618
        m.entrylist = el;\
1619
        m.numEntries = ARRAY_SIZE(el);\
4496 hendricks2 1620
    } while (0)
5 Plagman 1621
 
4855 hendricks2 1622
static void MenuEntry_DisableOnCondition(MenuEntry_t * const entry, const int32_t condition)
1623
{
1624
    if (condition)
6204 hendricks2 1625
        entry->flags |= MEF_Disabled;
4855 hendricks2 1626
    else
6204 hendricks2 1627
        entry->flags &= ~MEF_Disabled;
4855 hendricks2 1628
}
6329 hendricks2 1629
static void MenuEntry_LookDisabledOnCondition(MenuEntry_t * const entry, const int32_t condition)
1630
{
1631
    if (condition)
1632
        entry->flags |= MEF_LookDisabled;
1633
    else
1634
        entry->flags &= ~MEF_LookDisabled;
1635
}
6676 hendricks2 1636
static void MenuEntry_HideOnCondition(MenuEntry_t * const entry, const int32_t condition)
1637
{
1638
    if (condition)
1639
        entry->flags |= MEF_Hidden;
1640
    else
1641
        entry->flags &= ~MEF_Hidden;
1642
}
5 Plagman 1643
 
8499 hendricks2 1644
static int32_t M_RunMenu_Menu(Menu_t *cm, MenuMenu_t *menu, MenuEntry_t *currentry, int32_t state, vec2_t origin, int actually_draw = 1);
6569 hendricks2 1645
static void Menu_EntryFocus(/*MenuEntry_t *entry*/);
1646
 
1647
static MenuEntry_t *Menu_AdjustForCurrentEntryAssignment(MenuMenu_t *menu)
1648
{
1649
    MenuEntry_t *currentry = menu->entrylist[menu->currentEntry];
1650
 
1651
    Menu_EntryFocus(/*currentry*/);
1652
 
1653
    if (currentry->ybottom - menu->scrollPos > klabs(menu->format->bottomcutoff))
1654
        menu->scrollPos = currentry->ybottom - klabs(menu->format->bottomcutoff);
1655
    else if (currentry->ytop - menu->scrollPos < menu->format->pos.y)
1656
        menu->scrollPos = currentry->ytop - menu->format->pos.y;
1657
 
1658
    return currentry;
1659
}
1660
 
1661
static MenuEntry_t *Menu_AdjustForCurrentEntryAssignmentBlind(MenuMenu_t *menu)
1662
{
8499 hendricks2 1663
    M_RunMenu_Menu(nullptr, menu, nullptr, 0, { 0, 0 }, 0);
6569 hendricks2 1664
    return Menu_AdjustForCurrentEntryAssignment(menu);
1665
}
1666
 
6751 hendricks2 1667
static int32_t SELECTDIR_z = 65536;
1668
 
7930 hendricks2 1669
void Menu_PopulateNewGameCustom(void)
1670
{
1671
    M_NEWGAMECUSTOM.title = s_NewGame;
1672
 
1673
    int e = 0;
1674
    for (MenuGameplayStemEntry const & stem : g_MenuGameplayEntries)
1675
    {
1676
        MenuGameplayEntry const & entry = stem.entry;
1677
        if (!entry.isValid())
1678
            break;
1679
 
1680
        MEL_NEWGAMECUSTOM[e] = &ME_NEWGAMECUSTOMENTRIES[e];
1681
 
1682
        ++e;
1683
    }
1684
    M_NEWGAMECUSTOM.numEntries = e;
1685
    MMF_Top_NewGameCustom.pos.y = (58 + (3-e)*6)<<16;
1686
}
1687
 
1688
void Menu_PopulateNewGameCustomSub(int e)
1689
{
1690
    if ((unsigned)e >= MAXMENUGAMEPLAYENTRIES)
1691
        return;
1692
 
1693
    MenuGameplayStemEntry const & stem = g_MenuGameplayEntries[e];
1694
    MenuGameplayEntry const & entry = stem.entry;
1695
    if (!entry.isValid())
1696
        return;
1697
 
1698
    M_NEWGAMECUSTOMSUB.title = entry.name;
1699
 
1700
    int s = 0;
1701
    for (MenuGameplayEntry const & subentry : stem.subentries)
1702
    {
1703
        if (!subentry.isValid())
1704
            break;
1705
 
1706
        MEL_NEWGAMECUSTOMSUB[s] = &ME_NEWGAMECUSTOMSUBENTRIES[e][s];
1707
 
1708
        ++s;
1709
    }
1710
    M_NEWGAMECUSTOMSUB.numEntries = s;
1711
    MMF_Top_NewGameCustomSub.pos.y = (58 + (3-s)*6)<<16;
1712
}
1713
 
4496 hendricks2 1714
/*
1715
This function prepares data after ART and CON have been processed.
1716
It also initializes some data in loops rather than statically at compile time.
1717
*/
5923 terminx 1718
void Menu_Init(void)
4496 hendricks2 1719
{
1720
    int32_t i, j, k;
5 Plagman 1721
 
8017 terminx 1722
    if (FURY)
1723
    {
1724
        MMF_Top_Skill.pos.x = (320<<15);
1725
        ME_SKILL_TEMPLATE.format = &MEF_LeftMenu;
1726
    }
1727
 
4496 hendricks2 1728
    // prepare menu fonts
6613 hendricks2 1729
    // check if tilenum is -1 in case it was set in EVENT_SETDEFAULTS
1730
    if ((unsigned)MF_Redfont.tilenum >= MAXTILES) MF_Redfont.tilenum = BIGALPHANUM;
1731
    if ((unsigned)MF_Bluefont.tilenum >= MAXTILES) MF_Bluefont.tilenum = STARTALPHANUM;
1732
    if ((unsigned)MF_Minifont.tilenum >= MAXTILES) MF_Minifont.tilenum = MINIFONT;
1733
    MF_Redfont.emptychar.y = tilesiz[MF_Redfont.tilenum].y<<16;
1734
    MF_Bluefont.emptychar.y = tilesiz[MF_Bluefont.tilenum].y<<16;
1735
    MF_Minifont.emptychar.y = tilesiz[MF_Minifont.tilenum].y<<16;
4496 hendricks2 1736
    if (!minitext_lowercase)
1737
        MF_Minifont.textflags |= TEXT_UPPERCASE;
5 Plagman 1738
 
4496 hendricks2 1739
    // prepare gamefuncs and keys
6185 hendricks2 1740
    MEOSN_Gamefuncs[0] = MenuGameFuncNone;
1741
    MEOSV_Gamefuncs[0] = -1;
1742
    k = 1;
4496 hendricks2 1743
    for (i = 0; i < NUMGAMEFUNCTIONS; ++i)
1744
    {
1745
        Bstrcpy(MenuGameFuncs[i], gamefunctions[i]);
5 Plagman 1746
 
4496 hendricks2 1747
        for (j = 0; j < MAXGAMEFUNCLEN; ++j)
1748
            if (MenuGameFuncs[i][j] == '_')
1749
                MenuGameFuncs[i][j] = ' ';
5 Plagman 1750
 
6185 hendricks2 1751
        if (gamefunctions[i][0] != '\0')
1752
        {
1753
            MEOSN_Gamefuncs[k] = MenuGameFuncs[i];
1754
            MEOSV_Gamefuncs[k] = i;
1755
            ++k;
1756
        }
4496 hendricks2 1757
    }
6185 hendricks2 1758
    MEOS_Gamefuncs.numOptions = k;
1759
 
8303 hendricks2 1760
    for (i = 1; i < NUMKEYS-1; ++i)
6827 terminx 1761
        MEOSN_Keys[i] = g_keyNameTable[i];
8303 hendricks2 1762
    MEOSN_Keys[0] = MenuKeyNone;
4496 hendricks2 1763
    MEOSN_Keys[NUMKEYS-1] = MenuKeyNone;
5 Plagman 1764
 
1765
 
4496 hendricks2 1766
    // prepare episodes
5033 hendricks2 1767
    k = 0;
5835 terminx 1768
    for (i = 0; i < g_volumeCnt; ++i)
4496 hendricks2 1769
    {
5835 terminx 1770
        if (g_volumeNames[i][0])
337 terminx 1771
        {
5835 terminx 1772
            if (!(g_volumeFlags[i] & EF_HIDEFROMSP))
5033 hendricks2 1773
            {
1774
                MEL_EPISODE[i] = &ME_EPISODE[i];
1775
                ME_EPISODE[i] = ME_EPISODE_TEMPLATE;
5835 terminx 1776
                ME_EPISODE[i].name = g_volumeNames[i];
5033 hendricks2 1777
            }
4496 hendricks2 1778
 
5041 hendricks2 1779
            // if (!(EpisodeFlags[i] & EF_HIDEFROMMP))
5033 hendricks2 1780
            {
5835 terminx 1781
                MEOSN_NetEpisodes[k] = g_volumeNames[i];
5033 hendricks2 1782
                MEOSV_NetEpisodes[k] = i;
4496 hendricks2 1783
 
5033 hendricks2 1784
                k++;
1785
            }
337 terminx 1786
        }
5 Plagman 1787
 
4496 hendricks2 1788
        // prepare levels
5034 hendricks2 1789
        MEOS_NETOPTIONS_LEVEL[i] = MEOS_NETOPTIONS_LEVEL_TEMPLATE;
4496 hendricks2 1790
        for (j = 0; j < MAXLEVELS; ++j)
337 terminx 1791
        {
5835 terminx 1792
            MEOSN_NetLevels[i][j] = g_mapInfo[MAXLEVELS*i+j].name;
1793
            if (g_mapInfo[i*MAXLEVELS+j].filename != NULL)
4496 hendricks2 1794
                MEOS_NETOPTIONS_LEVEL[i].numOptions = j+1;
337 terminx 1795
        }
4496 hendricks2 1796
        MEOS_NETOPTIONS_LEVEL[i].optionNames = MEOSN_NetLevels[i];
1797
    }
5835 terminx 1798
    M_EPISODE.numEntries = g_volumeCnt+2;
6415 terminx 1799
#ifndef EDUKE32_SIMPLE_MENU
6198 hendricks2 1800
    MEL_EPISODE[g_volumeCnt] = &ME_Space4_Redfont;
5835 terminx 1801
    MEL_EPISODE[g_volumeCnt+1] = &ME_EPISODE_USERMAP;
5033 hendricks2 1802
    MEOSN_NetEpisodes[k] = MenuUserMap;
1803
    MEOSV_NetEpisodes[k] = MAXVOLUMES;
6415 terminx 1804
#else
1805
    M_EPISODE.numEntries = g_volumeCnt;
1806
    k--;
1807
#endif
1808
    MEOS_NETOPTIONS_EPISODE.numOptions = k + 1;
5033 hendricks2 1809
    NetEpisode = MEOSV_NetEpisodes[0];
6193 hendricks2 1810
    MMF_Top_Episode.pos.y = (58 + (3-k)*6)<<16;
5835 terminx 1811
    if (g_skillCnt == 0)
4977 hendricks2 1812
        MEO_EPISODE.linkID = MENU_NULL;
6596 hendricks2 1813
    M_EPISODE.currentEntry = ud.default_volume;
5 Plagman 1814
 
7930 hendricks2 1815
    // prepare new game custom :O
1816
    if (g_MenuGameplayEntries[0].entry.isValid())
1817
    {
1818
        MEO_MAIN_NEWGAME.linkID = M_NEWVERIFY.linkID = MENU_NEWGAMECUSTOM;
1819
 
1820
        int e = 0;
1821
        for (MenuGameplayStemEntry const & stem : g_MenuGameplayEntries)
1822
        {
1823
            MenuGameplayEntry const & entry = stem.entry;
1824
            if (!entry.isValid())
1825
                break;
1826
 
1827
            MenuEntry_t & e_me = ME_NEWGAMECUSTOMENTRIES[e];
1828
            e_me = ME_EPISODE_TEMPLATE;
1829
            MenuLink_t & e_meo = MEO_NEWGAMECUSTOM[e];
1830
            e_meo = MEO_NEWGAMECUSTOM_TEMPLATE;
1831
            e_me.entry = &e_meo;
1832
 
1833
            e_me.name = entry.name;
1834
            if (entry.flags & MGE_Locked)
1835
                e_me.flags |= MEF_Disabled;
1836
            if (entry.flags & MGE_Hidden)
1837
                e_me.flags |= MEF_Hidden;
1838
 
1839
            int s = 0;
1840
            for (MenuGameplayEntry const & subentry : stem.subentries)
1841
            {
1842
                if (!subentry.isValid())
1843
                    break;
1844
 
1845
                MenuEntry_t & s_me = ME_NEWGAMECUSTOMSUBENTRIES[e][s];
1846
                s_me = ME_EPISODE_TEMPLATE;
1847
                MenuLink_t & s_meo = MEO_NEWGAMECUSTOMSUB[e][s];
1848
                s_meo = MEO_NEWGAMECUSTOMSUB_TEMPLATE;
1849
                s_me.entry = &s_meo;
1850
 
1851
                s_me.name = subentry.name;
1852
                if (subentry.flags & MGE_Locked)
1853
                    s_me.flags |= MEF_Disabled;
1854
                if (subentry.flags & MGE_Hidden)
1855
                    s_me.flags |= MEF_Hidden;
1856
 
1857
                ++s;
1858
            }
1859
 
7998 hendricks2 1860
            if (entry.flags & MGE_UserContent)
1861
                e_meo.linkID = MENU_USERMAP;
1862
            else if (s == 0)
7930 hendricks2 1863
                e_meo.linkID = MENU_SKILL;
1864
 
1865
            ++e;
1866
        }
1867
 
1868
        Menu_PopulateNewGameCustom();
1869
    }
1870
 
4496 hendricks2 1871
    // prepare skills
1872
    k = -1;
5835 terminx 1873
    for (i = 0; i < g_skillCnt && g_skillNames[i][0]; ++i)
4496 hendricks2 1874
    {
1875
        MEL_SKILL[i] = &ME_SKILL[i];
1876
        ME_SKILL[i] = ME_SKILL_TEMPLATE;
5835 terminx 1877
        ME_SKILL[i].name = g_skillNames[i];
5 Plagman 1878
 
5835 terminx 1879
        MEOSN_NetSkills[i] = g_skillNames[i];
5 Plagman 1880
 
4496 hendricks2 1881
        k = i;
1882
    }
1883
    ++k;
5835 terminx 1884
    M_SKILL.numEntries = g_skillCnt; // k;
1885
    MEOS_NETOPTIONS_MONSTERS.numOptions = g_skillCnt + 1; // k+1;
1886
    MEOSN_NetSkills[g_skillCnt] = MenuSkillNone;
1887
    MMF_Top_Skill.pos.y = (58 + (4-g_skillCnt)*6)<<16;
6596 hendricks2 1888
    M_SKILL.currentEntry = ud.default_skill;
6569 hendricks2 1889
    Menu_AdjustForCurrentEntryAssignmentBlind(&M_SKILL);
5 Plagman 1890
 
4496 hendricks2 1891
    // prepare multiplayer gametypes
1892
    k = -1;
1893
    for (i = 0; i < MAXGAMETYPES; ++i)
5835 terminx 1894
        if (g_gametypeNames[i][0])
4496 hendricks2 1895
        {
5835 terminx 1896
            MEOSN_NetGametypes[i] = g_gametypeNames[i];
4496 hendricks2 1897
            k = i;
1898
        }
1899
    ++k;
1900
    MEOS_NETOPTIONS_GAMETYPE.numOptions = k;
5452 hendricks2 1901
    if (NAM_WW2GI)
1902
        ME_NETOPTIONS_MONSTERS.name = "Enemies";
5 Plagman 1903
 
6676 hendricks2 1904
    // prepare cheats
1905
    for (i = 0; i < NUMCHEATFUNCS; ++i)
1906
        MEL_CHEATS[i+1] = &ME_CheatCodes[i];
1907
 
4496 hendricks2 1908
    // prepare text chat macros
1909
    for (i = 0; i < MAXRIDECULE; ++i)
1910
    {
1911
        MEL_MACROS[i] = &ME_MACROS[i];
1912
        ME_MACROS[i] = ME_MACROS_TEMPLATE;
1913
        ME_MACROS[i].entry = &MEO_MACROS[i];
1914
        MEO_MACROS[i] = MEO_MACROS_TEMPLATE;
5 Plagman 1915
 
4496 hendricks2 1916
        MEO_MACROS[i].variable = ud.ridecule[i];
1917
    }
1918
 
1919
    // prepare input
1920
    for (i = 0; i < NUMGAMEFUNCTIONS; ++i)
1921
    {
6185 hendricks2 1922
        if (MenuGameFuncs[i][0] == '\0')
6350 hendricks2 1923
        {
1924
            MEL_KEYBOARDSETUPFUNCS[i] = NULL;
6185 hendricks2 1925
            continue;
6350 hendricks2 1926
        }
6185 hendricks2 1927
 
6350 hendricks2 1928
        MEL_KEYBOARDSETUPFUNCS[i] = &ME_KEYBOARDSETUPFUNCS[i];
1929
        ME_KEYBOARDSETUPFUNCS[i] = ME_KEYBOARDSETUPFUNCS_TEMPLATE;
1930
        ME_KEYBOARDSETUPFUNCS[i].name = MenuGameFuncs[i];
1931
        ME_KEYBOARDSETUPFUNCS[i].entry = &MEO_KEYBOARDSETUPFUNCS[i];
1932
        MEO_KEYBOARDSETUPFUNCS[i] = MEO_KEYBOARDSETUPFUNCS_TEMPLATE;
1933
        MEO_KEYBOARDSETUPFUNCS[i].column[0] = &ud.config.KeyboardKeys[i][0];
1934
        MEO_KEYBOARDSETUPFUNCS[i].column[1] = &ud.config.KeyboardKeys[i][1];
4496 hendricks2 1935
    }
6350 hendricks2 1936
    M_KEYBOARDKEYS.numEntries = NUMGAMEFUNCTIONS;
4496 hendricks2 1937
    for (i = 0; i < MENUMOUSEFUNCTIONS; ++i)
1938
    {
1939
        MEL_MOUSESETUPBTNS[i] = &ME_MOUSESETUPBTNS[i];
1940
        ME_MOUSESETUPBTNS[i] = ME_MOUSEJOYSETUPBTNS_TEMPLATE;
1941
        ME_MOUSESETUPBTNS[i].name = MenuMouseNames[i];
1942
        ME_MOUSESETUPBTNS[i].entry = &MEO_MOUSESETUPBTNS[i];
1943
        MEO_MOUSESETUPBTNS[i] = MEO_MOUSEJOYSETUPBTNS_TEMPLATE;
1944
        MEO_MOUSESETUPBTNS[i].data = &ud.config.MouseFunctions[MenuMouseDataIndex[i][0]][MenuMouseDataIndex[i][1]];
1945
    }
6827 terminx 1946
    for (i = 0; i < 2*joystick.numButtons + 8*joystick.numHats; ++i)
4496 hendricks2 1947
    {
6827 terminx 1948
        if (i < 2*joystick.numButtons)
337 terminx 1949
        {
4496 hendricks2 1950
            if (i & 1)
6827 terminx 1951
                Bsnprintf(MenuJoystickNames[i], MAXJOYBUTTONSTRINGLENGTH, "Double %s", joyGetName(1, i>>1));
4496 hendricks2 1952
            else
6827 terminx 1953
                Bstrncpy(MenuJoystickNames[i], joyGetName(1, i>>1), MAXJOYBUTTONSTRINGLENGTH);
337 terminx 1954
        }
1955
        else
1956
        {
6827 terminx 1957
            Bsnprintf(MenuJoystickNames[i], MAXJOYBUTTONSTRINGLENGTH, (i & 1) ? "Double Hat %d %s" : "Hat %d %s", ((i - 2*joystick.numButtons)>>3), MenuJoystickHatDirections[((i - 2*joystick.numButtons)>>1) % 4]);
337 terminx 1958
        }
5 Plagman 1959
 
4496 hendricks2 1960
        MEL_JOYSTICKBTNS[i] = &ME_JOYSTICKBTNS[i];
1961
        ME_JOYSTICKBTNS[i] = ME_MOUSEJOYSETUPBTNS_TEMPLATE;
1962
        ME_JOYSTICKBTNS[i].name = MenuJoystickNames[i];
1963
        ME_JOYSTICKBTNS[i].entry = &MEO_JOYSTICKBTNS[i];
1964
        MEO_JOYSTICKBTNS[i] = MEO_MOUSEJOYSETUPBTNS_TEMPLATE;
1965
        MEO_JOYSTICKBTNS[i].data = &ud.config.JoystickFunctions[i>>1][i&1];
4399 hendricks2 1966
    }
6827 terminx 1967
    M_JOYSTICKBTNS.numEntries = 2*joystick.numButtons + 8*joystick.numHats;
1968
    for (i = 0; i < joystick.numAxes; ++i)
4496 hendricks2 1969
    {
1970
        ME_JOYSTICKAXES[i] = ME_JOYSTICKAXES_TEMPLATE;
6827 terminx 1971
        Bstrncpy(MenuJoystickAxes[i], joyGetName(0, i), MAXJOYBUTTONSTRINGLENGTH);
4496 hendricks2 1972
        ME_JOYSTICKAXES[i].name = MenuJoystickAxes[i];
1973
        MEL_JOYSTICKAXES[i] = &ME_JOYSTICKAXES[i];
1974
    }
6827 terminx 1975
    M_JOYSTICKAXES.numEntries = joystick.numAxes;
5 Plagman 1976
 
5452 hendricks2 1977
    // prepare sound setup
6289 hendricks2 1978
#ifndef EDUKE32_STANDALONE
5452 hendricks2 1979
    if (WW2GI)
1980
        ME_SOUND_DUKETALK.name = "GI talk:";
1981
    else if (NAM)
1982
        ME_SOUND_DUKETALK.name = "Grunt talk:";
6289 hendricks2 1983
#endif
5452 hendricks2 1984
 
7808 terminx 1985
    if (FURY)
6289 hendricks2 1986
    {
1987
        MF_Redfont.between.x = 2<<16;
6377 hendricks2 1988
        MF_Redfont.cursorScale = 32768;
1989
        MF_Redfont.zoom = 16384;
6613 hendricks2 1990
        MF_Bluefont.zoom = 16384;
6289 hendricks2 1991
 
6329 hendricks2 1992
        // hack; should swap out pointers
1993
        MF_Minifont = MF_Bluefont;
1994
 
6289 hendricks2 1995
        MMF_Top_Main.pos.x = 40<<16;
1996
        MMF_Top_Main.pos.y = 130<<16;
1997
        MMF_Top_Main.bottomcutoff = 190<<16;
1998
        M_OPTIONS.format = &MMF_Top_Main;
1999
 
2000
        MEF_MainMenu.width = MEF_OptionsMenu.width = -(160<<16);
6335 terminx 2001
        MEF_MainMenu.marginBottom = 7<<16;
6289 hendricks2 2002
 
2003
        M_OPTIONS.title = NoTitle;
6751 hendricks2 2004
 
2005
        SELECTDIR_z = 16384;
6289 hendricks2 2006
    }
2007
 
4496 hendricks2 2008
    // prepare shareware
2009
    if (VOLUMEONE)
2010
    {
2011
        // blue out episodes beyond the first
5835 terminx 2012
        for (i = 1; i < g_volumeCnt; ++i)
337 terminx 2013
        {
4496 hendricks2 2014
            if (MEL_EPISODE[i])
335 terminx 2015
            {
4496 hendricks2 2016
                ME_EPISODE[i].entry = &MEO_EPISODE_SHAREWARE;
6206 hendricks2 2017
                ME_EPISODE[i].flags |= MEF_LookDisabled;
5 Plagman 2018
            }
337 terminx 2019
        }
5835 terminx 2020
        M_EPISODE.numEntries = g_volumeCnt; // remove User Map (and spacer)
4496 hendricks2 2021
        MEOS_NETOPTIONS_EPISODE.numOptions = 1;
4855 hendricks2 2022
        MenuEntry_DisableOnCondition(&ME_NETOPTIONS_EPISODE, 1);
4496 hendricks2 2023
    }
5 Plagman 2024
 
4496 hendricks2 2025
    // prepare pre-Atomic
2026
    if (!VOLUMEALL || !PLUTOPAK)
2027
    {
2028
        // prepare credits
6329 hendricks2 2029
        M_CREDITS.title = M_CREDITS2.title = M_CREDITS3.title = s_Credits;
4496 hendricks2 2030
    }
6612 hendricks2 2031
 
6676 hendricks2 2032
    MenuEntry_HideOnCondition(&ME_MAIN_HELP, G_GetLogoFlags() & LOGO_NOHELP);
6612 hendricks2 2033
#ifndef EDUKE32_SIMPLE_MENU
6676 hendricks2 2034
    MenuEntry_HideOnCondition(&ME_MAIN_CREDITS, G_GetLogoFlags() & LOGO_NOCREDITS);
6612 hendricks2 2035
#endif
4496 hendricks2 2036
}
5 Plagman 2037
 
5923 terminx 2038
static void Menu_Run(Menu_t *cm, vec2_t origin);
5 Plagman 2039
 
2040
 
6569 hendricks2 2041
static void Menu_BlackRectangle(int32_t x, int32_t y, int32_t width, int32_t height, int32_t orientation);
5 Plagman 2042
 
4496 hendricks2 2043
/*
5923 terminx 2044
At present, no true difference is planned between Menu_Pre() and Menu_PreDraw().
4496 hendricks2 2045
They are separate for purposes of organization.
2046
*/
5 Plagman 2047
 
5923 terminx 2048
static void Menu_Pre(MenuID_t cm)
4496 hendricks2 2049
{
2050
    int32_t i;
7776 terminx 2051
    auto ps = g_player[myconnectindex].ps;
5 Plagman 2052
 
4496 hendricks2 2053
    switch (cm)
2054
    {
2055
    case MENU_MAIN_INGAME:
4855 hendricks2 2056
        MenuEntry_DisableOnCondition(&ME_MAIN_SAVEGAME, ud.recstat == 2);
2057
        MenuEntry_DisableOnCondition(&ME_MAIN_QUITTOTITLE, g_netServer || numplayers > 1);
6370 terminx 2058
        fallthrough__;
4496 hendricks2 2059
    case MENU_MAIN:
2060
        if ((g_netServer || ud.multimode > 1) && ud.recstat != 2)
2061
        {
2062
            ME_MAIN_NEWGAME.entry = &MEO_MAIN_NEWGAME_NETWORK;
2063
            ME_MAIN_NEWGAME_INGAME.entry = &MEO_MAIN_NEWGAME_NETWORK;
2064
        }
2065
        else
2066
        {
2067
            ME_MAIN_NEWGAME.entry = &MEO_MAIN_NEWGAME;
2068
            ME_MAIN_NEWGAME_INGAME.entry = &MEO_MAIN_NEWGAME_INGAME;
2069
        }
2070
        break;
4399 hendricks2 2071
 
4496 hendricks2 2072
    case MENU_GAMESETUP:
2073
        MEO_GAMESETUP_DEMOREC.options = (ps->gm&MODE_GAME) ? &MEOS_DemoRec : &MEOS_OffOn;
4855 hendricks2 2074
        MenuEntry_DisableOnCondition(&ME_GAMESETUP_DEMOREC, (ps->gm&MODE_GAME) && ud.m_recstat != 1);
4496 hendricks2 2075
        break;
5 Plagman 2076
 
7961 hendricks2 2077
    case MENU_DISPLAYSETUP:
2078
        MenuEntry_HideOnCondition(&ME_DISPLAYSETUP_VOXELS, !g_haveVoxels);
4496 hendricks2 2079
#ifdef USE_OPENGL
6829 terminx 2080
        if (videoGetRenderMode() == REND_CLASSIC)
4778 hendricks2 2081
            MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP);
4496 hendricks2 2082
#ifdef POLYMER
6829 terminx 2083
        else if (videoGetRenderMode() == REND_POLYMER)
4778 hendricks2 2084
            MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP_GL_POLYMER);
4496 hendricks2 2085
#endif
2086
        else
4778 hendricks2 2087
            MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP_GL);
5 Plagman 2088
 
6587 hendricks2 2089
        MEO_SCREENSETUP_SCREENSIZE.steps = !(ud.statusbarflags & STATUSBAR_NONONE) +
2090
                                           !(ud.statusbarflags & STATUSBAR_NOMODERN) +
2091
                                           !(ud.statusbarflags & STATUSBAR_NOMINI) * (ud.statusbarrange + 1) +
2092
                                           !(ud.statusbarflags & STATUSBAR_NOOVERLAY) +
2093
                                           !(ud.statusbarflags & STATUSBAR_NOFULL) +
2094
                                           !(ud.statusbarflags & STATUSBAR_NOSHRINK) * 14;
6650 hendricks2 2095
        MEO_SCREENSETUP_SCREENSIZE.max = MEO_SCREENSETUP_SCREENSIZE.steps - 1;
7984 hendricks2 2096
        if (MEO_SCREENSETUP_SCREENSIZE.steps <= 2 && !(ud.statusbarflags & STATUSBAR_NONONE))
2097
        {
2098
            ME_SCREENSETUP_SCREENSIZE.entry = &MEO_SCREENSETUP_SCREENSIZE_TWO;
2099
            ME_SCREENSETUP_SCREENSIZE.type = Option;
2100
        }
2101
        else
2102
        {
2103
            ME_SCREENSETUP_SCREENSIZE.entry = &MEO_SCREENSETUP_SCREENSIZE;
2104
            ME_SCREENSETUP_SCREENSIZE.type = RangeInt32;
2105
        }
2106
        MenuEntry_HideOnCondition(&ME_SCREENSETUP_SCREENSIZE, (MEO_SCREENSETUP_SCREENSIZE.steps < 2));
4976 hendricks2 2107
 
6587 hendricks2 2108
        vpsize = !(ud.statusbarflags & STATUSBAR_NONONE) +
2109
                 (ud.screen_size >= 4 && !(ud.statusbarflags & STATUSBAR_NOMODERN)) +
2110
                 (ud.screen_size >= 4 && ud.althud == 0 && !(ud.statusbarflags & STATUSBAR_NOMINI)) * (ud.statusbarcustom + 1) +
2111
                 (ud.screen_size >= 8 && !(ud.statusbarflags & STATUSBAR_NOOVERLAY)) +
2112
                 (ud.screen_size >= 8 && ud.statusbarmode == 0 && !(ud.statusbarflags & STATUSBAR_NOFULL)) +
2113
                 (ud.screen_size > 8 && !(ud.statusbarflags & STATUSBAR_NOSHRINK)) * ((ud.screen_size - 8) >> 2)
2114
                 -1;
2115
 
6940 pogokeen 2116
#ifndef EDUKE32_STANDALONE
7420 terminx 2117
#ifdef TEXFILTER_MENU_OPTIONS
6829 terminx 2118
        if (videoGetRenderMode() != REND_CLASSIC)
4869 hendricks2 2119
        {
6776 pogokeen 2120
            //POGOTODO: allow setting anisotropy again while r_useindexedcolortextures is set when support is added down the line
7420 terminx 2121
            // don't allow setting anisotropy while in POLYMOST and r_useindexedcolortextures is enabled
6829 terminx 2122
            MenuEntry_DisableOnCondition(&ME_DISPLAYSETUP_ANISOTROPY, videoGetRenderMode() == REND_POLYMOST && r_useindexedcolortextures);
6776 pogokeen 2123
 
4609 terminx 2124
            for (i = (int32_t) ARRAY_SIZE(MEOSV_DISPLAYSETUP_ANISOTROPY) - 1; i >= 0; --i)
5 Plagman 2125
            {
4609 terminx 2126
                if (MEOSV_DISPLAYSETUP_ANISOTROPY[i] <= glinfo.maxanisotropy)
4496 hendricks2 2127
                {
4609 terminx 2128
                    MEOS_DISPLAYSETUP_ANISOTROPY.numOptions = i + 1;
4496 hendricks2 2129
                    break;
2130
                }
337 terminx 2131
            }
4869 hendricks2 2132
        }
6940 pogokeen 2133
#endif
7420 terminx 2134
#endif
4850 hendricks2 2135
        break;
5 Plagman 2136
 
5408 terminx 2137
    case MENU_POLYMER:
2138
    case MENU_POLYMOST:
4855 hendricks2 2139
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_TEXQUALITY, !usehightile);
2140
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_PRECACHE, !usehightile);
5526 hendricks2 2141
# ifndef EDUKE32_GLES
4855 hendricks2 2142
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_TEXCACHE, !(glusetexcompr && usehightile));
5526 hendricks2 2143
# endif
2144
# ifdef USE_GLEXT
4855 hendricks2 2145
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_DETAILTEX, !usehightile);
5409 terminx 2146
        MenuEntry_DisableOnCondition(&ME_RENDERERSETUP_GLOWTEX, !usehightile);
5526 hendricks2 2147
# endif
7961 hendricks2 2148
#endif
4496 hendricks2 2149