HAM5.5b2 merged in!

Notes:
-There may still be bugs!! (In fact, I almost guarantee it -- there's
-Ammo box code added to HR's crate code
-Splitting a crate/box also automatically refills half empty magazines
-new pathing arrows for map screen not included
-code for scouts to know where enemies are going doesn't appear to work... but i'm not sure it was completed.
-lots of gobledy gook (chinese?) comments turned back to english
-also added Bob's popups
-other languages besides english still need to have there language.cpp files updated with array changes
-AI enhancements by Warmsteel (reloading, suppression, roaming, avoiding gas, and other fixes)

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5181 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
MaddMugsy
2012-04-10 23:45:46 +00:00
parent ab3412e5ed
commit c845f9f117
72 changed files with 10737 additions and 2362 deletions
+107 -41
View File
@@ -1726,31 +1726,20 @@ BOOLEAN InWaterGasOrSmoke( SOLDIERTYPE *pSoldier, INT32 sGridNo )
// smoke
if (gpWorldLevelData[sGridNo].ubExtFlags[ pSoldier->pathing.bLevel ] & MAPELEMENT_EXT_SMOKE)
{
return( TRUE );
return TRUE;
}
// tear/mustard gas
if((gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_TEARGAS|MAPELEMENT_EXT_MUSTARDGAS)) && !DoesSoldierWearGasMask(pSoldier))//dnl ch40 200909
return(TRUE);
if ( gpWorldLevelData[sGridNo].ubExtFlags[ pSoldier->pathing.bLevel ] & MAPELEMENT_EXT_BURNABLEGAS )
{
return( TRUE );
}
return(FALSE);
return InGas( pSoldier, sGridNo );
}
BOOLEAN InGasOrSmoke( SOLDIERTYPE *pSoldier, INT32 sGridNo )
{
// smoke/tear/mustard gas
if((gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_SMOKE|MAPELEMENT_EXT_TEARGAS|MAPELEMENT_EXT_MUSTARDGAS)) && !DoesSoldierWearGasMask(pSoldier))//dnl ch40 230909
return(TRUE);
if ( gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & MAPELEMENT_EXT_BURNABLEGAS )
{
return( TRUE );
}
return(FALSE);
// smoke
if (gpWorldLevelData[sGridNo].ubExtFlags[ pSoldier->pathing.bLevel ] & MAPELEMENT_EXT_SMOKE)
return TRUE;
return InGas(pSoldier,sGridNo);
}
@@ -1761,25 +1750,28 @@ INT16 InWaterOrGas(SOLDIERTYPE *pSoldier, INT32 sGridNo)
return(TRUE);
}
// tear/mustard gas
if((gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_TEARGAS|MAPELEMENT_EXT_MUSTARDGAS)) && !DoesSoldierWearGasMask(pSoldier))//dnl ch40 200909
return(TRUE);
if ( gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & MAPELEMENT_EXT_BURNABLEGAS )
{
return( TRUE );
}
return(FALSE);
return (INT16)InGas( pSoldier, sGridNo );
}
BOOLEAN InGas( SOLDIERTYPE *pSoldier, INT32 sGridNo )
{
// tear/mustard gas
if((gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_TEARGAS|MAPELEMENT_EXT_MUSTARDGAS)) && !DoesSoldierWearGasMask(pSoldier))//dnl ch40 200909
return(TRUE);
if ( gpWorldLevelData[sGridNo].ubExtFlags[pSoldier->pathing.bLevel] & MAPELEMENT_EXT_BURNABLEGAS )
{
return( TRUE );
{//WarmSteel - One square away from gas is still considered in gas, because it could expand any moment.
//Note: this only works for gas that expands with one tile, but hey it's better than nothing!
int iNeighbourGridNo;
for(int iDir = 0; iDir < NUM_WORLD_DIRECTIONS; ++iDir)
{
iNeighbourGridNo = sGridNo + DirectionInc(iDir);
if(!TileIsOutOfBounds(iNeighbourGridNo))
{
// tear/mustard gas
if((gpWorldLevelData[iNeighbourGridNo].ubExtFlags[pSoldier->pathing.bLevel] & (MAPELEMENT_EXT_TEARGAS|MAPELEMENT_EXT_MUSTARDGAS)) && !DoesSoldierWearGasMask(pSoldier))//dnl ch40 200909
{
return(TRUE);
}
if ( gpWorldLevelData[iNeighbourGridNo].ubExtFlags[pSoldier->pathing.bLevel] & MAPELEMENT_EXT_BURNABLEGAS )
{
return( TRUE );
}
}
}
return(FALSE);
@@ -2249,6 +2241,7 @@ INT32 CalcManThreatValue( SOLDIERTYPE *pEnemy, INT32 sMyGrid, UINT8 ubReduceForC
INT16 RoamingRange(SOLDIERTYPE *pSoldier, INT32 * pusFromGridNo)
{
BOOL OppPosKnown = FALSE;
if ( CREATURE_OR_BLOODCAT( pSoldier ) )
{
if ( pSoldier->aiData.bAlertStatus == STATUS_BLACK )
@@ -2269,6 +2262,19 @@ INT16 RoamingRange(SOLDIERTYPE *pSoldier, INT32 * pusFromGridNo)
*pusFromGridNo = pSoldier->aiData.sPatrolGrid[0];
}
//Do we know about any opponent?
for(UINT16 oppID = 0; oppID < MAX_NUM_SOLDIERS; oppID++)
{
if ( pSoldier->aiData.bOppList[oppID] != NOT_HEARD_OR_SEEN && gbPublicOpplist[pSoldier->bTeam][oppID] != NOT_HEARD_OR_SEEN)
{
OppPosKnown = TRUE;
break;
}
}
//TODO: Externalize if people want?
BOOL fLessRestrictiveRoaming = TRUE;
switch (pSoldier->aiData.bOrders)
{
// JA2 GOLD: give non-NPCs a 5 tile roam range for cover in combat when being shot at
@@ -2281,16 +2287,68 @@ INT16 RoamingRange(SOLDIERTYPE *pSoldier, INT32 * pusFromGridNo)
return( 5 );
}
case ONGUARD: return( 5 );
case CLOSEPATROL: return( 15 );
case RNDPTPATROL:
case POINTPATROL: return(10 ); // from nextPatrolGrid, not whereIWas
case FARPATROL: if (pSoldier->aiData.bAlertStatus < STATUS_RED)
case CLOSEPATROL: if (pSoldier->aiData.bAlertStatus < STATUS_RED)
{
return( 25 );
return( 5 );
}
else
{
return( 50 );
if(!OppPosKnown || !fLessRestrictiveRoaming)
{
return( 15 );
}
else
{
return( 30 );
//return( MAX_ROAMING_RANGE );
}
}
case POINTPATROL: if (pSoldier->aiData.bAlertStatus < STATUS_RED)
{
return( 10 );
}
else
{
if(!OppPosKnown || !fLessRestrictiveRoaming)
{
return( 20 );
}
else
{
return( 40 );
//return( MAX_ROAMING_RANGE );
}
} // from nextPatrolGrid, not whereIWas
case RNDPTPATROL: if (pSoldier->aiData.bAlertStatus < STATUS_RED)
{
return( 10 );
}
else
{
if(!OppPosKnown || !fLessRestrictiveRoaming)
{
return( 20 );
}
else
{
//return( 40 );
return( MAX_ROAMING_RANGE );
}
}// from nextPatrolGrid, not whereIWas
case FARPATROL: if (pSoldier->aiData.bAlertStatus < STATUS_RED)
{
return( 15 );
}
else
{
if(!OppPosKnown || !fLessRestrictiveRoaming)
{
return( 30 );
}
else
{
return( MAX_ROAMING_RANGE );
}
}
case ONCALL: if (pSoldier->aiData.bAlertStatus < STATUS_RED)
{
@@ -2298,7 +2356,15 @@ INT16 RoamingRange(SOLDIERTYPE *pSoldier, INT32 * pusFromGridNo)
}
else
{
return( 30 );
if(!OppPosKnown || !fLessRestrictiveRoaming)
{
return( 30 );
}
else
{
//return(50);
return( MAX_ROAMING_RANGE );
}
}
case SEEKENEMY: *pusFromGridNo = pSoldier->sGridNo; // from current position!
return(MAX_ROAMING_RANGE);