1 #ifndef _included_AvP_Menus_h_
2 #define _included_AvP_Menus_h_
3 
4 #ifndef MARINE_DEMO
5 #define MARINE_DEMO 0
6 #endif
7 
8 #ifndef PREDATOR_DEMO
9 #define PREDATOR_DEMO 0
10 #endif
11 
12 #ifndef ALIEN_DEMO
13 #define ALIEN_DEMO 0
14 #endif
15 
16 #define DEATHMATCH_DEMO 0 // more multiplayer-only demo really
17 
18 
19 #ifdef AVP_DEBUG_VERSION
20 	#define CONSOLE_DEBUGGING_COMMANDS_ACTIVATED 1
21 
22 	#define LOAD_SCREAMS_FROM_FASTFILES 0
23 	#define LOAD_USING_FASTFILES 0
24 
25 #else //AVP_DEBUG_VERSION
26 
27 	#ifdef AVP_DEBUG_FOR_FOX
28 		#define CONSOLE_DEBUGGING_COMMANDS_ACTIVATED 1
29 	#else
30 		#define CONSOLE_DEBUGGING_COMMANDS_ACTIVATED 0
31 	#endif
32 
33 	#define LOAD_SCREAMS_FROM_FASTFILES 1
34 	#define LOAD_USING_FASTFILES 1
35 #endif //AVP_DEBUG_VERSION
36 
37 #define PLAY_INTRO 1
38 #define ALLOW_SKIP_INTRO 1
39 
40 #define SAVE_GAME_ON 1
41 
42 #include "avp_menugfx.hpp"
43 #include "language.h"
44 
45 enum MENUSSTATE_ID
46 {
47 	MENUSSTATE_MAINMENUS,
48 	MENUSSTATE_INGAMEMENUS,
49 	MENUSSTATE_OUTSIDEMENUS,
50 	MENUSSTATE_STARTGAME,
51 };
52 
53 enum AVPMENU_ID
54 {
55 	AVPMENU_MAIN,
56 	AVPMENU_MAIN_WITHCHEATS,
57 	AVPMENU_DEBUG_MAIN,
58 	AVPMENU_DEBUG_MAIN_WITHCHEATS,
59 
60 	AVPMENU_EXITGAME,
61 
62 	AVPMENU_USERPROFILESELECT,
63 	AVPMENU_USERPROFILEENTERNAME,
64 	AVPMENU_USERPROFILEDELETE,
65 
66 	AVPMENU_SINGLEPLAYER,
67 	AVPMENU_MARINELEVELS,
68 	AVPMENU_ALIENLEVELS,
69 	AVPMENU_PREDATORLEVELS,
70 
71 	AVPMENU_MULTIPLAYER,
72 	AVPMENU_MULTIPLAYER_LOBBIEDSERVER,
73 	AVPMENU_MULTIPLAYER_LOBBIEDCLIENT,
74 	AVPMENU_MULTIPLAYER_SKIRMISH,
75 	AVPMENU_MULTIPLAYERSTARTGAME,
76 	AVPMENU_MULTIPLAYERJOINGAME,
77 	AVPMENU_MULTIPLAYERSELECTSESSION,
78 	AVPMENU_MULTIPLAYERJOINGAME2,
79 	AVPMENU_MULTIPLAYEROPENADDRESS,
80 	AVPMENU_MULTIPLAYER_LOADIPADDRESS,
81 	AVPMENU_MULTIPLAYER_CONNECTION,
82 	AVPMENU_MULTIPLAYER_CONFIG,
83 	AVPMENU_MULTIPLAYER_CONFIG_JOIN,
84 	AVPMENU_SKIRMISH_CONFIG,
85 	AVPMENU_MULTIPLAYER_SPECIES_HOST,
86 	AVPMENU_MULTIPLAYER_SPECIES_JOIN,
87 
88 	AVPMENU_MULTIPLAYER_SAVECONFIG,
89 	AVPMENU_MULTIPLAYER_LOADCONFIG,
90 	AVPMENU_MULTIPLAYER_DELETECONFIG,
91 
92 	AVPMENU_MULTIPLAYER_JOINING,
93 
94 	AVPMENU_CONTROLS,
95 	AVPMENU_JOYSTICKCONTROLS,
96 
97 	AVPMENU_INGAMEAVOPTIONS,
98 	AVPMENU_MAINMENUAVOPTIONS,
99 	AVPMENU_VIDEOMODE,
100 
101 
102 	AVPMENU_INGAME,
103 	AVPMENU_INNETGAME,
104 
105 	AVPMENU_MARINEKEYCONFIG,
106 	AVPMENU_PREDATORKEYCONFIG,
107 	AVPMENU_ALIENKEYCONFIG,
108 	AVPMENU_OPTIONS,
109 
110 	AVPMENU_LEVELBRIEFING_BASIC,
111 	AVPMENU_LEVELBRIEFING_BONUS,
112 
113 	AVPMENU_CHEATOPTIONS,
114 	AVPMENU_DETAILLEVELS,
115 
116 	AVPMENU_LOADGAME,
117 	AVPMENU_SAVEGAME,
118 
119 };
120 
121 enum AVPMENU_FONT_ID
122 {
123 	AVPMENU_FONT_SMALL,
124 	AVPMENU_FONT_BIG,
125 };
126 /* menu elements */
127 enum AVPMENU_ELEMENT_ID
128 {
129 	AVPMENU_ELEMENT_GOTOMENU,
130 	AVPMENU_ELEMENT_GOTOMENU_GFX,
131 
132 	AVPMENU_ELEMENT_TOGGLE,
133 	AVPMENU_ELEMENT_SLIDER,
134 
135 	AVPMENU_ELEMENT_USERPROFILE,
136 	AVPMENU_ELEMENT_ALIENEPISODE,
137 	AVPMENU_ELEMENT_MARINEEPISODE,
138 	AVPMENU_ELEMENT_PREDATOREPISODE,
139 	AVPMENU_ELEMENT_STARTMPGAME,
140 	AVPMENU_ELEMENT_JOINMPGAME,
141 	AVPMENU_ELEMENT_JOINLOBBIED,
142 
143 	AVPMENU_ELEMENT_QUITGAME,
144 
145 	AVPMENU_ELEMENT_TEXTFIELD,
146 	AVPMENU_ELEMENT_DUMMYTEXTFIELD,
147 	AVPMENU_ELEMENT_TEXTFIELD_SMALLWRAPPED,
148 	AVPMENU_ELEMENT_TEXTSLIDER,
149 	AVPMENU_ELEMENT_DUMMYTEXTSLIDER,
150 	AVPMENU_ELEMENT_SPECIES_TEXTSLIDER,
151 
152 	AVPMENU_ELEMENT_TEXTSLIDER_POINTER, // text slider with a char** rather than a string index
153 	AVPMENU_ELEMENT_DUMMYTEXTSLIDER_POINTER, // text slider with a char** rather than a string index
154 
155 	AVPMENU_ELEMENT_CHEATMODE_TEXTSLIDER,
156 	AVPMENU_ELEMENT_CHEATMODE_SPECIES_TEXTSLIDER,
157 	AVPMENU_ELEMENT_CHEATMODE_ENVIRONMENT_TEXTSLIDER,
158 
159 	AVPMENU_ELEMENT_NUMBERFIELD,
160 	AVPMENU_ELEMENT_DUMMYNUMBERFIELD,
161 
162 	AVPMENU_ELEMENT_LISTCHOICE,
163 
164 	AVPMENU_ELEMENT_CONNECTIONCHOICE,
165 
166 	AVPMENU_ELEMENT_VIDEOMODE,
167 	AVPMENU_ELEMENT_VIDEOMODEOK,
168 
169 	AVPMENU_ELEMENT_KEYCONFIG,
170 	AVPMENU_ELEMENT_KEYCONFIGOK,
171 	AVPMENU_ELEMENT_RESETKEYCONFIG,
172 
173 	AVPMENU_ELEMENT_ENDOFMENU,
174 
175 	AVPMENU_ELEMENT_RESUMEGAME,
176 	AVPMENU_ELEMENT_RESTARTGAME,
177 
178 	AVPMENU_ELEMENT_STARTMARINEDEMO,
179 	AVPMENU_ELEMENT_STARTPREDATORDEMO,
180 	AVPMENU_ELEMENT_STARTALIENDEMO,
181 	AVPMENU_ELEMENT_STARTLEVELWITHCHEAT,
182 
183 	AVPMENU_ELEMENT_BUTTONSETTING,
184 	AVPMENU_ELEMENT_LOADMPCONFIG,
185 	AVPMENU_ELEMENT_SAVEMPCONFIG,
186 	AVPMENU_ELEMENT_DELETEMPCONFIG,
187 	AVPMENU_ELEMENT_RESETMPCONFIG,
188 
189 	AVPMENU_ELEMENT_DIFFICULTYLEVEL,
190 
191 	AVPMENU_ELEMENT_LOADIPADDRESS,
192 
193 	AVPMENU_ELEMENT_USERPROFILE_DELETE,
194 
195 
196 	AVPMENU_ELEMENT_SAVESETTINGS,
197 
198 	AVPMENU_ELEMENT_SAVEGAME,
199 	AVPMENU_ELEMENT_LOADGAME,
200 };
201 
202 
203 enum AVPMENU_ELEMENT_INTERACTION_ID
204 {
205 	AVPMENU_ELEMENT_INTERACTION_SELECT,
206 	AVPMENU_ELEMENT_INTERACTION_DECREASE,
207 	AVPMENU_ELEMENT_INTERACTION_INCREASE,
208 };
209 
210 typedef struct
211 {
212 	enum AVPMENU_ELEMENT_ID ElementID;
213 
214 	union
215 	{
216 		enum TEXTSTRING_ID TextDescription;
217 		enum AVPMENUGFX_ID GfxID;
218 	} a;
219 
220 	union
221 	{
222 		enum AVPMENU_ID MenuToGoTo;
223 		int MaxSliderValue;
224 		int MaxTextLength;
225 		int MaxValue; //for number fields
226 	} b;
227 
228 	union
229 	{
230 		int *ToggleValuePtr;
231 		int *SliderValuePtr;
232 		char *TextPtr;
233 		int *NumberPtr;
234 		int Value;
235 	} c;
236 
237 	union
238 	{
239 		enum TEXTSTRING_ID FirstTextSliderString;
240 		enum TEXTSTRING_ID NumberFieldUnitsString;
241 		char** TextSliderStringPointer;
242 	} d;
243 
244 	enum TEXTSTRING_ID HelpString;
245 
246 	enum TEXTSTRING_ID NumberFieldZeroString; //special string for 0
247 
248 	int Brightness;
249 } AVPMENU_ELEMENT;
250 
251 typedef struct
252 {
253 	enum AVPMENU_FONT_ID FontToUse;
254 	enum TEXTSTRING_ID	MenuTitle;
255 
256 	AVPMENU_ELEMENT		*MenuElements;
257 	enum AVPMENU_ID		ParentMenu;
258 	int					DefaultElement;
259 } AVPMENU;
260 
261 
262 typedef struct
263 {
264 	enum MENUSSTATE_ID	MenusState;
265 
266 
267 	enum AVPMENU_ID		CurrentMenu;
268 	AVPMENU_ELEMENT		*MenuElements;
269 	int					NumberOfElementsInMenu;
270 	int					CurrentlySelectedElement;
271 	int					MenuHeight;
272 
273 	enum AVPMENU_FONT_ID FontToUse;
274 
275 	int					PositionInTextField;
276 
277 	int 				WidthLeftForText; //thing for checking whether user input will fit on screen
278 
279 	unsigned int		UserEnteringText :1;
280 	unsigned int		UserEnteringNumber :1;
281 	unsigned int		UserChangingKeyConfig :1;
282 	unsigned int		ChangingPrimaryConfig :1;
283 } AVP_MENUS;
284 
285 
286 #define BRIGHTNESS_OF_HIGHLIGHTED_ELEMENT (ONE_FIXED)
287 #define BRIGHTNESS_OF_DARKENED_ELEMENT (ONE_FIXED/4)
288 #define BRIGHTNESS_CHANGE_SPEED (RealFrameTime*2)
289 
290 #define MENU_TOPY		(150)
291 #define MENU_CENTREY	(280)
292 #define MENU_HEIGHT		(255)
293 #define MENU_CENTREX	(ScreenDescriptorBlock.SDB_Width/2)
294 
295 #define MENU_ELEMENT_SPACING	(9)
296 #define MENU_FONT_HEIGHT		(21)
297 #define MENU_LEFTXEDGE			(30)
298 #define MENU_RIGHTXEDGE			(ScreenDescriptorBlock.SDB_Width-30)
299 #define MENU_BOTTOMYEDGE		(390)
300 #define MENU_TOPYEDGE			(130)
301 #define MENU_WIDTH (MENU_RIGHTXEDGE-MENU_LEFTXEDGE)
302 
303 
304 /*
305 Defines for numbers of levels transferred to AvP_EnvInfo.h
306 -Richard.
307 */
308 
309 
310 
311 /* KJL 18:05:51 05/07/98 - multiplayer stuff */
312 typedef struct
313 {
314 	char Name[40];
315 	char levelIndex;//local level index
316 //	GUID Guid;
317 	int Guid;
318 
319 	BOOL AllowedToJoin;
320 } SESSION_DESC;
321 #define MAX_NO_OF_SESSIONS 10
322 extern SESSION_DESC SessionData[];
323 extern int NumberOfSessionsFound;
324 
325 extern char IP_Address_Name[];
326 
327 
328 
329 typedef struct
330 {
331 	unsigned char	SlotUsed;
332 	unsigned char	SavesLeft;
333 	unsigned char	Species;
334 	unsigned char	Episode;
335 	unsigned char	ElapsedTime_Hours;
336 	unsigned char	ElapsedTime_Minutes;
337 	unsigned char	ElapsedTime_Seconds;
338 	unsigned char	Difficulty;
339 
340 	time_t TimeStamp;
341 } SAVE_SLOT_HEADER;
342 
343 #define NUMBER_OF_SAVE_SLOTS 8
344 
345 
346 void KeyboardEntryQueue_Add(char c);
347 
348 int AvP_MainMenus(void);
349 
350 int AvP_InGameMenus(void);
351 
352 int InGameMenusAreRunning(void);
353 
354 void RenderBriefingText(int centreY, int brightness);
355 void GetFilenameForSaveSlot(int i, unsigned char *filenamePtr);
356 void ScanSaveSlots(void);
357 
358 #endif
359