mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Add Astars pathing to ingame options (#124)
* Enabled astars pathing * Add toggleable pathfinding choice to ingame options You can choose between original and A* pathfinding algorithms
This commit is contained in:
+4
-1
@@ -333,6 +333,7 @@ BOOLEAN LoadGameSettings()
|
||||
gGameSettings.fOptions[TOPTION_TOGGLE_TURN_MODE] = FALSE;
|
||||
|
||||
gGameSettings.fOptions[TOPTION_ALT_START_AIM] = iniReader.ReadBoolean("JA2 Game Settings", "TOPTION_ALT_START_AIM" , FALSE); // Start at max aiming level instead of default no aiming
|
||||
gGameSettings.fOptions[TOPTION_ALT_PATHFINDING] = iniReader.ReadBoolean("JA2 Game Settings", "TOPTION_ALT_PATHFINDING" , FALSE); // A* pathfinding
|
||||
gGameSettings.fOptions[TOPTION_MERCENARY_FORMATIONS] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_MERCENARY_FORMATIONS" , TRUE ); // Flugente: mercenary formations
|
||||
gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_SHOW_ENEMY_LOCATION" , FALSE); // sevenfm: show locations of known enemies
|
||||
gGameSettings.fOptions[TOPTION_REPORT_MISS_MARGIN] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_REPORT_MISS_MARGIN" , FALSE ); // HEADROCK HAM 4: Shot offset report
|
||||
@@ -614,7 +615,8 @@ BOOLEAN SaveGameSettings()
|
||||
settings << "TOPTION_ENABLE_INVENTORY_POPUPS = " << (gGameSettings.fOptions[TOPTION_ENABLE_INVENTORY_POPUPS] ? "TRUE" : "FALSE" ) << endl; // the_bob : enable popups for picking items from sector inv
|
||||
settings << "TOPTION_MERCENARY_FORMATIONS = " << (gGameSettings.fOptions[TOPTION_MERCENARY_FORMATIONS] ? "TRUE" : "FALSE" ) << endl;
|
||||
settings << "TOPTION_SHOW_ENEMY_LOCATION = " << (gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] ? "TRUE" : "FALSE" ) << endl;
|
||||
settings << "TOPTION_ALT_START_AIM = " << (gGameSettings.fOptions[TOPTION_ALT_START_AIM] ? "TRUE" : "FALSE") << endl;
|
||||
settings << "TOPTION_ALT_START_AIM = " << (gGameSettings.fOptions[TOPTION_ALT_START_AIM] ? "TRUE" : "FALSE") << endl;
|
||||
settings << "TOPTION_ALT_PATHFINDING = " << (gGameSettings.fOptions[TOPTION_ALT_PATHFINDING] ? "TRUE" : "FALSE") << endl;
|
||||
|
||||
settings << "TOPTION_CHEAT_MODE_OPTIONS_HEADER = " << (gGameSettings.fOptions[TOPTION_CHEAT_MODE_OPTIONS_HEADER] ? "TRUE" : "FALSE" ) << endl;
|
||||
settings << "TOPTION_FORCE_BOBBY_RAY_SHIPMENTS = " << (gGameSettings.fOptions[TOPTION_FORCE_BOBBY_RAY_SHIPMENTS] ? "TRUE" : "FALSE" ) << endl;
|
||||
@@ -843,6 +845,7 @@ void InitGameSettings()
|
||||
gGameSettings.fOptions[ TOPTION_MERCENARY_FORMATIONS ] = FALSE; // Flugente: mercenary formations
|
||||
gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] = FALSE; // sevenfm: show locations of known enemies
|
||||
gGameSettings.fOptions[TOPTION_ALT_START_AIM] = FALSE;
|
||||
gGameSettings.fOptions[TOPTION_ALT_PATHFINDING] = FALSE;
|
||||
|
||||
// arynn: Cheat/Debug Menu
|
||||
gGameSettings.fOptions[ TOPTION_CHEAT_MODE_OPTIONS_HEADER ] = FALSE;
|
||||
|
||||
@@ -104,6 +104,7 @@ enum
|
||||
// sevenfm: new settings
|
||||
TOPTION_SHOW_ENEMY_LOCATION,
|
||||
TOPTION_ALT_START_AIM,
|
||||
TOPTION_ALT_PATHFINDING,
|
||||
|
||||
// arynn: Debug/Cheat
|
||||
TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
|
||||
+62
-57
@@ -88,6 +88,11 @@
|
||||
#include "Map Screen Interface.h" // added by Flugente for SquadNames
|
||||
#include "Keys.h" // added by silversurfer for door handling from the side
|
||||
|
||||
#include "AIInternals.h"
|
||||
extern BOOLEAN gubWorldTileInLight[MAX_ALLOWED_WORLD_MAX];
|
||||
extern BOOLEAN gubIsCorpseThere[MAX_ALLOWED_WORLD_MAX];
|
||||
extern INT32 gubMerkCanSeeThisTile[MAX_ALLOWED_WORLD_MAX];
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// SANDRO - In this file, all APBPConstants[AP_CROUCH] and APBPConstants[AP_PRONE] were changed to GetAPsCrouch() and GetAPsProne()
|
||||
// On the bottom here, there are these functions made
|
||||
@@ -1365,74 +1370,74 @@ UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent )
|
||||
SaveGame(SAVE__END_TURN_NUM, zString );
|
||||
}
|
||||
|
||||
// Flugente: this stuff is only ever used in AStar pathing and is a unnecessary waste of resources otherwise, so I'm putting an end to this
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
////ddd enemy turn optimization
|
||||
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
if (gGameSettings.fOptions[TOPTION_ALT_PATHFINDING])
|
||||
{
|
||||
memset( gubWorldTileInLight, FALSE, sizeof( gubWorldTileInLight ) );
|
||||
memset( gubIsCorpseThere, FALSE, sizeof( gubIsCorpseThere ) );
|
||||
memset( gubMerkCanSeeThisTile, FALSE, sizeof( gubMerkCanSeeThisTile ) );
|
||||
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT ) )
|
||||
{
|
||||
memset( gubWorldTileInLight, FALSE, sizeof( gubWorldTileInLight ) );
|
||||
memset( gubIsCorpseThere, FALSE, sizeof( gubIsCorpseThere ) );
|
||||
memset( gubMerkCanSeeThisTile, FALSE, sizeof( gubMerkCanSeeThisTile ) );
|
||||
|
||||
//sevenfm translated: unwinding of loop. When changing WORLD_MAX to another value will need some cleaning! dangerous code! ;)
|
||||
//sevenfm translated: unwinding of loop. When changing WORLD_MAX to another value will need some cleaning! dangerous code! ;)
|
||||
|
||||
// WANNE: We had a custom user map (Tixa, J9), where the following loop caused an unhandled exception.
|
||||
// The crash occurd at ~index 16000 when calling the method IsCorpseAtGridNo() ...
|
||||
// I don't know what causes it ...
|
||||
// Just try/catch (ugly, but works).
|
||||
__try
|
||||
{
|
||||
for(UINT32 i=0; i<(UINT32)WORLD_MAX; i+=4)
|
||||
{
|
||||
gubWorldTileInLight[i] = InLightAtNight(i, gpWorldLevelData[ i ].sHeight);
|
||||
gubIsCorpseThere[i] = IsCorpseAtGridNo( i, gpWorldLevelData[ i ].sHeight );
|
||||
gubWorldTileInLight[i+1] = InLightAtNight(i+1, gpWorldLevelData[ i+1 ].sHeight);
|
||||
gubIsCorpseThere[i+1] = IsCorpseAtGridNo( i+1, gpWorldLevelData[ i+1 ].sHeight );
|
||||
gubWorldTileInLight[i+2] = InLightAtNight(i+2, gpWorldLevelData[ i+2 ].sHeight);
|
||||
gubIsCorpseThere[i+2] = IsCorpseAtGridNo( i+2, gpWorldLevelData[ i+2 ].sHeight );
|
||||
gubWorldTileInLight[i+3] = InLightAtNight(i+3, gpWorldLevelData[ i+3 ].sHeight);
|
||||
gubIsCorpseThere[i+3] = IsCorpseAtGridNo( i+3, gpWorldLevelData[ i+3 ].sHeight );
|
||||
}
|
||||
}
|
||||
__except( EXCEPTION_EXECUTE_HANDLER )
|
||||
{
|
||||
// WANNE: Ignore, so the game can continue ...
|
||||
}
|
||||
|
||||
INT32 tcnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SOLDIERTYPE *tS;
|
||||
|
||||
INT16 sXOffset, sYOffset;
|
||||
INT32 sGridNo;
|
||||
UINT16 usSightLimit=0;
|
||||
|
||||
for ( tS = MercPtrs[ tcnt ]; tcnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++tcnt, tS++ )
|
||||
{
|
||||
if ( tS->stats.bLife >= OKLIFE && tS->sGridNo != NOWHERE && tS->bInSector )
|
||||
// WANNE: We had a custom user map (Tixa, J9), where the following loop caused an unhandled exception.
|
||||
// The crash occurd at ~index 16000 when calling the method IsCorpseAtGridNo() ...
|
||||
// I don't know what causes it ...
|
||||
// Just try/catch (ugly, but works).
|
||||
__try
|
||||
{
|
||||
for(UINT32 i=0; i<(UINT32)WORLD_MAX; i+=4)
|
||||
{
|
||||
gubWorldTileInLight[i] = InLightAtNight(i, gpWorldLevelData[ i ].sHeight);
|
||||
gubIsCorpseThere[i] = IsCorpseAtGridNo( i, gpWorldLevelData[ i ].sHeight );
|
||||
gubWorldTileInLight[i+1] = InLightAtNight(i+1, gpWorldLevelData[ i+1 ].sHeight);
|
||||
gubIsCorpseThere[i+1] = IsCorpseAtGridNo( i+1, gpWorldLevelData[ i+1 ].sHeight );
|
||||
gubWorldTileInLight[i+2] = InLightAtNight(i+2, gpWorldLevelData[ i+2 ].sHeight);
|
||||
gubIsCorpseThere[i+2] = IsCorpseAtGridNo( i+2, gpWorldLevelData[ i+2 ].sHeight );
|
||||
gubWorldTileInLight[i+3] = InLightAtNight(i+3, gpWorldLevelData[ i+3 ].sHeight);
|
||||
gubIsCorpseThere[i+3] = IsCorpseAtGridNo( i+3, gpWorldLevelData[ i+3 ].sHeight );
|
||||
}
|
||||
}
|
||||
__except( EXCEPTION_EXECUTE_HANDLER )
|
||||
{
|
||||
//loop through all the gridnos that we are interested in
|
||||
for (sYOffset = -30; sYOffset <= 30; ++sYOffset)
|
||||
// WANNE: Ignore, so the game can continue ...
|
||||
}
|
||||
|
||||
INT32 tcnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SOLDIERTYPE *tS;
|
||||
|
||||
INT16 sXOffset, sYOffset;
|
||||
INT32 sGridNo;
|
||||
UINT16 usSightLimit=0;
|
||||
|
||||
for ( tS = MercPtrs[ tcnt ]; tcnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++tcnt, tS++ )
|
||||
{
|
||||
if ( tS->stats.bLife >= OKLIFE && tS->sGridNo != NOWHERE && tS->bInSector )
|
||||
{
|
||||
for (sXOffset = -30; sXOffset <= 30; ++sXOffset)
|
||||
//loop through all the gridnos that we are interested in
|
||||
for (sYOffset = -30; sYOffset <= 30; ++sYOffset)
|
||||
{
|
||||
sGridNo = tS->sGridNo + sXOffset + (MAXCOL * sYOffset);
|
||||
|
||||
if ( sGridNo <= 0 || sGridNo >= WORLD_MAX )
|
||||
continue;
|
||||
|
||||
//usSightLimit = tS->GetMaxDistanceVisible(sGridNo, FALSE, CALC_FROM_WANTED_DIR);
|
||||
if(gubMerkCanSeeThisTile[sGridNo]==0)
|
||||
for (sXOffset = -30; sXOffset <= 30; ++sXOffset)
|
||||
{
|
||||
gubMerkCanSeeThisTile[sGridNo]=//SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, FALSE, ANIM_STAND, TRUE, usSightLimit );
|
||||
SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, tS->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_WANTED_DIR);
|
||||
}
|
||||
}//fo
|
||||
}
|
||||
}//if
|
||||
sGridNo = tS->sGridNo + sXOffset + (MAXCOL * sYOffset);
|
||||
|
||||
if ( sGridNo <= 0 || sGridNo >= WORLD_MAX )
|
||||
continue;
|
||||
|
||||
//usSightLimit = tS->GetMaxDistanceVisible(sGridNo, FALSE, CALC_FROM_WANTED_DIR);
|
||||
if(gubMerkCanSeeThisTile[sGridNo]==0)
|
||||
{
|
||||
gubMerkCanSeeThisTile[sGridNo]=//SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, FALSE, ANIM_STAND, TRUE, usSightLimit );
|
||||
SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, tS->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_WANTED_DIR);
|
||||
}
|
||||
}//fo
|
||||
}
|
||||
}//if
|
||||
}
|
||||
}
|
||||
}
|
||||
//ddd enemy turn optimization**
|
||||
#endif
|
||||
|
||||
// End our turn!
|
||||
if (is_server || !is_client)
|
||||
|
||||
@@ -10,12 +10,6 @@
|
||||
#define _PATHAI_H
|
||||
#include "isometric utils.h"
|
||||
|
||||
// WANNE: Please do not use ASTAR pathing,
|
||||
// because it is a HUGH PERFORMANCE KILLER on big maps!!
|
||||
//#define USE_ASTAR_PATHS
|
||||
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
|
||||
namespace ASTAR {
|
||||
#include "BinaryHeap.hpp"
|
||||
#include <vector>
|
||||
@@ -188,8 +182,6 @@ private:
|
||||
|
||||
};//end namespace ASTAR
|
||||
|
||||
#endif// USE_ASTAR_PATHS
|
||||
|
||||
|
||||
BOOLEAN InitPathAI( void );
|
||||
void ShutDownPathAI( void );
|
||||
|
||||
+27
-29
@@ -49,12 +49,12 @@
|
||||
class OBJECTTYPE;
|
||||
class SOLDIERTYPE;
|
||||
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
#include "BinaryHeap.hpp"
|
||||
#include "AIInternals.h"
|
||||
#include "opplist.h"
|
||||
#include "weapons.h"
|
||||
#endif
|
||||
extern BOOLEAN gubWorldTileInLight[MAX_ALLOWED_WORLD_MAX];
|
||||
extern BOOLEAN gubIsCorpseThere[MAX_ALLOWED_WORLD_MAX];
|
||||
extern INT32 gubMerkCanSeeThisTile[MAX_ALLOWED_WORLD_MAX];
|
||||
//#include "dnlprocesstalk.h"//dnl???
|
||||
|
||||
extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ];
|
||||
@@ -454,9 +454,6 @@ UINT32 guiFailedPathChecks = 0;
|
||||
UINT32 guiUnsuccessfulPathChecks = 0;
|
||||
#endif
|
||||
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
|
||||
|
||||
//ADB the extra cover feature is supposed to pick a path of the same distance as one calculated with the feature off,
|
||||
//but a safer path, usually farther away from an enemy or following behind some cover.
|
||||
//however it has not been tested and it may need some work, I haven't touched it in a while
|
||||
@@ -647,7 +644,7 @@ int AStarPathfinder::GetPath(SOLDIERTYPE *s ,
|
||||
fCloseGoodEnough = ( (fFlags & PATH_CLOSE_GOOD_ENOUGH) != 0);
|
||||
fConsiderPersonAtDestAsObstacle = (BOOLEAN)( fPathingForPlayer && fPathAroundPeople && !(fFlags & PATH_IGNORE_PERSON_AT_DEST) );
|
||||
|
||||
if ( fNonSwimmer && Water( dest ) )
|
||||
if ( fNonSwimmer && Water( dest, 0 ) )
|
||||
{
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_0, String( "ASTAR: path failed, water" ) );
|
||||
return( 0 );
|
||||
@@ -1390,7 +1387,7 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
|
||||
}
|
||||
|
||||
// Flugente: dragging someone
|
||||
if ( pSoldier->IsDraggingSomeone( ) )
|
||||
if ( pSoldier->IsDragging( false ) )
|
||||
{
|
||||
movementAPCost *= gItemSettings.fDragAPCostModifier;
|
||||
}
|
||||
@@ -2357,7 +2354,6 @@ bool AStarPathfinder::IsSomeoneInTheWay()
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif//end ifdef USE_ASTAR_PATHS
|
||||
|
||||
INT8 RandomSkipListLevel( void )
|
||||
{
|
||||
@@ -2430,27 +2426,29 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 bLevel, INT16 usMov
|
||||
{
|
||||
s->sPlotSrcGrid = s->sGridNo;
|
||||
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
//ddd
|
||||
CHAR8 errorBuf[511]; UINT32 b,e;
|
||||
b=GetJA2Clock();//return s->sGridNo+6;
|
||||
|
||||
int retVal = ASTAR::AStarPathfinder::GetInstance().GetPath(s, sDestination, bLevel, usMovementMode, bCopy, fFlags);
|
||||
|
||||
e=GetJA2Clock();sprintf(errorBuf, "timefind bestpath= %d",e-b );LiveMessage(errorBuf);
|
||||
|
||||
if (retVal || TileIsOutOfBounds(sDestination)) {
|
||||
return retVal;
|
||||
}
|
||||
else {
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_0, String( "ASTAR path failed!" ) );
|
||||
}
|
||||
|
||||
// if (TileIsOutOfBounds(sDestination))
|
||||
if (gGameSettings.fOptions[TOPTION_ALT_PATHFINDING])
|
||||
{
|
||||
return 0;
|
||||
CHAR8 errorBuf[511]; UINT32 b,e;
|
||||
b=GetJA2Clock();//return s->sGridNo+6;
|
||||
|
||||
int retVal = ASTAR::AStarPathfinder::GetInstance().GetPath(s, sDestination, bLevel, usMovementMode, bCopy, fFlags);
|
||||
|
||||
e=GetJA2Clock();sprintf(errorBuf, "timefind bestpath= %d",e-b );LiveMessage(errorBuf);
|
||||
|
||||
if (retVal || TileIsOutOfBounds(sDestination)) {
|
||||
return retVal;
|
||||
}
|
||||
else {
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_0, String( "ASTAR path failed!" ) );
|
||||
}
|
||||
|
||||
// if (TileIsOutOfBounds(sDestination))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#else
|
||||
else
|
||||
{
|
||||
//__try
|
||||
//{
|
||||
INT32 iDestination = sDestination, iOrigination;
|
||||
@@ -4210,7 +4208,7 @@ ENDOFLOOP:
|
||||
//{
|
||||
// return (0);
|
||||
//}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void GlobalReachableTest( INT32 sStartGridNo )
|
||||
|
||||
+435
-587
File diff suppressed because it is too large
Load Diff
@@ -145,14 +145,11 @@ UINT32 gSurfaceMemUsage;
|
||||
//UINT8 gubWorldMovementCosts[ WORLD_MAX ][MAXDIR][2];
|
||||
UINT8 (*gubWorldMovementCosts)[MAXDIR][2] = NULL;//dnl ch43 260909
|
||||
|
||||
// Flugente: this stuff is only ever used in AStar pathing and is a unnecessary waste of resources otherwise, so I'm putting an end to this
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
//ddd to speed up search of illuminated tiles in PATH AI
|
||||
BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ];
|
||||
BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ];
|
||||
INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ];
|
||||
BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ];
|
||||
BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ];
|
||||
INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ];
|
||||
//ddd
|
||||
#endif
|
||||
|
||||
// set to nonzero (locs of base gridno of structure are good) to have it defined by structure code
|
||||
INT16 gsRecompileAreaTop = 0;
|
||||
|
||||
@@ -281,18 +281,6 @@ typedef struct
|
||||
|
||||
// World Data
|
||||
extern MAP_ELEMENT *gpWorldLevelData;
|
||||
|
||||
// Flugente: this stuff is only ever used in AStar pathing and is a unnecessary waste of resources otherwise, so I'm putting an end to this
|
||||
#ifdef USE_ASTAR_PATHS
|
||||
// World Movement Costs
|
||||
//UINT8 gubWorldMovementCosts[ WORLD_MAX ][MAXDIR][2];
|
||||
//ddd Tables to track tactical value of grid tiles
|
||||
extern BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ];
|
||||
extern BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ]; //Tracks position of corpses for AI avoidance
|
||||
extern INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ]; //Tracks visibility my mercs
|
||||
//ddd
|
||||
#endif
|
||||
|
||||
extern UINT8 (*gubWorldMovementCosts)[MAXDIR][2];//dnl ch43 260909
|
||||
|
||||
//dnl ch44 290909 Translation routine
|
||||
|
||||
@@ -6575,6 +6575,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"保持佣兵间距", // when multiple mercs are selected, they will try to keep their relative distances
|
||||
L"显示已知敌人位置", //L"Show enemy location", show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--作弊模式选项--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"强制 Bobby Ray 送货", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6695,6 +6696,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"打开时,当选择多个佣兵,在前进时会保持彼此的间距。|C|t|r|l+|A|l|t+|G \n(按|S|h|i|f|t+点击人物头像可以加入或移出队伍)", //L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", TODO.Translate
|
||||
L"打开时,会显示已知敌人最后移动的位置。", //L"When ON, shows last known enemy location.",
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"强制 Bobby Ray 出货",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6577,6 +6577,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances // TODO.Translate
|
||||
L"Show enemy location", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6697,6 +6698,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate
|
||||
L"When ON, shows last known enemy location.", //TODO.Translate
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Force all pending Bobby Ray shipments",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6575,6 +6575,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances
|
||||
L"Show enemy location", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Force Bobby Ray Shipments", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6695,6 +6696,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)",
|
||||
L"When ON, shows last known enemy location.",
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Force all pending Bobby Ray shipments",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6582,6 +6582,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Déplacement tactique", // when multiple mercs are selected, they will try to keep their relative distances
|
||||
L"Show enemy location", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Options mode triche--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Forcer envois Bobby Ray", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6701,6 +6702,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate
|
||||
L"When ON, shows last known enemy location.", //TODO.Translate
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Forcer tous les envois en attente de Bobby Ray",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6448,6 +6448,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Bewegung in Formation", // when multiple mercs are selected, they will try to keep their relative distances
|
||||
L"Show enemy location", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Erzwinge BR Lieferung", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6568,6 +6569,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate
|
||||
L"When ON, shows last known enemy location.", //TODO.Translate
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Force all pending Bobby Ray shipments",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6560,6 +6560,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances // TODO.Translate
|
||||
L"Show enemy location", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6680,6 +6681,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate
|
||||
L"When ON, shows last known enemy location.", //TODO.Translate
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Force all pending Bobby Ray shipments",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6579,6 +6579,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances // TODO.Translate
|
||||
L"Show enemy location", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6699,6 +6700,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"When ON and multiple mercs are selected, they will try to keep their relative distances while moving.\n(press |C|t|r|l+|A|l|t+|G to toggle mode or |S|h|i|f|t + click to move in formation)", //TODO.Translate
|
||||
L"When ON, shows last known enemy location.", //TODO.Translate
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Wymuś wszystkie oczekiwane dostawy od Bobby Ray's.",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
@@ -6571,6 +6571,7 @@ STR16 zOptionsToggleText[] =
|
||||
L"Боевой порядок", // when multiple mercs are selected, they will try to keep their relative distances
|
||||
L"Показывать расположение", // show locator on last known enemy location
|
||||
L"Start at maximum aim",
|
||||
L"Alternative pathfinding",
|
||||
L"--Читерские настройки--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
|
||||
L"Ускорить доставку Бобби Рэя", // force all pending Bobby Ray shipments
|
||||
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END
|
||||
@@ -6691,6 +6692,7 @@ STR16 zOptionsScreenHelpText[] =
|
||||
L"Если выбрано несколько наёмников,\nони будут пытаться сохранять взаимное расположение\nи дистанцию при движении\n(нажмите |C|t|r|l+|A|l|t+|G для переключения или |S|h|i|f|t + клик для движения).",
|
||||
L"Если включено, показывает известное расположение противника\n(нажмите |S|h|i|f|t, чтобы показать источник шума).",
|
||||
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim",
|
||||
L"When ON, Use A* pathfinding algorithm, instead of original",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
|
||||
L"Выберите этот пункт,\nчтобы груз Бобби Рэя прибыл немедленно.",
|
||||
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
|
||||
|
||||
Reference in New Issue
Block a user