Posts: 1
|
Post by fullbody on Apr 10, 2020 2:10:47 GMT 10
Can someone make a fix for it? Some say is a Windows 10 related problem.
|
|
Posts: 18
|
Post by jane on Apr 24, 2020 1:37:54 GMT 10
It seems like something that should be doable in CE, I'm just not sure how to hunt down the specific address since I don't know what the default value is. The standard FOV makes me nauseous though. Apparently you can download the older version of the game to fix it with Widescreen fix, but Steam's manifests are currently bugged xD
|
|
|
Post by picoleet on Sept 5, 2021 23:10:10 GMT 10
I guess I am a bit late but I have figured out the required change. The address is slightly off in the new binary. In the older version it was 0x496d1b, in the newer version it is 0x4970bd. Using 0x0fcbd50 as code cave, the following two patches would do the job: - Target address: 0x0fcbd50, Bytes to be written: { 0xd9, 0x5e, 0x3c, 0xc7, 0x46, 0x3c, 0x00, 0x00, 0x70, 0x42, 0x8b, 0xcb, 0xe9, 0x61, 0xb3, 0x4c, 0xff }. Here the sequence 0x00, 0x00, 0x70, 0x42 is the FOV in IEEE-754 format. 0x42700000 is 60.0 in decimal. You can use some other value by first converting the desired value to IEEE-754 format and then serializing it in little-endian order. This website allows one to convert decimal values to IEEE-754 representation. Serializing in little-endian order is as simple as laying out the bytes in reverse order. For example, an FOV of 45.0 would be 0x42340000 in IEEE-754 and would be written as 0x00, 0x00, 0x34, 0x42 in the above line.
- Target address: 0x4970bd, Bytes to be written: { 0xe9, 0x8e, 0x4c, 0xb3, 0x0 }
Memory manipulation tools such as Cheat engine, OllyDbg etc. can be used for this patching.
|
|
|
Post by teo on Oct 20, 2021 12:12:40 GMT 10
I guess I am a bit late but I have figured out the required change. The address is slightly off in the new binary. In the older version it was 0x496d1b, in the newer version it is 0x4970bd. Using 0x0fcbd50 as code cave, the following two patches would do the job: - Target address: 0x0fcbd50, Bytes to be written: { 0xd9, 0x5e, 0x3c, 0xc7, 0x46, 0x3c, 0x00, 0x00, 0x70, 0x42, 0x8b, 0xcb, 0xe9, 0x61, 0xb3, 0x4c, 0xff }. Here the sequence 0x00, 0x00, 0x70, 0x42 is the FOV in IEEE-754 format. 0x42700000 is 60.0 in decimal. You can use some other value by first converting the desired value to IEEE-754 format and then serializing it in little-endian order. This website allows one to convert decimal values to IEEE-754 representation. Serializing in little-endian order is as simple as laying out the bytes in reverse order. For example, an FOV of 45.0 would be 0x42340000 in IEEE-754 and would be written as 0x00, 0x00, 0x34, 0x42 in the above line.
- Target address: 0x4970bd, Bytes to be written: { 0xe9, 0x8e, 0x4c, 0xb3, 0x0 }
Memory manipulation tools such as Cheat engine, OllyDbg etc. can be used for this patching. Lmao, I wish I could wrap my head around Cheat Engine to use those tips of yours, I even tried to make sense of it all trying to update old Cheat Engine tables for FOV manipulation by myself before, sadly with no luck.
|
|
|
Post by picoleet on Nov 12, 2021 5:51:11 GMT 10
Can you share the tables/script you used? I can try making them work for you.
Also, for any future visitors, here's a GDB script which can be used for patching the game once it has reached the main menu:
# patch code for setting FOV at 0x0fcbd50 set {char[17]}0x0fcbd50 = { 0xd9, 0x5e, 0x3c, 0xc7, 0x46, 0x3c, 0x00, 0x00, 0x70, 0x42, 0x8b, 0xcb, 0xe9, 0x61, 0xb3, 0x4c, 0xff } # patch jump set {char[5]}0x4970bd = { 0xe9, 0x8e, 0x4c, 0xb3, 0x0 }
|
|
|
Post by dmxdex on Jan 15, 2022 1:40:32 GMT 10
Would someone be kind enough to make me detailed tutorial on how to get this fix to work please
|
|
|
Post by picoleet on Jan 22, 2022 21:55:10 GMT 10
Would someone be kind enough to make me detailed tutorial on how to get this fix to work please If you are comfortable with cheatengine then I can help/answer your queries.
|
|
|
Post by teo on Jan 24, 2022 0:46:58 GMT 10
Can you share the tables/script you used? I can try making them work for you. That was the one, I think: link I think that camera distance thingy is the FOV manipulator. Sorry for the late answer, it was quite a bit of time since my last visit in here.
|
|
|
Post by picoleet on Jan 24, 2022 23:08:36 GMT 10
Can you share the tables/script you used? I can try making them work for you. That was the one, I think: link I think that camera distance thingy is the FOV manipulator. Sorry for the late answer, it was quite a bit of time since my last visit in here. Ok. I will try making it work over this weekend.
|
|
|
Post by picoleet on Jan 28, 2022 6:23:04 GMT 10
Can you share the tables/script you used? I can try making them work for you. That was the one, I think: link I think that camera distance thingy is the FOV manipulator. Sorry for the late answer, it was quite a bit of time since my last visit in here. The assemblerscript looks like it should work. I verified the (partial) working by directly injecting the code using GDB and it worked for me. I couldn't verify using cheatengine because it doesn't work on my platform (linux). The only suspicious thing in the rerev.ct file were the addresses for AOB symbols -- they were incorrect. I adjusted them to correct value and trimmed away non-FOV related parts. The result is the following script: <?xml version="1.0" encoding="utf-8"?> <CheatTable CheatEngineTableVersion="18"> <CheatEntries> <CheatEntry> <ID>1116</ID> <Description>"Camera Distance Mod script (ZXC)"</Description> <Options moHideChildren="1"/> <LastState Activated="1"/> <Color>80000008</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscan(cameraDistanceReadAOB,F3 0F 10 77 18 F3 0F 58 70 78) registersymbol(cameraDistanceReadAOB) aobscan(cameraModeReadAOB,8B BE D8 00 00 00 8B CB) registersymbol(cameraModeReadAOB)
label(bFirstAccess) registersymbol(bFirstAccess) label(bNormalWeaponZoom) registersymbol(bNormalWeaponZoom) label(pCameraMode) registersymbol(pCameraMode) label(fCustomCameraDistance) registersymbol(fCustomCameraDistance) label(fCustomCameraInterval) registersymbol(fCustomCameraInterval)
alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) label(chkladderclimbing) label(movecameradistancecloser) label(movecameradistancefurther) label(setcameradistance) label(resetcameradistance)
label(newmem2) label(returnhere2) label(originalcode2) label(exit2)
newmem: //this is allocated memory, you have read,write,execute access //place your code here cmp byte ptr [bNormalWeaponZoom],1 jne chkladderclimbing pushad push 02 //key Mouse Right Button call GetAsyncKeyState // check if key is down shr ax,#15 cmp ax,1 // key is down popad je originalcode
chkladderclimbing: push ecx mov ecx,[pCameraMode] cmp byte ptr [ecx+dc],1 pop ecx je originalcode
pushad push 'X' call GetAsyncKeyState shr ax,#15 cmp ax,1 popad je resetcameradistance
cmp byte ptr [bFirstAccess],1 jne resetcameradistance
pushad push 'Z' call GetAsyncKeyState shr ax,#15 cmp ax,1 popad je movecameradistancecloser
pushad push 'C' call GetAsyncKeyState shr ax,#15 cmp ax,1 popad je movecameradistancefurther
setcameradistance: movss xmm6,[fCustomCameraDistance] jmp exit
resetcameradistance: mov byte ptr [bFirstAccess],1 movss xmm6,[edi+18] movss [fCustomCameraDistance],xmm6 jmp setcameradistance
movecameradistancecloser: fld dword ptr [fCustomCameraDistance] fadd dword ptr [fCustomCameraInterval] fstp dword ptr [fCustomCameraDistance] jmp setcameradistance
movecameradistancefurther: fld dword ptr [fCustomCameraDistance] fsub dword ptr [fCustomCameraInterval] fstp dword ptr [fCustomCameraDistance] jmp setcameradistance
originalcode: movss xmm6,[edi+18]
exit: jmp returnhere
///
newmem2: //this is allocated memory, you have read,write,execute access //place your code here mov [pCameraMode],esi
originalcode2: mov edi,[esi+000000D8]
exit2: jmp returnhere2
/// bFirstAccess: db 0 bNormalWeaponZoom: db 1 pCameraMode: dd 0 fCustomCameraDistance: dd (float)-170.0 fCustomCameraInterval: dd (float)5.0 ///
cameraDistanceReadAOB: //"rerev.exe"+8CC6C: jmp newmem returnhere:
cameraModeReadAOB: //"rerev.exe"+8BAE3: jmp newmem2 nop returnhere2:
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) cameraDistanceReadAOB: //"rerev.exe"+8CC6C: db F3 0F 10 77 18 //Alt: movss xmm6,[edi+18] unregistersymbol(cameraDistanceReadAOB) cameraModeReadAOB: //"rerev.exe"+8BAE3: db 8B BE D8 00 00 00 //Alt: mov edi,[esi+000000D8] unregistersymbol(cameraModeReadAOB)
unregistersymbol(bFirstAccess) unregistersymbol(bNormalWeaponZoom) unregistersymbol(pCameraMode) unregistersymbol(fCustomCameraDistance) unregistersymbol(fCustomCameraInterval) </AssemblerScript> <Hotkeys> <Hotkey> <Action>Activate</Action> <Keys> <Key>122</Key> </Keys> <ID>0</ID> </Hotkey> </Hotkeys> <CheatEntries> <CheatEntry> <ID>1119</ID> <Description>"Override Weapon Zoom"</Description> <LastState Activated="0"/> <Color>80000008</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat bNormalWeaponZoom: db 0
[DISABLE] //code from here till the end of the code will be used to disable the cheat bNormalWeaponZoom: db 1 </AssemblerScript> <Hotkeys> <Hotkey> <Action>Activate</Action> <Keys> <Key>16</Key> <Key>66</Key> </Keys> <ID>0</ID> </Hotkey> <Hotkey> <Action>Deactivate</Action> <Keys> <Key>66</Key> </Keys> <ID>1</ID> </Hotkey> </Hotkeys> </CheatEntry> </CheatEntries> </CheatEntry> </CheatEntries> <UserdefinedSymbols> <SymbolEntry> <Name>cameraDistanceReadAOB</Name> <Address> 0048CEDA</Address> </SymbolEntry> <SymbolEntry> <Name>cameraModeReadAOB</Name> <Address> 0048BD33</Address> </SymbolEntry> <!-- <SymbolEntry> --> <!-- <Name>bFirstAccess</Name> --> <!-- <Address>27CB00F1</Address> --> <!-- </SymbolEntry> --> <!-- <SymbolEntry> --> <!-- <Name>bNormalWeaponZoom</Name> --> <!-- <Address>27CB00F2</Address> --> <!-- </SymbolEntry> --> <!-- <SymbolEntry> --> <!-- <Name>pCameraMode</Name> --> <!-- <Address>27CB00F3</Address> --> <!-- </SymbolEntry> --> <!-- <SymbolEntry> --> <!-- <Name>fCustomCameraDistance</Name> --> <!-- <Address>27CB00F7</Address> --> <!-- </SymbolEntry> --> <!-- <SymbolEntry> --> <!-- <Name>fCustomCameraInterval</Name> --> <!-- <Address>27CB00FB</Address> --> <!-- </SymbolEntry> --> <!-- </UserdefinedSymbols> --> </CheatTable>
Copy it to notepad (or notepad++) and save as rerevFOV.ct. Then load it in cheatengine in the usual way. The keybindings etc. remain the same. Please let me know if it works for you! Additional note: I was unsure about addresses of other user defined symbols as well and to be safe decided to comment them. If you get any error because of that simply uncomment them (i.e. remove the "<!--" and "-->" part from lines 231 to 251).
|
|
|
Post by teo on Feb 3, 2022 1:02:03 GMT 10
picoleet oh, that's really nice of you to take some time to help me out, sadly still getting the same result as with the original not-updated script - the moment I activate the script I get a black screen with a minimap in the right corner.
|
|
|
Post by Vork on Feb 7, 2022 7:43:03 GMT 10
|
|
|
Post by picoleet on Feb 10, 2022 4:29:37 GMT 10
picoleet oh, that's really nice of you to take some time to help me out, sadly still getting the same result as with the original not-updated script - the moment I activate the script I get a black screen with a minimap in the right corner. This is strange. I am just wondering what is going wrong in your case. Would it be possible for you to post the SHA1sum of your rerev.exe? The following is the SHA1sum of my copy (latest steam) 6afca18122065f3089d409b75a773fd6e4618cc7 rerev.exe
Unfortunately I don't have a capable window machine with me so cannot test the script on it.
EDIT: I studied WiderscreenFixer for developing my fix. Perhaps I can try to revive it?
|
|
|
Post by jolliy on Feb 18, 2022 22:41:45 GMT 10
Hello there! I'm having the same issue of teo with the script, black screen after activating it, and... EDIT: I studied WiderscreenFixer for developing my fix. Perhaps I can try to revive it?
It will be... Remarkable. I really want to play this game, but with this FOV is so annoyng, I'm feel clastrophobic  I saw that if you downgrade the game version, you can use WiderscreenFixer, but with that you lose feature like deactivate aim assists, and no. With mouse + keyboard is an essential option.
|
|
|
Post by picoleet on Feb 23, 2022 4:03:37 GMT 10
Hello there! I'm having the same issue of teo with the script, black screen after activating it, and... EDIT: I studied WiderscreenFixer for developing my fix. Perhaps I can try to revive it?
It will be... Remarkable. I really want to play this game, but with this FOV is so annoyng, I'm feel clastrophobic  I saw that if you downgrade the game version, you can use WiderscreenFixer, but with that you lose feature like deactivate aim assists, and no. With mouse + keyboard is an essential option. Ok. I think I now have some idea what could be going wrong in your case. Can you please try this stripped out version of the cheatengine script? If it goes black again then it would be really helpful if you could post screenshot of memory viewer at address 0x48ceda. (PS: it would be nice to get some response before this weekend).
Reviving widescreenfixer will require time which I am finding hard to spare these days but I will try something either this or next weekend.
<?xml version="1.0" encoding="utf-8"?> <CheatTable CheatEngineTableVersion="18"> <CheatEntries> <CheatEntry> <ID>1116</ID> <Description>"Camera Distance Mod script (ZXC)"</Description> <Options moHideChildren="1"/> <LastState Activated="1"/> <Color>80000008</Color> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscan(cameraDistanceReadAOB,F3 0F 10 77 18 F3 0F 58 70 78) registersymbol(cameraDistanceReadAOB)
label(fCustomCameraDistance) registersymbol(fCustomCameraDistance)
alloc(newmem,1024) label(returnhere) label(originalcode) label(exit) label(setcameradistance)
newmem: //this is allocated memory, you have read,write,execute access //place your code here setcameradistance: movss xmm6,[fCustomCameraDistance] jmp exit
originalcode: movss xmm6,[edi+18]
exit: jmp returnhere
/// fCustomCameraDistance: dd (float)-100.0 ///
cameraDistanceReadAOB: //"rerev.exe"+48ceda jmp long newmem // 5 bytes hopefully returnhere:
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) cameraDistanceReadAOB: //"rerev.exe"+48ceda: db F3 0F 10 77 18 //Alt: movss xmm6,[edi+18] unregistersymbol(cameraDistanceReadAOB) unregistersymbol(fCustomCameraDistance) </AssemblerScript> <Hotkeys> <Hotkey> <Action>Activate</Action> <Keys> <Key>122</Key> </Keys> <ID>0</ID> </Hotkey> </Hotkeys> <CheatEntries> </CheatEntries> </CheatEntry> </CheatEntries> <UserdefinedSymbols> <SymbolEntry> <Name>cameraDistanceReadAOB</Name> <Address> 0048CEDA</Address> </SymbolEntry> </CheatTable>
|
|