Files
source/Strategic/Strategic Status.h
Marco Antonio J. Costaandmajcosta 86ad401186 add newline at end of file where it's lacking
.editorconfig already enforces it but it's getting changed piecemeal in
every commit. just get it done with.

the script:
```

find . -type f -not -path "./.git/*" -not -path "./.vs/*" | while read -r file; do
	isFile=$(file -0 "$file" | cut -d $'\0' -f2)
	case "$isFile" in
		(*text*)
			echo "$file is text"
			if [[ $(tail -c 1 "$file" | wc -l) -ne 1 ]]; then
				echo "" >> "$file"
			fi
			;;
		(*)
			echo "file isn't text"
			;;
	esac
done
```
2024-12-14 19:05:48 -03:00

171 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