[1.10] Uniqueitems.txt file limit

This forum is for discussions on how to edit what can not be edited through the txt files, needless to say this isn't about battle net hacking.

Moderators: Nefarius, Havvoric

User avatar
Xaphan
Hosted Forum Moderator
Arch-Angel
Posts: 1113
Joined: Fri Oct 08, 2010 10:55 am
France

[1.10] Uniqueitems.txt file limit

Post by Xaphan » Sat Oct 05, 2013 7:49 pm

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 :)

User avatar
Necrolis
Senior Admin
Throne
Posts: 9125
Joined: Sat Mar 25, 2006 1:22 pm
Location: The Land of the Dead
South Africa

Hand-picked

Re: [1.10] Uniqueitems.txt file limit

Post by Necrolis » Sun Oct 06, 2013 9:49 am

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.
Image
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

User avatar
Xaphan
Hosted Forum Moderator
Arch-Angel
Posts: 1113
Joined: Fri Oct 08, 2010 10:55 am
France

Re: [1.10] Uniqueitems.txt file limit

Post by Xaphan » Mon Oct 07, 2013 7:21 pm

Ty for answer.

I will see if I really need to increase it or not.

User avatar
k0r3l1k
Moderator
Angel
Posts: 631
Joined: Sun Sep 09, 2007 3:11 am
Location: Arizona, Prescott
United States of America

Re: [1.10] Uniqueitems.txt file limit

Post by k0r3l1k » Sun Jan 19, 2014 5:29 pm

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 :(
Image

User avatar
kidpaddle94
Forum Legend
Principality
Posts: 2057
Joined: Thu Aug 13, 2009 2:54 pm
Location: localhost
Canada

Re: [1.10] Uniqueitems.txt file limit

Post by kidpaddle94 » Wed Jan 14, 2015 1:35 pm

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

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>                   
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

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]

User avatar
huohuowu2
Junior Member
Paladin
Posts: 154
Joined: Sat Feb 28, 2015 4:20 am
China

Re: [1.10] Uniqueitems.txt file limit

Post by huohuowu2 » Wed Nov 15, 2017 7:32 am

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 @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>                   
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

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]
======================================================
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?

Return to “Code Editing”