So due to a request
I decided to write indepth tutorial about the methods I used to find speed modifier
Also If someone can upload a better tutorial about how to find frame divisor I will be really happy
Note: Change the speed modifier wont give you a better performance.
Tutorial - finding speed modifier by using cheat file (Recommende method)
Step 1: download ELF search tool ps2
https://www.ps2-home.com/forum/viewtopic.php?t=6182
Step 2: extract the ELF file from the game and put it In the program, change the settings to big and executable
Step 3: from the list, Choose a value to search from and a value to replace:
Below there is a "Finding the meaning behind codes" tutorial to better understand this section.
Common Values
Search for --> replace with
3cxx3f80 --> 3cxx3f00
3cxx3d08 --> 3cxx3c88
3f800000 --> 3f000000
3d088889 --> 3c888889
3cxx41f0 --> 3cxx4270
41f00000 --> 42700000
24xx001E --> 24xx003c
0000001E --> 0000003c
Less-Common Values
(incomplete list)
40000000 --> 3f800000
3f000000 --> 3e800000
3cxx4000 --> 3cxx3f80
3cxx3f00 --> 3cxx3e80
3cxx41f0 --> 3cxx4270
3CXX3FXX --> 3cxx3exx (after you find the address correct it to the needed value)
3cxx40xx --> 3cxx3fxx (after you find the address correct it to the needed value)
3fxxxxxx --> 3exxxxxx
40xxxxxx --> 3fxxxxxx
Tip: you can try to use lower Values just to be sure you found the speed modifier
For example In Forever Kingdom I used
3cxx3f80 --> 3cxx3a00
So everytime an animation will be played it will be so slow that it will be seem that the characters stoped
This helped me a lot since the game has a lot of speed modifiers
Second Tip: if the game suddenly becomes faster you need to increase the value in order to decrease the speed modifier
Step 4: copy all the codes the program gave to you into a cheat file, boot the game without the cheat file activated,
Go to a place you want to test, save state and then load the cheat file
Step 5: 1 of the 3 possibes happened
A. The Game became unplayable
B. The Game is playable and the speed modifier changed
C. The Game is playable and the speed modifier is the same as before
From here try to divide the codes until you find the one code that you need, copy some codes as a backup and delete them, save the cheat file and load the save state to see what happens.
Repeat this until you ended up with one code
For Example:
The game is in unplayable state after I loaded the cheat file, so now i will delete half of codes and load my save state, the game is now playable but I the speed modifier is the same.
I will now use only the codes that I deleted before which will make my game unplayable again, so now i will use half of that, and the speed modifier changed I keep removing codes until i found that one line that causes it.
that is my speed modifier
Tip: you can Also by this method try to find the code that makes the game unplayable so you will know to avoid using it.
If you didnt find the speed modifier you need try to use another value from the list at Step 4 or go to a value you did find and try to find near that address another address that is responsible to the speed modifier
For example
I once encoutered the value
3C033E4C And I needs to change it to 3C033ECC
Step 6: Reducing the speed modifier can causes problems try to use the same method I used to find speed modifier to find fixes Usually its a lui Command with the same value as the speed modifier
For example the player cant run because the speed modifier was changed from 40000000 --> 3f800000
So I should look for 3cxx4000 --> 3cxx3f80
Or the player cant run because the speed modifier was changed from 3cxx3f80 --> 3cxx3f00
So I should look for 3cxx3f80 --> 3cxx3f00
Tip: sometimes you dont need to reduce the value that much for example
Tutorial - finding speed modifier by using cheat engine [u][b](Not Recommended method)[/u][/b]
I don't recommend this method since the first method is so much better but if you want to create 60fps hacks for other emulators that are based on mips architucture like the ppsspp or rpcs3 then this is your only method (aside from analysing the game).
It's pretty much like the previous tutorial but with some changes
Step 1: Load the game and make a save state in a place you want to test
Step 2: Set the search range to be the range of emulated system
For example in pcsx2 32bit
It's start with
20000000
End With
22000000
Step 3: we have 3 lists each list require dieffrent method
Note: look at the tips I gave in the previous tutorial at Step 3
They can Also help here.
(incomplete lists)
*List 1*
Search for --> replace with
3f800000 --> 3f000000
40000000 --> 3f800000
3f000000 --> 3e800000
41f00000 --> 42700000
3d088889 --> 3c888889
0000001E --> 0000003c
Note: Incase you need to increase the value in order to decrease the speed modifier
Search for --> replace with
3f800000 --> 40000000
40000000 --> 40800000
3f000000 --> 3f800000
Method: Set the type of value to "4 byte" and enable hex, search the value.
Take all the results to the edit zone and paste the new value you replace.
*List 2*
Search for --> replace with
?? ?? ?? 3f --> 3e000000 (after you hit the address correct it to the needed value)
?? ?? ?? 40 --> 3f000000 (after you hit the address correct it to the needed value)
Note: Incase you need to increase the value in order to decrease the speed modifier
Search for --> replace with
?? ?? ?? 3f --> 41000000 (after you hit the address correct it to the needed value)
?? ?? ?? 40 --> 42000000 (after you hit the address correct it to the needed value)
Method: Set the type of value to "arrray of byte" and enable hex , search the value.
Take all the results to the edit zone and change the type of value to 4 bytes paste the new value you replace.
List 3
Search for --> replace with
80 3f ?? 3c --> 3f00
00 40 ?? 3c --> 3f80
00 3f ?? 3c --> 3e80
F0 41 ?? 3c --> 4270
08 3d ?? 3c --> 3c88
?? 3f ?? 3c --> 3e00 (after you hit the address correct it to the needed value)
?? 40 ?? 3c --> 3f00 (after you hit the address correct it to the needed value)
1e 00 ?? 24 --> 003c
Note: Incase you need to increase the value in order to decrease the speed modifier
80 3f ?? 3c --> 4000
00 40 ?? 3c --> 4080
00 3f ?? 3c --> 3f80
?? 3f ?? 3c --> 4100 (after you hit the address correct it to the needed value)
?? 40 ?? 3c --> 4200 (after you hit the address correct it to the needed value)
Method: Set the type of value to "arrray of byte", search the value.
Take all the results to the edit zone and change the type of value to 2 bytes paste the new value you replace.
Now you need to clean the jit cache
In pcsx2 you can do that by go to emulation settings --> EE --> set EE to Interpreter and then back to recompiler
Step 4:from here it's pretty much the same as Step 5 and 6 in the previous tutorial, but I recommend of a few changes, dont try to load all the cheats in once sepreate it to small groups.
Finding the meaning behind codes
most of our values are float.
you can use this website to translate float to nubers
https://gregstoll.com/~gregstoll/floattohex/
For example
3f800000 in hex is 1 in float
As for the Values that starts with
3cxx
3c is lui comand that says load unit the xx is the register number and what come after that is short version of the hex value
For example
3c023f80 = load unit register number 02 the value 3f80 (which is a short version of 3f800000 which is equal to 1 in float)
List of common Values and thier meaning
3f800000 is 1
40000000 is 2
3f0000000 is 0.5
41f000000 is 30
427000000 is 60
3d088889 is 0.033333... (1/30)
3c888889 is 0.016666.... (1/60)
some values are intger meaning the vlue could only be netural number (1,2,3,4....)
0000001E is meaning 30 so we want to change it to 60 which is 0000003c
24xx001E is load 30 so we want to change it to load 60 which is 24xx003c
Examples of how to use speed modifier:
1. While making a 60fps hack I found a speed modifier
3C033E4C if i increase it the animation is slower
3E4C0000 is 0.199219
0.199219x2=0.0398438
0.398438 is 3ecc0011
So my value is
3C033ECC
2.I want to take my speed modifier for a pal game and set it to Fit 60fps
my original value is 3c013f80
60/50 =1.2
1/1.2 = 0.833333...
0.833333=3f555555
So my new value is 3c013f55
3. I want to run my 30 fps game to run at 144fps
The original value is 3d088889
3d088889 is 0.033333... (1/30)
So I want it to be
1/144 = 0.006944444
I use the float to hex caculator
And my new value is 3be38e38
4. I cant run a 60fps game at a Native speed
So I will set the frame rate to 20fps
My value is 42700000
42700000 is 60
41a00000 is 20
So 41a00000 is my new value
Hope I was able to help someone, I am looking to your patches in the future