• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!
  • ✅ The POLL for Hive's Texturing Contest #34 is OPEN! Vote for the TOP 3 SKINS! 🔗Click here to cast your vote!
  • ✅ The POLL for Hive's Techtree Contest #20 is OPEN! Vote for the TOP 3 FACTIONS! 🔗Click here to cast your vote!

How to determine the structure of Warcraft 3 MapHashData?

Level 1
Joined
Jul 8, 2025
Messages
1
My Warcraft version is 1.26.
Below is the disassembly code for obtaining map information from the Warcraft map list. I would like to know what the corresponding structure MapHashData is?

028FE380 | 53 | push ebx |
028FE381 | 55 | push ebp |
028FE382 | 56 | push esi |
028FE383 | 8BF1 | mov esi,ecx |
028FE385 | 57 | push edi |
028FE386 | 8B7C24 14 | mov edi,dword ptr ss:[esp+14] |
028FE38A | 8B07 | mov eax,dword ptr ds:[edi] |
028FE38C | 8906 | mov dword ptr ds:[esi],eax |
028FE38E | 8B4F 04 | mov ecx,dword ptr ds:[edi+4] |
028FE391 | 8BDF | mov ebx,edi |
028FE393 | 894E 04 | mov dword ptr ds:[esi+4],ecx |
028FE396 | 8D46 08 | lea eax,dword ptr ds:[esi+8] | esi+08:"Dalaran"
028FE399 | 2BDE | sub ebx,esi |
028FE39B | BD 6D000000 | mov ebp,6D | 6D:'m'
028FE3A0 | 8A1403 | mov dl,byte ptr ds:[ebx+eax] | mapName
028FE3A3 | 8810 | mov byte ptr ds:[eax],dl |
028FE3A5 | 83C0 01 | add eax,1 |
028FE3A8 | 83ED 01 | sub ebp,1 |
028FE3AB | 75 F3 | jne game.28FE3A0 |
028FE3AD | 8D46 75 | lea eax,dword ptr ds:[esi+75] | esi+75:"1v1"
028FE3B0 | BD 31000000 | mov ebp,31 | 31:'1'
028FE3B5 | 8A0C18 | mov cl,byte ptr ds:[eax+ebx] | playersRecommend
028FE3B8 | 8808 | mov byte ptr ds:[eax],cl |
028FE3BA | 83C0 01 | add eax,1 |
028FE3BD | 83ED 01 | sub ebp,1 |
028FE3C0 | 75 F3 | jne game.28FE3B5 |
028FE3C2 | 8D86 A6000000 | lea eax,dword ptr ds:[esi+A6] |
028FE3C8 | BD 61000000 | mov ebp,61 | 61:'a'
028FE3CD | 8D49 00 | lea ecx,dword ptr ds:[ecx] |
028FE3D0 | 8A1418 | mov dl,byte ptr ds:[eax+ebx] | mapAuthor
028FE3D3 | 8810 | mov byte ptr ds:[eax],dl |
028FE3D5 | 83C0 01 | add eax,1 |
028FE3D8 | 83ED 01 | sub ebp,1 |
028FE3DB | 75 F3 | jne game.28FE3D0 |
028FE3DD | 8D86 07010000 | lea eax,dword ptr ds:[esi+107] |
028FE3E3 | BD 01030000 | mov ebp,301 |
028FE3E8 | 8A0C18 | mov cl,byte ptr ds:[eax+ebx] |mapDescription
028FE3EB | 8808 | mov byte ptr ds:[eax],cl |
028FE3ED | 83C0 01 | add eax,1 |
028FE3F0 | 83ED 01 | sub ebp,1 |
028FE3F3 | 75 F3 | jne game.28FE3E8 |
028FE3F5 | 8B97 08040000 | mov edx,dword ptr ds:[edi+408] |What is this field?
028FE3FB | 8996 08040000 | mov dword ptr ds:[esi+408],edx |
028FE401 | 8B87 0C040000 | mov eax,dword ptr ds:[edi+40C] |What is this field?
028FE407 | 8986 0C040000 | mov dword ptr ds:[esi+40C],eax |
028FE40D | 8B8F 10040000 | mov ecx,dword ptr ds:[edi+410] |What is this field?
028FE413 | 898E 10040000 | mov dword ptr ds:[esi+410],ecx |
028FE419 | 8B97 14040000 | mov edx,dword ptr ds:[edi+414] |What is this field?
028FE41F | 8996 14040000 | mov dword ptr ds:[esi+414],edx |
028FE425 | 8B87 18040000 | mov eax,dword ptr ds:[edi+418] |What is this field?
028FE42B | 8986 18040000 | mov dword ptr ds:[esi+418],eax |
028FE431 | 8B8F 1C040000 | mov ecx,dword ptr ds:[edi+41C] |What is this field?
028FE437 | 898E 1C040000 | mov dword ptr ds:[esi+41C],ecx |
028FE43D | 8B97 20040000 | mov edx,dword ptr ds:[edi+420] |What is this field?
028FE443 | 8996 20040000 | mov dword ptr ds:[esi+420],edx |
028FE449 | 8B87 24040000 | mov eax,dword ptr ds:[edi+424] |What is this field?
028FE44F | 8986 24040000 | mov dword ptr ds:[esi+424],eax |
028FE455 | 8B8F 28040000 | mov ecx,dword ptr ds:[edi+428] |What is this field?
028FE45B | 898E 28040000 | mov dword ptr ds:[esi+428],ecx |
028FE461 | 8B97 2C040000 | mov edx,dword ptr ds:[edi+42C] |What is this field?
028FE467 | 8996 2C040000 | mov dword ptr ds:[esi+42C],edx |
028FE46D | 8B87 30040000 | mov eax,dword ptr ds:[edi+430] |What is this field?
028FE473 | 8986 30040000 | mov dword ptr ds:[esi+430],eax |
028FE479 | 8B8F 34040000 | mov ecx,dword ptr ds:[edi+434] |What is this field?
028FE47F | 898E 34040000 | mov dword ptr ds:[esi+434],ecx |
028FE485 | 8B97 38040000 | mov edx,dword ptr ds:[edi+438] |What is this field?
028FE48B | 8996 38040000 | mov dword ptr ds:[esi+438],edx |
028FE491 | 8B87 3C040000 | mov eax,dword ptr ds:[edi+43C] |What is this field?
028FE497 | 8986 3C040000 | mov dword ptr ds:[esi+43C],eax |
028FE49D | 8B8F 40040000 | mov ecx,dword ptr ds:[edi+440] |What is this field?
028FE4A3 | 898E 40040000 | mov dword ptr ds:[esi+440],ecx |
028FE4A9 | 8A97 44040000 | mov dl,byte ptr ds:[edi+444] |What is this field?
028FE4AF | 68 FC190000 | push 19FC |
028FE4B4 | 8D87 48040000 | lea eax,dword ptr ds:[edi+448] |What is this field?
028FE4BA | 50 | push eax |
028FE4BB | 8D8E 48040000 | lea ecx,dword ptr ds:[esi+448] |What is this field?
028FE4C1 | 51 | push ecx |
028FE4C2 | 8896 44040000 | mov byte ptr ds:[esi+444],dl |What is this field?
028FE4C8 | E8 1F317D00 | call <JMP.&memcpy> |
028FE4CD | 68 FC190000 | push 19FC |
028FE4D2 | 8D97 441E0000 | lea edx,dword ptr ds:[edi+1E44] |What is this field?
028FE4D8 | 52 | push edx |
028FE4D9 | 8D86 441E0000 | lea eax,dword ptr ds:[esi+1E44] |What is this field?
028FE4DF | 50 | push eax |
028FE4E0 | E8 07317D00 | call <JMP.&memcpy> |
028FE4E5 | 8B8F 40380000 | mov ecx,dword ptr ds:[edi+3840] |What is this field?
028FE4EB | 898E 40380000 | mov dword ptr ds:[esi+3840],ecx |
028FE4F1 | D987 44380000 | fld dword ptr ds:[edi+3844] |What is this field?
028FE4F7 | D99E 44380000 | fstp dword ptr ds:[esi+3844] |
028FE4FD | 83C4 18 | add esp,18 |
028FE500 | D987 48380000 | fld dword ptr ds:[edi+3848] |What is this field?
028FE506 | BD 20000000 | mov ebp,20 | 20:' '
028FE50B | D99E 48380000 | fstp dword ptr ds:[esi+3848] |
028FE511 | D987 4C380000 | fld dword ptr ds:[edi+384C] |What is this field?
028FE517 | D99E 4C380000 | fstp dword ptr ds:[esi+384C] |
028FE51D | 8B97 50380000 | mov edx,dword ptr ds:[edi+3850] |What is this field?
028FE523 | 8996 50380000 | mov dword ptr ds:[esi+3850],edx |
028FE529 | 8B87 54380000 | mov eax,dword ptr ds:[edi+3854] |What is this field?
028FE52F | 8986 54380000 | mov dword ptr ds:[esi+3854],eax |
028FE535 | 8D86 58380000 | lea eax,dword ptr ds:[esi+3858] |What is this field?
028FE53B | EB 03 | jmp game.28FE540 |
028FE53D | 8D49 00 | lea ecx,dword ptr ds:[ecx] |
028FE540 | 8A0C18 | mov cl,byte ptr ds:[eax+ebx] |
028FE543 | 8808 | mov byte ptr ds:[eax],cl |
028FE545 | 83C0 01 | add eax,1 |
028FE548 | 83ED 01 | sub ebp,1 |
028FE54B | 75 F3 | jne game.28FE540 |What is this field?
028FE54D | 8A97 78380000 | mov dl,byte ptr ds:[edi+3878] |
028FE553 | 8896 78380000 | mov byte ptr ds:[esi+3878],dl |
028FE559 | 8B87 79380000 | mov eax,dword ptr ds:[edi+3879] |What is this field?
028FE55F | 5F | pop edi |
028FE560 | 8986 79380000 | mov dword ptr ds:[esi+3879],eax |
028FE566 | 8BC6 | mov eax,esi |
028FE568 | 5E | pop esi |
028FE569 | 5D | pop ebp |
028FE56A | 5B | pop ebx |
028FE56B | C2 0400 | ret 4 |
 
This looks like war3map.w3i, you can find some info for it here: W3X_Files_Format

I also found this repo which can translate most of the map files to json: WC3MapTranslator/src/translators/InfoTranslator.ts at master · ChiefOfGxBxL/WC3MapTranslator
Judging from the file format version in the code it seems like it supports a newer version (25 vs 31)

There's also this older one (format version 18): https://world-editor-tutorials.thehelper.net/cat_usersubmit.php?view=42787

You should be able to read the first 4 bytes of your w3i file as an int32 and compare against one of these specs
 

w3i is a solved story. And has been for years, especially the old format versions. I'm confused by title, is it a poor auto-translation?
If so, I encourage our @wuxiancong666 Chinese friends to join our international efforts in English. Both for Jassdoc (Jass API, making documentation for "native"s) and all the file formats. The info for the latter is all coming together. You can translate it all later, but we need more people involved and helping.
PS: Message me if you need a mirror of the Github repository.
 
Last edited:
Back
Top