1 /*-------------------------------------------------------------------------------
2 
3 	BARONY
4 	File: menu.hpp
5 	Desc: definitions and prototypes for menu.c
6 
7 	Copyright 2013-2016 (c) Turning Wheel LLC, all rights reserved.
8 	See LICENSE for details.
9 
10 -------------------------------------------------------------------------------*/
11 
12 #pragma once
13 
14 extern bool savethisgame;
15 
16 // main menu code
17 void handleMainMenu(bool mode);
18 
19 #define NUMSUBTITLES 30
20 extern int subtitleCurrent;
21 extern bool subtitleVisible;
22 
23 extern Sint32 gearrot;
24 extern Sint32 gearsize;
25 extern Uint16 logoalpha;
26 extern int credittime;
27 extern int creditstage;
28 extern int intromovietime;
29 extern int intromoviestage;
30 extern int firstendmovietime;
31 extern int firstendmoviestage;
32 extern int secondendmovietime;
33 extern int secondendmoviestage;
34 extern int thirdendmoviestage;
35 extern int thirdendmovietime;
36 extern int fourthendmoviestage;
37 extern int fourthendmovietime;
38 extern int DLCendmovieStageAndTime[8][2];
39 enum NewMovieStageAndTimeIndex : int
40 {
41 	MOVIE_STAGE,
42 	MOVIE_TIME,
43 };
44 enum NewMovieCrawlTypes : int
45 {
46 	MOVIE_MIDGAME_HERX_MONSTERS,
47 	MOVIE_MIDGAME_BAPHOMET_MONSTERS,
48 	MOVIE_MIDGAME_BAPHOMET_HUMAN_AUTOMATON,
49 	MOVIE_CLASSIC_WIN_MONSTERS,
50 	MOVIE_CLASSIC_WIN_BAPHOMET_MONSTERS,
51 	MOVIE_WIN_AUTOMATON,
52 	MOVIE_WIN_DEMONS_UNDEAD,
53 	MOVIE_WIN_BEASTS
54 };
55 extern real_t drunkextend;
56 extern bool losingConnection[MAXPLAYERS];
57 extern int rebindaction;
58 
59 // button definitions
60 void buttonQuitConfirm(button_t* my);
61 void buttonQuitNoSaveConfirm(button_t* my);
62 void buttonEndGameConfirm(button_t* my);
63 void buttonCloseAndEndGameConfirm(button_t* my);
64 void buttonCloseSubwindow(button_t* my);
65 void buttonContinue(button_t* my);
66 void buttonBack(button_t* my);
67 void buttonVideoTab(button_t* my);
68 void buttonAudioTab(button_t* my);
69 void buttonKeyboardTab(button_t* my);
70 void buttonMouseTab(button_t* my);
71 void buttonGamepadBindingsTab(button_t* my);
72 void buttonGamepadSettingsTab(button_t* my);
73 void buttonMiscTab(button_t* my);
74 void buttonSettingsAccept(button_t* my);
75 void buttonSettingsOK(button_t* my);
76 void buttonStartSingleplayer(button_t* my);
77 void buttonStartServer(button_t* my);
78 void buttonHostMultiplayer(button_t* my);
79 void buttonJoinMultiplayer(button_t* my);
80 void buttonHostLobby(button_t* my);
81 void buttonJoinLobby(button_t* my);
82 void buttonDisconnect(button_t* my);
83 void buttonScoreNext(button_t* my);
84 void buttonScorePrev(button_t* my);
85 void buttonScoreToggle(button_t* my);
86 void buttonDeleteCurrentScore(button_t* my);
87 void buttonOpenCharacterCreationWindow(button_t* my);
88 void buttonDeleteSavedSoloGame(button_t* my);
89 void buttonDeleteSavedMultiplayerGame(button_t* my);
90 void buttonConfirmDeleteSoloFile(button_t* my);
91 void buttonConfirmDeleteMultiplayerFile(button_t* my);
92 void buttonLoadSingleplayerGame(button_t* my);
93 void buttonLoadMultiplayerGame(button_t* my);
94 void buttonRandomCharacter(button_t* my);
95 void buttonReplayLastCharacter(button_t* my);
96 void buttonDeleteScoreWindow(button_t* my);
97 void buttonOpenScoresWindow(button_t* my);
98 void buttonRandomName(button_t* my);
99 void buttonGamemodsOpenDirectory(button_t* my);
100 void buttonGamemodsPrevDirectory(button_t* my);
101 void buttonGamemodsBaseDirectory(button_t* my);
102 void buttonGamemodsSelectDirectoryForUpload(button_t* my);
103 void buttonGamemodsOpenModifyExistingWindow(button_t* my);
104 void buttonGamemodsStartModdedGame(button_t* my);
105 void buttonInviteFriends(button_t* my);
106 
107 #ifdef STEAMWORKS
108 void buttonGamemodsPrepareWorkshopItemUpload(button_t* my);
109 void buttonGamemodsSetWorkshopItemFields(button_t* my);
110 void buttonGamemodsStartUploadItem(button_t* my);
111 void buttonGamemodsGetSubscribedItems(button_t* my);
112 void buttonGamemodsOpenSubscribedWindow(button_t* my);
113 void buttonGamemodsOpenUploadWindow(button_t* my);
114 void buttonGamemodsGetMyWorkshopItems(button_t* my);
115 void buttonGamemodsModifyExistingWorkshopItemFields(button_t* my);
116 void buttonGamemodsCancelModifyFileContents(button_t* my);
117 void buttonSteamLobbyBrowserJoinGame(button_t* my);
118 void buttonSteamLobbyBrowserRefresh(button_t* my);
119 void buttonGamemodsSubscribeToHostsModFiles(button_t* my);
120 void buttonGamemodsMountHostsModFiles(button_t* my);
121 void* cpp_SteamMatchmaking_GetLobbyOwner(void* steamIDLobby);
122 void* cpp_SteamMatchmaking_GetLobbyMember(void* steamIDLobby, int index);
123 void openSteamLobbyWaitWindow(button_t* my);
124 #elif defined USE_EOS
125 void buttonSteamLobbyBrowserJoinGame(button_t* my);
126 void buttonSteamLobbyBrowserRefresh(button_t* my);
127 void openSteamLobbyWaitWindow(button_t* my);
128 #else
129 void windowEnterSerialPrompt();
130 void windowSerialResult(int success);
131 size_t serialHash(std::string input);
132 extern char serialInputText[64];
133 #endif
134 
135 #define SLIDERFONT font12x12_bmp
136 
137 // achievement window
138 void openAchievementsWindow();
139 void closeAchievementsWindow(button_t*);
140 extern bool achievements_window;
141 extern int achievements_window_page;
142 void buttonAchievementsUp(button_t* my);
143 void buttonAchievementsDown(button_t* my);
144 
145 // misc functions
146 void openSettingsWindow();
147 void openFailedConnectionWindow(int mode);
148 void openGameoverWindow();
149 void openSteamLobbyBrowserWindow(button_t* my);
150 void openLoadGameWindow(button_t* my);
151 void openNewLoadGameWindow(button_t* my);
152 void reloadSavegamesList(bool showWindow = true);
153 void doSlider(int x, int y, int dots, int minvalue, int maxvalue, int increment, int* var, SDL_Surface* slider_font = SLIDERFONT, int slider_font_char_width = 16);
154 void doSliderF(int x, int y, int dots, real_t minvalue, real_t maxvalue, real_t increment, real_t* var);
155 
156 // menu variables
157 extern bool settings_window;
158 extern int charcreation_step;
159 extern int loadGameSaveShowRectangle;
160 extern Uint32 charcreation_ticks;
161 extern bool playing_random_char;
162 extern int settings_tab;
163 extern int connect_window;
164 extern bool lobby_window;
165 extern int score_window;
166 extern Uint32 lobbyWindowSvFlags;
167 
168 // gamemods window stuff
169 extern int gamemods_window;
170 extern int gamemods_window_scroll;
171 extern int gamemods_window_fileSelect;
172 extern int gamemods_uploadStatus;
173 extern int gamemods_numCurrentModsLoaded;
174 extern std::list<std::string> currentDirectoryFiles;
175 extern std::string directoryPath;
176 void gamemodsWindowClearVariables();
177 void gamemodsCustomContentInit();
178 bool gamemodsDrawClickableButton(int padx, int pady, int padw, int padh, Uint32 btnColor, std::string btnText, int action);
179 bool gamemodsRemovePathFromMountedFiles(std::string findStr);
180 bool gamemodsIsPathInMountedFiles(std::string findStr);
181 bool gamemodsClearAllMountedPaths();
182 bool gamemodsMountAllExistingPaths();
183 extern bool gamemods_disableSteamAchievements;
184 extern std::vector<std::pair<std::string, std::string>> gamemods_mountedFilepaths;
185 extern bool gamemods_modelsListRequiresReload;
186 extern bool gamemods_soundListRequiresReload;
187 extern bool gamemods_modPreload;
188 #ifdef STEAMWORKS
189 void gamemodsWorkshopPreloadMod(int fileID, std::string modTitle);
190 void gamemodsWindowUploadInit(bool creatingNewItem);
191 void gamemodsSubscribedItemsInit();
192 void gamemodsDrawWorkshopItemTagToggle(std::string tagname, int x, int y);
193 bool gamemodsCheckIfSubscribedAndDownloadedFileID(uint64 fileID);
194 bool gamemodsCheckFileIDInLoadedPaths(uint64 fileID);
195 bool gamemodsIsClientLoadOrderMatchingHost(std::vector<std::string> serverModList);
196 extern std::vector<std::pair<std::string, uint64>> gamemods_workshopLoadedFileIDMap;
197 extern std::unordered_set<uint64> betaPlayers;
198 #endif // STEAMWORKS
199 bool drawClickableButton(int padx, int pady, int padw, int padh, Uint32 btnColor);
200 extern bool scoreDisplayMultiplayer;
201 extern std::vector<std::tuple<int, int, int, std::string>> savegamesList; // tuple - last modified, multiplayer type, file entry, and description of save game.
202 
203 extern Sint32 slidery, slidersize, oslidery;
204 
205 // settings window
206 extern Uint32 settings_fov;
207 extern Uint32 settings_fps;
208 extern int settings_xres, settings_yres;
209 extern bool settings_smoothlighting;
210 extern int settings_fullscreen, settings_shaking, settings_bobbing;
211 extern bool settings_borderless;
212 extern real_t settings_gamma;
213 extern int settings_sfxvolume, settings_musvolume;
214 extern int settings_sfxAmbientVolume;
215 extern int settings_sfxEnvironmentVolume;
216 extern int settings_impulses[NUMIMPULSES];
217 extern int settings_reversemouse;
218 extern bool settings_smoothmouse;
219 extern bool settings_disablemouserotationlimit;
220 extern real_t settings_mousespeed;
221 extern bool settings_broadcast;
222 extern bool settings_nohud;
223 extern bool settings_colorblind;
224 extern bool settings_spawn_blood;
225 extern bool settings_light_flicker;
226 extern bool settings_vsync;
227 extern bool settings_status_effect_icons;
228 extern bool settings_minimap_ping_mute;
229 extern bool settings_mute_audio_on_focus_lost;
230 extern bool settings_mute_player_monster_sounds;
231 extern int settings_minimap_transparency_foreground;
232 extern int settings_minimap_transparency_background;
233 extern int settings_minimap_scale;
234 extern int settings_minimap_object_zoom;
235 extern char portnumber_char[6];
236 extern char connectaddress[64];
237 extern bool smoothmouse;
238 extern bool usecamerasmoothing;
239 extern bool disablemouserotationlimit;
240 extern bool broadcast;
241 extern bool nohud;
242 extern int menuselect;
243 extern bool colorblind;
244 extern bool right_click_protect;
245 extern bool settings_auto_hotbar_new_items;
246 extern bool settings_auto_hotbar_categories[NUM_HOTBAR_CATEGORIES];
247 extern int settings_autosort_inventory_categories[NUM_AUTOSORT_CATEGORIES];
248 extern bool settings_hotbar_numkey_quick_add;
249 extern bool settings_disable_messages;
250 extern bool settings_right_click_protect;
251 extern bool settings_auto_appraise_new_items;
252 extern bool settings_lock_right_sidebar;
253 extern bool settings_show_game_timer_always;
254 extern bool settings_uiscale_charactersheet;
255 extern bool settings_uiscale_skillspage;
256 extern real_t settings_uiscale_hotbar;
257 extern real_t settings_uiscale_playerbars;
258 extern real_t settings_uiscale_chatlog;
259 extern real_t settings_uiscale_inventory;
260 extern bool settings_hide_statusbar;
261 extern bool settings_hide_playertags;
262 extern bool settings_show_skill_values;
263 extern bool settings_disableMultithreadedSteamNetworking;
264 extern bool settings_disableFPSLimitOnNetworkMessages;
265 
266 static const int NUM_SETTINGS_TABS = 7;
267 
268 static const int SETTINGS_VIDEO_TAB = 0;
269 static const int SETTINGS_AUDIO_TAB = 1;
270 static const int SETTINGS_KEYBOARD_TAB = 2;
271 static const int SETTINGS_MOUSE_TAB = 3;
272 static const int SETTINGS_GAMEPAD_BINDINGS_TAB = 4;
273 static const int SETTINGS_GAMEPAD_SETTINGS_TAB = 5;
274 static const int SETTINGS_MISC_TAB = 6;
275 
276 
277 //Confirm resolution window stuff.
278 extern bool resolutionChanged;
279 extern bool confirmResolutionWindow;
280 extern int resolutionConfirmationTimer;
281 static const int RESOLUTION_CONFIRMATION_TIME = 10000; //Time in milliseconds before resolution reverts.
282 extern Sint32 oldXres;
283 extern Sint32 oldYres;
284 extern button_t* revertResolutionButton;
285 
286 void applySettings();
287 void openConfirmResolutionWindow();
288 void buttonAcceptResolution(button_t* my);
289 void buttonRevertResolution(button_t* my);
290 void revertResolution();
291 
292 extern std::vector<std::pair<std::string, int>> menuOptions;
293 void initMenuOptions();
294