mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
.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 ```
337 lines
9.3 KiB
C
337 lines
9.3 KiB
C
#ifndef JA25__STRATEGIC_AI
|
|
#define JA25__STRATEGIC_AI
|
|
|
|
#ifdef JA2UB
|
|
typedef struct
|
|
{
|
|
UINT32 uiJerryMiloQuotesFlags; //used to keep track of the quotes Jerry says.
|
|
BOOLEAN fImportCharactersFromOldJa2Save; // True if we have loaded in merc profiles from JA2
|
|
|
|
BOOLEAN fInCustomMap;
|
|
|
|
BOOLEAN fJohnKulbaIsInGame; // If true Kulba is in the game, otherwise tex is
|
|
|
|
BOOLEAN fMorrisToSayHurtPlayerQuoteNextTurn;
|
|
UINT8 ubPlayerMorrisHurt;
|
|
|
|
BOOLEAN fBiggensUsedDetonator;
|
|
|
|
BOOLEAN fSendEmail_10_NextSector; // True if we are to send email #10 next time the player loads up a sector
|
|
|
|
UINT8 ubEmailFromSectorFlag;
|
|
|
|
BOOLEAN fNpcHasBeenAdded; // True if manuel has been added to sector H10 or i9
|
|
|
|
BOOLEAN fShowMercDestinationDialogWhenHiringMerc; //
|
|
|
|
BOOLEAN fHaveAimandMercOffferItems; // TRUE when MERC and AIM are giving away 'gifts' to the mercs that get hired
|
|
|
|
BOOLEAN fBiffWasKilledWhenImportingSave; //TRUE is biff was killed when we imported the save
|
|
|
|
UINT8 ubImportantSpeckQuotesSaidBefore;
|
|
|
|
BOOLEAN fShouldMsgBoxComeUpSayingSomeoneImportantIsInSector;
|
|
|
|
UINT8 ubStateOfFanInPowerGenSector;
|
|
|
|
UINT8 ubHowPlayerGotThroughFan;
|
|
|
|
UINT32 uiJa25TacticalFlags;
|
|
|
|
INT32 iPowerGenFanPositionSndID;
|
|
|
|
UINT32 uiTacticalTurnCounter;
|
|
|
|
UINT32 uiTurnPowerGenFanWentDown;
|
|
|
|
UINT32 uiJa25GeneralFlags;
|
|
|
|
UINT8 ubStatusOfFortifiedDoor;
|
|
|
|
UINT32 uiDisplayCoverCounter;
|
|
UINT32 uiDisplayLosCounter;
|
|
UINT32 uiDisplayGunRangeCounter;
|
|
|
|
UINT8 ubLoadScreenStairTraversal;
|
|
|
|
UINT8 ubMorrisNoteState;
|
|
|
|
UINT8 ubJohnKulbaInitialSectorX;
|
|
UINT8 ubJohnKulbaInitialSectorY;
|
|
|
|
UINT8 ubDisplayPlayerLostMsgBox;
|
|
|
|
BOOLEAN fJerryBreakingLaptopOccuring;
|
|
|
|
BOOLEAN fEnemyShouldImmediatelySeekThePlayer;
|
|
INT8 bSectorTheEnemyWillSeekEnemy;
|
|
|
|
UINT8 usFiller1;
|
|
|
|
UINT8 ubDisplayCommanderMorrisNote;
|
|
|
|
INT16 bNewMercProfileIDForSayingMorrisNote;
|
|
|
|
UINT32 uiTurnLastSaidSeeEnemyQuote;
|
|
|
|
UINT8 ubFiller[928]; //Struct is originally 1000 bytes in size
|
|
|
|
} JA25_SAVE_INFO;
|
|
|
|
extern JA25_SAVE_INFO gJa25SaveStruct;
|
|
|
|
//following flags use uiEmailFromSectorFlag
|
|
#define SECTOR_EMAIL__ANOTHER_SECTOR 0x01
|
|
#define SECTOR_EMAIL__J11_J12 0x02
|
|
#define SECTOR_EMAIL__POWER_GEN 0x04
|
|
#define SECTOR_EMAIL__TUNNEL 0x08
|
|
#define SECTOR_EMAIL__POWER_GEN_LVL_1 0x10
|
|
|
|
|
|
//following flags use fNpcHasBeenAdded
|
|
#define SECTOR_ADDED_NPC__MANUEL 0x01
|
|
#define SECTOR_ADDED_NPC__TEX 0x02
|
|
#define SECTOR_ADDED_NPC__JOHN_K 0x04
|
|
|
|
|
|
//Following flags use ubImportantSpeckQuotesSaidBefore
|
|
#define SPECK__ENCOURAGE_POAYER_TO_KEEP_SHOPPING 1<<0
|
|
#define SPECK__SECOND_INTRO_BEEN_SAID 1<<1
|
|
#define SPECK__BETTER_EQUIPMENT 1<<2
|
|
|
|
|
|
//following flags are used with ubStateOfFanInPowerGenSector
|
|
enum
|
|
{
|
|
PGF__RUNNING_NORMALLY,
|
|
PGF__STOPPED,
|
|
PGF__BLOWN_UP,
|
|
};
|
|
|
|
|
|
//following flags are used with uiJa25TacticalFlags
|
|
|
|
|
|
|
|
//following flags are used with ubHowPlayerGotThroughFan
|
|
enum
|
|
{
|
|
PG__PLAYER_NOT_GONE_THROUGH_YET,
|
|
PG__PLAYER_BLEW_UP_FAN_TO_GET_THROUGH,
|
|
PG__PLAYER_STOPPED_FAN_TO_GET_THROUGH,
|
|
};
|
|
|
|
//The following flags are used with uiJa25GeneralFlags.
|
|
#define JA_GF__POWER_GEN_FAN_HAS_BEEN_STOPPED 0x00000001
|
|
#define JA_GF__BIGGENS_SAID_QUOTE_117 0x00000002
|
|
#define JA_GF__DID_PLAYER_MAKE_SOUND_GOING_THROUGH_TUNNEL_GATE 0x00000004
|
|
#define JA_GF__PLAYER_HAS_SEEN_FORTIFIED_DOOR 0x00000008
|
|
|
|
#define JA_GF__ALL_DEAD_TOP_LEVEL_OF_COMPLEX 0x00000010
|
|
#define JA_GF__ALREADY_MOVED_ENEMIES_IN_COMPLEX 0x00000020
|
|
#define JA_GF__PICKED_UP_MONEY_IN_GUARD_POST 0x00000040
|
|
#define JA_GF__PICKED_UP_MONEY_IN_FIRST_TOWN 0x00000080
|
|
|
|
#define JA_GF__PLAYER_SAID_LAPTOP_FIXED_QUOTE 0x00000100
|
|
#define JA_GF__RAUL_BLOW_HIMSELF_UP 0x00000200
|
|
#define JA_GF__QUOTE_105_HAS_BEEN_SAID 0x00000400
|
|
#define JA_GF__BARRETT_IS_HALF_PRICE 0x00000800
|
|
|
|
#define JA_GF__MOVE_ENEMIES_TO_EDGE_IN_TUNNEL_1 0x00001000
|
|
#define JA_GF__MOVE_ENEMIES_TO_EDGE_IN_TUNNEL_2 0x00002000
|
|
#define JA_GF__PLAYER_SEEN_FAN_BEFORE 0x00004000
|
|
#define JA_GF__PLAYER_SAID_GATE_LOCKED_QUOTE 0x00008000
|
|
|
|
|
|
//The following is used with ubStatusOfFortifiedDoor
|
|
enum
|
|
{
|
|
FD__CLOSED,
|
|
FD__OPEN,
|
|
};
|
|
|
|
|
|
//the following is used with ubLoadScreenStairTraversal
|
|
enum
|
|
{
|
|
LS__NOT_GOING_UP_STAIRS,
|
|
LS__GOING_UP_STAIRS,
|
|
LS__GOING_DOWN_STAIRS,
|
|
};
|
|
|
|
|
|
|
|
//the following is used with ubMorrisNoteState
|
|
enum
|
|
{
|
|
MN__NOT_PICKED_UP_YET,
|
|
MN__PICKED_UP_BY_OLD_MERC_NEVER_SAID_QUOTE,
|
|
MN__PICKED_UP_BY_OLD_MERC_SAID_QUOTE_ALREADY,
|
|
MN__PICKED_UP_BY_NEW_MERC,
|
|
MN__FINISHED = MN__PICKED_UP_BY_NEW_MERC,
|
|
};
|
|
|
|
|
|
//used with ubDisplayCommanderMorrisNote
|
|
enum
|
|
{
|
|
DMN__NOT_TO_DISPLAY_IT,
|
|
DMN__DISPLAY_PART_1,
|
|
DMN__DISPLAY_PART_2,
|
|
DMN__FINISHED,
|
|
};
|
|
|
|
|
|
BOOLEAN AreAnyPlayerMercsStillInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
|
|
|
BOOLEAN ShouldEnemiesBeAddedToInitialSector();
|
|
|
|
void InitJa25StrategicAi();
|
|
|
|
void SetNumberJa25EnemiesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 ubNumAdmins, UINT8 ubNumTroops, UINT8 ubNumElites, UINT8 ubNumTanks, UINT8 ubJeeps, UINT8 ubRobots );
|
|
|
|
void InitJa25SaveStruct();
|
|
|
|
void InitJa25StrategicAiBloodcats( );
|
|
void SetNumberJa25EnemiesInSurfaceSector( INT32 iSectorID, UINT8 ubNumAdmins, UINT8 ubNumTroops, UINT8 ubNumElites, UINT8 ubNumTanks, UINT8 ubNumJeeps, UINT8 ubNumRobots );
|
|
|
|
BOOLEAN SaveJa25SaveInfoToSaveGame( HWFILE hFile );
|
|
BOOLEAN LoadJa25SaveInfoFromSavedGame( HWFILE hFile );
|
|
|
|
|
|
void AddEnemiesToJa25TunnelMaps();
|
|
void HandleAddingEnemiesToTunnelMaps();
|
|
|
|
void SetJa25GeneralFlag( UINT32 uiFlagToSet );
|
|
void ClearJa25GeneralFlag( UINT32 uiFlagToClear );
|
|
BOOLEAN IsJa25GeneralFlagSet( UINT32 uiFlagToCheck );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
UINT32 uiTimeOfLastBattleInMinutes;
|
|
UINT32 uiTimeOfLastUpdate;
|
|
|
|
INT16 iLastBattleSectorID;
|
|
INT8 bLastBattleSectorZ;
|
|
|
|
INT8 bFiller1;
|
|
|
|
UINT32 uiAttackedSameSectorCounter;
|
|
|
|
INT8 bFiller[16];
|
|
|
|
} JA25_SECTOR_AI_MANAGER;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
INT16 iSectorID;
|
|
INT8 bSectorZ;
|
|
|
|
INT8 bBaseNumEnemies; // The base number of enemies that can present in the sector
|
|
INT8 bRandomNumEnemies; // The random amount of enemies that can be present
|
|
|
|
INT8 bProbabilityOfAttacking; // The probability Increase of attacking every hour of time compressing
|
|
|
|
INT8 bMaxProbabilityForAttackingSector; // The max amount of probabilty the enemy will attack enemy
|
|
|
|
INT8 bCurrentProbability; // Gets updated every hour when there can be an attack, reset when attack occurs
|
|
|
|
BOOLEAN fPlayerControlled; // Set when the player controls the sector
|
|
|
|
UINT8 ubMinimumProbabiltyBeforeAttack;
|
|
|
|
BOOLEAN fPlayerHasLiberatedSectorBefore; //Set when the player has a victory in the sector, never gets cleared after that
|
|
|
|
BOOLEAN fAutoDirection; //Calculate direction enemy are coming in from
|
|
|
|
UINT8 ubInsertionDirection; // For custom maps, used to describe which direction enemies are from
|
|
|
|
UINT32 sInsertionGridNo; // For custom maps, the insertion gridno
|
|
|
|
BOOLEAN fCustomSector; // Ah, a flag so the AI doesn't need to lookup sector info
|
|
|
|
UINT8 ubLoadingScreenID; // For a custom map, which loading screen to use
|
|
|
|
BOOLEAN fEnemyEnrouteToAttack; // To help things so that the enemy wioll not continually send dudes
|
|
|
|
INT8 bFiller[21];
|
|
|
|
} JA25_SECTOR_AI;
|
|
|
|
#define CUSTOMSECTOR 1020
|
|
|
|
extern JA25_SECTOR_AI gJa25AiSectorStruct[CUSTOMSECTOR];
|
|
|
|
enum
|
|
{
|
|
JA25_H7,
|
|
JA25_H8,
|
|
JA25_H9,
|
|
JA25_I9,
|
|
JA25_H10,
|
|
JA25_I10, //5
|
|
JA25_I11,
|
|
JA25_J11,
|
|
JA25_I12,
|
|
JA25_J12,
|
|
JA25_I13, //10
|
|
JA25_J13,
|
|
JA25_I13_1,
|
|
JA25_J13_1,
|
|
JA25_J14_1,
|
|
JA25_K14_1, //15
|
|
JA25_K15,
|
|
JA25_K15_1,
|
|
JA25_K15_2,
|
|
JA25_L15_2,
|
|
JA25_L15_3,
|
|
|
|
NUM_CAMPAIGN_JA25_SECTORS
|
|
};
|
|
|
|
|
|
|
|
|
|
extern BOOLEAN gfEnemyShouldImmediatelySeekThePlayer;
|
|
//extern INT32 giNumJA25Sectors;
|
|
|
|
void SetJa25SectorOwnedStatus( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, BOOLEAN fPlayerOwned );
|
|
INT8 GetTheFurthestSectorPlayerOwns();
|
|
void Ja25_UpdateTimeOfEndOfLastBattle( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
|
BOOLEAN Ja25_AreEnemiesAbleToAttackSector( INT16 iSectorID, INT8 bSectorZ );
|
|
BOOLEAN InitJa25SectorAi();
|
|
INT16 GetJA25SectorID( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
|
void JA25_HandleUpdateOfStrategicAi();
|
|
|
|
void SetEnemiesToFindThePlayerMercs();
|
|
|
|
void HandleSayingDontStayToLongWarningInSectorH8();
|
|
|
|
#ifdef JA2BETAVERSION
|
|
BOOLEAN InitJa25StrategicAiDecisions( BOOLEAN fLoadedGame );
|
|
#endif
|
|
|
|
void HandleEnricosUnderstandingEmail();
|
|
|
|
void HandleRemovingEnemySoldierInitLinksIfPlayerEverWonInSector();
|
|
|
|
// -1 if enemy isnt supposed to seek player, otherwise SAI sectgor ID get returned
|
|
INT8 GetSectorEnemyIsToImmediatelySeekEnemyIn();
|
|
|
|
void AddJA25AIDataToSector( JA25_SECTOR_AI *pSectorAIInfo );
|
|
extern void SetNumberOfJa25BloodCatsInSector( INT32 iSectorID, INT8 bNumBloodCats, INT8 bBloodCatPlacements );
|
|
|
|
#endif
|
|
|
|
#endif
|