Read the map. Fix a copy. Prove every change.
WC3 Map Doctor is a set of map readers, rules and small fixes that run on a copy of your map. Here is what happens to a map, step by step.
- Open, read-onlyThe archive is opened without writing to it. A protected or unreadable map stops here and is reported as protected. Nothing is unlocked.
- Decode everythingMap info, the JASS or Lua script, object data, strings, placed units and doodads, imports. Our readers were cross-checked against an independent reader on 1,343,690 object-data edits with 0 disagreements.
- Run the rules121 rules look for what crashes, desyncs, leaks, lags or breaks on a given patch, checked against 6 builds: 1.26, 1.31, 1.32, 2.0, 3.0.0, 3.0.1. Each finding links to the line it came from and to one of 75 error cards with the cause and the fix.
- Grade itFive areas get a grade from 0 to 100 and the worst weighted area sets the score. The chart is public on the scoring page.
- Plan the fixThe engine suggests operations that match the findings. Each one has a risk rating: safe, review or experimental. A one-click "make it work" plan uses only safe and review operations.
- Fix a copyEvery operation writes a new file. The input map's SHA-256 is checked before and after, so the original provably did not change.
- Prove itThe copy is re-opened from scratch, its script is compiled again with pjass, and it is re-scanned. If a fix introduced a new finding, the run says so.
Five areas
What each grade looks at
Stability
Crashes, maps that will not load, broken triggers, desyncs, logic slips and anything that breaks on a newer patch. Leaks projected to hit a game limit within a day count here too.
Performance
Handle leaks, effects that are never destroyed, timers that run every frame, unit orders re-issued many times a second and other things that lag older PCs.
Security
Executable files hidden in the archive, memory-hack natives and preload paths that reach outside the game. Reported only; nothing is removed for you.
Cleanliness
Leftover files the map never uses: unused imports, duplicate or empty files, debug leftovers. Weighs the least.
Text
How much of the map's text is in English. A grade, not a judgement: it tells players whether a translation would help.
What a fix looks like
Small, named edits you can read
From the example report: a map function that clashes with a native added in 3.0.0 is renamed, and so is every call to it. That one change is why the map would not load on 3.0.1.
// Old inventory helper, written before 3.0.0 added a native with the same name.function IsItemEquipped takes unit u, integer itemId returns booleanfunction MD_IsItemEquipped takes unit u, integer itemId returns boolean return GetInventoryIndexOfItemTypeBJ(u, itemId) > 0endfunction
Questions
Can I upload a map?
Not yet: request it on Discord with a link to the map's page; private uploads open soon. Instant self-serve scans wait for public hosting and a security review.
Is my original map ever changed?
No. Every operation writes a new copy, and the run checks that the input file's SHA-256 is the same before and after.
Do you unprotect or deprotect maps?
Never. A protected map is reported as protected. Where its archive can be read without unlocking it, only play-side fixes are offered.
Which game versions does it check?
Six builds: 1.26, 1.31, 1.32, 2.0, 3.0.0, 3.0.1. A finding that only matters on one build says so.
Can it fix every crash?
No. The scan reads the map without running it, so some crashes only show up in a play test. Every report ends with a list of what it did not fix and why.
Does it work on Lua maps?
The scan reads JASS and Lua. Most fix operations edit JASS today; fog removal and the player-count conversions also handle Lua.
Is this AI?
The scan and the fixes are ordinary code: parsers and rules you can read on the scoring page. Two optional operations use a language model: translation and the custom script patch, which you review before it is applied.
See it on a real map
The example report walks through one map from 2 (F) to 75 (C), finding by finding.