Difference between revisions of "Calculate Ability Pointers and Type"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
  Calculate Ability Pointers and Type
+
  '''Parameters''' : r4 = Ability ID
  0005a72c: 308401ff andi r4,r4,0x01ff r4 = Ability ID
+
              r5 = Previous routine Stack pointer 1
  0005a730: 000418c0 sll r3,r4,0x03 ID * 8
+
              r6 = Previous routine Stack pointer 2
  0005a734: 3c028006 lui r2,0x8006
+
  0005a738: 2442ebf0 addiu r2,r2,0xebf0
+
'''Returns''' : r2 = 0x00 if Used ability possess a data 2 table (ID < 0x170)
  0005a73c: 00621021 addu r2,r3,r2
+
          r2 = 0x01 If Ability is an Item Ability
  0005a740: aca20000 sw r2,0x0000(r5) Store Ability's Data 1 Pointer  (usually on the stack)
+
          r2 = 0x02 If Ability is a Throw Ability
  0005a744: 28820170 slti r2,r4,0x0170
+
          r2 = 0x03 If Ability is a Jump Ability
  0005a748: 10400008 beq r2,r0,0x0005a76c Branch if Ability isn't a normal  Ability
+
          r2 = 0x04 If Ability is a Charge Ability
  0005a74c: 00641023 subu r2,r3,r4 ID * 7
+
          r2 = 0x05 If Ability is a Math Ability
  0005a750: 00021040 sll r2,r2,0x01 ID * 14
+
          r2 = 0x06 If Ability is a Reaction Ability
  0005a754: 3c038006 lui r3,0x8006
+
          r2 = 0x07 If Ability is a Support Ability
  0005a758: 2463fbf0 addiu r3,r3,0xfbf0
+
          r2 = 0x08 If Ability is a Move Ability
  0005a75c: 00431021 addu r2,r2,r3
+
  0005a760: acc20000 sw r2,0x0000(r6) Store Ability's Data 2 Pointer
+
'''Store''' : On r5 0x00 Ability Data 1 Pointer
  0005a764: 08016a1f j 0x0005a87c
+
        On r6 0x00 Specific Data pointer (data 2, Item, Throw etc...)
  0005a768: 00001021 addu r2,r0,r0 r2 = 0
+
-----------------------------------------------------------------------------------------
  0005a76c: 2882017e slti r2,r4,0x017e
+
  0005a72c: 308401ff andi r4,r4,0x01ff       |{{f/std|<nowiki>r4 = Used Ability ID</nowiki>}}
  0005a770: 10400007 beq r2,r0,0x0005a790 Branch if Ability isn't an Item
+
  0005a730: 000418c0 sll r3,r4,0x03           |{{f/std|<nowiki>r3 = Used Ability ID * 8</nowiki>}}
  0005a774: 00000000 nop
+
  0005a734: 3c028006 lui r2,0x8006           |
  0005a778: 3c028006 lui r2,0x8006
+
  0005a738: 2442ebf0 addiu r2,r2,-0x1410      |{{f/std|<nowiki>r2 = 0x8005ebf0 (start of abilities data 1)</nowiki>}}
  0005a77c: 24420ea0 addiu r2,r2,0x0ea0
+
  0005a73c: 00621021 addu r2,r3,r2           |{{f/adr|<nowiki>r2 = Used Ability data 1 pointer</nowiki>}}
  0005a780: 00821021 addu r2,r4,r2
+
  0005a740: aca20000 sw r2,0x0000(r5)         |{{f/store|<nowiki>Store Ability's Data 1 Pointer  (on previous routine stack)</nowiki>}}
  0005a784: acc20000 sw r2,0x0000(r6) Store Item's Ability Pointer
+
  0005a744: 28820170 slti r2,r4,0x0170       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 170 </nowiki>}}
  0005a788: 08016a1f j 0x0005a87c
+
  0005a748: 10400008 beq r2,r0,0x0005a76c     {{f/Cond|<nowiki>If Used ability < Potion (= has a data 2 table)</nowiki>}}
  0005a78c: 34020001 ori r2,r0,0x0001 r2 = 1
