
Originally Posted by
yavorovich
Could you please give this patch? I want to make some experiments with it.
Sure.
Here is the code I use with the game version SLPM_667.50
Code:
Master Code
9044BEA0 0C112F50
----- ----- ----- ----- ----- ----- ----- -----
The Following 3 cheats modify the Exp gain factor to three different
values, depending on which of the buttons Down, Right or Up that you press
simultaneously with the Select button. The new Exp rate will then apply to
all monsters slain thereafter, until you change it again (or reboot).
The highest rate gives one MegaExp for each Exp point you'd normally get.
The medium rate gives one KiloExp for each Exp point you'd normally get.
The lowest rate is just what you would normally get.
----- ----- ----- ----- ----- ----- ----- -----
SeUp => Maximum Exp rate (multiplier 2^20)
E001FFEE 0056E5DC if u16(gamepad) == ~(Select|Up)
203B6BC4 0002AD00 patch opcode for 20 bit shift
SeRt => Medium Exp rate (multiplier 2^10)
E001FFDE 0056E5DC if u16(gamepad) == ~(Select|Right)
203B6BC4 0002AA80 patch opcode for 10 bit shift
SeDn => Normal Exp rate (multiplier 2^0)
E001FFBE 0056E5DC if u16(gamepad) == ~(Select|Down)
203B6BC4 0002A800 patch opcode for 0 bit shift
I also have a similar code to control the accumulation of LP, but unfortunately I've lost the document form of it, so for now I'll just type in the raw codes from some notes I kept.
Code:
Set LP multiplier 1, 32, 999 at button combo R3 + Dn, Rt, Up respectively
E001FFBB 0056E5DC
202ED1CC 0040902D
E001FFDB 0056E5DC
202ED1CC 00029178
E001FFEB 0056E5DC
202ED1CC 000292B8
Note that the game itself imposes an absolute 3 digit limit on all LP values, so you won't get any 'astronomical' LP amounts no matter what you do, and the top setting will just give you 999 LP for anything (though the real factor internally is 10 shifts == 1024).
Also i thinking about divider which used in game for 2 or 3 active party members. It simply divide earned EXP for 2 or 3 and round this for integer. For example if foe gives 16 EXP than each of active party member earn 5 EXP. Maybe there is a way to increase thats divider for 2 or 3 active party members?
I think you may be wasting your time on this angle. To me it seems that the entire EXP division system has been completely replaced in the IZJS version of the game. So basing your experiments on results with the old game versions will lead nowhere for the newer game version.
P.S. I try to manipulate with patch from US game version:
comment=2x Exp Gained (After Battle)
patch=1,EE,203B3D34,word,00000000
patch=1,EE,203B3EE4,word,0002A840
Sorry, but I don't understand this patch notation. The 8 digit code values are easy enough to understand, but I have no idea what you mean by "patch=1,EE".
Checking my cheats for the US version, your cheats clearly manipulate one of the same variables I used above (though for the IZJS version), and in partly the same way, as 0x0002A840 is a shift opcode (for a single shift left, as shown here).
It helps to set multiplier to 2x, 4x, 8x and 16x, but i didn't find a way hot to set a divider.
Look at my cheats again, and note how they use different patch values for an opcode, with variations in the bit field of that value which controls the number of left-shift steps that opcode will perform. It should be quite simple to replace that opcode with a corresponding right-shift opcode, and then control the shift amount through the corresponding bit field of that opcode.
Essentially you manipulate a 5-bit field starting at bit 6 of the opcode, so that the value 1 is encoded as 0x00000040 while the top value of 31 shifts is encoded as 0x000007C0, with the value you need being 'ored' into the base opcode value. And the effective divisor is naturally two raised to the power of that shift value.
The main opcode in this case is represented by the combination of the top 11 bits and the lowest 6 bits of the overall value, with the remaining 15 bits only determining the register usage and shift amount. For top 11 bits and bottom 6 bits of all zeroes, as used in the EXP multiplier, the corresponding opcode is "sll", which has a right shift counterpart in "srl" encoded in exactly the same way, but with bit 1 set instead of cleared.
So instead of a base opcode of 0x0002A800 for "sll" we instead have 0x0002A802 for "srl", and if we assume that you just want to halve the Exp amount, so that you need a shift value of 1, but encoded as 0x00000040, the resulting patch value (to replace those in my codes) becomes 0x0002A842. And a possible way to make that button controlled could be like this (similar to my other cheats):
Code:
SeDn => Halved Exp rate (Divisor 2^1)
E001FFBE 0056E5DC if u16(gamepad) == ~(Select|Down)
203B6BC4 0002A842 patch opcode for 1 bit shift right
Unfortunately my own setup and documents are in a rather messy state right now after a series of computer crashes, so I can't conveniently test all this myself right away, but I'm sure others will be able to do it too, long before I get around to it... (hopefully you as well)
I hope I have given enough to go on for you to do the rest yourself.
NB: I did not specify any replacement opcode to divide LP above, because I think it inadvisable to mess with that. Since most monsters only give a single LP, any reduction would yield zero, which the game code is not intended to handle. But the same principle would apply there too, though with some different register usage and opcode choice. Those multipliers used "dsll" with base opcode (for those registers) of 0x00029038, and the corresponding "dsrl" equivalent would then be 0x0002903A (again differing only in bit 1).
Best regards: dlanor