Ok, so here is the script code you should rewrite for the latest MGO patch
Code:
define(address,"mgsvmgo.exe"+2D837B8) // replace here with mgsvmgo.exe+2D67447
define(bytes,F3 0F 59 05 28 52 9A FE F3 0F 59 0D 7C 08 9C FE) // replace here with bytes in mgo process @ mgsvmgo.exe+2D67447 (total exact count is 16 bytes)
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
assert(address,bytes)
alloc(newmem,$2000,"mgsvmgo.exe"+2D837B8) // replace here with mgsvmgo.exe+2D67447
alloc(X_ratio,12)
alloc(Y_ratio,12)
label(change_XY_ratios)
label(return)
X_ratio:
dd (float)50.1 // Here we set the correct X ratio eg: 48
Y_ratio:
dd (float)8.96666 // Here we set the correct Y ratio eg: 9
newmem:
change_XY_ratios:
mulss xmm0,[Y_ratio]
mulss xmm1,[X_ratio]
jmp return
address:
jmp change_XY_ratios
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
return:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
address:
db bytes
// mulss xmm0,[1417289E8]
dealloc(X_ratio)
dealloc(Y_ratio)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "mgsvmgo.exe"+2D837B8
"mgsvmgo.exe"+2D83788: F3 0F 5C 82 68 01 00 00 - subss xmm0,[rdx+00000168]
"mgsvmgo.exe"+2D83790: F3 0F 10 58 3C - movss xmm3,[rax+3C]
"mgsvmgo.exe"+2D83795: 0F 28 F2 - movaps xmm6,xmm2
"mgsvmgo.exe"+2D83798: 66 44 0F 6E 40 48 - movd xmm8,[rax+48]
"mgsvmgo.exe"+2D8379E: 66 44 0F 6E 48 4C - movd xmm9,[rax+4C]
"mgsvmgo.exe"+2D837A4: F3 0F 5E F0 - divss xmm6,xmm0
"mgsvmgo.exe"+2D837A8: 45 0F 5B C0 - cvtdq2ps xmm8,xmm8
"mgsvmgo.exe"+2D837AC: 45 0F 5B C9 - cvtdq2ps xmm9,xmm9
"mgsvmgo.exe"+2D837B0: 41 0F 28 C0 - movaps xmm0,xmm8
"mgsvmgo.exe"+2D837B4: 41 0F 28 C9 - movaps xmm1,xmm9
// ---------- INJECTING HERE ----------
"mgsvmgo.exe"+2D837B8: F3 0F 59 05 28 52 9A FE - mulss xmm0,[mgsvmgo.exe+17289E8]
// ---------- DONE INJECTING ----------
"mgsvmgo.exe"+2D837C0: F3 0F 59 0D 7C 08 9C FE - mulss xmm1,[mgsvmgo.exe+1744044]
"mgsvmgo.exe"+2D837C8: 0F 2F C1 - comiss xmm0,xmm1
"mgsvmgo.exe"+2D837CB: 76 1F - jna mgsvmgo.exe+2D837EC
"mgsvmgo.exe"+2D837CD: F3 0F 59 1D 6F 08 9C FE - mulss xmm3,[mgsvmgo.exe+1744044]
"mgsvmgo.exe"+2D837D5: F3 0F 5E C8 - divss xmm1,xmm0
"mgsvmgo.exe"+2D837D9: 0F 57 0D 80 6F 90 FE - xorps xmm1,[mgsvmgo.exe+168A760]
"mgsvmgo.exe"+2D837E0: F3 0F 59 1D EC B2 9D FE - mulss xmm3,[mgsvmgo.exe+175EAD4]
"mgsvmgo.exe"+2D837E8: EB 0F - jmp mgsvmgo.exe+2D837F9
"mgsvmgo.exe"+2D837EA: 1C DC - sbb al,-24
"mgsvmgo.exe"+2D837EC: F3 41 0F 59 D8 - mulss xmm3,xmm8
}
Now read carefully at the original memory area opcodes in comment just above. That will help you updates after updates to find the relevant address.
mulss xmm1... must follow mulss xmm0... and the comment column should indicate 16 & 9 ratios
1 - You have to change exactly the mgo adress in script to the one you have found (mgsvmgo.exe+2D67447).
2 - You have to change exactly the bytes in "define(bytes" line with the ones that you can read at new adress "mgsvmgo.exe+2D67447".
If you don't do it right, your script won't work and the checkbox will not be checkable.
If your script is working, don't forget to save it.
Now a little word about Jackfuste original script.
It tells to read the X ratio to a new adress where the float 50 is stored by the mgs process.
It's ok until a 50 / 9 widescreen but not for a triple 21/9 setup.
I hope i did myself clear and it will help you. And please, whenever a new mgo update is out, release a new cheat table so that the others may benefit it.
If you need explanation about finding the ui size pointer let me know. It may help other players.
And finally, don't forget to credit Jackfuste for your CT as without him nothing would have been possible.