- update "improved auto fast forward" feature

- disable radio animation for invisible soldiers and soldiers in water

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8603 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2018-08-26 01:24:06 +00:00
parent 3ea52c8e45
commit 5d04583e13
2 changed files with 57 additions and 27 deletions
+38 -25
View File
@@ -154,7 +154,7 @@ class SOLDIERTYPE;
extern void HandleBestSightingPositionInRealtime();
void UpdateFastForwardMode( SOLDIERTYPE* pSoldier ); // sevenfm: to call in HandleAtNewGridNo
void UpdateFastForwardMode(SOLDIERTYPE* pSoldier, INT8 bAction); // sevenfm: to call in HandleAtNewGridNo
extern UINT8 gubAICounter;
@@ -2808,7 +2808,7 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving )
}
// sevenfm: additional check for auto fast forwarding
UpdateFastForwardMode( pSoldier );
UpdateFastForwardMode(pSoldier, AI_ACTION_NONE);
// ATE: Put some stuff in here to not handle certain things if we are
// trversing...
@@ -11221,43 +11221,56 @@ BOOLEAN GetRandomUnknownVIPSector( UINT16& aSector )
return FALSE;
}
void UpdateFastForwardMode( SOLDIERTYPE* pSoldier )
void UpdateFastForwardMode(SOLDIERTYPE* pSoldier, INT8 bAction)
{
BOOLEAN action = FALSE;
BOOLEAN forward = FALSE;
BOOLEAN fAction = FALSE;
if( gGameExternalOptions.fImprovedAutoFastForward == FALSE ||
!gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE] ||
is_networked ||
!( gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT ) ||
pSoldier->bTeam == OUR_TEAM )
// check if fast forward mode disabled - do nothing
if (!gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE] || is_networked)
{
return;
}
switch ( pSoldier->aiData.bAction )
// check if improved auto fast forwarding enabled
if (!gGameExternalOptions.fImprovedAutoFastForward)
{
return;
}
// if [-] key is pressed - do nothing
if (IsFastForwardKeyPressed())
{
return;
}
switch (bAction)
{
case AI_ACTION_TOSS_PROJECTILE:
case AI_ACTION_KNIFE_MOVE:
case AI_ACTION_FIRE_GUN:
case AI_ACTION_THROW_KNIFE:
case AI_ACTION_PULL_TRIGGER:
case AI_ACTION_USE_DETONATOR:
case AI_ACTION_OPEN_OR_CLOSE_DOOR:
case AI_ACTION_LOWER_GUN:
case AI_ACTION_RAISE_GUN:
case AI_ACTION_CLIMB_ROOF:
case AI_ACTION_STEAL_MOVE:
case AI_ACTION_JUMP_WINDOW:
case AI_ACTION_USE_SKILL:
action = TRUE;
fAction = TRUE;
break;
}
// accelerate only invisible soldiers that are not doing specific actions like shooting
if( pSoldier->bVisible == -1 )
forward = !action;
// fast forward mode is only possible in turnbased combat only for invisible opponents
if (!(gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT) ||
pSoldier->flags.uiStatusFlags & SOLDIER_PC ||
pSoldier->bVisible == TRUE ||
gTacticalStatus.ubCurrentTeam == gbPlayerNum ||
fAction)
{
if (IsFastForwardMode())
{
SetFastForwardMode(FALSE);
}
if ( IsFastForwardMode() != forward )
SetFastForwardMode( forward );
return;
}
// invisible opponent in turnbased combat - enable fast forward mode
SetFastForwardMode(TRUE);
}
void DeleteVIP( INT16 sMapX, INT16 sMapY )
+19 -2
View File
@@ -73,7 +73,7 @@ extern void AdjustNoAPToFinishMove( SOLDIERTYPE *pSoldier, BOOLEAN fSet );
void TurnBasedHandleNPCAI(SOLDIERTYPE *pSoldier);
void HandleAITacticalTraversal( SOLDIERTYPE * pSoldier );
extern void UpdateFastForwardMode( SOLDIERTYPE* pSoldier );
extern void UpdateFastForwardMode(SOLDIERTYPE* pSoldier, INT8 bAction);
extern UINT8 gubElementsOnExplosionQueue;
@@ -1559,6 +1559,22 @@ void AIDecideRadioAnimation( SOLDIERTYPE *pSoldier )
return;
}
// sevenfm: no radio animation for invisible soldiers
if (pSoldier->bVisible == FALSE)
{
// don't play animation
ActionDone(pSoldier);
return;
}
// sevenfm: no radio animation in water
if (Water(pSoldier->sGridNo, pSoldier->pathing.bLevel))
{
// don't play animation
ActionDone(pSoldier);
return;
}
switch( gAnimControl[ pSoldier->usAnimState ].ubEndHeight )
{
case ANIM_STAND:
@@ -1645,7 +1661,8 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
// relying on a stored path from there is a bad idea.
pSoldier->pathing.usPathDataSize = pSoldier->pathing.usPathIndex = pSoldier->pathing.bPathStored = 0;
UpdateFastForwardMode( pSoldier );
// sevenfm: update fast forward mode
UpdateFastForwardMode(pSoldier, pSoldier->aiData.bAction);
switch (pSoldier->aiData.bAction)
{