1 /* 2 This file is part of Warzone 2100. 3 Copyright (C) 1999-2004 Eidos Interactive 4 Copyright (C) 2005-2020 Warzone 2100 Project 5 6 Warzone 2100 is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 Warzone 2100 is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with Warzone 2100; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef __INCLUDED_SRC_FRONTEND_H__ 22 #define __INCLUDED_SRC_FRONTEND_H__ 23 24 #include "lib/widget/widgbase.h" 25 #include "levels.h" 26 27 // determines which option screen to use. when in GS_TITLE_SCREEN mode. 28 enum tMode 29 { 30 TITLE, // 0 intro mode 31 SINGLE, // 1 single player menu 32 MULTI, // 2 multiplayer menu 33 OPTIONS, // 3 options menu 34 GAME, // 4 35 TUTORIAL, // 5 tutorial/fastplay 36 TITLE_UNUSED, // 6 37 FORCESELECT, // 7 MULTIPLAYER, Force design screen 38 STARTGAME, // 8 Fire up the game 39 SHOWINTRO, // 9 reshow the intro 40 QUIT, // 10 leaving game 41 LOADSAVEGAME, // 11 loading a save game 42 KEYMAP, // 12 keymap editor 43 GRAPHICS_OPTIONS, // 13 graphics options menu 44 AUDIO_AND_ZOOM_OPTIONS, // 14 audio and zoom options menu 45 VIDEO_OPTIONS, // 15 video options menu 46 MOUSE_OPTIONS, // 16 mouse options menu 47 CAMPAIGNS, // 17 campaign selector 48 MUSIC_MANAGER, // 18 music manager 49 }; 50 51 #define MAX_LEVEL_NAME_SIZE (256) 52 53 extern char aLevelName[MAX_LEVEL_NAME_SIZE + 1]; //256]; // vital! the wrf file to use. 54 55 extern bool bLimiterLoaded; 56 57 58 void changeTitleMode(tMode mode); 59 bool runTitleMenu(); 60 bool runSinglePlayerMenu(); 61 bool runCampaignSelector(); 62 bool runMultiPlayerMenu(); 63 bool runGameOptionsMenu(); 64 bool runOptionsMenu(); 65 bool runGraphicsOptionsMenu(); 66 bool runAudioAndZoomOptionsMenu(); 67 bool runVideoOptionsMenu(); 68 bool runMouseOptionsMenu(); 69 bool runTutorialMenu(); 70 void runContinue(); 71 void startTitleMenu(); 72 void startTutorialMenu(); 73 void startSinglePlayerMenu(); 74 void startCampaignSelector(); 75 void startMultiPlayerMenu(); 76 void startOptionsMenu(); 77 void startGraphicsOptionsMenu(); 78 void startAudioAndZoomOptionsMenu(); 79 void startVideoOptionsMenu(); 80 void startMouseOptionsMenu(); 81 void startGameOptionsMenu(); 82 void refreshCurrentVideoOptionsValues(); 83 84 void addTopForm(bool wide); 85 void addBottomForm(); 86 W_FORM *addBackdrop(); 87 W_FORM *addBackdrop(const std::shared_ptr<W_SCREEN> &screen); 88 void addTextButton(UDWORD id, UDWORD PosX, UDWORD PosY, const std::string &txt, unsigned int style); 89 W_LABEL *addSideText(UDWORD id, UDWORD PosX, UDWORD PosY, const char *txt); 90 W_LABEL *addSideText(const std::shared_ptr<W_SCREEN> &screen, UDWORD formId, UDWORD id, UDWORD PosX, UDWORD PosY, const char *txt); 91 void addFESlider(UDWORD id, UDWORD parent, UDWORD x, UDWORD y, UDWORD stops, UDWORD pos); 92 93 void displayTextOption(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset); 94 95 bool CancelPressed(); 96 97 /* Tell the frontend when the screen has been resized */ 98 void frontendScreenSizeDidChange(int oldWidth, int oldHeight, int newWidth, int newHeight); 99 100 // Graphics options, shared for in-game options menu use 101 char const *graphicsOptionsFmvmodeString(); 102 char const *graphicsOptionsScanlinesString(); 103 char const *graphicsOptionsSubtitlesString(); 104 char const *graphicsOptionsShadowsString(); 105 char const *graphicsOptionsRadarString(); 106 char const *graphicsOptionsRadarJumpString(); 107 char const *graphicsOptionsScreenShakeString(); 108 void seqFMVmode(); 109 void seqScanlineMode(); 110 111 // Video options, shared for in-game options menu use 112 char const *videoOptionsDisplayScaleLabel(); 113 char const *videoOptionsVsyncString(); 114 std::string videoOptionsDisplayScaleString(); 115 std::vector<unsigned int> availableDisplayScalesSorted(); 116 void seqDisplayScale(); 117 void seqVsyncMode(); 118 119 // Mouse options, shared for in-game options menu use 120 char const *mouseOptionsMflipString(); 121 char const *mouseOptionsTrapString(); 122 char const *mouseOptionsMbuttonsString(); 123 char const *mouseOptionsMmrotateString(); 124 char const *mouseOptionsCursorModeString(); 125 char const *mouseOptionsScrollEventString(); 126 void seqScrollEvent(); 127 128 struct DisplayTextOptionCache 129 { 130 WzText wzText; 131 }; 132 133 134 // //////////////////////////////////////////////////////////////////////////// 135 // defines. 136 137 #define FRONTEND_TOPFORMX 50 138 #define FRONTEND_TOPFORMY 10 139 #define FRONTEND_TOPFORMW 540 140 #define FRONTEND_TOPFORMH 150 141 142 143 #define FRONTEND_TOPFORM_WIDEX 28 144 #define FRONTEND_TOPFORM_WIDEY 10 145 #define FRONTEND_TOPFORM_WIDEW 588 146 #define FRONTEND_TOPFORM_WIDEH 150 147 148 149 #define FRONTEND_BOTFORMX FRONTEND_TOPFORMX 150 #define FRONTEND_BOTFORMY 170 151 #define FRONTEND_BOTFORMW FRONTEND_TOPFORMW 152 #define FRONTEND_BOTFORMH 305 // keep Y+H < 480 (minimum display height) 153 154 155 #define FRONTEND_BUTWIDTH FRONTEND_BOTFORMW-40 // text button sizes. 156 #define FRONTEND_BUTHEIGHT 35 157 158 #define FRONTEND_POS1X 20 // button positions 159 #define FRONTEND_POS1Y (0*FRONTEND_BUTHEIGHT) 160 #define FRONTEND_POS1M 340 161 162 #define FRONTEND_POS2X 20 163 #define FRONTEND_POS2Y (1*FRONTEND_BUTHEIGHT) 164 #define FRONTEND_POS2M 340 165 166 #define FRONTEND_POS3X 20 167 #define FRONTEND_POS3Y (2*FRONTEND_BUTHEIGHT) 168 #define FRONTEND_POS3M 340 169 170 #define FRONTEND_POS4X 20 171 #define FRONTEND_POS4Y (3*FRONTEND_BUTHEIGHT) 172 #define FRONTEND_POS4M 340 173 174 #define FRONTEND_POS5X 20 175 #define FRONTEND_POS5Y (4*FRONTEND_BUTHEIGHT) 176 #define FRONTEND_POS5M 340 177 178 #define FRONTEND_POS6X 20 179 #define FRONTEND_POS6Y (5*FRONTEND_BUTHEIGHT) 180 #define FRONTEND_POS6M 340 181 182 #define FRONTEND_POS7X 20 183 #define FRONTEND_POS7Y (6*FRONTEND_BUTHEIGHT) 184 #define FRONTEND_POS7M 340 185 186 #define FRONTEND_POS8X 20 187 #define FRONTEND_POS8Y (7*FRONTEND_BUTHEIGHT) 188 #define FRONTEND_POS8M 340 189 190 #define FRONTEND_POS9X -30 // special case for our hyperlink 191 #define FRONTEND_POS9Y (8*FRONTEND_BUTHEIGHT) 192 193 194 #define FRONTEND_SIDEX 24 195 #define FRONTEND_SIDEY FRONTEND_BOTFORMY 196 197 enum 198 { 199 FRONTEND_BACKDROP = 20000, 200 FRONTEND_TOPFORM, 201 FRONTEND_BOTFORM, 202 FRONTEND_LOGO, 203 FRONTEND_SIDETEXT, // sideways text 204 FRONTEND_MULTILINE_SIDETEXT, // sideways text 205 FRONTEND_SIDETEXT1, // sideways text 206 FRONTEND_SIDETEXT2, // sideways text 207 FRONTEND_SIDETEXT3, // sideways text 208 FRONTEND_SIDETEXT4, // sideways text 209 FRONTEND_PASSWORDFORM, 210 FRONTEND_HYPERLINK, 211 FRONTEND_UPGRDLINK, 212 FRONTEND_DONATELINK, 213 FRONTEND_CHATLINK, 214 // begin menu 215 FRONTEND_SINGLEPLAYER = 20100, // title screen 216 FRONTEND_MULTIPLAYER, 217 FRONTEND_TUTORIAL, 218 FRONTEND_PLAYINTRO, 219 FRONTEND_OPTIONS, 220 FRONTEND_QUIT, 221 FRONTEND_FASTPLAY, //tutorial menu option 222 FRONTEND_CONTINUE, 223 FRONTEND_NEWGAME = 20200, // single player (menu) 224 FRONTEND_LOADGAME_MISSION, 225 FRONTEND_LOADGAME_SKIRMISH, 226 FRONTEND_SKIRMISH, 227 FRONTEND_CHALLENGES, 228 FRONTEND_HOST = 20300, //multiplayer menu options 229 FRONTEND_JOIN, 230 FE_P0, // player 0 buton 231 FE_P1, // player 1 buton 232 FE_P2, // player 2 buton 233 FE_P3, // player 3 buton 234 FE_P4, // player 4 buton 235 FE_P5, // player 5 buton 236 FE_P6, // player 6 buton 237 FE_P7, // player 7 buton 238 FE_MP_PR, // Multiplayer player random button 239 FE_MP_PMAX = FE_MP_PR + MAX_PLAYERS_IN_GUI, // Multiplayer player blah button 240 241 FRONTEND_CAMPAIGN_1, 242 FRONTEND_CAMPAIGN_2, 243 FRONTEND_CAMPAIGN_3, 244 FRONTEND_CAMPAIGN_4, 245 FRONTEND_CAMPAIGN_5, 246 FRONTEND_CAMPAIGN_6, 247 248 FRONTEND_GAMEOPTIONS = 21000, // Game Options menu 249 FRONTEND_LANGUAGE, 250 FRONTEND_LANGUAGE_R, 251 FRONTEND_COLOUR, 252 FRONTEND_COLOUR_CAM, 253 FRONTEND_COLOUR_MP, 254 FRONTEND_DIFFICULTY, 255 FRONTEND_DIFFICULTY_R, 256 FRONTEND_CAMERASPEED, 257 FRONTEND_CAMERASPEED_R, 258 259 FRONTEND_GRAPHICSOPTIONS = 22000, // Graphics Options Menu 260 FRONTEND_FMVMODE, 261 FRONTEND_FMVMODE_R, 262 FRONTEND_SCANLINES, 263 FRONTEND_SCANLINES_R, 264 FRONTEND_SUBTITLES, 265 FRONTEND_SUBTITLES_R, 266 FRONTEND_SHADOWS, 267 FRONTEND_SHADOWS_R, 268 FRONTEND_RADAR, 269 FRONTEND_RADAR_R, 270 FRONTEND_RADAR_JUMP, 271 FRONTEND_RADAR_JUMP_R, 272 FRONTEND_SSHAKE, 273 FRONTEND_SSHAKE_R, 274 275 FRONTEND_AUDIO_AND_ZOOMOPTIONS = 23000, // Audio and Zoom Options Menu 276 FRONTEND_3D_FX, // 3d sound volume 277 FRONTEND_FX, // 2d (voice) sound volume 278 FRONTEND_MUSIC, // music volume 279 FRONTEND_SOUND_HRTF, // HRTF mode 280 FRONTEND_MAP_ZOOM, // map zoom 281 FRONTEND_MAP_ZOOM_RATE, // map zoom rate 282 FRONTEND_RADAR_ZOOM, // radar zoom rate 283 FRONTEND_3D_FX_SL, 284 FRONTEND_FX_SL, 285 FRONTEND_MUSIC_SL, 286 FRONTEND_SOUND_HRTF_R, 287 FRONTEND_MAP_ZOOM_R, 288 FRONTEND_MAP_ZOOM_RATE_R, 289 FRONTEND_RADAR_ZOOM_R, 290 291 FRONTEND_VIDEOOPTIONS = 24000, // video Options Menu 292 FRONTEND_WINDOWMODE, 293 FRONTEND_WINDOWMODE_R, 294 FRONTEND_RESOLUTION_READONLY_LABEL, 295 FRONTEND_RESOLUTION_READONLY, 296 FRONTEND_RESOLUTION_DROPDOWN_LABEL, 297 FRONTEND_RESOLUTION_DROPDOWN, 298 FRONTEND_TEXTURESZ, 299 FRONTEND_TEXTURESZ_R, 300 FRONTEND_VSYNC, 301 FRONTEND_VSYNC_R, 302 FRONTEND_FSAA, 303 FRONTEND_FSAA_R, 304 FRONTEND_DISPLAYSCALE, 305 FRONTEND_DISPLAYSCALE_R, 306 FRONTEND_GFXBACKEND, 307 FRONTEND_GFXBACKEND_R, 308 309 FRONTEND_MOUSEOPTIONS = 25000, // Mouse Options Menu 310 FRONTEND_CURSORMODE, 311 FRONTEND_CURSORMODE_R, 312 FRONTEND_TRAP, 313 FRONTEND_TRAP_R, 314 FRONTEND_MFLIP, 315 FRONTEND_MFLIP_R, 316 FRONTEND_MBUTTONS, 317 FRONTEND_MBUTTONS_R, 318 FRONTEND_MMROTATE, 319 FRONTEND_MMROTATE_R, 320 FRONTEND_SCROLLEVENT, 321 FRONTEND_SCROLLEVENT_R, 322 323 FRONTEND_KEYMAP = 26000, // Keymap menu 324 325 FRONTEND_MUSICMANAGER = 27000, // Music manager menu 326 327 FRONTEND_NOGAMESAVAILABLE = 31666 // Used when no games are available in lobby 328 329 }; 330 331 void SPinit(LEVEL_TYPE gameType); 332 333 #endif // __INCLUDED_SRC_FRONTEND_H__ 334