2019-09-19 22:42:45 +00:00
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
/*
|
|
|
|
Copyright (C) 2010-2019 EDuke32 developers and contributors
|
|
|
|
Copyright (C) 2019 Nuke.YKT
|
|
|
|
|
|
|
|
This file is part of NBlood.
|
|
|
|
|
|
|
|
NBlood 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
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
//-------------------------------------------------------------------------
|
2019-09-21 18:59:54 +00:00
|
|
|
#include "ns.h" // Must come before everything else!
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
#include "compat.h"
|
|
|
|
#include "mmulti.h"
|
|
|
|
#include "common_game.h"
|
|
|
|
#include "fx_man.h"
|
|
|
|
#include "music.h"
|
|
|
|
#include "blood.h"
|
|
|
|
#include "demo.h"
|
|
|
|
#include "config.h"
|
|
|
|
#include "gamemenu.h"
|
|
|
|
#include "globals.h"
|
|
|
|
#include "loadsave.h"
|
|
|
|
#include "menu.h"
|
|
|
|
#include "messages.h"
|
|
|
|
#include "network.h"
|
|
|
|
#include "osdcmds.h"
|
|
|
|
#include "sfx.h"
|
|
|
|
#include "screen.h"
|
|
|
|
#include "sound.h"
|
|
|
|
#include "view.h"
|
|
|
|
|
2019-10-23 23:41:55 +00:00
|
|
|
EXTERN_CVAR(Bool, hud_messages)
|
|
|
|
EXTERN_CVAR(Bool, hud_powerupduration)
|
|
|
|
|
2019-09-22 06:39:22 +00:00
|
|
|
BEGIN_BLD_NS
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
void SaveGame(CGameMenuItemZEditBitmap *, CGameMenuEvent *);
|
|
|
|
|
|
|
|
void SaveGameProcess(CGameMenuItemChain *);
|
|
|
|
void SetDifficultyAndStart(CGameMenuItemChain *);
|
|
|
|
void SetDetail(CGameMenuItemSlider *);
|
|
|
|
void SetGamma(CGameMenuItemSlider *);
|
|
|
|
void SetMusicVol(CGameMenuItemSlider *);
|
|
|
|
void SetSoundVol(CGameMenuItemSlider *);
|
|
|
|
void SetCDVol(CGameMenuItemSlider *);
|
|
|
|
void SetDoppler(CGameMenuItemZBool *);
|
|
|
|
void SetCrosshair(CGameMenuItemZBool *);
|
|
|
|
void SetCenterHoriz(CGameMenuItemZBool *);
|
|
|
|
void SetShowWeapons(CGameMenuItemZBool *);
|
|
|
|
void SetSlopeTilting(CGameMenuItemZBool *);
|
|
|
|
void SetViewBobbing(CGameMenuItemZBool *);
|
|
|
|
void SetViewSwaying(CGameMenuItemZBool *);
|
|
|
|
void SetMouseSensitivity(CGameMenuItemSliderFloat *);
|
|
|
|
void SetMouseAimFlipped(CGameMenuItemZBool *);
|
|
|
|
void SetTurnSpeed(CGameMenuItemSlider *);
|
|
|
|
void ResetKeys(CGameMenuItemChain *);
|
|
|
|
void ResetKeysClassic(CGameMenuItemChain *);
|
|
|
|
void SetMessages(CGameMenuItemZBool *);
|
|
|
|
void LoadGame(CGameMenuItemZEditBitmap *, CGameMenuEvent *);
|
|
|
|
void SetupNetLevels(CGameMenuItemZCycle *);
|
|
|
|
void StartNetGame(CGameMenuItemChain *);
|
|
|
|
void SetParentalLock(CGameMenuItemZBool *);
|
|
|
|
void TenProcess(CGameMenuItem7EA1C *);
|
|
|
|
void SetupLevelMenuItem(int);
|
|
|
|
void SetupVideoModeMenu(CGameMenuItemChain *);
|
|
|
|
void SetVideoMode(CGameMenuItemChain *);
|
|
|
|
void SetWidescreen(CGameMenuItemZBool *);
|
|
|
|
void SetFOV(CGameMenuItemSlider *);
|
|
|
|
void UpdateVideoColorMenu(CGameMenuItemSliderFloat *);
|
|
|
|
void ResetVideoColor(CGameMenuItemChain *);
|
2019-09-21 11:02:17 +00:00
|
|
|
void SetWeaponsV10X(CGameMenuItemZBool* pItem);
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
#ifdef USE_OPENGL
|
|
|
|
void SetupVideoPolymostMenu(CGameMenuItemChain *);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
char strRestoreGameStrings[][16] =
|
|
|
|
{
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
"<Empty>",
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *zNetGameTypes[] =
|
|
|
|
{
|
|
|
|
"Cooperative",
|
|
|
|
"Bloodbath",
|
|
|
|
"Teams",
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *zMonsterStrings[] =
|
|
|
|
{
|
|
|
|
"None",
|
|
|
|
"Bring 'em on",
|
|
|
|
"Respawn",
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *zWeaponStrings[] =
|
|
|
|
{
|
|
|
|
"Do not Respawn",
|
|
|
|
"Are Permanent",
|
|
|
|
"Respawn",
|
|
|
|
"Respawn with Markers",
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *zItemStrings[] =
|
|
|
|
{
|
|
|
|
"Do not Respawn",
|
|
|
|
"Respawn",
|
|
|
|
"Respawn with Markers",
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *zRespawnStrings[] =
|
|
|
|
{
|
|
|
|
"At Random Locations",
|
|
|
|
"Close to Weapons",
|
|
|
|
"Away from Enemies",
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *zDiffStrings[] =
|
|
|
|
{
|
|
|
|
"STILL KICKING",
|
|
|
|
"PINK ON THE INSIDE",
|
|
|
|
"LIGHTLY BROILED",
|
|
|
|
"WELL DONE",
|
|
|
|
"EXTRA CRISPY",
|
|
|
|
};
|
|
|
|
|
|
|
|
char zUserMapName[16];
|
|
|
|
const char *zEpisodeNames[6];
|
|
|
|
const char *zLevelNames[6][16];
|
|
|
|
|
2019-10-25 22:32:49 +00:00
|
|
|
static FString MenuGameFuncs[NUMGAMEFUNCTIONS];
|
2019-09-19 22:42:45 +00:00
|
|
|
static char const *MenuGameFuncNone = " -None-";
|
|
|
|
static char const *pzGamefuncsStrings[NUMGAMEFUNCTIONS + 1];
|
|
|
|
static int nGamefuncsValues[NUMGAMEFUNCTIONS + 1];
|
|
|
|
static int nGamefuncsNum;
|
|
|
|
|
|
|
|
CGameMenu menuMain;
|
|
|
|
CGameMenu menuMainWithSave;
|
|
|
|
CGameMenu menuNetMain;
|
|
|
|
CGameMenu menuNetStart;
|
|
|
|
CGameMenu menuEpisode;
|
|
|
|
CGameMenu menuDifficulty;
|
|
|
|
CGameMenu menuOptionsOld;
|
|
|
|
CGameMenu menuControls;
|
|
|
|
CGameMenu menuMessages;
|
|
|
|
CGameMenu menuKeys;
|
|
|
|
CGameMenu menuSaveGame;
|
|
|
|
CGameMenu menuLoadGame;
|
|
|
|
CGameMenu menuLoading;
|
|
|
|
CGameMenu menuSounds;
|
|
|
|
CGameMenu menuQuit;
|
|
|
|
CGameMenu menuRestart;
|
|
|
|
CGameMenu menuCredits;
|
|
|
|
CGameMenu menuOrder;
|
|
|
|
CGameMenu menuPlayOnline;
|
|
|
|
CGameMenu menuParentalLock;
|
|
|
|
CGameMenu menuSorry;
|
|
|
|
CGameMenu menuSorry2;
|
|
|
|
CGameMenu menuNetwork;
|
|
|
|
CGameMenu menuNetworkHost;
|
|
|
|
CGameMenu menuNetworkJoin;
|
|
|
|
|
|
|
|
CGameMenuItemQAV itemBloodQAV("", 3, 160, 100, "BDRIP", true);
|
|
|
|
CGameMenuItemQAV itemCreditsQAV("", 3, 160, 100, "CREDITS", false, true);
|
|
|
|
CGameMenuItemQAV itemHelp3QAV("", 3, 160, 100, "HELP3", false, false);
|
|
|
|
CGameMenuItemQAV itemHelp3BQAV("", 3, 160, 100, "HELP3B", false, false);
|
|
|
|
CGameMenuItemQAV itemHelp4QAV("", 3, 160, 100, "HELP4", false, true);
|
|
|
|
CGameMenuItemQAV itemHelp5QAV("", 3, 160, 100, "HELP5", false, true);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemMainTitle("BLOOD", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemMain1("NEW GAME", 1, 0, 45, 320, 1, &menuEpisode, -1, NULL, 0);
|
|
|
|
//CGameMenuItemChain itemMain2("PLAY ONLINE", 1, 0, 65, 320, 1, &menuPlayOnline, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMain2("MULTIPLAYER", 1, 0, 65, 320, 1, &menuNetwork, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMain3("OPTIONS", 1, 0, 85, 320, 1, &menuOptions, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMain4("LOAD GAME", 1, 0, 105, 320, 1, &menuLoadGame, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMain5("HELP", 1, 0, 125, 320, 1, &menuOrder, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMain6("CREDITS", 1, 0, 145, 320, 1, &menuCredits, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMain7("QUIT", 1, 0, 165, 320, 1, &menuQuit, -1, NULL, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemMainSaveTitle("BLOOD", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemMainSave1("NEW GAME", 1, 0, 45, 320, 1, &menuEpisode, -1, NULL, 0);
|
|
|
|
//CGameMenuItemChain itemMainSave2("PLAY ONLINE", 1, 0, 60, 320, 1, &menuPlayOnline, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMainSave2("OPTIONS", 1, 0, 60, 320, 1, &menuOptions, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMainSave3("SAVE GAME", 1, 0, 75, 320, 1, &menuSaveGame, -1, SaveGameProcess, 0);
|
|
|
|
CGameMenuItemChain itemMainSave4("LOAD GAME", 1, 0, 90, 320, 1, &menuLoadGame, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMainSave5("HELP", 1, 0, 105, 320, 1, &menuOrder, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMainSave6("CREDITS", 1, 0, 120, 320, 1, &menuCredits, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMainSave7("END GAME", 1, 0, 135, 320, 1, &menuRestart, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemMainSave8("QUIT", 1, 0, 150, 320, 1, &menuQuit, -1, NULL, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemEpisodesTitle("EPISODES", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain7F2F0 itemEpisodes[6];
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemDifficultyTitle("DIFFICULTY", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemDifficulty1("STILL KICKING", 1, 0, 60, 320, 1, NULL, -1, SetDifficultyAndStart, 0);
|
|
|
|
CGameMenuItemChain itemDifficulty2("PINK ON THE INSIDE", 1, 0, 80, 320, 1, NULL, -1, SetDifficultyAndStart, 1);
|
|
|
|
CGameMenuItemChain itemDifficulty3("LIGHTLY BROILED", 1, 0, 100, 320, 1, NULL, -1, SetDifficultyAndStart, 2);
|
|
|
|
CGameMenuItemChain itemDifficulty4("WELL DONE", 1, 0, 120, 320, 1, NULL, -1, SetDifficultyAndStart, 3);
|
|
|
|
CGameMenuItemChain itemDifficulty5("EXTRA CRISPY", 1, 0, 140, 320, 1, 0, -1, SetDifficultyAndStart, 4);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsOldTitle("OPTIONS", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemOption1("CONTROLS...", 3, 0, 40, 320, 1, &menuControls, -1, NULL, 0);
|
|
|
|
CGameMenuItemSlider sliderDetail("DETAIL:", 3, 66, 50, 180, gDetail, 0, 4, 1, SetDetail, -1, -1);
|
|
|
|
CGameMenuItemSlider sliderGamma("GAMMA:", 3, 66, 60, 180, gGamma, 0, 15, 2, SetGamma, -1, -1);
|
2019-10-22 00:01:05 +00:00
|
|
|
CGameMenuItemSlider sliderMusic("MUSIC:", 3, 66, 70, 180, mus_volume, 0, 256, 48, SetMusicVol, -1, -1);
|
|
|
|
CGameMenuItemSlider sliderSound("SOUND:", 3, 66, 80, 180, snd_fxvolume, 0, 256, 48, SetSoundVol, -1, -1);
|
2019-10-22 15:47:24 +00:00
|
|
|
//CGameMenuItemSlider sliderCDAudio("CD AUDIO:", 3, 66, 90, 180, CDVolume, 0, 256, 48, SetCDVol, -1, -1);
|
2019-10-22 00:01:05 +00:00
|
|
|
CGameMenuItemZBool bool3DAudio("3D AUDIO:", 3, 66, 100, 180, snd_doppler, SetDoppler, NULL, NULL);
|
2019-10-21 21:29:48 +00:00
|
|
|
CGameMenuItemZBool boolCrosshair("CROSSHAIR:", 3, 66, 110, 180, cl_crosshair, SetCrosshair, NULL, NULL);
|
2019-10-22 00:15:24 +00:00
|
|
|
CGameMenuItemZBool boolShowWeapons("SHOW WEAPONS:", 3, 66, 120, 180, cl_showweapon, SetShowWeapons, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolSlopeTilting("SLOPE TILTING:", 3, 66, 130, 180, cl_slopetilting, SetSlopeTilting, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolViewBobbing("VIEW BOBBING:", 3, 66, 140, 180, cl_viewvbob, SetViewBobbing, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolViewSwaying("VIEW SWAYING:", 3, 66, 150, 180, cl_viewhbob, SetViewSwaying, NULL, NULL);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItem7EE34 itemOption2("VIDEO MODE...", 3, 0, 160, 320, 1);
|
|
|
|
CGameMenuItemChain itemChainParentalLock("PARENTAL LOCK", 3, 0, 170, 320, 1, &menuParentalLock, -1, NULL, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemControlsTitle("CONTROLS", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemSliderFloat sliderMouseSpeed("Mouse Sensitivity:", 1, 10, 70, 300, CONTROL_MouseSensitivity, 0.5f, 16.f, 0.5f, SetMouseSensitivity, -1,-1);
|
2019-10-22 22:59:01 +00:00
|
|
|
CGameMenuItemZBool boolMouseFlipped("Invert Mouse Aim:", 1, 10, 90, 300, in_mouseflip, SetMouseAimFlipped, NULL, NULL);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItemSlider sliderTurnSpeed("Key Turn Speed:", 1, 10, 110, 300, gTurnSpeed, 64, 128, 4, SetTurnSpeed, -1, -1);
|
|
|
|
CGameMenuItemChain itemChainKeyList("Configure Keys...", 1, 0, 130, 320, 1, &menuKeys, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemChainKeyReset("Reset Keys (default)...", 1, 0, 150, 320, 1, &menuKeys, -1, ResetKeys, 0);
|
|
|
|
CGameMenuItemChain itemChainKeyResetClassic("Reset Keys (classic)...", 1, 0, 170, 320, 1, &menuKeys, -1, ResetKeysClassic, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemMessagesTitle("MESSAGES", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZBool boolMessages("MESSAGES:", 3, 66, 70, 180, 0, SetMessages, NULL, NULL);
|
|
|
|
CGameMenuItemSlider sliderMsgCount("MESSAGE COUNT:", 3, 66, 80, 180, gMessageCount, 1, 16, 1, NULL, -1, -1);
|
|
|
|
CGameMenuItemSlider sliderMsgTime("MESSAGE TIME:", 3, 66, 90, 180, gMessageTime, 1, 8, 1, NULL, -1, -1);
|
|
|
|
CGameMenuItemZBool boolMsgFont("LARGE FONT:", 3, 66, 100, 180, 0, 0, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolMsgIncoming("INCOMING:", 3, 66, 110, 180, 0, 0, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolMsgSelf("SELF PICKUP:", 3, 66, 120, 180, 0, 0, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolMsgOther("OTHER PICKUP:", 3, 66, 130, 180, 0, 0, NULL, NULL);
|
|
|
|
CGameMenuItemZBool boolMsgRespawn("RESPAWN:", 3, 66, 140, 180, 0, 0, NULL, NULL);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemKeysTitle("KEY SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemKeyList itemKeyList("", 3, 56, 40, 200, 16, NUMGAMEFUNCTIONS, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemSaveTitle("Save Game", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame1(NULL, 3, 20, 60, 320, strRestoreGameStrings[0], 16, 1, SaveGame, 0);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame2(NULL, 3, 20, 70, 320, strRestoreGameStrings[1], 16, 1, SaveGame, 1);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame3(NULL, 3, 20, 80, 320, strRestoreGameStrings[2], 16, 1, SaveGame, 2);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame4(NULL, 3, 20, 90, 320, strRestoreGameStrings[3], 16, 1, SaveGame, 3);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame5(NULL, 3, 20, 100, 320, strRestoreGameStrings[4], 16, 1, SaveGame, 4);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame6(NULL, 3, 20, 110, 320, strRestoreGameStrings[5], 16, 1, SaveGame, 5);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame7(NULL, 3, 20, 120, 320, strRestoreGameStrings[6], 16, 1, SaveGame, 6);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame8(NULL, 3, 20, 130, 320, strRestoreGameStrings[7], 16, 1, SaveGame, 7);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame9(NULL, 3, 20, 140, 320, strRestoreGameStrings[8], 16, 1, SaveGame, 8);
|
|
|
|
CGameMenuItemZEditBitmap itemSaveGame10(NULL, 3, 20, 150, 320, strRestoreGameStrings[9], 16, 1, SaveGame, 9);
|
|
|
|
CGameMenuItemBitmapLS itemSaveGamePic(NULL, 3, 0, 0, 2050);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemLoadTitle("Load Game", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame1(NULL, 3, 20, 60, 320, strRestoreGameStrings[0], 16, 1, LoadGame, 0);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame2(NULL, 3, 20, 70, 320, strRestoreGameStrings[1], 16, 1, LoadGame, 1);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame3(NULL, 3, 20, 80, 320, strRestoreGameStrings[2], 16, 1, LoadGame, 2);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame4(NULL, 3, 20, 90, 320, strRestoreGameStrings[3], 16, 1, LoadGame, 3);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame5(NULL, 3, 20, 100, 320, strRestoreGameStrings[4], 16, 1, LoadGame, 4);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame6(NULL, 3, 20, 110, 320, strRestoreGameStrings[5], 16, 1, LoadGame, 5);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame7(NULL, 3, 20, 120, 320, strRestoreGameStrings[6], 16, 1, LoadGame, 6);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame8(NULL, 3, 20, 130, 320, strRestoreGameStrings[7], 16, 1, LoadGame, 7);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame9(NULL, 3, 20, 140, 320, strRestoreGameStrings[8], 16, 1, LoadGame, 8);
|
|
|
|
CGameMenuItemZEditBitmap itemLoadGame10(NULL, 3, 20, 150, 320, strRestoreGameStrings[9], 16, 1, LoadGame, 9);
|
|
|
|
CGameMenuItemBitmapLS itemLoadGamePic(NULL, 3, 0, 0, 2518);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemNetStartTitle("MULTIPLAYER", 1, 160, 20, 2038);
|
2019-09-20 10:11:07 +00:00
|
|
|
CGameMenuItemZCycle itemNetStart1("GAME:", 3, 66, 60, 180, 0, 0, zNetGameTypes, 3, 0);
|
|
|
|
CGameMenuItemZCycle itemNetStart2("EPISODE:", 3, 66, 70, 180, 0, SetupNetLevels, NULL, 0, 0);
|
|
|
|
CGameMenuItemZCycle itemNetStart3("LEVEL:", 3, 66, 80, 180, 0, NULL, NULL, 0, 0);
|
|
|
|
CGameMenuItemZCycle itemNetStart4("DIFFICULTY:", 3, 66, 90, 180, 0, 0, zDiffStrings, 5, 0);
|
|
|
|
CGameMenuItemZCycle itemNetStart5("MONSTERS:", 3, 66, 100, 180, 0, 0, zMonsterStrings, 3, 0);
|
|
|
|
CGameMenuItemZCycle itemNetStart6("WEAPONS:", 3, 66, 110, 180, 0, 0, zWeaponStrings, 4, 0);
|
|
|
|
CGameMenuItemZCycle itemNetStart7("ITEMS:", 3, 66, 120, 180, 0, 0, zItemStrings, 3, 0);
|
|
|
|
CGameMenuItemZBool itemNetStart8("FRIENDLY FIRE:", 3, 66, 130, 180, true, 0, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemNetStart9("KEEP KEYS ON RESPAWN:", 3, 66, 140, 180, false, 0, NULL, NULL);
|
2019-09-22 07:18:04 +00:00
|
|
|
CGameMenuItemZBool itemNetStart10("V1.0x WEAPONS BALANCE:", 3, 66, 150, 180, false, 0, NULL, NULL);
|
|
|
|
CGameMenuItemZEdit itemNetStart11("USER MAP:", 3, 66, 160, 180, zUserMapName, 13, 0, NULL, 0);
|
|
|
|
CGameMenuItemChain itemNetStart12("START GAME", 1, 66, 175, 280, 0, 0, -1, StartNetGame, 0);
|
2019-09-19 22:42:45 +00:00
|
|
|
|
|
|
|
CGameMenuItemText itemLoadingText("LOADING...", 1, 160, 100, 1);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemSoundsTitle("SOUNDS", 1, 160, 20, 2038);
|
2019-10-22 00:01:05 +00:00
|
|
|
CGameMenuItemSlider itemSoundsMusic("MUSIC:", 3, 40, 60, 180, mus_volume, 0, 256, 48, SetMusicVol, -1, -1);
|
|
|
|
CGameMenuItemSlider itemSoundsSound("SOUND:", 3, 40, 70, 180, snd_fxvolume, 0, 256, 48, SetSoundVol, -1, -1);
|
2019-10-22 15:47:24 +00:00
|
|
|
//CGameMenuItemSlider itemSoundsCDAudio("CD AUDIO:", 3, 40, 80, 180, CDVolume, 0, 256, 48, SetCDVol, -1, -1);
|
2019-10-22 00:01:05 +00:00
|
|
|
CGameMenuItemZBool itemSounds3DAudio("3D SOUND:", 3, 40, 90, 180, snd_doppler, SetDoppler, NULL, NULL);
|
2019-09-19 22:42:45 +00:00
|
|
|
|
|
|
|
CGameMenuItemTitle itemQuitTitle("QUIT", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemText itemQuitText1("Do you really want to quit?", 0, 160, 100, 1);
|
|
|
|
CGameMenuItemYesNoQuit itemQuitYesNo("[Y/N]", 0, 20, 110, 280, 1, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemRestartTitle("RESTART GAME", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemText itemRestartText1("Do you really want to restart game?", 0, 160, 100, 1);
|
|
|
|
CGameMenuItemYesNoQuit itemRestartYesNo("[Y/N]", 0, 20, 110, 280, 1, 1);
|
|
|
|
|
|
|
|
CGameMenuItemPicCycle itemCreditsPicCycle(0, 0, NULL, NULL, 0, 0);
|
|
|
|
CGameMenuItemPicCycle itemOrderPicCycle(0, 0, NULL, NULL, 0, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemParentalLockTitle("PARENTAL LOCK", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZBool itemParentalLockToggle("LOCK:", 3, 66, 70, 180, 0, SetParentalLock, NULL, NULL);
|
|
|
|
CGameMenuItemPassword itemParentalLockPassword("SET PASSWORD:", 3, 160, 80);
|
|
|
|
|
|
|
|
CGameMenuItemPicCycle itemSorryPicCycle(0, 0, NULL, NULL, 0, 0);
|
|
|
|
CGameMenuItemText itemSorryText1("Loading and saving games", 0, 160, 90, 1);
|
|
|
|
CGameMenuItemText itemSorryText2("not supported", 0, 160, 100, 1);
|
|
|
|
CGameMenuItemText itemSorryText3("in this demo version of Blood.", 0, 160, 110, 1);
|
|
|
|
|
|
|
|
CGameMenuItemText itemSorry2Text1("Buy the complete version of", 0, 160, 90, 1);
|
|
|
|
CGameMenuItemText itemSorry2Text2("Blood for three new episodes", 0, 160, 100, 1);
|
|
|
|
CGameMenuItemText itemSorry2Text3("plus eight BloodBath-only levels!", 0, 160, 110, 1);
|
|
|
|
|
|
|
|
CGameMenuItemTitle unk_26E06C(" ONLINE ", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItem7EA1C unk_26E090("DWANGO", 1, 0, 45, 320, "matt", "DWANGO", 1, -1, NULL, 0);
|
|
|
|
CGameMenuItem7EA1C unk_26E0E8("RTIME", 1, 0, 65, 320, "matt", "RTIME", 1, -1, NULL, 0);
|
|
|
|
CGameMenuItem7EA1C unk_26E140("HEAT", 1, 0, 85, 320, "matt", "HEAT", 1, -1, NULL, 0);
|
|
|
|
CGameMenuItem7EA1C unk_26E198("KALI", 1, 0, 105, 320, "matt", "KALI", 1, -1, NULL, 0);
|
|
|
|
CGameMenuItem7EA1C unk_26E1F0("MPATH", 1, 0, 125, 320, "matt", "MPATH", 1, -1, NULL, 0);
|
|
|
|
CGameMenuItem7EA1C unk_26E248("TEN", 1, 0, 145, 320, "matt", "TEN", 1, -1, TenProcess, 0);
|
|
|
|
|
|
|
|
|
|
|
|
// static int32_t newresolution, newrendermode, newfullscreen, newvsync;
|
|
|
|
|
|
|
|
enum resflags_t {
|
|
|
|
RES_FS = 0x1,
|
|
|
|
RES_WIN = 0x2,
|
|
|
|
};
|
|
|
|
|
|
|
|
#define MAXRESOLUTIONSTRINGLENGTH 19
|
|
|
|
|
|
|
|
struct resolution_t {
|
|
|
|
int32_t xdim, ydim;
|
|
|
|
int32_t flags;
|
|
|
|
int32_t bppmax;
|
|
|
|
char name[MAXRESOLUTIONSTRINGLENGTH];
|
|
|
|
};
|
|
|
|
|
|
|
|
resolution_t gResolution[MAXVALIDMODES];
|
|
|
|
int gResolutionNum;
|
|
|
|
const char *gResolutionName[MAXVALIDMODES];
|
|
|
|
|
|
|
|
CGameMenu menuOptions;
|
|
|
|
CGameMenu menuOptionsGame;
|
|
|
|
CGameMenu menuOptionsDisplay;
|
|
|
|
CGameMenu menuOptionsDisplayColor;
|
|
|
|
CGameMenu menuOptionsDisplayMode;
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
CGameMenu menuOptionsDisplayPolymost;
|
|
|
|
#endif
|
|
|
|
CGameMenu menuOptionsSound;
|
|
|
|
CGameMenu menuOptionsPlayer;
|
|
|
|
CGameMenu menuOptionsControl;
|
|
|
|
|
|
|
|
void SetupOptionsSound(CGameMenuItemChain *pItem);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsTitle("OPTIONS", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemOptionsChainGame("GAME SETUP", 1, 0, 50, 320, 1, &menuOptionsGame, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsChainDisplay("DISPLAY SETUP", 1, 0, 70, 320, 1, &menuOptionsDisplay, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsChainSound("SOUND SETUP", 1, 0, 90, 320, 1, &menuOptionsSound, -1, SetupOptionsSound, 0);
|
|
|
|
CGameMenuItemChain itemOptionsChainPlayer("PLAYER SETUP", 1, 0, 110, 320, 1, &menuOptionsPlayer, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsChainControl("CONTROL SETUP", 1, 0, 130, 320, 1, &menuOptionsControl, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsChainOld("OLD MENU", 1, 0, 170, 320, 1, &menuOptionsOld, -1, NULL, 0);
|
|
|
|
|
|
|
|
const char *pzAutoAimStrings[] = {
|
|
|
|
"NEVER",
|
|
|
|
"ALWAYS",
|
|
|
|
"HITSCAN ONLY"
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *pzWeaponSwitchStrings[] = {
|
|
|
|
"NEVER",
|
|
|
|
"IF NEW",
|
|
|
|
"BY RATING"
|
|
|
|
};
|
|
|
|
|
|
|
|
void SetAutoAim(CGameMenuItemZCycle *);
|
|
|
|
void SetLevelStats(CGameMenuItemZBool *);
|
|
|
|
void SetPowerupDuration(CGameMenuItemZBool *);
|
|
|
|
void SetShowMapTitle(CGameMenuItemZBool*);
|
|
|
|
void SetWeaponSwitch(CGameMenuItemZCycle *pItem);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsGameTitle("GAME SETUP", 1, 160, 20, 2038);
|
2019-09-21 11:02:17 +00:00
|
|
|
|
|
|
|
///////////////
|
|
|
|
CGameMenuItemZBool itemOptionsGameBoolWeaponsV10X("V1.0x WEAPONS BALANCE:", 3, 66, 130, 180, gWeaponsV10x, SetWeaponsV10X, NULL, NULL);
|
|
|
|
///////////////////
|
|
|
|
|
2019-10-22 00:15:24 +00:00
|
|
|
CGameMenuItemZBool itemOptionsGameBoolShowWeapons("SHOW WEAPONS:", 3, 66, 70, 180, cl_showweapon, SetShowWeapons, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsGameBoolSlopeTilting("SLOPE TILTING:", 3, 66, 80, 180, cl_slopetilting, SetSlopeTilting, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsGameBoolViewBobbing("VIEW BOBBING:", 3, 66, 90, 180, cl_viewvbob, SetViewBobbing, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsGameBoolViewSwaying("VIEW SWAYING:", 3, 66, 100, 180, cl_viewhbob, SetViewSwaying, NULL, NULL);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItemZCycle itemOptionsGameBoolAutoAim("AUTO AIM:", 3, 66, 110, 180, 0, SetAutoAim, pzAutoAimStrings, ARRAY_SSIZE(pzAutoAimStrings), 0);
|
|
|
|
CGameMenuItemZCycle itemOptionsGameWeaponSwitch("EQUIP PICKUPS:", 3, 66, 120, 180, 0, SetWeaponSwitch, pzWeaponSwitchStrings, ARRAY_SSIZE(pzWeaponSwitchStrings), 0);
|
|
|
|
CGameMenuItemChain itemOptionsGameChainParentalLock("PARENTAL LOCK", 3, 0, 120, 320, 1, &menuParentalLock, -1, NULL, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsDisplayTitle("DISPLAY SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemOptionsDisplayColor("COLOR CORRECTION", 3, 66, 60, 180, 0, &menuOptionsDisplayColor, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsDisplayMode("VIDEO MODE", 3, 66, 70, 180, 0, &menuOptionsDisplayMode, -1, SetupVideoModeMenu, 0);
|
2019-10-21 21:29:48 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolCrosshair("CROSSHAIR:", 3, 66, 80, 180, cl_crosshair, SetCrosshair, NULL, NULL);
|
2019-10-22 22:30:51 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolCenterHoriz("CENTER HORIZON LINE:", 3, 66, 90, 180, r_horizcenter, SetCenterHoriz, NULL, NULL);
|
2019-10-22 22:20:27 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolLevelStats("LEVEL STATS:", 3, 66, 100, 180, hud_stats, SetLevelStats, NULL, NULL);
|
2019-10-23 23:41:55 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolPowerupDuration("POWERUP DURATION:", 3, 66, 110, 180, hud_powerupduration, SetPowerupDuration, NULL, NULL);
|
2019-10-22 22:20:27 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolShowMapTitle("MAP TITLE:", 3, 66, 120, 180, hud_showmapname, SetShowMapTitle, NULL, NULL);
|
2019-10-23 23:41:55 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolMessages("MESSAGES:", 3, 66, 130, 180, hud_messages, SetMessages, NULL, NULL);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItemZBool itemOptionsDisplayBoolWidescreen("WIDESCREEN:", 3, 66, 140, 180, r_usenewaspect, SetWidescreen, NULL, NULL);
|
2019-10-22 22:20:27 +00:00
|
|
|
CGameMenuItemSlider itemOptionsDisplayFOV("FOV:", 3, 66, 150, 180, &r_fov.Value, 75, 140, 5, SetFOV, -1, -1, kMenuSliderValue);
|
2019-09-19 22:42:45 +00:00
|
|
|
#ifdef USE_OPENGL
|
|
|
|
CGameMenuItemChain itemOptionsDisplayPolymost("POLYMOST SETUP", 3, 66, 160, 180, 0, &menuOptionsDisplayPolymost, -1, SetupVideoPolymostMenu, 0);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
const char *pzRendererStrings[] = {
|
|
|
|
"CLASSIC",
|
|
|
|
"POLYMOST"
|
|
|
|
};
|
|
|
|
|
|
|
|
const int nRendererValues[] = {
|
|
|
|
REND_CLASSIC,
|
|
|
|
REND_POLYMOST
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *pzVSyncStrings[] = {
|
|
|
|
"ADAPTIVE",
|
|
|
|
"OFF",
|
|
|
|
"ON"
|
|
|
|
};
|
|
|
|
|
|
|
|
const int nVSyncValues[] = {
|
|
|
|
-1,
|
|
|
|
0,
|
|
|
|
1
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *pzFrameLimitStrings[] = {
|
|
|
|
"30 FPS",
|
|
|
|
"60 FPS",
|
|
|
|
"75 FPS",
|
|
|
|
"100 FPS",
|
|
|
|
"120 FPS",
|
|
|
|
"144 FPS",
|
|
|
|
"165 FPS",
|
|
|
|
"240 FPS"
|
|
|
|
};
|
|
|
|
|
|
|
|
const int nFrameLimitValues[] = {
|
|
|
|
30,
|
|
|
|
60,
|
|
|
|
75,
|
|
|
|
100,
|
|
|
|
120,
|
|
|
|
144,
|
|
|
|
165,
|
|
|
|
240
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void PreDrawVideoModeMenu(CGameMenuItem *);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsDisplayModeTitle("VIDEO MODE", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZCycle itemOptionsDisplayModeResolution("RESOLUTION:", 3, 66, 60, 180, 0, NULL, NULL, 0, 0, true);
|
|
|
|
CGameMenuItemZCycle itemOptionsDisplayModeRenderer("RENDERER:", 3, 66, 70, 180, 0, NULL, pzRendererStrings, 2, 0);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayModeFullscreen("FULLSCREEN:", 3, 66, 80, 180, 0, NULL, NULL, NULL);
|
|
|
|
CGameMenuItemZCycle itemOptionsDisplayModeVSync("VSYNC:", 3, 66, 90, 180, 0, NULL, pzVSyncStrings, 3, 0);
|
|
|
|
CGameMenuItemChain itemOptionsDisplayModeApply("APPLY CHANGES", 3, 66, 125, 180, 0, NULL, 0, SetVideoMode, 0);
|
|
|
|
|
|
|
|
void PreDrawDisplayColor(CGameMenuItem *);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsDisplayColorTitle("COLOR CORRECTION", 1, 160, 20, -1);
|
|
|
|
CGameMenuItemSliderFloat itemOptionsDisplayColorGamma("GAMMA:", 3, 66, 140, 180, &g_videoGamma, 0.3f, 4.f, 0.1f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue);
|
|
|
|
CGameMenuItemSliderFloat itemOptionsDisplayColorContrast("CONTRAST:", 3, 66, 150, 180, &g_videoContrast, 0.1f, 2.7f, 0.05f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue);
|
|
|
|
CGameMenuItemSliderFloat itemOptionsDisplayColorBrightness("BRIGHTNESS:", 3, 66, 160, 180, &g_videoBrightness, -0.8f, 0.8f, 0.05f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue);
|
2019-10-22 23:30:43 +00:00
|
|
|
CGameMenuItemSliderFloat itemOptionsDisplayColorVisibility("VISIBILITY:", 3, 66, 170, 180, &r_ambientlight.Value, 0.125f, 4.f, 0.125f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItemChain itemOptionsDisplayColorReset("RESET TO DEFAULTS", 3, 66, 180, 180, 0, NULL, 0, ResetVideoColor, 0);
|
|
|
|
|
|
|
|
const char *pzTextureModeStrings[] = {
|
|
|
|
"CLASSIC",
|
|
|
|
"FILTERED"
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
int nTextureModeValues[] = {
|
|
|
|
TEXFILTER_OFF,
|
|
|
|
TEXFILTER_ON
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
const char *pzAnisotropyStrings[] = {
|
|
|
|
"MAX",
|
|
|
|
"NONE",
|
|
|
|
"2X",
|
|
|
|
"4X",
|
|
|
|
"8X",
|
|
|
|
"16X"
|
|
|
|
};
|
|
|
|
|
|
|
|
int nAnisotropyValues[] = {
|
|
|
|
0,
|
|
|
|
1,
|
|
|
|
2,
|
|
|
|
4,
|
|
|
|
8,
|
|
|
|
16
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *pzTexQualityStrings[] = {
|
|
|
|
"FULL",
|
|
|
|
"HALF",
|
|
|
|
"BARF"
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void UpdateTextureMode(CGameMenuItemZCycle *pItem);
|
|
|
|
void UpdateAnisotropy(CGameMenuItemZCycle *pItem);
|
|
|
|
void UpdateTrueColorTextures(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateTexQuality(CGameMenuItemZCycle *pItem);
|
|
|
|
void UpdatePreloadCache(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateDetailTex(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateGlowTex(CGameMenuItemZBool *pItem);
|
|
|
|
void Update3DModels(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateDeliriumBlur(CGameMenuItemZBool *pItem);
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
void PreDrawDisplayPolymost(CGameMenuItem *pItem);
|
|
|
|
CGameMenuItemTitle itemOptionsDisplayPolymostTitle("POLYMOST SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZCycle itemOptionsDisplayPolymostTextureMode("TEXTURE MODE:", 3, 66, 60, 180, 0, UpdateTextureMode, pzTextureModeStrings, 2, 0);
|
|
|
|
CGameMenuItemZCycle itemOptionsDisplayPolymostAnisotropy("ANISOTROPY:", 3, 66, 70, 180, 0, UpdateAnisotropy, pzAnisotropyStrings, 6, 0);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayPolymostTrueColorTextures("TRUE COLOR TEXTURES:", 3, 66, 80, 180, 0, UpdateTrueColorTextures, NULL, NULL);
|
|
|
|
CGameMenuItemZCycle itemOptionsDisplayPolymostTexQuality("GL TEXTURE QUALITY:", 3, 66, 90, 180, 0, UpdateTexQuality, pzTexQualityStrings, 3, 0);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayPolymostPreloadCache("PRE-LOAD MAP TEXTURES:", 3, 66, 100, 180, 0, UpdatePreloadCache, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayPolymostDetailTex("DETAIL TEXTURES:", 3, 66, 120, 180, 0, UpdateDetailTex, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayPolymostGlowTex("GLOW TEXTURES:", 3, 66, 130, 180, 0, UpdateGlowTex, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayPolymost3DModels("3D MODELS:", 3, 66, 140, 180, 0, Update3DModels, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsDisplayPolymostDeliriumBlur("DELIRIUM EFFECT BLUR:", 3, 66, 150, 180, 0, UpdateDeliriumBlur, NULL, NULL);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void UpdateSoundToggle(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateMusicToggle(CGameMenuItemZBool *pItem);
|
|
|
|
void Update3DToggle(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateCDToggle(CGameMenuItemZBool *pItem);
|
|
|
|
void UpdateSoundVolume(CGameMenuItemSlider *pItem);
|
|
|
|
void UpdateMusicVolume(CGameMenuItemSlider *pItem);
|
|
|
|
void UpdateSoundRate(CGameMenuItemZCycle *pItem);
|
|
|
|
void UpdateNumVoices(CGameMenuItemSlider *pItem);
|
|
|
|
void UpdateMusicDevice(CGameMenuItemZCycle *pItem);
|
|
|
|
void SetSound(CGameMenuItemChain *pItem);
|
|
|
|
void PreDrawSound(CGameMenuItem *pItem);
|
|
|
|
const char *pzSoundRateStrings[] = {
|
|
|
|
"22050HZ",
|
|
|
|
"44100HZ",
|
|
|
|
"48000HZ"
|
|
|
|
};
|
|
|
|
|
|
|
|
int nSoundRateValues[] = {
|
|
|
|
22050,
|
|
|
|
44100,
|
|
|
|
48000
|
|
|
|
};
|
|
|
|
|
2019-10-24 13:56:42 +00:00
|
|
|
int nMusicDeviceValues[] = {
|
|
|
|
ASS_OPL3,
|
|
|
|
#ifdef _WIN32
|
|
|
|
ASS_WinMM,
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
const char *pzMusicDeviceStrings[] = {
|
2019-10-24 13:56:42 +00:00
|
|
|
"OPL3(SB/ADLIB)",
|
|
|
|
#ifdef _WIN32
|
2019-09-19 22:42:45 +00:00
|
|
|
"SYSTEM MIDI",
|
2019-10-24 13:56:42 +00:00
|
|
|
#endif
|
2019-09-19 22:42:45 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsSoundTitle("SOUND SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZBool itemOptionsSoundSoundToggle("SOUND:", 3, 66, 60, 180, false, UpdateSoundToggle, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsSoundMusicToggle("MUSIC:", 3, 66, 70, 180, false, UpdateMusicToggle, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsSound3DToggle("3D AUDIO:", 3, 66, 80, 180, false, Update3DToggle, NULL, NULL);
|
2019-10-22 00:01:05 +00:00
|
|
|
CGameMenuItemSlider itemOptionsSoundSoundVolume("SOUND VOLUME:", 3, 66, 90, 180, &snd_fxvolume.Value, 0, 256, 48, UpdateSoundVolume, -1, -1, kMenuSliderPercent);
|
|
|
|
CGameMenuItemSlider itemOptionsSoundMusicVolume("MUSIC VOLUME:", 3, 66, 100, 180, &mus_volume.Value, 0, 256, 48, UpdateMusicVolume, -1, -1, kMenuSliderPercent);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItemZCycle itemOptionsSoundSampleRate("SAMPLE RATE:", 3, 66, 110, 180, 0, UpdateSoundRate, pzSoundRateStrings, 3, 0);
|
2019-10-22 00:01:05 +00:00
|
|
|
CGameMenuItemSlider itemOptionsSoundNumVoices("VOICES:", 3, 66, 120, 180, snd_numvoices, 16, 256, 16, UpdateNumVoices, -1, -1, kMenuSliderValue);
|
2019-09-19 22:42:45 +00:00
|
|
|
CGameMenuItemZBool itemOptionsSoundCDToggle("REDBOOK AUDIO:", 3, 66, 130, 180, false, UpdateCDToggle, NULL, NULL);
|
|
|
|
CGameMenuItemZCycle itemOptionsSoundMusicDevice("MUSIC DEVICE:", 3, 66, 140, 180, 0, UpdateMusicDevice, pzMusicDeviceStrings, 2, 0);
|
|
|
|
CGameMenuItemChain itemOptionsSoundApplyChanges("APPLY CHANGES", 3, 66, 150, 180, 0, NULL, 0, SetSound, 0);
|
|
|
|
|
|
|
|
|
|
|
|
void UpdatePlayerName(CGameMenuItemZEdit *pItem, CGameMenuEvent *pEvent);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsPlayerTitle("PLAYER SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZEdit itemOptionsPlayerName("PLAYER NAME:", 3, 66, 60, 180, szPlayerName, MAXPLAYERNAME, 0, UpdatePlayerName, 0);
|
|
|
|
|
|
|
|
CGameMenu menuOptionsControlKeyboard;
|
|
|
|
CGameMenu menuOptionsControlMouse;
|
|
|
|
CGameMenu menuOptionsControlMouseButtonAssignment;
|
|
|
|
|
|
|
|
void SetupMouseMenu(CGameMenuItemChain *pItem);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsControlTitle("CONTROL SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemOptionsControlKeyboard("KEYBOARD SETUP", 1, 0, 60, 320, 1, &menuOptionsControlKeyboard, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsControlMouse("MOUSE SETUP", 1, 0, 80, 320, 1, &menuOptionsControlMouse, -1, SetupMouseMenu, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsControlKeyboardTitle("KEYBOARD SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemOptionsControlKeyboardList("Configure Keys...", 1, 0, 60, 320, 1, &menuKeys, -1, NULL, 0);
|
|
|
|
CGameMenuItemChain itemOptionsControlKeyboardReset("Reset Keys (default)...", 1, 0, 80, 320, 1, &menuKeys, -1, ResetKeys, 0);
|
|
|
|
CGameMenuItemChain itemOptionsControlKeyboardResetClassic("Reset Keys (classic)...", 1, 0, 100, 320, 1, &menuKeys, -1, ResetKeysClassic, 0);
|
|
|
|
|
|
|
|
void SetMouseFilterInput(CGameMenuItemZBool *pItem);
|
|
|
|
void SetMouseAimMode(CGameMenuItemZBool *pItem);
|
|
|
|
void SetMouseVerticalAim(CGameMenuItemZBool *pItem);
|
|
|
|
void SetMouseXScale(CGameMenuItemSlider *pItem);
|
|
|
|
void SetMouseYScale(CGameMenuItemSlider *pItem);
|
|
|
|
void SetMouseDigitalAxis(CGameMenuItemZCycle *pItem);
|
|
|
|
|
|
|
|
void PreDrawControlMouse(CGameMenuItem *pItem);
|
|
|
|
|
|
|
|
void SetupMouseButtonMenu(CGameMenuItemChain *pItem);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemOptionsControlMouseTitle("MOUSE SETUP", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemOptionsControlMouseButton("BUTTON ASSIGNMENT", 3, 66, 60, 180, 0, &menuOptionsControlMouseButtonAssignment, 0, SetupMouseButtonMenu, 0);
|
|
|
|
CGameMenuItemSliderFloat itemOptionsControlMouseSensitivity("SENSITIVITY:", 3, 66, 70, 180, &CONTROL_MouseSensitivity, 0.5f, 16.f, 0.5f, SetMouseSensitivity, -1, -1, kMenuSliderValue);
|
|
|
|
CGameMenuItemZBool itemOptionsControlMouseAimFlipped("INVERT AIMING:", 3, 66, 80, 180, false, SetMouseAimFlipped, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsControlMouseFilterInput("FILTER INPUT:", 3, 66, 90, 180, false, SetMouseFilterInput, NULL, NULL);
|
|
|
|
CGameMenuItemZBool itemOptionsControlMouseAimMode("AIMING TYPE:", 3, 66, 100, 180, false, SetMouseAimMode, "HOLD", "TOGGLE");
|
|
|
|
CGameMenuItemZBool itemOptionsControlMouseVerticalAim("VERTICAL AIMING:", 3, 66, 110, 180, false, SetMouseVerticalAim, NULL, NULL);
|
|
|
|
CGameMenuItemSlider itemOptionsControlMouseXScale("X-SCALE:", 3, 66, 120, 180, (int*)&MouseAnalogueScale[0], 0, 65536, 1024, SetMouseXScale, -1, -1, kMenuSliderQ16);
|
|
|
|
CGameMenuItemSlider itemOptionsControlMouseYScale("Y-SCALE:", 3, 66, 130, 180, (int*)&MouseAnalogueScale[1], 0, 65536, 1024, SetMouseYScale, -1, -1, kMenuSliderQ16);
|
|
|
|
CGameMenuItemZCycle itemOptionsControlMouseDigitalUp("DIGITAL UP", 3, 66, 140, 180, 0, SetMouseDigitalAxis, NULL, 0, 0, true);
|
|
|
|
CGameMenuItemZCycle itemOptionsControlMouseDigitalDown("DIGITAL DOWN", 3, 66, 150, 180, 0, SetMouseDigitalAxis, NULL, 0, 0, true);
|
|
|
|
CGameMenuItemZCycle itemOptionsControlMouseDigitalLeft("DIGITAL LEFT", 3, 66, 160, 180, 0, SetMouseDigitalAxis, NULL, 0, 0, true);
|
|
|
|
CGameMenuItemZCycle itemOptionsControlMouseDigitalRight("DIGITAL RIGHT", 3, 66, 170, 180, 0, SetMouseDigitalAxis, NULL, 0, 0, true);
|
|
|
|
|
|
|
|
void SetupNetworkMenu(void);
|
|
|
|
void SetupNetworkHostMenu(CGameMenuItemChain *pItem);
|
|
|
|
void SetupNetworkJoinMenu(CGameMenuItemChain *pItem);
|
|
|
|
void NetworkHostGame(CGameMenuItemChain *pItem);
|
|
|
|
void NetworkJoinGame(CGameMenuItemChain *pItem);
|
|
|
|
|
|
|
|
char zNetAddressBuffer[16] = "localhost";
|
|
|
|
char zNetPortBuffer[6];
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemNetworkTitle("MULTIPLAYER", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemChain itemNetworkHost("HOST A GAME", 1, 0, 80, 320, 1, &menuNetworkHost, -1, SetupNetworkHostMenu, 0);
|
|
|
|
CGameMenuItemChain itemNetworkJoin("JOIN A GAME", 1, 0, 100, 320, 1, &menuNetworkJoin, -1, SetupNetworkJoinMenu, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemNetworkHostTitle("HOST A GAME", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemSlider itemNetworkHostPlayerNum("PLAYER NUMBER:", 3, 66, 70, 180, 1, 2, kMaxPlayers, 1, NULL, -1, -1, kMenuSliderValue);
|
|
|
|
CGameMenuItemZEdit itemNetworkHostPort("NETWORK PORT:", 3, 66, 80, 180, zNetPortBuffer, 6, 0, NULL, 0);
|
|
|
|
CGameMenuItemChain itemNetworkHostHost("HOST A GAME", 3, 66, 100, 180, 1, NULL, -1, NetworkHostGame, 0);
|
|
|
|
|
|
|
|
CGameMenuItemTitle itemNetworkJoinTitle("JOIN A GAME", 1, 160, 20, 2038);
|
|
|
|
CGameMenuItemZEdit itemNetworkJoinAddress("NETWORK ADDRESS:", 3, 66, 70, 180, zNetAddressBuffer, 16, 0, NULL, 0);
|
|
|
|
CGameMenuItemZEdit itemNetworkJoinPort("NETWORK PORT:", 3, 66, 80, 180, zNetPortBuffer, 6, 0, NULL, 0);
|
|
|
|
CGameMenuItemChain itemNetworkJoinJoin("JOIN A GAME", 3, 66, 100, 180, 1, NULL, -1, NetworkJoinGame, 0);
|
|
|
|
|
|
|
|
// There is no better way to do this than manually.
|
|
|
|
|
|
|
|
#define MENUMOUSEFUNCTIONS 12
|
|
|
|
|
|
|
|
static char const *MenuMouseNames[MENUMOUSEFUNCTIONS] = {
|
|
|
|
"Button 1",
|
|
|
|
"Double Button 1",
|
|
|
|
"Button 2",
|
|
|
|
"Double Button 2",
|
|
|
|
"Button 3",
|
|
|
|
"Double Button 3",
|
|
|
|
|
|
|
|
"Wheel Up",
|
|
|
|
"Wheel Down",
|
|
|
|
|
|
|
|
"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, },
|
|
|
|
};
|
|
|
|
|
|
|
|
void SetMouseButton(CGameMenuItemZCycle *pItem);
|
|
|
|
|
|
|
|
CGameMenuItemZCycle *pItemOptionsControlMouseButton[MENUMOUSEFUNCTIONS];
|
|
|
|
|
|
|
|
void SetupLoadingScreen(void)
|
|
|
|
{
|
|
|
|
menuLoading.Add(&itemLoadingText, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupKeyListMenu(void)
|
|
|
|
{
|
|
|
|
menuKeys.Add(&itemKeysTitle, false);
|
|
|
|
menuKeys.Add(&itemKeyList, true);
|
|
|
|
menuKeys.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupMessagesMenu(void)
|
|
|
|
{
|
|
|
|
menuMessages.Add(&itemMessagesTitle, false);
|
|
|
|
menuMessages.Add(&boolMessages, true);
|
|
|
|
menuMessages.Add(&sliderMsgCount, false);
|
|
|
|
menuMessages.Add(&sliderMsgTime, false);
|
|
|
|
menuMessages.Add(&boolMsgFont, false);
|
|
|
|
menuMessages.Add(&boolMsgIncoming, false);
|
|
|
|
menuMessages.Add(&boolMsgSelf, false);
|
|
|
|
menuMessages.Add(&boolMsgOther, false);
|
|
|
|
menuMessages.Add(&boolMsgRespawn, false);
|
|
|
|
menuMessages.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupControlsMenu(void)
|
|
|
|
{
|
|
|
|
sliderMouseSpeed.fValue = ClipRangeF(CONTROL_MouseSensitivity, sliderMouseSpeed.fRangeLow, sliderMouseSpeed.fRangeHigh);
|
|
|
|
sliderTurnSpeed.nValue = ClipRange(gTurnSpeed, sliderTurnSpeed.nRangeLow, sliderTurnSpeed.nRangeHigh);
|
2019-10-22 22:59:01 +00:00
|
|
|
boolMouseFlipped.at20 = in_mouseflip;
|
2019-09-19 22:42:45 +00:00
|
|
|
menuControls.Add(&itemControlsTitle, false);
|
|
|
|
menuControls.Add(&sliderMouseSpeed, true);
|
|
|
|
menuControls.Add(&boolMouseFlipped, false);
|
|
|
|
menuControls.Add(&sliderTurnSpeed, false);
|
|
|
|
menuControls.Add(&itemChainKeyList, false);
|
|
|
|
menuControls.Add(&itemChainKeyReset, false);
|
|
|
|
menuControls.Add(&itemChainKeyResetClassic, false);
|
|
|
|
menuControls.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupOptionsOldMenu(void)
|
|
|
|
{
|
|
|
|
sliderDetail.nValue = ClipRange(gDetail, sliderDetail.nRangeLow, sliderDetail.nRangeHigh);
|
|
|
|
sliderGamma.nValue = ClipRange(gGamma, sliderGamma.nRangeLow, sliderGamma.nRangeHigh);
|
2019-10-22 00:01:05 +00:00
|
|
|
sliderMusic.nValue = ClipRange(mus_volume, sliderMusic.nRangeLow, sliderMusic.nRangeHigh);
|
|
|
|
sliderSound.nValue = ClipRange(snd_fxvolume, sliderSound.nRangeLow, sliderSound.nRangeHigh);
|
|
|
|
bool3DAudio.at20 = snd_doppler;
|
2019-10-21 21:29:48 +00:00
|
|
|
boolCrosshair.at20 = cl_crosshair;
|
2019-10-22 00:15:24 +00:00
|
|
|
boolShowWeapons.at20 = cl_showweapon;
|
|
|
|
boolSlopeTilting.at20 = cl_slopetilting;
|
|
|
|
boolViewBobbing.at20 = cl_viewvbob;
|
|
|
|
boolViewSwaying.at20 = cl_viewhbob;
|
2019-09-19 06:10:18 +00:00
|
|
|
boolMessages.at20 = gGameMessageMgr.state;
|
2019-09-19 22:42:45 +00:00
|
|
|
menuOptionsOld.Add(&itemOptionsTitle, false);
|
|
|
|
menuOptionsOld.Add(&itemOption1, true);
|
|
|
|
menuOptionsOld.Add(&sliderDetail, false);
|
|
|
|
menuOptionsOld.Add(&sliderGamma, false);
|
|
|
|
menuOptionsOld.Add(&sliderMusic, false);
|
|
|
|
menuOptionsOld.Add(&sliderSound, false);
|
2019-10-22 15:47:24 +00:00
|
|
|
//menuOptionsOld.Add(&sliderCDAudio, false);
|
2019-09-19 22:42:45 +00:00
|
|
|
menuOptionsOld.Add(&bool3DAudio, false);
|
|
|
|
menuOptionsOld.Add(&boolCrosshair, false);
|
|
|
|
menuOptionsOld.Add(&boolShowWeapons, false);
|
|
|
|
menuOptionsOld.Add(&boolSlopeTilting, false);
|
|
|
|
menuOptionsOld.Add(&boolViewBobbing, false);
|
|
|
|
menuOptionsOld.Add(&boolViewSwaying, false);
|
|
|
|
menuOptionsOld.Add(&itemOption2, false);
|
|
|
|
menuOptionsOld.Add(&itemChainParentalLock, false);
|
|
|
|
menuOptionsOld.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupDifficultyMenu(void)
|
|
|
|
{
|
|
|
|
menuDifficulty.Add(&itemDifficultyTitle, false);
|
|
|
|
menuDifficulty.Add(&itemDifficulty1, false);
|
|
|
|
menuDifficulty.Add(&itemDifficulty2, false);
|
|
|
|
menuDifficulty.Add(&itemDifficulty3, true);
|
|
|
|
menuDifficulty.Add(&itemDifficulty4, false);
|
|
|
|
menuDifficulty.Add(&itemDifficulty5, false);
|
|
|
|
menuDifficulty.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupEpisodeMenu(void)
|
|
|
|
{
|
|
|
|
menuEpisode.Add(&itemEpisodesTitle, false);
|
|
|
|
bool unk = false;
|
|
|
|
int height;
|
|
|
|
gMenuTextMgr.GetFontInfo(1, NULL, NULL, &height);
|
|
|
|
int j = 0;
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
|
|
{
|
|
|
|
EPISODEINFO *pEpisode = &gEpisodeInfo[i];
|
|
|
|
if (!pEpisode->bloodbath || gGameOptions.nGameType != 0)
|
|
|
|
{
|
|
|
|
if (j < gEpisodeCount)
|
|
|
|
{
|
|
|
|
CGameMenuItemChain7F2F0 *pEpisodeItem = &itemEpisodes[j];
|
|
|
|
pEpisodeItem->m_nFont = 1;
|
|
|
|
pEpisodeItem->m_nX = 0;
|
|
|
|
pEpisodeItem->m_nWidth = 320;
|
|
|
|
pEpisodeItem->at20 = 1;
|
|
|
|
pEpisodeItem->m_pzText = pEpisode->at0;
|
|
|
|
pEpisodeItem->m_nY = 55+(height+8)*j;
|
|
|
|
pEpisodeItem->at34 = i;
|
|
|
|
if (!unk || j == 0)
|
|
|
|
{
|
|
|
|
pEpisodeItem = &itemEpisodes[j];
|
|
|
|
pEpisodeItem->at24 = &menuDifficulty;
|
|
|
|
pEpisodeItem->at28 = 3;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pEpisodeItem->at24 = &menuSorry2;
|
|
|
|
pEpisodeItem->at28 = 1;
|
|
|
|
}
|
|
|
|
pEpisodeItem = &itemEpisodes[j];
|
|
|
|
pEpisodeItem->bCanSelect = 1;
|
|
|
|
pEpisodeItem->bEnable = 1;
|
|
|
|
bool first = j == 0;
|
|
|
|
menuEpisode.Add(&itemEpisodes[j], first);
|
|
|
|
if (first)
|
|
|
|
SetupLevelMenuItem(j);
|
|
|
|
}
|
|
|
|
j++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
menuEpisode.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupMainMenu(void)
|
|
|
|
{
|
|
|
|
menuMain.Add(&itemMainTitle, false);
|
|
|
|
menuMain.Add(&itemMain1, true);
|
|
|
|
if (gGameOptions.nGameType > 0)
|
|
|
|
{
|
|
|
|
itemMain1.at24 = &menuNetStart;
|
|
|
|
itemMain1.at28 = 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
itemMain1.at24 = &menuEpisode;
|
|
|
|
itemMain1.at28 = -1;
|
|
|
|
}
|
|
|
|
menuMain.Add(&itemMain2, false);
|
|
|
|
menuMain.Add(&itemMain3, false);
|
|
|
|
menuMain.Add(&itemMain4, false);
|
|
|
|
menuMain.Add(&itemMain5, false);
|
|
|
|
menuMain.Add(&itemMain6, false);
|
|
|
|
menuMain.Add(&itemMain7, false);
|
|
|
|
menuMain.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupMainMenuWithSave(void)
|
|
|
|
{
|
|
|
|
menuMainWithSave.Add(&itemMainSaveTitle, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave1, true);
|
|
|
|
if (gGameOptions.nGameType > 0)
|
|
|
|
{
|
|
|
|
itemMainSave1.at24 = &menuNetStart;
|
|
|
|
itemMainSave1.at28 = 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
itemMainSave1.at24 = &menuEpisode;
|
|
|
|
itemMainSave1.at28 = -1;
|
|
|
|
}
|
|
|
|
menuMainWithSave.Add(&itemMainSave2, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave3, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave4, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave5, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave6, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave7, false);
|
|
|
|
menuMainWithSave.Add(&itemMainSave8, false);
|
|
|
|
menuMainWithSave.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupNetStartMenu(void)
|
|
|
|
{
|
|
|
|
bool oneEpisode = false;
|
|
|
|
menuNetStart.Add(&itemNetStartTitle, false);
|
|
|
|
menuNetStart.Add(&itemNetStart1, false);
|
|
|
|
for (int i = 0; i < (oneEpisode ? 1 : 6); i++)
|
|
|
|
{
|
|
|
|
EPISODEINFO *pEpisode = &gEpisodeInfo[i];
|
|
|
|
if (i < gEpisodeCount)
|
|
|
|
itemNetStart2.Add(pEpisode->at0, i == 0);
|
|
|
|
}
|
|
|
|
menuNetStart.Add(&itemNetStart2, false);
|
|
|
|
menuNetStart.Add(&itemNetStart3, false);
|
|
|
|
menuNetStart.Add(&itemNetStart4, false);
|
|
|
|
menuNetStart.Add(&itemNetStart5, false);
|
|
|
|
menuNetStart.Add(&itemNetStart6, false);
|
|
|
|
menuNetStart.Add(&itemNetStart7, false);
|
2019-09-20 10:11:07 +00:00
|
|
|
menuNetStart.Add(&itemNetStart8, false);
|
2019-09-19 22:42:45 +00:00
|
|
|
menuNetStart.Add(&itemNetStart9, false);
|
|
|
|
menuNetStart.Add(&itemNetStart10, false);
|
2019-09-20 10:11:07 +00:00
|
|
|
menuNetStart.Add(&itemNetStart11, false);
|
2019-09-22 07:18:04 +00:00
|
|
|
menuNetStart.Add(&itemNetStart12, false);
|
2019-09-19 22:42:45 +00:00
|
|
|
itemNetStart1.SetTextIndex(1);
|
|
|
|
itemNetStart4.SetTextIndex(2);
|
|
|
|
itemNetStart5.SetTextIndex(0);
|
|
|
|
itemNetStart6.SetTextIndex(1);
|
|
|
|
itemNetStart7.SetTextIndex(1);
|
|
|
|
menuNetStart.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupSaveGameMenu(void)
|
|
|
|
{
|
|
|
|
menuSaveGame.Add(&itemSaveTitle, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame1, true);
|
|
|
|
menuSaveGame.Add(&itemSaveGame2, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame3, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame4, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame5, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame6, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame7, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame8, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame9, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGame10, false);
|
|
|
|
menuSaveGame.Add(&itemSaveGamePic, false);
|
|
|
|
menuSaveGame.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
itemSaveGame1.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[0], "<Empty>"))
|
|
|
|
itemSaveGame1.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame2.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[1], "<Empty>"))
|
|
|
|
itemSaveGame2.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame3.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[2], "<Empty>"))
|
|
|
|
itemSaveGame3.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame4.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[3], "<Empty>"))
|
|
|
|
itemSaveGame4.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame5.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[4], "<Empty>"))
|
|
|
|
itemSaveGame5.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame6.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[5], "<Empty>"))
|
|
|
|
itemSaveGame6.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame7.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[6], "<Empty>"))
|
|
|
|
itemSaveGame7.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame8.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[7], "<Empty>"))
|
|
|
|
itemSaveGame8.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame9.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[8], "<Empty>"))
|
|
|
|
itemSaveGame9.at37 = 1;
|
|
|
|
|
|
|
|
itemSaveGame10.at2c = &itemSaveGamePic;
|
|
|
|
if (!strcmp(strRestoreGameStrings[9], "<Empty>"))
|
|
|
|
itemSaveGame10.at37 = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupLoadGameMenu(void)
|
|
|
|
{
|
|
|
|
menuLoadGame.Add(&itemLoadTitle, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame1, true);
|
|
|
|
menuLoadGame.Add(&itemLoadGame2, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame3, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame4, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame5, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame6, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame7, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame8, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame9, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGame10, false);
|
|
|
|
menuLoadGame.Add(&itemLoadGamePic, false);
|
|
|
|
itemLoadGame1.at35 = 0;
|
|
|
|
itemLoadGame2.at35 = 0;
|
|
|
|
itemLoadGame3.at35 = 0;
|
|
|
|
itemLoadGame4.at35 = 0;
|
|
|
|
itemLoadGame5.at35 = 0;
|
|
|
|
itemLoadGame6.at35 = 0;
|
|
|
|
itemLoadGame7.at35 = 0;
|
|
|
|
itemLoadGame8.at35 = 0;
|
|
|
|
itemLoadGame9.at35 = 0;
|
|
|
|
itemLoadGame10.at35 = 0;
|
|
|
|
itemLoadGame1.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame2.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame3.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame4.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame5.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame6.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame7.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame8.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame9.at2c = &itemLoadGamePic;
|
|
|
|
itemLoadGame10.at2c = &itemLoadGamePic;
|
|
|
|
menuLoadGame.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupSoundsMenu(void)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
itemSoundsMusic.nValue = ClipRange(mus_volume, itemSoundsMusic.nRangeLow, itemSoundsMusic.nRangeHigh);
|
|
|
|
itemSoundsSound.nValue = ClipRange(snd_fxvolume, itemSoundsSound.nRangeLow, itemSoundsSound.nRangeHigh);
|
2019-09-19 22:42:45 +00:00
|
|
|
menuSounds.Add(&itemSoundsTitle, false);
|
|
|
|
menuSounds.Add(&itemSoundsMusic, true);
|
|
|
|
menuSounds.Add(&itemSoundsSound, false);
|
2019-10-22 15:47:24 +00:00
|
|
|
//menuSounds.Add(&itemSoundsCDAudio, false);
|
2019-09-19 22:42:45 +00:00
|
|
|
menuSounds.Add(&itemSounds3DAudio, false);
|
|
|
|
menuSounds.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupQuitMenu(void)
|
|
|
|
{
|
|
|
|
menuQuit.Add(&itemQuitTitle, false);
|
|
|
|
menuQuit.Add(&itemQuitText1, false);
|
|
|
|
menuQuit.Add(&itemQuitYesNo, true);
|
|
|
|
menuQuit.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuRestart.Add(&itemRestartTitle, false);
|
|
|
|
menuRestart.Add(&itemRestartText1, false);
|
|
|
|
menuRestart.Add(&itemRestartYesNo, true);
|
|
|
|
menuRestart.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupHelpOrderMenu(void)
|
|
|
|
{
|
|
|
|
menuOrder.Add(&itemHelp4QAV, true);
|
|
|
|
menuOrder.Add(&itemHelp5QAV, false);
|
|
|
|
menuOrder.Add(&itemHelp3QAV, false);
|
|
|
|
menuOrder.Add(&itemHelp3BQAV, false);
|
|
|
|
itemHelp4QAV.bEnable = 1;
|
|
|
|
itemHelp4QAV.bNoDraw = 1;
|
|
|
|
itemHelp5QAV.bEnable = 1;
|
|
|
|
itemHelp5QAV.bNoDraw = 1;
|
|
|
|
itemHelp3QAV.bEnable = 1;
|
|
|
|
itemHelp3QAV.bNoDraw = 1;
|
|
|
|
itemHelp3BQAV.bEnable = 1;
|
|
|
|
itemHelp3BQAV.bNoDraw = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupCreditsMenu(void)
|
|
|
|
{
|
|
|
|
menuCredits.Add(&itemCreditsQAV, true);
|
|
|
|
itemCreditsQAV.bEnable = 1;
|
|
|
|
itemCreditsQAV.bNoDraw = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupParentalLockMenu(void)
|
|
|
|
{
|
|
|
|
itemParentalLockToggle.at20 = gbAdultContent;
|
|
|
|
strcpy(itemParentalLockPassword.at20, gzAdultPassword);
|
|
|
|
menuParentalLock.Add(&itemParentalLockTitle, false);
|
|
|
|
menuParentalLock.Add(&itemParentalLockToggle, true);
|
|
|
|
menuParentalLock.Add(&itemParentalLockPassword, false);
|
|
|
|
menuParentalLock.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupSorry3Menu(void)
|
|
|
|
{
|
|
|
|
menuPlayOnline.Add(&unk_26E06C, false);
|
|
|
|
menuPlayOnline.Add(&unk_26E090, true);
|
|
|
|
menuPlayOnline.Add(&unk_26E0E8, false);
|
|
|
|
menuPlayOnline.Add(&unk_26E140, false);
|
|
|
|
menuPlayOnline.Add(&unk_26E198, false);
|
|
|
|
menuPlayOnline.Add(&unk_26E1F0, false);
|
|
|
|
menuPlayOnline.Add(&unk_26E248, false);
|
|
|
|
menuPlayOnline.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupSorryMenu(void)
|
|
|
|
{
|
|
|
|
menuSorry.Add(&itemSorryPicCycle, true);
|
|
|
|
menuSorry.Add(&itemSorryText1, false);
|
|
|
|
menuSorry.Add(&itemSorryText3, false);
|
|
|
|
menuSorry.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupSorry2Menu(void)
|
|
|
|
{
|
|
|
|
menuSorry2.Add(&itemSorryPicCycle, true);
|
|
|
|
menuSorry2.Add(&itemSorry2Text1, false);
|
|
|
|
menuSorry2.Add(&itemSorry2Text2, false);
|
|
|
|
menuSorry2.Add(&itemSorry2Text3, false);
|
|
|
|
menuSorry2.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupOptionsMenu(void)
|
|
|
|
{
|
|
|
|
menuOptions.Add(&itemOptionsTitle, false);
|
|
|
|
menuOptions.Add(&itemOptionsChainGame, true);
|
|
|
|
menuOptions.Add(&itemOptionsChainDisplay, false);
|
|
|
|
menuOptions.Add(&itemOptionsChainSound, false);
|
|
|
|
menuOptions.Add(&itemOptionsChainPlayer, false);
|
|
|
|
menuOptions.Add(&itemOptionsChainControl, false);
|
|
|
|
//menuOptions.Add(&itemOptionsChainOld, false);
|
|
|
|
menuOptions.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameTitle, false);
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameBoolShowWeapons, true);
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameBoolSlopeTilting, false);
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameBoolViewBobbing, false);
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameBoolViewSwaying, false);
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameBoolAutoAim, false);
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameWeaponSwitch, false);
|
2019-09-21 11:02:17 +00:00
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
if (gGameOptions.nGameType == 0) {
|
|
|
|
menuOptionsGame.Add(&itemOptionsGameBoolWeaponsV10X, false);
|
|
|
|
}
|
|
|
|
/////////////////////
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
//menuOptionsGame.Add(&itemOptionsGameChainParentalLock, false);
|
|
|
|
menuOptionsGame.Add(&itemBloodQAV, false);
|
2019-10-22 00:15:24 +00:00
|
|
|
itemOptionsGameBoolShowWeapons.at20 = cl_showweapon;
|
|
|
|
itemOptionsGameBoolSlopeTilting.at20 = cl_slopetilting;
|
|
|
|
itemOptionsGameBoolViewBobbing.at20 = cl_viewvbob;
|
|
|
|
itemOptionsGameBoolViewSwaying.at20 = cl_viewhbob;
|
2019-10-21 22:05:21 +00:00
|
|
|
itemOptionsGameBoolAutoAim.m_nFocus = cl_autoaim;
|
2019-10-22 00:31:14 +00:00
|
|
|
itemOptionsGameWeaponSwitch.m_nFocus = (cl_weaponswitch&1) ? ((cl_weaponswitch&2) ? 1 : 2) : 0;
|
2019-09-19 22:42:45 +00:00
|
|
|
|
2019-09-21 11:02:17 +00:00
|
|
|
///////
|
|
|
|
itemOptionsGameBoolWeaponsV10X.at20 = gWeaponsV10x;
|
|
|
|
///////
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayTitle, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayColor, true);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayMode, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolCrosshair, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolCenterHoriz, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolLevelStats, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolPowerupDuration, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolShowMapTitle, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolMessages, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayBoolWidescreen, false);
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayFOV, false);
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
menuOptionsDisplay.Add(&itemOptionsDisplayPolymost, false);
|
|
|
|
#endif
|
|
|
|
menuOptionsDisplay.Add(&itemBloodQAV, false);
|
2019-10-21 21:29:48 +00:00
|
|
|
itemOptionsDisplayBoolCrosshair.at20 = cl_crosshair;
|
2019-10-22 22:30:51 +00:00
|
|
|
itemOptionsDisplayBoolCenterHoriz.at20 = r_horizcenter;
|
2019-10-22 22:20:27 +00:00
|
|
|
itemOptionsDisplayBoolLevelStats.at20 = hud_stats;
|
2019-10-23 23:41:55 +00:00
|
|
|
itemOptionsDisplayBoolPowerupDuration.at20 = hud_powerupduration;
|
2019-10-22 22:20:27 +00:00
|
|
|
itemOptionsDisplayBoolShowMapTitle.at20 = hud_showmapname;
|
2019-10-23 23:41:55 +00:00
|
|
|
itemOptionsDisplayBoolMessages.at20 = hud_messages;
|
2019-09-19 22:42:45 +00:00
|
|
|
itemOptionsDisplayBoolWidescreen.at20 = r_usenewaspect;
|
|
|
|
|
|
|
|
menuOptionsDisplayMode.Add(&itemOptionsDisplayModeTitle, false);
|
|
|
|
menuOptionsDisplayMode.Add(&itemOptionsDisplayModeResolution, true);
|
|
|
|
// prepare video setup
|
|
|
|
for (int i = 0; i < validmodecnt; ++i)
|
|
|
|
{
|
|
|
|
int j;
|
|
|
|
for (j = 0; j < gResolutionNum; ++j)
|
|
|
|
{
|
|
|
|
if (validmode[i].xdim == gResolution[j].xdim && validmode[i].ydim == gResolution[j].ydim)
|
|
|
|
{
|
|
|
|
gResolution[j].flags |= validmode[i].fs ? RES_FS : RES_WIN;
|
|
|
|
Bsnprintf(gResolution[j].name, MAXRESOLUTIONSTRINGLENGTH, "%d x %d%s", gResolution[j].xdim, gResolution[j].ydim, (gResolution[j].flags & RES_FS) ? "" : "Win");
|
|
|
|
gResolutionName[j] = gResolution[j].name;
|
|
|
|
if (validmode[i].bpp > gResolution[j].bppmax)
|
|
|
|
gResolution[j].bppmax = validmode[i].bpp;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (j == gResolutionNum) // no match found
|
|
|
|
{
|
|
|
|
gResolution[j].xdim = validmode[i].xdim;
|
|
|
|
gResolution[j].ydim = validmode[i].ydim;
|
|
|
|
gResolution[j].bppmax = validmode[i].bpp;
|
|
|
|
gResolution[j].flags = validmode[i].fs ? RES_FS : RES_WIN;
|
|
|
|
Bsnprintf(gResolution[j].name, MAXRESOLUTIONSTRINGLENGTH, "%d x %d%s", gResolution[j].xdim, gResolution[j].ydim, (gResolution[j].flags & RES_FS) ? "" : "Win");
|
|
|
|
gResolutionName[j] = gResolution[j].name;
|
|
|
|
++gResolutionNum;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
itemOptionsDisplayModeResolution.SetTextArray(gResolutionName, gResolutionNum, 0);
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
menuOptionsDisplayMode.Add(&itemOptionsDisplayModeRenderer, false);
|
|
|
|
#endif
|
|
|
|
menuOptionsDisplayMode.Add(&itemOptionsDisplayModeFullscreen, false);
|
|
|
|
menuOptionsDisplayMode.Add(&itemOptionsDisplayModeVSync, false);
|
|
|
|
menuOptionsDisplayMode.Add(&itemOptionsDisplayModeApply, false);
|
|
|
|
menuOptionsDisplayMode.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
itemOptionsDisplayModeRenderer.pPreDrawCallback = PreDrawVideoModeMenu;
|
|
|
|
#endif
|
|
|
|
itemOptionsDisplayModeFullscreen.pPreDrawCallback = PreDrawVideoModeMenu;
|
|
|
|
|
|
|
|
menuOptionsDisplayColor.Add(&itemOptionsDisplayColorTitle, false);
|
|
|
|
menuOptionsDisplayColor.Add(&itemOptionsDisplayColorGamma, true);
|
|
|
|
menuOptionsDisplayColor.Add(&itemOptionsDisplayColorContrast, false);
|
|
|
|
menuOptionsDisplayColor.Add(&itemOptionsDisplayColorBrightness, false);
|
|
|
|
menuOptionsDisplayColor.Add(&itemOptionsDisplayColorVisibility, false);
|
|
|
|
menuOptionsDisplayColor.Add(&itemOptionsDisplayColorReset, false);
|
|
|
|
menuOptionsDisplayColor.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
itemOptionsDisplayColorContrast.pPreDrawCallback = PreDrawDisplayColor;
|
|
|
|
itemOptionsDisplayColorBrightness.pPreDrawCallback = PreDrawDisplayColor;
|
|
|
|
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostTitle, false);
|
|
|
|
//menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostTextureMode, true);
|
|
|
|
//menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostAnisotropy, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostTrueColorTextures, true);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostTexQuality, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostPreloadCache, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostDetailTex, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostGlowTex, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymost3DModels, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostDeliriumBlur, false);
|
|
|
|
menuOptionsDisplayPolymost.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
itemOptionsDisplayPolymostTexQuality.pPreDrawCallback = PreDrawDisplayPolymost;
|
|
|
|
itemOptionsDisplayPolymostPreloadCache.pPreDrawCallback = PreDrawDisplayPolymost;
|
|
|
|
itemOptionsDisplayPolymostDetailTex.pPreDrawCallback = PreDrawDisplayPolymost;
|
|
|
|
itemOptionsDisplayPolymostGlowTex.pPreDrawCallback = PreDrawDisplayPolymost;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundTitle, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundSoundToggle, true);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundMusicToggle, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSound3DToggle, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundSoundVolume, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundMusicVolume, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundSampleRate, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundNumVoices, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundCDToggle, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundMusicDevice, false);
|
|
|
|
menuOptionsSound.Add(&itemOptionsSoundApplyChanges, false);
|
|
|
|
menuOptionsSound.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuOptionsPlayer.Add(&itemOptionsPlayerTitle, false);
|
|
|
|
menuOptionsPlayer.Add(&itemOptionsPlayerName, true);
|
|
|
|
menuOptionsPlayer.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuOptionsControl.Add(&itemOptionsControlTitle, false);
|
|
|
|
menuOptionsControl.Add(&itemOptionsControlKeyboard, true);
|
|
|
|
menuOptionsControl.Add(&itemOptionsControlMouse, false);
|
|
|
|
menuOptionsControl.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuOptionsControlKeyboard.Add(&itemOptionsControlKeyboardTitle, false);
|
|
|
|
menuOptionsControlKeyboard.Add(&itemOptionsControlKeyboardList, true);
|
|
|
|
menuOptionsControlKeyboard.Add(&itemOptionsControlKeyboardReset, false);
|
|
|
|
menuOptionsControlKeyboard.Add(&itemOptionsControlKeyboardResetClassic, false);
|
|
|
|
menuOptionsControlKeyboard.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseTitle, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseButton, true);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseSensitivity, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseAimFlipped, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseFilterInput, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseAimMode, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseVerticalAim, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseXScale, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseYScale, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseDigitalUp, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseDigitalDown, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseDigitalLeft, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemOptionsControlMouseDigitalRight, false);
|
|
|
|
menuOptionsControlMouse.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
itemOptionsControlMouseDigitalUp.SetTextArray(pzGamefuncsStrings, NUMGAMEFUNCTIONS+1, 0);
|
|
|
|
itemOptionsControlMouseDigitalDown.SetTextArray(pzGamefuncsStrings, NUMGAMEFUNCTIONS+1, 0);
|
|
|
|
itemOptionsControlMouseDigitalLeft.SetTextArray(pzGamefuncsStrings, NUMGAMEFUNCTIONS+1, 0);
|
|
|
|
itemOptionsControlMouseDigitalRight.SetTextArray(pzGamefuncsStrings, NUMGAMEFUNCTIONS+1, 0);
|
|
|
|
|
|
|
|
itemOptionsControlMouseVerticalAim.pPreDrawCallback = PreDrawControlMouse;
|
|
|
|
|
|
|
|
menuOptionsControlMouseButtonAssignment.Add(&itemOptionsControlMouseTitle, false);
|
|
|
|
int y = 60;
|
|
|
|
for (int i = 0; i < MENUMOUSEFUNCTIONS; i++)
|
|
|
|
{
|
|
|
|
pItemOptionsControlMouseButton[i] = new CGameMenuItemZCycle(MenuMouseNames[i], 3, 66, y, 180, 0, SetMouseButton, pzGamefuncsStrings, NUMGAMEFUNCTIONS+1, 0, true);
|
|
|
|
dassert(pItemOptionsControlMouseButton[i] != NULL);
|
|
|
|
menuOptionsControlMouseButtonAssignment.Add(pItemOptionsControlMouseButton[i], i == 0);
|
|
|
|
y += 10;
|
|
|
|
}
|
|
|
|
menuOptionsControlMouseButtonAssignment.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupMenus(void)
|
|
|
|
{
|
|
|
|
// prepare gamefuncs and keys
|
|
|
|
pzGamefuncsStrings[0] = MenuGameFuncNone;
|
|
|
|
nGamefuncsValues[0] = -1;
|
|
|
|
int k = 1;
|
|
|
|
for (int i = 0; i < NUMGAMEFUNCTIONS; ++i)
|
|
|
|
{
|
2019-10-25 22:32:49 +00:00
|
|
|
MenuGameFuncs[i] = CONFIG_FunctionNumToName(i);
|
|
|
|
MenuGameFuncs[i].Substitute('_', ' ');
|
2019-09-19 22:42:45 +00:00
|
|
|
|
2019-10-25 22:32:49 +00:00
|
|
|
if (MenuGameFuncs[i][0] != '\0')
|
2019-09-19 22:42:45 +00:00
|
|
|
{
|
|
|
|
pzGamefuncsStrings[k] = MenuGameFuncs[i];
|
|
|
|
nGamefuncsValues[k] = i;
|
|
|
|
++k;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
nGamefuncsNum = k;
|
|
|
|
|
|
|
|
SetupLoadingScreen();
|
|
|
|
SetupKeyListMenu();
|
|
|
|
SetupMessagesMenu();
|
|
|
|
SetupControlsMenu();
|
|
|
|
SetupSaveGameMenu();
|
|
|
|
SetupLoadGameMenu();
|
|
|
|
SetupOptionsOldMenu();
|
|
|
|
SetupCreditsMenu();
|
|
|
|
SetupHelpOrderMenu();
|
|
|
|
SetupSoundsMenu();
|
|
|
|
SetupDifficultyMenu();
|
|
|
|
SetupEpisodeMenu();
|
|
|
|
SetupMainMenu();
|
|
|
|
SetupMainMenuWithSave();
|
|
|
|
SetupNetStartMenu();
|
|
|
|
SetupQuitMenu();
|
|
|
|
SetupParentalLockMenu();
|
|
|
|
SetupSorryMenu();
|
|
|
|
SetupSorry2Menu();
|
|
|
|
SetupSorry3Menu();
|
|
|
|
|
|
|
|
SetupOptionsMenu();
|
|
|
|
SetupNetworkMenu();
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateNetworkMenus(void)
|
|
|
|
{
|
|
|
|
if (gGameOptions.nGameType > 0)
|
|
|
|
{
|
|
|
|
itemMain1.at24 = &menuNetStart;
|
|
|
|
itemMain1.at28 = 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
itemMain1.at24 = &menuEpisode;
|
|
|
|
itemMain1.at28 = -1;
|
|
|
|
}
|
|
|
|
if (gGameOptions.nGameType > 0)
|
|
|
|
{
|
|
|
|
itemMainSave1.at24 = &menuNetStart;
|
|
|
|
itemMainSave1.at28 = 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
itemMainSave1.at24 = &menuEpisode;
|
|
|
|
itemMainSave1.at28 = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetDoppler(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
snd_doppler = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetCrosshair(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-21 21:29:48 +00:00
|
|
|
cl_crosshair = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetCenterHoriz(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 22:30:51 +00:00
|
|
|
r_horizcenter = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ResetKeys(CGameMenuItemChain *)
|
|
|
|
{
|
2019-10-25 22:32:49 +00:00
|
|
|
CONFIG_SetDefaultKeys("demolition/defbinds.txt");
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ResetKeysClassic(CGameMenuItemChain *)
|
|
|
|
{
|
2019-10-25 22:32:49 +00:00
|
|
|
CONFIG_SetDefaultKeys("demolition/origbinds.txt");
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
2019-09-21 11:02:17 +00:00
|
|
|
////
|
|
|
|
void SetWeaponsV10X(CGameMenuItemZBool* pItem)
|
|
|
|
{
|
|
|
|
if (gGameOptions.nGameType == 0) {
|
|
|
|
gWeaponsV10x = pItem->at20;
|
|
|
|
gGameOptions.weaponsV10x = pItem->at20;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
////
|
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
void SetShowWeapons(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:15:24 +00:00
|
|
|
cl_showweapon = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetSlopeTilting(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:15:24 +00:00
|
|
|
cl_slopetilting = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetViewBobbing(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:15:24 +00:00
|
|
|
cl_viewvbob = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetViewSwaying(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:15:24 +00:00
|
|
|
cl_viewhbob = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetDetail(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
gDetail = pItem->nValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetGamma(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
gGamma = pItem->nValue;
|
|
|
|
scrSetGamma(gGamma);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMusicVol(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
sndSetMusicVolume(pItem->nValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetSoundVol(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
sndSetFXVolume(pItem->nValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetCDVol(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
// NUKE-TODO:
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMessages(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-23 23:41:55 +00:00
|
|
|
hud_messages = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseSensitivity(CGameMenuItemSliderFloat *pItem)
|
|
|
|
{
|
2019-10-23 15:21:14 +00:00
|
|
|
in_mousesensitivity = pItem->fValue;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseAimFlipped(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 22:59:01 +00:00
|
|
|
in_mouseflip = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetTurnSpeed(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
gTurnSpeed = pItem->nValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetAutoAim(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
2019-10-21 22:05:21 +00:00
|
|
|
cl_autoaim = pItem->m_nFocus;
|
2019-09-19 22:42:45 +00:00
|
|
|
if (!gDemo.at0 && !gDemo.at1)
|
|
|
|
{
|
2019-10-21 22:05:21 +00:00
|
|
|
gProfile[myconnectindex].nAutoAim = cl_autoaim;
|
2019-09-19 22:42:45 +00:00
|
|
|
netBroadcastPlayerInfo(myconnectindex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetLevelStats(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 22:20:27 +00:00
|
|
|
hud_stats = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetPowerupDuration(CGameMenuItemZBool* pItem)
|
|
|
|
{
|
2019-10-23 23:41:55 +00:00
|
|
|
hud_powerupduration = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetShowMapTitle(CGameMenuItemZBool* pItem)
|
|
|
|
{
|
2019-10-22 22:20:27 +00:00
|
|
|
hud_showmapname = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetWeaponSwitch(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
2019-10-22 00:31:14 +00:00
|
|
|
|
|
|
|
cl_weaponswitch = cl_weaponswitch & ~(1|2);
|
2019-09-19 22:42:45 +00:00
|
|
|
switch (pItem->m_nFocus)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
break;
|
|
|
|
case 1:
|
2019-10-22 00:31:14 +00:00
|
|
|
cl_weaponswitch = cl_weaponswitch | 2;
|
2019-09-19 22:42:45 +00:00
|
|
|
fallthrough__;
|
|
|
|
case 2:
|
|
|
|
default:
|
2019-10-22 00:31:14 +00:00
|
|
|
cl_weaponswitch = cl_weaponswitch | 1;
|
2019-09-19 22:42:45 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (!gDemo.at0 && !gDemo.at1)
|
|
|
|
{
|
2019-10-22 00:31:14 +00:00
|
|
|
gProfile[myconnectindex].nWeaponSwitch = cl_weaponswitch;
|
2019-09-19 22:42:45 +00:00
|
|
|
netBroadcastPlayerInfo(myconnectindex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extern bool gStartNewGame;
|
|
|
|
|
|
|
|
void SetDifficultyAndStart(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
gGameOptions.nDifficulty = pItem->at30;
|
|
|
|
gSkill = pItem->at30;
|
|
|
|
gGameOptions.nLevel = 0;
|
|
|
|
if (gDemo.at1)
|
|
|
|
gDemo.StopPlayback();
|
|
|
|
gStartNewGame = true;
|
|
|
|
gCheatMgr.sub_5BCF4();
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetVideoModeOld(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
if (pItem->at30 == validmodecnt)
|
|
|
|
{
|
|
|
|
gSetup.fullscreen = 0;
|
|
|
|
gSetup.xdim = 640;
|
|
|
|
gSetup.ydim = 480;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gSetup.fullscreen = 0;
|
|
|
|
gSetup.xdim = validmode[pItem->at30].xdim;
|
|
|
|
gSetup.ydim = validmode[pItem->at30].ydim;
|
|
|
|
}
|
|
|
|
scrSetGameMode(gSetup.fullscreen, gSetup.xdim, gSetup.ydim, gSetup.bpp);
|
|
|
|
scrSetDac();
|
|
|
|
viewResizeView(gViewSize);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetVideoMode(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
resolution_t p = { xres, yres, fullscreen, bpp, 0 };
|
|
|
|
int32_t prend = videoGetRenderMode();
|
2019-10-23 19:11:37 +00:00
|
|
|
int32_t pvsync = vid_vsync;
|
2019-09-19 22:42:45 +00:00
|
|
|
|
|
|
|
int32_t nResolution = itemOptionsDisplayModeResolution.m_nFocus;
|
|
|
|
resolution_t n = { gResolution[nResolution].xdim, gResolution[nResolution].ydim,
|
|
|
|
(gResolution[nResolution].flags & RES_FS) ? itemOptionsDisplayModeFullscreen.at20 : 0,
|
|
|
|
(nRendererValues[itemOptionsDisplayModeRenderer.m_nFocus] == REND_CLASSIC) ? 8 : gResolution[nResolution].bppmax, 0 };
|
|
|
|
int32_t UNUSED(nrend) = nRendererValues[itemOptionsDisplayModeRenderer.m_nFocus];
|
|
|
|
int32_t nvsync = nVSyncValues[itemOptionsDisplayModeVSync.m_nFocus];
|
|
|
|
|
|
|
|
if (videoSetGameMode(n.flags, n.xdim, n.ydim, n.bppmax, upscalefactor) < 0)
|
|
|
|
{
|
|
|
|
if (videoSetGameMode(p.flags, p.xdim, p.ydim, p.bppmax, upscalefactor) < 0)
|
|
|
|
{
|
|
|
|
videoSetRenderMode(prend);
|
|
|
|
ThrowError("Failed restoring old video mode.");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
onvideomodechange(p.bppmax > 8);
|
2019-10-23 19:11:37 +00:00
|
|
|
vid_vsync = videoSetVsync(pvsync);
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else onvideomodechange(n.bppmax > 8);
|
|
|
|
|
|
|
|
viewResizeView(gViewSize);
|
2019-10-23 19:11:37 +00:00
|
|
|
vid_vsync = videoSetVsync(nvsync);
|
2019-09-19 22:42:45 +00:00
|
|
|
gSetup.fullscreen = fullscreen;
|
|
|
|
gSetup.xdim = xres;
|
|
|
|
gSetup.ydim = yres;
|
|
|
|
gSetup.bpp = bpp;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetWidescreen(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
|
|
|
r_usenewaspect = pItem->at20;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetFOV(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
2019-10-22 22:20:27 +00:00
|
|
|
r_fov = pItem->nValue;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetupVideoModeMenu(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
for (int i = 0; i < gResolutionNum; i++)
|
|
|
|
{
|
|
|
|
if (gSetup.xdim == gResolution[i].xdim && gSetup.ydim == gResolution[i].ydim)
|
|
|
|
{
|
|
|
|
itemOptionsDisplayModeResolution.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
itemOptionsDisplayModeFullscreen.at20 = gSetup.fullscreen;
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
for (int i = 0; i < 2; i++)
|
|
|
|
{
|
|
|
|
if (videoGetRenderMode() == nRendererValues[i])
|
|
|
|
{
|
|
|
|
itemOptionsDisplayModeRenderer.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
if (vid_vsync == nVSyncValues[i])
|
2019-09-19 22:42:45 +00:00
|
|
|
{
|
|
|
|
itemOptionsDisplayModeVSync.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void PreDrawVideoModeMenu(CGameMenuItem *pItem)
|
|
|
|
{
|
|
|
|
if (pItem == &itemOptionsDisplayModeFullscreen)
|
|
|
|
pItem->bEnable = !!(gResolution[itemOptionsDisplayModeResolution.m_nFocus].flags & RES_FS);
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
else if (pItem == &itemOptionsDisplayModeRenderer)
|
|
|
|
pItem->bEnable = gResolution[itemOptionsDisplayModeResolution.m_nFocus].bppmax > 8;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateVideoColorMenu(CGameMenuItemSliderFloat *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
g_videoGamma = itemOptionsDisplayColorGamma.fValue;
|
|
|
|
g_videoContrast = itemOptionsDisplayColorContrast.fValue;
|
|
|
|
g_videoBrightness = itemOptionsDisplayColorBrightness.fValue;
|
|
|
|
r_ambientlight = itemOptionsDisplayColorVisibility.fValue;
|
|
|
|
gBrightness = GAMMA_CALC<<2;
|
|
|
|
videoSetPalette(gBrightness>>2, gLastPal, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void PreDrawDisplayColor(CGameMenuItem *pItem)
|
|
|
|
{
|
|
|
|
if (pItem == &itemOptionsDisplayColorContrast)
|
2019-10-05 19:59:03 +00:00
|
|
|
pItem->bEnable = 1;
|
2019-09-19 22:42:45 +00:00
|
|
|
else if (pItem == &itemOptionsDisplayColorBrightness)
|
2019-10-05 19:59:03 +00:00
|
|
|
pItem->bEnable = 1;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ResetVideoColor(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
g_videoGamma = DEFAULT_GAMMA;
|
|
|
|
g_videoContrast = DEFAULT_CONTRAST;
|
|
|
|
g_videoBrightness = DEFAULT_BRIGHTNESS;
|
|
|
|
gBrightness = 0;
|
2019-10-22 23:30:43 +00:00
|
|
|
r_ambientlight = 1.f;
|
2019-09-19 22:42:45 +00:00
|
|
|
videoSetPalette(gBrightness>>2, gLastPal, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
void SetupVideoPolymostMenu(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
itemOptionsDisplayPolymostTextureMode.m_nFocus = 0;
|
|
|
|
for (int i = 0; i < 2; i++)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
if (nTextureModeValues[i] == hw_texfilter)
|
2019-09-19 22:42:45 +00:00
|
|
|
{
|
|
|
|
itemOptionsDisplayPolymostTextureMode.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
itemOptionsDisplayPolymostAnisotropy.m_nFocus = 0;
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
if (nAnisotropyValues[i] == hw_anisotropy)
|
2019-09-19 22:42:45 +00:00
|
|
|
{
|
|
|
|
itemOptionsDisplayPolymostAnisotropy.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2019-10-23 19:11:37 +00:00
|
|
|
itemOptionsDisplayPolymostTrueColorTextures.at20 = hw_hightile;
|
2019-09-19 22:42:45 +00:00
|
|
|
itemOptionsDisplayPolymostTexQuality.m_nFocus = r_downsize;
|
2019-10-23 12:39:33 +00:00
|
|
|
itemOptionsDisplayPolymostPreloadCache.at20 = r_precache;
|
2019-10-23 19:11:37 +00:00
|
|
|
itemOptionsDisplayPolymostDetailTex.at20 = hw_detailmapping;
|
|
|
|
itemOptionsDisplayPolymostGlowTex.at20 = hw_glowmapping;
|
|
|
|
itemOptionsDisplayPolymost3DModels.at20 = hw_models;
|
2019-09-19 22:42:45 +00:00
|
|
|
itemOptionsDisplayPolymostDeliriumBlur.at20 = gDeliriumBlur;
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateTextureMode(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
hw_texfilter = nTextureModeValues[pItem->m_nFocus];
|
2019-09-19 22:42:45 +00:00
|
|
|
gltexapplyprops();
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateAnisotropy(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
hw_anisotropy = nAnisotropyValues[pItem->m_nFocus];
|
2019-09-19 22:42:45 +00:00
|
|
|
gltexapplyprops();
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateTrueColorTextures(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
hw_hightile = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void DoModeChange(void)
|
|
|
|
{
|
|
|
|
videoResetMode();
|
|
|
|
if (videoSetGameMode(fullscreen, xres, yres, bpp, upscalefactor))
|
|
|
|
OSD_Printf("restartvid: Reset failed...\n");
|
|
|
|
onvideomodechange(gSetup.bpp > 8);
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef USE_OPENGL
|
|
|
|
void UpdateTexQuality(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
|
|
|
r_downsize = pItem->m_nFocus;
|
|
|
|
r_downsizevar = r_downsize;
|
|
|
|
DoModeChange();
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdatePreloadCache(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-23 12:39:33 +00:00
|
|
|
r_precache = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateDetailTex(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
hw_detailmapping = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateGlowTex(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
hw_glowmapping = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Update3DModels(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-23 19:11:37 +00:00
|
|
|
hw_models = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateDeliriumBlur(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
|
|
|
gDeliriumBlur = pItem->at20;
|
|
|
|
}
|
|
|
|
|
|
|
|
void PreDrawDisplayPolymost(CGameMenuItem *pItem)
|
|
|
|
{
|
|
|
|
if (pItem == &itemOptionsDisplayPolymostTexQuality)
|
2019-10-23 19:11:37 +00:00
|
|
|
pItem->bEnable = hw_hightile;
|
2019-09-19 22:42:45 +00:00
|
|
|
else if (pItem == &itemOptionsDisplayPolymostPreloadCache)
|
2019-10-23 19:11:37 +00:00
|
|
|
pItem->bEnable = hw_hightile;
|
2019-09-19 22:42:45 +00:00
|
|
|
else if (pItem == &itemOptionsDisplayPolymostDetailTex)
|
2019-10-23 19:11:37 +00:00
|
|
|
pItem->bEnable = hw_hightile;
|
2019-09-19 22:42:45 +00:00
|
|
|
else if (pItem == &itemOptionsDisplayPolymostGlowTex)
|
2019-10-23 19:11:37 +00:00
|
|
|
pItem->bEnable = hw_hightile;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void UpdateSoundToggle(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
snd_enabled = pItem->at20;
|
|
|
|
if (!snd_enabled)
|
2019-09-19 22:42:45 +00:00
|
|
|
FX_StopAllSounds();
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateMusicToggle(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
mus_enabled = pItem->at20;
|
|
|
|
if (!mus_enabled)
|
2019-09-19 22:42:45 +00:00
|
|
|
sndStopSong();
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (gGameStarted || gDemo.at1)
|
|
|
|
sndPlaySong(gGameOptions.zLevelSong, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Update3DToggle(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
snd_doppler = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateCDToggle(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
mus_redbook = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
if (gGameStarted || gDemo.at1)
|
|
|
|
levelTryPlayMusicOrNothing(gGameOptions.nEpisode, gGameOptions.nLevel);
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateSoundVolume(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
sndSetFXVolume(pItem->nValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateMusicVolume(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
sndSetMusicVolume(pItem->nValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateSoundRate(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateNumVoices(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateMusicDevice(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetSound(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
2019-10-22 00:01:05 +00:00
|
|
|
snd_mixrate = nSoundRateValues[itemOptionsSoundSampleRate.m_nFocus];
|
|
|
|
snd_numvoices = itemOptionsSoundNumVoices.nValue;
|
2019-10-24 18:36:18 +00:00
|
|
|
mus_device = nMusicDeviceValues[itemOptionsSoundMusicDevice.m_nFocus];
|
2019-09-19 22:42:45 +00:00
|
|
|
sfxTerm();
|
|
|
|
sndTerm();
|
|
|
|
|
|
|
|
sndInit();
|
|
|
|
sfxInit();
|
|
|
|
|
2019-10-22 00:01:05 +00:00
|
|
|
if (mus_enabled && (gGameStarted || gDemo.at1))
|
2019-09-19 22:42:45 +00:00
|
|
|
sndPlaySong(gGameOptions.zLevelSong, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
void PreDrawSound(CGameMenuItem *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupOptionsSound(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
2019-10-22 00:01:05 +00:00
|
|
|
itemOptionsSoundSoundToggle.at20 = snd_enabled;
|
|
|
|
itemOptionsSoundMusicToggle.at20 = mus_enabled;
|
|
|
|
itemOptionsSound3DToggle.at20 = snd_doppler;
|
|
|
|
itemOptionsSoundCDToggle.at20 = mus_redbook;
|
2019-09-19 22:42:45 +00:00
|
|
|
itemOptionsSoundSampleRate.m_nFocus = 0;
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
|
|
{
|
2019-10-22 00:01:05 +00:00
|
|
|
if (nSoundRateValues[i] == snd_mixrate)
|
2019-09-19 22:42:45 +00:00
|
|
|
{
|
|
|
|
itemOptionsSoundSampleRate.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2019-10-22 00:01:05 +00:00
|
|
|
itemOptionsSoundNumVoices.nValue = snd_numvoices;
|
2019-10-24 13:56:42 +00:00
|
|
|
itemOptionsSoundMusicDevice.m_nFocus = 0;
|
|
|
|
for (int i = 0; i < 2; i++)
|
|
|
|
{
|
|
|
|
if (nMusicDeviceValues[i] == MusicDevice)
|
|
|
|
{
|
|
|
|
itemOptionsSoundMusicDevice.m_nFocus = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void UpdatePlayerName(CGameMenuItemZEdit *pItem, CGameMenuEvent *pEvent)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
if (pEvent->at0 == kMenuEventEnter)
|
|
|
|
netBroadcastPlayerInfo(myconnectindex);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseFilterInput(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
|
|
|
CONTROL_SmoothMouse = pItem->at20;
|
2019-10-22 22:59:01 +00:00
|
|
|
in_mousesmoothing = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseAimMode(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 22:59:01 +00:00
|
|
|
in_aimmode = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseVerticalAim(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
2019-10-22 23:30:43 +00:00
|
|
|
in_mousemode = pItem->at20;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseXScale(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
MouseAnalogueScale[0] = pItem->nValue;
|
|
|
|
CONTROL_SetAnalogAxisScale(0, pItem->nValue, controldevice_mouse);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseYScale(CGameMenuItemSlider *pItem)
|
|
|
|
{
|
|
|
|
MouseAnalogueScale[1] = pItem->nValue;
|
|
|
|
CONTROL_SetAnalogAxisScale(1, pItem->nValue, controldevice_mouse);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseDigitalAxis(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
|
|
|
if (pItem == &itemOptionsControlMouseDigitalUp)
|
|
|
|
{
|
|
|
|
MouseDigitalFunctions[1][0] = nGamefuncsValues[pItem->m_nFocus];
|
|
|
|
CONTROL_MapDigitalAxis(1, MouseDigitalFunctions[1][0], 0, controldevice_mouse);
|
|
|
|
}
|
|
|
|
else if (pItem == &itemOptionsControlMouseDigitalDown)
|
|
|
|
{
|
|
|
|
MouseDigitalFunctions[1][1] = nGamefuncsValues[pItem->m_nFocus];
|
|
|
|
CONTROL_MapDigitalAxis(1, MouseDigitalFunctions[1][1], 1, controldevice_mouse);
|
|
|
|
}
|
|
|
|
else if (pItem == &itemOptionsControlMouseDigitalLeft)
|
|
|
|
{
|
|
|
|
MouseDigitalFunctions[0][0] = nGamefuncsValues[pItem->m_nFocus];
|
|
|
|
CONTROL_MapDigitalAxis(0, MouseDigitalFunctions[0][0], 0, controldevice_mouse);
|
|
|
|
}
|
|
|
|
else if (pItem == &itemOptionsControlMouseDigitalRight)
|
|
|
|
{
|
|
|
|
MouseDigitalFunctions[0][1] = nGamefuncsValues[pItem->m_nFocus];
|
|
|
|
CONTROL_MapDigitalAxis(0, MouseDigitalFunctions[0][1], 1, controldevice_mouse);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupMouseMenu(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
static CGameMenuItemZCycle *pMouseDigitalAxis[4] = {
|
|
|
|
&itemOptionsControlMouseDigitalLeft,
|
|
|
|
&itemOptionsControlMouseDigitalRight,
|
|
|
|
&itemOptionsControlMouseDigitalUp,
|
|
|
|
&itemOptionsControlMouseDigitalDown
|
|
|
|
};
|
|
|
|
for (int i = 0; i < ARRAY_SSIZE(pMouseDigitalAxis); i++)
|
|
|
|
{
|
|
|
|
CGameMenuItemZCycle *pItem = pMouseDigitalAxis[i];
|
|
|
|
pItem->m_nFocus = 0;
|
|
|
|
for (int j = 0; j < NUMGAMEFUNCTIONS+1; j++)
|
|
|
|
{
|
|
|
|
if (nGamefuncsValues[j] == MouseDigitalFunctions[i>>1][i&1])
|
|
|
|
{
|
|
|
|
pItem->m_nFocus = j;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-10-22 22:59:01 +00:00
|
|
|
itemOptionsControlMouseAimFlipped.at20 = in_mouseflip;
|
|
|
|
itemOptionsControlMouseFilterInput.at20 = in_mousesmoothing;
|
|
|
|
itemOptionsControlMouseAimMode.at20 = in_aimmode;
|
2019-10-22 23:30:43 +00:00
|
|
|
itemOptionsControlMouseVerticalAim.at20 = g_MyAimMode;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void PreDrawControlMouse(CGameMenuItem *pItem)
|
|
|
|
{
|
|
|
|
if (pItem == &itemOptionsControlMouseVerticalAim)
|
2019-10-22 22:59:01 +00:00
|
|
|
pItem->bEnable = !in_aimmode;
|
2019-09-19 22:42:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetMouseButton(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
|
|
|
for (int i = 0; i < MENUMOUSEFUNCTIONS; i++)
|
|
|
|
{
|
|
|
|
if (pItem == pItemOptionsControlMouseButton[i])
|
|
|
|
{
|
|
|
|
int nFunc = nGamefuncsValues[pItem->m_nFocus];
|
|
|
|
MouseFunctions[MenuMouseDataIndex[i][0]][MenuMouseDataIndex[i][1]] = nFunc;
|
|
|
|
CONTROL_MapButton(nFunc, MenuMouseDataIndex[i][0], MenuMouseDataIndex[i][1], controldevice_mouse);
|
|
|
|
CONTROL_FreeMouseBind(MenuMouseDataIndex[i][0]);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupMouseButtonMenu(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
for (int i = 0; i < MENUMOUSEFUNCTIONS; i++)
|
|
|
|
{
|
|
|
|
auto pItem = pItemOptionsControlMouseButton[i];
|
|
|
|
pItem->m_nFocus = 0;
|
|
|
|
for (int j = 0; j < NUMGAMEFUNCTIONS+1; j++)
|
|
|
|
{
|
|
|
|
if (MouseFunctions[MenuMouseDataIndex[i][0]][MenuMouseDataIndex[i][1]] == nGamefuncsValues[j])
|
|
|
|
{
|
|
|
|
pItem->m_nFocus = j;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupNetworkMenu(void)
|
|
|
|
{
|
|
|
|
sprintf(zNetPortBuffer, "%d", gNetPort);
|
|
|
|
if (strlen(gNetAddress) > 0)
|
|
|
|
strncpy(zNetAddressBuffer, gNetAddress, sizeof(zNetAddressBuffer)-1);
|
|
|
|
|
|
|
|
menuNetwork.Add(&itemNetworkTitle, false);
|
|
|
|
menuNetwork.Add(&itemNetworkHost, true);
|
|
|
|
menuNetwork.Add(&itemNetworkJoin, false);
|
|
|
|
menuNetwork.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuNetworkHost.Add(&itemNetworkHostTitle, false);
|
|
|
|
menuNetworkHost.Add(&itemNetworkHostPlayerNum, true);
|
|
|
|
menuNetworkHost.Add(&itemNetworkHostPort, false);
|
|
|
|
menuNetworkHost.Add(&itemNetworkHostHost, false);
|
|
|
|
menuNetworkHost.Add(&itemBloodQAV, false);
|
|
|
|
|
|
|
|
menuNetworkJoin.Add(&itemNetworkJoinTitle, false);
|
|
|
|
menuNetworkJoin.Add(&itemNetworkJoinAddress, true);
|
|
|
|
menuNetworkJoin.Add(&itemNetworkJoinPort, false);
|
|
|
|
menuNetworkJoin.Add(&itemNetworkJoinJoin, false);
|
|
|
|
menuNetworkJoin.Add(&itemBloodQAV, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupNetworkHostMenu(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupNetworkJoinMenu(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void NetworkHostGame(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
sndStopSong();
|
|
|
|
FX_StopAllSounds();
|
|
|
|
UpdateDacs(0, true);
|
|
|
|
gNetPlayers = itemNetworkHostPlayerNum.nValue;
|
|
|
|
gNetPort = strtoul(zNetPortBuffer, NULL, 10);
|
|
|
|
if (!gNetPort)
|
|
|
|
gNetPort = kNetDefaultPort;
|
|
|
|
gNetMode = NETWORK_SERVER;
|
|
|
|
netInitialize(false);
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
gQuitGame = gRestartGame = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void NetworkJoinGame(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
sndStopSong();
|
|
|
|
FX_StopAllSounds();
|
|
|
|
UpdateDacs(0, true);
|
|
|
|
strcpy(gNetAddress, zNetAddressBuffer);
|
|
|
|
gNetPort = strtoul(zNetPortBuffer, NULL, 10);
|
|
|
|
if (!gNetPort)
|
|
|
|
gNetPort = kNetDefaultPort;
|
|
|
|
gNetMode = NETWORK_CLIENT;
|
|
|
|
netInitialize(false);
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
gQuitGame = gRestartGame = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SaveGameProcess(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TenProcess(CGameMenuItem7EA1C *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
short gQuickLoadSlot = -1;
|
|
|
|
short gQuickSaveSlot = -1;
|
|
|
|
|
|
|
|
void SaveGame(CGameMenuItemZEditBitmap *pItem, CGameMenuEvent *event)
|
|
|
|
{
|
|
|
|
char strSaveGameName[BMAX_PATH];
|
|
|
|
int nSlot = pItem->at28;
|
|
|
|
if (gGameOptions.nGameType > 0 || !gGameStarted)
|
|
|
|
return;
|
|
|
|
if (event->at0 != 6/* || strSaveGameName[0]*/)
|
|
|
|
{
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
G_ModDirSnprintf(strSaveGameName, BMAX_PATH, "game00%02d.sav", nSlot);
|
|
|
|
strcpy(gGameOptions.szUserGameName, strRestoreGameStrings[nSlot]);
|
|
|
|
sprintf(gGameOptions.szSaveGameName, "%s", strSaveGameName);
|
|
|
|
gGameOptions.nSaveGameSlot = nSlot;
|
|
|
|
viewLoadingScreen(2518, "Saving", "Saving Your Game", strRestoreGameStrings[nSlot]);
|
2019-07-28 10:15:35 +00:00
|
|
|
videoNextPage();
|
2019-09-19 22:42:45 +00:00
|
|
|
gSaveGameNum = nSlot;
|
|
|
|
LoadSave::SaveGame(strSaveGameName);
|
|
|
|
gQuickSaveSlot = nSlot;
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void QuickSaveGame(void)
|
|
|
|
{
|
|
|
|
char strSaveGameName[BMAX_PATH];
|
|
|
|
if (gGameOptions.nGameType > 0 || !gGameStarted)
|
|
|
|
return;
|
|
|
|
/*if (strSaveGameName[0])
|
|
|
|
{
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
return;
|
|
|
|
}*/
|
|
|
|
G_ModDirSnprintf(strSaveGameName, BMAX_PATH, "game00%02d.sav", gQuickSaveSlot);
|
|
|
|
strcpy(gGameOptions.szUserGameName, strRestoreGameStrings[gQuickSaveSlot]);
|
|
|
|
sprintf(gGameOptions.szSaveGameName, "%s", strSaveGameName);
|
|
|
|
gGameOptions.nSaveGameSlot = gQuickSaveSlot;
|
|
|
|
viewLoadingScreen(2518, "Saving", "Saving Your Game", strRestoreGameStrings[gQuickSaveSlot]);
|
2019-07-28 10:15:35 +00:00
|
|
|
videoNextPage();
|
2019-09-19 22:42:45 +00:00
|
|
|
LoadSave::SaveGame(strSaveGameName);
|
|
|
|
gGameOptions.picEntry = gSavedOffset;
|
|
|
|
gSaveGameOptions[gQuickSaveSlot] = gGameOptions;
|
|
|
|
UpdateSavedInfo(gQuickSaveSlot);
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void LoadGame(CGameMenuItemZEditBitmap *pItem, CGameMenuEvent *event)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(event);
|
|
|
|
char strLoadGameName[BMAX_PATH];
|
|
|
|
int nSlot = pItem->at28;
|
|
|
|
if (gGameOptions.nGameType > 0)
|
|
|
|
return;
|
|
|
|
G_ModDirSnprintf(strLoadGameName, BMAX_PATH, "game00%02d.sav", nSlot);
|
|
|
|
if (!testkopen(strLoadGameName, 0))
|
|
|
|
return;
|
|
|
|
viewLoadingScreen(2518, "Loading", "Loading Saved Game", strRestoreGameStrings[nSlot]);
|
2019-07-28 10:15:35 +00:00
|
|
|
videoNextPage();
|
2019-09-19 22:42:45 +00:00
|
|
|
LoadSave::LoadGame(strLoadGameName);
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
gQuickLoadSlot = nSlot;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QuickLoadGame(void)
|
|
|
|
{
|
|
|
|
char strLoadGameName[BMAX_PATH];
|
|
|
|
if (gGameOptions.nGameType > 0)
|
|
|
|
return;
|
|
|
|
G_ModDirSnprintf(strLoadGameName, BMAX_PATH, "game00%02d.sav", gQuickLoadSlot);
|
|
|
|
if (!testkopen(strLoadGameName, 0))
|
|
|
|
return;
|
|
|
|
viewLoadingScreen(2518, "Loading", "Loading Saved Game", strRestoreGameStrings[gQuickLoadSlot]);
|
2019-07-28 10:15:35 +00:00
|
|
|
videoNextPage();
|
2019-09-19 22:42:45 +00:00
|
|
|
LoadSave::LoadGame(strLoadGameName);
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupLevelMenuItem(int nEpisode)
|
|
|
|
{
|
|
|
|
dassert(nEpisode >= 0 && nEpisode < gEpisodeCount);
|
|
|
|
itemNetStart3.SetTextArray(zLevelNames[nEpisode], gEpisodeInfo[nEpisode].nLevels, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetupNetLevels(CGameMenuItemZCycle *pItem)
|
|
|
|
{
|
|
|
|
SetupLevelMenuItem(pItem->m_nFocus);
|
|
|
|
}
|
|
|
|
|
|
|
|
void StartNetGame(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
gPacketStartGame.gameType = itemNetStart1.m_nFocus+1;
|
|
|
|
if (gPacketStartGame.gameType == 0)
|
|
|
|
gPacketStartGame.gameType = 2;
|
|
|
|
gPacketStartGame.episodeId = itemNetStart2.m_nFocus;
|
|
|
|
gPacketStartGame.levelId = itemNetStart3.m_nFocus;
|
|
|
|
gPacketStartGame.difficulty = itemNetStart4.m_nFocus;
|
|
|
|
gPacketStartGame.monsterSettings = itemNetStart5.m_nFocus;
|
|
|
|
gPacketStartGame.weaponSettings = itemNetStart6.m_nFocus;
|
|
|
|
gPacketStartGame.itemSettings = itemNetStart7.m_nFocus;
|
|
|
|
gPacketStartGame.respawnSettings = 0;
|
2019-09-20 10:11:07 +00:00
|
|
|
gPacketStartGame.bFriendlyFire = itemNetStart8.at20;
|
|
|
|
gPacketStartGame.bKeepKeysOnRespawn = itemNetStart9.at20;
|
2019-09-22 07:18:04 +00:00
|
|
|
////
|
|
|
|
gPacketStartGame.weaponsV10x = itemNetStart10.at20;
|
|
|
|
////
|
2019-09-19 22:42:45 +00:00
|
|
|
gPacketStartGame.unk = 0;
|
|
|
|
gPacketStartGame.userMapName[0] = 0;
|
2019-09-22 07:18:04 +00:00
|
|
|
strncpy(gPacketStartGame.userMapName, itemNetStart11.at20, 13);
|
2019-09-19 22:42:45 +00:00
|
|
|
gPacketStartGame.userMapName[12] = 0;
|
|
|
|
gPacketStartGame.userMap = gPacketStartGame.userMapName[0] != 0;
|
2019-09-21 11:02:17 +00:00
|
|
|
|
2019-09-19 22:42:45 +00:00
|
|
|
netBroadcastNewGame();
|
|
|
|
gStartNewGame = 1;
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Restart(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
if (gGameOptions.nGameType == 0 || numplayers == 1)
|
|
|
|
{
|
|
|
|
gQuitGame = true;
|
|
|
|
gRestartGame = true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
gQuitRequest = 2;
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Quit(CGameMenuItemChain *pItem)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(pItem);
|
|
|
|
if (gGameOptions.nGameType == 0 || numplayers == 1)
|
|
|
|
gQuitGame = true;
|
|
|
|
else
|
|
|
|
gQuitRequest = 1;
|
|
|
|
gGameMenuMgr.Deactivate();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetParentalLock(CGameMenuItemZBool *pItem)
|
|
|
|
{
|
|
|
|
if (!pItem->at20)
|
|
|
|
{
|
|
|
|
pItem->at20 = true;
|
|
|
|
pItem->Draw();
|
|
|
|
if (strcmp(itemParentalLockPassword.at20, ""))
|
|
|
|
{
|
|
|
|
itemParentalLockPassword.pMenu->FocusNextItem();
|
|
|
|
itemParentalLockPassword.at32 = 0;
|
|
|
|
itemParentalLockPassword.at37 = 1;
|
|
|
|
itemParentalLockPassword.at5f = pItem;
|
|
|
|
itemParentalLockPassword.at29[0] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
itemParentalLockPassword.at20[0] = 0;
|
|
|
|
pItem->Draw();
|
|
|
|
gbAdultContent = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
gbAdultContent = true;
|
|
|
|
// NUKE-TODO: CONFIG_WriteAdultMode();
|
|
|
|
}
|
|
|
|
|
|
|
|
void MenuSetupEpisodeInfo(void)
|
|
|
|
{
|
|
|
|
memset(zEpisodeNames, 0, sizeof(zEpisodeNames));
|
|
|
|
memset(zLevelNames, 0, sizeof(zLevelNames));
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
|
|
{
|
|
|
|
if (i < gEpisodeCount)
|
|
|
|
{
|
|
|
|
EPISODEINFO *pEpisode = &gEpisodeInfo[i];
|
|
|
|
zEpisodeNames[i] = pEpisode->at0;
|
|
|
|
for (int j = 0; j < 16; j++)
|
|
|
|
{
|
|
|
|
if (j < pEpisode->nLevels)
|
|
|
|
{
|
|
|
|
zLevelNames[i][j] = pEpisode->at28[j].at90;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void drawLoadingScreen(void)
|
|
|
|
{
|
|
|
|
char buffer[80];
|
|
|
|
if (gGameOptions.nGameType == 0)
|
|
|
|
{
|
|
|
|
if (gDemo.at1)
|
|
|
|
sprintf(buffer, "Loading Demo");
|
|
|
|
else
|
|
|
|
sprintf(buffer, "Loading Level");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf(buffer, "%s", zNetGameTypes[gGameOptions.nGameType-1]);
|
|
|
|
viewLoadingScreen(2049, buffer, levelGetTitle(), NULL);
|
|
|
|
}
|
2019-09-22 06:39:22 +00:00
|
|
|
|
|
|
|
END_BLD_NS
|