mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +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!
|
ubChanceStandardAmmo = 100 - (bWeaponClass * -9); // weapon class is negative!
|
||||||
usAmmoIndex = RandomMagazine( usGunIndex, ubChanceStandardAmmo );
|
usAmmoIndex = RandomMagazine( usGunIndex, ubChanceStandardAmmo );
|
||||||
pp->Inv[ i ].ubGunAmmoType = Magazine[Item[usAmmoIndex].ubClassIndex].ubAmmoType;
|
pp->Inv[ i ].ubGunAmmoType = Magazine[Item[usAmmoIndex].ubClassIndex].ubAmmoType;
|
||||||
|
pp->Inv[ i ].usGunAmmoItem = usAmmoIndex;
|
||||||
|
|
||||||
if ( Item[usGunIndex].fingerprintid )
|
if ( Item[usGunIndex].fingerprintid )
|
||||||
{
|
{
|
||||||
@@ -893,6 +894,7 @@ void ChooseWeaponForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bWeaponC
|
|||||||
|
|
||||||
usAmmoIndex = RandomMagazine( &pp->Inv[HANDPOS], ubChanceStandardAmmo );
|
usAmmoIndex = RandomMagazine( &pp->Inv[HANDPOS], ubChanceStandardAmmo );
|
||||||
pp->Inv[ HANDPOS ].ubGunAmmoType = Magazine[Item[usAmmoIndex].ubClassIndex].ubAmmoType;
|
pp->Inv[ HANDPOS ].ubGunAmmoType = Magazine[Item[usAmmoIndex].ubClassIndex].ubAmmoType;
|
||||||
|
pp->Inv[ HANDPOS ].usGunAmmoItem = usAmmoIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Ammo
|
//Ammo
|
||||||
|
|||||||
+1
-1
@@ -5863,7 +5863,7 @@ void DumpItemsList( void )
|
|||||||
const INT8 STANDARD_STATUS_CUTOFF = 85;
|
const INT8 STANDARD_STATUS_CUTOFF = 85;
|
||||||
|
|
||||||
// Scale bonus with item status
|
// 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 )
|
if ( bonus > 0 && status < statusCutoff && statusCutoff > 0 && statusCutoff <= 100 )
|
||||||
return ( ( status * 100 ) / statusCutoff * bonus ) / 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 MIN_FLANK_DIST_RED 10 * STRAIGHT_RATIO
|
||||||
#define MAX_FLANK_DIST_RED 40 * STRAIGHT_RATIO
|
#define MAX_FLANK_DIST_RED 40 * STRAIGHT_RATIO
|
||||||
|
|
||||||
extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady );
|
|
||||||
|
|
||||||
void DoneScheduleAction( SOLDIERTYPE * pSoldier )
|
void DoneScheduleAction( SOLDIERTYPE * pSoldier )
|
||||||
{
|
{
|
||||||
@@ -670,8 +669,6 @@ INT8 DecideActionNamedNPC( SOLDIERTYPE * pSoldier )
|
|||||||
INT8 DecideActionGreen(SOLDIERTYPE *pSoldier)
|
INT8 DecideActionGreen(SOLDIERTYPE *pSoldier)
|
||||||
{
|
{
|
||||||
DOUBLE iChance, iSneaky = 10;
|
DOUBLE iChance, iSneaky = 10;
|
||||||
INT16 sBestCover;
|
|
||||||
INT32 iCoverPercentBetter;
|
|
||||||
INT8 bInWater,bInGas;
|
INT8 bInWater,bInGas;
|
||||||
#ifdef DEBUGDECISIONS
|
#ifdef DEBUGDECISIONS
|
||||||
STR16 tempstr;
|
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) )
|
if ( (pSoldier->bOrders == SNIPER || InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel )) && pSoldier->bActionPoints >= MinPtsToMove(pSoldier) )
|
||||||
{
|
{
|
||||||
sBestCover = FindBestNearbyCover(pSoldier,pSoldier->bAIMorale,&iCoverPercentBetter);
|
pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier );
|
||||||
if( sBestCover != NOWHERE)
|
if ( pSoldier->usActionData != NOWHERE )
|
||||||
{
|
{
|
||||||
pSoldier->usActionData = sBestCover;
|
// move as if leaving water or gas
|
||||||
return(AI_ACTION_TAKE_COVER);
|
return( AI_ACTION_LEAVE_WATER_GAS );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1877,7 +1874,6 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier)
|
|||||||
|
|
||||||
INT8 DecideActionRed(SOLDIERTYPE *pSoldier, UINT8 ubUnconsciousOK)
|
INT8 DecideActionRed(SOLDIERTYPE *pSoldier, UINT8 ubUnconsciousOK)
|
||||||
{
|
{
|
||||||
INT32 iCoverPercentBetter;
|
|
||||||
INT8 bActionReturned;
|
INT8 bActionReturned;
|
||||||
INT32 iDummy;
|
INT32 iDummy;
|
||||||
INT16 iChance,sClosestOpponent,sClosestFriend;
|
INT16 iChance,sClosestOpponent,sClosestFriend;
|
||||||
@@ -1887,8 +1883,6 @@ INT32 iCoverPercentBetter;
|
|||||||
INT8 bSeekPts = 0, bHelpPts = 0, bHidePts = 0, bWatchPts = 0;
|
INT8 bSeekPts = 0, bHelpPts = 0, bHidePts = 0, bWatchPts = 0;
|
||||||
INT8 bHighestWatchLoc;
|
INT8 bHighestWatchLoc;
|
||||||
ATTACKTYPE BestThrow, BestShot;
|
ATTACKTYPE BestThrow, BestShot;
|
||||||
INT16 sBestCover = NOWHERE;
|
|
||||||
|
|
||||||
#ifdef AI_TIMING_TEST
|
#ifdef AI_TIMING_TEST
|
||||||
UINT32 uiStartTime, uiEndTime;
|
UINT32 uiStartTime, uiEndTime;
|
||||||
#endif
|
#endif
|
||||||
@@ -2052,12 +2046,8 @@ INT32 iCoverPercentBetter;
|
|||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// WHEN IN THE LIGHT, GET OUT OF THERE!
|
// WHEN IN THE LIGHT, GET OUT OF THERE!
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
if ( ubCanMove && InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel ) && pSoldier->bOrders != STATIONARY
|
if ( ubCanMove && InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel ) && pSoldier->bOrders != STATIONARY )
|
||||||
&& pSoldier->bActionPoints <= pSoldier->bInitialActionPoints / 2)// && pSoldier->bActionInProgress != AI_ACTION_MOVE_TO_CLIMB )
|
|
||||||
{
|
{
|
||||||
if( gfTurnBasedAI )
|
|
||||||
pSoldier->usActionData = FindBestNearbyCover(pSoldier,pSoldier->bAIMorale,&iCoverPercentBetter);
|
|
||||||
else
|
|
||||||
pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier );
|
pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier );
|
||||||
if ( pSoldier->usActionData != NOWHERE )
|
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);
|
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)
|
if (pSoldier->usActionData != NOWHERE)
|
||||||
{
|
{
|
||||||
#ifdef DEBUGDECISIONS
|
#ifdef DEBUGDECISIONS
|
||||||
|
|||||||
Reference in New Issue
Block a user