mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Brief: //dnl ch71
- Fix more problems of deducting APs when try to shoot from different stances but need turn to your target. Details: - Problems raised after introduction of conditional APs charge in case that you need to rise gun and turn, so charging only higher of this to two value if not prone. - Another problem is alternative fire mode from hip which is currently allowed only in stand so was missing such condition as well for change scope mode if going down. - As run into problems from above for our merc, need adopt it to CalcBestShot for AI too. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6414 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -3591,6 +3591,12 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance )
|
|||||||
pSoldier->pathing.sFinalDestination = pSoldier->sGridNo;
|
pSoldier->pathing.sFinalDestination = pSoldier->sGridNo;
|
||||||
pSoldier->bGoodContPath = FALSE;
|
pSoldier->bGoodContPath = FALSE;
|
||||||
|
|
||||||
|
//dnl ch71 180913 when we go to crouch or prone for now there is no alternative fire mode option
|
||||||
|
if(pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && bNewStance != ANIM_STAND)
|
||||||
|
{
|
||||||
|
ChangeScopeMode(pSoldier, 0);
|
||||||
|
ManLooksForOtherTeams(pSoldier);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|||||||
+1
-1
@@ -3242,7 +3242,7 @@ INT16 GetAPsToReadyWeapon( SOLDIERTYPE *pSoldier, UINT16 usAnimState )
|
|||||||
if ( gGameExternalOptions.ubAllowAlternativeWeaponHolding )
|
if ( gGameExternalOptions.ubAllowAlternativeWeaponHolding )
|
||||||
{
|
{
|
||||||
// If we are told to go to the alt weapon holding mode
|
// If we are told to go to the alt weapon holding mode
|
||||||
if ( gAnimControl[ usAnimState ].uiFlags & ( ANIM_ALT_WEAPON_HOLDING ) )
|
if ( gAnimControl[ usAnimState ].uiFlags & ( ANIM_ALT_WEAPON_HOLDING ) || (pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && usAnimState == INVALID_ANIMATION) )//dnl ch71 180913
|
||||||
{
|
{
|
||||||
if ( Item[ usItem ].twohanded )
|
if ( Item[ usItem ].twohanded )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5349,7 +5349,27 @@ BOOLEAN SOLDIERTYPE::InternalSoldierReadyWeapon( UINT8 sFacingDir, BOOLEAN fEndR
|
|||||||
|
|
||||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("InternalSoldierReadyWeapon: PickingAnimation"));
|
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("InternalSoldierReadyWeapon: PickingAnimation"));
|
||||||
usAnimState = PickSoldierReadyAnimation( this, fEndReady, fRaiseToHipOnly );
|
usAnimState = PickSoldierReadyAnimation( this, fEndReady, fRaiseToHipOnly );
|
||||||
|
if(!fEndReady && this->ubDirection != sFacingDir)//dnl ch71 170913
|
||||||
|
{
|
||||||
|
UINT16 usTrueAnimState = this->usAnimState;
|
||||||
|
switch(gAnimControl[this->usAnimState].ubEndHeight)
|
||||||
|
{
|
||||||
|
case ANIM_STAND:
|
||||||
|
this->usAnimState = STANDING;
|
||||||
|
if(this->flags.fDontChargeTurningAPs && !this->flags.fDontChargeReadyAPs && usAnimState == INVALID_ANIMATION)
|
||||||
|
usAnimState = PickSoldierReadyAnimation(this, FALSE, fRaiseToHipOnly);// someone introduced new cost system for turning and this means we must force gun raise
|
||||||
|
break;
|
||||||
|
case ANIM_CROUCH:
|
||||||
|
this->usAnimState = CROUCHING;
|
||||||
|
if(this->flags.fDontChargeTurningAPs && !this->flags.fDontChargeReadyAPs && usAnimState == INVALID_ANIMATION)
|
||||||
|
usAnimState = PickSoldierReadyAnimation(this, FALSE, FALSE);// force gun raise for proper APs deduction
|
||||||
|
break;
|
||||||
|
case ANIM_PRONE:
|
||||||
|
usAnimState = INVALID_ANIMATION;// we are turning in prone so raise gun will be done after turning
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
this->usAnimState = usTrueAnimState;
|
||||||
|
}
|
||||||
if ( usAnimState != INVALID_ANIMATION )
|
if ( usAnimState != INVALID_ANIMATION )
|
||||||
{
|
{
|
||||||
if(is_networked)
|
if(is_networked)
|
||||||
@@ -7827,6 +7847,20 @@ void SOLDIERTYPE::TurnSoldier( void )
|
|||||||
// Else check if we are trying to shoot and once was prone, but am now crouched because we needed to turn...
|
// Else check if we are trying to shoot and once was prone, but am now crouched because we needed to turn...
|
||||||
else if ( this->flags.bTurningFromPronePosition )
|
else if ( this->flags.bTurningFromPronePosition )
|
||||||
{
|
{
|
||||||
|
//dnl ch71 170913
|
||||||
|
if(IsValidStance(this, ANIM_PRONE))
|
||||||
|
{
|
||||||
|
UINT16 usTrueAnimState = this->usAnimState;
|
||||||
|
this->usAnimState = PRONE;
|
||||||
|
this->usPendingAnimation = PickSoldierReadyAnimation(this, FALSE, FALSE);
|
||||||
|
this->usAnimState = usTrueAnimState;
|
||||||
|
SendChangeSoldierStanceEvent(this, ANIM_PRONE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this->EVENT_InitNewSoldierAnim(PickSoldierReadyAnimation(this, FALSE, FALSE), 0, FALSE);
|
||||||
|
this->flags.bTurningFromPronePosition = TURNING_FROM_PRONE_OFF;
|
||||||
|
return;
|
||||||
|
/*
|
||||||
if ( IsValidStance( this, ANIM_PRONE ) )
|
if ( IsValidStance( this, ANIM_PRONE ) )
|
||||||
{
|
{
|
||||||
SendChangeSoldierStanceEvent( this, ANIM_PRONE );
|
SendChangeSoldierStanceEvent( this, ANIM_PRONE );
|
||||||
@@ -7838,6 +7872,8 @@ void SOLDIERTYPE::TurnSoldier( void )
|
|||||||
}
|
}
|
||||||
this->flags.fTurningToShoot = FALSE;
|
this->flags.fTurningToShoot = FALSE;
|
||||||
this->flags.bTurningFromPronePosition = TURNING_FROM_PRONE_OFF;
|
this->flags.bTurningFromPronePosition = TURNING_FROM_PRONE_OFF;
|
||||||
|
//}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-2
@@ -449,8 +449,17 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN shootUns
|
|||||||
// consider alternate holding mode and different scopes
|
// consider alternate holding mode and different scopes
|
||||||
for(pSoldier->bScopeMode=(gGameExternalOptions.ubAllowAlternativeWeaponHolding?USE_ALT_WEAPON_HOLD:USE_BEST_SCOPE); pSoldier->bScopeMode<=(gGameExternalOptions.fScopeModes?NUM_SCOPE_MODES-1:USE_BEST_SCOPE); pSoldier->bScopeMode++)
|
for(pSoldier->bScopeMode=(gGameExternalOptions.ubAllowAlternativeWeaponHolding?USE_ALT_WEAPON_HOLD:USE_BEST_SCOPE); pSoldier->bScopeMode<=(gGameExternalOptions.fScopeModes?NUM_SCOPE_MODES-1:USE_BEST_SCOPE); pSoldier->bScopeMode++)
|
||||||
{
|
{
|
||||||
if(pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && (Item[pSoldier->usAttackingWeapon].usItemClass & IC_THROWING_KNIFE))
|
//dnl ch71 180913 throwing knives cannot be use in fire from hip, also SANDRO said: if the gun is flagged as HeavyGun, then we can only fire it from hip, thus no scopes to use at all, not even iron sights
|
||||||
continue;
|
if(pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD)
|
||||||
|
{
|
||||||
|
if(Item[pSoldier->usAttackingWeapon].usItemClass & IC_THROWING_KNIFE)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(Weapon[pSoldier->usAttackingWeapon].HeavyGun)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD || (pSoldier->bScopeMode >= USE_BEST_SCOPE && ObjList[pSoldier->bScopeMode] != NULL))
|
if(pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD || (pSoldier->bScopeMode >= USE_BEST_SCOPE && ObjList[pSoldier->bScopeMode] != NULL))
|
||||||
{
|
{
|
||||||
usTrueState = pSoldier->usAnimState;// because is used in CalculateRaiseGunCost, CalcAimingLevelsAvailableWithAP, CalculateTurningCost
|
usTrueState = pSoldier->usAnimState;// because is used in CalculateRaiseGunCost, CalcAimingLevelsAvailableWithAP, CalculateTurningCost
|
||||||
@@ -467,6 +476,13 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN shootUns
|
|||||||
GetAPChargeForShootOrStabWRTGunRaises(pSoldier, pOpponent->sGridNo, TRUE, &fAddingTurningCost, &fAddingRaiseGunCost, 0);
|
GetAPChargeForShootOrStabWRTGunRaises(pSoldier, pOpponent->sGridNo, TRUE, &fAddingTurningCost, &fAddingRaiseGunCost, 0);
|
||||||
usTurningCost = CalculateTurningCost(pSoldier, pSoldier->usAttackingWeapon, fAddingTurningCost);
|
usTurningCost = CalculateTurningCost(pSoldier, pSoldier->usAttackingWeapon, fAddingTurningCost);
|
||||||
usRaiseGunCost = CalculateRaiseGunCost(pSoldier, fAddingRaiseGunCost, pOpponent->sGridNo, 0);
|
usRaiseGunCost = CalculateRaiseGunCost(pSoldier, fAddingRaiseGunCost, pOpponent->sGridNo, 0);
|
||||||
|
if(fAddingTurningCost && fAddingRaiseGunCost)//dnl ch71 180913
|
||||||
|
{
|
||||||
|
if(usRaiseGunCost > usTurningCost)
|
||||||
|
usTurningCost = 0;
|
||||||
|
else
|
||||||
|
usRaiseGunCost = 0;
|
||||||
|
}
|
||||||
ubRawAPCost = MinAPsToShootOrStab(pSoldier, pOpponent->sGridNo, 0, FALSE, 2);
|
ubRawAPCost = MinAPsToShootOrStab(pSoldier, pOpponent->sGridNo, 0, FALSE, 2);
|
||||||
ubMinAPcost = ubRawAPCost + usTurningCost + sStanceAPcost + usRaiseGunCost;
|
ubMinAPcost = ubRawAPCost + usTurningCost + sStanceAPcost + usRaiseGunCost;
|
||||||
if(pSoldier->bActionPoints-ubMinAPcost >= 0)
|
if(pSoldier->bActionPoints-ubMinAPcost >= 0)
|
||||||
@@ -516,6 +532,13 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN shootUns
|
|||||||
usTurningCost = CalculateTurningCost(pSoldier, pSoldier->usAttackingWeapon, fAddingTurningCost);
|
usTurningCost = CalculateTurningCost(pSoldier, pSoldier->usAttackingWeapon, fAddingTurningCost);
|
||||||
}
|
}
|
||||||
usRaiseGunCost = CalculateRaiseGunCost(pSoldier, fAddingRaiseGunCost, pOpponent->sGridNo, 0);
|
usRaiseGunCost = CalculateRaiseGunCost(pSoldier, fAddingRaiseGunCost, pOpponent->sGridNo, 0);
|
||||||
|
if(fAddingTurningCost && fAddingRaiseGunCost)//dnl ch71 180913
|
||||||
|
{
|
||||||
|
if(usRaiseGunCost > usTurningCost)
|
||||||
|
usTurningCost = 0;
|
||||||
|
else
|
||||||
|
usRaiseGunCost = 0;
|
||||||
|
}
|
||||||
ubRawAPCost = MinAPsToShootOrStab(pSoldier, pOpponent->sGridNo, 0, FALSE, 2);
|
ubRawAPCost = MinAPsToShootOrStab(pSoldier, pOpponent->sGridNo, 0, FALSE, 2);
|
||||||
ubMinAPcost = ubRawAPCost + usTurningCost + sStanceAPcost + usRaiseGunCost;
|
ubMinAPcost = ubRawAPCost + usTurningCost + sStanceAPcost + usRaiseGunCost;
|
||||||
if(pSoldier->bActionPoints-ubMinAPcost >= 0)
|
if(pSoldier->bActionPoints-ubMinAPcost >= 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user