1 #ifndef _avp_user_profile_h_
2 #define _avp_user_profile_h_ 1
3 
4 #include "usr_io.h"
5 #include "avp_envinfo.h"
6 #include "game_statistics.h"
7 #include "detaillevels.h"
8 /* KJL 14:17:41 10/12/98 - User profile
9 
10 	Structures that contains the information required by the single player game
11 
12 	e.g. which levels have been played, which difficulty levels etc.
13 
14  */
15 #define MAX_NO_OF_USERS 4
16 
17 #define MAX_SIZE_OF_USERS_NAME 15
18 
19 enum AVP_DIFFICULTY_LEVEL_ID
20 {
21 	AVP_DIFFICULTY_LEVEL_NONE,
22 	/* the 'none' difficulty level setting can be used to indicate that
23 	a level has never been completed */
24 
25 	AVP_DIFFICULTY_LEVEL_EASY,
26 	AVP_DIFFICULTY_LEVEL_MEDIUM,
27 	AVP_DIFFICULTY_LEVEL_HARD,
28 };
29 
30 enum CHEATMODE_ID
31 {
32 	CHEATMODE_PIGSTICKING,
33 	CHEATMODE_SLUGTRAIL,
34 	CHEATMODE_SNIPERMUNCH,
35 	CHEATMODE_TERROR,
36 	CHEATMODE_SUPERGORE,
37 	CHEATMODE_GRENADE,
38 	CHEATMODE_MIRROR,
39 	CHEATMODE_PIPECLEANER,
40 	CHEATMODE_DISCOINFERNO,
41 	CHEATMODE_TRIPTASTIC,
42 	CHEATMODE_MOTIONBLUR,
43 	CHEATMODE_UNDERWATER,
44 	CHEATMODE_JOHNWOO,
45 	CHEATMODE_WARPSPEED,
46 	CHEATMODE_LANDOFTHEGIANTS,
47 	CHEATMODE_IMPOSSIBLEMISSION,
48 	CHEATMODE_RAINBOWBLOOD,
49 	CHEATMODE_TICKERTAPE,
50 	CHEATMODE_NAUSEA,
51 	CHEATMODE_FREEFALL,
52 	CHEATMODE_BALLSOFFIRE,
53 
54 	MAX_NUMBER_OF_CHEATMODES,
55 
56 
57 	CHEATMODE_NONACTIVE// leave me at the end!
58 
59 
60 };
61 
62 /* Putting this here to get the definition of the cheat enum. */
63 typedef struct {
64 	AvP_GameStats_Stored StatTargets;
65 	enum CHEATMODE_ID CheatModeToActivate;
66 } AvP_Level_Target_Desc;
67 
68 typedef struct
69 {
70 	char Name[MAX_SIZE_OF_USERS_NAME+1];
71 
72 	// SBF: 32-bit time_t
73 	uint32_t FileTime;
74 
75 	// SBF: used to be an incomplete SYSTEMTIME struct, TimeLastUpdated
76 	int unused[6];
77 
78 	/* KJL 15:14:12 10/12/98 - array to hold level completion data
79 	3 species, pad out to 16 levels each */
80 	char LevelCompleted[3][16];
81 
82 	unsigned char CheatMode[32];
83 	unsigned char GammaSetting;
84 	unsigned char AutoWeaponChangeDisabled : 1;
85 	unsigned char SpareBits : 7; //not used
86 	char Padding[74];
87 
88 	int CDPlayerVolume;
89 
90 	char MultiplayerCallsign[16];
91 
92 	int SmackerSoundVolume;
93 	int EffectsSoundVolume;
94 	int MoviesAreActive;
95 	int IntroOutroMoviesAreActive;
96 
97 	MENU_DETAIL_LEVEL_OPTIONS DetailLevelSettings;
98 
99 	PLAYER_INPUT_CONFIGURATION MarineInputPrimaryConfig;
100 	PLAYER_INPUT_CONFIGURATION MarineInputSecondaryConfig;
101 	PLAYER_INPUT_CONFIGURATION AlienInputPrimaryConfig;
102 	PLAYER_INPUT_CONFIGURATION AlienInputSecondaryConfig;
103 	PLAYER_INPUT_CONFIGURATION PredatorInputPrimaryConfig;
104 	PLAYER_INPUT_CONFIGURATION PredatorInputSecondaryConfig;
105 	CONTROL_METHODS ControlMethods;
106 	JOYSTICK_CONTROL_METHODS JoystickControlMethods;
107 
108 	/* This feels a bit bloaty. */
109 	AvP_GameStats_Stored PersonalBests[I_MaxDifficulties][AVP_ENVIRONMENT_END_OF_LIST];
110 	/* Yes, it contains impossible!  So sue me! */
111 
112 } AVP_USER_PROFILE;
113 
114 
115 
116 #define SUPERGORE_MODE				(CheatMode_Active == CHEATMODE_SUPERGORE)
117 #define SLUGTRAIL_MODE				(CheatMode_Active == CHEATMODE_SLUGTRAIL)
118 #define TERROR_MODE					(CheatMode_Active == CHEATMODE_TERROR)
119 #define GRENADE_MODE				(CheatMode_Active == CHEATMODE_GRENADE)
120 #define PIGSTICKING_MODE			(CheatMode_Active == CHEATMODE_PIGSTICKING)
121 #define SNIPERMUNCH_MODE			(CheatMode_Active == CHEATMODE_SNIPERMUNCH)
122 #define MIRROR_CHEATMODE 			(CheatMode_Active == CHEATMODE_MIRROR)
123 #define PIPECLEANER_CHEATMODE 		(CheatMode_Active == CHEATMODE_PIPECLEANER)
124 #define DISCOINFERNO_CHEATMODE 		(CheatMode_Active == CHEATMODE_DISCOINFERNO)
125 #define TRIPTASTIC_CHEATMODE 		(CheatMode_Active == CHEATMODE_TRIPTASTIC)
126 #define MOTIONBLUR_CHEATMODE 		(CheatMode_Active == CHEATMODE_MOTIONBLUR)
127 #define UNDERWATER_CHEATMODE 		(CheatMode_Active == CHEATMODE_UNDERWATER)
128 #define JOHNWOO_CHEATMODE			(CheatMode_Active == CHEATMODE_JOHNWOO)
129 #define WARPSPEED_CHEATMODE			(CheatMode_Active == CHEATMODE_WARPSPEED)
130 #define LANDOFTHEGIANTS_CHEATMODE	(CheatMode_Active == CHEATMODE_LANDOFTHEGIANTS)
131 #define IMPOSSIBLEMISSION_CHEATMODE	(CheatMode_Active == CHEATMODE_IMPOSSIBLEMISSION)
132 #define RAINBOWBLOOD_CHEATMODE		(CheatMode_Active == CHEATMODE_RAINBOWBLOOD)
133 #define TICKERTAPE_CHEATMODE		(CheatMode_Active == CHEATMODE_TICKERTAPE)
134 #define NAUSEA_CHEATMODE			(CheatMode_Active == CHEATMODE_NAUSEA)
135 #define FREEFALL_CHEATMODE			(CheatMode_Active == CHEATMODE_FREEFALL)
136 #define BALLSOFFIRE_CHEATMODE		(CheatMode_Active == CHEATMODE_BALLSOFFIRE)
137 
138 
139 /* e.g. to access a cheat mode
140 
141 	if (UserProfilePtr->CheatMode[CHEATMODE_PIGSTICKING]&CHEATMODE_IS_ACTIVE)
142 	{
143 		...
144 	}
145 */
146 
147 
148 
149 
150 #define USER_PROFILES_PATH "User_Profiles/"
151 #define USER_PROFILES_WILDCARD_NAME "*.prf"
152 #define USER_PROFILES_SUFFIX ".prf"
153 
154 
155 #ifdef __cplusplus
156 extern "C"
157 {
158 #endif
159 
160 extern void ExamineSavedUserProfiles(void);
161 extern int NumberOfUserProfiles(void);
162 extern AVP_USER_PROFILE *GetFirstUserProfile(void);
163 extern AVP_USER_PROFILE *GetNextUserProfile(void);
164 extern int SaveUserProfile(AVP_USER_PROFILE *profilePtr);
165 extern void DeleteUserProfile(int number);
166 
167 extern void FixCheatModesInUserProfile(AVP_USER_PROFILE *profilePtr);
168 
169 extern void GetSettingsFromUserProfile(void);
170 extern void SaveSettingsToUserProfile(AVP_USER_PROFILE *profilePtr);
171 
172 extern AVP_USER_PROFILE *UserProfilePtr;
173 
174 extern int CheatMode_Active;
175 extern int CheatMode_Species;
176 extern int CheatMode_Environment;
177 
178 
179 #ifdef __cplusplus
180 }; // extern "C"
181 #endif
182 
183 #endif
184