MapChecker

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

Re: MapChecker

Post by Buggie »

Which package be missed?
User avatar
fudgonaut
Adept
Posts: 365
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"

Re: MapChecker

Post by fudgonaut »

Buggie wrote: Which package be missed?
For some reason my Monster Hunt package was incomplete. I re-installed it and the editor loaded with MapChecker.
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

- Removed dependency to MonsterHunt.u

Updated in the first post: viewtopic.php?p=131447#p131447
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkShortcut();
	checkUnlockInventory();
	checkScriptedPawnMovement();
	checkTeamCannons();
	checkZoneInfoAmbientBrightness();
	checkMonsterHuntAssaultRandomizer();
	checkMonsterHuntAssaultBonusPackActors();
	checkTeleporterRelevance();
	checkCounterCount();
	checkTeleporterURL();
	checkDispatcherLoop();
	checkInventorySpotMarkedItem();
	checkLevelInfoCount();
	checkDecorationFragments();
	checkMonsterHuntTriggerType();
	checkPathNodeNotUsed();
	checkPathNodeClose();
	checkCeilingGunBase();
	checkGrBase();
	checkMoverScale();
	checkTeamCannon();
Updated in the first post: viewtopic.php?p=131447#p131447
User avatar
sektor2111
Godlike
Posts: 6438
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: MapChecker

Post by sektor2111 »

With regard to this section

Code: Select all