+
  0005a74c: 00641023 subu r2,r3,r4                 |{{f/std|<nowiki>r2 = Used Ability ID *7</nowiki>}}
  0005a790: 2882018a slti r2,r4,0x018a
+
  0005a750: 00021040 sll r2,r2,0x01               |{{f/std|<nowiki>r2 = Used Ability ID *14</nowiki>}}
  0005a794: 10400007 beq r2,r0,0x0005a7b4 Branch if Ability isn't a Throw
+
  0005a754: 3c038006 lui r3,0x8006                 |
  0005a798: 00000000 nop
+
  0005a758: 2463fbf0 addiu r3,r3,-0x0410          |{{f/std|<nowiki>r3 = 0x8005fbf0 (Start of gata 2 table)</nowiki>}}
  0005a79c: 3c028006 lui r2,0x8006
+
  0005a75c: 00431021 addu r2,r2,r3                 |{{f/adr|<nowiki>r2 = Used ability data 2 pointer</nowiki>}}
  0005a7a0: 24420ea2 addiu r2,r2,0x0ea2
+
  0005a760: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Ability's Data 2 Pointer (previous routine stack)</nowiki>}}
  0005a7a4: 00821021 addu r2,r4,r2
+
  0005a764: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x00</nowiki>}}
  0005a7a8: acc20000 sw r2,0x0000(r6) Store Throw's Ability Pointer
+
  0005a768: 00001021 addu r2,r0,r0                 |{{f/std|<nowiki>r2 = 0x00</nowiki>}}
  0005a7ac: 08016a1f j 0x0005a87c
+
  0005a76c: 2882017e slti r2,r4,0x017e       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 17e (0x170 to 0x17d = Item abilities)</nowiki>}}
  0005a7b0: 34020002 ori r2,r0,0x0002 r2 = 2
+
  0005a770: 10400007 beq r2,r0,0x0005a790     {{f/Cond|<nowiki>If Used Ability is an item Ability</nowiki>}}
  0005a7b4: 28820196 slti r2,r4,0x0196
+
  0005a774: 00000000 nop                           |{{f/std|<nowiki> </nowiki>}}
  0005a7b8: 10400007 beq r2,r0,0x0005a7d8 Branch if Ability isn't a Jump
+
  0005a778: 3c028006 lui r2,0x8006                 |{{f/std|<nowiki> </nowiki>}}
  0005a7bc: 00041040 sll r2,r4,0x01 ID * 2
+
  0005a77c: 24420ea0 addiu r2,r2,0x0ea0           |{{f/std|<nowiki>r2 = 0x80060ea0</nowiki>}}
  0005a7c0: 3c038006 lui r3,0x8006
+
  0005a780: 00821021 addu r2,r4,r2                 |{{f/adr|<nowiki>r2 = Used ability Item pointer</nowiki>}} {{f/std|<nowiki>0x80060ea0 + 0x170 = 0x80061010 (start of Item table)</nowiki>}}
  0005a7c4: 24630d18 addiu r3,r3,0x0d18
+
  0005a784: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Ability Item's Pointer (previous routine stack)</nowiki>}}
  0005a7c8: 00431021 addu r2,r2,r3
+
  0005a788: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x01</nowiki>}}
  0005a7cc: acc20000 sw r2,0x0000(r6) Store Jump's Ability Pointer
+
  0005a78c: 34020001 ori r2,r0,0x0001             |{{f/std|<nowiki>r2 = 0x01</nowiki>}}
  0005a7d0: 08016a1f j 0x0005a87c
+
  0005a790: 2882018a slti r2,r4,0x018a       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 0x18a (0x17e to 0x189 = Throw abilities)</nowiki>}}
  0005a7d4: 34020003 ori r2,r0,0x0003 r2 = 3
+
  0005a794: 10400007 beq r2,r0,0x0005a7b4     {{f/Cond|<nowiki>If Ability is a Throw ability</nowiki>}}
  0005a7d8: 2882019e slti r2,r4,0x019e
+
  0005a798: 00000000 nop                           |{{f/std|<nowiki> </nowiki>}}
  0005a7dc: 10400007 beq r2,r0,0x0005a7fc Branch if Ability isn't a Charge
