VOGONS


First post, by legion_pheonix

User metadata
Rank Newbie
Rank
Newbie

Please help me unlock at 60 fps.
I found such a hex line "89 88 08 3D" and changed it to "00 00 00 00".
The game was unlocked, but the problem remained with the animation of all units and characters, they remained at 30 fps.
If you turn on the console with the "backspace" key and type "60fps", then the animation becomes 60 fps

Attachments

  • Filename
    WMAIN.zip
    File size
    355.96 KiB
    Downloads
    17 downloads
    File license
    Fair use/fair dealing exception

Reply 1 of 8, by teleguy

User metadata
Rank Member
Rank
Member

I would try Cheat Engine. Scan the game, then set 60 fps via console and scan for changed values. Cheat Engine can also detect which part of the game's code is responsible for modifying these values.

Reply 2 of 8, by legion_pheonix

User metadata
Rank Newbie
Rank
Newbie
teleguy wrote:

I would try Cheat Engine. Scan the game, then set 60 fps via console and scan for changed values. Cheat Engine can also detect which part of the game's code is responsible for modifying these values.

Thanks for the help, I started to do it yesterday. The Cheat Engine finds this address 0019FE20 with a hex value of 3C 88 88 89, but HxD does not display this address in principle.
I ask for help, I can lay out the game.

Reply 4 of 8, by teleguy

User metadata
Rank Member
Rank
Member
legion_pheonix wrote:
teleguy wrote:

I would try Cheat Engine. Scan the game, then set 60 fps via console and scan for changed values. Cheat Engine can also detect which part of the game's code is responsible for modifying these values.

Thanks for the help, I started to do it yesterday. The Cheat Engine finds this address 0019FE20 with a hex value of 3C 88 88 89, but HxD does not display this address in principle.
I ask for help, I can lay out the game.

It's probably just some address in RAM where the game stores that value, it's not inside the exe. Does setting or locking the framerate with CE work using that address? (The address might change every time you run the game though, so it might be better to repeat the entire process for testing.)

Reply 5 of 8, by Dege

User metadata
Rank Oldbie
Rank
Oldbie

0019FE20 is a typical stack-address for 32 bit applications.
So, the game (calculates or reads it from somewhere and then) writes that value to the stack for passing it as a parameter to a function.

Reply 6 of 8, by teleguy

User metadata
Rank Member
Rank
Member
Dege wrote:

0019FE20 is a typical stack-address for 32 bit applications.
So, the game (calculates or reads it from somewhere and then) writes that value to the stack for passing it as a parameter to a function.

So that address is pretty useless for our purpose?

Reply 7 of 8, by legion_pheonix

User metadata
Rank Newbie
Rank
Newbie
Dege wrote:

0019FE20 is a typical stack-address for 32 bit applications.
So, the game (calculates or reads it from somewhere and then) writes that value to the stack for passing it as a parameter to a function.

Can you help in this matter?
I can drop you an archive with the game.

Reply 8 of 8, by Dege

User metadata
Rank Oldbie
Rank
Oldbie

I figured out how the game handles 60/30 fps:

If memory address 0x882294 (part of a table, it's an entry) is not 0 then timing calculations goes on for 60fps, 30 otherwise. Typing '60fps' flips this value between 0 and 1.
It's not part of the executable so it cannot just be modified to 1 to have 60fps as default.

Adress 0x882294 is checked at two points in the game, selecting between two values at each point:
- 00 00 80 3c (float 0.015625), which is 1/64 and 00 00 00 3d (float 0.03125) which is 1/32 (I think these values are used for the timing of character animations)
- 89 88 88 3C (float 0.0166666675), which is 1/60 and 89 88 08 3D (float 0.0333333351) which is 1/30, and those values are for timing of the refresh rate

I simply swapped those values in the code. Also, I swapped strings '30' and '60' in LOCALIZE.LAB to have proper message strings when using the 60fps command.
This way 60 fps became the default. I think I'll update my patch.