IDA Pro Basic (Instruction of IDA )

it could be that the skill points are floats and you're returning integer

Thank you so much for the reply! If I could learn even a little here, it would be massive!

I only starting learning Saturday and I have had trouble finding guides on this, so I don't know what exactly that means. I mean I know what integers are but...might I kindly ask for an explanation? :sweatsmile:
 
Thank you so much for the reply! If I could learn even a little here, it would be massive!

I only starting learning Saturday and I have had trouble finding guides on this, so I don't know what exactly that means. I mean I know what integers are but...might I kindly ask for an explanation? :sweatsmile:
which game is this ? i can have a quick look to see what is the problem
 
which game is this ? i can have a quick look to see what is the problem

Final Fantasy Tactics: War of the Lions [ver. 2.0.0]. Perhaps I found the wrong Function to edit, but what I'm currently in that I found to make some change when modified is GetJobNumber(Int). If it helps, I could post the section. Or, here's a quick link if you need it to the unmodded (clean) working version I have.

Uploadfiles.io - Final Fantasy Tactics War of the Lions 2.0.0 UnModded.rar

EDIT

Oh, right, forgot to mention my intentions of editing the code. lol I'm trying to make JP (skill points) 9999 (or very high) and change job level exp to very low, so level ups require as little exp as possible to gain.
 
Last edited:
Final Fantasy Tactics: War of the Lions [ver. 2.0.0]. Perhaps I found the wrong Function to edit, but what I'm currently in that I found to make some change when modified is GetJobNumber(Int). If it helps, I could post the section. Or, here's a quick link if you need it to the unmodded (clean) working version I have.

Uploadfiles.io - Final Fantasy Tactics War of the Lions 2.0.0 UnModded.rar

EDIT

Oh, right, forgot to mention my intentions of editing the code. lol I'm trying to make JP (skill points) 9999 (or very high) and change job level exp to very low, so level ups require as little exp as possible to gain.

which function did you try for skill point
 
which function did you try for skill point

For adding skillpoints, I tried these functions and they resulted to the same 0 in game or did nothing at all upon editing:

GetJobNumber(Int) < this is the one that "works" by resulting back as 0

GetLocalJobNumber(short) < as far as I know, these two do nothing to what I am trying to achieve.
add_jobpoint(int,int) < as far as I know, these two do nothing to what I am trying to achieve.

Oh, and I thought to compare 2.0.0 edits to 1.0.0 and 1.1.0 edits, but the coding seems to be completely different, so that was a major fail.
 
Last edited:
For adding skillpoints, I tried these functions and they resulted to the same 0 in game or did nothing at all upon editing:

GetJobNumber(Int) < this is the one that "works" by resulting back as 0

GetLocalJobNumber(short) < as far as I know, these two do nothing to what I am trying to achieve.
add_jobpoint(int,int) < as far as I know, these two do nothing to what I am trying to achieve.

Oh, and I thought to compare 2.0.0 edits to 1.0.0 and 1.1.0 edits, but the coding seems to be completely different, so that was a major fail.
hmm i haven't test anything yet but from what i've seen in code it seems that this game only accept 9999 as maximum for job limit anything more than that would make it zero .. or another theory is anything above 9999 will show as 0 but it's still more than 9999 ... for example you put 10000 it shows as zero in game.. once you consume 1 job point it will go to 9999..etc .. but most likely it only accepts 9999 as max job point .. try to return say like 500 or something just not more than 9999 ... you can try 0F 07 02 E3 1E FF 2F E1 < that's returning 9999 value ..
this game reminds me of old days.. good luck
 
hmm i haven't test anything yet but from what i've seen in code it seems that this game only accept 9999 as maximum for job limit anything more than that would make it zero .. or another theory is anything above 9999 will show as 0 but it's still more than 9999 ... for example you put 10000 it shows as zero in game.. once you consume 1 job point it will go to 9999..etc .. but most likely it only accepts 9999 as max job point .. try to return say like 500 or something just not more than 9999 ... you can try 0F 07 02 E3 1E FF 2F E1 < that's returning 9999 value ..

Thank you for taking the time to help me with this.

Yes, the code I tried was 0F 07 02 E3 1E FF 2F E1. In instruction, it looks like this.

.text:001DBDC4 MOV R0, #0x270F
.text:001DBDC8 BX LR