+
  0005a79c: 3c028006 lui r2,0x8006                 |{{f/std|<nowiki> </nowiki>}}
  0005a7e0: 00041040 sll r2,r4,0x01 ID * 2
+
  0005a7a0: 24420ea2 addiu r2,r2,0x0ea2           |{{f/std|<nowiki>r2 = 0x80060ea2</nowiki>}}
  0005a7e4: 3c038006 lui r3,0x8006
+
  0005a7a4: 00821021 addu r2,r4,r2                 |{{f/adr|<nowiki>r2 = Used ability thrown item pointer</nowiki>}} {{f/std|<nowiki> 0x8006ea2 + 0x18a = 0x80061020</nowiki>}}
  0005a7e8: 24630d18 addiu r3,r3,0x0d18
+
  0005a7a8: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Thrown item pointer (previous routine stack)</nowiki>}}
  0005a7ec: 00431021 addu r2,r2,r3
+
  0005a7ac: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x02</nowiki>}}
  0005a7f0: acc20000 sw r2,0x0000(r6) Store Charge's Ability Pointer
+
  0005a7b0: 34020002 ori r2,r0,0x0002             |{{f/std|<nowiki>r2 = 0x02</nowiki>}}
  0005a7f4: 08016a1f j 0x0005a87c
+
  0005a7b4: 28820196 slti r2,r4,0x0196       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 0x196 (0x18a to 0x195 = Jump Abilities ID)</nowiki>}}
  0005a7f8: 34020004 ori r2,r0,0x0004 r2 = 4
+
  0005a7b8: 10400007 beq r2,r0,0x0005a7d8     {{f/Cond|<nowiki>If Used Ability is a jump ability</nowiki>}}
  0005a7fc: 288201a6 slti r2,r4,0x01a6
+
  0005a7bc: 00041040 sll r2,r4,0x01               |{{f/std|<nowiki>r2 = Ability ID * 2</nowiki>}}
  0005a800: 10400007 beq r2,r0,0x0005a820 Branch if Ability isn't Math
+
  0005a7c0: 3c038006 lui r3,0x8006                 |
  0005a804: 00000000 nop
+
  0005a7c4: 24630d18 addiu r3,r3,0x0d18           |{{f/std|<nowiki>r3 = 0x80060d18</nowiki>}}
  0005a808: 3c028006 lui r2,0x8006
+
  0005a7c8: 00431021 addu r2,r2,r3                 |{{f/adr|<nowiki>r2 = Used Ability Range/Vertical data pointer</nowiki>}} {{f/std|<nowiki>0x80060d18 + 2*0x18a = 0x8006102c</nowiki>}}
  0005a80c: 24420eb6 addiu r2,r2,0x0eb6
+
  0005a7cc: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Jump's Ability Range/Vertical pointer</nowiki>}}
  0005a810: 00821021 addu r2,r4,r2
+
  0005a7d0: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x03</nowiki>}}
  0005a814: acc20000 sw r2,0x0000(r6) Store Math's Ability Pointer
+
  0005a7d4: 34020003 ori r2,r0,0x0003             |{{f/std|<nowiki>r2 = 0x03</nowiki>}}
  0005a818: 08016a1f j 0x0005a87c
+
  0005a7d8: 2882019e slti r2,r4,0x019e       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 0x19e (Charge Abilities)</nowiki>}}
  0005a81c: 34020005 ori r2,r0,0x0005 r2 = 5
+
  0005a7dc: 10400007 beq r2,r0,0x0005a7fc     {{f/Cond|<nowiki>If Used Ability is a charge ability</nowiki>}}
  0005a820: 288201c6 slti r2,r4,0x01c6
+
  0005a7e0: 00041040 sll r2,r4,0x01               |{{f/std|<nowiki>r2 = Ability ID * 2</nowiki>}}
  0005a824: 10400007 beq r2,r0,0x0005a844 Branch if Ability isn't a Reaction
+
  0005a7e4: 3c038006 lui r3,0x8006                 |
  0005a828: 00000000 nop
