mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Fix FindBestNearbyCover() and delete global var (#156)
This commit is contained in:
@@ -174,7 +174,6 @@ extern THREATTYPE Threat[MAXMERCS];
|
||||
extern int ThreatPercent[10];
|
||||
extern UINT8 SkipCoverCheck;
|
||||
extern INT8 GameOption[MAXGAMEOPTIONS];
|
||||
extern UINT32 guiThreatCnt;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -322,4 +321,4 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U
|
||||
BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT8* puID, INT16 sRange);
|
||||
|
||||
// are there more allies than friends in adjacent sectors?
|
||||
BOOLEAN MoreFriendsThanEnemiesinNearbysectors(UINT8 ausTeam, INT16 aX, INT16 aY, INT8 aZ);
|
||||
BOOLEAN MoreFriendsThanEnemiesinNearbysectors(UINT8 ausTeam, INT16 aX, INT16 aY, INT8 aZ);
|
||||
|
||||
@@ -1430,7 +1430,6 @@ void ActionDone(SOLDIERTYPE *pSoldier)
|
||||
|
||||
UINT8 SkipCoverCheck = FALSE;
|
||||
THREATTYPE Threat[MAXMERCS];
|
||||
UINT32 guiThreatCnt = 0;
|
||||
|
||||
// threat percentage is based on the certainty of opponent knowledge:
|
||||
// opplist value: -4 -3 -2 -1 SEEN 1 2 3 4 5
|
||||
|
||||
+21
-19
@@ -5938,7 +5938,7 @@ INT32 RandomizeOpponentLocation(INT32 sSpot, SOLDIERTYPE *pOpponent, INT16 sMaxD
|
||||
}
|
||||
|
||||
// first call PrepareThreatlist to make threat list
|
||||
UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier)
|
||||
UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt)
|
||||
{
|
||||
CHECKF(pSoldier);
|
||||
|
||||
@@ -5948,7 +5948,7 @@ UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier)
|
||||
UINT8 ubClosestOpponentID = NOBODY;
|
||||
|
||||
// use global defined threat list
|
||||
for (uiLoop = 0; uiLoop < guiThreatCnt; uiLoop++)
|
||||
for (uiLoop = 0; uiLoop < uiThreatCnt; uiLoop++)
|
||||
{
|
||||
// if for some reason we have incorrect location
|
||||
if (TileIsOutOfBounds(Threat[uiLoop].sGridNo))
|
||||
@@ -5968,7 +5968,7 @@ UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier)
|
||||
}
|
||||
|
||||
// first call PrepareThreatlist to make threat list
|
||||
UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax)
|
||||
UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt, UINT8 ubMax)
|
||||
{
|
||||
CHECKF(pSoldier);
|
||||
|
||||
@@ -5978,7 +5978,7 @@ UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax)
|
||||
UINT8 ubClosestOpponentID = NOBODY;
|
||||
|
||||
// use global defined threat list
|
||||
for (uiLoop = 0; uiLoop < guiThreatCnt; uiLoop++)
|
||||
for (uiLoop = 0; uiLoop < uiThreatCnt; uiLoop++)
|
||||
{
|
||||
// if for some reason we have incorrect location
|
||||
if (TileIsOutOfBounds(Threat[uiLoop].sGridNo))
|
||||
@@ -6001,7 +6001,7 @@ UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax)
|
||||
return(ubClosestOpponentID);
|
||||
}
|
||||
|
||||
void PrepareThreatlist(SOLDIERTYPE *pSoldier)
|
||||
UINT32 PrepareThreatlist(SOLDIERTYPE *pSoldier)
|
||||
{
|
||||
SOLDIERTYPE *pOpponent;
|
||||
INT32 iThreatRange, iClosestThreatRange = 1500;
|
||||
@@ -6014,10 +6014,10 @@ void PrepareThreatlist(SOLDIERTYPE *pSoldier)
|
||||
INT32 iThreatCertainty;
|
||||
INT32 iMaxThreatRange = MAX_THREAT_RANGE + AI_PATHCOST_RADIUS;
|
||||
|
||||
guiThreatCnt = 0;
|
||||
UINT32 uiThreatCnt = 0;
|
||||
|
||||
if (!pSoldier)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
// look through all opponents for those we know of
|
||||
for (uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++)
|
||||
@@ -6065,35 +6065,37 @@ void PrepareThreatlist(SOLDIERTYPE *pSoldier)
|
||||
}
|
||||
|
||||
// remember this opponent as a current threat, but DON'T REDUCE FOR COVER!
|
||||
Threat[guiThreatCnt].iValue = CalcManThreatValue(pOpponent, pSoldier->sGridNo, FALSE, pSoldier);
|
||||
Threat[uiThreatCnt].iValue = CalcManThreatValue(pOpponent, pSoldier->sGridNo, FALSE, pSoldier);
|
||||
|
||||
// if the opponent is no threat at all for some reason
|
||||
if (Threat[guiThreatCnt].iValue == -999)
|
||||
if (Threat[uiThreatCnt].iValue == -999)
|
||||
{
|
||||
continue; // check next opponent
|
||||
}
|
||||
|
||||
Threat[guiThreatCnt].pOpponent = pOpponent;
|
||||
Threat[guiThreatCnt].sGridNo = sThreatLoc;
|
||||
Threat[guiThreatCnt].iCertainty = iThreatCertainty;
|
||||
Threat[guiThreatCnt].iOrigRange = iThreatRange;
|
||||
Threat[uiThreatCnt].pOpponent = pOpponent;
|
||||
Threat[uiThreatCnt].sGridNo = sThreatLoc;
|
||||
Threat[uiThreatCnt].iCertainty = iThreatCertainty;
|
||||
Threat[uiThreatCnt].iOrigRange = iThreatRange;
|
||||
|
||||
// calculate how many APs he will have at the start of the next turn
|
||||
Threat[guiThreatCnt].iAPs = pOpponent->CalcActionPoints();
|
||||
Threat[uiThreatCnt].iAPs = pOpponent->CalcActionPoints();
|
||||
|
||||
// sevenfm: more information
|
||||
Threat[guiThreatCnt].bLevel = bThreatLevel;
|
||||
Threat[guiThreatCnt].bKnowledge = bKnowledge;
|
||||
Threat[guiThreatCnt].bPersonalKnowledge = bPersonalKnowledge;
|
||||
Threat[guiThreatCnt].bPublicKnowledge = bPublicKnowledge;
|
||||
Threat[uiThreatCnt].bLevel = bThreatLevel;
|
||||
Threat[uiThreatCnt].bKnowledge = bKnowledge;
|
||||
Threat[uiThreatCnt].bPersonalKnowledge = bPersonalKnowledge;
|
||||
Threat[uiThreatCnt].bPublicKnowledge = bPublicKnowledge;
|
||||
|
||||
if (iThreatRange < iClosestThreatRange)
|
||||
{
|
||||
iClosestThreatRange = iThreatRange;
|
||||
}
|
||||
|
||||
guiThreatCnt++;
|
||||
uiThreatCnt++;
|
||||
}
|
||||
|
||||
return uiThreatCnt;
|
||||
}
|
||||
|
||||
UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDistance)
|
||||
|
||||
@@ -3755,6 +3755,7 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
|
||||
{
|
||||
INT16 ubMinAPcost;
|
||||
INT8 bGrenadeIn = NO_SLOT;
|
||||
UINT32 uiThreatCnt = 0;
|
||||
|
||||
// initialize
|
||||
pBestThrow->ubPossible = FALSE;
|
||||
@@ -3771,7 +3772,7 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
|
||||
bGrenadeIn = FindThrowableGrenade(pSoldier, EXPLOSV_SMOKE);
|
||||
|
||||
// prepare threat list for ClosestSeenThreatID(), ClosestKnownThreatID()
|
||||
PrepareThreatlist(pSoldier);
|
||||
uiThreatCnt = PrepareThreatlist(pSoldier);
|
||||
|
||||
if (bGrenadeIn != NO_SLOT)
|
||||
{
|
||||
@@ -3812,7 +3813,7 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
|
||||
|
||||
if (TileIsOutOfBounds(sTargetSpot))
|
||||
{
|
||||
ubClosestThreatID = ClosestSeenThreatID(pSoldier, SEEN_LAST_TURN);
|
||||
ubClosestThreatID = ClosestSeenThreatID(pSoldier, uiThreatCnt, SEEN_LAST_TURN);
|
||||
|
||||
if (ubClosestThreatID != NOBODY &&
|
||||
MercPtrs[ubClosestThreatID] &&
|
||||
@@ -3826,7 +3827,7 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
|
||||
|
||||
if (TileIsOutOfBounds(sTargetSpot))
|
||||
{
|
||||
ubClosestThreatID = ClosestKnownThreatID(pSoldier);
|
||||
ubClosestThreatID = ClosestKnownThreatID(pSoldier, uiThreatCnt);
|
||||
|
||||
if (ubClosestThreatID != NOBODY &&
|
||||
MercPtrs[ubClosestThreatID] &&
|
||||
|
||||
@@ -753,7 +753,7 @@ INT32 FindBestNearbyCover(SOLDIERTYPE *pSoldier, INT32 morale, INT32 *piPercentB
|
||||
iMyThreatValue = CalcManThreatValue(pSoldier, NOWHERE, FALSE, pSoldier);
|
||||
|
||||
// prepare threat list from known enemies
|
||||
PrepareThreatlist(pSoldier);
|
||||
uiThreatCnt = PrepareThreatlist(pSoldier);
|
||||
|
||||
// if no known opponents were found to threaten us, can't worry about cover
|
||||
if (!uiThreatCnt)
|
||||
|
||||
+3
-3
@@ -314,9 +314,9 @@ BOOLEAN AICheckFriendsNoContact( SOLDIERTYPE *pSoldier );
|
||||
BOOLEAN AICheckIsFlanking( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT8 CalcMoraleNew(SOLDIERTYPE *pSoldier);
|
||||
void PrepareThreatlist(SOLDIERTYPE *pSoldier);
|
||||
UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax = SEEN_CURRENTLY); // first call PrepareThreatlist to make threat list
|
||||
UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier); // first call PrepareThreatlist to make threat list
|
||||
UINT32 PrepareThreatlist(SOLDIERTYPE *pSoldier);
|
||||
UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt, UINT8 ubMax = SEEN_CURRENTLY); // first call PrepareThreatlist to make threat list
|
||||
UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt); // first call PrepareThreatlist to make threat list
|
||||
|
||||
BOOLEAN ProneSightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited);
|
||||
BOOLEAN SightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited);
|
||||
|
||||
Reference in New Issue
Block a user