Is there any way I can find the corresponding compensation for ruby?
Furthermore when I applied to Emerald, the game would soft reset every time I received the experience
Well, the creator left a link with both routines, obviously you must apply depending on the rom you use, surely you are putting FR in Em and that's why that happens, and I don't know if there is a way to find all that data for ruby, as you do. I say it is more complicated to find those data for ruby, I would have to review them but I do not assure you that they are all found.
In Generation V, a new way of determining the Experience Points gained after Battle was introduced. Previously, the Experience Formula was a flat one, which did not change based on Level Differences between your Pokemon and the other one.
In Black & White, they used a Scaled Experience Formula, which would cause your Pokemon to gain more experience if their opponent was a higher Level, and less if their opponent was a lower one.
Today, I am sharing a way to have this sort of Scaled Experience Points in Fire Red or Emerald. I have included the download link to a folder which contains four items.
The Instruction Manual explains how the routine works and any extra information that is necessary to know (particularly if you would like to modify this routine for your specific hack).
Considering I first uploaded the first version of this routine a long time ago, you may have an older version of it. This version may be preferable to that one, and it is smaller than the previous version is. Therefore, one can simply insert it over the old version and not have to repoint anything.
This routine is compatible with Think0028's Experience All Patch. His original download link is unfortunately broken, hence why I put it in the download folder. If it was still active, I would have linked directly to it.
If you inserted the Disable Experience Gain With Flag routine, originally by FBI, then you may wish to remove it, as this routine implements it. I am not sure if there is a conflict due to this, but at the very least there is a redundant check if you have two routines which both check the same Flag. It is also possible that this routine bypasses that one entirely, in which case you would want to remove it to avoid wasting space.
Thanks and credits to FBI for that original routine, as without it I would likely not have been able to find the correct branching address for this routine.
As I have nowhere else to post this information, I will say here that to remove the 1.5x Experience Boost you get for defeating a Pokemon in a Trainer Battle (like they did in Generation VII), do the following:
Put 07 E0 at 0x21DD8 (FireRed) or 0x4A698 (Emerald)
Put 1C E0 at 0x21E00 (FireRed) or put 28 E0 at 0x4A6C0 (Emerald)
Amazing stuff, but I never get success :(
I try the script for EM, first I modified 0x0804A67B to 0x0804A66B at line 10 because I don't use that Exp. All patch, then I compiled it and insert them into 0x32A5F0 since there has a lot of 00, modified 0x4A5AC to 00 48 00 47 F0 A5 32 08 as your tutorial said, seems it all OK, but...
I tried to find a wild Pokemon to battle, after I win, the game crashed and mGBA gives an error message said somehow "Jumped to invalid address 0x09670880".
Could you help me how to implement it so it works well? Thanks.