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.