Commit Graph

89 Commits

Author SHA1 Message Date
Shauren
e2f80f8f6c Tools/mmaps_generator: Namespace/include cleanup 2025-10-17 12:47:33 +02:00
Shauren
6b41c3d327 Core/MMaps: Improve mmap debugging experience for terrain swap maps
* Output terrain map id in `.mmap loc` command
* Suppress file not found errors for terrain swap maps
* Fix generating single tiles for terrain swap maps (--tile argument)
2025-10-02 13:43:45 +02:00
Shauren
8a00ab1561 Tools/mmaps_generator: Fixed tile detection for vmap-only maps after a0f13391a0 2025-07-23 21:45:24 +02:00
Shauren
d778d5ec7c Core/Misc: Include cleanup - remove MapUtils.h from Containers.h 2024-12-31 18:12:36 +01:00
Shauren
b13b5142f1 Core/Utilities: Extend make_unique_ptr_with_deleter functionality to allow it to create deleters with compile time constant functions (reduces its size to just sizeof(void*)) 2024-10-01 21:03:44 +02:00
thesillyone
a59f7351dd Tools/mmaps_generator: Only initialize memory for inds mesh when it will be read (#29795)
* this change does NOT require re-generating mmaps
2024-03-25 23:35:40 +01:00
Shauren
67244a1f70 Core/Misc: Replace sprintf with safer alternatives (Trinity::StringFormat or snprintf) 2024-03-01 16:05:34 +01:00
Shauren
348e29c79f Tools/mmaps_generator: Allow specifying custom offmesh area/flags 2023-10-16 10:55:34 +02:00
Shauren
d791afae1d Core/Logging: Switch from fmt::sprintf to fmt::format (c++20 standard compatible api) 2023-01-08 21:16:53 +01:00
robinsch
364796dc3b Tool/MMAP: Fixed invalid check causing certain tiles not to build (#27833)
example: mmaps_generator 230 will cause tile 33, 29 to not build because of the check. causing NPCs to not have mmap information in some parts of the map.

.go xyz 1380 -831 -88 230 has no mmap tile information because of above check.
https://i.imgur.com/Pypeu4f.png

(cherry picked from commit e898b6e794)
2022-03-26 15:28:07 +01:00
Shauren
439b027d48 Core/Misc: Cleanup unused includes 2022-02-13 15:07:00 +01:00
jackpoz
071a8b5b7d Core/Misc: Remove whitespace
(cherry picked from commit 869fb748cd)
2022-01-04 20:44:26 +01:00
jackpoz
be7acb2527 Core/MMAPs: Reduce chances of breaking tile connections
Reduce chances of breaking tile connections caused by floating point rounding issues.

(cherry picked from commit e615e2ddef)
2022-01-04 20:44:26 +01:00
Giacomo Pozzoni
89e183704c Improve multithreading of mmaps_generator (#25625)
* Build/Misc: Add a few *San CMake flags

Add the following flags for the related tools:
- MSAN for Memory Sanitizer
- UBSAN for Undefined Behavior Sanitizer
- TSAN for Thread Sanitizer

* Remove unused parameter

* Fix UBSan reported issue

* Disable G3D buffer pools when using Thread Sanitizer as it has its custom locking mechanisms

* Code cleanup

* Move threads from maps to tiles

* Move tile building logic to TileBuilder class

* Fix memory leak in TileBuilder

* Fix build

* Store TileBuilder as raw pointer for now, it will be changed later on to use modern C++ constructs

* Fix crash on shutdown

* Revert pvs-studio change

* Fix generating 1 single tile not closing the program

(cherry picked from commit a4e93d779c)
2022-01-04 20:44:25 +01:00
Shauren
1d0ca1106f Tools/mmaps_generator: Made loading vmaps by mmaps_generator threadsafe 2022-01-04 20:44:22 +01:00
jackpoz
3820aabcd8 Core/MMAPs: Restore single slope angle of 55°
Re-generating MMAPs IS required.
Partially reverts 995a443da2 .

Having 2 different slope angles of 55° and 85° created too many polygons to fit in the current mmtile structure. This caused some polygons to become disconnected from each other, creating the old "invisible walls" effect. Because of this and because of the performance hit when loading a mmtile caused by the increase of polygon numbers, this commit reverts the recent changes and sets by default the slope angle to 55°.
Feel free to restore the previous behaviour by running .\mmaps_generator --maxAngle 85 --maxAngleNotSteep 55 , specifying the map id as number if a single map should have different slope values.
This is the last commit that will change MMAPs version to force re-generating them. Any future change that will affect only the generation settings will be optional (but recommended).

(cherry picked from commit 3947e4cb57)
2022-01-04 20:44:02 +01:00
Giacomo Pozzoni
782a943b38 Tools/MMapsGenerator: Add some more input parameters to improve mmaps load performances (#25520)
* Some research about mmaps load performances

* Tools/MMapsGenerator: Add some more input parameters

Add some more input parameters which affect the resulting mmaps:
- --smallOutputSize: sets both walkableSlopeAngle and walkableSlopeAngleNotSteep to 55°, reducing by a lot the .mmtile size and the number of polys. A rcFilterLedgeSpans() call is included too to filter out some polys. Default to false.
- --maxAngle: Restore this parameter removed some commits ago. Specifies the max walkable angle of a Creature when in combat. Default to 85
- --maxAngleNotSteep: Max walkable angle of a Player and of a Creature out of combat. Must be less or equal than --maxAngle. Default to 55.

A performance profiling comparison highlighted that .mmtile load grows exponential with the number of polys. A small server with GridUnload enabled and without preloading all grids on startup will be more affected than a big server with GridUnload disabled and preloading grids on startup.

(cherry picked from commit b6e205f7ef)
2022-01-04 20:44:02 +01:00
Giacomo Pozzoni
d58d0e895c Handle different slopes in mmaps (#24765)
* Tools/MMAPs: Remove input argument --maxAngle

Remove input argument --maxAngle . This should be just hardcoded in MapBuilder::GetMapSpecificConfig() so all settings are easily found in the same place instead of being spread around.

* Tools/MMAPs: Add new area type NAV_AREA_GROUND_STEEP

Add new area type NAV_AREA_GROUND_STEEP for ground with slope in the range (55, 70] .
NAV_AREA_GROUND is used for ground with range [0, 55] .
NAV_AREA_GROUND_STEEP takes priority over NAV_AREA_GROUND.

* Tools/MMAPs: Fix NAV_GROUND_STEEP flag not being saved in the mmtile

* Core/PathFinding: Implement NAV_GROUND_STEEP flag

Implement NAV_GROUND_STEEP flag, used only by Creatures that are in combat or evading.

* Distinguish between RC_WALKABLE_AREA and NAV_AREA_GROUND.

* Allow mobs in combat to walk on steeps up to 80°

* Allow mobs in combat to walk on steeps up to 85°.
Disable rcFilterLedgeSpans() filter as it removed long steep spans.

* Increase cost of steep spans to try making creatures walk around obstacles instead of walking on them

* Revert last commit

(cherry picked from commit 995a443da2)
2022-01-04 20:44:02 +01:00
Giacomo Pozzoni
89afeed41b Core/MMAPs: Adjust walkable climb and fix a lot of mmap raycast issues (#24539)
* Core/MMAPs: Adjust walkable climb

Adjust walkable climb as recast using walkableClimb also to find the poly from a position, giving priority to polys that are below the position but closer than walkableClimb.

* Temporarily disable static collision (the whole check should be removed)

* Core/Spells: removed deprecated mmap path check for TARGET_DEST_CASTER_FRONT_LEAP

* Core/Objects: allow flying units to use the helper as well (flying units casting radius based spells)

* Code refactor

* Handle raycasts that end in a point with no height in the mmap mesh as PATHFIND_NOPATH

* Walk back a bit from raycast hitpoints as sometime the 2D result point is outside of the polygons due to floating point errors.

* Remove whitespace

* Revert 4a197ba22a as a raycast point path should have the Z retrieved with getPolyHeight(). Raycast will only return a 2-point path with Start and Hitpoint/End

* Cleanup PathGenerator raycast case

* Fix PathGenerator raycast broken if start and end are on same poly.
Fix PathGenerator raycast broken if no wall is hit.
Remove unused case of using raycast with an existing previous path (can be added back properly if needed).
Remove forcing poly length to 2 when we actually have already the right number.

* Use closestPointOnPolyBoundary on the second try of finding a point on poly for raycast.
Note that in this case the mesh height is not used which might cause issues. The poly boundary height will be used instead.

* Handle cases where getPolyHeight() fails because the point is on polygon border (and caused by floating point imprecision)

* Add far from poly flags

* Set PATHFIND_INCOMPLETE in raycast case if startFarFromPoly or endFarFromPoly

* Fix blink close to walls with no valid polygon behind the wall

* Require to re-extract mmaps

Co-authored-by: Ovah <dreadkiller@gmx.de>
(cherry picked from commit c0b75bf40d)
2022-01-04 15:33:04 +01:00
jackpoz
2f30a9986c Tools/MMaps: Fix strange paths in Blackfathom Deeps
Increase the agent height by x2 to reduce the chance of having underground mmap layers wrongly picked by recast.

(cherry picked from commit 3b0a89a2ea)
2021-12-22 13:03:21 +01:00
Shauren
bfde919694 Tools/mmaps_generator: Replace hardcoded map ids with db2 data checks 2021-12-20 20:50:28 +01:00
Giacomo Pozzoni
dd929665e5 Core/PathGenerator: Fix path generator returning shortcuts when start and end are on the same polygon (#24036)
* Core/PathGenerator: Fix path generator returning shortcuts when start and end are on the same polygon

Fix path generator returning shortcuts when start and end are on the same polygon by handling this case as if start and end were on 2 different polygons. This will ensure BuildPointPath() gets called which calls FindSmoothPath(), making sure each step is not longer than SMOOTH_PATH_STEP_SIZE (4 yards)

* Change ingame cast error message to SPELL_FAILED_NOPATH from SPELL_FAILED_OUT_OF_RANGE if the generated path is too long

(cherry picked from commit 29bf280e34)
2021-12-20 20:35:37 +01:00
jackpoz
2318013278 Core/MMaps: Add rcMedianFilterWalkableArea() to mmaps generation process
Add rcMedianFilterWalkableArea() to mmaps generation process to simplify some ground/water areas

(cherry picked from commit 7ddbc18aaf)
2021-11-23 23:43:55 +01:00
jackpoz
3f4bedd803 Tools/MMaps: Allow to specify different Recast settings for different maps
Allow to specify different Recast settings for different maps, currently handled in GetMapSpecificConfig() as a switch statement.
Set walkableRadius to 0 in Blade's Edge Arena (Map ID 562) so the pets can walk on the thin rope between the bridge and the pillar.

(cherry picked from commit e4658a1307)
2021-11-22 23:54:43 +01:00
Shauren
2de6e56d29 Core/Misc: Rename MapDefines.h to MMapDefines.h as it contains mmap defines exclusively 2021-05-29 14:48:18 +02:00
jackpoz
875c5bcade Tools/MMaps: Improve MMaps quality
Lower Detail Sample Distance and Detail Sample Max Error to get more accurate MMap data, in particular mmap height.
More info about Detail Mesh at http://digestingduck.blogspot.it/2009_07_01_archive.html and http://digestingduck.blogspot.it/2009_08_01_archive.html

(cherry picked from commit f8fd0b7a2c)
2021-02-15 19:13:25 +01:00
Shauren
b231903932 Core/Misc: Port all the refactors sneaked in master to 3.3.5 include cleanup port 2020-09-04 13:38:24 +02:00
Shauren
1c52d5fff7 Core/Misc: Replace NULL with nullptr 2020-08-14 17:06:03 +02:00
Aokromes
b0bf1275ee New Year 2020-01-02 06:44:10 +01:00
vincent-michael
5620eb9463 Update copyright note for 2019
auto happy = new year(2019);
2019-01-01 10:14:33 +01:00
Shauren
edb2b16f54 Tools/mmaps_generator: Give land priority during area merges over liquids
Closes #21700
2018-04-22 01:01:48 +02:00
Shauren
60c4c29da5 Tools/MMapsGenerator: Cleanup duplicated definitions
* rebuilding is not needed
2018-04-14 18:22:27 +02:00
Shauren
3743d04201 Core/MMaps: Implemented loading phased tiles
Closes #16909
2018-03-25 19:28:36 +03:00
Shauren
4798d9ce7a Core/VMaps: Implement loading phased tiles
Closes #15163
2018-03-25 19:28:36 +03:00
vincent-michael
7d00ae4045 Update copyright note for 2018
auto happy = new year(2018);
2018-01-01 00:40:17 +01:00
Rochet2
bbd7e3e326 Tools/MMapsGenerator: Get all tiles in beginning and calulate proper total tile count (#21139) 2017-12-30 17:47:30 +01:00
joschiwald
66744c4b4c Core/Tools: MapId can have 4 digits
Note: Re-extracting any maps is NOT required.
2017-04-27 19:24:14 +02:00
Shauren
457f58b1a2 Tools/mmaps_generator: Mak percentage progress slightly more accurate
#18832

(cherry picked from commit 29937aaa75)

# Conflicts:
#	src/tools/mmaps_generator/MapBuilder.cpp
2017-04-22 16:53:33 +02:00
Rochet2
769bc15ba0 Tools/MMapsGenerator: Use system supported threads instead of hardcoded amount (#19255)
- Use unsigned int for thread count
- Use std::thread::hardware_concurrency() to try estimate available threads instead of hardcoded 3 threads by default
- Print thread count always regardless of using --threads switch or not
2017-03-17 19:09:58 +01:00
Eilo
149a9854f7 Tools/mmaps_generator: Added estimated percentage progress to console output (#17798)
(cherry picked from commit 0a53d0b1fa)

# Conflicts:
#	src/tools/mmaps_generator/MapBuilder.cpp
2017-02-12 17:04:08 +01:00
jackpoz
e5ba8f1e4d Core/MMAPs: Update recast
Update recast to 64385e9ed0

(cherry picked from commit 1d7013e0e2)

# Conflicts:
#	dep/PackageList.txt
2017-02-12 15:41:19 +01:00
jackpoz
f98e3b0ee5 Tools/MMapGenerator: Avoid saving uninitialized padding bytes to disk
Initialize padding bytes in MmapTileHeader struct to avoid saving uninitialized data to disk, causing issues when binary-comparing *.mmtile files.

(cherry picked from commit 2585c62e6f)
2017-02-12 15:39:38 +01:00
vincent-michael
86b98686a9 Update copyright note for 2017
Happy new year
2017-01-01 16:23:13 +01:00
zori
fcbbeb3644 Correct Nav type for WMO objects (#18364)
* Tools/MMaps: Correct liquid type for WMO objects

* MMaps: Update version to 6

(cherry picked from commit 0df0cb30ca)
2016-12-04 02:23:13 +01:00
Shauren
7ed0e8147d Tools/mmaps_generator: Update junk map definitions 2016-07-22 19:49:16 +02:00
Vincent-Michael
478cc756eb Update copyright note for 2016
Happy new year (Again new year with idiots ...)
2016-01-01 00:34:25 +01:00
Carbenium
c0c4ed7135 Misc: Fix some warnings reported by GCC 4.9 2015-11-28 01:02:13 +01:00
Shauren
ed75b0649a Tools: Modified output files of all extractors to use 4 characters for map id and changed name format of map files to include a separator between values '_' that makes tokenization possible
* This fixes generating mmaps for maps with id >= 1000
* Fixed a crash happening when unloading last phased mmap tile
* Removed remaining references to libmpq in CMakeLists

Reextracting maps/vmaps/mmaps IS REQUIRED after this commit
2015-05-07 00:07:44 +02:00
Vincent-Michael
ab90f74486 Update copyright note for 2015
Happy new year
2015-01-01 00:28:09 +01:00
Shauren
457c93bc4b Tools/Extractors: Updated vmap_extractor for 6.0.2 2014-10-19 14:02:08 +02:00