mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
-fixed new ammo types not coming out of enemy guns properly
-minor AI fixes -reduced minimum default status for bonus depreciation from 100 to 85 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@251 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -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
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user