Files
source/Strategic/Strategic Status.h
T

170 lines
5.4 KiB
C++

#ifndef __STRATEGIC_STATUS_H
#define __STRATEGIC_STATUS_H
#include "types.h"
//#include "Item Types.h"
#include "Soldier Control.h"
//forward declarations of common classes to eliminate includes
class OBJECTTYPE;
class SOLDIERTYPE;
//Enemy is allowed to capture the player after certain day
#define STARTDAY_ALLOW_PLAYER_CAPTURE_FOR_RESCUE 4
#define STRATEGIC_PLAYER_CAPTURED_FOR_RESCUE 0x00000001
#define STRATEGIC_PLAYER_CAPTURED_FOR_ESCAPE 0x00000002
#define ARMY_GUN_LEVELS 11
// anv: externalised, now these serve as enums below
// player reputation modifiers
//#define REPUTATION_LOW_DEATHRATE +5
//#define REPUTATION_HIGH_DEATHRATE -5
//#define REPUTATION_GREAT_MORALE +3
//#define REPUTATION_POOR_MORALE -3
//#define REPUTATION_BATTLE_WON +2
//#define REPUTATION_BATTLE_LOST -2
//#define REPUTATION_TOWN_WON +5
//#define REPUTATION_TOWN_LOST -5
//#define REPUTATION_SOLDIER_DIED -2 // per exp. level
//#define REPUTATION_SOLDIER_CAPTURED -1
//#define REPUTATION_KILLED_CIVILIAN -5
//#define REPUTATION_EARLY_FIRING -3
//#define REPUTATION_KILLED_MONSTER_QUEEN +15
//#define REPUTATION_KILLED_DEIDRANNA +25
typedef enum
{
REPUTATION_LOW_DEATHRATE = 0,
REPUTATION_HIGH_DEATHRATE,
REPUTATION_GREAT_MORALE,
REPUTATION_POOR_MORALE,
REPUTATION_BATTLE_WON,
REPUTATION_BATTLE_LOST, // 5
REPUTATION_TOWN_WON,
REPUTATION_TOWN_LOST,
REPUTATION_SOLDIER_DIED,
REPUTATION_SOLDIER_CAPTURED,
REPUTATION_KILLED_CIVILIAN, // 10
REPUTATION_EARLY_FIRING,
REPUTATION_KILLED_MONSTER_QUEEN,
REPUTATION_KILLED_DEIDRANNA,
REPUTATION_MERC_COMPLAIN_EQUIPMENT,
REPUTATION_MERC_OWED_MONEY, // 15
REPUTATION_PLAYER_IS_INACTIVE,
REPUTATION_MERC_FIRED_ON_BAD_TERMS,
NUM_REPUTATION_EVENTS,
} ReputationEventNames;
// flags to remember whether a certain E-mail has already been sent out
#define ENRICO_EMAIL_SENT_SOME_PROGRESS 0x0001
#define ENRICO_EMAIL_SENT_ABOUT_HALFWAY 0x0002
#define ENRICO_EMAIL_SENT_NEARLY_DONE 0x0004
#define ENRICO_EMAIL_SENT_MINOR_SETBACK 0x0008
#define ENRICO_EMAIL_SENT_MAJOR_SETBACK 0x0010
#define ENRICO_EMAIL_SENT_CREATURES 0x0020
#define ENRICO_EMAIL_FLAG_SETBACK_OVER 0x0040
#define ENRICO_EMAIL_SENT_LACK_PROGRESS1 0x0080
#define ENRICO_EMAIL_SENT_LACK_PROGRESS2 0x0100
#define ENRICO_EMAIL_SENT_LACK_PROGRESS3 0x0200
#define ENRICO_EMAIL_SENT_PMC 0x0400
#define ENRICO_EMAIL_SENT_MILITIAROSTER 0x0800
// progress threshold that control Enrico E-mail timing
#define SOME_PROGRESS_THRESHOLD 20
#define ABOUT_HALFWAY_THRESHOLD 55
#define NEARLY_DONE_THRESHOLD 80
#define MINOR_SETBACK_THRESHOLD 5
#define MAJOR_SETBACK_THRESHOLD 15
#define NEW_SECTORS_EQUAL_TO_ACTIVITY 4
// enemy ranks
enum
{
ENEMY_RANK_ADMIN,
ENEMY_RANK_TROOP,
ENEMY_RANK_ELITE,
//ENEMY_RANK_TANK,
NUM_ENEMY_RANKS
};
// ways enemies can be killed
enum
{
ENEMY_KILLED_IN_TACTICAL,
ENEMY_KILLED_IN_AUTO_RESOLVE,
ENEMY_KILLED_TOTAL,
NUM_WAYS_ENEMIES_KILLED
};
typedef struct STRATEGIC_STATUS
{
UINT32 uiFlags;
UINT8 ubNumCapturedForRescue;
UINT8 ubHighestProgress; // the highest level of progress player has attained thus far in the game (0-100)
UINT8 ubStandardArmyGunIndex[ARMY_GUN_LEVELS]; // type of gun in each group that Queen's army is using this game
BOOLEAN fWeaponDroppedAlready[MAXITEMS]; // flag that tracks whether this weapon type has been dropped before
UINT8 ubMercDeaths; // how many soldiers have bit it while in the player's employ (0-100)
UINT32 uiManDaysPlayed; // once per day, # living mercs on player's team is added to this running total
UINT8 ubBadReputation; // how bad a reputation player has earned through his actions, performance, etc. (0-100)
UINT16 usEnricoEmailFlags; // bit flags that control progress-related E-mails from Enrico
UINT8 ubInsuranceInvestigationsCnt; // how many times merc has been investigated for possible insurance fraud
UINT8 ubUnhiredMercDeaths; // how many mercs have died while NOT working for the player
UINT16 usPlayerKills; // kills achieved by all mercs controlled by player together. *Excludes* militia kills!
UINT16 usEnemiesKilled[NUM_WAYS_ENEMIES_KILLED][NUM_ENEMY_RANKS]; // admin/troop/elite. Includes kills by militia, too
UINT16 usLastDayOfPlayerActivity;
UINT8 ubNumNewSectorsVisitedToday;
UINT8 ubNumberOfDaysOfInactivity;
// Flugente: VIPs
UINT8 usVIPsTotal;
UINT8 usVIPsLeft;
INT8 bPadding[68];
} STRATEGIC_STATUS;
void InitStrategicStatus();
extern STRATEGIC_STATUS gStrategicStatus;
BOOLEAN SaveStrategicStatusToSaveGameFile( HWFILE hFile );
BOOLEAN LoadStrategicStatusFromSaveGameFile( HWFILE hFile );
UINT8 CalcDeathRate(void);
void ModifyPlayerReputation(INT8 bRepChange);
BOOLEAN MercThinksDeathRateTooHigh( UINT8 ubProfileID );
BOOLEAN MercThinksBadReputationTooHigh( UINT8 ubProfileID );
BOOLEAN MercThinksHisMoraleIsTooLow( SOLDIERTYPE *pSoldier );
BOOLEAN MercIsOwedTooMuchMoney( UINT8 ubProfileID );
BOOLEAN MercThinksPlayerIsInactiveTooLong( UINT8 ubProfileID );
void HandleEnricoEmail(void);
void TrackEnemiesKilled( UINT8 ubKilledHow, UINT8 ubSoldierClass );
INT8 SoldierClassToRankIndex( UINT8 ubSoldierClass );
UINT8 RankIndexToSoldierClass( UINT8 ubRankIndex );
void UpdateLastDayOfPlayerActivity( UINT16 usDay );
#endif