+
  0005a7e8: 24630d18 addiu r3,r3,0x0d18           |{{f/std|<nowiki>r3 = 0x80060d18</nowiki>}}
  0005a82c: 3c028006 lui r2,0x8006
+
  0005a7ec: 00431021 addu r2,r2,r3                 |{{f/adr|<nowiki>r2 = Used Ability Power/CT data pointer</nowiki>}} {{f/std|<nowiki>0x80060d18 + 2*0x96 = 0x80061044</nowiki>}}
  0005a830: 24420eb6 addiu r2,r2,0x0eb6
+
  0005a7f0: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Charge's Ability Pointer</nowiki>}}
  0005a834: 00821021 addu r2,r4,r2
+
  0005a7f4: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x04</nowiki>}}
  0005a838: acc20000 sw r2,0x0000(r6) Store Reaction's Ability Pointer
+
  0005a7f8: 34020004 ori r2,r0,0x0004             |{{f/std|<nowiki>r2 = 0x04</nowiki>}}
  0005a83c: 08016a1f j 0x0005a87c
+
  0005a7fc: 288201a6 slti r2,r4,0x01a6       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 0x1a6 (Math Abilities)</nowiki>}}
  0005a840: 34020006 ori r2,r0,0x0006 r2 = 6
+
  0005a800: 10400007 beq r2,r0,0x0005a820     {{f/Cond|<nowiki>If Used Ability is a Math Ability</nowiki>}}
  0005a844: 288201e6 slti r2,r4,0x01e6
+
  0005a804: 00000000 nop                           |{{f/std|<nowiki> </nowiki>}}
  0005a848: 14400007 bne r2,r0,0x0005a868 Branch if Ability is a Support
+
  0005a808: 3c028006 lui r2,0x8006                 |
  0005a84c: 00000000 nop
+
  0005a80c: 24420eb6 addiu r2,r2,0x0eb6           |{{f/std|<nowiki>r2 = 0x80060eb6</nowiki>}}
  0005a850: 3c028006 lui r2,0x8006
+
  0005a810: 00821021 addu r2,r4,r2                 |{{f/adr|<nowiki>r2 = Used Ability Math ID data pointer</nowiki>}} {{f/std|<nowiki> 0x80060eb6 + 0x19a = 0x80061054</nowiki>}}
  0005a854: 24420eb6 addiu r2,r2,0x0eb6
+
  0005a814: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Math's Ability Pointer</nowiki>}}
  0005a858: 00821021 addu r2,r4,r2
+
  0005a818: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x05</nowiki>}}
  0005a85c: acc20000 sw r2,0x0000(r6) Store Movement's Ability Pointer
+
  0005a81c: 34020005 ori r2,r0,0x0005             |{{f/std|<nowiki>r2 = 0x05</nowiki>}}
  0005a860: 08016a1f j 0x0005a87c
+
  0005a820: 288201c6 slti r2,r4,0x01c6       |{{f/std|<nowiki>r2 = 0x01 If Ability ID < 0x1c6</nowiki>}}
  0005a864: 34020008 ori r2,r0,0x0008 r2 = 8
+
  0005a824: 10400007 beq r2,r0,0x0005a844     {{f/Cond|<nowiki>If Used Ability is a Reaction Ability</nowiki>}}
  0005a868: 3c028006 lui r2,0x8006
+
  0005a828: 00000000 nop                           |{{f/std|<nowiki> </nowiki>}}
  0005a86c: 24420eb6 addiu r2,r2,0x0eb6
+
  0005a82c: 3c028006 lui r2,0x8006                 |
  0005a870: 00821021 addu r2,r4,r2
+
  0005a830: 24420eb6 addiu r2,r2,0x0eb6           |{{f/std|<nowiki>r2 = 0x80060eb6</nowiki>}}
  0005a874: acc20000 sw r2,0x0000(r6) Store Support's Ability Pointer
+
  0005a834: 00821021 addu r2,r4,r2                 |{{f/adr|<nowiki>r2 = Used Ability Reaction ID data pointer</nowiki>}}
  0005a878: 34020007 ori r2,r0,0x0007 r2 = 7
