[1.10] Uniqueitems.txt file limit
Moderators: Nefarius, Havvoric
[1.10] Uniqueitems.txt file limit
Hello all,
In this topic, it is said that the current row limit for uniqueitems.txt is 4096. It is also said that it should be easy to expand. Doses someone already tried to expand it, or know where and what I should do to increase this limit, to, say, 16384 ? (4x higher)
Thanks for any answer.
Edit : none know how to do this ?
Edit 2 : Bumping this again, just in case
In this topic, it is said that the current row limit for uniqueitems.txt is 4096. It is also said that it should be easy to expand. Doses someone already tried to expand it, or know where and what I should do to increase this limit, to, say, 16384 ? (4x higher)
Thanks for any answer.
Edit : none know how to do this ?
Edit 2 : Bumping this again, just in case
Re: [1.10] Uniqueitems.txt file limit
IIRC the limit extends from the savebits used to store the unique item index (12 of the top of my head), expanding it requires changing the constants in the save read/write code and the item sync code.
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
Re: [1.10] Uniqueitems.txt file limit
Ty for answer.
I will see if I really need to increase it or not.
I will see if I really need to increase it or not.
Re: [1.10] Uniqueitems.txt file limit
I'm also looking for an answer to this. I am working on a small project and would be interested to see if anyone has a solution for the limits on UniqueItems.txt. No luck finding a d2mod plugin to expand file limits
Re: [1.10] Uniqueitems.txt file limit
This is what I found that needs to be changed so far. Don't know if there's more. These edits will allow up to 32,767 unique items records.
This is on version 1.13c, but these should be easy to find on any 1.10+ version. It is also to note some of these also control set items limit, which apparently also is limited to 4096 records. (but why not getting rid of it at the same time, right??)
D2Common Base @0x6FD50000
That's the savefile stuff Necrolis mentioned (these will corrupt your savefiles, be warned), although there is more to do... The pGame data holding nolimit flags can only hold up to 4096 flags. Personally I didn't need to expand this (or to use it at all actually) and just replaced all code using it in order to get rid of it. If you don't want to do this, you will have to expand the allocated data for this.
The functions using this data are also usually full of (if nIndex > 4095) checks, so you will need to change all of these as well.
Either way, here goes all places where this data is used. D2Game base @0x6FC20000
This is on version 1.13c, but these should be easy to find on any 1.10+ version. It is also to note some of these also control set items limit, which apparently also is limited to 4096 records. (but why not getting rid of it at the same time, right??)
D2Common Base @0x6FD50000
Code: Select all
6FD778BD |> 57 PUSH EDI
6FD778BE |. E8 7DADFFFF CALL <D2Common.GetItemFileIndex> ; D2Common.#10620
6FD778C3 |. 85C0 TEST EAX,EAX
6FD778C5 |. 7D 1F JGE SHORT D2Common.6FD778E6
6FD778C7 |. B8 FF0F0000 MOV EAX,0FFF ; change to 0x7FFF
6FD778CC |> 3D FF0F0000 CMP EAX,0FFF ; change to 0x7FFF
6FD778D1 |. 7C 05 JL SHORT D2Common.6FD778D8
6FD778D3 |. B8 FF0F0000 MOV EAX,0FFF ; change to 0x7FFF
6FD778D8 6A 0C PUSH 0C ; 12 bits (change to 15)
6FD778DA |. 50 PUSH EAX
6FD778DB |. 56 PUSH ESI
6FD778DC |. E8 E319FEFF CALL <JMP.&Fog.#10128>
6FD778E1 |. E9 5D010000 JMP D2Common.6FD77A43
6FD778E6 |>^ 7F E4 JG SHORT D2Common.6FD778CC
6FD778E8 |. 6A 0C PUSH 0C ; 12 bits (change to 15)
6FD778EA |. 33C0 XOR EAX,EAX
6FD778EC |. 50 PUSH EAX
6FD778ED |. 56 PUSH ESI
6FD778EE |. E8 D119FEFF CALL <JMP.&Fog.#10128>
Code: Select all
6FD7AB2F |. 56 PUSH ESI
6FD7AB30 |. E8 AB8DFFFF CALL <D2Common.GetItemFlags> ; D2Common.#10838
6FD7AB35 |. A8 10 TEST AL,10
6FD7AB37 |. 0F84 87000000 JE D2Common.6FD7ABC4
6FD7AB3D 6A 0C PUSH 0C ; 12 bits (change to 15)
6FD7AB3F |. 57 PUSH EDI
6FD7AB40 |. E8 85E7FDFF CALL <JMP.&Fog.#10130>
Code: Select all
6FD7AB6E |. 56 PUSH ESI
6FD7AB6F |. E8 6C8DFFFF CALL <D2Common.GetItemFlags> ; D2Common.#10838
6FD7AB74 |. A8 10 TEST AL,10
6FD7AB76 |. 74 4C JE SHORT D2Common.6FD7ABC4
6FD7AB78 |> 837C24 4C 5C CMP DWORD PTR SS:[ESP+4C],5C
6FD7AB7D |. 6A 0C PUSH 0C ; 12 bits (change to 15)
6FD7AB7F |. 57 PUSH EDI
6FD7AB80 |. 77 72 JA SHORT D2Common.6FD7ABF4
6FD7AB82 |. E8 43E7FDFF CALL <JMP.&Fog.#10130>
The functions using this data are also usually full of (if nIndex > 4095) checks, so you will need to change all of these as well.
Either way, here goes all places where this data is used. D2Game base @0x6FC20000
Code: Select all
6FC2E266 MOV EAX,DWORD PTR DS:[EAX+EDX*4+1B24]
6FC2E83E MOV ECX,DWORD PTR DS:[EDI+ECX*4+1B24]
6FC2EE49 MOV ECX,DWORD PTR DS:[EDI+EAX*4+1B24]
6FC2EE50 LEA EAX,DWORD PTR DS:[EDI+EAX*4+1B24]
6FC4C388 LEA EDI,DWORD PTR DS:[EBX+1B24]
6FC4C670 LEA EDI,DWORD PTR DS:[ESI+1B24]
6FC9264F MOV ECX,DWORD PTR DS:[EAX+ECX*4+1B24]
6FC927B9 LEA ESI,DWORD PTR DS:[ESI+EDX*4+1B24]
Re: [1.10] Uniqueitems.txt file limit
======================================================kidpaddle94" wrote:This is what I found that needs to be changed so far. Don't know if there's more. These edits will allow up to 32,767 unique items records.
This is on version 1.13c, but these should be easy to find on any 1.10+ version. It is also to note some of these also control set items limit, which apparently also is limited to 4096 records. (but why not getting rid of it at the same time, right??)
D2Common Base @0x6FD50000Code: Select all
6FD778BD |> 57 PUSH EDI 6FD778BE |. E8 7DADFFFF CALL <D2Common.GetItemFileIndex> ; D2Common.#10620 6FD778C3 |. 85C0 TEST EAX,EAX 6FD778C5 |. 7D 1F JGE SHORT D2Common.6FD778E6 6FD778C7 |. B8 FF0F0000 MOV EAX,0FFF ; change to 0x7FFF 6FD778CC |> 3D FF0F0000 CMP EAX,0FFF ; change to 0x7FFF 6FD778D1 |. 7C 05 JL SHORT D2Common.6FD778D8 6FD778D3 |. B8 FF0F0000 MOV EAX,0FFF ; change to 0x7FFF 6FD778D8 6A 0C PUSH 0C ; 12 bits (change to 15) 6FD778DA |. 50 PUSH EAX 6FD778DB |. 56 PUSH ESI 6FD778DC |. E8 E319FEFF CALL <JMP.&Fog.#10128> 6FD778E1 |. E9 5D010000 JMP D2Common.6FD77A43 6FD778E6 |>^ 7F E4 JG SHORT D2Common.6FD778CC 6FD778E8 |. 6A 0C PUSH 0C ; 12 bits (change to 15) 6FD778EA |. 33C0 XOR EAX,EAX 6FD778EC |. 50 PUSH EAX 6FD778ED |. 56 PUSH ESI 6FD778EE |. E8 D119FEFF CALL <JMP.&Fog.#10128>
Code: Select all
6FD7AB2F |. 56 PUSH ESI 6FD7AB30 |. E8 AB8DFFFF CALL <D2Common.GetItemFlags> ; D2Common.#10838 6FD7AB35 |. A8 10 TEST AL,10 6FD7AB37 |. 0F84 87000000 JE D2Common.6FD7ABC4 6FD7AB3D 6A 0C PUSH 0C ; 12 bits (change to 15) 6FD7AB3F |. 57 PUSH EDI 6FD7AB40 |. E8 85E7FDFF CALL <JMP.&Fog.#10130>
That's the savefile stuff Necrolis mentioned (these will corrupt your savefiles, be warned), although there is more to do... The pGame data holding nolimit flags can only hold up to 4096 flags. Personally I didn't need to expand this (or to use it at all actually) and just replaced all code using it in order to get rid of it. If you don't want to do this, you will have to expand the allocated data for this.Code: Select all
6FD7AB6E |. 56 PUSH ESI 6FD7AB6F |. E8 6C8DFFFF CALL <D2Common.GetItemFlags> ; D2Common.#10838 6FD7AB74 |. A8 10 TEST AL,10 6FD7AB76 |. 74 4C JE SHORT D2Common.6FD7ABC4 6FD7AB78 |> 837C24 4C 5C CMP DWORD PTR SS:[ESP+4C],5C 6FD7AB7D |. 6A 0C PUSH 0C ; 12 bits (change to 15) 6FD7AB7F |. 57 PUSH EDI 6FD7AB80 |. 77 72 JA SHORT D2Common.6FD7ABF4 6FD7AB82 |. E8 43E7FDFF CALL <JMP.&Fog.#10130>
The functions using this data are also usually full of (if nIndex > 4095) checks, so you will need to change all of these as well.
Either way, here goes all places where this data is used. D2Game base @0x6FC20000Code: Select all
6FC2E266 MOV EAX,DWORD PTR DS:[EAX+EDX*4+1B24] 6FC2E83E MOV ECX,DWORD PTR DS:[EDI+ECX*4+1B24] 6FC2EE49 MOV ECX,DWORD PTR DS:[EDI+EAX*4+1B24] 6FC2EE50 LEA EAX,DWORD PTR DS:[EDI+EAX*4+1B24] 6FC4C388 LEA EDI,DWORD PTR DS:[EBX+1B24] 6FC4C670 LEA EDI,DWORD PTR DS:[ESI+1B24] 6FC9264F MOV ECX,DWORD PTR DS:[EAX+ECX*4+1B24] 6FC927B9 LEA ESI,DWORD PTR DS:[ESI+EDX*4+1B24]
I found the codes in d2game.dll,but it's hard to find in d2common.dll.Some codes is diffirent.
Could you tell me how to find this?