....
foreach LevelInfo.AllActors(class'ScriptedPawn', A) {
		if (A.RangedProjectile == class'GuidedWarShell') { // Plasma too?
			if (Header != "") {
				Log(Header);
				Header = "";
			}
			LogProblem(A);
		}
There are stock projectile classes which are not exactly projectiles or useless (zero speed and zero damage), like are having certain Tentacles from "ported" map MH-Gauntlet (those projectiles are only falling down not at enemy direction).
Also here it would be needed checks for Non-Projectiles used as projectiles spamming actors. Some Skaarj in whatever map were firing ASMD - it was just a miserable setup.

Paths
By deleting a PathNode without Paths and not rebuilding Paths will result a screwed up NavigationPointlist. Previous node having deleted node as nextNavigationPoint will break chain. All Nodes from map are chained even if they are in void or not having paths after building paths due some factors (void, far away, too high isolated in the sky, buried in walls or floors, etc.). If some PlayerStart actors are lost from chain, even if these are inactive they can be in account for spawn due to secondary iterator deal, and player might spawn in other disabled area, either way navigation will get screwed up from certain point toward. Path searching is based on NavigationPointlist which needs to be Valid.
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

It is not silver bullet. neither it is not "push for fix" solution.
It is simple checker.

It is mean it is not cover all cases. I try collect some, but obviously can not catch all.

And this tool produce hints. You can decide take it account or no. Possible hint is wrong and must be ignored.

Most auto-fix is fast but dirty. And not fit all possible scenarios. So need use fix (even if use) only after first pass without fixes and read output. And only if you fine for fix some issues in "some" way. Not necessary "proper" way.

Also after apply any fixes and make release better rebuilt paths and lights. But it obvious and must be done almost before any release of map.

Finally v469c rebuild NavigationPoint list on map load. So you can drop PathNodes and this not harm on v469c.
User avatar
sektor2111
Godlike
Posts: 6438
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: MapChecker

Post by sektor2111 »

I understand... So for version 469c I have to write a ServerActor for fixing the fix. I don't need InventorySpots from walls and Invalid Nodes relinked in Navigation chain. When map is corrupted this is not an answer at all.
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

As you fish. Possible this can break some stuff which related to fact - any nav node in list. Anyway it is not subject of this topic.

Return to checker- use fix or just check before built paths is bad idea. Checker try detect state paths not rebuilt, but easily can fail with that,
So you place 100 PathNodes, run with fix and all nodes removed, because firstly need rebuilt paths. Only after that apply fix.

Anyway simple run without fix not modify anything so safe for call even if paths not built.

Biggest problem -huge flood in the log.
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkMoverMoveTime();
	checkTeleporterGroupDirection();
	checkCommander();
	checkInventoryCharge();
	checkMonsterHuntMonsterEndHidden();
Updated in the first post: viewtopic.php?p=131447#p131447
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkLevelInfo();
Better detect proper LevelInfo.

Updated in the first post: viewtopic.php?p=131447#p131447[hr][/hr]

Automatically merged

Add check for missed screenshot.
User avatar
Gustavo6046
Godlike
Posts: 1462
Joined: Mon Jun 01, 2015 7:08 pm
Personal rank: Resident Wallaby
Location: Porto Alegre, Brazil

Re: MapChecker

Post by Gustavo6046 »

What if we contributed to make (and collectively curate) a large list of issues in map, and then each of them can have a Detector and Fixer method that we can add to an ultimate automatic map cleanup tool?

Kinda like ShellCheck has its list of common shell script issues, and each has its own suggestions for fixes.

The hyper-trigger Sektor described could be one of the issues.

Hell, just use doc comments and use Doxygen or something to generate the actual documentation/wiki page for the corresponding issue.
"Everyone is an idea man. Everybody thinks they have a revolutionary new game concept that no one else has ever thought of. Having cool ideas will rarely get you anywhere in the games industry. You have to be able to implement your ideas or provide some useful skill. Never join a project whose idea man or leader has no obvious development skills. Never join a project that only has a web designer. You have your own ideas. Focus on them carefully and in small chunks and you will be able to develop cool projects."

Weapon of Destruction
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

It is simple tool. You can "fork" it for start and write bunch of check and fixes.
But usually fixes good only for very specific cases. Normally need manually review issue,
Buggie
Godlike
Posts: 3171
Joined: Sat Mar 21, 2020 5:32 am

Re: MapChecker

Post by Buggie »

Added more checks:

Code: Select all

	checkNavigationPointInGround();
	checkUTJumpPadNoDelete();
Updated in the first post: viewtopic.php?f=5&t=14809
User avatar
sektor2111
Godlike
Posts: 6438
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: MapChecker

Post by sektor2111 »

I was tempted to discuss about NavigationPointlist - swJumpPads more exactly added in Mylevel and... NOT SET as static stuff, client game re-creating copies which aren't original, reachspecs from clients referencing NULL nodes from nowhere, On-Line (not always a problem, but logic is NONE here). Static things as Navigation in my opinion should stay. swJumpPad are even pointless calling functions in clients when actually they are not original and not even needed, and all navigation is guided from SERVER.
If a Navigation Point is delegated to have a dynamic activity (such as changing aspect) that one probably is recommended as bNoDelete - this is what I've learned from these assets, or else it will be reconstructed and let me see, a new linker is created, original remaining messed up. Now I'm curious to find out what Garbage Collector does at this point. In my opinion Navigation chain SHOULD STAY untouched - and here if we don't have bStatic = True at least we should stick to bNoDelete = True. Deletion of navigation actors in client has no good purpose.

Question: Which map uses these teleporters ?

Code: Select all

if (A.isA('UTJumpPad') && A.bNoDelete != (A.URL != ""))
PS: I did my goofing here, as long as I did not check them in detail. A future version of MapGarbage will do a check concerning these things...

Resuming: When I'll find a Map having Teleporters whatever set as bNoDelete = False - I'll switch them to TRUE including their default CLASS properties.

Edit:
Either way, Epic did DYNAMIC navigation points themselves - frankly LiftCenter is a plain stock sample about "dynamics" - not much replicated but... original in all stages: Client and Server... nothing touched.
LC_Sample.PNG
You do not have the required permissions to view the files attached to this post.
Last edited by sektor2111 on Sat Apr 09, 2022 11:37 am, edited 2 times in total.