Add BOXER() & ISVIP() macros

This commit is contained in:
Asdow
2024-02-18 12:03:43 +02:00
parent 5fe730b075
commit ab2c5fc10d
10 changed files with 48 additions and 47 deletions
+2 -1
View File
@@ -18,6 +18,7 @@
#include "opplist.h"
#include "Interface.h"
#include "Tactical Save.h"
#include <Soldier macros.h>
#define AI_LIST_SIZE TOTAL_SOLDIERS
@@ -180,7 +181,7 @@ BOOLEAN InsertIntoAIList( UINT8 ubID, INT8 bPriority )
BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT8 * pubDoneCount, BOOLEAN fDoRandomChecks )
{
if ( (gTacticalStatus.bBoxingState == BOXING) && !(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) )
if ( (gTacticalStatus.bBoxingState == BOXING) && !BOXER(pSoldier) )
{
return( FALSE );
}
+5 -5
View File
@@ -418,7 +418,7 @@ UINT16 DetermineMovementMode( SOLDIERTYPE * pSoldier, INT8 bAction )
if (IS_MERC_BODY_TYPE(pSoldier) &&
pSoldier->aiData.bAlertStatus >= STATUS_YELLOW &&
!InWaterGasOrSmoke(pSoldier, pSoldier->sGridNo) &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) &&
!BOXER(pSoldier) &&
!TileIsOutOfBounds(sClosestThreat) &&
(pSoldier->bTeam == ENEMY_TEAM || pSoldier->bTeam == MILITIA_TEAM))
{
@@ -1474,7 +1474,7 @@ INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLev
if (sClosestOpponent == NOWHERE ||
iRange < iClosestRange ||
pClosestOpponent && !pClosestOpponent->IsZombie() && !(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) && pClosestOpponent->stats.bLife < OKLIFE && pOpponent->stats.bLife >= OKLIFE)
pClosestOpponent && !pClosestOpponent->IsZombie() && !BOXER(pSoldier) && pClosestOpponent->stats.bLife < OKLIFE && pOpponent->stats.bLife >= OKLIFE)
{
iClosestRange = iRange;
sClosestOpponent = sGridNo;
@@ -2670,7 +2670,7 @@ INT32 CalcManThreatValue( SOLDIERTYPE *pEnemy, INT32 sMyGrid, UINT8 ubReduceForC
}
// in boxing mode, let only a boxer be considered a threat.
if ( (gTacticalStatus.bBoxingState == BOXING) && !(pEnemy->flags.uiStatusFlags & SOLDIER_BOXER) )
if ( (gTacticalStatus.bBoxingState == BOXING) && !BOXER(pEnemy) )
{
iThreatValue = -999;
return( iThreatValue );
@@ -4803,7 +4803,7 @@ BOOLEAN ValidOpponent(SOLDIERTYPE* pSoldier, SOLDIERTYPE* pOpponent)
pSoldier->bSide == pOpponent->bSide ||
pSoldier->aiData.bAttitude == ATTACKSLAYONLY && pOpponent->ubProfile != SLAY ||
(pOpponent->ubWhatKindOfMercAmI == MERC_TYPE__VEHICLE && GetNumberInVehicle(pOpponent->bVehicleID) == 0) ||
gTacticalStatus.bBoxingState == BOXING && (pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) && !(pOpponent->flags.uiStatusFlags & SOLDIER_BOXER) ||
gTacticalStatus.bBoxingState == BOXING && BOXER(pSoldier) && !BOXER(pOpponent) ||
pOpponent->ubBodyType == CROW)
{
return FALSE;
@@ -4913,7 +4913,7 @@ BOOLEAN SoldierAI(SOLDIERTYPE *pSoldier)
if (!IS_MERC_BODY_TYPE(pSoldier) ||
pSoldier->aiData.bNeutral ||
fCivilian ||
pSoldier->flags.uiStatusFlags & SOLDIER_BOXER ||
BOXER(pSoldier) ||
ARMED_VEHICLE(pSoldier) ||
pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ||
AM_A_ROBOT(pSoldier) ||
+14 -17
View File
@@ -718,7 +718,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier)
if ( gTacticalStatus.bBoxingState != NOT_BOXING )
{
if (pSoldier->flags.uiStatusFlags & SOLDIER_BOXER)
if (BOXER(pSoldier))
{
if ( gTacticalStatus.bBoxingState == PRE_BOXING )
{
@@ -2707,7 +2707,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier)
!bInGas &&
pSoldier->CheckInitialAP() &&
!pSoldier->IsFlanking() &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) &&
!BOXER(pSoldier) &&
(CanNPCAttack(pSoldier) == TRUE))
{
BestThrow.ubPossible = FALSE; // by default, assume Throwing isn't possible
@@ -5195,7 +5195,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
}
INT8 bInWater, bInDeepWater, bInGas;
if ( pSoldier->flags.uiStatusFlags & SOLDIER_BOXER )
if (BOXER(pSoldier) )
{
if ( gTacticalStatus.bBoxingState == PRE_BOXING )
{
@@ -5304,7 +5304,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
{
bCanAttack = FALSE;
}
else if (pSoldier->flags.uiStatusFlags & SOLDIER_BOXER)
else if (BOXER(pSoldier))
{
bCanAttack = TRUE;
fTryPunching = TRUE;
@@ -5318,7 +5318,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
{
if (fCivilian)
{
if ( ( bCanAttack == NOSHOOT_NOWEAPON) && !(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) && pSoldier->ubBodyType != COW && pSoldier->ubBodyType != CRIPPLECIV && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
if ( ( bCanAttack == NOSHOOT_NOWEAPON) && !BOXER(pSoldier) && pSoldier->ubBodyType != COW && pSoldier->ubBodyType != CRIPPLECIV && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
{
// cower in fear!!
if ( pSoldier->flags.uiStatusFlags & SOLDIER_COWERING )
@@ -5806,7 +5806,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
if (BestStab.ubPossible)
{
if (!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER))
if (!BOXER(pSoldier))
{
// if we have not enough APs to deal at least two or three punches,
// reduce the attack value as one punch ain't much
@@ -5903,7 +5903,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
// cautious boxer approach, reserve AP for two attacks (only if not attacking from the back)
if (BestStab.ubPossible &&
(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) &&
BOXER(pSoldier) &&
SpacesAway(pSoldier->sGridNo, BestStab.sTarget) > 2 &&
BestStab.ubOpponent != NOBODY &&
MercPtrs[BestStab.ubOpponent] &&
@@ -5920,7 +5920,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
// try to avoid frontal attack
if (BestStab.ubPossible &&
(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) &&
BOXER(pSoldier) &&
SpacesAway(pSoldier->sGridNo, BestStab.sTarget) > 1 &&
BestStab.ubOpponent != NOBODY &&
MercPtrs[BestStab.ubOpponent] &&
@@ -6285,8 +6285,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
{
DebugAI(AI_MSG_TOPIC, pSoldier, String("[Allow taking cover]"));
// okay, really got to wonder about this... could taking cover be an option?
if (ubCanMove && pSoldier->aiData.bOrders != STATIONARY && !gfHiddenInterrupt &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) )
if (ubCanMove && pSoldier->aiData.bOrders != STATIONARY && !gfHiddenInterrupt && !BOXER(pSoldier) )
{
// make militia a bit more cautious
// 3 (UINT16) CONVERSIONS HERE TO AVOID ERRORS. GOTTHARD 7/15/08
@@ -6323,7 +6322,7 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
if ( (ubCanMove && !SkipCoverCheck && !gfHiddenInterrupt &&
((ubBestAttackAction == AI_ACTION_NONE) || pSoldier->aiData.bLastAttackHit) &&
(pSoldier->bTeam != gbPlayerNum || pSoldier->aiData.fAIFlags & AI_RTP_OPTION_CAN_SEEK_COVER) &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) )
!BOXER(pSoldier) )
|| fAllowCoverCheck )
{
DebugAI(AI_MSG_TOPIC, pSoldier, String("[Find cover]"));
@@ -7004,7 +7003,7 @@ L_NEWAIM:
//////////////////////////////////////////////////////////////////////
// BOXER CLOSE IN ON OPPONENT
//////////////////////////////////////////////////////////////////////
if (pSoldier->flags.uiStatusFlags & SOLDIER_BOXER )
if (BOXER(pSoldier))
{
DebugAI(AI_MSG_TOPIC, pSoldier, String("[Make boxer close if possible]"));
@@ -10071,8 +10070,7 @@ INT8 ArmedVehicleDecideActionBlack( SOLDIERTYPE *pSoldier )
(RangeChangeDesire( pSoldier ) >= 4) )
{
// okay, really got to wonder about this... could taking cover be an option?
if ( ubCanMove && pSoldier->aiData.bOrders != STATIONARY && !gfHiddenInterrupt &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) )
if ( ubCanMove && pSoldier->aiData.bOrders != STATIONARY && !gfHiddenInterrupt && !BOXER(pSoldier) )
{
// make militia a bit more cautious
// 3 (UINT16) CONVERSIONS HERE TO AVOID ERRORS. GOTTHARD 7/15/08
@@ -10103,9 +10101,8 @@ INT8 ArmedVehicleDecideActionBlack( SOLDIERTYPE *pSoldier )
if ( (ubCanMove && !SkipCoverCheck && !gfHiddenInterrupt &&
((ubBestAttackAction == AI_ACTION_NONE) || pSoldier->aiData.bLastAttackHit) &&
(pSoldier->bTeam != gbPlayerNum || pSoldier->aiData.fAIFlags & AI_RTP_OPTION_CAN_SEEK_COVER) &&
!(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER))
|| fAllowCoverCheck )
(pSoldier->bTeam != gbPlayerNum || pSoldier->aiData.fAIFlags & AI_RTP_OPTION_CAN_SEEK_COVER) && !BOXER(pSoldier)) ||
fAllowCoverCheck )
{
sBestCover = FindBestNearbyCover( pSoldier, pSoldier->aiData.bAIMorale, &iCoverPercentBetter );
}