//------------------------------------------------------------------------- /* 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. */ //------------------------------------------------------------------------- #include "ns.h" // Must come before everything else! #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" #include "cmdlib.h" #include "i_specialpaths.h" #include "savegamehelp.h" EXTERN_CVAR(Bool, hud_powerupduration) BEGIN_BLD_NS #if 0 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 SetShowPlayerNames(CGameMenuItemZBool *); void SetShowWeapons(CGameMenuItemZCycle *); void SetSlopeTilting(CGameMenuItemZBool *); void SetViewBobbing(CGameMenuItemZBool *); void SetViewSwaying(CGameMenuItemZBool *); void SetMouseSensitivity(CGameMenuItemSliderFloat *); void SetMouseAimFlipped(CGameMenuItemZBool *); void SetTurnSpeed(CGameMenuItemSlider *); void ConfigureKeys(CGameMenuItemChain*); 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 *); void SetWeaponsV10X(CGameMenuItemZBool* pItem); #ifdef USE_OPENGL void SetupVideoPolymostMenu(CGameMenuItemChain *); #endif char strRestoreGameStrings[][16] = { "", "", "", "", "", "", "", "", "", "", }; 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", }; const char *pzShowWeaponStrings[] = { "OFF", "SPRITE", "VOXEL" }; char zUserMapName[16]; const char *zEpisodeNames[6]; const char *zLevelNames[6][16]; static FString MenuGameFuncs[NUMGAMEFUNCTIONS]; 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; 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); 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); //CGameMenuItemSlider sliderCDAudio("CD AUDIO:", 3, 66, 90, 180, CDVolume, 0, 256, 48, SetCDVol, -1, -1); CGameMenuItemZBool bool3DAudio("3D AUDIO:", 3, 66, 100, 180, snd_doppler, SetDoppler, NULL, NULL); CGameMenuItemZBool boolCrosshair("CROSSHAIR:", 3, 66, 110, 180, cl_crosshair, SetCrosshair, NULL, NULL); CGameMenuItemZCycle itemCycleShowWeapons("SHOW WEAPONS:", 3, 66, 120, 180, 0, SetShowWeapons, pzShowWeaponStrings, ARRAY_SSIZE(pzShowWeaponStrings), 0); 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); 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, in_mousesensitivity, 0.5f, 16.f, 0.5f, SetMouseSensitivity, -1,-1); CGameMenuItemZBool boolMouseFlipped("Invert Mouse Aim:", 1, 10, 90, 300, in_mouseflip, SetMouseAimFlipped, NULL, NULL); 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, ConfigureKeys, 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); 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); 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); CGameMenuItemText itemLoadingText("LOADING...", 1, 160, 100, 1); CGameMenuItemTitle itemSoundsTitle("SOUNDS", 1, 160, 20, 2038); 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); //CGameMenuItemSlider itemSoundsCDAudio("CD AUDIO:", 3, 40, 80, 180, CDVolume, 0, 256, 48, SetCDVol, -1, -1); CGameMenuItemZBool itemSounds3DAudio("3D SOUND:", 3, 40, 90, 180, snd_doppler, SetDoppler, NULL, NULL); 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); /////////////// CGameMenuItemZBool itemOptionsGameBoolWeaponsV10X("V1.0x WEAPONS BALANCE:", 3, 66, 130, 180, gWeaponsV10x, SetWeaponsV10X, NULL, NULL); /////////////////// CGameMenuItemZBool itemOptionsGameBoolShowPlayerNames("SHOW PLAYER NAMES:", 3, 66, 60, 180, cl_idplayers, SetShowPlayerNames, NULL, NULL); CGameMenuItemZCycle itemOptionsGameShowWeapons("SHOW WEAPONS:", 3, 66, 70, 180, 0, SetShowWeapons, pzShowWeaponStrings, ARRAY_SSIZE(pzShowWeaponStrings), 0); 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); 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); CGameMenuItemZBool itemOptionsDisplayBoolCrosshair("CROSSHAIR:", 3, 66, 80, 180, cl_crosshair, SetCrosshair, NULL, NULL); CGameMenuItemZBool itemOptionsDisplayBoolCenterHoriz("CENTER HORIZON LINE:", 3, 66, 90, 180, r_horizcenter, SetCenterHoriz, NULL, NULL); CGameMenuItemZBool itemOptionsDisplayBoolLevelStats("LEVEL STATS:", 3, 66, 100, 180, hud_stats, SetLevelStats, NULL, NULL); CGameMenuItemZBool itemOptionsDisplayBoolPowerupDuration("POWERUP DURATION:", 3, 66, 110, 180, hud_powerupduration, SetPowerupDuration, NULL, NULL); CGameMenuItemZBool itemOptionsDisplayBoolShowMapTitle("MAP TITLE:", 3, 66, 120, 180, hud_showmapname, SetShowMapTitle, NULL, NULL); CGameMenuItemZBool itemOptionsDisplayBoolMessages("MESSAGES:", 3, 66, 130, 180, hud_messages, SetMessages, NULL, NULL); CGameMenuItemZBool itemOptionsDisplayBoolWidescreen("WIDESCREEN:", 3, 66, 140, 180, r_usenewaspect, SetWidescreen, NULL, NULL); CGameMenuItemSlider itemOptionsDisplayFOV("FOV:", 3, 66, 150, 180, &r_fov.Value, 75, 140, 5, SetFOV, -1, -1, kMenuSliderValue); #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, &vid_gamma.Value, 0.3f, 4.f, 0.1f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue); CGameMenuItemSliderFloat itemOptionsDisplayColorContrast("CONTRAST:", 3, 66, 150, 180, &vid_contrast.Value, 0.1f, 2.7f, 0.05f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue); CGameMenuItemSliderFloat itemOptionsDisplayColorBrightness("BRIGHTNESS:", 3, 66, 160, 180, &vid_brightness.Value, -0.8f, 0.8f, 0.05f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue); CGameMenuItemSliderFloat itemOptionsDisplayColorVisibility("VISIBILITY:", 3, 66, 170, 180, &r_ambientlight.Value, 0.125f, 4.f, 0.125f, UpdateVideoColorMenu, -1, -1, kMenuSliderValue); 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); 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 }; int nMusicDeviceValues[] = { ASS_OPL3, #ifdef _WIN32 ASS_WinMM, #endif }; const char *pzMusicDeviceStrings[] = { "OPL3(SB/ADLIB)", #ifdef _WIN32 "SYSTEM MIDI", #endif }; 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); 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); CGameMenuItemZCycle itemOptionsSoundSampleRate("SAMPLE RATE:", 3, 66, 110, 180, 0, UpdateSoundRate, pzSoundRateStrings, 3, 0); CGameMenuItemSlider itemOptionsSoundNumVoices("VOICES:", 3, 66, 120, 180, snd_numvoices, 16, 256, 16, UpdateNumVoices, -1, -1, kMenuSliderValue); CGameMenuItemZBool itemOptionsSoundCDToggle("REDBOOK AUDIO:", 3, 66, 130, 180, false, UpdateCDToggle, NULL, NULL); CGameMenuItemZCycle itemOptionsSoundMusicDevice("MUSIC DEVICE:", 3, 66, 140, 180, 0, UpdateMusicDevice, pzMusicDeviceStrings, ARRAY_SIZE(pzMusicDeviceStrings), 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); // This won't work without messing around with stuff. So it'll have to wait for the new options menu. //CGameMenuItemZEdit itemOptionsPlayerName("PLAYER NAME:", 3, 66, 60, 180, *playername, MAXPLAYERNAME, 0, UpdatePlayerName, 0); CGameMenu menuOptionsControlKeyboard; CGameMenu menuOptionsControlMouse; CGameMenu menuOptionsControlMouseButtonAssignment; void SetupMouseMenu(CGameMenuItemChain *pItem); CGameMenuItemTitle itemOptionsControlTitle("CONTROL SETUP", 1, 160, 20, 2038); CGameMenuItemChain itemOptionsControlKeyboard("CONFIGURE CONTROLS", 1, 0, 60, 320, 1, &menuOptionsControlKeyboard, -1, NULL, 0); CGameMenuItemChain itemOptionsControlMouse("MOUSE SETUP", 1, 0, 80, 320, 1, &menuOptionsControlMouse, -1, SetupMouseMenu, 0); CGameMenuItemTitle itemOptionsControlKeyboardTitle("CONFIGURE CONTROLS", 1, 160, 20, 2038); CGameMenuItemChain itemOptionsControlKeyboardList("Edit Configuration...", 1, 0, 60, 320, 1, &menuKeys, -1, ConfigureKeys, 0); CGameMenuItemChain itemOptionsControlKeyboardReset("Reset Configuration (default)...", 1, 0, 80, 320, 1, &menuKeys, -1, ResetKeys, 0); CGameMenuItemChain itemOptionsControlKeyboardResetClassic("Reset Configuration (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, &in_mousesensitivity.Value, 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*)&in_mousescalex, 0, 65536, 1024, SetMouseXScale, -1, -1, kMenuSliderQ16); CGameMenuItemSlider itemOptionsControlMouseYScale("Y-SCALE:", 3, 66, 130, 180, (int*)&in_mousescaley, 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(in_mousesensitivity, sliderMouseSpeed.fRangeLow, sliderMouseSpeed.fRangeHigh); sliderTurnSpeed.nValue = ClipRange(gTurnSpeed, sliderTurnSpeed.nRangeLow, sliderTurnSpeed.nRangeHigh); boolMouseFlipped.at20 = in_mouseflip; 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); sliderMusic.nValue = ClipRange(mus_volume, sliderMusic.nRangeLow, sliderMusic.nRangeHigh); sliderSound.nValue = ClipRange(snd_fxvolume, sliderSound.nRangeLow, sliderSound.nRangeHigh); bool3DAudio.at20 = snd_doppler; boolCrosshair.at20 = cl_crosshair; itemCycleShowWeapons.m_nFocus = cl_showweapon; boolSlopeTilting.at20 = cl_slopetilting; boolViewBobbing.at20 = cl_viewvbob; boolViewSwaying.at20 = cl_viewhbob; boolMessages.at20 = gGameMessageMgr.state; menuOptionsOld.Add(&itemOptionsTitle, false); menuOptionsOld.Add(&itemOption1, true); menuOptionsOld.Add(&sliderDetail, false); menuOptionsOld.Add(&sliderGamma, false); menuOptionsOld.Add(&sliderMusic, false); menuOptionsOld.Add(&sliderSound, false); //menuOptionsOld.Add(&sliderCDAudio, false); menuOptionsOld.Add(&bool3DAudio, false); menuOptionsOld.Add(&boolCrosshair, false); menuOptionsOld.Add(&itemCycleShowWeapons, 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); menuNetStart.Add(&itemNetStart8, false); menuNetStart.Add(&itemNetStart9, false); menuNetStart.Add(&itemNetStart10, false); menuNetStart.Add(&itemNetStart11, false); menuNetStart.Add(&itemNetStart12, false); 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], "")) itemSaveGame1.at37 = 1; itemSaveGame2.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[1], "")) itemSaveGame2.at37 = 1; itemSaveGame3.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[2], "")) itemSaveGame3.at37 = 1; itemSaveGame4.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[3], "")) itemSaveGame4.at37 = 1; itemSaveGame5.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[4], "")) itemSaveGame5.at37 = 1; itemSaveGame6.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[5], "")) itemSaveGame6.at37 = 1; itemSaveGame7.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[6], "")) itemSaveGame7.at37 = 1; itemSaveGame8.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[7], "")) itemSaveGame8.at37 = 1; itemSaveGame9.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[8], "")) itemSaveGame9.at37 = 1; itemSaveGame10.at2c = &itemSaveGamePic; if (!strcmp(strRestoreGameStrings[9], "")) 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) { itemSoundsMusic.nValue = ClipRange(mus_volume, itemSoundsMusic.nRangeLow, itemSoundsMusic.nRangeHigh); itemSoundsSound.nValue = ClipRange(snd_fxvolume, itemSoundsSound.nRangeLow, itemSoundsSound.nRangeHigh); menuSounds.Add(&itemSoundsTitle, false); menuSounds.Add(&itemSoundsMusic, true); menuSounds.Add(&itemSoundsSound, false); //menuSounds.Add(&itemSoundsCDAudio, false); 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(&itemOptionsGameBoolShowPlayerNames, true); menuOptionsGame.Add(&itemOptionsGameShowWeapons, false); menuOptionsGame.Add(&itemOptionsGameBoolSlopeTilting, false); menuOptionsGame.Add(&itemOptionsGameBoolViewBobbing, false); menuOptionsGame.Add(&itemOptionsGameBoolViewSwaying, false); menuOptionsGame.Add(&itemOptionsGameBoolAutoAim, false); menuOptionsGame.Add(&itemOptionsGameWeaponSwitch, false); ////////////////////// if (gGameOptions.nGameType == 0) { menuOptionsGame.Add(&itemOptionsGameBoolWeaponsV10X, false); } ///////////////////// //menuOptionsGame.Add(&itemOptionsGameChainParentalLock, false); menuOptionsGame.Add(&itemBloodQAV, false); itemOptionsGameShowWeapons.m_nFocus = cl_showweapon; itemOptionsGameBoolSlopeTilting.at20 = cl_slopetilting; itemOptionsGameBoolViewBobbing.at20 = cl_viewvbob; itemOptionsGameBoolViewSwaying.at20 = cl_viewhbob; itemOptionsGameBoolAutoAim.m_nFocus = cl_autoaim; itemOptionsGameWeaponSwitch.m_nFocus = (cl_weaponswitch&1) ? ((cl_weaponswitch&2) ? 1 : 2) : 0; /////// itemOptionsGameBoolWeaponsV10X.at20 = gWeaponsV10x; /////// 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); itemOptionsDisplayBoolCrosshair.at20 = cl_crosshair; itemOptionsDisplayBoolCenterHoriz.at20 = r_horizcenter; itemOptionsDisplayBoolLevelStats.at20 = hud_stats; itemOptionsDisplayBoolPowerupDuration.at20 = hud_powerupduration; itemOptionsDisplayBoolShowMapTitle.at20 = hud_showmapname; itemOptionsDisplayBoolMessages.at20 = hud_messages; 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(&itemOptionsDisplayPolymostPreloadCache, false); menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostDetailTex, false); menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostGlowTex, false); menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymost3DModels, false); menuOptionsDisplayPolymost.Add(&itemOptionsDisplayPolymostDeliriumBlur, false); menuOptionsDisplayPolymost.Add(&itemBloodQAV, false); 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) { MenuGameFuncs[i] = buttonMap.GetButtonName(i); MenuGameFuncs[i].Substitute('_', ' '); if (MenuGameFuncs[i][0] != '\0') { 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 SetDoppler(CGameMenuItemZBool *pItem) { snd_doppler = pItem->at20; } void SetCrosshair(CGameMenuItemZBool *pItem) { cl_crosshair = pItem->at20; } void SetCenterHoriz(CGameMenuItemZBool *pItem) { r_horizcenter = pItem->at20; } void ConfigureKeys(CGameMenuItemChain*) { GUICapture |= 2; } void ResetKeys(CGameMenuItemChain *) { CONFIG_SetDefaultKeys("demolition/defbinds.txt"); } void ResetKeysClassic(CGameMenuItemChain *) { CONFIG_SetDefaultKeys("demolition/origbinds.txt"); } //// void SetWeaponsV10X(CGameMenuItemZBool* pItem) { if (gGameOptions.nGameType == 0) { gWeaponsV10x = pItem->at20; gGameOptions.weaponsV10x = pItem->at20; } } //// void SetShowPlayerNames(CGameMenuItemZBool *pItem) { cl_idplayers = pItem->at20; } void SetShowWeapons(CGameMenuItemZCycle *pItem) { cl_showweapon = pItem->m_nFocus; } void SetSlopeTilting(CGameMenuItemZBool *pItem) { cl_slopetilting = pItem->at20; } void SetViewBobbing(CGameMenuItemZBool *pItem) { cl_viewvbob = pItem->at20; } void SetViewSwaying(CGameMenuItemZBool *pItem) { cl_viewhbob = pItem->at20; } void SetDetail(CGameMenuItemSlider *pItem) { gDetail = pItem->nValue; } void SetGamma(CGameMenuItemSlider *pItem) { gGamma = pItem->nValue; scrSetGamma(gGamma); } void SetMusicVol(CGameMenuItemSlider *pItem) { mus_volume = pItem->nValue; } void SetSoundVol(CGameMenuItemSlider *pItem) { snd_fxvolume = pItem->nValue; sndSetFXVolume(pItem->nValue); } void SetCDVol(CGameMenuItemSlider *pItem) { UNREFERENCED_PARAMETER(pItem); // NUKE-TODO: } void SetMessages(CGameMenuItemZBool *pItem) { hud_messages = pItem->at20; } void SetMouseSensitivity(CGameMenuItemSliderFloat *pItem) { in_mousesensitivity = pItem->fValue; } void SetMouseAimFlipped(CGameMenuItemZBool *pItem) { in_mouseflip = pItem->at20; } void SetTurnSpeed(CGameMenuItemSlider *pItem) { gTurnSpeed = pItem->nValue; } void SetAutoAim(CGameMenuItemZCycle *pItem) { cl_autoaim = pItem->m_nFocus; if (!gDemo.at0 && !gDemo.at1) { gProfile[myconnectindex].nAutoAim = cl_autoaim; netBroadcastPlayerInfo(myconnectindex); } } void SetLevelStats(CGameMenuItemZBool *pItem) { hud_stats = pItem->at20; } void SetPowerupDuration(CGameMenuItemZBool* pItem) { hud_powerupduration = pItem->at20; } void SetShowMapTitle(CGameMenuItemZBool* pItem) { hud_showmapname = pItem->at20; } void SetWeaponSwitch(CGameMenuItemZCycle *pItem) { cl_weaponswitch = cl_weaponswitch & ~(1|2); switch (pItem->m_nFocus) { case 0: break; case 1: cl_weaponswitch = cl_weaponswitch | 2; fallthrough__; case 2: default: cl_weaponswitch = cl_weaponswitch | 1; break; } if (!gDemo.at0 && !gDemo.at1) { gProfile[myconnectindex].nWeaponSwitch = cl_weaponswitch; 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) { ScreenMode = 0; ScreenWidth = 640; ScreenHeight = 480; } else { ScreenMode = 0; ScreenWidth = validmode[pItem->at30].xdim; ScreenHeight = validmode[pItem->at30].ydim; } scrSetGameMode(ScreenMode, ScreenWidth, ScreenHeight, ScreenBPP); scrSetDac(); viewResizeView(gViewSize); } void SetVideoMode(CGameMenuItemChain *pItem) { UNREFERENCED_PARAMETER(pItem); resolution_t p = { xres, yres, fullscreen, bpp, 0 }; int32_t prend = videoGetRenderMode(); int32_t pvsync = vid_vsync; 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); vid_vsync = videoSetVsync(pvsync); } } else onvideomodechange(n.bppmax > 8); viewResizeView(gViewSize); vid_vsync = videoSetVsync(nvsync); ScreenMode = fullscreen; ScreenWidth = xres; ScreenHeight = yres; ScreenBPP = bpp; } void SetWidescreen(CGameMenuItemZBool *pItem) { r_usenewaspect = pItem->at20; } void SetFOV(CGameMenuItemSlider *pItem) { r_fov = pItem->nValue; } void SetupVideoModeMenu(CGameMenuItemChain *pItem) { UNREFERENCED_PARAMETER(pItem); for (int i = 0; i < gResolutionNum; i++) { if (ScreenWidth == gResolution[i].xdim && ScreenHeight == gResolution[i].ydim) { itemOptionsDisplayModeResolution.m_nFocus = i; break; } } itemOptionsDisplayModeFullscreen.at20 = ScreenMode; #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++) { if (vid_vsync == nVSyncValues[i]) { 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); vid_gamma = itemOptionsDisplayColorGamma.fValue; vid_contrast = itemOptionsDisplayColorContrast.fValue; vid_brightness = itemOptionsDisplayColorBrightness.fValue; r_ambientlight = itemOptionsDisplayColorVisibility.fValue; } void PreDrawDisplayColor(CGameMenuItem *pItem) { if (pItem == &itemOptionsDisplayColorContrast) pItem->bEnable = 1; else if (pItem == &itemOptionsDisplayColorBrightness) pItem->bEnable = 1; } void ResetVideoColor(CGameMenuItemChain *pItem) { UNREFERENCED_PARAMETER(pItem); vid_gamma = 1.f; vid_contrast = 1.f; vid_brightness = 0.f; r_ambientlight = 1.f; } #ifdef USE_OPENGL void SetupVideoPolymostMenu(CGameMenuItemChain *pItem) { UNREFERENCED_PARAMETER(pItem); itemOptionsDisplayPolymostTextureMode.m_nFocus = 0; for (int i = 0; i < 2; i++) { if (nTextureModeValues[i] == hw_texfilter) { itemOptionsDisplayPolymostTextureMode.m_nFocus = i; break; } } itemOptionsDisplayPolymostAnisotropy.m_nFocus = 0; for (int i = 0; i < 6; i++) { if (nAnisotropyValues[i] == hw_anisotropy) { itemOptionsDisplayPolymostAnisotropy.m_nFocus = i; break; } } itemOptionsDisplayPolymostTrueColorTextures.at20 = hw_hightile; itemOptionsDisplayPolymostPreloadCache.at20 = r_precache; itemOptionsDisplayPolymostDetailTex.at20 = hw_detailmapping; itemOptionsDisplayPolymostGlowTex.at20 = hw_glowmapping; itemOptionsDisplayPolymost3DModels.at20 = hw_models; itemOptionsDisplayPolymostDeliriumBlur.at20 = gDeliriumBlur; } void UpdateTextureMode(CGameMenuItemZCycle *pItem) { hw_texfilter = nTextureModeValues[pItem->m_nFocus]; gltexapplyprops(); } void UpdateAnisotropy(CGameMenuItemZCycle *pItem) { hw_anisotropy = nAnisotropyValues[pItem->m_nFocus]; gltexapplyprops(); } void UpdateTrueColorTextures(CGameMenuItemZBool *pItem) { hw_hightile = pItem->at20; } #endif void DoModeChange(void) { videoResetMode(); if (videoSetGameMode(fullscreen, xres, yres, bpp, upscalefactor)) OSD_Printf("restartvid: Reset failed...\n"); onvideomodechange(ScreenBPP > 8); } #ifdef USE_OPENGL void UpdatePreloadCache(CGameMenuItemZBool *pItem) { r_precache = pItem->at20; } void UpdateDetailTex(CGameMenuItemZBool *pItem) { hw_detailmapping = pItem->at20; } void UpdateGlowTex(CGameMenuItemZBool *pItem) { hw_glowmapping = pItem->at20; } void Update3DModels(CGameMenuItemZBool *pItem) { hw_models = pItem->at20; } void UpdateDeliriumBlur(CGameMenuItemZBool *pItem) { gDeliriumBlur = pItem->at20; } void PreDrawDisplayPolymost(CGameMenuItem *pItem) { if (pItem == &itemOptionsDisplayPolymostPreloadCache) pItem->bEnable = hw_hightile; else if (pItem == &itemOptionsDisplayPolymostDetailTex) pItem->bEnable = hw_hightile; else if (pItem == &itemOptionsDisplayPolymostGlowTex) pItem->bEnable = hw_hightile; } #endif void UpdateSoundToggle(CGameMenuItemZBool *pItem) { snd_enabled = pItem->at20; if (!SoundEnabled()) FX_StopAllSounds(); } void UpdateMusicToggle(CGameMenuItemZBool *pItem) { mus_enabled = pItem->at20; } void Update3DToggle(CGameMenuItemZBool *pItem) { snd_doppler = pItem->at20; } void UpdateCDToggle(CGameMenuItemZBool *pItem) { mus_redbook = pItem->at20; if (gGameStarted || gDemo.at1) levelTryPlayMusicOrNothing(gGameOptions.nEpisode, gGameOptions.nLevel); } void UpdateSoundVolume(CGameMenuItemSlider *pItem) { sndSetFXVolume(pItem->nValue); } void UpdateMusicVolume(CGameMenuItemSlider *pItem) { mus_volume = 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); snd_mixrate = nSoundRateValues[itemOptionsSoundSampleRate.m_nFocus]; snd_numvoices = itemOptionsSoundNumVoices.nValue; mus_device = nMusicDeviceValues[itemOptionsSoundMusicDevice.m_nFocus]; sfxTerm(); sndTerm(); sndInit(); sfxInit(); } void PreDrawSound(CGameMenuItem *pItem) { UNREFERENCED_PARAMETER(pItem); } void SetupOptionsSound(CGameMenuItemChain *pItem) { UNREFERENCED_PARAMETER(pItem); itemOptionsSoundSoundToggle.at20 = snd_enabled; itemOptionsSoundMusicToggle.at20 = mus_enabled; itemOptionsSound3DToggle.at20 = snd_doppler; itemOptionsSoundCDToggle.at20 = mus_redbook; itemOptionsSoundSampleRate.m_nFocus = 0; for (int i = 0; i < 3; i++) { if (nSoundRateValues[i] == snd_mixrate) { itemOptionsSoundSampleRate.m_nFocus = i; break; } } itemOptionsSoundNumVoices.nValue = snd_numvoices; itemOptionsSoundMusicDevice.m_nFocus = 0; for (int i = 0; i < ARRAY_SIZE(nMusicDeviceValues); i++) { if (nMusicDeviceValues[i] == MusicDevice) { itemOptionsSoundMusicDevice.m_nFocus = i; break; } } } void UpdatePlayerName(CGameMenuItemZEdit *pItem, CGameMenuEvent *pEvent) { UNREFERENCED_PARAMETER(pItem); if (pEvent->at0 == kMenuEventEnter) netBroadcastPlayerInfo(myconnectindex); } void SetMouseFilterInput(CGameMenuItemZBool *pItem) { in_mousesmoothing = pItem->at20; } void SetMouseVerticalAim(CGameMenuItemZBool *pItem) { in_mousemode = pItem->at20; } void SetMouseXScale(CGameMenuItemSlider *pItem) { in_mousescalex = pItem->nValue; } void SetMouseYScale(CGameMenuItemSlider *pItem) { in_mousescaley = pItem->nValue; } void SetMouseDigitalAxis(CGameMenuItemZCycle *pItem) { } void SetMouseButton(CGameMenuItemZCycle *pItem) { } void SetupMouseButtonMenu(CGameMenuItemChain *pItem) { UNREFERENCED_PARAMETER(pItem); // This functionality no longer exists as a separate item. } 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); } void SaveGame(CGameMenuItemZEditBitmap *pItem, CGameMenuEvent *event) { int nSlot = pItem->at28; if (gGameOptions.nGameType > 0 || !gGameStarted) return; if (event->at0 != 6/* || strSaveGameName[0]*/) { gGameMenuMgr.Deactivate(); return; } FStringf basename("save%04d", nSlot); auto strSaveGameName = G_BuildSaveName(basename); gGameOptions.nSaveGameSlot = nSlot; viewLoadingScreen(2518, "Saving", "Saving Your Game", strRestoreGameStrings[nSlot]); videoNextPage(); gSaveGameNum = nSlot; LoadSave::SaveGame(strSaveGameName.GetChars()); gGameMenuMgr.Deactivate(); } void LoadGame(CGameMenuItemZEditBitmap *pItem, CGameMenuEvent *event) { UNREFERENCED_PARAMETER(event); int nSlot = pItem->at28; if (gGameOptions.nGameType > 0) return; FStringf basename("save%04d", nSlot); auto strLoadGameName = G_BuildSaveName(basename); if (!FileExists(strLoadGameName)) return; viewLoadingScreen(2518, "Loading", "Loading Saved Game", strRestoreGameStrings[nSlot]); videoNextPage(); 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; gPacketStartGame.bFriendlyFire = itemNetStart8.at20; gPacketStartGame.bKeepKeysOnRespawn = itemNetStart9.at20; //// gPacketStartGame.weaponsV10x = itemNetStart10.at20; //// gPacketStartGame.unk = 0; gPacketStartGame.userMapName[0] = 0; strncpy(gPacketStartGame.userMapName, itemNetStart11.at20, 13); gPacketStartGame.userMapName[12] = 0; gPacketStartGame.userMap = gPacketStartGame.userMapName[0] != 0; 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(); } #endif END_BLD_NS