It doesn't return as 0, so I guess that's a good thing, but it doesn't make any change, not even if JP is spent. I went ahead with trying something like 500 next, but I think I'm getting the 4byte hex wrong for the code. Something looks off with the result. My ARM calculator says it would be 7D 0F A0 E3 though so I used it:

.text:001DBDC4 MOV R0,#0x1F4
.text:001DBDC8 BX LR


However, it also simply doesn't work, so the introduction JP for the MC is still set at 180 and using points doesn't trigger the change. I guess returning as 0 is a lot worse than no change at all.

Next, I saw another MOV R6 register that was MOV R6, #0xFFFFFFFF (00 60 E0 E3), so I tried shifting it to match the 500/9999 value of R0, but MOV R6 wouldn't accept the same values of R0. It would change them to #0. I'm assuming R6 is a register that doesn't store values, and that's why its number is obscenely high. lol

So I decided to look at the pure apk again and the code I was changing;

Code:
text:001DBDC4 ; _DWORD __fastcall GetJobNumber(int)
.text:001DBDC4                 EXPORT _Z12GetJobNumberi
.text:001DBDC4 _Z12GetJobNumberi                                       ; DATA XREF: LOAD:000132F8↑o
.text:001DBDC4 ; __unwind {
.text:001DBDC4                 STMFD   SP!, {R4-R6,R10,R11,LR}
.text:001DBDC8                 ADD     R11, SP, #0x10
.text:001DBDCC                 MOV     R4, R0
.text:001DBDD0                 MOV     R6, #0xFFFFFFFF
.text:001DBDD4
.text:001DBDD4 loc_1DBDD4                                                     ; CODE XREF: GetJobNumber(int)+3C↓j
.text:001DBDD4                 ADD     R5, R6, #1
.text:001DBDD8                 MOV     R0, R5          ; int
.text:001DBDDC                 BL      j__Z11get_jobdatai ; get_jobdata(int)
.text:001DBDE0                 LDRB    R0, [R0]
.text:001DBDE4                 CMP     R0, R4
.text:001DBDE8                 ADDEQ   R0, R6, #1
.text:001DBDEC                 LDMEQFD SP!, {R4-R6,R10,R11,PC}
.text:001DBDF0                 CMP     R5, #0xA7
.text:001DBDF4                 MOV     R6, R5
.text:001DBDF8                 MOVGE   R0, #0xFFFFFFFF
.text:001DBDFC                 LDMGEFD SP!, {R4-R6,R10,R11,PC}
.text:001DBE00                 B       loc_1DBDD4
.text:001DBE00 ; } // starts at 1DBDC4
.text:001DBE00 ; End of function GetJobNumber(int)

And thought to leave STMFD and change ADD to > MOV R0 and add a BX LR after the MOV R6 (I know, blind tries xD), but couldn't figure out how to inject new code into the apk instead of editing existing code. So I decided to try shifting MOV R6 to BX LR.

It didn't crash or change anything, so I reverted back to pure again. :sweat:

this game reminds me of old days.. good luck

Oh, thanks for the good luck! ahaha hopefully I can figure it out or someone can point out what I might be doing wrong. xD

EDIT 2

I DID IT! Whoo! Well, sort of! It only works for Ramza, but no big deal!

It was a missing BX LR after my second job edit! I needed to change GetJobNumber(int) AND GetLocalJobNumber(short)! ahaha

Thank you @icry4u, your help was great! The new values didn't cause a crash AND it led me to realize I was an idiot and forgot to change the second Function! Thank you so much! Now I just need to figure out why it is only working for Ramza! (y):blush:
 
Last edited:
Thank you for taking the time to help me with this.

Yes, the code I tried was 0F 07 02 E3 1E FF 2F E1. In instruction, it looks like this.

.text:001DBDC4 MOV R0, #0x270F
.text:001DBDC8 BX LR


It doesn't return as 0, so I guess that's a good thing, but it doesn't make any change, not even if JP is spent. I went ahead with trying something like 500 next, but I think I'm getting the 4byte hex wrong for the code. Something looks off with the result. My ARM calculator says it would be 7D 0F A0 E3 though so I used it:

.text:001DBDC4 MOV R0,#0x1F4
.text:001DBDC8 BX LR


