UTrans currently works like this:
Code: Select all
0 palshift.dat 0
1 palshift.dat 1
2 palshift.dat 2
3 palshift.dat 3 [ 0 ]
4 palshift.dat 4 [ 1 ]
5 palshift.dat 5 [ 2 ]
6 palshift.dat 6 [ 3 ]
7 palshift.dat 7 [ 5 ]
8 randtransforms.dat 0
9 randtransforms.dat 1
10 randtransforms.dat 2
11 randtransforms.dat 3
12 randtransforms.dat 4
13 randtransforms.dat 5
14 randtransforms.dat 6
15 randtransforms.dat 7
16 randtransforms.dat 8
17 randtransforms.dat 9
18 randtransforms.dat 10
19 randtransforms.dat 11
20 randtransforms.dat 12
21 randtransforms.dat 13
22 randtransforms.dat 14
23 randtransforms.dat 15
24 randtransforms.dat 16
25 randtransforms.dat 17
26 randtransforms.dat 18
27 randtransforms.dat 19
28 randtransforms.dat 20
29 randtransforms.dat 21
[color=red]
30 randtransforms.dat 22
31 randtransforms.dat 23
32 randtransforms.dat 24
33 randtransforms.dat 25
34 randtransforms.dat 26
35 randtransforms.dat 27
36 randtransforms.dat 28
37 randtransforms.dat 29
[/color]
Here is the lookup code:
Code: Select all
6FAAE42E A1 189ABA6F MOV EAX,DWORD PTR DS:[6FBA9A18]
6FAAE433 85C0 TEST EAX,EAX
6FAAE435 74 36 JE SHORT D2CLIENT.6FAAE46D [ NoUniqueShift == true ] [ goto PalShift.dat ]
6FAAE437 83EE 08 SUB ESI,8 [ RandTransforms.dat - PalShift.dat ]
6FAAE43A 78 13 JS SHORT D2CLIENT.6FAAE44F [ error if negative ]
6FAAE43C 83FE 1E CMP ESI,1E
6FAAE43F 7D 0E JGE SHORT D2CLIENT.6FAAE44F [ error if too large ]
6FAAE441 8BC6 MOV EAX,ESI
You see it subtracts 8 from the index, so that UTrans 8 becomes index 0 (aka RandTransforms.dat 0).
The culprit code is this:
Code: Select all
6FB27B6B 83FF 1E CMP EDI,1E
To make the game work like it should again:
Code: Select all
6FB27B6B 83FF 26 CMP EDI,26