1 #ifndef __CAMPAIGN_H
2 #define __CAMPAIGN_H
3 
4 #include "JA2Types.h"
5 #include "Soldier_Profile_Type.h"
6 
7 #include <string_theory/string>
8 
9 
10 enum StatKind
11 {
12 	SALARYAMT  =  0,
13 	HEALTHAMT  =  1,
14 	AGILAMT    =  2,
15 	DEXTAMT    =  3,
16 	WISDOMAMT  =  4,
17 	MEDICALAMT =  5,
18 	EXPLODEAMT =  6,
19 	MECHANAMT  =  7,
20 	MARKAMT    =  8,
21 	EXPERAMT   =  9,
22 	STRAMT     = 10,
23 	LDRAMT     = 11
24 };
25 
26 template<typename T> static inline StatKind operator +(StatKind const s, T const delta)
27 {
28 	return static_cast<StatKind>((int)s + delta);
29 }
30 
31 static inline StatKind operator ++(StatKind& s)
32 {
33 	return s = s + 1;
34 }
35 
36 #define FIRST_CHANGEABLE_STAT		HEALTHAMT
37 #define LAST_CHANGEABLE_STAT		LDRAMT
38 #define CHANGEABLE_STAT_COUNT		( LDRAMT - HEALTHAMT + 1 )
39 
40 #define MAX_STAT_VALUE			100    // for stats and skills
41 #define MAXEXPLEVEL			10     // maximum merc experience level
42 
43 #define SKILLS_SUBPOINTS_TO_IMPROVE	25
44 #define ATTRIBS_SUBPOINTS_TO_IMPROVE	50
45 #define LEVEL_SUBPOINTS_TO_IMPROVE	350    // per current level! (Can't go over 6500, 10x must fit in USHORT!)
46 
47 #define WORKIMPROVERATE		2      // increase to make working mercs improve more
48 #define TRAINIMPROVERATE		2      // increase to make training mercs improve more
49 
50 #define SALARY_CHANGE_PER_LEVEL	1.25   // Mercs salary is multiplied by this
51 #define MAX_DAILY_SALARY		30000  // must fit into an INT16 (32k)
52 #define MAX_LARGE_SALARY		500000 // no limit, really
53 
54 // training cap: you can't train any stat/skill beyond this value
55 #define TRAINING_RATING_CAP		85
56 
57 // stat change causes
58 enum StatChangeCause
59 {
60 	FROM_SUCCESS  = 0,
61 	FROM_TRAINING = 1,
62 	FROM_FAILURE  = 2
63 };
64 
65 // types of experience bonus awards
66 enum
67 {
68 	EXP_BONUS_MINIMUM,
69 	EXP_BONUS_SMALL,
70 	EXP_BONUS_AVERAGE,
71 	EXP_BONUS_LARGE,
72 	EXP_BONUS_MAXIMUM,
73 	NUM_EXP_BONUS_TYPES,
74 };
75 
76 
77 void StatChange(SOLDIERTYPE&, StatKind, UINT16 n_chances, StatChangeCause);
78 
79 void HandleUnhiredMercImprovement(MERCPROFILESTRUCT&);
80 void HandleUnhiredMercDeaths( INT32 iProfileID );
81 
82 UINT8 CurrentPlayerProgressPercentage(void);
83 UINT8 HighestPlayerProgressPercentage(void);
84 
85 void HourlyProgressUpdate(void);
86 
87 void HandleAnyStatChangesAfterAttack( void );
88 
89 void AwardExperienceBonusToActiveSquad( UINT8 ubExpBonusType );
90 
91 ST::string BuildStatChangeString(const ST::string& name, BOOLEAN fIncrease, INT16 sPtsChanged, StatKind ubStat);
92 
93 void MERCMercWentUpALevelSendEmail( UINT8 ubMercMercIdValue );
94 
95 #endif
96