From 1b9cb1f75e8b22b3dc53612c1aff3b85576636da Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 19 Jan 2026 22:58:17 +0200 Subject: [PATCH] Add functions to check if soldier is in specific gas --- TacticalAI/AIInternals.h | 3 +++ TacticalAI/AIUtils.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/TacticalAI/AIInternals.h b/TacticalAI/AIInternals.h index 2e6d35ead..b0edaabbd 100644 --- a/TacticalAI/AIInternals.h +++ b/TacticalAI/AIInternals.h @@ -242,6 +242,9 @@ INT32 GoAsFarAsPossibleTowards(SOLDIERTYPE *pSoldier, INT32 sDesGrid, INT8 bActi ActionType HeadForTheStairCase( SOLDIERTYPE * pSoldier ); BOOLEAN InSmoke(INT32 sGridNo, INT8 bLevel); +BOOLEAN InSmoke(SOLDIERTYPE* pSoldier, INT32 sGridNo); +BOOLEAN InTearGas(SOLDIERTYPE* pSoldier, INT32 sGridNo); +BOOLEAN InMustardGas(SOLDIERTYPE* pSoldier, INT32 sGridNo); BOOLEAN InGas( SOLDIERTYPE *pSoldier, INT32 sGridNo ); BOOLEAN InGasOrSmoke( SOLDIERTYPE *pSoldier, INT32 sGridNo ); BOOLEAN InWaterGasOrSmoke( SOLDIERTYPE *pSoldier, INT32 sGridNo ); diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index 083ad3643..5ddef11b3 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -2240,6 +2240,31 @@ INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier ) return( sMinDist ); } +BOOLEAN InSmoke(SOLDIERTYPE* pSoldier, INT32 sGridNo) +{ + if ( gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_SMOKE | MAPELEMENT_EXT_SIGNAL_SMOKE | MAPELEMENT_EXT_DEBRIS_SMOKE | MAPELEMENT_EXT_FIRERETARDANT_SMOKE) ) + return TRUE; + + return FALSE; +} + +BOOLEAN InTearGas(SOLDIERTYPE* pSoldier, INT32 sGridNo) +{ + if ( (gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & MAPELEMENT_EXT_TEARGAS)) + return TRUE; + + return FALSE; +} + +BOOLEAN InMustardGas(SOLDIERTYPE* pSoldier, INT32 sGridNo) +{ + if ( gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_BURNABLEGAS | MAPELEMENT_EXT_CREATUREGAS | MAPELEMENT_EXT_MUSTARDGAS) ) + return TRUE; + + return FALSE; +} + + BOOLEAN InWaterGasOrSmoke( SOLDIERTYPE *pSoldier, INT32 sGridNo ) { if (WaterTooDeepForAttacks( sGridNo, pSoldier->pathing.bLevel ))