Difference between revisions of "Calculate Move EXP/JP UP To earn"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(Created page with "<font face='Courier New'> 0017f0ec: 27bdffe8 addiu r29,r29,0xffe8 0017f0f0: afb00010 sw r16,0x0010(r29) 0017f0f4: 00808021 addu r16,r4,r0 0017f0f8: 3c048019 lui r4,0x801...")
 
m (Talcall moved page Move Cap? to Calculate Move EXP/JP UP To earn: because that's what it does)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<font face='Courier New'>
 
 
 
  0017f0ec: 27bdffe8 addiu r29,r29,0xffe8
 
  0017f0ec: 27bdffe8 addiu r29,r29,0xffe8
 
  0017f0f0: afb00010 sw r16,0x0010(r29)
 
  0017f0f0: afb00010 sw r16,0x0010(r29)
  0017f0f4: 00808021 addu r16,r4,r0
+
  0017f0f4: 00808021 addu r16,r4,r0 Unit data pointer
 
  0017f0f8: 3c048019 lui r4,0x8019
 
  0017f0f8: 3c048019 lui r4,0x8019
  0017f0fc: 9084f7f0 lbu r4,-0x0810(r4) load ?? some initialization?
+
  0017f0fc: 9084f7f0 lbu r4,-0x0810(r4) load number of tiles moved
 
  0017f100: 340200fe ori r2,r0,0x00fe
 
  0017f100: 340200fe ori r2,r0,0x00fe
 
  0017f104: 308300ff andi r3,r4,0x00ff
 
  0017f104: 308300ff andi r3,r4,0x00ff
  0017f108: 1462000d bne r3,r2,0x0017f140 branch if ?? != 0xfe
+
  0017f108: 1462000d bne r3,r2,0x0017f140 branch if No. Tiles Moved != 0xfe
 
  0017f10c: afbf0014 sw r31,0x0014(r29)
 
  0017f10c: afbf0014 sw r31,0x0014(r29)
 
  0017f110: 0c0088c3 jal 0x0002230c rng
 
  0017f110: 0c0088c3 jal 0x0002230c rng
 
  0017f114: 00000000 nop
 
  0017f114: 00000000 nop
  0017f118: 9203003a lbu r3,0x003a(r16) load move?
+
  0017f118: 9203003a lbu r3,0x003a(r16) load move
 
  0017f11c: 00000000 nop
 
  0017f11c: 00000000 nop
  0017f120: 00430018 mult r2,r3 move*RND
+
  0017f120: 00430018 mult r2,r3 move*RND(0x8000 - 0x7fff) (Signed)
 
  0017f124: 00001012 mflo r2
 
  0017f124: 00001012 mflo r2
 
  0017f128: 04410002 bgez r2,0x0017f134
 
  0017f128: 04410002 bgez r2,0x0017f134
 
  0017f12c: 00000000 nop
 
  0017f12c: 00000000 nop
  0017f130: 24427fff addiu r2,r2,0x7fff make positive
+
  0017f130: 24427fff addiu r2,r2,0x7fff Move*RND(0x0 - 0x7fff)
  0017f134: 000213c3 sra r2,r2,0x0f
+
  0017f134: 000213c3 sra r2,r2,0x0f Move*RND(0x0 - 0x1)
  0017f138: 24440001 addiu r4,r2,0x0001 add 1
+
  0017f138: 24440001 addiu r4,r2,0x0001 Ceil(Move*RND(0x0 - 0x1)
 
  0017f13c: 308300ff andi r3,r4,0x00ff
 
  0017f13c: 308300ff andi r3,r4,0x00ff
 
  0017f140: 340200ff ori r2,r0,0x00ff
 
  0017f140: 340200ff ori r2,r0,0x00ff
  0017f144: 14620003 bne r3,r2,0x0017f154 branch if ?? !!= 0xff
+
  0017f144: 14620003 bne r3,r2,0x0017f154 branch if math above (exp/jp to earn) != 0xff
 
  0017f148: 308200ff andi r2,r4,0x00ff
 
  0017f148: 308200ff andi r2,r4,0x00ff
  0017f14c: 34040001 ori r4,r0,0x0001
+
  0017f14c: 34040001 ori r4,r0,0x0001 if exp/jp to earn is 255, set to 1 (I don't know what that logic is supposed to imply, it's not like this value is signed, and move is capped at 254 anyway)
 
  0017f150: 308200ff andi r2,r4,0x00ff
 
  0017f150: 308200ff andi r2,r4,0x00ff
  0017f154: 2c420064 sltiu r2,r2,0x0064 set if ?? < 100
+
  0017f154: 2c420064 sltiu r2,r2,0x0064 set if Exp/jp to earn < 100
  0017f158: 14400003 bne r2,r0,0x0017f168 branch if so
+
  0017f158: 14400003 bne r2,r0,0x0017f168 cap exp/jp earned to 99
 
  0017f15c: 308200ff andi r2,r4,0x00ff
 
  0017f15c: 308200ff andi r2,r4,0x00ff
 
  0017f160: 34040063 ori r4,r0,0x0063
 
  0017f160: 34040063 ori r4,r0,0x0063
  0017f164: 308200ff andi r2,r4,0x00ff ?? = 99
+
  0017f164: 308200ff andi r2,r4,0x00ff exp/jp to earn capped at 99
 
  0017f168: 8fbf0014 lw r31,0x0014(r29)
 
  0017f168: 8fbf0014 lw r31,0x0014(r29)
 
  0017f16c: 8fb00010 lw r16,0x0010(r29)
 
  0017f16c: 8fb00010 lw r16,0x0010(r29)
 
  0017f170: 27bd0018 addiu r29,r29,0x0018
 
  0017f170: 27bd0018 addiu r29,r29,0x0018
  0017f174: 03e00008 jr r31
+
  0017f174: 03e00008 jr r31 return exp/jp to earn as Move*(RND(0 - 1)) + 1 (I really thought it was the No. tiles moved that determined it, but I have been wrong before.)
 
  0017f178: 00000000 nop
 
  0017f178: 00000000 nop
</font>
 

Latest revision as of 06:47, 11 June 2022

0017f0ec: 27bdffe8 addiu r29,r29,0xffe8
0017f0f0: afb00010 sw r16,0x0010(r29)
0017f0f4: 00808021 addu r16,r4,r0			Unit data pointer
0017f0f8: 3c048019 lui r4,0x8019
0017f0fc: 9084f7f0 lbu r4,-0x0810(r4)			load number of tiles moved
0017f100: 340200fe ori r2,r0,0x00fe
0017f104: 308300ff andi r3,r4,0x00ff
0017f108: 1462000d bne r3,r2,0x0017f140			branch if No. Tiles Moved != 0xfe
0017f10c: afbf0014 sw r31,0x0014(r29)
0017f110: 0c0088c3 jal 0x0002230c				rng
0017f114: 00000000 nop
0017f118: 9203003a lbu r3,0x003a(r16)			load move
0017f11c: 00000000 nop
0017f120: 00430018 mult r2,r3					move*RND(0x8000 - 0x7fff) (Signed)
0017f124: 00001012 mflo r2
0017f128: 04410002 bgez r2,0x0017f134			
0017f12c: 00000000 nop
0017f130: 24427fff addiu r2,r2,0x7fff			Move*RND(0x0 - 0x7fff)
0017f134: 000213c3 sra r2,r2,0x0f			Move*RND(0x0 - 0x1)
0017f138: 24440001 addiu r4,r2,0x0001			Ceil(Move*RND(0x0 - 0x1)
0017f13c: 308300ff andi r3,r4,0x00ff
0017f140: 340200ff ori r2,r0,0x00ff
0017f144: 14620003 bne r3,r2,0x0017f154			branch if math above (exp/jp to earn) != 0xff
0017f148: 308200ff andi r2,r4,0x00ff
0017f14c: 34040001 ori r4,r0,0x0001			if exp/jp to earn is 255, set to 1 (I don't know what that logic is supposed to imply, it's not like this value is signed, and move is capped at 254 anyway)
0017f150: 308200ff andi r2,r4,0x00ff
0017f154: 2c420064 sltiu r2,r2,0x0064			set if Exp/jp to earn < 100
0017f158: 14400003 bne r2,r0,0x0017f168			cap exp/jp earned to 99
0017f15c: 308200ff andi r2,r4,0x00ff
0017f160: 34040063 ori r4,r0,0x0063
0017f164: 308200ff andi r2,r4,0x00ff			exp/jp to earn capped at 99
0017f168: 8fbf0014 lw r31,0x0014(r29)
0017f16c: 8fb00010 lw r16,0x0010(r29)
0017f170: 27bd0018 addiu r29,r29,0x0018
0017f174: 03e00008 jr r31				return exp/jp to earn as Move*(RND(0 - 1)) + 1 (I really thought it was the No. tiles moved that determined it, but I have been wrong before.)
0017f178: 00000000 nop