mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Create function for decision to wear a gasmask
This commit is contained in:
+27
-37
@@ -46,6 +46,7 @@ extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndRead
|
|||||||
extern void IncrementWatchedLoc(UINT8 ubID, INT32 sGridNo, INT8 bLevel);
|
extern void IncrementWatchedLoc(UINT8 ubID, INT32 sGridNo, INT8 bLevel);
|
||||||
void LogDecideInfo(SOLDIERTYPE *pSoldier);
|
void LogDecideInfo(SOLDIERTYPE *pSoldier);
|
||||||
void LogKnowledgeInfo(SOLDIERTYPE *pSoldier);
|
void LogKnowledgeInfo(SOLDIERTYPE *pSoldier);
|
||||||
|
INT8 DecideActionWearGasmask(SOLDIERTYPE* pSoldier);
|
||||||
|
|
||||||
// global status time counters to determine what takes the most time
|
// global status time counters to determine what takes the most time
|
||||||
|
|
||||||
@@ -2450,7 +2451,6 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier)
|
|||||||
INT32 sClosestDisturbance = NOWHERE, sCheckGridNo;
|
INT32 sClosestDisturbance = NOWHERE, sCheckGridNo;
|
||||||
INT32 sDistVisible;
|
INT32 sDistVisible;
|
||||||
UINT8 ubCanMove,ubOpponentDir;
|
UINT8 ubCanMove,ubOpponentDir;
|
||||||
INT8 bInWater, bInDeepWater, bInGas;
|
|
||||||
INT8 bSeekPts = 0, bHelpPts = 0, bHidePts = 0, bWatchPts = 0;
|
INT8 bSeekPts = 0, bHelpPts = 0, bHidePts = 0, bWatchPts = 0;
|
||||||
INT8 bHighestWatchLoc;
|
INT8 bHighestWatchLoc;
|
||||||
ATTACKTYPE BestThrow, BestShot;
|
ATTACKTYPE BestThrow, BestShot;
|
||||||
@@ -2577,29 +2577,13 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier)
|
|||||||
|
|
||||||
|
|
||||||
// determine if we happen to be in water (in which case we're in BIG trouble!)
|
// determine if we happen to be in water (in which case we're in BIG trouble!)
|
||||||
bInWater = Water( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
INT8 bInWater = Water( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
||||||
bInDeepWater = DeepWater( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
INT8 bInDeepWater = DeepWater( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
||||||
|
|
||||||
// check if standing in tear gas without a gas mask on
|
|
||||||
bInGas = InGasOrSmoke( pSoldier, pSoldier->sGridNo );
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// WHEN LEFT IN GAS, WEAR GAS MASK IF AVAILABLE AND NOT WORN
|
// WHEN LEFT IN GAS, WEAR GAS MASK IF AVAILABLE AND NOT WORN
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
INT8 bInGas = DecideActionWearGasmask(pSoldier);
|
||||||
if ( !bInGas && (gWorldSectorX == TIXA_SECTOR_X && gWorldSectorY == TIXA_SECTOR_Y) )
|
|
||||||
{
|
|
||||||
// only chance if we happen to be caught with our gas mask off
|
|
||||||
if ( PreRandom( 10 ) == 0 && WearGasMaskIfAvailable( pSoldier ) )
|
|
||||||
{
|
|
||||||
// reevaluate
|
|
||||||
bInGas = InGasOrSmoke( pSoldier, pSoldier->sGridNo );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Only put mask on in gas
|
|
||||||
if(bInGas && WearGasMaskIfAvailable(pSoldier))//dnl ch40 200909
|
|
||||||
bInGas = InGasOrSmoke(pSoldier, pSoldier->sGridNo);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// WHEN IN GAS, GO TO NEAREST REACHABLE SPOT OF UNGASSED LAND
|
// WHEN IN GAS, GO TO NEAREST REACHABLE SPOT OF UNGASSED LAND
|
||||||
@@ -4878,7 +4862,6 @@ INT8 DecideActionBlack(SOLDIERTYPE *pSoldier)
|
|||||||
INT32 sClosestDisturbance;
|
INT32 sClosestDisturbance;
|
||||||
INT16 ubMinAPCost;
|
INT16 ubMinAPCost;
|
||||||
UINT8 ubCanMove;
|
UINT8 ubCanMove;
|
||||||
INT8 bInWater,bInDeepWater,bInGas;
|
|
||||||
INT8 bDirection;
|
INT8 bDirection;
|
||||||
UINT8 ubBestAttackAction = AI_ACTION_NONE;
|
UINT8 ubBestAttackAction = AI_ACTION_NONE;
|
||||||
INT8 bCanAttack,bActionReturned;
|
INT8 bCanAttack,bActionReturned;
|
||||||
@@ -4998,6 +4981,7 @@ INT16 ubMinAPCost;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT8 bInWater, bInDeepWater, bInGas;
|
||||||
if ( pSoldier->flags.uiStatusFlags & SOLDIER_BOXER )
|
if ( pSoldier->flags.uiStatusFlags & SOLDIER_BOXER )
|
||||||
{
|
{
|
||||||
if ( gTacticalStatus.bBoxingState == PRE_BOXING )
|
if ( gTacticalStatus.bBoxingState == PRE_BOXING )
|
||||||
@@ -5027,28 +5011,13 @@ INT16 ubMinAPCost;
|
|||||||
bInWater = Water( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
bInWater = Water( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
||||||
bInDeepWater = WaterTooDeepForAttacks( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
bInDeepWater = WaterTooDeepForAttacks( pSoldier->sGridNo, pSoldier->pathing.bLevel );
|
||||||
|
|
||||||
// check if standing in tear gas without a gas mask on
|
|
||||||
bInGas = InGasOrSmoke( pSoldier, pSoldier->sGridNo );
|
|
||||||
|
|
||||||
// calculate our morale
|
// calculate our morale
|
||||||
pSoldier->aiData.bAIMorale = CalcMorale(pSoldier);
|
pSoldier->aiData.bAIMorale = CalcMorale(pSoldier);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// WHEN LEFT IN GAS, WEAR GAS MASK IF AVAILABLE AND NOT WORN
|
// WHEN LEFT IN GAS, WEAR GAS MASK IF AVAILABLE AND NOT WORN
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
bInGas = DecideActionWearGasmask(pSoldier);
|
||||||
if ( !bInGas && (gWorldSectorX == TIXA_SECTOR_X && gWorldSectorY == TIXA_SECTOR_Y) )
|
|
||||||
{
|
|
||||||
// only chance if we happen to be caught with our gas mask off
|
|
||||||
if ( PreRandom( 10 ) == 0 && WearGasMaskIfAvailable( pSoldier ) )
|
|
||||||
{
|
|
||||||
bInGas = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Only put mask on in gas
|
|
||||||
if(bInGas && WearGasMaskIfAvailable(pSoldier))//dnl ch40 200909
|
|
||||||
bInGas = InGasOrSmoke(pSoldier, pSoldier->sGridNo);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// IF GASSED, OR REALLY TIRED (ON THE VERGE OF COLLAPSING), TRY TO RUN AWAY
|
// IF GASSED, OR REALLY TIRED (ON THE VERGE OF COLLAPSING), TRY TO RUN AWAY
|
||||||
@@ -10392,3 +10361,24 @@ void LogKnowledgeInfo(SOLDIERTYPE *pSoldier)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT8 DecideActionWearGasmask(SOLDIERTYPE *pSoldier)
|
||||||
|
{
|
||||||
|
// check if standing in tear gas without a gas mask on
|
||||||
|
INT8 bInGas = InGasOrSmoke(pSoldier, pSoldier->sGridNo);
|
||||||
|
|
||||||
|
if (!bInGas && (gWorldSectorX == TIXA_SECTOR_X && gWorldSectorY == TIXA_SECTOR_Y))
|
||||||
|
{
|
||||||
|
// only chance if we happen to be caught with our gas mask off
|
||||||
|
if (PreRandom(10) == 0 && WearGasMaskIfAvailable(pSoldier))
|
||||||
|
{
|
||||||
|
bInGas = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Only put mask on in gas
|
||||||
|
if (bInGas && WearGasMaskIfAvailable(pSoldier)) { bInGas = InGasOrSmoke(pSoldier, pSoldier->sGridNo); }
|
||||||
|
|
||||||
|
return bInGas;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user