[QUOTE="DrummerIX, post: 140126, member: 1466"]
EDIT 7.25:
I think there are too many issues with the EXP Multiplier, so I'm removing it for now. It wasn't working that well. If you need to level up, just modify your EXP manually and fight a battle. To kind of compensate, I added an option for Persona Minimum Stat Up with a default value of 5. This sets the stat up when you level up to the minimum you specify if it's below that. With this option, you don't need too many level ups to have a powerful Persona stat wise. I think I'm going to restart my game and test some of these new options to see if I like how it plays with them.
[/QUOTE]
Hi DrummerIX, thanks for your work!!! I've made some EXP Multipliers scripts on my own, one for the MC, one for your party, and another for your current persona (I don't know enough to merge then in one script, and being sincere, don't really have the time right now... Although, it doesn't seem that complicated...) And they "work" as intended, because you can actually see the change on exp gained on screen.. But, only the MC level up immediately if they gained enough exp... Your party and your persona gains the exp, then on the status screen it indicates that they need 0 XP to level up... Then after the next battle they finally level up... Do you have any idea why?? Checking the pointers, the amount gained corresponds with what is showed on the battle result screen... Here are the scripts:
[SPOILER="MC Script"][CODE]
4127
"MC EXP MUltiplier"
Auto Assembler Script
{ Game : P4G.exe
Version:
Date : 2020-06-15
Author :
This script does blah blah blah
}
[ENABLE]
aobscanmodule(MC_EXPMult_AOB,P4G.exe,8B 70 40 01 FE) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(MCEXPMult)
registersymbol(MCEXPMult)
newmem:
imul edi,[MCEXPMult]
code:
mov esi,[eax+40]
add esi,edi
jmp return
MCEXPMult:
dd #5
MC_EXPMult_AOB:
jmp newmem
return:
registersymbol(MC_EXPMult_AOB)
[DISABLE]
MC_EXPMult_AOB:
db 8B 70 40 01 FE
unregistersymbol(MCEXPMult)
unregistersymbol(MC_EXPMult_AOB)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "P4G.exe"+22B5B389
"P4G.exe"+22B5B369: C1 E8 1F - shr eax,1F
"P4G.exe"+22B5B36C: 01 D0 - add eax,edx
"P4G.exe"+22B5B36E: 89 46 08 - mov [esi+08],eax
"P4G.exe"+22B5B371: 79 07 - jns P4G.exe+22B5B37A
"P4G.exe"+22B5B373: C7 46 08 00 00 00 00 - mov [esi+08],00000000
"P4G.exe"+22B5B37A: 8B 46 68 - mov eax,[esi+68]
"P4G.exe"+22B5B37D: 30 D2 - xor dl,dl
"P4G.exe"+22B5B37F: 89 45 DC - mov [ebp-24],eax
"P4G.exe"+22B5B382: 30 C9 - xor cl,cl
"P4G.exe"+22B5B384: A1 EC 84 DF 00 - mov eax,[P4G.exe+9F84EC]
// ---------- INJECTING HERE ----------
"P4G.exe"+22B5B389: 8B 70 40 - mov esi,[eax+40]
"P4G.exe"+22B5B38C: 01 FE - add esi,edi
// ---------- DONE INJECTING ----------
"P4G.exe"+22B5B38E: 66 90 - nop 2
"P4G.exe"+22B5B390: 0F B6 C1 - movzx eax,cl
"P4G.exe"+22B5B393: 3B 34 85 A0 E7 98 00 - cmp esi,[eax*4+P4G.exe+58E7A0]
"P4G.exe"+22B5B39A: 7C 0B - jl P4G.exe+22B5B3A7
"P4G.exe"+22B5B39C: FE C1 - inc cl
"P4G.exe"+22B5B39E: FE C2 - inc dl
"P4G.exe"+22B5B3A0: 80 F9 63 - cmp cl,63
"P4G.exe"+22B5B3A3: 72 EB - jb P4G.exe+22B5B390
"P4G.exe"+22B5B3A5: B2 63 - mov dl,63
"P4G.exe"+22B5B3A7: 0F B6 C2 - movzx eax,dl
}
4128
"Multiplier"
4 Bytes
MCEXPMult
[/CODE][/SPOILER]
[SPOILER="Party Script"][CODE]
4118
"Party EXP Multiplier"
Auto Assembler Script
{ Game : P4G.exe
Version:
Date : 2020-06-15
Author :
This script does blah blah blah
}
[ENABLE]
aobscanmodule(Party_EXPMult_AOB,P4G.exe,F4 01 46 08 8A 46 04) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(PartyEXPMult)
registersymbol(PartyEXPMult)
newmem:
imul eax,[PartyEXPMult]
code:
add [esi+08],eax
mov al,[esi+04]
jmp return
PartyEXPMult:
dd #5
Party_EXPMult_AOB+01:
jmp newmem
nop
return:
registersymbol(Party_EXPMult_AOB)
[DISABLE]
Party_EXPMult_AOB+01:
db 01 46 08 8A 46 04
unregistersymbol(PartyEXPMult)
unregistersymbol(Party_EXPMult_AOB)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "P4G.exe"+22B5E1D7
"P4G.exe"+22B5E1B8: C1 E0 04 - shl eax,04
"P4G.exe"+22B5E1BB: 05 34 0A 00 00 - add eax,00000A34
"P4G.exe"+22B5E1C0: 01 C8 - add eax,ecx
"P4G.exe"+22B5E1C2: F6 00 01 - test byte ptr [eax],01
"P4G.exe"+22B5E1C5: 0F 45 F0 - cmovne esi,eax
"P4G.exe"+22B5E1C8: EB 0A - jmp P4G.exe+22B5E1D4
"P4G.exe"+22B5E1CA: E8 A1 79 5F DD - call P4G.exe+155B70
"P4G.exe"+22B5E1CF: 8B 55 FC - mov edx,[ebp-04]
"P4G.exe"+22B5E1D2: 89 C6 - mov esi,eax
"P4G.exe"+22B5E1D4: 8B 45 F4 - mov eax,[ebp-0C]
// ---------- INJECTING HERE ----------
"P4G.exe"+22B5E1D7: 01 46 08 - add [esi+08],eax
"P4G.exe"+22B5E1DA: 8A 46 04 - mov al,[esi+04]
// ---------- DONE INJECTING ----------
"P4G.exe"+22B5E1DD: 3C 63 - cmp al,63
"P4G.exe"+22B5E1DF: 73 1E - jae P4G.exe+22B5E1FF
"P4G.exe"+22B5E1E1: 0F B6 D0 - movzx edx,al
"P4G.exe"+22B5E1E4: 89 F1 - mov ecx,esi
"P4G.exe"+22B5E1E6: 66 42 - inc dx
"P4G.exe"+22B5E1E8: E8 E3 EC 54 DD - call P4G.exe+ACED0
"P4G.exe"+22B5E1ED: 8B 55 FC - mov edx,[ebp-04]
"P4G.exe"+22B5E1F0: 39 46 08 - cmp [esi+08],eax
"P4G.exe"+22B5E1F3: 72 0A - jb P4G.exe+22B5E1FF
"P4G.exe"+22B5E1F5: 89 F1 - mov ecx,esi
}
4119
"Multiplier"
4 Bytes
PartyEXPMult
[/CODE][/SPOILER]
[SPOILER="Persona Script"][CODE]
4129
"Persona EXP Multiplier"
Auto Assembler Script
{ Game : P4G.exe
Version:
Date : 2020-06-15
Author :
This script does blah blah blah
}
[ENABLE]
aobscanmodule(Persona_EXPMult_AOB,P4G.exe,01 46 08 8A 46 04) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(PSEXPMult)
registersymbol(PSEXPMult)
newmem:
imul eax,[PSEXPMult]
code:
add [esi+08],eax
mov al,[esi+04]
jmp return
PSEXPMult:
dd #5
Persona_EXPMult_AOB:
jmp newmem
nop
return:
registersymbol(Persona_EXPMult_AOB)
[DISABLE]
Persona_EXPMult_AOB:
db 01 46 08 8A 46 04
unregistersymbol(PSEXPMult)
unregistersymbol(Persona_EXPMult_AOB)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "P4G.exe"+22B5CF6C
"P4G.exe"+22B5CF49: 0F BF C7 - movsx eax,di
"P4G.exe"+22B5CF4C: BE 00 00 00 00 - mov esi,00000000
"P4G.exe"+22B5CF51: 8D 0C 40 - lea ecx,[eax+eax*2]
"P4G.exe"+22B5CF54: A1 B8 84 DB 00 - mov eax,[P4G.exe+9B84B8]
"P4G.exe"+22B5CF59: 05 34 0A 00 00 - add eax,00000A34
"P4G.exe"+22B5CF5E: C1 E1 04 - shl ecx,04
"P4G.exe"+22B5CF61: 01 C8 - add eax,ecx
"P4G.exe"+22B5CF63: F6 00 01 - test byte ptr [eax],01
"P4G.exe"+22B5CF66: 0F 45 F0 - cmovne esi,eax
"P4G.exe"+22B5CF69: 8B 45 F8 - mov eax,[ebp-08]
// ---------- INJECTING HERE ----------
"P4G.exe"+22B5CF6C: 01 46 08 - add [esi+08],eax
"P4G.exe"+22B5CF6F: 8A 46 04 - mov al,[esi+04]
// ---------- DONE INJECTING ----------
"P4G.exe"+22B5CF72: 3C 63 - cmp al,63
"P4G.exe"+22B5CF74: 73 1E - jae P4G.exe+22B5CF94
"P4G.exe"+22B5CF76: 0F B6 D0 - movzx edx,al
"P4G.exe"+22B5CF79: 89 F1 - mov ecx,esi
"P4G.exe"+22B5CF7B: 66 42 - inc dx
"P4G.exe"+22B5CF7D: E8 4E FF 54 DD - call P4G.exe+ACED0
"P4G.exe"+22B5CF82: 8B 55 FC - mov edx,[ebp-04]
"P4G.exe"+22B5CF85: 39 46 08 - cmp [esi+08],eax
"P4G.exe"+22B5CF88: 72 0A - jb P4G.exe+22B5CF94
"P4G.exe"+22B5CF8A: 89 F1 - mov ecx,esi
}
4130
"Multiplier"
4 Bytes
PSEXPMult
[/CODE][/SPOILER]
And again, thanks!!!