diff --git a/Tactical/Inventory Choosing.cpp b/Tactical/Inventory Choosing.cpp index 6f4d0a78..9b7412ed 100644 --- a/Tactical/Inventory Choosing.cpp +++ b/Tactical/Inventory Choosing.cpp @@ -625,6 +625,7 @@ void ChooseWeaponForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bWeaponC ubChanceStandardAmmo = 100 - (bWeaponClass * -9); // weapon class is negative! usAmmoIndex = RandomMagazine( usGunIndex, ubChanceStandardAmmo ); pp->Inv[ i ].ubGunAmmoType = Magazine[Item[usAmmoIndex].ubClassIndex].ubAmmoType; + pp->Inv[ i ].usGunAmmoItem = usAmmoIndex; if ( Item[usGunIndex].fingerprintid ) { @@ -893,6 +894,7 @@ void ChooseWeaponForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bWeaponC usAmmoIndex = RandomMagazine( &pp->Inv[HANDPOS], ubChanceStandardAmmo ); pp->Inv[ HANDPOS ].ubGunAmmoType = Magazine[Item[usAmmoIndex].ubClassIndex].ubAmmoType; + pp->Inv[ HANDPOS ].usGunAmmoItem = usAmmoIndex; } //Ammo diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index b9bfa4ab..50556cc9 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -5863,7 +5863,7 @@ void DumpItemsList( void ) const INT8 STANDARD_STATUS_CUTOFF = 85; // Scale bonus with item status -INT16 BonusReduce( INT16 bonus, INT8 status, INT8 statusCutoff = 100 ) +INT16 BonusReduce( INT16 bonus, INT8 status, INT8 statusCutoff = STANDARD_STATUS_CUTOFF ) { if ( bonus > 0 && status < statusCutoff && statusCutoff > 0 && statusCutoff <= 100 ) return ( ( status * 100 ) / statusCutoff * bonus ) / 100; diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index 888a7e08..1de59d9c 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -47,7 +47,6 @@ UINT32 guiRedSeekCounter = 0, guiRedHelpCounter = 0; guiRedHideCounter = 0; #define MIN_FLANK_DIST_RED 10 * STRAIGHT_RATIO #define MAX_FLANK_DIST_RED 40 * STRAIGHT_RATIO -extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady ); void DoneScheduleAction( SOLDIERTYPE * pSoldier ) { @@ -670,8 +669,6 @@ INT8 DecideActionNamedNPC( SOLDIERTYPE * pSoldier ) INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) { DOUBLE iChance, iSneaky = 10; - INT16 sBestCover; - INT32 iCoverPercentBetter; INT8 bInWater,bInGas; #ifdef DEBUGDECISIONS STR16 tempstr; @@ -990,11 +987,11 @@ BOOLEAN fCivilian = (PTR_CIVILIAN && (pSoldier->ubCivilianGroup == NON_CIV_GROUP if ( (pSoldier->bOrders == SNIPER || InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel )) && pSoldier->bActionPoints >= MinPtsToMove(pSoldier) ) { - sBestCover = FindBestNearbyCover(pSoldier,pSoldier->bAIMorale,&iCoverPercentBetter); - if( sBestCover != NOWHERE) + pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier ); + if ( pSoldier->usActionData != NOWHERE ) { - pSoldier->usActionData = sBestCover; - return(AI_ACTION_TAKE_COVER); + // move as if leaving water or gas + return( AI_ACTION_LEAVE_WATER_GAS ); } } @@ -1877,7 +1874,6 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) INT8 DecideActionRed(SOLDIERTYPE *pSoldier, UINT8 ubUnconsciousOK) { -INT32 iCoverPercentBetter; INT8 bActionReturned; INT32 iDummy; INT16 iChance,sClosestOpponent,sClosestFriend; @@ -1887,8 +1883,6 @@ INT32 iCoverPercentBetter; INT8 bSeekPts = 0, bHelpPts = 0, bHidePts = 0, bWatchPts = 0; INT8 bHighestWatchLoc; ATTACKTYPE BestThrow, BestShot; - INT16 sBestCover = NOWHERE; - #ifdef AI_TIMING_TEST UINT32 uiStartTime, uiEndTime; #endif @@ -2052,12 +2046,8 @@ INT32 iCoverPercentBetter; //////////////////////////////////////////////////////////////////////////// // WHEN IN THE LIGHT, GET OUT OF THERE! //////////////////////////////////////////////////////////////////////////// - if ( ubCanMove && InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel ) && pSoldier->bOrders != STATIONARY - && pSoldier->bActionPoints <= pSoldier->bInitialActionPoints / 2)// && pSoldier->bActionInProgress != AI_ACTION_MOVE_TO_CLIMB ) + if ( ubCanMove && InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel ) && pSoldier->bOrders != STATIONARY ) { - if( gfTurnBasedAI ) - pSoldier->usActionData = FindBestNearbyCover(pSoldier,pSoldier->bAIMorale,&iCoverPercentBetter); - else pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier ); if ( pSoldier->usActionData != NOWHERE ) { @@ -2930,12 +2920,6 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"decideactionred: radio red alert?"); ////////////////////////////////////////////////////////////////////// pSoldier->usActionData = InternalGoAsFarAsPossibleTowards(pSoldier,sClosestFriend,AP_CROUCH, AI_ACTION_SEEK_OPPONENT,0); - if ( gfTurnBasedAI && pSoldier->usActionData != NOWHERE ) - { - pSoldier->usActionData = FindBestCoverNearTheGridNo( pSoldier, pSoldier->usActionData, 5 ); - pSoldier->usActionData = GoAsFarAsPossibleTowards(pSoldier,pSoldier->usActionData,AI_ACTION_SEEK_OPPONENT); - } - if (pSoldier->usActionData != NOWHERE) { #ifdef DEBUGDECISIONS