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