Now, since the last release of the game the method to calculate the spread has been changed. So I'm here to share with you some cool things that I found on the net, and explain them to you.
First of all this is the sig for our pointer to the spread:
Now the address should contain:Code:8B 44 24 04
So there we are:Code:00403976 . 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] 0040397A . 50 PUSH EAX ; /Arg2 0040397B . 6A 01 PUSH 1 ; |Arg1 = 00000001 0040397D . E8 5E700000 CALL BFP4f.0040A9E0 ; \BFP4f.0040A9E0 00403982 > C2 0400 RETN 4
So now we know that the function that calculates the spread contains 2 arguments. 2 DWORDs.Code:DWORD rec = *(DWORD*)0x403976; //the addy that you found
Now just DetourFunction it, and it should patch the spread. I haven't tested this yet, but this should be the base for a non spread.Code:float CalculateSpread(DWORD unknown1, DWORD seed) { //Code Here }
Credits: sentilas from UC.
If it works then well just report it back. Otherwise try to find a new way, it will be useful