+
  0005a838: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Reaction's Ability ID Pointer</nowiki>}}
  0005a87c: 03e00008 jr r31
+
  0005a83c: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x06</nowiki>}}
 +
  0005a840: 34020006 ori r2,r0,0x0006             |{{f/std|<nowiki>r2 = 0x06</nowiki>}}
 +
  0005a844: 288201e6 slti r2,r4,0x01e6       |{{f/std|<nowiki>r2 = 0x01 if Ability ID < 0x1e6</nowiki>}}
 +
  0005a848: 14400007 bne r2,r0,0x0005a868     {{f/Cond|<nowiki>If Ability ID is a Move Ability (>= 0x1e6)</nowiki>}}
 +
  0005a84c: 00000000 nop                           |{{f/std|<nowiki> </nowiki>}}
 +
  0005a850: 3c028006 lui r2,0x8006                 |
 +
  0005a854: 24420eb6 addiu r2,r2,0x0eb6           |{{f/std|<nowiki>r2 = 0x80060eb6</nowiki>}}
 +
  0005a858: 00821021 addu r2,r4,r2                 |{{f/adr|<nowiki>r2 = Used Ability Move ID data pointer</nowiki>}}
 +
  0005a85c: acc20000 sw r2,0x0000(r6)             |{{f/store|<nowiki>Store Movement's Ability Pointer</nowiki>}}
 +
  0005a860: 08016a1f j 0x0005a87c                 {{f/jump|<nowiki>Jump to </nowiki>{{f/loc|<nowiki>END</nowiki>}}<nowiki> - r2 = 0x07</nowiki>}}
 +
  0005a864: 34020008 ori r2,r0,0x0008             |{{f/std|<nowiki>r2 = 0x07</nowiki>}}
 +
                                            {{f/Cond|<nowiki>Else Ability ID is a Support Ability (between 0x1c6 and 0x1e5</nowiki>}}
 +
  0005a868: 3c028006 lui r2,0x8006           |
 +
  0005a86c: 24420eb6 addiu r2,r2,0x0eb6       |{{f/std|<nowiki>r2 = 0x80060eb6</nowiki>}}
 +
  0005a870: 00821021 addu r2,r4,r2           |{{f/adr|<nowiki>r2 = Used Ability Support ID data pointer</nowiki>}}
 +
  0005a874: acc20000 sw r2,0x0000(r6)         |{{f/store|<nowiki>Store Support Ability Pointer</nowiki>}}
 +
  0005a878: 34020007 ori r2,r0,0x0007         |{{f/std|<nowiki>r2 = 0x07</nowiki>}}           
 +
  0005a87c: 03e00008 jr r31                      
 
  0005a880: 00000000 nop
 
  0005a880: 00000000 nop
 
+
=== Return locations ===
 
+
'''Battle.bin'''
 
+
  00136254: [[001361e8_-_00136320]]
== Return Locations ==
+
  00141794: [[Spell Quote determination]]
 
 
  0013624c: [[Routine at 001361e8]]
 
  0014178c: [[Routine at 0014175c]]
 

Latest revision as of 21:03, 27 February 2022

Parameters : r4 = Ability ID
             r5 = Previous routine Stack pointer 1
             r6 = Previous routine Stack pointer 2

Returns : r2 = 0x00 if Used ability possess a data 2 table (ID < 0x170)
          r2 = 0x01 If Ability is an Item Ability
          r2 = 0x02 If Ability is a Throw Ability
          r2 = 0x03 If Ability is a Jump Ability 
          r2 = 0x04 If Ability is a Charge Ability 
          r2 = 0x05 If Ability is a Math Ability
          r2 = 0x06 If Ability is a Reaction Ability 
          r2 = 0x07 If Ability is a Support Ability
          r2 = 0x08 If Ability is a Move Ability

Store : On r5 0x00 Ability Data 1 Pointer
        On r6 0x00 Specific Data pointer (data 2, Item, Throw etc...)
-----------------------------------------------------------------------------------------
0005a72c: 308401ff andi r4,r4,0x01ff        |r4 = Used Ability ID
0005a730: 000418c0 sll r3,r4,0x03           |r3 = Used Ability ID * 8
0005a734: 3c028006 lui r2,0x8006            |
0005a738: 2442ebf0 addiu r2,r2,-0x1410      |r2 = 0x8005ebf0 (start of abilities data 1)
0005a73c: 00621021 addu r2,r3,r2            |r2 = Used Ability data 1 pointer
0005a740: aca20000 sw r2,0x0000(r5)         |Store Ability's Data 1 Pointer  (on previous routine stack)
0005a744: 28820170 slti r2,r4,0x0170        |r2 = 0x01 if Ability ID < 170 
0005a748: 10400008 beq r2,r0,0x0005a76c     #If Used ability < Potion (= has a data 2 table)
0005a74c: 00641023 subu r2,r3,r4                 |r2 = Used Ability ID *7
0005a750: 00021040 sll r2,r2,0x01                |r2 = Used Ability ID *14
0005a754: 3c038006 lui r3,0x8006                 |
0005a758: 2463fbf0 addiu r3,r3,-0x0410           |r3 = 0x8005fbf0 (Start of gata 2 table)
0005a75c: 00431021 addu r2,r2,r3                 |r2 = Used ability data 2 pointer
0005a760: acc20000 sw r2,0x0000(r6)              |Store Ability's Data 2 Pointer (previous routine stack)
0005a764: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x00
0005a768: 00001021 addu r2,r0,r0                 |r2 = 0x00
0005a76c: 2882017e slti r2,r4,0x017e        |r2 = 0x01 if Ability ID < 17e (0x170 to 0x17d = Item abilities)
0005a770: 10400007 beq r2,r0,0x0005a790     #If Used Ability is an item Ability
0005a774: 00000000 nop                           | 
0005a778: 3c028006 lui r2,0x8006                 | 
0005a77c: 24420ea0 addiu r2,r2,0x0ea0            |r2 = 0x80060ea0
0005a780: 00821021 addu r2,r4,r2                 |r2 = Used ability Item pointer 0x80060ea0 + 0x170 = 0x80061010 (start of Item table)
0005a784: acc20000 sw r2,0x0000(r6)              |Store Ability Item's Pointer (previous routine stack)
0005a788: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x01
0005a78c: 34020001 ori r2,r0,0x0001              |r2 = 0x01
0005a790: 2882018a slti r2,r4,0x018a        |r2 = 0x01 if Ability ID < 0x18a (0x17e to 0x189 = Throw abilities)
0005a794: 10400007 beq r2,r0,0x0005a7b4     #If Ability is a Throw ability
0005a798: 00000000 nop                           | 
0005a79c: 3c028006 lui r2,0x8006                 | 
0005a7a0: 24420ea2 addiu r2,r2,0x0ea2            |r2 = 0x80060ea2
0005a7a4: 00821021 addu r2,r4,r2                 |r2 = Used ability thrown item pointer  0x8006ea2 + 0x18a = 0x80061020
0005a7a8: acc20000 sw r2,0x0000(r6)              |Store Thrown item pointer (previous routine stack)
0005a7ac: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x02
0005a7b0: 34020002 ori r2,r0,0x0002              |r2 = 0x02
0005a7b4: 28820196 slti r2,r4,0x0196        |r2 = 0x01 if Ability ID < 0x196 (0x18a to 0x195 = Jump Abilities ID)
0005a7b8: 10400007 beq r2,r0,0x0005a7d8     #If Used Ability is a jump ability
0005a7bc: 00041040 sll r2,r4,0x01                |r2 = Ability ID * 2
0005a7c0: 3c038006 lui r3,0x8006                 |
0005a7c4: 24630d18 addiu r3,r3,0x0d18            |r3 = 0x80060d18
0005a7c8: 00431021 addu r2,r2,r3                 |r2 = Used Ability Range/Vertical data pointer 0x80060d18 + 2*0x18a = 0x8006102c
0005a7cc: acc20000 sw r2,0x0000(r6)              |Store Jump's Ability Range/Vertical pointer
0005a7d0: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x03
0005a7d4: 34020003 ori r2,r0,0x0003              |r2 = 0x03
0005a7d8: 2882019e slti r2,r4,0x019e        |r2 = 0x01 if Ability ID < 0x19e (Charge Abilities)
0005a7dc: 10400007 beq r2,r0,0x0005a7fc     #If Used Ability is a charge ability
0005a7e0: 00041040 sll r2,r4,0x01                |r2 = Ability ID * 2
0005a7e4: 3c038006 lui r3,0x8006                 |
0005a7e8: 24630d18 addiu r3,r3,0x0d18            |r3 = 0x80060d18
0005a7ec: 00431021 addu r2,r2,r3                 |r2 = Used Ability Power/CT data pointer 0x80060d18 + 2*0x96 = 0x80061044
0005a7f0: acc20000 sw r2,0x0000(r6)              |Store Charge's Ability Pointer
0005a7f4: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x04
0005a7f8: 34020004 ori r2,r0,0x0004              |r2 = 0x04
0005a7fc: 288201a6 slti r2,r4,0x01a6        |r2 = 0x01 if Ability ID < 0x1a6 (Math Abilities)
0005a800: 10400007 beq r2,r0,0x0005a820     #If Used Ability is a Math Ability
0005a804: 00000000 nop                           | 
0005a808: 3c028006 lui r2,0x8006                 |
0005a80c: 24420eb6 addiu r2,r2,0x0eb6            |r2 = 0x80060eb6
0005a810: 00821021 addu r2,r4,r2                 |r2 = Used Ability Math ID data pointer  0x80060eb6 + 0x19a = 0x80061054
0005a814: acc20000 sw r2,0x0000(r6)              |Store Math's Ability Pointer
0005a818: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x05
0005a81c: 34020005 ori r2,r0,0x0005              |r2 = 0x05
0005a820: 288201c6 slti r2,r4,0x01c6        |r2 = 0x01 If Ability ID < 0x1c6
0005a824: 10400007 beq r2,r0,0x0005a844     #If Used Ability is a Reaction Ability
0005a828: 00000000 nop                           | 
0005a82c: 3c028006 lui r2,0x8006                 |
0005a830: 24420eb6 addiu r2,r2,0x0eb6            |r2 = 0x80060eb6
0005a834: 00821021 addu r2,r4,r2                 |r2 = Used Ability Reaction ID data pointer
0005a838: acc20000 sw r2,0x0000(r6)              |Store Reaction's Ability ID Pointer
0005a83c: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x06
0005a840: 34020006 ori r2,r0,0x0006              |r2 = 0x06
0005a844: 288201e6 slti r2,r4,0x01e6        |r2 = 0x01 if Ability ID < 0x1e6
0005a848: 14400007 bne r2,r0,0x0005a868     #If Ability ID is a Move Ability (>= 0x1e6)
0005a84c: 00000000 nop                           | 
0005a850: 3c028006 lui r2,0x8006                 |
0005a854: 24420eb6 addiu r2,r2,0x0eb6            |r2 = 0x80060eb6
0005a858: 00821021 addu r2,r4,r2                 |r2 = Used Ability Move ID data pointer
0005a85c: acc20000 sw r2,0x0000(r6)              |Store Movement's Ability Pointer
0005a860: 08016a1f j 0x0005a87c                  >>Jump to END - r2 = 0x07
0005a864: 34020008 ori r2,r0,0x0008              |r2 = 0x07
                                            #Else Ability ID is a Support Ability (between 0x1c6 and 0x1e5
0005a868: 3c028006 lui r2,0x8006            |
0005a86c: 24420eb6 addiu r2,r2,0x0eb6       |r2 = 0x80060eb6
0005a870: 00821021 addu r2,r4,r2            |r2 = Used Ability Support ID data pointer
0005a874: acc20000 sw r2,0x0000(r6)         |Store Support Ability Pointer
0005a878: 34020007 ori r2,r0,0x0007         |r2 = 0x07             
0005a87c: 03e00008 jr r31                        
0005a880: 00000000 nop

Return locations

Battle.bin
00136254: 001361e8_-_00136320
00141794: Spell Quote determination