064CE4D0 /$ 53 PUSH EBX
064CE4D1 |. 56 PUSH ESI
[COLOR="Red"]064CE4D2 |. 8BF2 MOV ESI,EDX ; max[/COLOR]
064CE4D4 |. 57 PUSH EDI
064CE4D5 |. 85F6 TEST ESI,ESI
064CE4D7 |. 7F 06 JG SHORT D2Game.064CE4DF ; check if max!=0
064CE4D9 |. 5F POP EDI
064CE4DA |. 5E POP ESI
064CE4DB |. 33C0 XOR EAX,EAX
064CE4DD |. 5B POP EBX
064CE4DE |. C3 RETN
[COLOR="Red"]064CE4DF |> 8B01 MOV EAX,DWORD PTR DS:[ECX] ; get randseed
064CE4E1 |. BA C590C66A MOV EDX,6AC690C5
064CE4E6 |. 8D7E FF LEA EDI,DWORD PTR DS:[ESI-1] ; max-1
064CE4E9 |. 33DB XOR EBX,EBX
064CE4EB |. F7E2 MUL EDX ; a = randseed*6AC90C5
064CE4ED |. 85FE TEST ESI,EDI
064CE4EF |. 74 16 JE SHORT D2Game.064CE507 ; check if max-1!=0
064CE4F1 |. 8B79 04 MOV EDI,DWORD PTR DS:[ECX+4] ; randseed2
064CE4F4 |. 03C7 ADD EAX,EDI ; b = lowdword(a) + randseed2[/COLOR]
064CE4F6 |. 5F POP EDI
[COLOR="Red"]064CE4F7 |. 13D3 ADC EDX,EBX ; c = highdword(a) + carry
064CE4F9 |. 8901 MOV DWORD PTR DS:[ECX],EAX ; set new randseed
064CE4FB |. 8951 04 MOV DWORD PTR DS:[ECX+4],EDX ; set new randseed2
064CE4FE |. 33D2 XOR EDX,EDX
064CE500 |. F7F6 DIV ESI ; d = b / max[/COLOR]
064CE502 |. 5E POP ESI
064CE503 |. 5B POP EBX
[COLOR="Red"]064CE504 |. 8BC2 MOV EAX,EDX ; randval (mod(b)?)[/COLOR]
064CE506 |. C3 RETN
064CE507 |> 8BF0 MOV ESI,EAX
064CE509 |. 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4]
064CE50C |. 03F0 ADD ESI,EAX
064CE50E |. 8BC7 MOV EAX,EDI
064CE510 |. 13D3 ADC EDX,EBX
064CE512 |. 8931 MOV DWORD PTR DS:[ECX],ESI
064CE514 |. 23C6 AND EAX,ESI
064CE516 |. 5F POP EDI
064CE517 |. 5E POP ESI
064CE518 |. 8951 04 MOV DWORD PTR DS:[ECX+4],EDX
064CE51B |. 5B POP EBX
064CE51C \. C3 RETN