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