1 #ifndef __SOLDER_PROFILE_TYPE_H
2 #define __SOLDER_PROFILE_TYPE_H
3
4 #include "Overhead_Types.h"
5 #include "Types.h"
6
7 #include <string_theory/string>
8
9
10 #define NUM_PROFILES 170
11
12 #define NAME_LENGTH 30
13 #define NICKNAME_LENGTH 10
14
15
16 //ONLY HAVE 8 MISC FLAGS.. SHOULD BE ENOUGH
17 #define PROFILE_MISC_FLAG_RECRUITED 0x01
18 #define PROFILE_MISC_FLAG_HAVESEENCREATURE 0x02
19 #define PROFILE_MISC_FLAG_FORCENPCQUOTE 0x04
20 #define PROFILE_MISC_FLAG_WOUNDEDBYPLAYER 0x08
21 #define PROFILE_MISC_FLAG_TEMP_NPC_QUOTE_DATA_EXISTS 0x10
22 #define PROFILE_MISC_FLAG_SAID_HOSTILE_QUOTE 0x20
23 #define PROFILE_MISC_FLAG_EPCACTIVE 0x40
24 #define PROFILE_MISC_FLAG_ALREADY_USED_ITEMS 0x80 //The player has already purchased the mercs items.
25
26 #define PROFILE_MISC_FLAG2_DONT_ADD_TO_SECTOR 0x01
27 #define PROFILE_MISC_FLAG2_LEFT_COUNTRY 0x02
28 #define PROFILE_MISC_FLAG2_BANDAGED_TODAY 0x04
29 #define PROFILE_MISC_FLAG2_SAID_FIRSTSEEN_QUOTE 0x08
30 #define PROFILE_MISC_FLAG2_NEEDS_TO_SAY_HOSTILE_QUOTE 0x10
31 #define PROFILE_MISC_FLAG2_MARRIED_TO_HICKS 0x20
32 #define PROFILE_MISC_FLAG2_ASKED_BY_HICKS 0x40
33
34 #define PROFILE_MISC_FLAG3_PLAYER_LEFT_MSG_FOR_MERC_AT_AIM 0x01 // In the aimscreen, the merc was away and the player left a message
35 #define PROFILE_MISC_FLAG3_PERMANENT_INSERTION_CODE 0x02
36 #define PROFILE_MISC_FLAG3_PLAYER_HAD_CHANCE_TO_HIRE 0x04 // player's had a chance to hire this merc
37 #define PROFILE_MISC_FLAG3_HANDLE_DONE_TRAVERSAL 0x08
38
39 #define PROFILE_MISC_FLAG3_NPC_PISSED_OFF 0x10
40 #define PROFILE_MISC_FLAG3_MERC_MERC_IS_DEAD_AND_QUOTE_SAID 0x20 // In the merc site, the merc has died and Speck quote for the dead merc has been said
41
42 #define PROFILE_MISC_FLAG3_TOWN_DOESNT_CARE_ABOUT_DEATH 0x40
43 #define PROFILE_MISC_FLAG3_GOODGUY 0x80
44 //
45 // The following variables are used with the 'bMercStatus' variable
46 //
47 //
48
49 //Merc is ready
50 #define MERC_OK 0
51
52 //if the merc doesnt have a EDT file
53 #define MERC_HAS_NO_TEXT_FILE -1
54
55 //used in the aim video conferencing screen
56 #define MERC_ANNOYED_BUT_CAN_STILL_CONTACT -2
57 #define MERC_ANNOYED_WONT_CONTACT -3
58 #define MERC_HIRED_BUT_NOT_ARRIVED_YET -4
59
60 //self explanatory
61 #define MERC_IS_DEAD -5
62
63 //set when the merc is returning home. A delay for 1,2 or 3 days
64 #define MERC_RETURNING_HOME -6
65
66 // used when merc starts game on assignment, goes on assignment later, or leaves to go on another contract
67 #define MERC_WORKING_ELSEWHERE -7
68
69 //When the merc was fired, they were a POW, make sure they dont show up in AIM, or MERC as available
70 #define MERC_FIRED_AS_A_POW -8
71
72
73 // the values for categories of stats
74 #define SUPER_STAT_VALUE 80
75 #define NEEDS_TRAINING_STAT_VALUE 50
76 #define NO_CHANCE_IN_HELL_STAT_VALUE 40
77
78 #define SUPER_SKILL_VALUE 80
79 #define NEEDS_TRAINING_SKILL_VALUE 50
80 #define NO_CHANCE_IN_HELL_SKILL_VALUE 0
81
82
83 enum SkillTrait
84 {
85 NO_SKILLTRAIT = 0,
86 LOCKPICKING,
87 HANDTOHAND,
88 ELECTRONICS,
89 NIGHTOPS,
90 THROWING,
91 TEACHING,
92 HEAVY_WEAPS,
93 AUTO_WEAPS,
94 STEALTHY,
95 AMBIDEXT,
96 THIEF,
97 MARTIALARTS,
98 KNIFING,
99 ONROOF,
100 CAMOUFLAGED,
101 NUM_SKILLTRAITS
102 };
103
104 enum PersonalityTrait
105 {
106 NO_PERSONALITYTRAIT = 0,
107 HEAT_INTOLERANT,
108 NERVOUS,
109 CLAUSTROPHOBIC,
110 NONSWIMMER,
111 FEAR_OF_INSECTS,
112 FORGETFUL,
113 PSYCHO
114 };
115
116 #define NERVOUS_RADIUS 10
117
118 enum Attitudes
119 {
120 ATT_NORMAL = 0,
121 ATT_FRIENDLY,
122 ATT_LONER,
123 ATT_OPTIMIST,
124 ATT_PESSIMIST,
125 ATT_AGGRESSIVE,
126 ATT_ARROGANT,
127 ATT_BIG_SHOT,
128 ATT_ASSHOLE,
129 ATT_COWARD,
130 NUM_ATTITUDES
131 };
132
133 enum Sexes
134 {
135 MALE = 0,
136 FEMALE
137 };
138
139 enum SexistLevels
140 {
141 NOT_SEXIST = 0,
142 SOMEWHAT_SEXIST,
143 VERY_SEXIST,
144 GENTLEMAN
145 };
146
147
148
149 // training defines for evolution, no stat increase, stat decrease( de-evolve )
150 enum CharacterEvolution
151 {
152 NORMAL_EVOLUTION = 0,
153 NO_EVOLUTION,
154 DEVOLVE,
155 };
156
157 #define BUDDY_MERC(prof, bud) ((prof).bBuddy[0] == (bud) || (prof).bBuddy[1] == (bud) || (prof).bBuddy[2] == (bud))
158 #define HATED_MERC(prof, hat) ((prof).bHated[0] == (hat) || (prof).bHated[1] == (hat) || (prof).bHated[2] == (hat))
159
160 #define BUDDY_OPINION +25
161 #define HATED_OPINION -25
162
163 struct MERCPROFILESTRUCT
164 {
165 ST::string zName;
166 ST::string zNickname;
167 UINT8 ubFaceIndex;
168 ST::string PANTS;
169 ST::string VEST;
170 ST::string SKIN;
171 ST::string HAIR;
172 INT8 bSex;
173 INT8 bArmourAttractiveness;
174 UINT8 ubMiscFlags2;
175 INT8 bEvolution;
176 UINT8 ubMiscFlags;
177 UINT8 bSexist;
178 INT8 bLearnToHate;
179
180 // skills
181 UINT8 ubQuoteRecord;
182 INT8 bDeathRate;
183
184 INT16 sExpLevelGain;
185 INT16 sLifeGain;
186 INT16 sAgilityGain;
187 INT16 sDexterityGain;
188 INT16 sWisdomGain;
189 INT16 sMarksmanshipGain;
190 INT16 sMedicalGain;
191 INT16 sMechanicGain;
192 INT16 sExplosivesGain;
193
194 UINT8 ubBodyType;
195 INT8 bMedical;
196
197 UINT16 usEyesX;
198 UINT16 usEyesY;
199 UINT16 usMouthX;
200 UINT16 usMouthY;
201 UINT32 uiBlinkFrequency;
202 UINT32 uiExpressionFrequency;
203 UINT16 sSectorX;
204 UINT16 sSectorY;
205
206 UINT32 uiDayBecomesAvailable; //day the merc will be available. used with the bMercStatus
207
208 INT8 bStrength;
209
210 INT8 bLifeMax;
211 INT8 bExpLevelDelta;
212 INT8 bLifeDelta;
213 INT8 bAgilityDelta;
214 INT8 bDexterityDelta;
215 INT8 bWisdomDelta;
216 INT8 bMarksmanshipDelta;
217 INT8 bMedicalDelta;
218 INT8 bMechanicDelta;
219 INT8 bExplosivesDelta;
220 INT8 bStrengthDelta;
221 INT8 bLeadershipDelta;
222 UINT16 usKills;
223 UINT16 usAssists;
224 UINT16 usShotsFired;
225 UINT16 usShotsHit;
226 UINT16 usBattlesFought;
227 UINT16 usTimesWounded;
228 UINT16 usTotalDaysServed;
229
230 INT16 sLeadershipGain;
231 INT16 sStrengthGain;
232
233
234
235 // BODY TYPE SUBSITUTIONS
236 UINT32 uiBodyTypeSubFlags;
237
238 INT16 sSalary;
239 INT8 bLife;
240 INT8 bDexterity; // dexterity (hand coord) value
241 INT8 bPersonalityTrait;
242 INT8 bSkillTrait;
243
244 INT8 bReputationTolerance;
245 INT8 bExplosive;
246 INT8 bSkillTrait2;
247 INT8 bLeadership;
248
249 INT8 bBuddy[5];
250 INT8 bHated[5];
251 INT8 bExpLevel; // general experience level
252
253 INT8 bMarksmanship;
254 INT8 bWisdom;
255
256 UINT8 bInvStatus[19];
257 UINT8 bInvNumber[19];
258 UINT16 usApproachFactor[4];
259
260 INT8 bMainGunAttractiveness;
261 INT8 bAgility; // agility (speed) value
262
263 BOOLEAN fUseProfileInsertionInfo; // Set to various flags, ( contained in TacticalSave.h )
264 INT16 sGridNo; // The Gridno the NPC was in before leaving the sector
265 UINT8 ubQuoteActionID;
266 INT8 bMechanical;
267
268 UINT8 ubInvUndroppable;
269 UINT8 ubRoomRangeStart[2];
270 UINT16 inv[19];
271
272 UINT16 usStatChangeChances[ 12 ]; // used strictly for balancing, never shown!
273 UINT16 usStatChangeSuccesses[ 12 ]; // used strictly for balancing, never shown!
274
275 UINT8 ubStrategicInsertionCode;
276
277 UINT8 ubRoomRangeEnd[2];
278
279 UINT8 ubLastQuoteSaid;
280
281 INT8 bRace;
282 INT8 bNationality;
283 INT8 bAppearance;
284 INT8 bAppearanceCareLevel;
285 INT8 bRefinement;
286 INT8 bRefinementCareLevel;
287 INT8 bHatedNationality;
288 INT8 bHatedNationalityCareLevel;
289 INT8 bRacist;
290 UINT32 uiWeeklySalary;
291 UINT32 uiBiWeeklySalary;
292 INT8 bMedicalDeposit;
293 INT8 bAttitude;
294 UINT16 sMedicalDepositAmount;
295
296 INT8 bLearnToLike;
297 UINT8 ubApproachVal[4];
298 UINT8 ubApproachMod[3][4];
299 INT8 bTown;
300 INT8 bTownAttachment;
301 UINT16 usOptionalGearCost;
302 INT8 bMercOpinion[75];
303 INT8 bApproached;
304 INT8 bMercStatus; //The status of the merc. If negative, see flags at the top of this file. Positive: The number of days the merc is away for. 0: Not hired but ready to be.
305 INT8 bHatedTime[5];
306 INT8 bLearnToLikeTime;
307 INT8 bLearnToHateTime;
308 INT8 bHatedCount[5];
309 INT8 bLearnToLikeCount;
310 INT8 bLearnToHateCount;
311 UINT8 ubLastDateSpokenTo;
312 UINT8 bLastQuoteSaidWasSpecial;
313 INT8 bSectorZ;
314 UINT16 usStrategicInsertionData;
315 INT8 bFriendlyOrDirectDefaultResponseUsedRecently;
316 INT8 bRecruitDefaultResponseUsedRecently;
317 INT8 bThreatenDefaultResponseUsedRecently;
318 INT8 bNPCData; // NPC specific
319 INT32 iBalance;
320 UINT8 ubCivilianGroup;
321 UINT8 ubNeedForSleep;
322 UINT32 uiMoney;
323 INT8 bNPCData2; // NPC specific
324
325 UINT8 ubMiscFlags3;
326
327 UINT8 ubDaysOfMoraleHangover; // used only when merc leaves team while having poor morale
328 UINT8 ubNumTimesDrugUseInLifetime; // The # times a drug has been used in the player's lifetime...
329
330 // Flags used for the precedent to repeating oneself in Contract negotiations. Used for quote 80 - ~107. Gets reset every day
331 UINT32 uiPrecedentQuoteSaid;
332 INT16 sPreCombatGridNo;
333 UINT8 ubTimeTillNextHatedComplaint;
334 UINT8 ubSuspiciousDeath;
335
336 INT32 iMercMercContractLength; //Used for MERC mercs, specifies how many days the merc has gone since last page
337
338 UINT32 uiTotalCostToDate; // The total amount of money that has been paid to the merc for their salary
339 };
340
341
HasSkillTrait(MERCPROFILESTRUCT const & p,SkillTrait const skill)342 static inline bool HasSkillTrait(MERCPROFILESTRUCT const& p, SkillTrait const skill)
343 {
344 return p.bSkillTrait == skill || p.bSkillTrait2 == skill;
345 }
346
347
348 #define TIME_BETWEEN_HATED_COMPLAINTS 24
349
350 #define SUSPICIOUS_DEATH 1
351 #define VERY_SUSPICIOUS_DEATH 2
352
353 #endif
354