If we talk about 1999 and weak CPU-s - show me your amazing UBER CPU in MH-GardenOfDeath with this way of your "pathing"
. Good luck with that... Yes, it's 2020, lol.
You simply don't get that we have CONST values, hard-coded things which are causing locks and errors when all goes over those "arrays" disregarding how strong is your CPU, and this is UT99.
I'm not against a Great Pathing Network, I'm against when it comes at NOT RESPECTING UnPath.h rules. Yes, my edited map has poor paths - I WANTED that, it's my practice, but yours is crazy - 7000+ reachSpecs in Deck16
,
Code: Select all
MaxNumFound: I found 7154 reachspecs, from 0 to 7153.
both of them are working in end, but in servers people are running more things, you don't need to send all
CPU Engine power for paths processing. Then no I did not say that this is my blog, so let's get rid of miss-understanding excuses because it's not a mature thing at all. Show me something clean and simple, and let's keep being constructive inside engine instead of going out engine and then bug-reporting our own junks.
As a side effect, I would like to know which programmers are writing apps for Android like you do paths in UT, because I will simple IGNORE them all. These CPU intensive things are the last thing for a device battery powered. This is Not An Optimization in any way and it's not demonstrating anything.
Polge said what he said because he knew what he did, you can stop dreaming at CPU stories because things are not working that way. This was already said in forum X times by smarter people than you and me together + others.
Code: Select all
int APawn::breadthPathFrom(AActor *start, AActor *&bestPath, int bSinglePath, int moveFlags)
{
guard(APawn::breadthPathFrom);
//FIXME - perhaps track and bound number of edges to search or max depth?
ANavigationPoint* currentnode = (ANavigationPoint *)start;
ANavigationPoint* nextnode;
ANavigationPoint* BinTree = currentnode;
int iRadius = (int)CollisionRadius;
int iHeight = (int)CollisionHeight;
int p = 0;
int n = 0;
int realSplit = 1;
FReachSpec *spec;
while ( currentnode )
{
if ( currentnode->bEndPoint )
{
//debugf("best path is %s", currentnode->GetName());
((ANavigationPoint *)start)->previousPath = NULL;
bestPath = currentnode;
return 1;
}
if ( (!currentnode->bPlayerOnly || bIsPlayer) || (currentnode == start) )
{
int i = 0;
while ( i<16 )
{
if (currentnode->upstreamPaths[i] == -1)
i = 16;
else
{
spec = &GetLevel()->ReachSpecs(currentnode->upstreamPaths[i]);
//debugf("check path from %s to %s with %d, %d",spec->Start->GetName(), spec->End->GetName(), spec->CollisionRadius, spec->CollisionHeight);
if (spec->supports(iRadius, iHeight, moveFlags))
{
ANavigationPoint* startnode = (ANavigationPoint* )spec->Start;
int nextweight = spec->distance + startnode->cost;
int newVisit = nextweight + currentnode->visitedWeight + startnode->bEndPoint * startnode->bestPathWeight;
//debugf("Path from %s to %s costs %d total %d versus %d", spec->Start->GetName(), spec->End->GetName(), nextweight, newVisit, startnode->visitedWeight);
if ( startnode->visitedWeight > newVisit )
{
if ( startnode->prevOrdered ) //remove from old position
{
startnode->prevOrdered->nextOrdered = startnode->nextOrdered;
if (startnode->nextOrdered)
startnode->nextOrdered->prevOrdered = startnode->prevOrdered;
if ( BinTree == startnode )
{
if ( startnode->prevOrdered->visitedWeight > newVisit )
BinTree = startnode->prevOrdered;
}
else if ( (startnode->visitedWeight > BinTree->visitedWeight)
&& (newVisit < BinTree->visitedWeight) )
realSplit--;
}
else if ( newVisit > BinTree->visitedWeight )
realSplit++;
else
realSplit--;
//debugf("find spot for %s with BinTree = %s",startnode->GetName(), BinTree->GetName());
startnode->previousPath = currentnode;
startnode->visitedWeight = newVisit;
if ( BinTree->visitedWeight < startnode->visitedWeight )
nextnode = BinTree;
else
nextnode = currentnode;
//debugf(" start at %s with %d to place %s with %d",nextnode->GetName(),nextnode->visitedWeight, startnode->GetName(), startnode->visitedWeight);
int numList = 0; //TEMP FIXME
while ( nextnode->nextOrdered && (nextnode->nextOrdered->visitedWeight < startnode->visitedWeight) )
{
numList++;
if ( numList > 500 )
{
debugf( TEXT("Breadth path list overflow from %s"), start->GetName() );
return 0;
}
nextnode = nextnode->nextOrdered;
}
if (nextnode->nextOrdered != startnode)
{
if (nextnode->nextOrdered)
nextnode->nextOrdered->prevOrdered = startnode;
startnode->nextOrdered = nextnode->nextOrdered;
nextnode->nextOrdered = startnode;
startnode->prevOrdered = nextnode;
}
//if (startnode->nextOrdered)
// debugf(" place %s after %s before %s ", startnode->GetName(), nextnode->GetName(), startnode->nextOrdered->GetName());
//else
// debugf(" place %s after %s at end ", startnode->GetName(), nextnode->GetName());
}
}
i++;
}
}
realSplit++;
int move = (int)(0.5 * realSplit);
while ( p < move )
{
p++;
if (BinTree->nextOrdered)
BinTree = BinTree->nextOrdered;
}
}
n++;
if ( bSinglePath && ( n > 4) )
return 0;
if ( n > 1000 )
{
debugf(NAME_DevPath, TEXT("1000 navigation nodes searched from %s!"), start->GetName() );
return 0;
}
//debugf("Done with %s",currentnode->GetName());
currentnode = currentnode->nextOrdered;
/*
nextnode = currentnode;
while (nextnode)
{
debugf("Next %s",nextnode->GetName());
nextnode = nextnode->nextOrdered;
}
*/
}
//debugf("No path found");
return 0;
unguard;
}
n > 1000 is the same for ANY CPU in 1999 and 2021 like other LIMITS happily hard-coded - yeah, CPU-s
, there is nothing beyond 1000 even on a NASA machine. When map is insanely loaded 1000 Paths boundary is closer and closer. What for ? After 1000 it doesn't show anything. Is this the only limitation in UE1 ? NO, it's not... Past recalls: I'm nominating MH-LandsOfNapali, MH-LostInTimeV3 - another muppets shows for DevPath - see what logs are saying - Bot Support for stronger machines = Myths - thanks that this map is small, lol. Then, that Vortex map in HomeBase room was another demonstration of a nothing usable. Probably it's why people knowing stuff won't say more due to this sort of reaction: My edit is great, yours is poor, when actually you are far from doing things as should - inside arrays, and of course I'm not pleasing anybody for using my edits - that's my point of view - I think you have noticed Higor's reaction at that Vortex room which I mentioned... Else if here paths are toggled using some mutator, probably engine will hit another boundary with that "500" limitation - even Barbie knows it, I posted that before... exactly. So be happy trying harder to get over limits or closer to them. I don't understand this "art".
Okay, there is no problem, at your next map editing topic I won't bother to read, post or download anything - this way is not for me or my devs, so you don't have to be upset or angry at me, okay, we are on different grounds here, me one I'm inside Engine, you are trying to escape, good luck with that.
@Barbie - You might want to drop an eye at that 227. Perhaps you'll find some entertaining stuff for use... ?
EDIT: If it comes to images showing Evil stuff by sektor, let's see the images from the side with amazing optimization for Stronger CPUs a la 2020.
Improved paths, huh ? Such things are always looping, it's a lucky shot if these are not used due to other shortest routes, lol, or else only in a combat situation they leave these:
PreviousPath found in two nearby nodes it's not exactly a need, not mention similar NextNavigationpoint and PreviousPath which takes place in spots dedicated for "natural movement".
Why are these good ? For showing "How Not To Do".
f7r wrote: ↑Tue Nov 03, 2020 12:55 pm
But interestingly, they began to arrange mass battle in unexpected places.
Yeah, one of them loops in spot and not leaving, next one comes around, and next one. OMG, whatta fight
. After 10 games you will know where to drop a combo shock killing 3 at once. It's why Bot should do some pruning to RouteCache 2, 3, or whatever - plain Bot won't do this.
Another time in similar places from various other maps I'll show you when they run in circle ignoring each-other and ignoring all your CPU fantasies, these are logic reactions of these devs and it's why Polge told what he told - paths are mapped through multiple directions and there are chances to have duplicated data in certain spots - see images, I'm not talking crap, it's not only about CPU, it's a logical processing method going wrong due to overcrowding spots. I hope tomorrow you won't try to put two wheels in the same place of your car...
You do not have the required permissions to view the files attached to this post.