However, it also simply doesn't work, so the introduction JP for the MC is still set at 180 and using points doesn't trigger the change. I guess returning as 0 is a lot worse than no change at all.

Next, I saw another MOV R6 register that was MOV R6, #0xFFFFFFFF (00 60 E0 E3), so I tried shifting it to match the 500/9999 value of R0, but MOV R6 wouldn't accept the same values of R0. It would change them to #0. I'm assuming R6 is a register that doesn't store values, and that's why its number is obscenely high. lol

So I decided to look at the pure apk again and the code I was changing;

Code:
text:001DBDC4 ; _DWORD __fastcall GetJobNumber(int)
.text:001DBDC4                 EXPORT _Z12GetJobNumberi
.text:001DBDC4 _Z12GetJobNumberi                                       ; DATA XREF: LOAD:000132F8↑o
.text:001DBDC4 ; __unwind {
.text:001DBDC4                 STMFD   SP!, {R4-R6,R10,R11,LR}
.text:001DBDC8                 ADD     R11, SP, #0x10
.text:001DBDCC                 MOV     R4, R0
.text:001DBDD0                 MOV     R6, #0xFFFFFFFF
.text:001DBDD4
.text:001DBDD4 loc_1DBDD4                                                     ; CODE XREF: GetJobNumber(int)+3C↓j
.text:001DBDD4                 ADD     R5, R6, #1
.text:001DBDD8                 MOV     R0, R5          ; int
.text:001DBDDC                 BL      j__Z11get_jobdatai ; get_jobdata(int)
.text:001DBDE0                 LDRB    R0, [R0]
.text:001DBDE4                 CMP     R0, R4
.text:001DBDE8                 ADDEQ   R0, R6, #1
.text:001DBDEC                 LDMEQFD SP!, {R4-R6,R10,R11,PC}
.text:001DBDF0                 CMP     R5, #0xA7
.text:001DBDF4                 MOV     R6, R5
.text:001DBDF8                 MOVGE   R0, #0xFFFFFFFF
.text:001DBDFC                 LDMGEFD SP!, {R4-R6,R10,R11,PC}
.text:001DBE00                 B       loc_1DBDD4
.text:001DBE00 ; } // starts at 1DBDC4
.text:001DBE00 ; End of function GetJobNumber(int)

And thought to leave STMFD and change ADD to > MOV R0 and add a BX LR after the MOV R6 (I know, blind tries xD), but couldn't figure out how to inject new code into the apk instead of editing existing code. So I decided to try shifting MOV R6 to BX LR.

It didn't crash or change anything, so I reverted back to pure again. :sweat:



Oh, thanks for the good luck! ahaha hopefully I can figure it out or someone can point out what I might be doing wrong. xD

EDIT

AHAHA

I don't know what happened, but I got it to "work". Somehow it is also unlocking ALL abilities prior to unlocking them with JP/skill points. The stranger part is that I have to "trick" it into accepting that 0 is actually infinite. What I noticed how this change happened was that I went over my money edit and changed the value to a little lower.

Now I know what line does this JP ultra unlock, maybe I can tackle it so it JUST gives JP! xD
great glad that you managed to get it working
 
Yea, now I just gotta figure out why it is only working for Ramza and also unlocking all skills before actually unlocking them. It is definitely something in the two functions I'm editing that is "screwing" up the mod. Trial and error I think will result in figuring it out.
 
Nope. I can't seem to figure this out. No matter what I do, it only works for Ramza, and zero outs the JP of other party members. I don't understand what I could be missing. :sweat:
 
Last edited:
Okay, I'm honestly at my wit's end here. I've googled it and I've tried just about everything I can think of, and I can only get it to work for the main character Ramza. I'd really love to do this now, not just for myself, but for all the people that are waiting for a working modded version of 2.0.0 (and there are a lot of us). :sweat:

If anyone has experience and wouldn't mind helping here by maybe pointing something out to me that I could try or something I'm doing wrong with the editing, I'd honestly appreciate it beyond words. I've been tackling this since the start of February! :persevere:
 
cool, but here are some more important hex values
Code:
01 00 A0 E3 1E FF 2F E1       =     VALUE 1 Also = True used for bool
00 00 A0 E3 1E FF 2F E1        =     Value 0 Also = False used for bool
 
Back
Top Bottom