Skip to content

Conversation

@schell244
Copy link
Contributor

@schell244 schell244 commented Jan 2, 2026

🍰 Pullrequest

The extractor was logging warnings for models referenced in DBC files that don't actually exist in MPQ archives.
Added MPQFileExists() check before attempting to open model files, so only actual extraction failures are reported.

Also removed the misleading "A few of these warnings are expected"
message since warnings now indicate real problems.

  • Add MPQFileExists to prevent false warning messages
  • Improve single tile mmap building
  • Add fallback logic for model paths with space/underscore variants
  • Add interactive prompts for vmap resolution
  • Add "Press enter to close" prompts to prevent console from closing on error
  • fix tileY,tileX filename order in IntermediateValues.cpp (revert previous change)
  • buildSingleTile now always rebuilds the tile (overwrite existing)
  • improve .mmap connect command to record offmesh entries
  • added new offmesh to fix path between Mr. Smite bridge <-> ship

Proof

  • None

Issues

  • None

How2Test

  • None

Todo / Checklist

  • None

@schell244 schell244 changed the title Restore fixedName assignment in ExtractSingleModel Improve vmap extraction tool Jan 3, 2026
@mserajnik
Copy link
Contributor

Add interactive prompts for vmap resolution
Add "Press enter to close" prompts to prevent console from closing on error

Will this still allow for running the extraction unsupervised/without manual input? That's important to me for scripting purposes. 😄

Comment on lines 434 to 446
bool highRes = preciseVectorData;
std::string userInput;
std::cout << "Extract vmaps with high resolution? [y/n]" << std::endl;
std::getline(std::cin, userInput);
highRes = userInput.empty() || userInput.compare("y") == 0;
std::cout << "High resolution = " << highRes << std::endl;
std::cout << "Press enter to start extracting vmaps." << std::endl;
std::cout << "=====================================" << std::endl;
std::cin.get();

// Overwrite due to user input
preciseVectorData = highRes;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want to keep the prompts, to me it would also be fine to introduce a flag --non-interactive or something instead to be able to skip them.

Copy link
Contributor Author

@schell244 schell244 Jan 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for pointing that out. I might just open a second PR, adding promts for both maps/vmaps similar to how it's currently done in the mmap tool 👍 (diff is already big enough here 😅)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be very much appreciated if you want to give it a try 😇. A good point to check is .go c Glutton and see if he manages to walk through his 'narrow passage' – when Razorfen Leanto03 was broken, he just disappeared in the walls instead.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm unfortunately on vacation and don't really have the time to test it, but I'll gladly give it a spin when I'm back next week!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks and no worries, enjoy your vacation!🎉

@schell244 schell244 changed the title Improve vmap extraction tool Improvements for extraction tools (vmap/mmap) Jan 3, 2026
@mserajnik
Copy link
Contributor

Nice work with the Deadmines fix! Looking forward to give that a try.

Do you happen to have an idea how any of the following other pathing bugs could be fixed?
I assume offmesh connections won't be the solution in these cases.

@schell244
Copy link
Contributor Author

"RFD invisible wall issue" could already be fixed, since the patch that fixed parsing of “razorfen leanto03”, but have not checked that certain spot yet.

Using offmesh connections is the simplest way of patching up broken mmap spots without having to touch the overall logic. You can "force" a path between two points, which you declare in offmesh.txt.
The easiest way to record it is using .mmap connect (records point 1), then move to the point where you want to create a connection, run .mmap connect again, and it will create an offmesh entry in a file called offmesh_connections.txt, which you can then copy to the actual offmesh file that the mmap generator reads from. Afterwards just rebuild the tile where you added the path patch.

A useful command to check NPC pathing between you and another NPC is .mmap path - it will spawn those blue spirit waypoint NPCs along the path from your character to the selected NPC. If there is a "hole" or problem in between, the spawned waypoints will show that. Also what works well is spawning a pet and watching if it takes weird extra walks at certain spots.

@ShiyoKozuki
Copy link
Contributor

Nice work with the Deadmines fix! Looking forward to give that a try.

Do you happen to have an idea how any of the following other pathing bugs could be fixed? I assume offmesh connections won't be the solution in these cases.

* [Seemingly invisible walls in RFD](https://github.com/vmangos/core/issues/2516) (duplicate issue exists [here](https://github.com/vmangos/core/issues/2549))

* [Seemingly invisible wall in Azurelode Mine](https://github.com/vmangos/core/issues/2516#issuecomment-3440207582) (my comment, didn't want to create a new issue)

* [Pathing issue with a shipwreck in Wetlands](https://github.com/vmangos/core/issues/2858)

Gnomergan also has pathing issues in the big room on the elevator after Crowd Pummeler 9-60. The big room that has the elevator, but at the bottom level.

printf("Done.");

char mapFileName[255];
sprintf(mapFileName, "mmaps/%03u.mmap", mapID);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are you formatting this separately and not in the printf

processQueuedTiles();

char outputFileName[255];
sprintf(outputFileName, "mmaps/%03u%02u%02u.mmtile", mapID, tileY, tileX);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again why not do this inside the printf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants