diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 97055499..79018106 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -7645,7 +7645,8 @@ UINT16 MagazineClassIndexToItemType(UINT16 usMagIndex) // WANNE: Now ammo can be inserted anywhere in Items.xml (before only on index > 70 [FIRST_AMMO] (fix by Realist) //for (usLoop = FIRST_AMMO; usLoop < MAXITEMS; usLoop++) - for ( UINT16 usLoop = 0; usLoop < gMAXITEMS_READ; ++usLoop ) + UINT16 usLoop; + for (usLoop = 0; usLoop < gMAXITEMS_READ; ++usLoop ) { if (Item[usLoop].ubClassIndex == usMagIndex && Item[usLoop].usItemClass == IC_AMMO ) { diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 6f031b44..f0b09118 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -638,9 +638,10 @@ extern CLOTHES_STRUCT Clothes[CLOTHES_MAX]; // This macro should be used whenever we want to see if someone is neutral // IF WE ARE CONSIDERING ATTACKING THEM. Creatures & bloodcats will attack neutrals // but they can't attack empty vehicles!! +// the_bob: also, creatures won't attack crows, because it seems to confuse the AI and cause freezes #define CONSIDERED_NEUTRAL( me, them ) (\ ( them->aiData.bNeutral || them->usSoldierFlagMask & (SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER|SOLDIER_POW) || (them->flags.uiStatusFlags & SOLDIER_PC && them->stats.bLife < OKLIFE) ) \ - && ( me->bTeam != CREATURE_TEAM || (them->flags.uiStatusFlags & SOLDIER_VEHICLE) ) \ + && ( me->bTeam != CREATURE_TEAM || ( (them->flags.uiStatusFlags & SOLDIER_VEHICLE) || (them->ubBodyType == CROW) ) ) \ && !( me->flags.uiStatusFlags & SOLDIER_BOXER && them->flags.uiStatusFlags & SOLDIER_BOXER ) \ ) diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index 059ca7c4..d064b9ad 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -1570,6 +1570,10 @@ void CalcBestStab(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestStab, BOOLEAN fBladeAt if ( pOpponent->ubWhatKindOfMercAmI == MERC_TYPE__VEHICLE && GetNumberInVehicle( pOpponent->bVehicleID ) == 0 ) continue; + // the_bob: don't stab the bird! + if (pOpponent->ubBodyType == CROW) + continue; + // Special stuff for Carmen the bounty hunter if (pSoldier->aiData.bAttitude == ATTACKSLAYONLY && pOpponent->ubProfile != SLAY) continue; // next opponent diff --git a/TileEngine/Tile Surface.cpp b/TileEngine/Tile Surface.cpp index 7d77ba58..cac8e6cd 100644 --- a/TileEngine/Tile Surface.cpp +++ b/TileEngine/Tile Surface.cpp @@ -118,9 +118,9 @@ TILE_IMAGERY *LoadTileSurface( STR8 cFilename ) } strcat( cAdditionalPropertiesFilename, ADDITIONAL_TILE_PROPERTIES_EXTENSION ); // first in /Tilesets/XX/ - if (FileExists( cAdditionalPropertiesFilename )) + if (FileExists(cAdditionalPropertiesFilename)) { - DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); + DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", cAdditionalPropertiesFilename)); SGP_THROW_IFFALSE(ReadInAdditionalTileProperties(cAdditionalPropertiesFilename), cAdditionalPropertiesFilename); } else @@ -130,7 +130,7 @@ TILE_IMAGERY *LoadTileSurface( STR8 cFilename ) sprintf( cCommonAdditionalPropertiesFilename, "TILESETS\\ADDITIONALPROPERTIES%s", cEndOfName ); if (FileExists( cCommonAdditionalPropertiesFilename )) { - DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); + DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", cAdditionalPropertiesFilename)); SGP_THROW_IFFALSE(ReadInAdditionalTileProperties(cCommonAdditionalPropertiesFilename), cCommonAdditionalPropertiesFilename); } }