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:
Asdow
2023-02-15 11:49:04 +02:00
committed by GitHub
parent aa3e10cd29
commit 17a0a08097
16 changed files with 548 additions and 700 deletions
+4 -1
View File
@@ -333,6 +333,7 @@ BOOLEAN LoadGameSettings()
gGameSettings.fOptions[TOPTION_TOGGLE_TURN_MODE] = FALSE; 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_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_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_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 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_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_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_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_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; 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_MERCENARY_FORMATIONS ] = FALSE; // Flugente: mercenary formations
gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] = FALSE; // sevenfm: show locations of known enemies gGameSettings.fOptions[TOPTION_SHOW_ENEMY_LOCATION] = FALSE; // sevenfm: show locations of known enemies
gGameSettings.fOptions[TOPTION_ALT_START_AIM] = FALSE; gGameSettings.fOptions[TOPTION_ALT_START_AIM] = FALSE;
gGameSettings.fOptions[TOPTION_ALT_PATHFINDING] = FALSE;
// arynn: Cheat/Debug Menu // arynn: Cheat/Debug Menu
gGameSettings.fOptions[ TOPTION_CHEAT_MODE_OPTIONS_HEADER ] = FALSE; gGameSettings.fOptions[ TOPTION_CHEAT_MODE_OPTIONS_HEADER ] = FALSE;
+1
View File
@@ -104,6 +104,7 @@ enum
// sevenfm: new settings // sevenfm: new settings
TOPTION_SHOW_ENEMY_LOCATION, TOPTION_SHOW_ENEMY_LOCATION,
TOPTION_ALT_START_AIM, TOPTION_ALT_START_AIM,
TOPTION_ALT_PATHFINDING,
// arynn: Debug/Cheat // arynn: Debug/Cheat
TOPTION_CHEAT_MODE_OPTIONS_HEADER, TOPTION_CHEAT_MODE_OPTIONS_HEADER,
+62 -57
View File
@@ -88,6 +88,11 @@
#include "Map Screen Interface.h" // added by Flugente for SquadNames #include "Map Screen Interface.h" // added by Flugente for SquadNames
#include "Keys.h" // added by silversurfer for door handling from the side #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() // 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 // On the bottom here, there are these functions made
@@ -1365,74 +1370,74 @@ UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent )
SaveGame(SAVE__END_TURN_NUM, zString ); 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 ////ddd enemy turn optimization
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT ) ) if (gGameSettings.fOptions[TOPTION_ALT_PATHFINDING])
{ {
memset( gubWorldTileInLight, FALSE, sizeof( gubWorldTileInLight ) ); if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT ) )
memset( gubIsCorpseThere, FALSE, sizeof( gubIsCorpseThere ) ); {
memset( gubMerkCanSeeThisTile, FALSE, sizeof( gubMerkCanSeeThisTile ) ); 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. // 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() ... // The crash occurd at ~index 16000 when calling the method IsCorpseAtGridNo() ...
// I don't know what causes it ... // I don't know what causes it ...
// Just try/catch (ugly, but works). // Just try/catch (ugly, but works).
__try __try
{ {
for(UINT32 i=0; i<(UINT32)WORLD_MAX; i+=4) for(UINT32 i=0; i<(UINT32)WORLD_MAX; i+=4)
{ {
gubWorldTileInLight[i] = InLightAtNight(i, gpWorldLevelData[ i ].sHeight); gubWorldTileInLight[i] = InLightAtNight(i, gpWorldLevelData[ i ].sHeight);
gubIsCorpseThere[i] = IsCorpseAtGridNo( i, gpWorldLevelData[ i ].sHeight ); gubIsCorpseThere[i] = IsCorpseAtGridNo( i, gpWorldLevelData[ i ].sHeight );
gubWorldTileInLight[i+1] = InLightAtNight(i+1, gpWorldLevelData[ i+1 ].sHeight); gubWorldTileInLight[i+1] = InLightAtNight(i+1, gpWorldLevelData[ i+1 ].sHeight);
gubIsCorpseThere[i+1] = IsCorpseAtGridNo( 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); gubWorldTileInLight[i+2] = InLightAtNight(i+2, gpWorldLevelData[ i+2 ].sHeight);
gubIsCorpseThere[i+2] = IsCorpseAtGridNo( 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); gubWorldTileInLight[i+3] = InLightAtNight(i+3, gpWorldLevelData[ i+3 ].sHeight);
gubIsCorpseThere[i+3] = IsCorpseAtGridNo( i+3, gpWorldLevelData[ i+3 ].sHeight ); gubIsCorpseThere[i+3] = IsCorpseAtGridNo( i+3, gpWorldLevelData[ i+3 ].sHeight );
} }
} }
__except( EXCEPTION_EXECUTE_HANDLER ) __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 )
{ {
//loop through all the gridnos that we are interested in // WANNE: Ignore, so the game can continue ...
for (sYOffset = -30; sYOffset <= 30; ++sYOffset) }
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); for (sXOffset = -30; sXOffset <= 30; ++sXOffset)
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 ); sGridNo = tS->sGridNo + sXOffset + (MAXCOL * sYOffset);
SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, tS->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_WANTED_DIR);
} if ( sGridNo <= 0 || sGridNo >= WORLD_MAX )
}//fo continue;
}
}//if //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** //ddd enemy turn optimization**
#endif
// End our turn! // End our turn!
if (is_server || !is_client) if (is_server || !is_client)
-8
View File
@@ -10,12 +10,6 @@
#define _PATHAI_H #define _PATHAI_H
#include "isometric utils.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 { namespace ASTAR {
#include "BinaryHeap.hpp" #include "BinaryHeap.hpp"
#include <vector> #include <vector>
@@ -188,8 +182,6 @@ private:
};//end namespace ASTAR };//end namespace ASTAR
#endif// USE_ASTAR_PATHS
BOOLEAN InitPathAI( void ); BOOLEAN InitPathAI( void );
void ShutDownPathAI( void ); void ShutDownPathAI( void );
+27 -29
View File
@@ -49,12 +49,12 @@
class OBJECTTYPE; class OBJECTTYPE;
class SOLDIERTYPE; class SOLDIERTYPE;
#ifdef USE_ASTAR_PATHS
#include "BinaryHeap.hpp" #include "BinaryHeap.hpp"
#include "AIInternals.h"
#include "opplist.h" #include "opplist.h"
#include "weapons.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??? //#include "dnlprocesstalk.h"//dnl???
extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ]; extern UINT16 gubAnimSurfaceIndex[ TOTALBODYTYPES ][ NUMANIMATIONSTATES ];
@@ -454,9 +454,6 @@ UINT32 guiFailedPathChecks = 0;
UINT32 guiUnsuccessfulPathChecks = 0; UINT32 guiUnsuccessfulPathChecks = 0;
#endif #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, //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. //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 //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); fCloseGoodEnough = ( (fFlags & PATH_CLOSE_GOOD_ENOUGH) != 0);
fConsiderPersonAtDestAsObstacle = (BOOLEAN)( fPathingForPlayer && fPathAroundPeople && !(fFlags & PATH_IGNORE_PERSON_AT_DEST) ); 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" ) ); DebugMsg( TOPIC_JA2, DBG_LEVEL_0, String( "ASTAR: path failed, water" ) );
return( 0 ); return( 0 );
@@ -1390,7 +1387,7 @@ INT16 AStarPathfinder::CalcAP(int const terrainCost, UINT8 const direction)
} }
// Flugente: dragging someone // Flugente: dragging someone
if ( pSoldier->IsDraggingSomeone( ) ) if ( pSoldier->IsDragging( false ) )
{ {
movementAPCost *= gItemSettings.fDragAPCostModifier; movementAPCost *= gItemSettings.fDragAPCostModifier;
} }
@@ -2357,7 +2354,6 @@ bool AStarPathfinder::IsSomeoneInTheWay()
return false; return false;
} }
#endif//end ifdef USE_ASTAR_PATHS
INT8 RandomSkipListLevel( void ) INT8 RandomSkipListLevel( void )
{ {
@@ -2430,27 +2426,29 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 bLevel, INT16 usMov
{ {
s->sPlotSrcGrid = s->sGridNo; s->sPlotSrcGrid = s->sGridNo;
#ifdef USE_ASTAR_PATHS if (gGameSettings.fOptions[TOPTION_ALT_PATHFINDING])
//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))
{ {
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 //__try
//{ //{
INT32 iDestination = sDestination, iOrigination; INT32 iDestination = sDestination, iOrigination;
@@ -4210,7 +4208,7 @@ ENDOFLOOP:
//{ //{
// return (0); // return (0);
//} //}
#endif }
} }
void GlobalReachableTest( INT32 sStartGridNo ) void GlobalReachableTest( INT32 sStartGridNo )
+435 -587
View File
File diff suppressed because it is too large Load Diff
+3 -6
View File
@@ -145,14 +145,11 @@ UINT32 gSurfaceMemUsage;
//UINT8 gubWorldMovementCosts[ WORLD_MAX ][MAXDIR][2]; //UINT8 gubWorldMovementCosts[ WORLD_MAX ][MAXDIR][2];
UINT8 (*gubWorldMovementCosts)[MAXDIR][2] = NULL;//dnl ch43 260909 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 //ddd to speed up search of illuminated tiles in PATH AI
BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ]; BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ];
BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ]; BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ];
INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ]; INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ];
//ddd //ddd
#endif
// set to nonzero (locs of base gridno of structure are good) to have it defined by structure code // set to nonzero (locs of base gridno of structure are good) to have it defined by structure code
INT16 gsRecompileAreaTop = 0; INT16 gsRecompileAreaTop = 0;
-12
View File
@@ -281,18 +281,6 @@ typedef struct
// World Data // World Data
extern MAP_ELEMENT *gpWorldLevelData; 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 extern UINT8 (*gubWorldMovementCosts)[MAXDIR][2];//dnl ch43 260909
//dnl ch44 290909 Translation routine //dnl ch44 290909 Translation routine
+2
View File
@@ -6575,6 +6575,7 @@ STR16 zOptionsToggleText[] =
L"保持佣兵间距", // when multiple mercs are selected, they will try to keep their relative distances 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"显示已知敌人位置", //L"Show enemy location", show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--作弊模式选项--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--作弊模式选项--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"强制 Bobby Ray 送货", // force all pending Bobby Ray shipments L"强制 Bobby Ray 送货", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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"打开时,当选择多个佣兵,在前进时会保持彼此的间距。|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"打开时,会显示已知敌人最后移动的位置。", //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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"强制 Bobby Ray 出货", L"强制 Bobby Ray 出货",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -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"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"Show enemy location", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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 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, 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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Force all pending Bobby Ray shipments", L"Force all pending Bobby Ray shipments",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -6575,6 +6575,7 @@ STR16 zOptionsToggleText[] =
L"Formation Movement", // when multiple mercs are selected, they will try to keep their relative distances 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"Show enemy location", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Force Bobby Ray Shipments", // force all pending Bobby Ray shipments L"Force Bobby Ray Shipments", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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 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, shows last known enemy location.",
L"When ON, aiming at enemy will start at maximum aiming instead of default no aim", 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Force all pending Bobby Ray shipments", L"Force all pending Bobby Ray shipments",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -6582,6 +6582,7 @@ STR16 zOptionsToggleText[] =
L"Déplacement tactique", // when multiple mercs are selected, they will try to keep their relative distances 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"Show enemy location", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Options mode triche--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Options mode triche--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Forcer envois Bobby Ray", // force all pending Bobby Ray shipments L"Forcer envois Bobby Ray", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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 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, 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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Forcer tous les envois en attente de Bobby Ray", L"Forcer tous les envois en attente de Bobby Ray",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -6448,6 +6448,7 @@ STR16 zOptionsToggleText[] =
L"Bewegung in Formation", // when multiple mercs are selected, they will try to keep their relative distances 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"Show enemy location", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Erzwinge BR Lieferung", // force all pending Bobby Ray shipments L"Erzwinge BR Lieferung", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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 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, 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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Force all pending Bobby Ray shipments", L"Force all pending Bobby Ray shipments",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -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"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"Show enemy location", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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 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, 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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Force all pending Bobby Ray shipments", L"Force all pending Bobby Ray shipments",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -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"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"Show enemy location", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Cheat Mode Options--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments L"Force Bobby Ray shipments", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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 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, 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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Wymuś wszystkie oczekiwane dostawy od Bobby Ray's.", L"Wymuś wszystkie oczekiwane dostawy od Bobby Ray's.",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",
+2
View File
@@ -6571,6 +6571,7 @@ STR16 zOptionsToggleText[] =
L"Боевой порядок", // when multiple mercs are selected, they will try to keep their relative distances L"Боевой порядок", // when multiple mercs are selected, they will try to keep their relative distances
L"Показывать расположение", // show locator on last known enemy location L"Показывать расположение", // show locator on last known enemy location
L"Start at maximum aim", L"Start at maximum aim",
L"Alternative pathfinding",
L"--Читерские настройки--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER, L"--Читерские настройки--", // TOPTION_CHEAT_MODE_OPTIONS_HEADER,
L"Ускорить доставку Бобби Рэя", // force all pending Bobby Ray shipments L"Ускорить доставку Бобби Рэя", // force all pending Bobby Ray shipments
L"-----------------", // TOPTION_CHEAT_MODE_OPTIONS_END 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они будут пытаться сохранять взаимное расположение\nи дистанцию при движении\n(нажмите |C|t|r|l+|A|l|t+|G для переключения или |S|h|i|f|t + клик для движения).",
L"Если включено, показывает известное расположение противника\n(нажмите |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, 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"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_HEADER",
L"Выберите этот пункт,\nчтобы груз Бобби Рэя прибыл немедленно.", L"Выберите этот пункт,\nчтобы груз Бобби Рэя прибыл немедленно.",
L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END", L"(text not rendered)TOPTION_CHEAT_MODE_OPTIONS_END",