MapChecker

Tutorials and discussions about Mapping - Introduce your own ones!
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Red_Fist wrote: Tue Aug 08, 2023 8:34 pm When it says pathbides are too high or too low with that number.

What does the number mean

1 UU unit ?
It finds a lot of those but the numbers seem so low, like 12, or 1, ur 40, how large does the number have to be to be worth messing around with all those nodes. ?
Yes. It is uu units. Basically checker ensure navigation points not going into ground. It depends from used collision height. Usually bots fine with such points, but sometimes it can cause problems.
So better fix it. Also it can point to some things, which not visible. Like BSP errors.

In general solve this is completely optional. Also it can be autofix, althrough only with other stuff. No separate mode for fix.   
Auto merged new post submitted 12 minutes later
OjitroC wrote: Tue Aug 08, 2023 10:06 pm Can you explain what BadStandingCount is/means? Thanks.
Engine keep count actors which use this actor as Base. This count keep in counter StandingCount, which is const and managed by engine. Same as Base.
You can't set Base directly, you need call SetBase. When it called it decrement StandingCount for old base if any, and increment on new.
That how it supposed work.

But in editor you can set Base directly, same as StandingCount, and save level. Since game not do any init of this values, bug: https://github.com/OldUnreal/UnrealTour ... ssues/1341
It goes be messed. StandingCount not more correspond count actor use it for Base.

StandingCount use data type byte. so it easy can be overflowed. So from 255 it goes to 0, after add 1.

StandingCount used as flag or cache in some parts of engine code. Most notable part - Movers. If StandingCount == 0, then engine think there no attached actors, and for save resources not search attached actors, and not move it.

You can see such example on Bania map. When you stay on lift you can fall from it if it goes down, or it jerk and push into floor when goes up. it is exactly by this bug.
StandingCount on mover is 255. And it never reset. It only increment or decrement. So when you stay on lift, it increments, and because of overflow, goes to 0.
0 is special value, so your position not updated when mover move, and you start fall or push into mover, where collision code push you back, which produce jerking up and down.

Normally, map must have all values in sync. Usually this mean all Base is None, all StandingCount is zero.
You can use some kind of trick, make Base set to something in UnrealEd, but need update StandingCount too. Possible exists other things, not sure.

On github I make dirty check for maps, which contain sub-string "StandingCount". This usually mean non-zero value and high-likely such bug. You can see list of such map on link above.

For simplest solution - select all actors on map, set Base for them to none, and StandingCount to zero. You can find both in Hidden section for Actor.   
Auto merged new post submitted 13 minutes later
Another possible issue, despite I found with standing on lift - is destroy paths. LiftCenter must move together with Mover. But if mover in desync for StandingCount, it can turn to zero in some cases, so position of actor not update, when must.
For Pawn actors, which able move self, it bad, but not fatal. but even here, if lift horizontal, not vertical, you simple can't use it, since collision code not help you. You not push into mover. Mover simple move below you.
But, you can move self, and limited by level geometry.
Special actors, like LiftCenter not move self, and not collide with geometry, They intended move back and forth on mover movement, but since StandingCount broken, there can be turn to zero, when such actors still attached.
Usually this mean move only in one way. Lift goes up, LiftCenter not updated location. Lift goes down - LiftCenter update own position.
This happen because lift more often use for ride back. Down it travel empty.
If StandingCount is 255, then when player on it it goes to be 0, and travel up, not move LiftCenter.
Pawn exit fro lift, lift after timeout goes down, StandingCount id 255, because when Pawn exit, value decrements and goes overflow.
LiftCenter travel down. On each such loop it travel down and down. And exit from world geometry. But it still in network grid, so this confuse bots and ruin paths logic. Bots or stuck or want walk into walls, or so something else.

There can be more other example, I think. All related to not update position of based actors.
User avatar
OjitroC
Godlike
Posts: 3687
Joined: Sat Sep 12, 2015 8:46 pm

Re: MapChecker

Post by OjitroC »

A couple of things I have noticed with the latest version :

Code: Select all

MapChecker: Actor with wrong StandingCount (fix this number or set it to zero + set Base to None on all listed Actors):
No specific Actor is listed as having a wrong StandingCount.

Code: Select all

MapChecker: Brush share Model with another Brush
This is all that is stated - normally the Brush numbers and Model number are stated.
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

