mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Simplified ImprovedAutoFastForward feature (allows to accelerate only invisible enemies) (by sevenfm)
Now single option IMPROVED_AUTO_FAST_FORWARD=TRUE by default Removed options: AUTO_FAST_FORWARD_ENEMIES AUTO_FAST_FORWARD_MILITIA AUTO_FAST_FORWARD_CIVS AUTO_FAST_FORWARD_CREATURES ENEMY_CLOCK_SPEED_PERCENT Also a small fix (additional update of AutoFastForward status when soldier arrives at new gridno) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7828 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+1
-5
@@ -2218,14 +2218,10 @@ void LoadGameExternalOptions()
|
|||||||
gGameExternalOptions.iFastForwardKey = ParseKeyString(sFFKeyBuffer);
|
gGameExternalOptions.iFastForwardKey = ParseKeyString(sFFKeyBuffer);
|
||||||
gGameExternalOptions.iFastForwardPeriod = (FLOAT)iniReader.ReadDouble("Clock Settings","FAST_FORWARD_PERIOD", 500, 1, 10000);
|
gGameExternalOptions.iFastForwardPeriod = (FLOAT)iniReader.ReadDouble("Clock Settings","FAST_FORWARD_PERIOD", 500, 1, 10000);
|
||||||
gGameExternalOptions.fClockSpeedPercent = (FLOAT)iniReader.ReadDouble("Clock Settings","CLOCK_SPEED_PERCENT", 150, 100, 300);
|
gGameExternalOptions.fClockSpeedPercent = (FLOAT)iniReader.ReadDouble("Clock Settings","CLOCK_SPEED_PERCENT", 150, 100, 300);
|
||||||
gGameExternalOptions.fEnemyClockSpeedPercent = (FLOAT)iniReader.ReadDouble("Clock Settings","ENEMY_CLOCK_SPEED_PERCENT", 150, 100, 300);
|
|
||||||
gGameExternalOptions.iNotifyFrequency = iniReader.ReadInteger("Clock Settings","UPDATE_FREQUENCY", 16000, 1000, 20000);
|
gGameExternalOptions.iNotifyFrequency = iniReader.ReadInteger("Clock Settings","UPDATE_FREQUENCY", 16000, 1000, 20000);
|
||||||
|
|
||||||
// sevenfm: improved auto fast forwarding
|
// sevenfm: improved auto fast forwarding
|
||||||
gGameExternalOptions.ubAutoFastForwardEnemies = iniReader.ReadInteger("Clock Settings","AUTO_FAST_FORWARD_ENEMIES", 0, 0, 3);
|
gGameExternalOptions.fImprovedAutoFastForward = iniReader.ReadBoolean("Clock Settings","IMPROVED_AUTO_FAST_FORWARD", TRUE);
|
||||||
gGameExternalOptions.ubAutoFastForwardMilitia = iniReader.ReadInteger("Clock Settings", "AUTO_FAST_FORWARD_MILITIA", 0, 0, 2);
|
|
||||||
gGameExternalOptions.ubAutoFastForwardCivs = iniReader.ReadInteger("Clock Settings", "AUTO_FAST_FORWARD_CIVS", 0, 0, 2);
|
|
||||||
gGameExternalOptions.ubAutoFastForwardCreatures = iniReader.ReadInteger("Clock Settings", "AUTO_FAST_FORWARD_CREATURES", 0, 0, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-5
@@ -1260,13 +1260,9 @@ typedef struct
|
|||||||
INT32 iNotifyFrequency;
|
INT32 iNotifyFrequency;
|
||||||
// Frequency that the screen is updated
|
// Frequency that the screen is updated
|
||||||
FLOAT fClockSpeedPercent;
|
FLOAT fClockSpeedPercent;
|
||||||
FLOAT fEnemyClockSpeedPercent;
|
|
||||||
|
|
||||||
// sevenfm: improved auto fast forwarding
|
// sevenfm: improved auto fast forwarding
|
||||||
UINT8 ubAutoFastForwardEnemies;
|
BOOLEAN fImprovedAutoFastForward;
|
||||||
UINT8 ubAutoFastForwardMilitia;
|
|
||||||
UINT8 ubAutoFastForwardCivs;
|
|
||||||
UINT8 ubAutoFastForwardCreatures;
|
|
||||||
|
|
||||||
// Flugente: Weapon Overheating
|
// Flugente: Weapon Overheating
|
||||||
BOOLEAN fWeaponOverheating; // Should weapons overheat, thus increasing the chance of malfunction?
|
BOOLEAN fWeaponOverheating; // Should weapons overheat, thus increasing the chance of malfunction?
|
||||||
|
|||||||
@@ -152,6 +152,8 @@ class SOLDIERTYPE;
|
|||||||
|
|
||||||
extern void HandleBestSightingPositionInRealtime();
|
extern void HandleBestSightingPositionInRealtime();
|
||||||
|
|
||||||
|
void UpdateFastForwardMode( SOLDIERTYPE* pSoldier ); // sevenfm: to call in HandleAtNewGridNo
|
||||||
|
|
||||||
extern UINT8 gubAICounter;
|
extern UINT8 gubAICounter;
|
||||||
|
|
||||||
#include "fresh_header.h"
|
#include "fresh_header.h"
|
||||||
@@ -2770,6 +2772,9 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sevenfm: additional check for auto fast forwarding
|
||||||
|
UpdateFastForwardMode( pSoldier );
|
||||||
|
|
||||||
// ATE: Put some stuff in here to not handle certain things if we are
|
// ATE: Put some stuff in here to not handle certain things if we are
|
||||||
// trversing...
|
// trversing...
|
||||||
if ( gubWaitingForAllMercsToExitCode == WAIT_FOR_MERCS_TO_WALKOFF_SCREEN || gubWaitingForAllMercsToExitCode == WAIT_FOR_MERCS_TO_WALK_TO_GRIDNO )
|
if ( gubWaitingForAllMercsToExitCode == WAIT_FOR_MERCS_TO_WALKOFF_SCREEN || gubWaitingForAllMercsToExitCode == WAIT_FOR_MERCS_TO_WALK_TO_GRIDNO )
|
||||||
@@ -11077,6 +11082,45 @@ BOOLEAN GetRandomUnknownVIPSector( UINT16& aSector )
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UpdateFastForwardMode( SOLDIERTYPE* pSoldier )
|
||||||
|
{
|
||||||
|
BOOLEAN action = FALSE;
|
||||||
|
BOOLEAN forward = FALSE;
|
||||||
|
|
||||||
|
if( gGameExternalOptions.fImprovedAutoFastForward == FALSE ||
|
||||||
|
!gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE] ||
|
||||||
|
is_networked ||
|
||||||
|
!( gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT ) ||
|
||||||
|
pSoldier->bTeam == OUR_TEAM )
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch ( pSoldier->aiData.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;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// accelerate only invisible soldiers that are not doing specific actions like shooting
|
||||||
|
if( pSoldier->bVisible == -1 )
|
||||||
|
forward = !action;
|
||||||
|
|
||||||
|
if ( IsFastForwardMode() != forward )
|
||||||
|
SetFastForwardMode( forward );
|
||||||
|
}
|
||||||
|
|
||||||
void DeleteVIP( INT16 sMapX, INT16 sMapY )
|
void DeleteVIP( INT16 sMapX, INT16 sMapY )
|
||||||
{
|
{
|
||||||
if ( StrategicMap[SECTOR( sMapX, sMapY )].usFlags & ENEMY_VIP_PRESENT_KNOWN )
|
if ( StrategicMap[SECTOR( sMapX, sMapY )].usFlags & ENEMY_VIP_PRESENT_KNOWN )
|
||||||
|
|||||||
@@ -528,8 +528,6 @@ void BeginTeamTurn( UINT8 ubTeam )
|
|||||||
SetFastForwardMode( (ubTeam != OUR_TEAM) );
|
SetFastForwardMode( (ubTeam != OUR_TEAM) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !is_networked && ubTeam != OUR_TEAM )
|
|
||||||
SetClockSpeedPercent(gGameExternalOptions.fEnemyClockSpeedPercent); // sevenfm: set clock speed for enemy turn
|
|
||||||
|
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
@@ -1487,8 +1485,6 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred )
|
|||||||
SetFastForwardMode( (gTacticalStatus.ubCurrentTeam != OUR_TEAM) );
|
SetFastForwardMode( (gTacticalStatus.ubCurrentTeam != OUR_TEAM) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !is_networked && gTacticalStatus.ubCurrentTeam != OUR_TEAM )
|
|
||||||
SetClockSpeedPercent(gGameExternalOptions.fEnemyClockSpeedPercent); // sevenfm: set clock speed for enemy turn
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-121
@@ -73,7 +73,7 @@ extern void AdjustNoAPToFinishMove( SOLDIERTYPE *pSoldier, BOOLEAN fSet );
|
|||||||
void TurnBasedHandleNPCAI(SOLDIERTYPE *pSoldier);
|
void TurnBasedHandleNPCAI(SOLDIERTYPE *pSoldier);
|
||||||
void HandleAITacticalTraversal( SOLDIERTYPE * pSoldier );
|
void HandleAITacticalTraversal( SOLDIERTYPE * pSoldier );
|
||||||
|
|
||||||
void UpdateFastForwardMode( SOLDIERTYPE* pSoldier );
|
extern void UpdateFastForwardMode( SOLDIERTYPE* pSoldier );
|
||||||
|
|
||||||
extern UINT8 gubElementsOnExplosionQueue;
|
extern UINT8 gubElementsOnExplosionQueue;
|
||||||
|
|
||||||
@@ -2619,123 +2619,3 @@ void HandleAITacticalTraversal( SOLDIERTYPE * pSoldier )
|
|||||||
}
|
}
|
||||||
CheckForEndOfBattle( TRUE );
|
CheckForEndOfBattle( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateFastForwardMode( SOLDIERTYPE* pSoldier )
|
|
||||||
{
|
|
||||||
BOOLEAN action = FALSE;
|
|
||||||
BOOLEAN forward = FALSE;
|
|
||||||
BOOLEAN found = FALSE;
|
|
||||||
UINT16 cnt;
|
|
||||||
SOLDIERTYPE * ps;
|
|
||||||
|
|
||||||
if( ( gGameExternalOptions.ubAutoFastForwardEnemies == 0 && gGameExternalOptions.ubAutoFastForwardMilitia == 0 ) ||
|
|
||||||
!gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE] ||
|
|
||||||
is_networked ||
|
|
||||||
!( gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT ) ||
|
|
||||||
pSoldier->bTeam == OUR_TEAM )
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch ( pSoldier->aiData.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;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( pSoldier->bTeam == MILITIA_TEAM )
|
|
||||||
{
|
|
||||||
switch( gGameExternalOptions.ubAutoFastForwardMilitia )
|
|
||||||
{
|
|
||||||
case 0: // default mode
|
|
||||||
forward = gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE];
|
|
||||||
break;
|
|
||||||
case 1: // auto fast forward this militiaman if he does not see opponents
|
|
||||||
if( pSoldier->aiData.bOppCnt == 0 )
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
case 2: // auto fast forward all militia
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( pSoldier->bTeam == CIV_TEAM )
|
|
||||||
{
|
|
||||||
switch( gGameExternalOptions.ubAutoFastForwardCivs )
|
|
||||||
{
|
|
||||||
case 0: // default mode
|
|
||||||
forward = gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE];
|
|
||||||
break;
|
|
||||||
case 1: // auto fast forward only invisible civs
|
|
||||||
if( pSoldier->bVisible == -1 )
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
case 2: // auto fast forward civs always
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( pSoldier->bTeam == CREATURE_TEAM )
|
|
||||||
{
|
|
||||||
switch( gGameExternalOptions.ubAutoFastForwardCreatures )
|
|
||||||
{
|
|
||||||
case 0: // default mode
|
|
||||||
forward = gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE];
|
|
||||||
break;
|
|
||||||
case 1: // auto fast forward only invisible
|
|
||||||
if( pSoldier->bVisible == -1 )
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
case 2: // auto fast forward always
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch ( gGameExternalOptions.ubAutoFastForwardEnemies )
|
|
||||||
{
|
|
||||||
case 0: // default mode
|
|
||||||
forward = gGameSettings.fOptions[TOPTION_AUTO_FAST_FORWARD_MODE];
|
|
||||||
break;
|
|
||||||
case 1: // auto fast forward enemy soldier only if player team does not see him
|
|
||||||
for ( cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++ )
|
|
||||||
{
|
|
||||||
ps = MercPtrs[ cnt ];
|
|
||||||
found= FALSE;
|
|
||||||
if (ps->bActive && ps->bInSector && ps->stats.bLife >= OKLIFE)
|
|
||||||
{
|
|
||||||
if (ps->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY)
|
|
||||||
{
|
|
||||||
found= TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
forward = !found && !action;
|
|
||||||
break;
|
|
||||||
case 2: // auto fast forward only invisible enemies
|
|
||||||
if( pSoldier->bVisible == -1 )
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
case 3: // always auto fast forward movements
|
|
||||||
forward = TRUE && !action;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( IsFastForwardMode() != forward )
|
|
||||||
SetFastForwardMode( forward );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user