Files
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

185 lines
6.1 KiB
C

#ifndef __STRATEGIC_AI_H
#define __STRATEGIC_AI_H
#include "FileMan.h"
#include "Strategic Movement.h"
void InitStrategicAI();
void KillStrategicAI();
BOOLEAN SaveStrategicAI( HWFILE hFile );
BOOLEAN LoadStrategicAI( HWFILE hFile );
//NPC ACTION TRIGGERS SPECIAL CASE AI
enum
{
STRATEGIC_AI_ACTION_WAKE_QUEEN = 1,
STRATEGIC_AI_ACTION_KINGPIN_DEAD,
STRATEGIC_AI_ACTION_QUEEN_DEAD,
};
// WDS - New AI
void ExecuteStrategicAIAction(
UINT16 usActionCode, // See list in "interface Dialogue.h"
INT16 sSectorX, // Target X location of strategic action
INT16 sSectorY, // Target Y location of strategic action
INT32 option1 = 0, // Option 1, vaies with action
INT32 option2 = 0 // Option 2, vaies with action
);
void CheckEnemyControlledSector( UINT8 ubSectorID );
void EvaluateQueenSituation();
extern BOOLEAN gfUseAlternateQueenPosition;
//returns TRUE if the group was deleted.
BOOLEAN StrategicAILookForAdjacentGroups( GROUP *pGroup );
void RemoveGroupFromStrategicAILists( UINT8 ubGroupID );
void RecalculateSectorWeight( UINT8 ubSectorID );
void RecalculateGroupWeight( GROUP *pGroup );
void SendGroupToPool( GROUP **pGroup );
BOOLEAN OkayForEnemyToMoveThroughSector( UINT8 ubSectorID );
BOOLEAN EnemyPermittedToAttackSector( GROUP **pGroup, UINT8 ubSectorID );
void StrategicHandleQueenLosingControlOfSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
void InvestigateSector( UINT8 ubSectorID );
// WDS - New AI
void HourlyCheckStrategicAI();
void WakeUpQueen();
void StrategicHandleMineThatRanOut( UINT8 ubSectorID );
INT16 FindPatrolGroupIndexForGroupID( UINT8 ubGroupID );
INT16 FindPatrolGroupIndexForGroupIDPending( UINT8 ubGroupID );
INT16 FindGarrisonIndexForGroupIDPending( UINT8 ubGroupID );
GROUP* FindPendingGroupInSector( UINT8 ubSectorID );
enum SAIMOVECODE
{
DIRECT,
EVASIVE,
STAGE,
};
void MoveSAIGroupToSector( GROUP **pGroup, UINT8 ubSectorID, UINT32 uiMoveCode, UINT8 ubIntention );
void RepollSAIGroup( GROUP *pGroup );
//When an enemy AI group is eliminated by the player, apply a grace period in which the
//group isn't allowed to be filled for several days.
void TagSAIGroupWithGracePeriod( GROUP *pGroup );
BOOLEAN PermittedToFillPatrolGroup( INT32 iPatrolID );
enum GROUP_TYPE
{
GROUP_TYPE_ATTACK,
GROUP_TYPE_PATROL,
GROUP_TYPE_TRANSPORT
};
void ASDInitializePatrolGroup(GROUP *pGroup);
void InitializeGroup(const GROUP_TYPE groupType, const UINT16 groupSize, ENEMYGROUP& enemyGroup, const BOOLEAN asdUpgrade);
void InitializeGroup(const GROUP_TYPE groupType, const UINT16 groupSize, UINT16 &troopCount, UINT16 &eliteCount, UINT16 &robotCount, UINT16 &jeepCount, UINT16 &tankCount, const BOOLEAN asdUpgrade);
extern BOOLEAN gfDisplayStrategicAILogs;
extern BOOLEAN gfFirstBattleMeanwhileScenePending;
extern UINT8 gubSAIVersion;
extern BOOLEAN gfUnlimitedTroops;
extern INT32 giReinforcementPool;
extern INT32 giTotalRecruitsInTraining;
//These enumerations define all of the various types of stationary garrison
//groups, and index their compositions for forces, etc.
enum
{
QUEEN_DEFENCE, //The most important sector, the queen's palace.
MEDUNA_DEFENCE, //The town surrounding the queen's palace.
MEDUNA_SAMSITE, //A sam site within Meduna (higher priority)
LEVEL1_DEFENCE, //The sectors immediately adjacent to Meduna (defence and spawning area)
LEVEL2_DEFENCE, //Two sectors away from Meduna (defence and spawning area)
LEVEL3_DEFENCE, //Three sectors away from Meduna (defence and spawning area)
ORTA_DEFENCE, //The top secret military base containing lots of elites
EAST_GRUMM_DEFENCE, //The most-industrial town in Arulco (more mine income)
WEST_GRUMM_DEFENCE, //The most-industrial town in Arulco (more mine income)
GRUMM_MINE,
OMERTA_WELCOME_WAGON,//Small force that greets the player upon arrival in game.
BALIME_DEFENCE, //Rich town, paved roads, close to Meduna (in queen's favor)
TIXA_PRISON, //Prison, well defended, but no point in retaking
TIXA_SAMSITE, //The central-most sam site (important for queen to keep)
ALMA_DEFENCE, //The military town of Meduna. Also very important for queen.
ALMA_MINE, //Mine income AND administrators
CAMBRIA_DEFENCE, //Medical town, large, central.
CAMBRIA_MINE,
CHITZENA_DEFENCE, //Small town, small mine, far away.
CHITZENA_MINE,
CHITZENA_SAMSITE, //Sam site near Chitzena.
DRASSEN_AIRPORT, //Very far away, a supply depot of little importance.
DRASSEN_DEFENCE, //Medium town, normal.
DRASSEN_MINE,
DRASSEN_SAMSITE, //Sam site near Drassen (least importance to queen of all samsites)
ROADBLOCK, //General outside city roadblocks -- enhance chance of ambush?
SANMONA_SMALL
};
extern UINT8 NUM_ARMY_COMPOSITIONS;
typedef struct ARMY_COMPOSITION
{
INT32 iReadability; //contains the enumeration which is useless, but helps readability.
INT8 bPriority;
INT8 bElitePercentage;
INT8 bTroopPercentage;
INT8 bAdminPercentage;
INT8 bDesiredPopulation;
INT8 bStartPopulation;
INT8 bPadding[10];
}ARMY_COMPOSITION;
//Defines the patrol groups -- movement groups.
typedef struct PATROL_GROUP
{
INT8 bSize;
INT8 bPriority;
UINT8 ubSectorID[4];
INT8 bFillPermittedAfterDayMod100;
UINT8 ubGroupID;
INT8 bWeight;
UINT8 ubPendingGroupID;
INT8 bPadding[10];
}PATROL_GROUP;
//Defines all stationary defence forces.
typedef struct GARRISON_GROUP
{
UINT8 ubSectorID;
UINT8 ubComposition;
INT8 bWeight;
UINT8 ubPendingGroupID;
INT8 bPadding[10];
}GARRISON_GROUP;
#define MAX_GARRISON_GROUPS 256 // WANNE - MP: Changed from 100 to 256
#define MAX_PATROL_GROUPS 50
#define MAX_ARMY_COMPOSITIONS 60
// attack/defense point modifiers, used to determine if the AI should attack a sector
#define ADMIN_POINTS_MODIFIER 2
#define REGULAR_POINTS_MODIFIER 4
#define ELITE_POINTS_MODIFIER 6
#define ROBOT_POINTS_MODIFIER 15
#define JEEP_POINTS_MODIFIER 12
#define TANK_POINTS_MODIFIER 20
#define GREEN_MILITIA_POINTS_MODIFIER 1
#define REGULAR_MILITIA_POINTS_MODIFIER 2
#define ELITE_MILITIA_POINTS_MODIFIER 3
#endif