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