2006-04-13 20:47:06 +00:00
//-------------------------------------------------------------------------
/*
2016-02-07 02:38:03 +00:00
Copyright ( C ) 2016 EDuke32 developers and contributors
2006-04-13 20:47:06 +00:00
2010-05-25 10:56:00 +00:00
This file is part of EDuke32 .
2006-04-13 20:47:06 +00:00
EDuke32 is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
See the GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
2014-07-20 08:55:56 +00:00
Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
2006-04-13 20:47:06 +00:00
*/
//-------------------------------------------------------------------------
2019-09-21 18:59:54 +00:00
# include "ns.h" // Must come before everything else!
2018-11-18 18:09:48 +00:00
# include "cheats.h"
2017-02-25 08:15:36 +00:00
# include "compat.h"
2018-11-18 18:09:48 +00:00
# include "demo.h"
2006-04-13 20:47:06 +00:00
# include "duke3d.h"
2018-11-18 18:09:48 +00:00
# include "input.h"
# include "menus.h"
2008-07-27 21:33:28 +00:00
# include "osdcmds.h"
2010-08-02 08:13:51 +00:00
# include "savegame.h"
2019-11-02 21:52:13 +00:00
# include "superfasthash.h"
2019-10-21 21:29:48 +00:00
# include "gamecvars.h"
2019-10-25 22:32:49 +00:00
# include "gamecontrol.h"
2019-11-03 19:58:10 +00:00
# include "c_bind.h"
2019-10-04 19:13:04 +00:00
# include "../../glbackend/glbackend.h"
2010-09-14 18:19:38 +00:00
2019-11-09 18:15:03 +00:00
bool ShowOptionMenu ( ) ;
namespace ImGui
{
void ShowDemoWindow ( bool * ) ;
}
2019-09-21 20:53:00 +00:00
BEGIN_DUKE_NS
2019-11-23 22:05:24 +00:00
#if 0
2019-09-21 20:53:00 +00:00
2014-10-27 07:09:41 +00:00
// common positions
# define MENU_MARGIN_REGULAR 40
# define MENU_MARGIN_WIDE 32
# define MENU_MARGIN_CENTER 160
# define MENU_HEIGHT_CENTER 100
2008-07-30 02:51:32 +00:00
# define USERMAPENTRYLENGTH 25
2012-02-04 14:30:54 +00:00
2014-05-31 12:26:41 +00:00
/*
All MAKE_ * macros are generally for the purpose of keeping state initialization
separate from actual data . Alternatively , they can serve to factor out repetitive
stuff and keep the important bits from getting lost to our eyes .
2014-06-13 09:03:52 +00:00
2019-08-09 08:21:19 +00:00
They serve as a stand - in for C + + default value constructors , since this was written
when the codebase still used C89 .
2014-11-30 02:04:36 +00:00
Note that I prefer to include a space on the inside of the macro parentheses , since
they effectively stand in for curly braces as struct initializers .
2014-05-31 12:26:41 +00:00
*/
2012-02-04 14:30:54 +00:00
2015-12-23 04:05:35 +00:00
static MenuMenuFormat_t MMF_Top_Options = { { MENU_MARGIN_CENTER < < 16 , 38 < < 16 , } , - ( 190 < < 16 ) } ;
static MenuMenuFormat_t MMF_Top_Joystick_Network = { { MENU_MARGIN_CENTER < < 16 , 70 < < 16 , } , - ( 190 < < 16 ) } ;
static MenuMenuFormat_t MMF_BigOptions = { { MENU_MARGIN_WIDE < < 16 , 38 < < 16 , } , - ( 190 < < 16 ) } ;
static MenuMenuFormat_t MMF_SmallOptions = { { MENU_MARGIN_WIDE < < 16 , 37 < < 16 , } , 170 < < 16 } ;
static MenuMenuFormat_t MMF_Macros = { { 26 < < 16 , 40 < < 16 , } , 160 < < 16 } ;
static MenuMenuFormat_t MMF_SmallOptionsNarrow = { { MENU_MARGIN_REGULAR < < 16 , 38 < < 16 , } , - ( 190 < < 16 ) } ;
2018-02-20 11:55:24 +00:00
static MenuMenuFormat_t MMF_KeyboardSetupFuncs = { { 50 < < 16 , 34 < < 16 , } , 151 < < 16 } ;
2015-12-23 04:05:35 +00:00
static MenuMenuFormat_t MMF_MouseJoySetupBtns = { { 76 < < 16 , 34 < < 16 , } , 143 < < 16 } ;
static MenuMenuFormat_t MMF_FuncList = { { 100 < < 16 , 51 < < 16 , } , 152 < < 16 } ;
static MenuMenuFormat_t MMF_ColorCorrect = { { MENU_MARGIN_REGULAR < < 16 , 86 < < 16 , } , 190 < < 16 } ;
static MenuMenuFormat_t MMF_BigSliders = { { MENU_MARGIN_WIDE < < 16 , 37 < < 16 , } , 190 < < 16 } ;
2017-12-18 11:24:53 +00:00
static MenuMenuFormat_t MMF_LoadSave = { { 200 < < 16 , 49 < < 16 , } , 145 < < 16 } ;
2015-12-23 04:05:35 +00:00
static MenuMenuFormat_t MMF_NetSetup = { { 36 < < 16 , 38 < < 16 , } , 190 < < 16 } ;
static MenuMenuFormat_t MMF_FileSelectLeft = { { 40 < < 16 , 45 < < 16 , } , 162 < < 16 } ;
static MenuMenuFormat_t MMF_FileSelectRight = { { 164 < < 16 , 45 < < 16 , } , 162 < < 16 } ;
2014-11-30 02:04:36 +00:00
2019-11-28 00:49:50 +00:00
2017-06-27 01:50:55 +00:00
static MenuEntryFormat_t MEF_OptionsMenu = { 7 < < 16 , 0 , 0 } ;
2019-08-15 06:51:56 +00:00
static MenuEntryFormat_t MEF_LeftMenu = { 7 < < 16 , 0 , 120 < < 16 } ;
2017-06-19 23:06:57 +00:00
static MenuEntryFormat_t MEF_CenterMenu = { 7 < < 16 , 0 , 0 } ;
2018-02-13 00:13:06 +00:00
static MenuEntryFormat_t MEF_BigOptions_Apply = { 4 < < 16 , 16 < < 16 , - ( 260 < < 16 ) } ;
2017-06-19 23:06:57 +00:00
static MenuEntryFormat_t MEF_BigOptionsRt = { 4 < < 16 , 0 , - ( 260 < < 16 ) } ;
2019-08-13 09:15:49 +00:00
static MenuEntryFormat_t MEF_BigOptionsRtSections = { 3 < < 16 , 0 , - ( 260 < < 16 ) } ;
2017-01-18 22:21:40 +00:00
# if defined USE_OPENGL || !defined EDUKE32_ANDROID_MENU
2018-02-20 11:55:24 +00:00
static MenuEntryFormat_t MEF_SmallOptions = { 1 < < 16 , 0 , - ( 260 < < 16 ) } ;
2014-10-19 00:44:23 +00:00
# endif
2017-06-19 23:06:57 +00:00
static MenuEntryFormat_t MEF_BigCheats = { 3 < < 16 , 0 , - ( 260 < < 16 ) } ;
static MenuEntryFormat_t MEF_Cheats = { 2 < < 16 , 0 , - ( 260 < < 16 ) } ;
static MenuEntryFormat_t MEF_PlayerNarrow = { 1 < < 16 , 0 , 90 < < 16 } ;
static MenuEntryFormat_t MEF_Macros = { 2 < < 16 , - 1 , 268 < < 16 } ;
static MenuEntryFormat_t MEF_VideoSetup = { 4 < < 16 , 0 , 168 < < 16 } ;
2017-06-19 23:07:12 +00:00
static MenuEntryFormat_t MEF_VideoSetup_Apply = { 4 < < 16 , 16 < < 16 , 168 < < 16 } ;
2018-02-20 11:55:24 +00:00
static MenuEntryFormat_t MEF_KBFuncList = { 3 < < 16 , 0 , - ( 225 < < 16 ) } ;
static MenuEntryFormat_t MEF_FuncList = { 3 < < 16 , 0 , - ( 170 < < 16 ) } ;
2017-06-19 23:06:57 +00:00
static MenuEntryFormat_t MEF_ColorCorrect = { 2 < < 16 , 0 , - ( 240 < < 16 ) } ;
2018-02-20 11:55:24 +00:00
static MenuEntryFormat_t MEF_BigSliders = { 2 < < 16 , 0 , - ( 260 < < 16 ) } ;
2017-12-18 11:24:53 +00:00
static MenuEntryFormat_t MEF_LoadSave = { 2 < < 16 , - 1 , 78 < < 16 } ;
2017-06-19 23:06:57 +00:00
static MenuEntryFormat_t MEF_NetSetup = { 4 < < 16 , 0 , 112 < < 16 } ;
2017-06-19 23:07:12 +00:00
static MenuEntryFormat_t MEF_NetSetup_Confirm = { 4 < < 16 , 16 < < 16 , 112 < < 16 } ;
2014-05-31 12:26:41 +00:00
// common menu option sets
2014-11-30 02:04:36 +00:00
# define MAKE_MENUOPTIONSET(optionNames, optionValues, features) { optionNames, optionValues, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, ARRAY_SIZE(optionNames), -1, 0, features }
# define MAKE_MENUOPTIONSETDYN(optionNames, optionValues, numOptions, features) { optionNames, optionValues, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, numOptions, -1, 0, features }
2015-02-22 22:15:35 +00:00
# define MAKE_MENUOPTIONSETNULL { NULL, NULL, &MMF_FuncList, &MEF_FuncList, &MF_Minifont, 0, -1, 0, 0 }
2014-05-31 12:26:41 +00:00
2016-01-11 05:06:10 +00:00
static char const * MEOSN_OffOn [ ] = { " Off " , " On " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_OffOn = MAKE_MENUOPTIONSET ( MEOSN_OffOn , NULL , 0x3 ) ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_OnOff [ ] = { " On " , " Off " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_OnOff = MAKE_MENUOPTIONSET ( MEOSN_OnOff , NULL , 0x3 ) ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_NoYes [ ] = { " No " , " Yes " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_NoYes = MAKE_MENUOPTIONSET ( MEOSN_NoYes , NULL , 0x3 ) ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_YesNo [ ] = { " Yes " , " No " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_YesNo = MAKE_MENUOPTIONSET ( MEOSN_YesNo , NULL , 0x3 ) ;
2014-05-31 12:26:41 +00:00
2019-10-25 22:32:49 +00:00
static FString MenuGameFuncs [ NUMGAMEFUNCTIONS ] ;
2016-01-11 05:06:10 +00:00
static char const * MenuGameFuncNone = " -None- " ;
static char const * MEOSN_Gamefuncs [ NUMGAMEFUNCTIONS + 1 ] ;
2017-06-17 11:41:59 +00:00
static int32_t MEOSV_Gamefuncs [ NUMGAMEFUNCTIONS + 1 ] ;
static MenuOptionSet_t MEOS_Gamefuncs = MAKE_MENUOPTIONSET ( MEOSN_Gamefuncs , MEOSV_Gamefuncs , 0x1 ) ;
2012-02-04 14:30:54 +00:00
2014-05-31 12:26:41 +00:00
/*
2014-11-30 02:04:36 +00:00
MenuEntry_t is passed in arrays of pointers so that the callback function
2014-05-31 12:26:41 +00:00
that is called when an entry is modified or activated can test equality of the current
2014-11-30 02:04:36 +00:00
entry pointer directly against the known ones , instead of relying on an ID number .
2006-04-13 20:47:06 +00:00
2014-11-30 02:04:36 +00:00
That way , individual menu entries can be ifdef ' d out painlessly .
2014-05-31 12:26:41 +00:00
*/
2012-02-04 14:30:54 +00:00
2014-10-27 10:14:50 +00:00
static MenuLink_t MEO_NULL = { MENU_NULL , MA_None , } ;
2014-05-31 12:26:41 +00:00
static const char * MenuCustom = " Custom " ;
2014-11-30 02:04:36 +00:00
# define MAKE_MENUSTRING(...) { NULL, __VA_ARGS__, }
2014-05-31 12:26:41 +00:00
# define MAKE_MENUOPTION(...) { __VA_ARGS__, -1, }
# define MAKE_MENURANGE(...) { __VA_ARGS__, }
# define MAKE_MENUENTRY(...) { __VA_ARGS__, 0, 0, 0, }
2014-11-30 02:04:36 +00:00
# define MAKE_SPACER( EntryName, Height ) \
2017-06-19 23:06:37 +00:00
static MenuSpacer_t MEO_ # # EntryName = { Height } ;
2014-11-30 02:04:36 +00:00
MAKE_SPACER ( Space2 , 2 < < 16 ) ; // bigoptions
MAKE_SPACER ( Space4 , 4 < < 16 ) ; // usermap, smalloptions, anything else non-top
MAKE_SPACER ( Space6 , 6 < < 16 ) ; // videosetup
MAKE_SPACER ( Space8 , 8 < < 16 ) ; // colcorr, redslide
2017-06-19 23:06:37 +00:00
static MenuEntry_t ME_Space2_Redfont = MAKE_MENUENTRY ( NULL , & MF_Redfont , & MEF_Null , & MEO_Space2 , Spacer ) ;
static MenuEntry_t ME_Space4_Bluefont = MAKE_MENUENTRY ( NULL , & MF_Bluefont , & MEF_Null , & MEO_Space4 , Spacer ) ;
2017-08-04 23:06:37 +00:00
static MenuEntry_t ME_Space4_Redfont = MAKE_MENUENTRY ( NULL , & MF_Redfont , & MEF_Null , & MEO_Space4 , Spacer ) ;
2019-09-21 11:02:17 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2017-06-19 23:06:37 +00:00
static MenuEntry_t ME_Space8_Bluefont = MAKE_MENUENTRY ( NULL , & MF_Bluefont , & MEF_Null , & MEO_Space8 , Spacer ) ;
# endif
2017-08-04 23:06:37 +00:00
static MenuEntry_t ME_Space6_Redfont = MAKE_MENUENTRY ( NULL , & MF_Redfont , & MEF_Null , & MEO_Space6 , Spacer ) ;
2017-06-19 23:06:37 +00:00
static MenuEntry_t ME_Space8_Redfont = MAKE_MENUENTRY ( NULL , & MF_Redfont , & MEF_Null , & MEO_Space8 , Spacer ) ;
2014-11-30 02:04:36 +00:00
2019-08-09 08:21:19 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_SKILL_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Redfont , & MEF_CenterMenu , & MEO_NULL , Link ) ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t ME_SKILL [ MAXSKILLS ] ;
static MenuEntry_t * MEL_SKILL [ MAXSKILLS ] ;
2017-07-31 01:34:54 +00:00
static char const * MEOSN_GAMESETUP_AIM_AUTO [ ] = { " Never " , " Always " , " Hitscan only " ,
2014-09-30 04:07:29 +00:00
} ;
static int32_t MEOSV_GAMESETUP_AIM_AUTO [ ] = { 0 , 1 , 2 ,
} ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_GAMESETUP_AIM_AUTO = MAKE_MENUOPTIONSET ( MEOSN_GAMESETUP_AIM_AUTO , MEOSV_GAMESETUP_AIM_AUTO , 0x2 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_GAMESETUP_AIM_AUTO = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_GAMESETUP_AIM_AUTO , & cl_autoaim ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_GAMESETUP_AIM_AUTO = MAKE_MENUENTRY ( " Auto aim: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_GAMESETUP_AIM_AUTO , Option ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_GAMESETUP_ALWAYS_RUN = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_NoYes , & cl_autorun ) ;
2019-08-15 16:57:30 +00:00
static MenuEntry_t ME_GAMESETUP_ALWAYS_RUN = MAKE_MENUENTRY ( " Always run: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_GAMESETUP_ALWAYS_RUN , Option ) ;
2019-08-17 22:33:36 +00:00
static char const * MEOSN_GAMESETUP_WEAPSWITCH_PICKUP [ ] = { " Never " , " If new " , /*"If favored",*/ } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUOPTIONSET ( MEOSN_GAMESETUP_WEAPSWITCH_PICKUP , NULL , 0x2 ) ;
static MenuOption_t MEO_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_GAMESETUP_WEAPSWITCH_PICKUP , NULL ) ;
static MenuEntry_t ME_GAMESETUP_WEAPSWITCH_PICKUP = MAKE_MENUENTRY ( " Equip pickups: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_GAMESETUP_WEAPSWITCH_PICKUP , Option ) ;
2014-09-30 04:07:29 +00:00
2016-01-11 05:06:10 +00:00
static char const * MEOSN_DemoRec [ ] = { " Off " , " Running " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_DemoRec = MAKE_MENUOPTIONSET ( MEOSN_DemoRec , NULL , 0x3 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_GAMESETUP_DEMOREC = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & m_recstat ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_GAMESETUP_DEMOREC = MAKE_MENUENTRY ( " Record demo: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_GAMESETUP_DEMOREC , Option ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_ADULTMODE = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & adult_lockout ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_ADULTMODE = MAKE_MENUENTRY ( " Parental lock: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_ADULTMODE , Option ) ;
2014-09-30 04:07:29 +00:00
2017-07-31 03:14:51 +00:00
# if defined(EDUKE32_ANDROID_MENU) || !defined(EDUKE32_SIMPLE_MENU)
2016-01-08 01:32:47 +00:00
static MenuLink_t MEO_GAMESETUP_CHEATS = { MENU_CHEATS , MA_Advance , } ;
static MenuEntry_t ME_GAMESETUP_CHEATS = MAKE_MENUENTRY ( " Cheats " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_GAMESETUP_CHEATS , Link ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_GAMESETUP [ ] = {
2014-12-27 18:35:34 +00:00
& ME_ADULTMODE ,
2017-01-18 22:21:40 +00:00
# if defined STARTUP_SETUP_WINDOW && !defined EDUKE32_SIMPLE_MENU
2014-05-31 12:26:41 +00:00
& ME_GAMESETUP_STARTWIN ,
2014-09-30 04:07:29 +00:00
# endif
2019-08-16 00:20:45 +00:00
# ifndef EDUKE32_ANDROID_MENU
2014-05-31 12:26:41 +00:00
& ME_GAMESETUP_DEMOREC ,
# endif
2016-01-08 01:32:47 +00:00
& ME_GAMESETUP_CHEATS ,
2014-09-30 04:07:29 +00:00
} ;
2017-07-31 03:14:51 +00:00
# endif
2012-06-03 16:11:22 +00:00
2017-07-31 01:34:54 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2017-06-27 01:50:55 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Game Setup " , MEF_OptionsMenu , OPTIONS_GAMESETUP , MENU_GAMESETUP ) ;
2017-07-31 01:34:54 +00:00
# endif
2017-06-27 01:50:55 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Sound Setup " , MEF_OptionsMenu , OPTIONS_SOUNDSETUP , MENU_SOUND ) ;
MAKE_MENU_TOP_ENTRYLINK ( " Display Setup " , MEF_OptionsMenu , OPTIONS_DISPLAYSETUP , MENU_DISPLAYSETUP ) ;
MAKE_MENU_TOP_ENTRYLINK ( " Player Setup " , MEF_OptionsMenu , OPTIONS_PLAYERSETUP , MENU_PLAYER ) ;
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
2017-06-27 01:50:55 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Control Setup " , MEF_OptionsMenu , OPTIONS_CONTROLS , MENU_CONTROLS ) ;
2019-11-09 21:22:51 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Configure Controls " , MEF_BigOptionsRtSections , OPTIONS_KEYBOARDSETUP , MENU_KEYBOARDSETUP ) ;
2019-08-13 09:15:49 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Mouse Setup " , MEF_BigOptionsRtSections , OPTIONS_MOUSESETUP , MENU_MOUSESETUP ) ;
2015-12-04 11:52:47 +00:00
# endif
2019-08-13 10:25:35 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Gamepad Setup " , MEF_BigOptionsRtSections , OPTIONS_JOYSTICKSETUP , MENU_JOYSTICKSETUP ) ;
2017-01-18 22:21:40 +00:00
# ifdef EDUKE32_ANDROID_MENU
2019-08-13 09:15:49 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Touch Setup " , MEF_BigOptionsRtSections , OPTIONS_TOUCHSETUP , MENU_TOUCHSETUP ) ;
2015-02-11 05:22:32 +00:00
# endif
2017-07-31 03:14:51 +00:00
# ifdef EDUKE32_SIMPLE_MENU
MAKE_MENU_TOP_ENTRYLINK ( " Cheats " , MEF_OptionsMenu , OPTIONS_CHEATS , MENU_CHEATS ) ;
# endif
2012-06-03 16:11:22 +00:00
2019-11-09 18:15:03 +00:00
// Zhe menu code lacks flexibility, it can either be hardwired to ints or to CVARs.
// Since CVARs are more important it means that these need to be implemented as CVARs even though they are just temporaries.
// By giving them no name we ensure that they remain outside the CVAR system.
CVAR_UNAMED ( Int , newresolution )
CVAR_UNAMED ( Int , newrendermode )
CVAR_UNAMED ( Int , newfullscreen )
CVAR_UNAMED ( Int , newvsync )
CVAR_UNAMED ( Int , newborderless )
2012-06-03 16:11:22 +00:00
2014-05-31 12:26:41 +00:00
enum resflags_t {
RES_FS = 0x1 ,
RES_WIN = 0x2 ,
} ;
2012-06-03 16:11:22 +00:00
2018-02-26 02:48:09 +00:00
# define MAXRESOLUTIONSTRINGLENGTH 19
2012-06-03 16:11:22 +00:00
2014-05-31 12:26:41 +00:00
typedef struct resolution_t {
int32_t xdim , ydim ;
int32_t flags ;
int32_t bppmax ;
char name [ MAXRESOLUTIONSTRINGLENGTH ] ;
} resolution_t ;
2012-06-03 16:11:22 +00:00
2014-05-31 12:26:41 +00:00
resolution_t resolution [ MAXVALIDMODES ] ;
2012-06-03 16:11:22 +00:00
2016-01-11 05:06:10 +00:00
static char const * MEOSN_VIDEOSETUP_RESOLUTION [ MAXVALIDMODES ] ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_VIDEOSETUP_RESOLUTION = MAKE_MENUOPTIONSETDYN ( MEOSN_VIDEOSETUP_RESOLUTION , NULL , 0 , 0x0 ) ;
static MenuOption_t MEO_VIDEOSETUP_RESOLUTION = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_VIDEOSETUP_RESOLUTION , & newresolution ) ;
static MenuEntry_t ME_VIDEOSETUP_RESOLUTION = MAKE_MENUENTRY ( " Resolution: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_VIDEOSETUP_RESOLUTION , Option ) ;
2006-12-10 06:49:01 +00:00
2014-05-31 12:26:41 +00:00
# ifdef USE_OPENGL
2016-01-11 05:06:10 +00:00
static char const * MEOSN_VIDEOSETUP_RENDERER [ ] = { " Classic " , " OpenGL " , } ;
2014-05-31 12:26:41 +00:00
static int32_t MEOSV_VIDEOSETUP_RENDERER [ ] = { REND_CLASSIC , REND_POLYMOST , } ;
2006-04-13 20:47:06 +00:00
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_VIDEOSETUP_RENDERER = MAKE_MENUOPTIONSET ( MEOSN_VIDEOSETUP_RENDERER , MEOSV_VIDEOSETUP_RENDERER , 0x2 ) ;
2014-05-31 12:26:41 +00:00
2014-11-30 02:04:36 +00:00
static MenuOption_t MEO_VIDEOSETUP_RENDERER = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_VIDEOSETUP_RENDERER , & newrendermode ) ;
static MenuEntry_t ME_VIDEOSETUP_RENDERER = MAKE_MENUENTRY ( " Renderer: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_VIDEOSETUP_RENDERER , Option ) ;
2014-12-18 18:14:45 +00:00
# endif
2019-09-08 01:01:30 +00:00
static MenuOption_t MEO_VIDEOSETUP_FULLSCREEN = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_YesNo , & newfullscreen ) ;
static MenuEntry_t ME_VIDEOSETUP_FULLSCREEN = MAKE_MENUENTRY ( " Windowed: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_VIDEOSETUP_FULLSCREEN , Option ) ;
2015-12-23 04:05:21 +00:00
2019-09-08 01:01:30 +00:00
static char const * MEOSN_VIDEOSETUP_BORDERLESS [ ] = { " No " , " Yes " , " Auto " , } ;
static int32_t MEOSV_VIDEOSETUP_BORDERLESS [ ] = { 0 , 1 , 2 , } ;
static MenuOptionSet_t MEOS_VIDEOSETUP_BORDERLESS = MAKE_MENUOPTIONSET ( MEOSN_VIDEOSETUP_BORDERLESS , MEOSV_VIDEOSETUP_BORDERLESS , 0x2 ) ;
static MenuOption_t MEO_VIDEOSETUP_BORDERLESS = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_VIDEOSETUP_BORDERLESS , & newborderless ) ;
static MenuEntry_t ME_VIDEOSETUP_BORDERLESS = MAKE_MENUENTRY ( " Borderless: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_VIDEOSETUP_BORDERLESS , Option ) ;
2015-12-23 04:05:21 +00:00
2017-02-05 20:58:33 +00:00
static char const * MEOSN_VIDEOSETUP_VSYNC [ ] = { " Adaptive " , " Off " , " On " , } ;
static int32_t MEOSV_VIDEOSETUP_VSYNC [ ] = { - 1 , 0 , 1 , } ;
2015-12-23 04:05:21 +00:00
static MenuOptionSet_t MEOS_VIDEOSETUP_VSYNC = MAKE_MENUOPTIONSET ( MEOSN_VIDEOSETUP_VSYNC , MEOSV_VIDEOSETUP_VSYNC , 0x2 ) ;
static MenuOption_t MEO_VIDEOSETUP_VSYNC = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_VIDEOSETUP_VSYNC , & newvsync ) ;
static MenuEntry_t ME_VIDEOSETUP_VSYNC = MAKE_MENUENTRY ( " VSync: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_VIDEOSETUP_VSYNC , Option ) ;
2019-09-08 01:01:30 +00:00
2019-10-23 15:07:29 +00:00
//static char const *MEOSN_VIDEOSETUP_FRAMELIMIT [] = { "None", "30 fps", "60 fps", "75 fps", "100 fps", "120 fps", "144 fps", "165 fps", "240 fps" };
2016-11-01 01:35:24 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_VIDEOSETUP_APPLY = MAKE_MENUENTRY ( " Apply Changes " , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_NULL , Link ) ;
2014-09-30 04:07:29 +00:00
2014-12-18 18:14:45 +00:00
static MenuLink_t MEO_DISPLAYSETUP_COLORCORR = { MENU_COLCORR , MA_Advance , } ;
2014-12-27 18:37:27 +00:00
static MenuEntry_t ME_DISPLAYSETUP_COLORCORR = MAKE_MENUENTRY ( " Color Correction " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_COLORCORR , Link ) ;
2016-10-09 00:15:14 +00:00
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
2014-09-30 04:07:29 +00:00
static MenuOption_t MEO_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & r_usenewaspect ) ;
2014-12-18 18:14:45 +00:00
static MenuEntry_t ME_DISPLAYSETUP_ASPECTRATIO = MAKE_MENUENTRY ( " Widescreen: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_ASPECTRATIO , Option ) ;
2016-03-14 00:06:54 +00:00
# endif
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_DISPLAYSETUP_VOXELS = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & r_voxels ) ;
2019-08-13 02:53:38 +00:00
static MenuEntry_t ME_DISPLAYSETUP_VOXELS = MAKE_MENUENTRY ( " Voxels: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_VOXELS , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_DISPLAYSETUP_FOV = MAKE_MENURANGE ( & r_fov , & MF_Redfont , 70 , 120 , 0 , 11 , 1 ) ;
2019-02-18 22:02:33 +00:00
static MenuEntry_t ME_DISPLAYSETUP_FOV = MAKE_MENUENTRY ( " FOV: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_FOV , RangeInt32 ) ;
2014-09-30 04:07:29 +00:00
# ifdef USE_OPENGL
2016-01-11 05:06:10 +00:00
static char const * MEOSN_DISPLAYSETUP_TEXFILTER [ ] = { " Classic " , " Filtered " } ;
2016-10-03 02:43:51 +00:00
static int32_t MEOSV_DISPLAYSETUP_TEXFILTER [ ] = { TEXFILTER_OFF , TEXFILTER_ON } ;
static MenuOptionSet_t MEOS_DISPLAYSETUP_TEXFILTER = MAKE_MENUOPTIONSET ( MEOSN_DISPLAYSETUP_TEXFILTER , MEOSV_DISPLAYSETUP_TEXFILTER , 0x2 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_DISPLAYSETUP_TEXFILTER = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_DISPLAYSETUP_TEXFILTER , & hw_texfilter ) ;
2014-12-18 18:14:45 +00:00
static MenuEntry_t ME_DISPLAYSETUP_TEXFILTER = MAKE_MENUENTRY ( " Texture Mode: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_TEXFILTER , Option ) ;
2014-09-30 04:07:29 +00:00
2017-06-19 23:06:21 +00:00
static char const * MEOSN_DISPLAYSETUP_ANISOTROPY [ ] = { " Max " , " None " , " 2x " , " 4x " , " 8x " , " 16x " , } ;
static int32_t MEOSV_DISPLAYSETUP_ANISOTROPY [ ] = { 0 , 1 , 2 , 4 , 8 , 16 , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_DISPLAYSETUP_ANISOTROPY = MAKE_MENUOPTIONSET ( MEOSN_DISPLAYSETUP_ANISOTROPY , MEOSV_DISPLAYSETUP_ANISOTROPY , 0x0 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_DISPLAYSETUP_ANISOTROPY = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_DISPLAYSETUP_ANISOTROPY , & hw_anisotropy ) ;
2014-12-18 18:14:45 +00:00
static MenuEntry_t ME_DISPLAYSETUP_ANISOTROPY = MAKE_MENUENTRY ( " Anisotropy: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_ANISOTROPY , Option ) ;
2015-02-11 05:22:32 +00:00
2014-09-30 04:07:29 +00:00
# endif
2017-11-29 07:29:57 +00:00
static char const s_Scale [ ] = " Scale: " ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_SCREENSETUP_CROSSHAIR = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & cl_crosshair ) ;
2017-06-27 01:50:55 +00:00
static MenuEntry_t ME_SCREENSETUP_CROSSHAIR = MAKE_MENUENTRY ( " Crosshair: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SCREENSETUP_CROSSHAIR , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENURANGE ( & cl_crosshairscale , & MF_Redfont , 25 , 100 , 0 , 16 , 2 ) ;
2017-11-29 07:29:57 +00:00
static MenuEntry_t ME_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENUENTRY ( s_Scale , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SCREENSETUP_CROSSHAIRSIZE , RangeInt32 ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SCREENSETUP_SCREENSIZE = MAKE_MENURANGE ( & hud_size , & MF_Redfont , 0 , 11 , 0 , 1 , EnforceIntervals ) ;
static MenuOption_t MEO_SCREENSETUP_SCREENSIZE_TWO = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & hud_size ) ;
2018-02-13 00:13:06 +00:00
static MenuEntry_t ME_SCREENSETUP_SCREENSIZE = MAKE_MENUENTRY ( " Status bar: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SCREENSETUP_SCREENSIZE , RangeInt32 ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SCREENSETUP_TEXTSIZE = MAKE_MENURANGE ( & hud_textscale , & MF_Redfont , 100 , 400 , 0 , 16 , 2 ) ;
2017-11-29 07:29:57 +00:00
static MenuEntry_t ME_SCREENSETUP_TEXTSIZE = MAKE_MENUENTRY ( s_Scale , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SCREENSETUP_TEXTSIZE , RangeInt32 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_SCREENSETUP_LEVELSTATS = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & hud_stats ) ;
2017-06-27 01:50:55 +00:00
static MenuEntry_t ME_SCREENSETUP_LEVELSTATS = MAKE_MENUENTRY ( " Level stats: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SCREENSETUP_LEVELSTATS , Option ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & hud_messages ) ;
2017-06-27 01:50:55 +00:00
static MenuEntry_t ME_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUENTRY ( " Game messages: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SCREENSETUP_SHOWPICKUPMESSAGES , Option ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SCREENSETUP_SBARSIZE = MAKE_MENURANGE ( & hud_scale , & MF_Redfont , 50 , 100 , 0 , 10 , 2 ) ;
2017-11-29 07:29:57 +00:00
static MenuEntry_t ME_SCREENSETUP_SBARSIZE = MAKE_MENUENTRY ( s_Scale , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SCREENSETUP_SBARSIZE , RangeInt32 ) ;
2014-09-30 04:07:29 +00:00
2014-10-27 10:14:50 +00:00
static MenuLink_t MEO_DISPLAYSETUP_SCREENSETUP = { MENU_SCREENSETUP , MA_Advance , } ;
2017-06-27 01:50:55 +00:00
static MenuEntry_t ME_DISPLAYSETUP_SCREENSETUP = MAKE_MENUENTRY ( " HUD setup " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_SCREENSETUP , Link ) ;
2014-09-30 04:07:29 +00:00
2014-12-18 18:14:45 +00:00
# ifdef USE_OPENGL
2015-10-24 00:30:35 +00:00
static MenuLink_t MEO_DISPLAYSETUP_ADVANCED_GL_POLYMOST = { MENU_POLYMOST , MA_Advance , } ;
static MenuEntry_t ME_DISPLAYSETUP_ADVANCED_GL_POLYMOST = MAKE_MENUENTRY ( " Polymost setup " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_ADVANCED_GL_POLYMOST , Link ) ;
2017-01-18 22:21:40 +00:00
# endif
2014-09-30 04:07:29 +00:00
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
2014-10-27 10:14:50 +00:00
static MenuLink_t MEO_DISPLAYSETUP_VIDEOSETUP = { MENU_VIDEOSETUP , MA_Advance , } ;
2014-12-27 18:37:27 +00:00
static MenuEntry_t ME_DISPLAYSETUP_VIDEOSETUP = MAKE_MENUENTRY ( " Video mode " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_DISPLAYSETUP_VIDEOSETUP , Link ) ;
2014-10-25 10:16:49 +00:00
# endif
2014-05-31 12:26:41 +00:00
2015-03-24 10:49:03 +00:00
} ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_OPTIONS [ ] = {
2017-07-31 01:34:54 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-05-31 12:26:41 +00:00
& ME_OPTIONS_GAMESETUP ,
2017-07-31 01:34:54 +00:00
# endif
2014-09-30 04:07:29 +00:00
& ME_OPTIONS_DISPLAYSETUP ,
2017-07-31 03:14:51 +00:00
& ME_OPTIONS_SOUNDSETUP ,
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
# ifndef EDUKE32_SIMPLE_MENU
2014-05-31 12:26:41 +00:00
& ME_OPTIONS_PLAYERSETUP ,
2017-01-18 22:21:40 +00:00
# endif
2014-09-30 04:07:29 +00:00
& ME_OPTIONS_CONTROLS ,
2015-02-11 05:22:32 +00:00
# else
2015-03-24 10:49:03 +00:00
& ME_OPTIONS_TOUCHSETUP ,
2015-02-11 05:22:32 +00:00
# endif
2017-07-31 01:34:54 +00:00
# ifdef EDUKE32_SIMPLE_MENU
2018-03-08 03:55:12 +00:00
& ME_GAMESETUP_SAVESETUP ,
2017-07-31 03:14:51 +00:00
& ME_OPTIONS_CHEATS
2017-07-31 01:34:54 +00:00
# endif
2014-09-30 04:07:29 +00:00
} ;
static MenuEntry_t * MEL_CONTROLS [ ] = {
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
2014-12-27 18:35:34 +00:00
& ME_OPTIONS_KEYBOARDSETUP ,
& ME_OPTIONS_MOUSESETUP ,
& ME_OPTIONS_JOYSTICKSETUP ,
2015-02-11 05:22:32 +00:00
# else
2019-08-13 09:15:49 +00:00
& ME_OPTIONS_TOUCHSETUP ,
2015-02-11 05:22:32 +00:00
# endif
2019-08-13 09:15:49 +00:00
& ME_Space6_Redfont ,
2019-08-12 15:36:36 +00:00
& ME_GAMESETUP_AIM_AUTO ,
2019-08-15 16:57:30 +00:00
& ME_GAMESETUP_ALWAYS_RUN ,
2019-08-16 00:20:45 +00:00
& ME_GAMESETUP_WEAPSWITCH_PICKUP ,
# ifdef EDUKE32_ANDROID_MENU
& ME_GAMESETUP_QUICKSWITCH ,
& ME_GAMESETUP_CROUCHLOCK ,
# endif
2014-05-31 12:26:41 +00:00
} ;
2012-06-03 16:11:22 +00:00
2015-03-24 10:49:03 +00:00
static MenuEntry_t * MEL_CHEATS [ ARRAY_SIZE ( ME_CheatCodes ) + 1 ] = {
& ME_ENTERCHEAT ,
} ;
2014-09-30 04:07:29 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_VIDEOSETUP [ ] = {
2014-05-31 12:26:41 +00:00
& ME_VIDEOSETUP_RESOLUTION ,
2014-12-18 18:14:45 +00:00
# ifdef USE_OPENGL
2014-05-31 12:26:41 +00:00
& ME_VIDEOSETUP_RENDERER ,
2014-12-18 18:14:45 +00:00
# endif
2014-05-31 12:26:41 +00:00
& ME_VIDEOSETUP_FULLSCREEN ,
2019-09-08 01:01:30 +00:00
& ME_VIDEOSETUP_BORDERLESS ,
2015-12-23 04:05:21 +00:00
& ME_VIDEOSETUP_VSYNC ,
2019-09-21 11:02:17 +00:00
& ME_Space4_Redfont ,
2014-05-31 12:26:41 +00:00
& ME_VIDEOSETUP_APPLY ,
} ;
2014-09-30 04:07:29 +00:00
static MenuEntry_t * MEL_DISPLAYSETUP [ ] = {
& ME_DISPLAYSETUP_SCREENSETUP ,
& ME_DISPLAYSETUP_COLORCORR ,
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
2014-12-27 18:35:34 +00:00
& ME_DISPLAYSETUP_VIDEOSETUP ,
& ME_DISPLAYSETUP_ASPECTRATIO ,
2019-08-13 02:53:38 +00:00
& ME_DISPLAYSETUP_VOXELS ,
2019-02-18 22:02:33 +00:00
& ME_DISPLAYSETUP_FOV ,
2016-03-14 00:06:54 +00:00
# endif
2014-05-31 12:26:41 +00:00
} ;
2014-09-30 04:07:29 +00:00
2014-05-31 12:26:41 +00:00
# ifdef USE_OPENGL
2014-09-30 04:07:29 +00:00
static MenuEntry_t * MEL_DISPLAYSETUP_GL [ ] = {
2014-12-27 18:35:34 +00:00
& ME_DISPLAYSETUP_SCREENSETUP ,
2014-09-30 04:07:29 +00:00
& ME_DISPLAYSETUP_COLORCORR ,
2014-12-27 18:35:34 +00:00
& ME_DISPLAYSETUP_VIDEOSETUP ,
& ME_DISPLAYSETUP_ASPECTRATIO ,
2019-08-13 02:53:38 +00:00
& ME_DISPLAYSETUP_VOXELS ,
2019-02-18 22:02:33 +00:00
& ME_DISPLAYSETUP_FOV ,
2014-12-27 18:35:34 +00:00
& ME_DISPLAYSETUP_TEXFILTER ,
& ME_DISPLAYSETUP_ANISOTROPY ,
2015-10-24 00:30:35 +00:00
& ME_DISPLAYSETUP_ADVANCED_GL_POLYMOST ,
2017-11-22 05:23:43 +00:00
# endif
2014-05-31 12:26:41 +00:00
} ;
2014-09-30 04:07:29 +00:00
2012-06-03 16:11:22 +00:00
2019-11-26 08:24:38 +00:00
static char const MenuKeyNone [ ] = " - " ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_Keys [ NUMKEYS ] ;
2012-06-03 16:11:22 +00:00
2019-11-03 19:58:10 +00:00
static MenuCustom2Col_t MEO_KEYBOARDSETUPFUNCS_TEMPLATE = { 0 , & MF_Minifont , NUMKEYS , 54 < < 16 , 0 } ;
2014-05-31 12:26:41 +00:00
static MenuCustom2Col_t MEO_KEYBOARDSETUPFUNCS [ NUMGAMEFUNCTIONS ] ;
2018-02-20 11:55:24 +00:00
static MenuEntry_t ME_KEYBOARDSETUPFUNCS_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Minifont , & MEF_KBFuncList , & MEO_KEYBOARDSETUPFUNCS_TEMPLATE , Custom2Col ) ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t ME_KEYBOARDSETUPFUNCS [ NUMGAMEFUNCTIONS ] ;
static MenuEntry_t * MEL_KEYBOARDSETUPFUNCS [ NUMGAMEFUNCTIONS ] ;
2012-06-03 16:11:22 +00:00
2014-12-18 18:14:45 +00:00
static MenuLink_t MEO_KEYBOARDSETUP_KEYS = { MENU_KEYBOARDKEYS , MA_Advance , } ;
2019-11-09 21:22:51 +00:00
static MenuEntry_t ME_KEYBOARDSETUP_KEYS = MAKE_MENUENTRY ( " Edit Configuration " , & MF_Redfont , & MEF_CenterMenu , & MEO_KEYBOARDSETUP_KEYS , Link ) ;
2019-08-13 09:16:02 +00:00
static MenuLink_t MEO_KEYBOARDSETUP_RESET = { MENU_KEYSRESETVERIFY , MA_None , } ;
static MenuEntry_t ME_KEYBOARDSETUP_RESET = MAKE_MENUENTRY ( " Reset To Defaults " , & MF_Redfont , & MEF_CenterMenu , & MEO_KEYBOARDSETUP_RESET , Link ) ;
static MenuLink_t MEO_KEYBOARDSETUP_RESETCLASSIC = { MENU_KEYSCLASSICVERIFY , MA_None , } ;
static MenuEntry_t ME_KEYBOARDSETUP_RESETCLASSIC = MAKE_MENUENTRY ( " Reset To Classic " , & MF_Redfont , & MEF_CenterMenu , & MEO_KEYBOARDSETUP_RESETCLASSIC , Link ) ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_KEYBOARDSETUP [ ] = {
& ME_KEYBOARDSETUP_KEYS ,
& ME_KEYBOARDSETUP_RESET ,
& ME_KEYBOARDSETUP_RESETCLASSIC ,
} ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
// There is no better way to do this than manually.
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
# define MENUMOUSEFUNCTIONS 12
2012-02-18 17:56:39 +00:00
2016-01-11 05:06:10 +00:00
static char const * MenuMouseNames [ MENUMOUSEFUNCTIONS ] = {
2014-05-31 12:26:41 +00:00
" Button 1 " ,
" Double Button 1 " ,
" Button 2 " ,
" Double Button 2 " ,
" Button 3 " ,
" Double Button 3 " ,
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
" Wheel Up " ,
" Wheel Down " ,
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
" Button 4 " ,
" Double Button 4 " ,
" Button 5 " ,
" Double Button 5 " ,
} ;
static int32_t MenuMouseDataIndex [ MENUMOUSEFUNCTIONS ] [ 2 ] = {
{ 0 , 0 , } ,
{ 0 , 1 , } ,
{ 1 , 0 , } ,
{ 1 , 1 , } ,
{ 2 , 0 , } ,
{ 2 , 1 , } ,
// note the mouse wheel
{ 4 , 0 , } ,
{ 5 , 0 , } ,
{ 3 , 0 , } ,
{ 3 , 1 , } ,
{ 6 , 0 , } ,
{ 6 , 1 , } ,
} ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
static MenuOption_t MEO_MOUSEJOYSETUPBTNS_TEMPLATE = MAKE_MENUOPTION ( & MF_Minifont , & MEOS_Gamefuncs , NULL ) ;
static MenuOption_t MEO_MOUSESETUPBTNS [ MENUMOUSEFUNCTIONS ] ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MOUSEJOYSETUPBTNS_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Minifont , & MEF_FuncList , NULL , Option ) ;
2014-05-31 12:26:41 +00:00
2019-11-09 18:15:03 +00:00
static MenuRangeFloat_t MEO_MOUSESETUP_SENSITIVITY = MAKE_MENURANGE ( & in_mousesensitivity , & MF_Redfont , .5f , 16.f , 0.f , 32 , 1 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MOUSESETUP_SENSITIVITY = MAKE_MENUENTRY ( " Sensitivity: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSESETUP_SENSITIVITY , RangeFloat ) ;
2017-01-18 22:23:36 +00:00
2017-07-31 01:34:54 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2017-02-05 20:58:33 +00:00
static char const * MEOSN_MOUSESETUP_AIM_TYPE [ ] = { " Toggle " , " Hold " } ;
2017-01-18 22:23:36 +00:00
static MenuOptionSet_t MEOS_MOUSESETUP_AIM_TYPE = MAKE_MENUOPTIONSET ( MEOSN_MOUSESETUP_AIM_TYPE , NULL , 0x2 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_MOUSESETUP_MOUSEAIMINGTYPE = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_MOUSESETUP_AIM_TYPE , & in_aimmode ) ;
2017-01-18 22:23:36 +00:00
static MenuEntry_t ME_MOUSESETUP_MOUSEAIMINGTYPE = MAKE_MENUENTRY ( " Aiming type: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSESETUP_MOUSEAIMINGTYPE , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_MOUSESETUP_MOUSEAIMING = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_NoYes , & in_mousemode ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MOUSESETUP_MOUSEAIMING = MAKE_MENUENTRY ( " Vertical aiming: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSESETUP_MOUSEAIMING , Option ) ;
2017-07-31 01:34:54 +00:00
# endif
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_MOUSESETUP_INVERT = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_YesNo , & in_mouseflip ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MOUSESETUP_INVERT = MAKE_MENUENTRY ( " Invert aiming: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSESETUP_INVERT , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_MOUSESETUP_SMOOTH = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_NoYes , & in_mousesmoothing ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MOUSESETUP_SMOOTH = MAKE_MENUENTRY ( " Filter input: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSESETUP_SMOOTH , Option ) ;
2017-07-31 01:34:54 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-12-18 18:14:45 +00:00
static MenuLink_t MEO_MOUSESETUP_ADVANCED = { MENU_MOUSEADVANCED , MA_Advance , } ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MOUSESETUP_ADVANCED = MAKE_MENUENTRY ( " Advanced setup " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSESETUP_ADVANCED , Link ) ;
2017-07-31 01:34:54 +00:00
# endif
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_MOUSEADVANCED_SCALEX = MAKE_MENURANGE ( & in_mousescalex , & MF_Redfont , - 262144 , 262144 , 65536 , 161 , 3 ) ;
2018-02-20 11:55:24 +00:00
static MenuEntry_t ME_MOUSEADVANCED_SCALEX = MAKE_MENUENTRY ( " X-Scale: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSEADVANCED_SCALEX , RangeInt32 ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_MOUSEADVANCED_SCALEY = MAKE_MENURANGE ( & in_mousescaley , & MF_Redfont , - 262144 , 262144 , 65536 , 161 , 3 ) ;
2018-02-20 11:55:24 +00:00
static MenuEntry_t ME_MOUSEADVANCED_SCALEY = MAKE_MENUENTRY ( " Y-Scale: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_MOUSEADVANCED_SCALEY , RangeInt32 ) ;
2014-05-31 12:26:41 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_MOUSESETUP [ ] = {
2017-07-31 01:34:54 +00:00
& ME_MOUSESETUP_SENSITIVITY ,
# ifdef EDUKE32_SIMPLE_MENU
& ME_MOUSEADVANCED_SCALEX ,
& ME_MOUSEADVANCED_SCALEY ,
# endif
2017-06-19 23:06:37 +00:00
& ME_Space2_Redfont ,
2014-12-27 18:35:34 +00:00
& ME_MOUSESETUP_INVERT ,
& ME_MOUSESETUP_SMOOTH ,
2017-07-31 01:34:54 +00:00
# ifndef EDUKE32_SIMPLE_MENU
& ME_MOUSESETUP_MOUSEAIMINGTYPE ,
& ME_MOUSESETUP_MOUSEAIMING ,
2014-12-27 18:35:34 +00:00
& ME_MOUSESETUP_ADVANCED ,
2017-07-31 01:34:54 +00:00
# endif
2014-05-31 12:26:41 +00:00
} ;
2006-04-13 20:47:06 +00:00
2017-01-18 22:21:40 +00:00
# ifdef EDUKE32_ANDROID_MENU
2015-02-21 23:15:27 +00:00
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_MOVE = MAKE_MENURANGE ( & droidinput . forward_sens , & MF_Redfont , 1.f , 9.f , 0.f , 17 , 1 + EnforceIntervals ) ;
2016-03-14 00:06:54 +00:00
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_MOVE = MAKE_MENUENTRY ( " Running: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_TOUCHSETUP_SENSITIVITY_MOVE , RangeFloat ) ;
2015-02-11 05:22:32 +00:00
2015-02-21 23:15:27 +00:00
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_STRAFE = MAKE_MENURANGE ( & droidinput . strafe_sens , & MF_Redfont , 1.f , 9.f , 0.f , 17 , 1 + EnforceIntervals ) ;
2016-03-14 00:06:54 +00:00
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_STRAFE = MAKE_MENUENTRY ( " Strafing: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_TOUCHSETUP_SENSITIVITY_STRAFE , RangeFloat ) ;
2015-02-11 05:22:32 +00:00
2015-02-21 23:15:27 +00:00
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_LOOK = MAKE_MENURANGE ( & droidinput . pitch_sens , & MF_Redfont , 1.f , 9.f , 0.f , 17 , 1 + EnforceIntervals ) ;
2016-03-14 00:06:54 +00:00
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_LOOK = MAKE_MENUENTRY ( " Looking: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_TOUCHSETUP_SENSITIVITY_LOOK , RangeFloat ) ;
2015-02-11 05:22:32 +00:00
2015-02-21 23:15:27 +00:00
static MenuRangeFloat_t MEO_TOUCHSETUP_SENSITIVITY_TURN = MAKE_MENURANGE ( & droidinput . yaw_sens , & MF_Redfont , 1.f , 9.f , 0.f , 17 , 1 + EnforceIntervals ) ;
2016-03-14 00:06:54 +00:00
static MenuEntry_t ME_TOUCHSETUP_SENSITIVITY_TURN = MAKE_MENUENTRY ( " Turning: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_TOUCHSETUP_SENSITIVITY_TURN , RangeFloat ) ;
2015-02-11 05:22:32 +00:00
static MenuOption_t MEO_TOUCHSETUP_INVERT = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_NoYes , & droidinput . invertLook ) ;
static MenuEntry_t ME_TOUCHSETUP_INVERT = MAKE_MENUENTRY ( " Invert look: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_TOUCHSETUP_INVERT , Option ) ;
2016-03-14 00:06:54 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Sensitivity " , MEF_CenterMenu , TOUCHSENS , MENU_TOUCHSENS ) ;
MAKE_MENU_TOP_ENTRYLINK ( " Button Setup " , MEF_CenterMenu , TOUCHBUTTONS , MENU_TOUCHBUTTONS ) ;
2017-02-05 20:58:33 +00:00
static MenuEntry_t * MEL_TOUCHSETUP [ ] = {
2016-03-14 00:06:54 +00:00
& ME_TOUCHSENS ,
& ME_TOUCHBUTTONS ,
} ;
2017-02-05 20:58:33 +00:00
static MenuEntry_t * MEL_TOUCHSENS [ ] = {
2015-02-11 05:22:32 +00:00
& ME_TOUCHSETUP_SENSITIVITY_MOVE ,
& ME_TOUCHSETUP_SENSITIVITY_STRAFE ,
& ME_TOUCHSETUP_SENSITIVITY_LOOK ,
& ME_TOUCHSETUP_SENSITIVITY_TURN ,
2017-06-19 23:06:37 +00:00
& ME_Space2_Redfont ,
2015-02-11 05:22:32 +00:00
& ME_TOUCHSETUP_INVERT ,
} ;
# endif
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_JOYSTICK_ENABLE = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & in_joystick ) ;
2019-08-14 03:03:41 +00:00
static MenuEntry_t ME_JOYSTICK_ENABLE = MAKE_MENUENTRY ( " Enable Gamepad: " , & MF_Redfont , & MEF_BigOptionsRtSections , & MEO_JOYSTICK_ENABLE , Option ) ;
2019-08-13 09:15:49 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Edit Buttons " , MEF_BigOptionsRtSections , JOYSTICK_EDITBUTTONS , MENU_JOYSTICKBTNS ) ;
MAKE_MENU_TOP_ENTRYLINK ( " Edit Axes " , MEF_BigOptionsRtSections , JOYSTICK_EDITAXES , MENU_JOYSTICKAXES ) ;
2019-08-13 09:16:02 +00:00
static MenuLink_t MEO_JOYSTICK_DEFAULTS_STANDARD = { MENU_JOYSTANDARDVERIFY , MA_None , } ;
static MenuEntry_t ME_JOYSTICK_DEFAULTS_STANDARD = MAKE_MENUENTRY ( " Use Standard Layout " , & MF_Redfont , & MEF_BigOptionsRtSections , & MEO_JOYSTICK_DEFAULTS_STANDARD , Link ) ;
static MenuLink_t MEO_JOYSTICK_DEFAULTS_PRO = { MENU_JOYPROVERIFY , MA_None , } ;
static MenuEntry_t ME_JOYSTICK_DEFAULTS_PRO = MAKE_MENUENTRY ( " Use Pro Layout " , & MF_Redfont , & MEF_BigOptionsRtSections , & MEO_JOYSTICK_DEFAULTS_PRO , Link ) ;
static MenuLink_t MEO_JOYSTICK_DEFAULTS_CLEAR = { MENU_JOYCLEARVERIFY , MA_None , } ;
static MenuEntry_t ME_JOYSTICK_DEFAULTS_CLEAR = MAKE_MENUENTRY ( " Clear All Settings " , & MF_Redfont , & MEF_BigOptionsRtSections , & MEO_JOYSTICK_DEFAULTS_CLEAR , Link ) ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_JOYSTICKSETUP [ ] = {
2019-08-14 03:03:41 +00:00
& ME_JOYSTICK_ENABLE ,
& ME_Space6_Redfont ,
2014-05-31 12:26:41 +00:00
& ME_JOYSTICK_EDITBUTTONS ,
& ME_JOYSTICK_EDITAXES ,
2019-08-13 09:15:49 +00:00
& ME_Space6_Redfont ,
& ME_JOYSTICK_DEFAULTS_STANDARD ,
& ME_JOYSTICK_DEFAULTS_PRO ,
& ME_JOYSTICK_DEFAULTS_CLEAR ,
2014-05-31 12:26:41 +00:00
} ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
# define MAXJOYBUTTONSTRINGLENGTH 32
2006-04-13 20:47:06 +00:00
2014-12-18 18:15:51 +00:00
static char MenuJoystickNames [ MAXJOYBUTTONSANDHATS * 2 ] [ MAXJOYBUTTONSTRINGLENGTH ] ;
2006-04-13 20:47:06 +00:00
2014-12-18 18:15:51 +00:00
static MenuOption_t MEO_JOYSTICKBTNS [ MAXJOYBUTTONSANDHATS * 2 ] ;
static MenuEntry_t ME_JOYSTICKBTNS [ MAXJOYBUTTONSANDHATS * 2 ] ;
static MenuEntry_t * MEL_JOYSTICKBTNS [ MAXJOYBUTTONSANDHATS * 2 ] ;
2006-04-13 20:47:06 +00:00
2014-10-27 10:14:50 +00:00
static MenuLink_t MEO_JOYSTICKAXES = { MENU_JOYSTICKAXIS , MA_Advance , } ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_JOYSTICKAXES_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Redfont , & MEF_BigSliders , & MEO_JOYSTICKAXES , Link ) ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t ME_JOYSTICKAXES [ MAXJOYAXES ] ;
static char MenuJoystickAxes [ MAXJOYAXES ] [ MAXJOYBUTTONSTRINGLENGTH ] ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_JOYSTICKAXES [ MAXJOYAXES ] ;
2006-04-13 20:47:06 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_MOUSEADVANCED [ ] = {
& ME_MOUSEADVANCED_SCALEX ,
& ME_MOUSEADVANCED_SCALEY ,
2014-05-31 12:26:41 +00:00
} ;
2006-04-21 05:11:57 +00:00
2014-05-31 12:26:41 +00:00
static const char * MenuJoystickHatDirections [ ] = { " Up " , " Right " , " Down " , " Left " , } ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_JOYSTICKAXIS_ANALOG [ ] = { " -None- " , " Turning " , " Strafing " , " Looking " , " Moving " , } ;
2014-05-31 12:26:41 +00:00
static int32_t MEOSV_JOYSTICKAXIS_ANALOG [ ] = { - 1 , analog_turning , analog_strafing , analog_lookingupanddown , analog_moving , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_JOYSTICKAXIS_ANALOG = MAKE_MENUOPTIONSET ( MEOSN_JOYSTICKAXIS_ANALOG , MEOSV_JOYSTICKAXIS_ANALOG , 0x0 ) ;
2014-05-31 12:26:41 +00:00
static MenuOption_t MEO_JOYSTICKAXIS_ANALOG = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_JOYSTICKAXIS_ANALOG , NULL ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_JOYSTICKAXIS_ANALOG = MAKE_MENUENTRY ( " Analog " , & MF_Redfont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_ANALOG , Option ) ;
2019-08-10 23:29:27 +00:00
static MenuRangeInt32_t MEO_JOYSTICKAXIS_SCALE = MAKE_MENURANGE ( NULL , & MF_Bluefont , - 262144 , 262144 , 65536 , 161 , 3 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_JOYSTICKAXIS_SCALE = MAKE_MENUENTRY ( " Scale " , & MF_Redfont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_SCALE , RangeInt32 ) ;
2019-08-14 03:03:57 +00:00
static MenuOption_t MEO_JOYSTICKAXIS_INVERT = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , NULL ) ;
static MenuEntry_t ME_JOYSTICKAXIS_INVERT = MAKE_MENUENTRY ( " Invert " , & MF_Redfont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_INVERT , Option ) ;
2019-08-10 23:29:27 +00:00
static MenuRangeInt32_t MEO_JOYSTICKAXIS_DEAD = MAKE_MENURANGE ( NULL , & MF_Bluefont , 0 , 10000 , 0 , 101 , 2 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_JOYSTICKAXIS_DEAD = MAKE_MENUENTRY ( " Dead Zone " , & MF_Redfont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_DEAD , RangeInt32 ) ;
2019-08-10 23:29:27 +00:00
static MenuRangeInt32_t MEO_JOYSTICKAXIS_SATU = MAKE_MENURANGE ( NULL , & MF_Bluefont , 0 , 10000 , 0 , 101 , 2 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_JOYSTICKAXIS_SATU = MAKE_MENUENTRY ( " Saturation " , & MF_Redfont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_SATU , RangeInt32 ) ;
2014-05-31 12:26:41 +00:00
static MenuOption_t MEO_JOYSTICKAXIS_DIGITALNEGATIVE = MAKE_MENUOPTION ( & MF_Minifont , & MEOS_Gamefuncs , NULL ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_JOYSTICKAXIS_DIGITALNEGATIVE = MAKE_MENUENTRY ( " Digital - " , & MF_Bluefont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_DIGITALNEGATIVE , Option ) ;
2014-05-31 12:26:41 +00:00
static MenuOption_t MEO_JOYSTICKAXIS_DIGITALPOSITIVE = MAKE_MENUOPTION ( & MF_Minifont , & MEOS_Gamefuncs , NULL ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_JOYSTICKAXIS_DIGITALPOSITIVE = MAKE_MENUENTRY ( " Digital + " , & MF_Bluefont , & MEF_BigSliders , & MEO_JOYSTICKAXIS_DIGITALPOSITIVE , Option ) ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_JOYSTICKAXIS [ ] = {
& ME_JOYSTICKAXIS_ANALOG ,
& ME_JOYSTICKAXIS_SCALE ,
2019-08-14 03:03:57 +00:00
& ME_JOYSTICKAXIS_INVERT ,
2014-05-31 12:26:41 +00:00
& ME_JOYSTICKAXIS_DEAD ,
& ME_JOYSTICKAXIS_SATU ,
2017-06-19 23:06:37 +00:00
& ME_Space8_Redfont ,
2014-11-30 02:04:36 +00:00
& ME_JOYSTICKAXIS_DIGITALNEGATIVE ,
& ME_JOYSTICKAXIS_DIGITALPOSITIVE ,
2014-05-31 12:26:41 +00:00
} ;
2006-04-13 20:47:06 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_INTERNAL_JOYSTICKAXIS_DIGITAL [ ] = {
2014-05-31 12:26:41 +00:00
& ME_JOYSTICKAXIS_DIGITALNEGATIVE ,
& ME_JOYSTICKAXIS_DIGITALPOSITIVE ,
} ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
# ifdef USE_OPENGL
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_RENDERERSETUP_HIGHTILE = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NoYes , & hw_hightile ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_RENDERERSETUP_HIGHTILE = MAKE_MENUENTRY ( " True color textures: " , & MF_Bluefont , & MEF_SmallOptions , & MEO_RENDERERSETUP_HIGHTILE , Option ) ;
2015-10-24 00:30:35 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_RENDERERSETUP_PRECACHE = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_OffOn , & r_precache ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_RENDERERSETUP_PRECACHE = MAKE_MENUENTRY ( " Pre-load map textures: " , & MF_Bluefont , & MEF_SmallOptions , & MEO_RENDERERSETUP_PRECACHE , Option ) ;
2016-01-08 01:33:20 +00:00
# ifndef EDUKE32_GLES
2016-01-11 05:06:10 +00:00
static char const * MEOSN_RENDERERSETUP_TEXCACHE [ ] = { " Off " , " On " , " Compr. " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_RENDERERSETUP_TEXCACHE = MAKE_MENUOPTIONSET ( MEOSN_RENDERERSETUP_TEXCACHE , NULL , 0x2 ) ;
2016-01-08 01:33:20 +00:00
# endif
# ifdef USE_GLEXT
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_RENDERERSETUP_DETAILTEX = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NoYes , & hw_detailmapping ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_RENDERERSETUP_DETAILTEX = MAKE_MENUENTRY ( " Detail textures: " , & MF_Bluefont , & MEF_SmallOptions , & MEO_RENDERERSETUP_DETAILTEX , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_RENDERERSETUP_GLOWTEX = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NoYes , & hw_glowmapping ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_RENDERERSETUP_GLOWTEX = MAKE_MENUENTRY ( " Glow textures: " , & MF_Bluefont , & MEF_SmallOptions , & MEO_RENDERERSETUP_GLOWTEX , Option ) ;
2016-01-08 01:33:20 +00:00
# endif
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_RENDERERSETUP_MODELS = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NoYes , & hw_models ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_RENDERERSETUP_MODELS = MAKE_MENUENTRY ( " 3D models: " , & MF_Bluefont , & MEF_SmallOptions , & MEO_RENDERERSETUP_MODELS , Option ) ;
2014-05-31 12:26:41 +00:00
# endif
2015-10-24 00:30:35 +00:00
2010-08-02 08:13:51 +00:00
2014-05-31 12:26:41 +00:00
# ifdef USE_OPENGL
2015-10-24 00:30:35 +00:00
static MenuEntry_t * MEL_RENDERERSETUP_POLYMOST [ ] = {
2014-05-31 12:26:41 +00:00
& ME_RENDERERSETUP_HIGHTILE ,
& ME_RENDERERSETUP_PRECACHE ,
2016-01-08 01:33:20 +00:00
# ifdef USE_GLEXT
2014-05-31 12:26:41 +00:00
& ME_RENDERERSETUP_DETAILTEX ,
2015-10-24 00:30:35 +00:00
& ME_RENDERERSETUP_GLOWTEX ,
2016-01-08 01:33:20 +00:00
# endif
2017-06-19 23:06:37 +00:00
& ME_Space4_Bluefont ,
2014-05-31 12:26:41 +00:00
& ME_RENDERERSETUP_MODELS ,
2015-10-24 00:30:35 +00:00
} ;
# endif
2006-04-13 20:47:06 +00:00
2019-11-09 18:15:03 +00:00
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE ( & vid_gamma , & MF_Bluefont , 0.3f , 4.f , 0.f , 75 , 1 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_COLCORR_GAMMA = MAKE_MENUENTRY ( " Gamma: " , & MF_Redfont , & MEF_ColorCorrect , & MEO_COLCORR_GAMMA , RangeFloat ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeFloat_t MEO_COLCORR_CONTRAST = MAKE_MENURANGE ( & vid_contrast , & MF_Bluefont , 0.1f , 2.7f , 0.f , 53 , 1 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_COLCORR_CONTRAST = MAKE_MENUENTRY ( " Contrast: " , & MF_Redfont , & MEF_ColorCorrect , & MEO_COLCORR_CONTRAST , RangeFloat ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeFloat_t MEO_COLCORR_BRIGHTNESS = MAKE_MENURANGE ( & vid_brightness , & MF_Bluefont , - 0.8f , 0.8f , 0.f , 33 , 1 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_COLCORR_BRIGHTNESS = MAKE_MENUENTRY ( " Brightness: " , & MF_Redfont , & MEF_ColorCorrect , & MEO_COLCORR_BRIGHTNESS , RangeFloat ) ;
2019-08-13 09:16:02 +00:00
static MenuLink_t MEO_COLCORR_RESET = { MENU_COLCORRRESETVERIFY , MA_None , } ;
static MenuEntry_t ME_COLCORR_RESET = MAKE_MENUENTRY ( " Reset To Defaults " , & MF_Redfont , & MEF_ColorCorrect , & MEO_COLCORR_RESET , Link ) ;
2017-01-18 22:21:40 +00:00
# ifdef EDUKE32_ANDROID_MENU
2015-02-11 05:22:32 +00:00
# define MINVIS 1.f
# else
# define MINVIS 0.125f
# endif
2017-07-07 22:50:42 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2019-11-09 18:15:03 +00:00
static MenuRangeFloat_t MEO_COLCORR_AMBIENT = MAKE_MENURANGE ( & r_ambientlight , & MF_Bluefont , MINVIS , 4.f , 0.f , 32 , 1 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_COLCORR_AMBIENT = MAKE_MENUENTRY ( " Visibility: " , & MF_Redfont , & MEF_ColorCorrect , & MEO_COLCORR_AMBIENT , RangeFloat ) ;
2017-07-07 22:50:42 +00:00
# endif
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_COLCORR [ ] = {
& ME_COLCORR_GAMMA ,
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_ANDROID_MENU
2014-05-31 12:26:41 +00:00
& ME_COLCORR_CONTRAST ,
& ME_COLCORR_BRIGHTNESS ,
2014-09-30 04:07:29 +00:00
# endif
2017-07-07 22:50:42 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-12-27 18:35:34 +00:00
& ME_COLCORR_AMBIENT ,
2017-07-07 22:50:42 +00:00
# endif
2017-06-19 23:06:37 +00:00
& ME_Space8_Redfont ,
2014-05-31 12:26:41 +00:00
& ME_COLCORR_RESET ,
} ;
2012-10-14 22:16:07 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_SCREENSETUP [ ] = {
2018-01-26 04:34:57 +00:00
# ifdef EDUKE32_ANDROID_MENU
& ME_SCREENSETUP_STATUSBARONTOP ,
# endif
2018-02-13 00:13:06 +00:00
& ME_SCREENSETUP_SCREENSIZE ,
2014-12-27 18:35:34 +00:00
& ME_SCREENSETUP_SBARSIZE ,
2014-09-30 04:07:29 +00:00
2014-12-27 18:35:34 +00:00
& ME_SCREENSETUP_CROSSHAIR ,
& ME_SCREENSETUP_CROSSHAIRSIZE ,
2014-09-30 04:07:29 +00:00
2014-12-27 18:35:34 +00:00
& ME_SCREENSETUP_LEVELSTATS ,
& ME_SCREENSETUP_TEXTSIZE ,
2014-09-30 04:07:29 +00:00
2014-12-27 18:35:34 +00:00
& ME_SCREENSETUP_SHOWPICKUPMESSAGES ,
2014-09-30 04:07:29 +00:00
} ;
2014-05-31 12:26:41 +00:00
// Save and load will be filled in before every viewing of the save/load screen.
2017-07-06 14:43:07 +00:00
static MenuLink_t MEO_LOAD = { MENU_LOADVERIFY , MA_None , } ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_LOAD_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Minifont , & MEF_LoadSave , & MEO_LOAD , Link ) ;
static MenuEntry_t ME_LOAD_EMPTY = MAKE_MENUENTRY ( NULL , & MF_Minifont , & MEF_LoadSave , nullptr , Dummy ) ;
2017-12-18 11:24:53 +00:00
static MenuEntry_t * ME_LOAD ;
static MenuEntry_t * * MEL_LOAD ;
2014-05-31 12:26:41 +00:00
2017-12-18 11:24:53 +00:00
static char const s_NewSaveGame [ ] = " (New Save Game) " ;
2018-01-29 02:14:16 +00:00
static MenuString_t MEO_SAVE_TEMPLATE = MAKE_MENUSTRING ( NULL , & MF_Minifont , MAXSAVEGAMENAME , 0 ) ;
static MenuString_t MEO_SAVE_NEW = MAKE_MENUSTRING ( NULL , & MF_Minifont , MAXSAVEGAMENAME , 0 ) ;
2017-12-18 11:24:53 +00:00
static MenuString_t * MEO_SAVE ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_SAVE_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Minifont , & MEF_LoadSave , & MEO_SAVE_TEMPLATE , String ) ;
static MenuEntry_t ME_SAVE_NEW = MAKE_MENUENTRY ( s_NewSaveGame , & MF_Minifont , & MEF_LoadSave , & MEO_SAVE_NEW , String ) ;
2017-12-18 11:24:53 +00:00
static MenuEntry_t * ME_SAVE ;
static MenuEntry_t * * MEL_SAVE ;
2014-05-31 12:26:41 +00:00
2019-11-09 18:15:03 +00:00
CVAR_UNAMED ( Int , soundrate )
CVAR_UNAMED ( Int , soundvoices )
CVAR_UNAMED ( Int , musicdevice )
static MenuOption_t MEO_SOUND = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & snd_enabled ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_SOUND = MAKE_MENUENTRY ( " Sound: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND , Option ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_SOUND_MUSIC = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & mus_enabled ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_SOUND_MUSIC = MAKE_MENUENTRY ( " Music: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND_MUSIC , Option ) ;
2014-09-30 04:07:29 +00:00
2019-08-15 04:39:35 +00:00
static char const s_Volume [ ] = " Volume: " ;
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SOUND_VOLUME_FX = MAKE_MENURANGE ( & snd_fxvolume , & MF_Redfont , 0 , 255 , 0 , 33 , 2 ) ;
2019-08-15 04:39:35 +00:00
static MenuEntry_t ME_SOUND_VOLUME_FX = MAKE_MENUENTRY ( s_Volume , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SOUND_VOLUME_FX , RangeInt32 ) ;
2014-09-30 04:07:29 +00:00
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SOUND_VOLUME_MUSIC = MAKE_MENURANGE ( & mus_volume , & MF_Redfont , 0 , 255 , 0 , 33 , 2 ) ;
2019-08-15 04:39:35 +00:00
static MenuEntry_t ME_SOUND_VOLUME_MUSIC = MAKE_MENUENTRY ( s_Volume , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SOUND_VOLUME_MUSIC , RangeInt32 ) ;
2014-09-30 04:07:29 +00:00
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_STANDALONE
2019-03-19 17:08:00 +00:00
static MenuOption_t MEO_SOUND_DUKETALK = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_NoYes , NULL ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_SOUND_DUKETALK = MAKE_MENUENTRY ( " Duke talk: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND_DUKETALK , Option ) ;
2017-01-18 22:21:40 +00:00
# else
2019-03-19 17:08:00 +00:00
static MenuOption_t MEO_SOUND_DUKETALK = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_YesNo , NULL ) ;
static MenuEntry_t ME_SOUND_DUKETALK = MAKE_MENUENTRY ( " Silent protagonist: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND_DUKETALK , Option ) ;
2017-01-18 22:21:40 +00:00
# endif
2014-09-30 04:07:29 +00:00
2016-01-11 05:06:10 +00:00
static char const * MEOSN_SOUND_SAMPLINGRATE [ ] = { " 22050Hz " , " 44100Hz " , " 48000Hz " , } ;
2014-09-30 04:07:29 +00:00
static int32_t MEOSV_SOUND_SAMPLINGRATE [ ] = { 22050 , 44100 , 48000 , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_SOUND_SAMPLINGRATE = MAKE_MENUOPTIONSET ( MEOSN_SOUND_SAMPLINGRATE , MEOSV_SOUND_SAMPLINGRATE , 0x3 ) ;
static MenuOption_t MEO_SOUND_SAMPLINGRATE = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_SOUND_SAMPLINGRATE , & soundrate ) ;
static MenuEntry_t ME_SOUND_SAMPLINGRATE = MAKE_MENUENTRY ( " Sample rate: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND_SAMPLINGRATE , Option ) ;
2014-09-30 04:07:29 +00:00
2017-07-27 20:05:48 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2019-10-20 03:13:19 +00:00
static MenuRangeInt32_t MEO_SOUND_NUMVOICES = MAKE_MENURANGE ( & soundvoices , & MF_Redfont , 16 , 128 , 0 , 8 , 1 ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_SOUND_NUMVOICES = MAKE_MENUENTRY ( " Voices: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND_NUMVOICES , RangeInt32 ) ;
2017-07-27 09:13:09 +00:00
# endif
2014-09-30 04:07:29 +00:00
2019-10-24 05:47:11 +00:00
static char const * MEOSN_SOUND_MIDIDRIVER [ ] = {
2019-10-19 23:48:20 +00:00
" OPL3 " ,
2019-10-19 23:48:08 +00:00
# ifdef _WIN32
" Windows " ,
# endif
} ;
2019-10-24 05:47:11 +00:00
static int32_t MEOSV_SOUND_MIDIDRIVER [ ] = {
2019-10-19 23:48:20 +00:00
ASS_OPL3 ,
2019-10-19 23:48:08 +00:00
# ifdef _WIN32
ASS_WinMM ,
# endif
} ;
2019-10-24 05:47:11 +00:00
static MenuOptionSet_t MEOS_SOUND_MIDIDRIVER = MAKE_MENUOPTIONSET ( MEOSN_SOUND_MIDIDRIVER , MEOSV_SOUND_MIDIDRIVER , 0x2 ) ;
static MenuOption_t MEO_SOUND_MIDIDRIVER = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_SOUND_MIDIDRIVER , & musicdevice ) ;
static MenuEntry_t ME_SOUND_MIDIDRIVER = MAKE_MENUENTRY ( " MIDI driver: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SOUND_MIDIDRIVER , Option ) ;
2019-10-19 23:48:08 +00:00
2017-07-27 09:13:09 +00:00
static MenuEntry_t ME_SOUND_RESTART = MAKE_MENUENTRY ( " Apply Changes " , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_NULL , Link ) ;
2014-09-30 04:07:29 +00:00
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-10-27 10:14:50 +00:00
static MenuLink_t MEO_ADVSOUND = { MENU_ADVSOUND , MA_Advance , } ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_SOUND_ADVSOUND = MAKE_MENUENTRY ( " Advanced " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_ADVSOUND , Link ) ;
2014-10-16 22:21:00 +00:00
# endif
2014-05-31 12:26:41 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_SOUND [ ] = {
2014-05-31 12:26:41 +00:00
& ME_SOUND ,
2018-10-25 23:32:50 +00:00
& ME_SOUND_VOLUME_FX ,
2019-08-15 04:39:35 +00:00
& ME_SOUND_MUSIC ,
2014-12-27 18:35:34 +00:00
& ME_SOUND_VOLUME_MUSIC ,
2014-05-31 12:26:41 +00:00
& ME_SOUND_DUKETALK ,
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-12-27 18:35:34 +00:00
& ME_SOUND_ADVSOUND ,
2014-09-30 04:07:29 +00:00
# endif
2014-05-31 12:26:41 +00:00
} ;
2012-10-14 22:16:07 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_ADVSOUND [ ] = {
2014-12-27 18:35:34 +00:00
& ME_SOUND_SAMPLINGRATE ,
2017-06-19 23:06:37 +00:00
& ME_Space2_Redfont ,
2017-07-27 20:05:48 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-12-27 18:35:34 +00:00
& ME_SOUND_NUMVOICES ,
2017-06-19 23:06:37 +00:00
& ME_Space2_Redfont ,
2017-07-27 09:13:09 +00:00
# endif
2019-10-24 05:47:11 +00:00
& ME_SOUND_MIDIDRIVER ,
2014-12-27 18:35:34 +00:00
& ME_SOUND_RESTART ,
2014-05-31 12:26:41 +00:00
} ;
2006-04-13 20:47:06 +00:00
2018-03-08 03:55:12 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_SAVESETUP_AUTOSAVE = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_OffOn , & cl_autosave ) ;
2019-07-13 21:26:02 +00:00
static MenuEntry_t ME_SAVESETUP_AUTOSAVE = MAKE_MENUENTRY ( " Checkpoints: " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_SAVESETUP_AUTOSAVE , Option ) ;
2018-03-08 03:55:12 +00:00
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_SAVESETUP_AUTOSAVEDELETION = MAKE_MENUOPTION ( & MF_Redfont , & MEOS_NoYes , & cl_autosavedeletion ) ;
2018-03-08 03:55:36 +00:00
static MenuEntry_t ME_SAVESETUP_AUTOSAVEDELETION = MAKE_MENUENTRY ( " Auto-Delete: " , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SAVESETUP_AUTOSAVEDELETION , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuRangeInt32_t MEO_SAVESETUP_MAXAUTOSAVES = MAKE_MENURANGE ( & cl_maxautosaves , & MF_Redfont , 1 , 10 , 0 , 10 , 1 ) ;
2018-03-08 03:55:36 +00:00
static MenuEntry_t ME_SAVESETUP_MAXAUTOSAVES = MAKE_MENUENTRY ( " Limit: " , & MF_Redfont , & MEF_BigOptions_Apply , & MEO_SAVESETUP_MAXAUTOSAVES , RangeInt32 ) ;
2018-03-08 03:55:41 +00:00
static MenuEntry_t ME_SAVESETUP_CLEANUP = MAKE_MENUENTRY ( " Clean Up Saves " , & MF_Redfont , & MEF_BigOptionsRt , & MEO_NULL , Link ) ;
2018-03-08 03:55:12 +00:00
static MenuEntry_t * MEL_SAVESETUP [ ] = {
& ME_SAVESETUP_AUTOSAVE ,
2018-03-08 03:55:36 +00:00
& ME_SAVESETUP_AUTOSAVEDELETION ,
& ME_SAVESETUP_MAXAUTOSAVES ,
2018-03-08 03:55:41 +00:00
& ME_SAVESETUP_CLEANUP ,
2018-03-08 03:55:12 +00:00
} ;
2014-11-30 02:04:36 +00:00
MAKE_MENU_TOP_ENTRYLINK ( " Player Setup " , MEF_CenterMenu , NETWORK_PLAYERSETUP , MENU_PLAYER ) ;
MAKE_MENU_TOP_ENTRYLINK ( " Join Game " , MEF_CenterMenu , NETWORK_JOINGAME , MENU_NETJOIN ) ;
MAKE_MENU_TOP_ENTRYLINK ( " Host Game " , MEF_CenterMenu , NETWORK_HOSTGAME , MENU_NETHOST ) ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_NETWORK [ ] = {
& ME_NETWORK_PLAYERSETUP ,
& ME_NETWORK_JOINGAME ,
& ME_NETWORK_HOSTGAME ,
} ;
2006-04-13 20:47:06 +00:00
2019-10-27 13:09:56 +00:00
//static MenuString_t MEO_PLAYER_NAME = MAKE_MENUSTRING( playername, &MF_Bluefont, MAXPLAYERNAME, 0 );
//static MenuEntry_t ME_PLAYER_NAME = MAKE_MENUENTRY( "Name", &MF_Bluefont, &MEF_PlayerNarrow, &MEO_PLAYER_NAME, String );
2016-01-11 05:06:10 +00:00
static char const * MEOSN_PLAYER_COLOR [ ] = { " Auto " , " Blue " , " Red " , " Green " , " Gray " , " Dark gray " , " Dark green " , " Brown " , " Dark blue " , " Bright red " , " Yellow " , } ;
2014-12-18 18:14:27 +00:00
static int32_t MEOSV_PLAYER_COLOR [ ] = { 0 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 21 , 23 , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_PLAYER_COLOR = MAKE_MENUOPTIONSET ( MEOSN_PLAYER_COLOR , MEOSV_PLAYER_COLOR , 0x2 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_PLAYER_COLOR = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_PLAYER_COLOR , & playercolor ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_PLAYER_COLOR = MAKE_MENUENTRY ( " Color " , & MF_Bluefont , & MEF_PlayerNarrow , & MEO_PLAYER_COLOR , Option ) ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_PLAYER_TEAM [ ] = { " Blue " , " Red " , " Green " , " Gray " , } ;
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_PLAYER_TEAM = MAKE_MENUOPTIONSET ( MEOSN_PLAYER_TEAM , NULL , 0x2 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_PLAYER_TEAM = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_PLAYER_TEAM , & playerteam ) ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_PLAYER_TEAM = MAKE_MENUENTRY ( " Team " , & MF_Bluefont , & MEF_PlayerNarrow , & MEO_PLAYER_TEAM , Option ) ;
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-10-27 10:14:50 +00:00
static MenuLink_t MEO_PLAYER_MACROS = { MENU_MACROS , MA_Advance , } ;
2018-01-29 02:14:16 +00:00
static MenuEntry_t ME_PLAYER_MACROS = MAKE_MENUENTRY ( " Multiplayer macros " , & MF_Bluefont , & MEF_SmallOptions , & MEO_PLAYER_MACROS , Link ) ;
2014-10-25 10:16:49 +00:00
# endif
2014-05-31 12:26:41 +00:00
2014-11-30 02:04:36 +00:00
static MenuEntry_t * MEL_PLAYER [ ] = {
2019-10-27 13:09:56 +00:00
//&ME_PLAYER_NAME,
2017-06-19 23:06:37 +00:00
& ME_Space4_Bluefont ,
2014-05-31 12:26:41 +00:00
& ME_PLAYER_COLOR ,
2017-06-19 23:06:37 +00:00
& ME_Space4_Bluefont ,
2014-05-31 12:26:41 +00:00
& ME_PLAYER_TEAM ,
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2017-06-19 23:06:37 +00:00
& ME_Space8_Bluefont ,
2014-05-31 12:26:41 +00:00
& ME_PLAYER_MACROS ,
2014-10-25 10:16:49 +00:00
# endif
2014-11-30 02:04:36 +00:00
} ;
2006-04-13 20:47:06 +00:00
2019-10-27 07:14:58 +00:00
# define MAXRIDECULE 10
# define MAXRIDECULELENGTH 40
2014-11-30 02:04:36 +00:00
static MenuString_t MEO_MACROS_TEMPLATE = MAKE_MENUSTRING ( NULL , & MF_Bluefont , MAXRIDECULELENGTH , 0 ) ;
2017-12-18 11:24:53 +00:00
static MenuString_t MEO_MACROS [ 10 ] ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_MACROS_TEMPLATE = MAKE_MENUENTRY ( NULL , & MF_Bluefont , & MEF_Macros , & MEO_MACROS_TEMPLATE , String ) ;
2019-10-27 07:14:58 +00:00
static char sink [ 50 ] ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t ME_MACROS [ MAXRIDECULE ] ;
static MenuEntry_t * MEL_MACROS [ MAXRIDECULE ] ;
2006-04-13 20:47:06 +00:00
2017-08-04 23:06:37 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2016-01-11 05:06:10 +00:00
static char const * MenuUserMap = " User Map " ;
2017-08-04 23:06:37 +00:00
# endif
2016-01-11 05:06:10 +00:00
static char const * MenuSkillNone = " None " ;
2006-04-18 19:23:53 +00:00
2016-01-11 05:06:10 +00:00
static char const * MEOSN_NetGametypes [ MAXGAMETYPES ] ;
static char const * MEOSN_NetEpisodes [ MAXVOLUMES + 1 ] ;
2015-02-22 22:15:20 +00:00
static int32_t MEOSV_NetEpisodes [ MAXVOLUMES + 1 ] ;
2016-01-11 05:06:10 +00:00
static char const * MEOSN_NetLevels [ MAXVOLUMES ] [ MAXLEVELS ] ;
static char const * MEOSN_NetSkills [ MAXSKILLS + 1 ] ;
2006-04-18 19:23:53 +00:00
2014-12-18 18:14:45 +00:00
static MenuLink_t MEO_NETHOST_OPTIONS = { MENU_NETOPTIONS , MA_Advance , } ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETHOST_OPTIONS = MAKE_MENUENTRY ( " Game Options " , & MF_Redfont , & MEF_VideoSetup , & MEO_NETHOST_OPTIONS , Link ) ;
static MenuEntry_t ME_NETHOST_LAUNCH = MAKE_MENUENTRY ( " Launch Game " , & MF_Redfont , & MEF_VideoSetup , & MEO_NULL , Link ) ;
2011-12-21 18:41:38 +00:00
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_NETHOST [ ] = {
& ME_NETHOST_OPTIONS ,
& ME_NETHOST_LAUNCH ,
} ;
2011-12-21 18:41:38 +00:00
2014-11-30 02:04:36 +00:00
static MenuOptionSet_t MEOS_NETOPTIONS_GAMETYPE = MAKE_MENUOPTIONSET ( MEOSN_NetGametypes , NULL , 0x0 ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_NETOPTIONS_GAMETYPE = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NETOPTIONS_GAMETYPE , & m_coop ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_GAMETYPE = MAKE_MENUENTRY ( " Game Type " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_GAMETYPE , Option ) ;
2015-02-22 22:15:20 +00:00
static MenuOptionSet_t MEOS_NETOPTIONS_EPISODE = MAKE_MENUOPTIONSET ( MEOSN_NetEpisodes , MEOSV_NetEpisodes , 0x0 ) ;
2019-11-09 18:15:03 +00:00
CVAR_UNAMED ( Int , NetEpisode ) ;
2015-02-22 22:15:20 +00:00
static MenuOption_t MEO_NETOPTIONS_EPISODE = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NETOPTIONS_EPISODE , & NetEpisode ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_EPISODE = MAKE_MENUENTRY ( " Episode " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_EPISODE , Option ) ;
2015-02-22 22:15:35 +00:00
static MenuOptionSet_t MEOS_NETOPTIONS_LEVEL_TEMPLATE = MAKE_MENUOPTIONSETNULL ;
2014-05-31 12:26:41 +00:00
static MenuOptionSet_t MEOS_NETOPTIONS_LEVEL [ MAXVOLUMES ] ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_NETOPTIONS_LEVEL = MAKE_MENUOPTION ( & MF_Bluefont , NULL , & m_level_number ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_LEVEL = MAKE_MENUENTRY ( " Level " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_LEVEL , Option ) ;
2014-12-18 18:14:45 +00:00
static MenuLink_t MEO_NETOPTIONS_USERMAP = { MENU_NETUSERMAP , MA_Advance , } ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_USERMAP = MAKE_MENUENTRY ( " User Map " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_USERMAP , Link ) ;
static MenuOptionSet_t MEOS_NETOPTIONS_MONSTERS = MAKE_MENUOPTIONSET ( MEOSN_NetSkills , NULL , 0x0 ) ;
2014-05-31 12:26:41 +00:00
static MenuOption_t MEO_NETOPTIONS_MONSTERS = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_NETOPTIONS_MONSTERS , NULL ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_MONSTERS = MAKE_MENUENTRY ( " Monsters " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_MONSTERS , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_NETOPTIONS_MARKERS = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_OffOn , & m_marker ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_MARKERS = MAKE_MENUENTRY ( " Markers " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_MARKERS , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_NETOPTIONS_MAPEXITS = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_OnOff , & m_noexits ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_MAPEXITS = MAKE_MENUENTRY ( " Map Exits " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_MAPEXITS , Option ) ;
2019-11-09 18:15:03 +00:00
static MenuOption_t MEO_NETOPTIONS_FRFIRE = MAKE_MENUOPTION ( & MF_Bluefont , & MEOS_OffOn , & m_ffire ) ;
2014-11-30 02:04:36 +00:00
static MenuEntry_t ME_NETOPTIONS_FRFIRE = MAKE_MENUENTRY ( " Fr. Fire " , & MF_Redfont , & MEF_NetSetup , & MEO_NETOPTIONS_FRFIRE , Option ) ;
2018-12-08 00:40:39 +00:00
static MenuEntry_t ME_NETOPTIONS_ACCEPT = MAKE_MENUENTRY ( " Accept " , & MF_Redfont , & MEF_NetSetup_Confirm , & MEO_NETWORK_HOSTGAME , Link ) ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_NETOPTIONS [ ] = {
& ME_NETOPTIONS_GAMETYPE ,
& ME_NETOPTIONS_EPISODE ,
& ME_NETOPTIONS_LEVEL ,
& ME_NETOPTIONS_MONSTERS ,
& ME_NETOPTIONS_MARKERS ,
& ME_NETOPTIONS_MAPEXITS ,
& ME_NETOPTIONS_ACCEPT ,
} ;
2011-12-21 18:41:38 +00:00
2014-05-31 12:26:41 +00:00
static char MenuServer [ BMAX_PATH ] = " localhost " ;
2014-11-30 02:04:36 +00:00
static MenuString_t MEO_NETJOIN_SERVER = MAKE_MENUSTRING ( MenuServer , & MF_Bluefont , BMAX_PATH , 0 ) ;
static MenuEntry_t ME_NETJOIN_SERVER = MAKE_MENUENTRY ( " Server " , & MF_Redfont , & MEF_VideoSetup , & MEO_NETJOIN_SERVER , String ) ;
2014-05-31 12:26:41 +00:00
# define MAXPORTSTRINGLENGTH 6 // unsigned 16-bit integer
static char MenuPort [ MAXPORTSTRINGLENGTH ] = " 19014 " ;
2014-11-30 02:04:36 +00:00
static MenuString_t MEO_NETJOIN_PORT = MAKE_MENUSTRING ( MenuPort , & MF_Bluefont , MAXPORTSTRINGLENGTH , INPUT_NUMERIC ) ;
static MenuEntry_t ME_NETJOIN_PORT = MAKE_MENUENTRY ( " Port " , & MF_Redfont , & MEF_VideoSetup , & MEO_NETJOIN_PORT , String ) ;
2017-06-19 23:07:12 +00:00
static MenuEntry_t ME_NETJOIN_CONNECT = MAKE_MENUENTRY ( " Connect " , & MF_Redfont , & MEF_VideoSetup_Apply , & MEO_NULL , Link ) ;
2014-05-31 12:26:41 +00:00
static MenuEntry_t * MEL_NETJOIN [ ] = {
& ME_NETJOIN_SERVER ,
& ME_NETJOIN_PORT ,
& ME_NETJOIN_CONNECT ,
} ;
2012-10-14 22:16:07 +00:00
2014-05-31 12:26:41 +00:00
# define NoTitle NULL
2016-04-06 03:07:47 +00:00
# define MAKE_MENUMENU(Title, Format, Entries) { Title, Format, Entries, ARRAY_SIZE(Entries), 0, 0, 0 }
2017-12-18 11:24:53 +00:00
# define MAKE_MENUMENU_CUSTOMSIZE(Title, Format, Entries) { Title, Format, Entries, 0, 0, 0, 0 }
2014-11-30 02:04:36 +00:00
2017-07-31 03:14:51 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_GAMESETUP = MAKE_MENUMENU ( " Game Setup " , & MMF_BigOptions , MEL_GAMESETUP ) ;
2017-07-31 03:14:51 +00:00
# endif
2017-07-06 14:43:07 +00:00
static MenuMenu_t M_OPTIONS = MAKE_MENUMENU ( s_Options , & MMF_Top_Options , MEL_OPTIONS ) ;
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_VIDEOSETUP = MAKE_MENUMENU ( " Video Mode " , & MMF_BigOptions , MEL_VIDEOSETUP ) ;
2019-11-09 21:22:51 +00:00
static MenuMenu_t M_KEYBOARDSETUP = MAKE_MENUMENU ( " Configure Controls " , & MMF_Top_Options , MEL_KEYBOARDSETUP ) ;
2019-08-12 15:36:36 +00:00
static MenuMenu_t M_CONTROLS = MAKE_MENUMENU ( " Control Setup " , & MMF_BigOptions , MEL_CONTROLS ) ;
2015-03-24 10:49:03 +00:00
static MenuMenu_t M_CHEATS = MAKE_MENUMENU ( " Cheats " , & MMF_SmallOptions , MEL_CHEATS ) ;
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_MOUSESETUP = MAKE_MENUMENU ( " Mouse Setup " , & MMF_BigOptions , MEL_MOUSESETUP ) ;
2019-08-13 10:25:35 +00:00
static MenuMenu_t M_JOYSTICKSETUP = MAKE_MENUMENU ( " Gamepad Setup " , & MMF_BigOptions , MEL_JOYSTICKSETUP ) ;
static MenuMenu_t M_JOYSTICKAXES = MAKE_MENUMENU ( " Gamepad Axes " , & MMF_BigSliders , MEL_JOYSTICKAXES ) ;
2017-07-05 05:42:29 +00:00
static MenuMenu_t M_KEYBOARDKEYS = MAKE_MENUMENU ( " Key Configuration " , & MMF_KeyboardSetupFuncs , MEL_KEYBOARDSETUPFUNCS ) ;
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_MOUSEADVANCED = MAKE_MENUMENU ( " Advanced Mouse " , & MMF_BigSliders , MEL_MOUSEADVANCED ) ;
static MenuMenu_t M_JOYSTICKAXIS = MAKE_MENUMENU ( NULL , & MMF_BigSliders , MEL_JOYSTICKAXIS ) ;
2014-09-30 04:07:29 +00:00
# ifdef USE_OPENGL
2015-10-24 00:30:35 +00:00
static MenuMenu_t M_RENDERERSETUP_POLYMOST = MAKE_MENUMENU ( " Polymost Setup " , & MMF_SmallOptions , MEL_RENDERERSETUP_POLYMOST ) ;
2014-09-30 04:07:29 +00:00
# endif
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_COLCORR = MAKE_MENUMENU ( " Color Correction " , & MMF_ColorCorrect , MEL_COLCORR ) ;
2017-06-27 01:50:55 +00:00
static MenuMenu_t M_SCREENSETUP = MAKE_MENUMENU ( " HUD Setup " , & MMF_BigOptions , MEL_SCREENSETUP ) ;
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_DISPLAYSETUP = MAKE_MENUMENU ( " Display Setup " , & MMF_BigOptions , MEL_DISPLAYSETUP ) ;
2017-12-18 11:24:53 +00:00
static MenuMenu_t M_LOAD = MAKE_MENUMENU_CUSTOMSIZE ( s_LoadGame , & MMF_LoadSave , MEL_LOAD ) ;
static MenuMenu_t M_SAVE = MAKE_MENUMENU_CUSTOMSIZE ( s_SaveGame , & MMF_LoadSave , MEL_SAVE ) ;
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_SOUND = MAKE_MENUMENU ( " Sound Setup " , & MMF_BigOptions , MEL_SOUND ) ;
2014-12-18 18:14:45 +00:00
static MenuMenu_t M_ADVSOUND = MAKE_MENUMENU ( " Advanced Sound " , & MMF_BigOptions , MEL_ADVSOUND ) ;
2018-03-08 03:55:12 +00:00
static MenuMenu_t M_SAVESETUP = MAKE_MENUMENU ( " Save Setup " , & MMF_BigOptions , MEL_SAVESETUP ) ;
2014-11-30 02:04:36 +00:00
static MenuMenu_t M_NETWORK = MAKE_MENUMENU ( " Network Game " , & MMF_Top_Joystick_Network , MEL_NETWORK ) ;
static MenuMenu_t M_PLAYER = MAKE_MENUMENU ( " Player Setup " , & MMF_SmallOptions , MEL_PLAYER ) ;
static MenuMenu_t M_MACROS = MAKE_MENUMENU ( " Multiplayer Macros " , & MMF_Macros , MEL_MACROS ) ;
static MenuMenu_t M_NETHOST = MAKE_MENUMENU ( " Host Network Game " , & MMF_SmallOptionsNarrow , MEL_NETHOST ) ;
static MenuMenu_t M_NETOPTIONS = MAKE_MENUMENU ( " Net Game Options " , & MMF_NetSetup , MEL_NETOPTIONS ) ;
static MenuMenu_t M_NETJOIN = MAKE_MENUMENU ( " Join Network Game " , & MMF_SmallOptionsNarrow , MEL_NETJOIN ) ;
2014-05-31 12:26:41 +00:00
2017-01-18 22:21:40 +00:00
static MenuPanel_t M_CREDITS4 = { " About " APPNAME , MENU_CREDITS3 , MA_Return , MENU_CREDITS5 , MA_Advance , } ;
static MenuPanel_t M_CREDITS5 = { " About " APPNAME , MENU_CREDITS4 , MA_Return , MENU_CREDITS , MA_Advance , } ;
2014-05-31 12:26:41 +00:00
2014-10-27 07:09:41 +00:00
# define CURSOR_CENTER_2LINE { MENU_MARGIN_CENTER<<16, 120<<16, }
# define CURSOR_CENTER_3LINE { MENU_MARGIN_CENTER<<16, 129<<16, }
2014-05-31 12:26:41 +00:00
# define CURSOR_BOTTOMRIGHT { 304<<16, 186<<16, }
2018-03-09 02:51:28 +00:00
static MenuVerify_t M_SAVECLEANVERIFY = { CURSOR_CENTER_3LINE , MENU_SAVESETUP , MA_None , } ;
2014-10-27 10:14:50 +00:00
static MenuVerify_t M_QUIT = { CURSOR_CENTER_2LINE , MENU_CLOSE , MA_None , } ;
static MenuVerify_t M_QUITTOTITLE = { CURSOR_CENTER_2LINE , MENU_CLOSE , MA_None , } ;
static MenuVerify_t M_LOADVERIFY = { CURSOR_CENTER_3LINE , MENU_CLOSE , MA_None , } ;
2018-03-09 02:51:28 +00:00
static MenuVerify_t M_LOADDELVERIFY = { CURSOR_CENTER_3LINE , MENU_LOAD , MA_None , } ;
2014-10-27 10:14:50 +00:00
static MenuVerify_t M_NEWVERIFY = { CURSOR_CENTER_2LINE , MENU_EPISODE , MA_Advance , } ;
static MenuVerify_t M_SAVEVERIFY = { CURSOR_CENTER_2LINE , MENU_SAVE , MA_None , } ;
2018-03-08 03:55:45 +00:00
static MenuVerify_t M_SAVEDELVERIFY = { CURSOR_CENTER_3LINE , MENU_SAVE , MA_None , } ;
2014-10-27 10:14:50 +00:00
static MenuVerify_t M_RESETPLAYER = { CURSOR_CENTER_3LINE , MENU_CLOSE , MA_None , } ;
2014-05-31 12:26:41 +00:00
2019-08-13 09:16:02 +00:00
static MenuVerify_t M_COLCORRRESETVERIFY = { CURSOR_CENTER_2LINE , MENU_COLCORR , MA_None , } ;
static MenuVerify_t M_KEYSRESETVERIFY = { CURSOR_CENTER_2LINE , MENU_KEYBOARDSETUP , MA_None , } ;
static MenuVerify_t M_KEYSCLASSICVERIFY = { CURSOR_CENTER_2LINE , MENU_KEYBOARDSETUP , MA_None , } ;
static MenuVerify_t M_JOYSTANDARDVERIFY = { CURSOR_CENTER_2LINE , MENU_JOYSTICKSETUP , MA_None , } ;
static MenuVerify_t M_JOYPROVERIFY = { CURSOR_CENTER_2LINE , MENU_JOYSTICKSETUP , MA_None , } ;
static MenuVerify_t M_JOYCLEARVERIFY = { CURSOR_CENTER_2LINE , MENU_JOYSTICKSETUP , MA_None , } ;
2014-10-27 10:14:50 +00:00
static MenuMessage_t M_NETWAITMASTER = { CURSOR_BOTTOMRIGHT , MENU_NULL , MA_None , } ;
static MenuMessage_t M_NETWAITVOTES = { CURSOR_BOTTOMRIGHT , MENU_NULL , MA_None , } ;
static MenuMessage_t M_BUYDUKE = { CURSOR_BOTTOMRIGHT , MENU_EPISODE , MA_Return , } ;
2014-05-31 12:26:41 +00:00
2015-03-24 10:48:34 +00:00
static MenuTextForm_t M_ADULTPASSWORD = { NULL , " Enter Password: " , MAXPWLOCKOUT , MTF_Password } ;
2015-03-24 10:49:03 +00:00
static MenuTextForm_t M_CHEATENTRY = { NULL , " Enter Cheat Code: " , MAXCHEATLEN , 0 } ;
static MenuTextForm_t M_CHEAT_WARP = { NULL , " Enter Warp #: " , 3 , 0 } ;
static MenuTextForm_t M_CHEAT_SKILL = { NULL , " Enter Skill #: " , 1 , 0 } ;
2014-05-31 12:26:41 +00:00
2019-11-02 00:30:21 +00:00
//#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 }
2014-05-31 12:26:41 +00:00
2019-11-02 00:30:21 +00:00
//static MenuFileSelect_t M_USERMAP = MAKE_MENUFILESELECT( "Select A User Map", "./usermaps/", "*.map", boardfilename );
2014-05-31 12:26:41 +00:00
// MUST be in ascending order of MenuID enum values due to binary search
static Menu_t Menus [ ] = {
2017-07-31 03:14:51 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-11-30 02:04:36 +00:00
{ & M_GAMESETUP , MENU_GAMESETUP , MENU_OPTIONS , MA_Return , Menu } ,
2017-07-31 03:14:51 +00:00
# endif
2014-11-30 02:04:36 +00:00
{ & M_OPTIONS , MENU_OPTIONS , MENU_MAIN , MA_Return , Menu } ,
{ & M_VIDEOSETUP , MENU_VIDEOSETUP , MENU_DISPLAYSETUP , MA_Return , Menu } ,
{ & M_KEYBOARDSETUP , MENU_KEYBOARDSETUP , MENU_CONTROLS , MA_Return , Menu } ,
{ & M_MOUSESETUP , MENU_MOUSESETUP , MENU_CONTROLS , MA_Return , Menu } ,
{ & M_JOYSTICKSETUP , MENU_JOYSTICKSETUP , MENU_CONTROLS , MA_Return , Menu } ,
{ & M_JOYSTICKAXES , MENU_JOYSTICKAXES , MENU_JOYSTICKSETUP , MA_Return , Menu } ,
{ & M_KEYBOARDKEYS , MENU_KEYBOARDKEYS , MENU_KEYBOARDSETUP , MA_Return , Menu } ,
{ & M_MOUSEADVANCED , MENU_MOUSEADVANCED , MENU_MOUSESETUP , MA_Return , Menu } ,
{ & M_JOYSTICKAXIS , MENU_JOYSTICKAXIS , MENU_JOYSTICKAXES , MA_Return , Menu } ,
{ & M_CONTROLS , MENU_CONTROLS , MENU_OPTIONS , MA_Return , Menu } ,
2014-09-30 04:07:29 +00:00
# ifdef USE_OPENGL
2015-10-24 00:30:35 +00:00
{ & M_RENDERERSETUP_POLYMOST , MENU_POLYMOST , MENU_DISPLAYSETUP , MA_Return , Menu } ,
2014-09-30 04:07:29 +00:00
# endif
2014-11-30 02:04:36 +00:00
{ & M_COLCORR , MENU_COLCORR , MENU_DISPLAYSETUP , MA_Return , Menu } ,
{ & M_COLCORR , MENU_COLCORR_INGAME , MENU_CLOSE , MA_Return , Menu } ,
{ & M_SCREENSETUP , MENU_SCREENSETUP , MENU_DISPLAYSETUP , MA_Return , Menu } ,
{ & M_DISPLAYSETUP , MENU_DISPLAYSETUP , MENU_OPTIONS , MA_Return , Menu } ,
2015-10-24 00:30:35 +00:00
# ifdef POLYMER
2015-11-14 19:54:27 +00:00
{ & M_RENDERERSETUP_POLYMER , MENU_POLYMER , MENU_DISPLAYSETUP , MA_Return , Menu } ,
2015-10-24 00:30:35 +00:00
# endif
2014-11-30 02:04:36 +00:00
{ & M_LOAD , MENU_LOAD , MENU_MAIN , MA_Return , Menu } ,
{ & M_SAVE , MENU_SAVE , MENU_MAIN , MA_Return , Menu } ,
{ & M_STORY , MENU_STORY , MENU_MAIN , MA_Return , Panel } ,
{ & M_F1HELP , MENU_F1HELP , MENU_MAIN , MA_Return , Panel } ,
{ & M_QUIT , MENU_QUIT , MENU_PREVIOUS , MA_Return , Verify } ,
{ & M_QUITTOTITLE , MENU_QUITTOTITLE , MENU_PREVIOUS , MA_Return , Verify } ,
{ & M_QUIT , MENU_QUIT_INGAME , MENU_CLOSE , MA_None , Verify } ,
{ & M_NETHOST , MENU_NETSETUP , MENU_MAIN , MA_Return , Menu } ,
{ & M_NETWAITMASTER , MENU_NETWAITMASTER , MENU_MAIN , MA_Return , Message } ,
{ & M_NETWAITVOTES , MENU_NETWAITVOTES , MENU_MAIN , MA_Return , Message } ,
{ & M_SOUND , MENU_SOUND , MENU_OPTIONS , MA_Return , Menu } ,
{ & M_SOUND , MENU_SOUND_INGAME , MENU_CLOSE , MA_Return , Menu } ,
{ & M_ADVSOUND , MENU_ADVSOUND , MENU_SOUND , MA_Return , Menu } ,
2018-03-08 03:55:12 +00:00
{ & M_SAVESETUP , MENU_SAVESETUP , MENU_OPTIONS , MA_Return , Menu } ,
2018-03-08 03:55:45 +00:00
{ & M_SAVECLEANVERIFY , MENU_SAVECLEANVERIFY , MENU_SAVESETUP , MA_None , Verify } ,
2017-07-31 01:34:54 +00:00
# ifdef EDUKE32_SIMPLE_MENU
{ & M_CHEATS , MENU_CHEATS , MENU_OPTIONS , MA_Return , Menu } ,
# else
2016-01-08 01:32:47 +00:00
{ & M_CHEATS , MENU_CHEATS , MENU_GAMESETUP , MA_Return , Menu } ,
2017-07-31 01:34:54 +00:00
# endif
2015-03-24 10:49:03 +00:00
{ & M_CHEATENTRY , MENU_CHEATENTRY , MENU_CHEATS , MA_None , TextForm } ,
{ & M_CHEAT_WARP , MENU_CHEAT_WARP , MENU_CHEATS , MA_None , TextForm } ,
{ & M_CHEAT_SKILL , MENU_CHEAT_SKILL , MENU_CHEATS , MA_None , TextForm } ,
2014-11-30 02:04:36 +00:00
{ & M_CREDITS , MENU_CREDITS , MENU_MAIN , MA_Return , Panel } ,
{ & M_CREDITS2 , MENU_CREDITS2 , MENU_MAIN , MA_Return , Panel } ,
{ & M_CREDITS3 , MENU_CREDITS3 , MENU_MAIN , MA_Return , Panel } ,
{ & M_CREDITS4 , MENU_CREDITS4 , MENU_MAIN , MA_Return , Panel } ,
{ & M_CREDITS5 , MENU_CREDITS5 , MENU_MAIN , MA_Return , Panel } ,
{ & M_LOADVERIFY , MENU_LOADVERIFY , MENU_LOAD , MA_None , Verify } ,
2018-03-08 03:55:45 +00:00
{ & M_LOADDELVERIFY , MENU_LOADDELVERIFY , MENU_LOAD , MA_None , Verify } ,
{ & M_NEWVERIFY , MENU_NEWVERIFY , MENU_PREVIOUS , MA_Return , Verify } ,
2014-11-30 02:04:36 +00:00
{ & M_SAVEVERIFY , MENU_SAVEVERIFY , MENU_SAVE , MA_None , Verify } ,
2018-03-08 03:55:45 +00:00
{ & M_SAVEDELVERIFY , MENU_SAVEDELVERIFY , MENU_SAVE , MA_None , Verify } ,
2019-08-13 09:16:02 +00:00
{ & M_COLCORRRESETVERIFY , MENU_COLCORRRESETVERIFY , MENU_COLCORR , MA_None , Verify } ,
{ & M_KEYSRESETVERIFY , MENU_KEYSRESETVERIFY , MENU_KEYBOARDSETUP , MA_None , Verify } ,
{ & M_KEYSCLASSICVERIFY , MENU_KEYSCLASSICVERIFY , MENU_KEYBOARDSETUP , MA_None , Verify } ,
{ & M_JOYSTANDARDVERIFY , MENU_JOYSTANDARDVERIFY , MENU_JOYSTICKSETUP , MA_None , Verify } ,
{ & M_JOYPROVERIFY , MENU_JOYPROVERIFY , MENU_JOYSTICKSETUP , MA_None , Verify } ,
{ & M_JOYCLEARVERIFY , MENU_JOYCLEARVERIFY , MENU_JOYSTICKSETUP , MA_None , Verify } ,
2015-03-24 10:48:34 +00:00
{ & M_ADULTPASSWORD , MENU_ADULTPASSWORD , MENU_GAMESETUP , MA_None , TextForm } ,
2014-11-30 02:04:36 +00:00
{ & M_RESETPLAYER , MENU_RESETPLAYER , MENU_CLOSE , MA_None , Verify } ,
{ & M_BUYDUKE , MENU_BUYDUKE , MENU_EPISODE , MA_Return , Message } ,
{ & M_NETWORK , MENU_NETWORK , MENU_MAIN , MA_Return , Menu } ,
{ & M_PLAYER , MENU_PLAYER , MENU_OPTIONS , MA_Return , Menu } ,
{ & M_MACROS , MENU_MACROS , MENU_PLAYER , MA_Return , Menu } ,
{ & M_NETHOST , MENU_NETHOST , MENU_NETWORK , MA_Return , Menu } ,
{ & M_NETOPTIONS , MENU_NETOPTIONS , MENU_NETWORK , MA_Return , Menu } ,
2019-11-02 00:30:21 +00:00
// { &M_USERMAP, MENU_NETUSERMAP, MENU_NETOPTIONS, MA_Return, FileSelect },
2014-11-30 02:04:36 +00:00
{ & M_NETJOIN , MENU_NETJOIN , MENU_NETWORK , MA_Return , Menu } ,
2014-05-31 12:26:41 +00:00
} ;
2019-08-09 08:21:19 +00:00
2014-05-31 12:26:41 +00:00
/*
This function prepares data after ART and CON have been processed .
It also initializes some data in loops rather than statically at compile time .
*/
2016-11-01 01:35:32 +00:00
void Menu_Init ( void )
2014-05-31 12:26:41 +00:00
{
int32_t i , j , k ;
2012-10-14 22:16:07 +00:00
2019-08-15 06:51:56 +00:00
if ( FURY )
{
MMF_Top_Skill . pos . x = ( 320 < < 15 ) ;
ME_SKILL_TEMPLATE . format = & MEF_LeftMenu ;
}
2014-05-31 12:26:41 +00:00
+ + k ;
MEOS_NETOPTIONS_GAMETYPE . numOptions = k ;
2015-11-25 12:08:31 +00:00
if ( NAM_WW2GI )
ME_NETOPTIONS_MONSTERS . name = " Enemies " ;
2014-05-31 12:26:41 +00:00
2018-02-20 11:55:07 +00:00
// prepare cheats
for ( i = 0 ; i < NUMCHEATFUNCS ; + + i )
MEL_CHEATS [ i + 1 ] = & ME_CheatCodes [ i ] ;
2019-11-28 00:49:50 +00:00
2006-04-13 20:47:06 +00:00
2015-11-25 12:08:31 +00:00
// prepare sound setup
2017-06-27 01:50:55 +00:00
# ifndef EDUKE32_STANDALONE
2015-11-25 12:08:31 +00:00
if ( WW2GI )
ME_SOUND_DUKETALK . name = " GI talk: " ;
else if ( NAM )
ME_SOUND_DUKETALK . name = " Grunt talk: " ;
2017-06-27 01:50:55 +00:00
# endif
2015-11-25 12:08:31 +00:00
2014-05-31 12:26:41 +00:00
// prepare shareware
if ( VOLUMEONE )
{
// blue out episodes beyond the first
2016-08-27 01:42:01 +00:00
for ( i = 1 ; i < g_volumeCnt ; + + i )
2014-05-31 12:26:41 +00:00
{
if ( MEL_EPISODE [ i ] )
{
ME_EPISODE [ i ] . entry = & MEO_EPISODE_SHAREWARE ;
2017-06-19 23:07:09 +00:00
ME_EPISODE [ i ] . flags | = MEF_LookDisabled ;
2014-05-31 12:26:41 +00:00
}
}
2016-08-27 01:42:01 +00:00
M_EPISODE . numEntries = g_volumeCnt ; // remove User Map (and spacer)
2014-05-31 12:26:41 +00:00
MEOS_NETOPTIONS_EPISODE . numOptions = 1 ;
2014-12-27 18:37:12 +00:00
MenuEntry_DisableOnCondition ( & ME_NETOPTIONS_EPISODE , 1 ) ;
2006-04-20 09:03:44 +00:00
}
2007-01-26 00:28:44 +00:00
2014-05-31 12:26:41 +00:00
// prepare pre-Atomic
if ( ! VOLUMEALL | | ! PLUTOPAK )
2006-04-13 20:47:06 +00:00
{
2014-05-31 12:26:41 +00:00
// prepare credits
2017-07-06 14:43:07 +00:00
M_CREDITS . title = M_CREDITS2 . title = M_CREDITS3 . title = s_Credits ;
2014-05-31 12:26:41 +00:00
}
2018-01-29 02:14:09 +00:00
2018-02-20 11:55:07 +00:00
MenuEntry_HideOnCondition ( & ME_MAIN_HELP , G_GetLogoFlags ( ) & LOGO_NOHELP ) ;
2018-01-29 02:14:09 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2018-02-20 11:55:07 +00:00
MenuEntry_HideOnCondition ( & ME_MAIN_CREDITS , G_GetLogoFlags ( ) & LOGO_NOCREDITS ) ;
2018-01-29 02:14:09 +00:00
# endif
2014-05-31 12:26:41 +00:00
}
2012-03-26 05:07:12 +00:00
2006-11-16 03:02:42 +00:00
2016-11-01 01:35:32 +00:00
static void Menu_Pre ( MenuID_t cm )
2014-05-31 12:26:41 +00:00
{
int32_t i ;
2019-07-08 00:41:25 +00:00
auto ps = g_player [ myconnectindex ] . ps ;
2006-11-16 03:02:42 +00:00
2014-05-31 12:26:41 +00:00
switch ( cm )
{
2006-11-16 03:02:42 +00:00
2014-05-31 12:26:41 +00:00
case MENU_GAMESETUP :
MEO_GAMESETUP_DEMOREC . options = ( ps - > gm & MODE_GAME ) ? & MEOS_DemoRec : & MEOS_OffOn ;
2019-11-09 18:15:03 +00:00
MenuEntry_DisableOnCondition ( & ME_GAMESETUP_DEMOREC , ( ps - > gm & MODE_GAME ) & & m_recstat ! = 1 ) ;
2014-05-31 12:26:41 +00:00
break ;
2007-01-26 00:28:44 +00:00
2014-12-27 18:35:34 +00:00
case MENU_DISPLAYSETUP :
2019-08-13 02:53:38 +00:00
MenuEntry_HideOnCondition ( & ME_DISPLAYSETUP_VOXELS , ! g_haveVoxels ) ;
# ifdef USE_OPENGL
2018-04-12 21:03:12 +00:00
if ( videoGetRenderMode ( ) = = REND_CLASSIC )
2014-11-30 02:04:36 +00:00
MenuMenu_ChangeEntryList ( M_DISPLAYSETUP , MEL_DISPLAYSETUP ) ;
2014-05-31 12:26:41 +00:00
else
2014-11-30 02:04:36 +00:00
MenuMenu_ChangeEntryList ( M_DISPLAYSETUP , MEL_DISPLAYSETUP_GL ) ;
2007-01-26 00:28:44 +00:00
2018-01-26 04:34:51 +00:00
MEO_SCREENSETUP_SCREENSIZE . steps = ! ( ud . statusbarflags & STATUSBAR_NONONE ) +
! ( ud . statusbarflags & STATUSBAR_NOMODERN ) +
2019-10-22 21:31:46 +00:00
! ( ud . statusbarflags & STATUSBAR_NOMINI ) +
2018-01-26 04:34:51 +00:00
! ( ud . statusbarflags & STATUSBAR_NOOVERLAY ) +
! ( ud . statusbarflags & STATUSBAR_NOFULL ) +
! ( ud . statusbarflags & STATUSBAR_NOSHRINK ) * 14 ;
2018-02-13 00:13:06 +00:00
MEO_SCREENSETUP_SCREENSIZE . max = MEO_SCREENSETUP_SCREENSIZE . steps - 1 ;
2019-08-14 03:03:47 +00:00
if ( MEO_SCREENSETUP_SCREENSIZE . steps < = 2 & & ! ( ud . statusbarflags & STATUSBAR_NONONE ) )
{
ME_SCREENSETUP_SCREENSIZE . entry = & MEO_SCREENSETUP_SCREENSIZE_TWO ;
ME_SCREENSETUP_SCREENSIZE . type = Option ;
}
else
{
ME_SCREENSETUP_SCREENSIZE . entry = & MEO_SCREENSETUP_SCREENSIZE ;
ME_SCREENSETUP_SCREENSIZE . type = RangeInt32 ;
}
MenuEntry_HideOnCondition ( & ME_SCREENSETUP_SCREENSIZE , ( MEO_SCREENSETUP_SCREENSIZE . steps < 2 ) ) ;
2018-01-26 04:34:51 +00:00
2014-12-27 18:35:34 +00:00
break ;
2006-04-13 20:47:06 +00:00
2015-10-24 00:30:35 +00:00
case MENU_POLYMER :
case MENU_POLYMOST :
2019-10-23 19:11:37 +00:00
MenuEntry_DisableOnCondition ( & ME_RENDERERSETUP_PRECACHE , ! hw_hightile ) ;
MenuEntry_DisableOnCondition ( & ME_RENDERERSETUP_DETAILTEX , ! hw_hightile ) ;
MenuEntry_DisableOnCondition ( & ME_RENDERERSETUP_GLOWTEX , ! hw_hightile ) ;
2014-05-31 12:26:41 +00:00
# endif
2019-08-13 02:53:38 +00:00
break ;
2007-02-05 01:33:08 +00:00
2014-05-31 12:26:41 +00:00
case MENU_VIDEOSETUP :
2014-12-26 17:29:53 +00:00
{
2019-08-29 20:06:31 +00:00
Bmemset ( resolution , 0 , sizeof ( resolution ) ) ;
MEOS_VIDEOSETUP_RESOLUTION . numOptions = 0 ;
// prepare video setup
for ( int i = 0 ; i < validmodecnt ; + + i )
{
int j ;
for ( j = 0 ; j < MEOS_VIDEOSETUP_RESOLUTION . numOptions ; + + j )
{
if ( validmode [ i ] . xdim = = resolution [ j ] . xdim & & validmode [ i ] . ydim = = resolution [ j ] . ydim )
{
resolution [ j ] . flags | = validmode [ i ] . fs ? RES_FS : RES_WIN ;
Bsnprintf ( resolution [ j ] . name , MAXRESOLUTIONSTRINGLENGTH , " %d x %d%s " , resolution [ j ] . xdim , resolution [ j ] . ydim , ( resolution [ j ] . flags & RES_FS ) ? " " : " Win " ) ;
MEOSN_VIDEOSETUP_RESOLUTION [ j ] = resolution [ j ] . name ;
if ( validmode [ i ] . bpp > resolution [ j ] . bppmax )
resolution [ j ] . bppmax = validmode [ i ] . bpp ;
break ;
}
}
if ( j = = MEOS_VIDEOSETUP_RESOLUTION . numOptions ) // no match found
{
resolution [ j ] . xdim = validmode [ i ] . xdim ;
resolution [ j ] . ydim = validmode [ i ] . ydim ;
resolution [ j ] . bppmax = validmode [ i ] . bpp ;
resolution [ j ] . flags = validmode [ i ] . fs ? RES_FS : RES_WIN ;
Bsnprintf ( resolution [ j ] . name , MAXRESOLUTIONSTRINGLENGTH , " %d x %d%s " , resolution [ j ] . xdim , resolution [ j ] . ydim , ( resolution [ j ] . flags & RES_FS ) ? " " : " Win " ) ;
MEOSN_VIDEOSETUP_RESOLUTION [ j ] = resolution [ j ] . name ;
+ + MEOS_VIDEOSETUP_RESOLUTION . numOptions ;
}
}
2014-12-26 17:29:53 +00:00
const int32_t nr = newresolution ;
2018-02-26 02:48:09 +00:00
// don't allow setting fullscreen mode if it's not supported by the resolution
MenuEntry_DisableOnCondition ( & ME_VIDEOSETUP_FULLSCREEN , ! ( resolution [ nr ] . flags & RES_FS ) ) ;
2014-12-27 18:37:12 +00:00
MenuEntry_DisableOnCondition ( & ME_VIDEOSETUP_APPLY ,
2018-07-14 21:36:44 +00:00
( xres = = resolution [ nr ] . xdim & & yres = = resolution [ nr ] . ydim & &
2018-04-12 21:03:12 +00:00
videoGetRenderMode ( ) = = newrendermode & & fullscreen = = newfullscreen
2019-10-23 19:11:37 +00:00
& & vid_vsync = = newvsync & & r_borderless = = newborderless
2016-01-08 01:32:41 +00:00
)
2014-12-26 17:29:53 +00:00
| | ( newrendermode ! = REND_CLASSIC & & resolution [ nr ] . bppmax < = 8 ) ) ;
2019-09-08 01:01:30 +00:00
MenuEntry_DisableOnCondition ( & ME_VIDEOSETUP_BORDERLESS , newfullscreen ) ;
2014-05-31 12:26:41 +00:00
break ;
2014-12-26 17:29:53 +00:00
}
2006-11-16 03:02:42 +00:00
2014-05-31 12:26:41 +00:00
case MENU_SOUND :
2014-10-25 03:34:38 +00:00
case MENU_SOUND_INGAME :
2014-12-27 18:35:34 +00:00
case MENU_ADVSOUND :
2019-10-22 00:01:05 +00:00
MenuEntry_DisableOnCondition ( & ME_SOUND_VOLUME_FX , ! snd_enabled ) ;
MenuEntry_DisableOnCondition ( & ME_SOUND_VOLUME_MUSIC , ! mus_enabled ) ;
MenuEntry_DisableOnCondition ( & ME_SOUND_DUKETALK , ! snd_enabled ) ;
MenuEntry_DisableOnCondition ( & ME_SOUND_SAMPLINGRATE , ! snd_enabled & & ! mus_enabled ) ;
2017-07-27 09:13:09 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2019-10-22 00:01:05 +00:00
MenuEntry_DisableOnCondition ( & ME_SOUND_NUMVOICES , ! snd_enabled ) ;
2017-07-27 09:13:09 +00:00
# endif
2019-10-22 00:01:05 +00:00
MenuEntry_DisableOnCondition ( & ME_SOUND_RESTART , soundrate = = snd_mixrate & &
soundvoices = = snd_numvoices ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-18 16:30:15 +00:00
2018-03-08 03:55:36 +00:00
case MENU_SAVESETUP :
2019-10-21 22:58:51 +00:00
MenuEntry_DisableOnCondition ( & ME_SAVESETUP_MAXAUTOSAVES , ! cl_autosavedeletion ) ;
2018-03-08 03:55:36 +00:00
break ;
2019-08-13 09:15:49 +00:00
case MENU_JOYSTICKSETUP :
2019-08-15 04:39:31 +00:00
MenuEntry_DisableOnCondition ( & ME_JOYSTICK_EDITBUTTONS , ! CONTROL_JoyPresent | | ( joystick . numButtons = = 0 & & joystick . numHats = = 0 ) ) ;
MenuEntry_DisableOnCondition ( & ME_JOYSTICK_EDITAXES , ! CONTROL_JoyPresent | | joystick . numAxes = = 0 ) ;
2019-08-13 09:15:49 +00:00
MenuEntry_DisableOnCondition ( & ME_JOYSTICK_DEFAULTS_STANDARD , ! joystick . isGameController ) ;
MenuEntry_DisableOnCondition ( & ME_JOYSTICK_DEFAULTS_PRO , ! joystick . isGameController ) ;
break ;
2017-07-31 01:34:54 +00:00
# ifndef EDUKE32_SIMPLE_MENU
2014-05-31 12:26:41 +00:00
case MENU_MOUSESETUP :
2019-10-22 22:51:49 +00:00
MenuEntry_DisableOnCondition ( & ME_MOUSESETUP_MOUSEAIMING , in_aimmode ) ;
2014-05-31 12:26:41 +00:00
break ;
2017-07-31 01:34:54 +00:00
# endif
2014-05-31 12:26:41 +00:00
case MENU_NETOPTIONS :
2015-02-22 22:15:20 +00:00
if ( MEOSV_NetEpisodes [ MEO_NETOPTIONS_EPISODE . currentOption ] = = MAXVOLUMES )
2014-05-31 12:26:41 +00:00
MEL_NETOPTIONS [ 2 ] = & ME_NETOPTIONS_USERMAP ;
else
{
MEL_NETOPTIONS [ 2 ] = & ME_NETOPTIONS_LEVEL ;
2015-02-22 22:15:20 +00:00
MEO_NETOPTIONS_LEVEL . options = & MEOS_NETOPTIONS_LEVEL [ MEOSV_NetEpisodes [ MEO_NETOPTIONS_EPISODE . currentOption ] ] ;
2014-05-31 12:26:41 +00:00
}
2019-11-09 18:15:03 +00:00
if ( ! ( g_gametypeFlags [ m_coop ] & GAMETYPE_MARKEROPTION ) )
2017-06-19 23:07:09 +00:00
{
ME_NETOPTIONS_MARKERS . type = Dummy ;
ME_NETOPTIONS_MARKERS . flags | = MEF_Disabled ;
}
else
{
ME_NETOPTIONS_MARKERS . type = Option ;
ME_NETOPTIONS_MARKERS . flags & = ~ MEF_Disabled ;
}
2019-11-09 18:15:03 +00:00
MEL_NETOPTIONS [ 5 ] = ( g_gametypeFlags [ m_coop ] & ( GAMETYPE_PLAYERSFRIENDLY | GAMETYPE_TDM ) ) ? & ME_NETOPTIONS_FRFIRE : & ME_NETOPTIONS_MAPEXITS ;
2014-05-31 12:26:41 +00:00
break ;
2006-05-05 07:10:36 +00:00
2014-05-31 12:26:41 +00:00
case MENU_OPTIONS :
2014-12-27 18:37:12 +00:00
MenuEntry_DisableOnCondition ( & ME_OPTIONS_PLAYERSETUP , ud . recstat = = 1 ) ;
2014-05-31 12:26:41 +00:00
break ;
2015-03-24 10:49:03 +00:00
}
2014-05-31 12:26:41 +00:00
default :
break ;
}
}
2006-04-19 08:00:09 +00:00
2014-07-22 11:19:58 +00:00
2019-08-15 04:39:38 +00:00
static void Menu_DrawVerifyPrompt ( int32_t x , int32_t y , const char * text , int numlines = 1 )
2019-08-14 05:25:31 +00:00
{
mgametextcenter ( x , y + ( 90 < < 16 ) , text ) ;
# ifndef EDUKE32_ANDROID_MENU
char const * inputs = CONTROL_LastSeenInput = = LastSeenInput : : Joystick
? " Press (A) to accept, (B) to return. "
: " (Y/N) " ;
2019-08-15 04:39:38 +00:00
mgametextcenter ( x , y + ( 90 < < 16 ) + MF_Bluefont . get_yline ( ) * numlines , inputs ) ;
2019-08-14 05:25:31 +00:00
# endif
}
2016-11-01 01:35:32 +00:00
static void Menu_PreDraw ( MenuID_t cm , MenuEntry_t * entry , const vec2_t origin )
2014-05-31 12:26:41 +00:00
{
2018-02-20 11:55:24 +00:00
int32_t i , j , l = 0 ;
2007-02-05 01:33:08 +00:00
2014-05-31 12:26:41 +00:00
switch ( cm )
{
2008-11-11 13:24:05 +00:00
2014-05-31 12:26:41 +00:00
case MENU_PLAYER :
2019-11-09 18:15:03 +00:00
rotatesprite_fs ( origin . x + ( 260 < < 16 ) , origin . y + ( ( 24 + ( tilesiz [ APLAYER ] . y > > 1 ) ) < < 16 ) , 49152L , 0 , 1441 - ( ( ( ( 4 - ( ( int32_t ) totalclock > > 4 ) ) ) & 3 ) * 5 ) , 0 , entry = = & ME_PLAYER_TEAM ? G_GetTeamPalette ( playerteam ) : playercolor , 10 ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-22 06:10:28 +00:00
2014-03-26 09:14:01 +00:00
case MENU_MACROS :
2014-10-27 07:09:41 +00:00
mgametextcenter ( origin . x , origin . y + ( 144 < < 16 ) , " Activate in-game with Shift-F# " ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-22 06:10:28 +00:00
2014-05-31 12:26:41 +00:00
case MENU_COLCORR :
case MENU_COLCORR_INGAME :
2014-10-27 07:09:41 +00:00
// center panel
rotatesprite_fs ( origin . x + ( 120 < < 16 ) , origin . y + ( 32 < < 16 ) , 16384 , 0 , 3290 , 0 , 0 , 2 | 8 | 16 ) ;
rotatesprite_fs ( origin . x + ( 160 < < 16 ) - ( tilesiz [ BOTTOMSTATUSBAR ] . x < < 13 ) , origin . y + ( 82 < < 16 ) - ( tilesiz [ BOTTOMSTATUSBAR ] . y < < 14 ) , 16384 , 0 , BOTTOMSTATUSBAR , 0 , 0 , 2 | 8 | 16 ) ;
// left panel
rotatesprite_fs ( origin . x + ( 40 < < 16 ) , origin . y + ( 32 < < 16 ) , 16384 , 0 , BONUSSCREEN , 0 , 0 , 2 | 8 | 16 ) ;
// right panel
rotatesprite_fs ( origin . x + ( 200 < < 16 ) , origin . y + ( 32 < < 16 ) , 16384 , 0 , LOADSCREEN , 0 , 0 , 2 | 8 | 16 ) ;
2006-11-16 03:02:42 +00:00
break ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
case MENU_NETSETUP :
2014-03-26 09:14:01 +00:00
case MENU_NETHOST :
2018-01-29 02:14:16 +00:00
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( 90 < < 16 ) , " Game Type " , MF_Minifont . pal_deselected ) ;
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( ( 90 + 8 ) < < 16 ) , " Episode " , MF_Minifont . pal_deselected ) ;
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( ( 90 + 8 + 8 ) < < 16 ) , " Level " , MF_Minifont . pal_deselected ) ;
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 ) < < 16 ) , ME_NETOPTIONS_MONSTERS . name , MF_Minifont . pal_deselected ) ;
2019-11-09 18:15:03 +00:00
if ( m_coop = = 0 )
2018-01-29 02:14:16 +00:00
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 ) < < 16 ) , " Markers " , MF_Minifont . pal_deselected ) ;
2019-11-09 18:15:03 +00:00
else if ( m_coop = = 1 )
2018-01-29 02:14:16 +00:00
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 ) < < 16 ) , " Friendly Fire " , MF_Minifont . pal_deselected ) ;
mminitext ( origin . x + ( 90 < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 + 8 ) < < 16 ) , " User Map " , MF_Minifont . pal_deselected ) ;
2006-11-16 03:02:42 +00:00
2019-11-09 18:15:03 +00:00
mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( 90 < < 16 ) , g_gametypeNames [ m_coop ] , MF_Minifont . pal_deselected_right ) ;
2006-11-16 03:02:42 +00:00
2019-11-24 23:02:00 +00:00
mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 ) < < 16 ) , gVolumeNames [ ud . m_volume_number ] , MF_Minifont . pal_deselected_right ) ;
2019-11-09 18:15:03 +00:00
mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 ) < < 16 ) , g_mapInfo [ MAXLEVELS * ud . m_volume_number + m_level_number ] . name , MF_Minifont . pal_deselected_right ) ;
2006-11-16 03:02:42 +00:00
if ( ud . m_monsters_off = = 0 | | ud . m_player_skill > 0 )
2018-01-29 02:14:16 +00:00
mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 ) < < 16 ) , g_skillNames [ ud . m_player_skill ] , MF_Minifont . pal_deselected_right ) ;
else mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 ) < < 16 ) , " None " , MF_Minifont . pal_deselected_right ) ;
2019-11-09 18:15:03 +00:00
if ( m_coop = = 0 )
2006-11-16 03:02:42 +00:00
{
2019-11-09 18:15:03 +00:00
if ( m_marker ) mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 ) < < 16 ) , " On " , MF_Minifont . pal_deselected_right ) ;
2018-01-29 02:14:16 +00:00
else mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 ) < < 16 ) , " Off " , MF_Minifont . pal_deselected_right ) ;
2006-11-16 03:02:42 +00:00
}
2019-11-09 18:15:03 +00:00
else if ( m_coop = = 1 )
2006-11-16 03:02:42 +00:00
{
2019-11-09 18:15:03 +00:00
if ( m_ffire ) mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 ) < < 16 ) , " On " , MF_Minifont . pal_deselected_right ) ;
2018-01-29 02:14:16 +00:00
else mminitext ( origin . x + ( ( 90 + 60 ) < < 16 ) , origin . y + ( ( 90 + 8 + 8 + 8 + 8 ) < < 16 ) , " Off " , MF_Minifont . pal_deselected_right ) ;
2006-11-16 03:02:42 +00:00
}
break ;
2014-05-31 12:26:41 +00:00
case MENU_RESETPLAYER :
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Bsprintf ( tempbuf , " Load last game: \n \" %s \" " , g_quickload - > name ) ;
2019-08-15 04:39:38 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , tempbuf , 2 ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-13 20:47:06 +00:00
2014-09-30 04:07:29 +00:00
2018-03-08 03:55:45 +00:00
case MENU_SAVECLEANVERIFY :
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2018-03-08 05:15:11 +00:00
if ( g_oldSaveCnt )
{
2019-08-14 05:25:31 +00:00
Bsprintf ( tempbuf , " Delete %d obsolete saves? \n This action cannot be undone. " , g_oldSaveCnt ) ;
2019-08-15 04:39:38 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , tempbuf , 2 ) ;
2018-03-08 05:15:11 +00:00
}
else
2019-08-14 05:25:31 +00:00
mgametextcenter ( origin . x , origin . y + ( 90 < < 16 ) , " No obsolete saves found! " ) ;
2018-03-08 05:15:11 +00:00
2018-03-08 03:55:45 +00:00
break ;
2014-05-31 12:26:41 +00:00
case MENU_LOADVERIFY :
2017-12-18 11:24:53 +00:00
{
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2017-12-18 11:24:53 +00:00
menusave_t & msv = g_menusaves [ M_LOAD . currentEntry ] ;
2019-07-31 03:39:30 +00:00
if ( msv . isOldVer & & msv . brief . isExt )
2014-12-27 18:35:34 +00:00
{
2019-08-14 05:25:31 +00:00
Bsprintf ( tempbuf , " Resume game from sequence point: \n \" %s \" " , msv . brief . name ) ;
2019-08-15 04:39:38 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , tempbuf , 2 ) ;
2019-07-31 03:39:30 +00:00
}
2014-12-27 18:35:34 +00:00
else
{
2019-08-14 05:25:31 +00:00
Bsprintf ( tempbuf , " Load game: \n \" %s \" " , msv . brief . name ) ;
2019-08-15 04:39:38 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , tempbuf , 2 ) ;
2017-07-06 14:43:11 +00:00
}
2014-05-31 12:26:41 +00:00
break ;
2017-12-18 11:24:53 +00:00
}
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
case MENU_SAVEVERIFY :
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Overwrite previous saved game? " ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-13 20:47:06 +00:00
2018-03-08 03:55:45 +00:00
case MENU_LOADDELVERIFY :
case MENU_SAVEDELVERIFY :
{
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2018-03-08 03:55:45 +00:00
menusave_t & msv = cm = = MENU_LOADDELVERIFY ? g_menusaves [ M_LOAD . currentEntry ] : g_menusaves [ M_SAVE . currentEntry - 1 ] ;
2019-08-14 05:25:31 +00:00
Bsprintf ( tempbuf , " Delete saved game: \n \" %s \" ? " , msv . brief . name ) ;
2019-08-15 04:39:38 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , tempbuf , 2 ) ;
2018-03-08 03:55:45 +00:00
break ;
}
2014-05-31 12:26:41 +00:00
case MENU_NEWVERIFY :
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Abort this game? " ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-13 20:47:06 +00:00
2019-08-13 09:16:02 +00:00
case MENU_COLCORRRESETVERIFY :
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Reset color correction to defaults? " ) ;
2019-08-13 09:16:02 +00:00
break ;
case MENU_KEYSRESETVERIFY :
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Reset keys to defaults? " ) ;
2019-08-13 09:16:02 +00:00
break ;
case MENU_KEYSCLASSICVERIFY :
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Reset keys to classic defaults? " ) ;
2019-08-13 09:16:02 +00:00
break ;
case MENU_JOYSTANDARDVERIFY :
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Reset gamepad to standard layout? " ) ;
2019-08-13 09:16:02 +00:00
break ;
case MENU_JOYPROVERIFY :
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Reset gamepad to pro layout? " ) ;
2019-08-13 09:16:02 +00:00
break ;
case MENU_JOYCLEARVERIFY :
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Clear all gamepad settings? " ) ;
2019-08-13 09:16:02 +00:00
break ;
2014-05-31 12:26:41 +00:00
case MENU_QUIT :
case MENU_QUIT_INGAME :
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " Are you sure you want to quit? " ) ;
2006-11-16 03:02:42 +00:00
break ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
case MENU_QUITTOTITLE :
2018-04-12 21:03:12 +00:00
videoFadeToBlack ( 1 ) ;
2019-08-14 05:25:31 +00:00
Menu_DrawVerifyPrompt ( origin . x , origin . y , " End game and return to title screen? " ) ;
2014-05-31 12:26:41 +00:00
break ;
2014-03-26 09:14:01 +00:00
2014-05-31 12:26:41 +00:00
case MENU_NETWAITMASTER :
G_DrawFrags ( ) ;
2015-01-13 12:56:19 +00:00
mgametextcenter ( origin . x , origin . y + ( 50 < < 16 ) , " Waiting for master \n "
" to select level " ) ;
2014-05-31 12:26:41 +00:00
break ;
2012-06-03 16:11:22 +00:00
2014-05-31 12:26:41 +00:00
case MENU_NETWAITVOTES :
G_DrawFrags ( ) ;
2014-10-27 07:09:41 +00:00
mgametextcenter ( origin . x , origin . y + ( 90 < < 16 ) , " Waiting for votes " ) ;
2014-05-31 12:26:41 +00:00
break ;
2006-04-13 20:47:06 +00:00
2017-01-18 22:21:40 +00:00
# ifndef EDUKE32_STANDALONE
2014-05-31 12:26:41 +00:00
case MENU_BUYDUKE :
2015-01-13 12:56:19 +00:00
mgametextcenter ( origin . x , origin . y + ( 33 < < 16 ) , " You are playing the shareware \n "
" version of Duke Nukem 3D. While \n "
" this version is really cool, you \n "
" are missing over 75% of the total \n "
" game, along with other great extras \n "
" which you'll get when you order \n "
" the complete version and get \n "
" the final three episodes. " ) ;
2014-09-30 04:07:29 +00:00
2014-10-27 07:09:41 +00:00
mgametextcenter ( origin . x , origin . y + ( ( 148 + 16 ) < < 16 ) , " Press any key or button... " ) ;
2006-11-16 03:02:42 +00:00
break ;
2017-01-18 22:21:40 +00:00
# endif
2006-11-15 01:16:55 +00:00
}
2006-11-16 03:02:42 +00:00
}
break ;
2014-05-31 12:26:41 +00:00
case MENU_CREDITS4 : // JBF 20031220
2019-03-04 23:48:59 +00:00
{
# define MENU_YOFFSET 40
# define MENU_INCREMENT(x) (oy += ((x) << 16)) // maybe this should have been MENU_EXCREMENT instead
2006-04-13 20:47:06 +00:00
2019-03-04 23:48:59 +00:00
int32_t oy = origin . y ;
2006-04-13 20:47:06 +00:00
2019-03-04 23:48:59 +00:00
mgametextcenter ( origin . x , MENU_INCREMENT ( MENU_YOFFSET ) , " Developers " ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 11 ) , " Richard \" TerminX \" Gobeille " , 8 ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 7 ) , " Evan \" Hendricks266 \" Ramos " , 8 ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 7 ) , " Alex \" pogokeen \" Dawson " , 8 ) ;
2006-04-13 20:47:06 +00:00
2019-03-04 23:48:59 +00:00
mgametextcenter ( origin . x , MENU_INCREMENT ( 11 ) , " Retired developers " ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 11 ) , " Pierre-Loup \" Plagman \" Griffais " , 8 ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 7 ) , " Philipp \" Helixhorned \" Kutin " , 8 ) ;
2012-06-03 16:11:22 +00:00
2019-03-04 23:48:59 +00:00
mgametextcenter ( origin . x , MENU_INCREMENT ( 11 ) , " Special thanks to " ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 11 ) , " Jonathon \" JonoF \" Fowler " , 8 ) ;
2012-06-03 16:11:22 +00:00
2019-03-04 23:48:59 +00:00
mgametextcenter ( origin . x , MENU_INCREMENT ( 11 ) , " Uses BUILD Engine technology by " ) ;
creditsminitext ( origin . x + ( 160 < < 16 ) , MENU_INCREMENT ( 11 ) , " Ken \" Awesoken \" Silverman " , 8 ) ;
2006-04-13 20:47:06 +00:00
2019-03-04 23:48:59 +00:00
# undef MENU_INCREMENT
# undef MENU_YOFFSET
}
2014-05-31 12:26:41 +00:00
break ;
2006-11-15 01:16:55 +00:00
2014-05-31 12:26:41 +00:00
case MENU_CREDITS5 :
l = 7 ;
2006-12-12 05:59:47 +00:00
2014-10-27 07:09:41 +00:00
mgametextcenter ( origin . x , origin . y + ( ( 38 - l ) < < 16 ) , " License and Other Contributors " ) ;
2006-11-16 03:02:42 +00:00
{
2018-02-17 22:30:26 +00:00
static const char * header [ ] =
2006-11-16 03:02:42 +00:00
{
2014-05-31 12:26:41 +00:00
" This program is distributed under the terms of the " ,
" GNU General Public License version 2 as published by the " ,
2014-07-20 08:55:56 +00:00
" Free Software Foundation. See gpl-2.0.txt for details. " ,
2018-02-17 22:30:26 +00:00
" BUILD engine technology available under license. See buildlic.txt. " ,
nullptr ,
2014-09-30 04:07:29 +00:00
" The EDuke32 team thanks the following people for their contributions: " ,
2018-02-17 22:30:26 +00:00
nullptr ,
2014-05-31 12:26:41 +00:00
} ;
2018-02-17 22:30:26 +00:00
static const char * body [ ] =
2014-05-31 12:26:41 +00:00
{
2019-08-13 14:44:05 +00:00
" Alexey Skrybykin " , // Nuke.YKT - Polymost fixes
2014-05-31 12:26:41 +00:00
" Bioman " , // GTK work, APT repository and package upkeep
" Brandon Bergren " , // "Bdragon" - tiles.cfg
" Charlie Honig " , // "CONAN" - showview command
" Dan Gaskill " , // "DeeperThought" - testing
" David Koenig " , // "Bargle" - Merged a couple of things from duke3d_w32
" Ed Coolidge " , // Mapster32 improvements
2015-02-21 23:15:27 +00:00
" Emile Belanger " , // original Android work
2018-02-17 22:30:26 +00:00
" Fox " , // various patches
2014-05-31 12:26:41 +00:00
" Hunter_rus " , // tons of stuff
" James Bentler " , // Mapster32 improvements
" Jasper Foreman " , // netcode contributions
" Javier Martinez " , // "Malone3D" - EDuke 2.1.1 components
" Jeff Hart " , // website graphics
2017-09-23 03:17:26 +00:00
" Jonathan Strander " , // "Mblackwell" - testing and feature speccing
2018-02-17 22:30:26 +00:00
" Jordon Moss " , // "Striker" - various patches, OldMP work
2014-05-31 12:26:41 +00:00
" Jose del Castillo " , // "Renegado" - EDuke 2.1.1 components
" Lachlan McDonald " , // official EDuke32 icon
" LSDNinja " , // OS X help and testing
" Marcus Herbert " , // "rhoenie" - OS X compatibility work
" Matthew Palmer " , // "Usurper" - testing and eduke32.com domain
2014-09-30 04:07:29 +00:00
" Matt Saettler " , // original DOS EDuke/WW2GI enhancements
2018-02-17 22:30:26 +00:00
" NY00123 " , // Linux / SDL usability patches
2014-05-31 12:26:41 +00:00
" Ozkan Sezer " , // SDL/GTK version checking improvements
" Peter Green " , // "Plugwash" - dynamic remapping, custom gametypes
" Peter Veenstra " , // "Qbix" - port to 64-bit
" Robin Green " , // CON array support
" Ryan Gordon " , // "icculus" - icculus.org Duke3D port sound code
" Stephen Anthony " , // early 64-bit porting work
" tueidj " , // Wii port
} ;
2018-02-17 22:30:26 +00:00
EDUKE32_STATIC_ASSERT ( ARRAY_SIZE ( body ) % 3 = = 0 ) ;
static const char * footer [ ] =
2006-12-18 08:37:12 +00:00
{
2018-02-17 22:30:26 +00:00
nullptr ,
" Visit eduke32.com for news and updates " ,
2014-05-31 12:26:41 +00:00
} ;
2018-10-25 23:31:54 +00:00
static constexpr int header_numlines = ARRAY_SIZE ( header ) ;
static constexpr int body_numlines = ARRAY_SIZE ( body ) ;
static constexpr int footer_numlines = ARRAY_SIZE ( footer ) ;
2018-02-17 22:30:26 +00:00
2018-10-25 23:31:54 +00:00
static constexpr int CCOLUMNS = 3 ;
static constexpr int CCOLXBUF = 20 ;
2014-05-31 12:26:41 +00:00
2018-10-25 23:31:54 +00:00
int c ;
2014-05-31 12:26:41 +00:00
i = 0 ;
2018-10-25 23:31:54 +00:00
for ( c = 0 ; c < header_numlines ; c + + )
2018-02-17 22:30:26 +00:00
if ( header [ c ] )
creditsminitext ( origin . x + ( 160 < < 16 ) , origin . y + ( ( 17 + 10 + 10 + 8 + 4 + ( c * 7 ) - l ) < < 16 ) , header [ c ] , 8 ) ;
i + = c ;
2018-10-25 23:31:54 +00:00
for ( c = 0 ; c < body_numlines ; c + + )
2018-02-17 22:30:26 +00:00
if ( body [ c ] )
creditsminitext ( origin . x + ( ( CCOLXBUF + ( ( 320 - CCOLXBUF * 2 ) / ( CCOLUMNS * 2 ) ) + ( ( 320 - CCOLXBUF * 2 ) / CCOLUMNS ) * ( c / ( body_numlines / CCOLUMNS ) ) ) < < 16 ) , origin . y + ( ( 17 + 10 + 10 + 8 + 4 + ( ( c % ( body_numlines / CCOLUMNS ) ) * 7 ) + ( i * 7 ) - l ) < < 16 ) , body [ c ] , 8 ) ;
i + = c / CCOLUMNS ;
2018-10-25 23:31:54 +00:00
for ( c = 0 ; c < footer_numlines ; c + + )
2018-02-17 22:30:26 +00:00
if ( footer [ c ] )
creditsminitext ( origin . x + ( 160 < < 16 ) , origin . y + ( ( 17 + 10 + 10 + 8 + 4 + ( c * 7 ) + ( i * 7 ) - l ) < < 16 ) , footer [ c ] , 8 ) ;
2006-11-16 03:02:42 +00:00
}
2006-04-13 20:47:06 +00:00
2006-11-16 03:02:42 +00:00
break ;
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
default :
break ;
}
}
2006-04-13 20:47:06 +00:00
2012-06-03 16:11:22 +00:00
2014-05-31 12:26:41 +00:00
/*
Functions where a " newValue " or similar is passed are run * before * the linked variable is actually changed .
That way you can compare the new and old values and potentially block the change .
*/
2016-11-01 01:35:32 +00:00
static void Menu_EntryLinkActivate ( MenuEntry_t * entry )
2014-05-31 12:26:41 +00:00
{
switch ( g_currentMenu )
{
break ;
}
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
case MENU_JOYSTICKAXES :
2018-04-12 21:02:31 +00:00
M_JOYSTICKAXIS . title = joyGetName ( 0 , M_JOYSTICKAXES . currentEntry ) ;
2019-11-09 18:15:03 +00:00
#if 0
2019-10-26 19:50:49 +00:00
MEO_JOYSTICKAXIS_ANALOG . data = & JoystickAnalogueAxes [ M_JOYSTICKAXES . currentEntry ] ;
MEO_JOYSTICKAXIS_SCALE . variable = & JoystickAnalogueScale [ M_JOYSTICKAXES . currentEntry ] ;
MEO_JOYSTICKAXIS_INVERT . data = & JoystickAnalogueInvert [ M_JOYSTICKAXES . currentEntry ] ;
MEO_JOYSTICKAXIS_DEAD . variable = & JoystickAnalogueDead [ M_JOYSTICKAXES . currentEntry ] ;
MEO_JOYSTICKAXIS_SATU . variable = & JoystickAnalogueSaturate [ M_JOYSTICKAXES . currentEntry ] ;
2019-11-09 18:15:03 +00:00
# endif
2014-05-31 12:26:41 +00:00
break ;
2006-04-13 20:47:06 +00:00
2015-03-24 10:49:03 +00:00
case MENU_CHEATS :
{
const int32_t cheatFuncID = M_CHEATS . currentEntry - 1 ;
switch ( cheatFuncID )
{
case - 1 :
case CHEATFUNC_WARP :
case CHEATFUNC_SKILL :
break ;
default :
2016-11-01 01:35:32 +00:00
Menu_DoCheat ( CheatFunctionIDs [ cheatFuncID ] ) ;
2015-03-24 10:49:03 +00:00
break ;
}
break ;
}
2014-05-31 12:26:41 +00:00
default :
break ;
}
2006-04-13 20:47:06 +00:00
2014-05-31 12:26:41 +00:00
if ( entry = = & ME_VIDEOSETUP_APPLY )
{
2018-07-14 21:36:44 +00:00
resolution_t p = { xres , yres , fullscreen , bpp , 0 } ;
2018-04-12 21:03:12 +00:00
int32_t prend = videoGetRenderMode ( ) ;
2019-10-23 19:11:37 +00:00
int32_t pvsync = vid_vsync ;
2019-09-08 01:01:30 +00:00
int pborderless = r_borderless ;
2015-12-23 04:05:21 +00:00
2018-02-26 02:48:09 +00:00
resolution_t n = { resolution [ newresolution ] . xdim , resolution [ newresolution ] . ydim ,
( resolution [ newresolution ] . flags & RES_FS ) ? newfullscreen : 0 ,
2015-12-23 04:05:35 +00:00
( newrendermode = = REND_CLASSIC ) ? 8 : resolution [ newresolution ] . bppmax , 0 } ;
2019-09-08 01:01:30 +00:00
if ( r_borderless ! = newborderless )
videoResetMode ( ) ;
r_borderless = newborderless ;
2006-04-13 20:47:06 +00:00
2018-07-14 21:36:44 +00:00
if ( videoSetGameMode ( n . flags , n . xdim , n . ydim , n . bppmax , upscalefactor ) < 0 )
2014-05-31 12:26:41 +00:00
{
2019-09-08 01:01:30 +00:00
r_borderless = pborderless ;
2018-07-14 21:36:44 +00:00
if ( videoSetGameMode ( p . flags , p . xdim , p . ydim , p . bppmax , upscalefactor ) < 0 )
2014-05-31 12:26:41 +00:00
{
2018-04-12 21:03:47 +00:00
videoSetRenderMode ( prend ) ;
2014-05-31 12:26:41 +00:00
G_GameExit ( " Failed restoring old video mode. " ) ;
2006-04-13 20:47:06 +00:00
}
2016-06-05 04:46:28 +00:00
else
2015-12-23 04:05:35 +00:00
{
onvideomodechange ( p . bppmax > 8 ) ;
2019-10-23 19:11:37 +00:00
vid_vsync = videoSetVsync ( pvsync ) ;
2015-12-23 04:05:35 +00:00
}
2006-11-16 03:02:42 +00:00
}
2019-09-08 01:01:30 +00:00
else
{
videoSetRenderMode ( newrendermode ) ;
2019-10-23 19:11:37 +00:00
vid_vsync = videoSetVsync ( newvsync ) ;
2019-09-08 01:01:30 +00:00
onvideomodechange ( n . bppmax > 8 ) ;
}
2006-11-15 01:16:55 +00:00
2014-05-31 12:26:41 +00:00
g_restorePalette = - 1 ;
G_UpdateScreenArea ( ) ;
2019-10-27 12:40:24 +00:00
ScreenMode = fullscreen ;
ScreenWidth = xres ;
ScreenHeight = yres ;
ScreenBPP = bpp ;
2014-05-31 12:26:41 +00:00
}
else if ( entry = = & ME_SOUND_RESTART )
{
2019-10-22 00:01:05 +00:00
snd_mixrate = soundrate ;
snd_numvoices = soundvoices ;
2019-10-24 18:36:18 +00:00
mus_device = musicdevice ;
2006-11-16 03:02:42 +00:00
2014-05-31 12:26:41 +00:00
S_SoundShutdown ( ) ;
2014-04-07 06:17:08 +00:00
2014-05-31 12:26:41 +00:00
S_SoundStartup ( ) ;
2012-10-14 22:16:07 +00:00
2014-05-31 12:26:41 +00:00
FX_StopAllSounds ( ) ;
S_ClearSoundLocks ( ) ;
}
2018-03-08 03:55:41 +00:00
else if ( entry = = & ME_SAVESETUP_CLEANUP )
{
2018-03-08 03:55:45 +00:00
Menu_Change ( MENU_SAVECLEANVERIFY ) ;
2018-03-08 03:55:41 +00:00
}
2014-05-31 12:26:41 +00:00
else if ( entry = = & ME_NETHOST_LAUNCH )
{
// master does whatever it wants
if ( g_netServer )
{
Net_FillNewGame ( & pendingnewgame , 1 ) ;
Net_StartNewGame ( ) ;
Net_SendNewGame ( 1 , NULL ) ;
}
else if ( voting = = - 1 )
{
Net_SendMapVoteInitiate ( ) ;
2016-11-01 01:35:32 +00:00
Menu_Change ( MENU_NETWAITVOTES ) ;
2014-05-31 12:26:41 +00:00
}
}
}
2006-11-16 03:02:42 +00:00
2016-11-01 01:35:32 +00:00
static int32_t Menu_EntryOptionModify ( MenuEntry_t * entry , int32_t newOption )
2014-05-31 12:26:41 +00:00
{
int32_t x ;
2019-07-08 00:41:25 +00:00
auto ps = g_player [ myconnectindex ] . ps ;
2006-11-16 03:02:42 +00:00
2014-05-31 12:26:41 +00:00
if ( entry = = & ME_GAMESETUP_DEMOREC )
{
if ( ( ps - > gm & MODE_GAME ) )
G_CloseDemoWrite ( ) ;
}
2014-09-30 04:07:29 +00:00
else if ( entry = = & ME_GAMESETUP_WEAPSWITCH_PICKUP )
2014-05-31 12:26:41 +00:00
{
2019-10-22 00:31:14 +00:00
ud . weaponswitch = ud . weaponswitch & ~ ( 1 | 4 ) ;
2014-05-31 12:26:41 +00:00
switch ( newOption )
2006-11-16 03:02:42 +00:00
{
case 2 :
2019-10-22 00:31:14 +00:00
ud . weaponswitch = ud . weaponswitch | 4 ;
2017-07-18 20:53:41 +00:00
fallthrough__ ;
2014-05-31 12:26:41 +00:00
case 1 :
2019-10-22 00:31:14 +00:00
ud . weaponswitch = ud . weaponswitch | 1 ;
2006-11-16 03:02:42 +00:00
break ;
2014-05-31 12:26:41 +00:00
default :
2006-11-16 03:02:42 +00:00
break ;
}
2014-05-31 12:26:41 +00:00
}
else if ( entry = = & ME_SOUND )
{
if ( newOption = = 0 )
2006-11-16 03:02:42 +00:00
{
2014-05-31 12:26:41 +00:00
FX_StopAllSounds ( ) ;
S_ClearSoundLocks ( ) ;
2006-11-16 03:02:42 +00:00
}
2014-05-31 12:26:41 +00:00
}
else if ( entry = = & ME_SOUND_MUSIC )
{
2019-10-22 00:01:05 +00:00
mus_enabled = newOption ;
2014-05-31 12:26:41 +00:00
if ( newOption = = 0 )
2018-10-25 23:32:29 +00:00
S_PauseMusic ( true ) ;
2006-11-16 03:02:42 +00:00
else
{
2018-10-25 23:32:29 +00:00
S_PauseMusic ( false ) ;
2014-05-31 12:26:41 +00:00
}
}
else if ( entry = = & ME_SOUND_DUKETALK )
2019-10-22 00:01:05 +00:00
snd_speech = ( snd_speech & ~ 1 ) | newOption ;
2019-08-14 03:03:41 +00:00
else if ( entry = = & ME_JOYSTICK_ENABLE )
2019-08-14 03:03:52 +00:00
{
if ( newOption )
CONTROL_ScanForControllers ( ) ;
2019-08-14 03:03:41 +00:00
CONTROL_JoystickEnabled = ( newOption & & CONTROL_JoyPresent ) ;
2019-08-14 03:03:52 +00:00
}
2014-05-31 12:26:41 +00:00
else if ( entry = = & ME_JOYSTICKAXIS_ANALOG )
2014-11-30 02:04:36 +00:00
CONTROL_MapAnalogAxis ( M_JOYSTICKAXES . currentEntry , newOption , controldevice_joystick ) ;
2019-08-14 03:03:57 +00:00
else if ( entry = = & ME_JOYSTICKAXIS_INVERT )
CONTROL_SetAnalogAxisInvert ( M_JOYSTICKAXES . currentEntry , newOption , controldevice_joystick ) ;
2014-05-31 12:26:41 +00:00
else if ( entry = = & ME_NETOPTIONS_EPISODE )
{
2016-08-27 01:42:01 +00:00
if ( newOption < g_volumeCnt )
2014-05-31 12:26:41 +00:00
ud . m_volume_number = newOption ;
}
else if ( entry = = & ME_NETOPTIONS_MONSTERS )
{
2016-08-27 01:42:01 +00:00
ud . m_monsters_off = ( newOption = = g_skillCnt ) ;
if ( newOption < g_skillCnt )
2014-05-31 12:26:41 +00:00
ud . m_player_skill = newOption ;
}
else if ( entry = = & ME_ADULTMODE )
{
if ( newOption )
2006-11-16 03:02:42 +00:00
{
2016-08-27 01:42:01 +00:00
for ( x = 0 ; x < g_animWallCnt ; x + + )
2014-05-31 12:26:41 +00:00
switch ( DYNAMICTILEMAP ( wall [ animwall [ x ] . wallnum ] . picnum ) )
2006-11-15 01:16:55 +00:00
{
2014-05-31 12:26:41 +00:00
case FEMPIC1__STATIC :
wall [ animwall [ x ] . wallnum ] . picnum = BLANKSCREEN ;
break ;
case FEMPIC2__STATIC :
case FEMPIC3__STATIC :
wall [ animwall [ x ] . wallnum ] . picnum = SCREENBREAK6 ;
break ;
2006-11-16 03:02:42 +00:00
}
2014-05-31 12:26:41 +00:00
}
else
{
2019-10-27 12:40:24 +00:00
adult_lockout = 0 ;
2006-11-16 03:02:42 +00:00
}
2014-05-31 12:26:41 +00:00
}
return 0 ;
}
2006-11-16 03:02:42 +00:00
2014-05-31 12:26:41 +00:00
/*
This is polled when the menu code is populating the screen but for some reason doesn ' t have the data .
*/
2016-11-01 01:35:32 +00:00
static int32_t Menu_EntryOptionSource ( MenuEntry_t * entry , int32_t currentValue )
2014-05-31 12:26:41 +00:00
{
2014-09-30 04:07:29 +00:00
if ( entry = = & ME_GAMESETUP_WEAPSWITCH_PICKUP )
2019-10-22 00:31:14 +00:00
return ( cl_weaponswitch & 1 ) ? ( ( cl_weaponswitch & 4 ) ? 2 : 1 ) : 0 ;
2014-05-31 12:26:41 +00:00
else if ( entry = = & ME_SOUND_DUKETALK )
2019-10-22 00:01:05 +00:00
return snd_speech & 1 ;
2014-05-31 12:26:41 +00:00
else if ( entry = = & ME_NETOPTIONS_MONSTERS )
2016-08-27 01:42:01 +00:00
return ( ud . m_monsters_off ? g_skillCnt : ud . m_player_skill ) ;
2014-05-31 12:26:41 +00:00
return currentValue ;
}
2006-11-16 03:02:42 +00:00
2019-11-28 00:49:50 +00:00
void Menu_Close ( uint8_t playerID )
2014-05-31 12:26:41 +00:00
{
2019-11-28 00:49:50 +00:00
auto & gm = g_player [ playerID ] . ps - > gm ;
if ( gm & MODE_GAME )
2014-05-31 12:26:41 +00:00
{
2019-11-28 00:49:50 +00:00
if ( gm & MODE_MENU )
I_ClearAllInput ( ) ;
2014-10-27 10:14:50 +00:00
2019-11-28 00:49:50 +00:00
// The following lines are here so that you cannot close the menu when no game is running.
gm & = ~ MODE_MENU ;
mouseLockToWindow ( 1 ) ;
2006-11-15 01:16:55 +00:00
2019-11-28 00:49:50 +00:00
if ( ( ! g_netServer & & ud . multimode < 2 ) & & ud . recstat ! = 2 )
2006-11-16 03:02:42 +00:00
{
2019-11-28 00:49:50 +00:00
ready2send = 1 ;
totalclock = ototalclock ;
CAMERACLOCK = ( int32_t ) totalclock ;
CAMERADIST = 65536 ;
m_animation . start = 0 ;
m_animation . length = 0 ;
2012-03-28 19:42:16 +00:00
2019-11-28 00:49:50 +00:00
// Reset next-viewscreen-redraw counter.
// XXX: are there any other cases like that in need of handling?
if ( g_curViewscreen > = 0 )
actor [ g_curViewscreen ] . t_data [ 0 ] = ( int32_t ) totalclock ;
2006-11-16 03:02:42 +00:00
}
2014-05-31 12:26:41 +00:00
2019-11-28 00:49:50 +00:00
G_UpdateScreenArea ( ) ;
S_PauseSounds ( false ) ;
}
}
2018-03-08 03:55:45 +00:00
2019-11-06 18:22:14 +00:00
2019-11-23 22:05:24 +00:00
# endif
2019-09-21 20:53:00 +00:00
END_DUKE_NS