It usually come on next line. Please specify full log.   
Auto merged new post submitted 2 minutes later
Also look into Editor.log, since lines can be really long. I think it about LevelInfo. I think for LevelInfo It ok be wrong StandingCount, since it is not Mover, but who knows.   
Auto merged new post submitted 4 minutes later
From what I see, engine use StandingCount in DestroyActor (for set base to None) and in Move/FarMove, for move attached actors. So It can be safely Ignored for LevelInfo, since it can't be destroyed, and attempt move it, not make anything good, AFAIK.
User avatar
OjitroC
Godlike
Posts: 3687
Joined: Sat Sep 12, 2015 8:46 pm

Re: MapChecker

Post by OjitroC »

Buggie wrote: Wed Aug 09, 2023 12:21 am It usually come on next line. Please specify full log.   

Also look into Editor.log, since lines can be really long. I think it about LevelInfo. I think for LevelInfo It ok be wrong StandingCount, since it is not Mover, but who knows.   

From what I see, engine use StandingCount in DestroyActor (for set base to None) and in Move/FarMove, for move attached actors. So It can be safely Ignored for LevelInfo, since it can't be destroyed, and attempt move it, not make anything good, AFAIK.
Yeah, my bad - just looked in the log from inside the Editor (in which there was no list). From the Editor.Log there is

Code: Select all

LevelInfo0 StandingCount = 0, but must be 171
plus a list of all the plants (c170 in total) in the map.

So presumably none of that is of much importance?

Possibly no details were given of Brushes sharing models because there are 6 or so Brushes with duplicate names.
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Improved some checks:
- checkBrushSameModel
- checkBadStandingCount

Updated in first post: viewtopic.php?f=5&t=14809    
Auto merged new post submitted 3 minutes later
OjitroC wrote: Wed Aug 09, 2023 1:24 am Possibly no details were given of Brushes sharing models because there are 6 or so Brushes with duplicate names.
Yea. It can be reason if it somehow appear in Actor list as duplicates. Possible same actor listed few times.
I correct show message only if actually two not same brushes found. but in general it is strange.
Or check for equality check names, or there one actor listed in actor list few times.

From other side - appeareance of duplictes caused by memory corruption, so this quite possible.
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

- Improve fix for close pathNodes for case XV WalkPathNode's

Updated in first post: viewtopic.php?f=5&t=14809
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkVehicleDefensePointRotation();
	checkOldXVActors();
	checkLevelInfoTimeDilation();
	
	XV:
	checkAlternatePathNodes();
XV submodule now require XV v59+ for load.

Updated in first post: viewtopic.php?f=5&t=14809
Red_Fist
Godlike
Posts: 2172
Joined: Sun Oct 05, 2008 3:31 am

Re: MapChecker

Post by Red_Fist »

I get this

MapChecker: SmokeGenerator without bNoDelete or bAlwaysRelevant
MapChecker: ShortSmokeGen10
MapChecker: ShortSmokeGen12
MapChecker: ShortSmokeGen11


But they all seem to have UT stock (default) settings. also default is GameRelevant as,, true

Nothing to fix, so I am wondering, what's the deal.
Binary Space Partitioning
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Stock settings not meant it is good.

"bAlwaysRelevant" in message, you talk about "GameRelevant". Is is not same.

According to message you need set bNoDelete or bAlwaysRelevant on it.
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkEmbedTextures();
Fixed and improved some other checks.

Updated in first post: viewtopic.php?f=5&t=14809
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkActorsLevel();
Fixed and improved some other checks.

Updated in first post: viewtopic.php?f=5&t=14809
User avatar
OjitroC
Godlike
Posts: 3687
Joined: Sat Sep 12, 2015 8:46 pm

Re: MapChecker

Post by OjitroC »

Buggie wrote: Wed Oct 04, 2023 8:29 am Added more checks:

Code: Select all

	checkActorsLevel();
Can you explain what this means/does? Thanks.
User avatar
Barbie
Godlike
Posts: 2835
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: MapChecker

Post by Barbie »

It checks if Actor's "Level" is empty. If so, it is logged. (But don't ask me why this can happen…)

Actor's "Level" declaration in class'Actor':

Code: Select all

class Actor extends Object
	abstract
	native
	nativereplication;

// Scriptable.
var       const LevelInfo Level;         // Level this actor is on.
"If Origin not in center it be not in center." --Buggie
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

It can happen if variable shadowed.
https://github.com/OldUnreal/UnrealTour ... ssues/1400
Buggie
Godlike
Posts: 2783
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkProjectiles();
Fixed some other checks.

Updated in first post: viewtopic.php?f=5&t=14809