For the record, as a mapping hint which was posted on Discord - I believe no one reads forums and hints - I think it can be used here too.
How to clean up reachspecs, more exactly how to build a clean network out of junk data.
#1 Command
Paths Undefine
#2 save Map and close Editor
#3 Open Editor and Map
#4 Command
Paths Define
#5 Save map and drink a beer.
Woow, amazing sci-fi, right ?
... And you can have a nice Clean-Up - do not believe me, just check it yourself.
Optional stuff: MapGarbage Editor builder can clean other bytes like VisNoReachPaths and other "fascinating internals" making things more simple and clean. All is usable even out of any XC_Engine or whatever add-ons.
This map demonstrates clearly that PathNode actor belongs to Skaarj not to UT Bot. You need to be aware of that...
Tiny techs for those understanding english and coding
Code: Select all
//newPath()
//- add new pathnode to level at position spot
void FPathBuilder::newPath(FVector spot)
{
guard(FPathBuilder::newPath);
if (Scout->CollisionHeight < 48) // fixme - base on Skaarj final height
spot.Z = spot.Z + 48 - Scout->CollisionHeight;
UClass *pathClass = FindObjectChecked<UClass>( ANY_PACKAGE, TEXT("PathNode") );
APathNode *addedPath = (APathNode *)Level->SpawnActor( pathClass, NAME_None, NULL, NULL, spot );
//clear pathnode reachspec lists
for (INT i=0; i<16; i++)
{
addedPath->Paths[i] = -1;
addedPath->upstreamPaths[i] = -1;
}
unguard;
};
Cleaner is unreferencing reachSpecs and I'm wondering if reachSpecs are removed or just incremented producing more and more
Code: Select all
/* Monster path
returns true if supports typical (Skaarj) movement requirements
*/
int FReachSpec::MonsterPath()
{
guard(FReachSpec::MonsterPath);
return ( (CollisionRadius >= COMMONRADIUS) && (CollisionHeight >= MINCOMMONHEIGHT)
&& !(reachFlags & R_FLY) );
unguard;
}
int FReachSpec::BotOnlyPath()
{
guard(FReachSpec::BotOnlyPath);
return ( CollisionRadius < MINCOMMONRADIUS );
unguard;
}
As for those RADIUS variables they are here:
Code: Select all
#define DEBUGGINGPATHS 1 //1 to put path info in log
#define MAXMARKERS 3000 //bound number of turn markers
#define MAXREACHSPECS 3000 //bound number of reachspecs
#define MAXCOMMONRADIUS 70 //max radius to consider in building paths
#define MAXCOMMONHEIGHT 70
#define MINCOMMONHEIGHT 48 //min typical height for non-human intelligent creatures
#define MINCOMMONRADIUS 24 //min typical radius for non-human intelligent creatures
#define COMMONRADIUS 52 //max typical radius of intelligent creatures
#define HUMANRADIUS 18 //normal player pawn radius
#define HUMANHEIGHT 39 //normal playerpawn height
The plonk: MonsterPath is not considered True if it includes a R_FLY flag ? However, a Manta (is monster all day long) can use a R_FLY path, okay, okay plain UT 436 Editor will never build R_FLY paths... that's another story perfectly demonstrated by whatever UG227 capable to do more here.